public void ShouldCompileWhenUsingClassesFromAPassedAssemblyInstance( [Frozen] Mock <IScriptHostFactory> scriptHostFactory, [NoAutoProperties] RoslynScriptEngine engine, ScriptPackSession scriptPackSession) { // Arrange const string Code = "var x = new ScriptCs.Tests.TestMarkerClass();"; scriptHostFactory.Setup(f => f.CreateScriptHost(It.IsAny <IScriptPackManager>(), It.IsAny <string[]>())) .Returns <IScriptPackManager, ScriptEnvironment>((p, q) => new ScriptHost(p, q)); var session = new SessionState <Session> { Session = new ScriptEngine().CreateSession() }; scriptPackSession.State[RoslynScriptEngine.SessionKey] = session; var refs = new AssemblyReferences(); refs.PathReferences.Add("System"); refs.Assemblies.Add(Assembly.GetExecutingAssembly()); // Act var result = engine.Execute(Code, new string[0], refs, Enumerable.Empty <string>(), scriptPackSession); // Assert result.CompileExceptionInfo.ShouldBeNull(); result.ExecuteExceptionInfo.ShouldBeNull(); }
public void ShouldNotReturnReturnValueIfCodeExecutionDoesNotReturnValue( [Frozen] Mock <IScriptHostFactory> scriptHostFactory, [NoAutoProperties] RoslynScriptEngine engine, ScriptPackSession scriptPackSession) { // Arrange const string Code = "var theNumber = 42; //this should not return a value"; scriptHostFactory.Setup(f => f.CreateScriptHost(It.IsAny <IScriptPackManager>(), It.IsAny <string[]>())) .Returns <IScriptPackManager, string[]>((p, q) => new ScriptHost(p, new ScriptEnvironment(q))); var session = new SessionState <Session> { Session = new ScriptEngine().CreateSession() }; scriptPackSession.State[RoslynScriptEngine.SessionKey] = session; var refs = new AssemblyReferences(); refs.PathReferences.Add("System"); // Act var result = engine.Execute(Code, new string[0], refs, Enumerable.Empty <string>(), scriptPackSession); // Assert result.ReturnValue.ShouldBeNull(); }
public void ShouldSetIsPendingClosingCharToTrueIfCodeIsMissingParenthesis( [Frozen] Mock <IScriptHostFactory> scriptHostFactory, [NoAutoProperties] RoslynScriptEngine engine, ScriptPackSession scriptPackSession) { // Arrange const string Code = "System.Diagnostics.Debug.WriteLine(\"a\""; scriptHostFactory.Setup(f => f.CreateScriptHost(It.IsAny <IScriptPackManager>(), It.IsAny <string[]>())) .Returns <IScriptPackManager, string[]>((p, q) => new ScriptHost(p, new ScriptEnvironment(q))); var session = new SessionState <Session> { Session = new ScriptEngine().CreateSession() }; scriptPackSession.State[RoslynScriptEngine.SessionKey] = session; var refs = new AssemblyReferences(); refs.PathReferences.Add("System"); // Act var result = engine.Execute(Code, new string[0], refs, Enumerable.Empty <string>(), scriptPackSession); // Assert result.IsCompleteSubmission.ShouldBeFalse(); }
public void ShouldSetIsPendingClosingCharToTrueIfCodeIsMissingCurlyBracket( [Frozen] Mock <IScriptHostFactory> scriptHostFactory, [NoAutoProperties] RoslynScriptEngine engine, ScriptPackSession scriptPackSession) { // Arrange const string Code = "class test {"; scriptHostFactory.Setup(f => f.CreateScriptHost(It.IsAny <IScriptPackManager>(), It.IsAny <string[]>())) .Returns <IScriptPackManager, string[]>((p, q) => new ScriptHost(p, q)); var session = new SessionState <Session> { Session = new ScriptEngine().CreateSession() }; scriptPackSession.State[RoslynScriptEngine.SessionKey] = session; // Act var result = engine.Execute( Code, new string[0], new[] { "System" }, Enumerable.Empty <string>(), scriptPackSession); // Assert result.IsPendingClosingChar.ShouldBeTrue(); result.ExpectingClosingChar.ShouldEqual('}'); }
public void ShouldNotMarkSubmissionsAsIncompleteWhenRunningScript( [Frozen] Mock <IScriptHostFactory> scriptHostFactory, [NoAutoProperties] RoslynScriptEngine engine, ScriptPackSession scriptPackSession) { // Arrange const string Code = "class test {"; var session = new SessionState <Session> { Session = new ScriptEngine().CreateSession() }; scriptPackSession.State[RoslynScriptEngine.SessionKey] = session; var refs = new AssemblyReferences(); refs.PathReferences.Add("System"); engine.FileName = "test.csx"; // Act var result = engine.Execute( Code, new string[0], refs, Enumerable.Empty <string>(), scriptPackSession); // Assert result.IsCompleteSubmission.ShouldBeTrue(); result.CompileExceptionInfo.ShouldNotBeNull(); }
public void ShouldSetIsPendingClosingCharToTrueIfCodeIsMissingSquareBracket( [Frozen] Mock <IScriptHostFactory> scriptHostFactory, [NoAutoProperties] RoslynScriptEngine engine, ScriptPackSession scriptPackSession) { // Arrange const string Code = "var x = new[1] { 1 }; var y = x[0"; scriptHostFactory.Setup(f => f.CreateScriptHost(It.IsAny <IScriptPackManager>(), It.IsAny <string[]>())) .Returns <IScriptPackManager, string[]>((p, q) => new ScriptHost(p, new ScriptEnvironment(q))); var session = new SessionState <Session> { Session = new ScriptEngine().CreateSession() }; scriptPackSession.State[RoslynScriptEngine.SessionKey] = session; var refs = new AssemblyReferences(); refs.PathReferences.Add("System"); // Act var result = engine.Execute(Code, new string[0], refs, Enumerable.Empty <string>(), scriptPackSession); // Assert result.IsPendingClosingChar.ShouldBeTrue(); result.ExpectingClosingChar.ShouldEqual(']'); }
public void ShouldReturnInvalidNamespacesIfCS0241Encountered( [Frozen] Mock <IScriptHostFactory> scriptHostFactory, [NoAutoProperties] RoslynScriptEngine engine, ScriptPackSession scriptPackSession) { var session = new SessionState <Session> { Session = new ScriptEngine().CreateSession() }; scriptPackSession.State[RoslynScriptEngine.SessionKey] = session; // Act var result = engine.Execute(string.Empty, new string[0], new AssemblyReferences(), new[] { "foo" }, scriptPackSession); // Assert result.CompileExceptionInfo.ShouldNotBeNull(); result.InvalidNamespaces.ShouldContain("foo"); }
public void ShouldReturnReturnValueIfCodeExecutionReturnsValue( [Frozen] Mock <IScriptHostFactory> scriptHostFactory, [NoAutoProperties] RoslynScriptEngine engine, ScriptPackSession scriptPackSession) { const string Code = "\"Hello\" //this should return \"Hello\""; var session = new SessionState <Session> { Session = new ScriptEngine().CreateSession() }; scriptPackSession.State[RoslynScriptEngine.SessionKey] = session; var refs = new AssemblyReferences(new[] { "System" }); // Act var result = engine.Execute(Code, new string[0], refs, Enumerable.Empty <string>(), scriptPackSession); // Assert result.ReturnValue.ShouldEqual("Hello"); }
public void ShouldCreateScriptHostWithContexts( [Frozen] Mock <IScriptHostFactory> scriptHostFactory, [Frozen] Mock <IScriptPack> scriptPack, ScriptPackSession scriptPackSession, [NoAutoProperties] RoslynScriptEngine engine) { // Arrange const string Code = "var a = 0;"; scriptHostFactory.Setup(f => f.CreateScriptHost(It.IsAny <IScriptPackManager>(), It.IsAny <string[]>())) .Returns <IScriptPackManager, string[]>((p, q) => new ScriptHost(p, new ScriptEnvironment(q))); scriptPack.Setup(p => p.Initialize(It.IsAny <IScriptPackSession>())); scriptPack.Setup(p => p.GetContext()).Returns((IScriptPackContext)null); // Act engine.Execute(Code, new string[0], new AssemblyReferences(), Enumerable.Empty <string>(), scriptPackSession); // Assert scriptHostFactory.Verify(f => f.CreateScriptHost(It.IsAny <IScriptPackManager>(), It.IsAny <string[]>())); }
public void ShouldInitializeScriptLibraryWrapperHost( [Frozen] Mock <IScriptHostFactory> scriptHostFactory, Mock <IScriptPackManager> manager, [NoAutoProperties] RoslynScriptEngine engine, ScriptPackSession scriptPackSession ) { // Arrange const string Code = "var theNumber = 42; //this should compile"; var refs = new AssemblyReferences(new[] { "System" }); scriptHostFactory.Setup(s => s.CreateScriptHost(It.IsAny <IScriptPackManager>(), It.IsAny <string[]>())) .Returns(new ScriptHost(manager.Object, null)); // Act engine.Execute(Code, new string[0], refs, Enumerable.Empty <string>(), scriptPackSession); // Assert ScriptLibraryWrapper.ScriptHost.ShouldNotEqual(null); }
public void ShouldNotReturnReturnValueIfCodeExecutionDoesNotReturnValue( [Frozen] Mock <IScriptHostFactory> scriptHostFactory, [NoAutoProperties] RoslynScriptEngine engine, ScriptPackSession scriptPackSession) { // Arrange const string Code = "var theNumber = 42; //this should not return a value"; var session = new SessionState <Session> { Session = new ScriptEngine().CreateSession() }; scriptPackSession.State[RoslynScriptEngine.SessionKey] = session; var refs = new AssemblyReferences(new[] { "System" }); // Act var result = engine.Execute(Code, new string[0], refs, Enumerable.Empty <string>(), scriptPackSession); // Assert result.ReturnValue.ShouldBeNull(); }
public void ShouldReturnExecuteExceptionIfCodeExecutionThrowsException( [Frozen] Mock <IScriptHostFactory> scriptHostFactory, [NoAutoProperties] RoslynScriptEngine engine, ScriptPackSession scriptPackSession) { // Arrange const string Code = "throw new System.Exception(); //this should throw an Exception"; var session = new SessionState <Session> { Session = new ScriptEngine().CreateSession() }; scriptPackSession.State[RoslynScriptEngine.SessionKey] = session; var refs = new AssemblyReferences(new[] { "System" }); // Act var result = engine.Execute(Code, new string[0], refs, Enumerable.Empty <string>(), scriptPackSession); // Assert result.ExecuteExceptionInfo.ShouldNotBeNull(); }
public void ShouldNotReturnCompileExceptionIfCodeDoesCompile( [Frozen] Mock <IScriptHostFactory> scriptHostFactory, [NoAutoProperties] RoslynScriptEngine engine, ScriptPackSession scriptPackSession) { // Arrange const string Code = "var theNumber = 42; //this should compile"; var session = new SessionState <Session> { Session = new ScriptEngine().CreateSession() }; scriptPackSession.State[RoslynScriptEngine.SessionKey] = session; var refs = new AssemblyReferences(); refs.PathReferences.Add("System"); // Act var result = engine.Execute(Code, new string[0], refs, Enumerable.Empty <string>(), scriptPackSession); // Assert result.CompileExceptionInfo.ShouldBeNull(); }
public void ShouldRemoveInvalidNamespacesFromSessionStateAndEngine( [Frozen] Mock <IScriptHostFactory> scriptHostFactory, [NoAutoProperties] RoslynScriptEngine engine, ScriptPackSession scriptPackSession) { var session = new SessionState <Session> { Session = new ScriptEngine().CreateSession() }; scriptPackSession.State[RoslynScriptEngine.SessionKey] = session; // Act engine.Execute(string.Empty, new string[0], new AssemblyReferences(), new[] { "System", "foo" }, scriptPackSession); // Assert session.Namespaces.ShouldNotBeEmpty(); session.Namespaces.ShouldNotContain("foo"); var pendingNamespacesField = session.Session.GetType().GetField("pendingNamespaces", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic); var pendingNamespacesValue = (ReadOnlyArray <string>)pendingNamespacesField.GetValue(session.Session); pendingNamespacesValue.AsEnumerable().ShouldNotBeEmpty(); pendingNamespacesValue.AsEnumerable().ShouldNotContain("foo"); }
public void ShouldNotReturnExecuteExceptionIfCodeExecutionDoesNotThrowAnException( [Frozen] Mock <IScriptHostFactory> scriptHostFactory, [NoAutoProperties] RoslynScriptEngine engine, ScriptPackSession scriptPackSession) { // Arrange const string Code = "var theNumber = 42; //this should not throw an Exception"; scriptHostFactory.Setup(f => f.CreateScriptHost(It.IsAny <IScriptPackManager>(), It.IsAny <string[]>())) .Returns <IScriptPackManager, string[]>((p, q) => new ScriptHost(p, q)); var session = new SessionState <Session> { Session = new ScriptEngine().CreateSession() }; scriptPackSession.State[RoslynScriptEngine.SessionKey] = session; // Act var result = engine.Execute(Code, new string[0], new[] { "System" }, Enumerable.Empty <string>(), scriptPackSession); // Assert result.ExecuteExceptionInfo.ShouldBeNull(); }
public void ShouldReturnReturnValueIfCodeExecutionReturnsValue( [Frozen] Mock <IScriptHostFactory> scriptHostFactory, [NoAutoProperties] RoslynScriptEngine engine, ScriptPackSession scriptPackSession) { const string Code = "\"Hello\" //this should return \"Hello\""; // Arrange scriptHostFactory.Setup(f => f.CreateScriptHost(It.IsAny <IScriptPackManager>(), It.IsAny <string[]>())) .Returns <IScriptPackManager, string[]>((p, q) => new ScriptHost(p, q)); var session = new SessionState <Session> { Session = new ScriptEngine().CreateSession() }; scriptPackSession.State[RoslynScriptEngine.SessionKey] = session; // Act var result = engine.Execute(Code, new string[0], new[] { "System" }, Enumerable.Empty <string>(), scriptPackSession); // Assert result.ReturnValue.ShouldEqual("Hello"); }
public void ShouldSetIsPendingClosingCharToTrueIfCodeIsMissingCurlyBracket( [Frozen] Mock <IScriptHostFactory> scriptHostFactory, [NoAutoProperties] RoslynScriptEngine engine, ScriptPackSession scriptPackSession) { // Arrange const string Code = "class test {"; var session = new SessionState <Session> { Session = new ScriptEngine().CreateSession() }; scriptPackSession.State[RoslynScriptEngine.SessionKey] = session; var refs = new AssemblyReferences(); refs.PathReferences.Add("System"); // Act var result = engine.Execute( Code, new string[0], refs, Enumerable.Empty <string>(), scriptPackSession); // Assert result.IsCompleteSubmission.ShouldBeFalse(); }