33using System . Linq ;
44using Moq ;
55using ScriptCs . Contracts ;
6+ using Should ;
67using Xunit ;
78
89namespace ScriptCs . Tests
910{
11+ using ScriptCs . Exceptions ;
1012
1113 public class DebugScriptExecutorTests
1214 {
@@ -59,10 +61,13 @@ public void ShouldCompileProcessedCode()
5961 var session = new Mock < ISession > ( ) ;
6062 var submission = new Mock < ISubmission < object > > ( ) ;
6163 var compilation = new Mock < ICompilation > ( ) ;
64+ var compilationResult = new Mock < ICompilationResult > ( ) ;
6265
6366 const string PathToScript = @"C:\script.csx" ;
6467 var code = Guid . NewGuid ( ) . ToString ( ) ;
6568
69+ compilationResult . Setup ( r => r . Success ) . Returns ( true ) ;
70+
6671 filePreProcessor . Setup ( p => p . ProcessFile ( PathToScript ) ) . Returns ( code ) ;
6772
6873 scriptEngine . Setup ( e => e . CreateSession ( It . IsAny < ScriptHost > ( ) ) ) . Returns ( session . Object ) ;
@@ -73,6 +78,8 @@ public void ShouldCompileProcessedCode()
7378
7479 submission . Setup ( s => s . Compilation ) . Returns ( compilation . Object ) ;
7580
81+ compilation . Setup ( c => c . Emit ( It . IsAny < Stream > ( ) , It . IsAny < Stream > ( ) ) ) . Returns ( compilationResult . Object ) . Verifiable ( ) ;
82+
7683 var scriptExecutor = DebugScriptExecutorTests . CreateScriptExecutor (
7784 scriptEngine : scriptEngine ,
7885 fileProcessor : filePreProcessor ) ;
@@ -92,6 +99,7 @@ public void ShouldEmitCompilationProvidingPathsForDllAndPdbFiles()
9299 var session = new Mock < ISession > ( ) ;
93100 var submission = new Mock < ISubmission < object > > ( ) ;
94101 var compilation = new Mock < ICompilation > ( ) ;
102+ var compilationResult = new Mock < ICompilationResult > ( ) ;
95103
96104 var fileSystem = new Mock < IFileSystem > ( ) ;
97105
@@ -105,6 +113,8 @@ public void ShouldEmitCompilationProvidingPathsForDllAndPdbFiles()
105113 var pdbStream = new MemoryStream ( ) ;
106114 var dllStream = new MemoryStream ( ) ;
107115
116+ compilationResult . Setup ( r => r . Success ) . Returns ( true ) ;
117+
108118 scriptEngine . Setup ( e => e . CreateSession ( It . IsAny < ScriptHost > ( ) ) ) . Returns ( session . Object ) ;
109119 scriptEngine . SetupProperty ( e => e . BaseDirectory ) ;
110120
@@ -117,7 +127,7 @@ public void ShouldEmitCompilationProvidingPathsForDllAndPdbFiles()
117127 fileSystem . Setup ( fs => fs . CreateFileStream ( pdbFullPath , FileMode . OpenOrCreate ) ) . Returns ( pdbStream ) . Verifiable ( ) ;
118128 fileSystem . Setup ( fs => fs . CreateFileStream ( dllFullPath , FileMode . OpenOrCreate ) ) . Returns ( dllStream ) . Verifiable ( ) ;
119129
120- compilation . Setup ( c => c . Emit ( dllStream , pdbStream ) ) . Verifiable ( ) ;
130+ compilation . Setup ( c => c . Emit ( dllStream , pdbStream ) ) . Returns ( compilationResult . Object ) . Verifiable ( ) ;
121131
122132 var scriptExecutor = DebugScriptExecutorTests . CreateScriptExecutor ( fileSystem , scriptEngine : scriptEngine ) ;
123133
@@ -127,6 +137,44 @@ public void ShouldEmitCompilationProvidingPathsForDllAndPdbFiles()
127137 // assert
128138 compilation . Verify ( c => c . Emit ( dllStream , pdbStream ) , Times . Once ( ) ) ;
129139 }
140+
141+ [ Fact ]
142+ public void ShouldThrowCompilationExceptionIfCompilationFails ( )
143+ {
144+ // arrange
145+ var scriptEngine = new Mock < IScriptEngine > ( ) ;
146+ var session = new Mock < ISession > ( ) ;
147+ var submission = new Mock < ISubmission < object > > ( ) ;
148+ var compilation = new Mock < ICompilation > ( ) ;
149+ var compilationResult = new Mock < ICompilationResult > ( ) ;
150+
151+ const string ErrorMessage = "Error message" ;
152+ compilationResult . Setup ( r => r . Success ) . Returns ( false ) . Verifiable ( ) ;
153+ compilationResult . Setup ( r => r . ErrorMessage ) . Returns ( ErrorMessage ) . Verifiable ( ) ;
154+
155+ const string PathToScript = @"C:\script.csx" ;
156+
157+ scriptEngine . Setup ( e => e . CreateSession ( It . IsAny < ScriptHost > ( ) ) ) . Returns ( session . Object ) ;
158+ scriptEngine . SetupProperty ( e => e . BaseDirectory ) ;
159+
160+ session . Setup ( s => s . CompileSubmission < object > ( It . IsAny < string > ( ) ) ) . Returns ( submission . Object ) ;
161+ session . Setup ( s => s . Engine ) . Returns ( scriptEngine . Object ) ;
162+
163+ submission . Setup ( s => s . Compilation ) . Returns ( compilation . Object ) ;
164+
165+ compilation . Setup ( c => c . Emit ( It . IsAny < Stream > ( ) , It . IsAny < Stream > ( ) ) ) . Returns ( compilationResult . Object ) . Verifiable ( ) ;
166+
167+ var scriptExecutor = DebugScriptExecutorTests . CreateScriptExecutor ( scriptEngine : scriptEngine ) ;
168+
169+ // act + assert
170+ var exception = Assert . Throws < CompilationException > ( ( ) =>
171+ scriptExecutor . Execute ( PathToScript , Enumerable . Empty < string > ( ) , Enumerable . Empty < IScriptPack > ( ) ) ) ;
172+
173+ exception . Message . ShouldEqual ( ErrorMessage ) ;
174+
175+ compilationResult . Verify ( r => r . ErrorMessage , Times . Once ( ) ) ;
176+ compilationResult . Verify ( r => r . Success , Times . Once ( ) ) ;
177+ }
130178 }
131179 }
132180}
0 commit comments