diff --git a/test/ScriptCs.Core.Tests/FileProcessorTests.cs b/test/ScriptCs.Core.Tests/FileProcessorTests.cs index 06f42f63..ced3d761 100644 --- a/test/ScriptCs.Core.Tests/FileProcessorTests.cs +++ b/test/ScriptCs.Core.Tests/FileProcessorTests.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Diagnostics.Contracts; using System.Linq; using Moq; using ScriptCs.Contracts; @@ -11,6 +12,51 @@ namespace ScriptCs.Tests { public class FileProcessorTests { + public class TheParseFileMethod + { + private readonly Mock _fileSystem; + + public TheParseFileMethod() + { + _fileSystem = new Mock(); + _fileSystem.SetupGet(x => x.NewLine).Returns(Environment.NewLine); + _fileSystem.Setup(x => x.ReadFileLines(It.Is(f => f == @"c:\test\main.csx"))) + .Returns(new string[] {"main"}); + _fileSystem.Setup(x => x.ReadFileLines(It.Is(f => f == @"c:\test\child.csx"))) + .Returns(new string[] {"child"}); + + _fileSystem.Setup(fs => fs.GetFullPath(It.IsAny())).Returns((path) => path); + } + + [Fact] + public void SetsTheScriptPath() + { + var path = @"c:\test\main.csx"; + var processor = GetFilePreProcessor(); + var context = new FileParserContext(); + processor.ParseFile(path, context); + _fileSystem.Verify(x => x.ReadFileLines(It.Is(f => f == path)), Times.Exactly(1)); + context.ScriptPath.ShouldEqual(path); + } + + [Fact] + public void AddsLoadedScripts() + { + var path = @"c:\test\child.csx"; + var processor = GetFilePreProcessor(); + var context = new FileParserContext(); + context.ScriptPath = @"c:\test\main.csx"; + processor.ParseFile(path, context); + _fileSystem.Verify(x => x.ReadFileLines(It.Is(f => f == path)), Times.Exactly(1)); + context.LoadedScripts.ShouldContain(path); + } + + private IFilePreProcessor GetFilePreProcessor() + { + return new FilePreProcessor(_fileSystem.Object, new TestLogProvider(), Enumerable.Empty()); + } + } + public class ProcessFileMethod { private List _file1 = new List @@ -81,7 +127,7 @@ public void MultipleUsingStatementsShouldProduceDistinctOutput() } [Fact] - public void UsingStateMentsShoulAllBeAtTheTop() + public void UsingStateMentsShouldAllBeAtTheTop() { var processor = GetFilePreProcessor(); var result = processor.ProcessFile("script1.csx"); diff --git a/test/ScriptCs.Core.Tests/ScriptExecutorTests.cs b/test/ScriptCs.Core.Tests/ScriptExecutorTests.cs index 3e784188..e0f360df 100644 --- a/test/ScriptCs.Core.Tests/ScriptExecutorTests.cs +++ b/test/ScriptCs.Core.Tests/ScriptExecutorTests.cs @@ -105,6 +105,47 @@ public void ShouldTerminateScriptPacksWhenTerminateIsCalled( public class TheEngineExecuteMethod { + [Theory, ScriptCsAutoData] + public void ShouldSetScriptInfo_ScriptPath( + [Frozen] Mock scriptEngine, + ScriptExecutor scriptExecutor) + { + scriptEngine.Setup(e => e.Execute( + It.IsAny(), + It.IsAny(), + It.IsAny(), + It.IsAny>(), + It.IsAny())); + + scriptExecutor.Initialize(Enumerable.Empty(), Enumerable.Empty()); + + var result = new FilePreProcessorResult(); + result.ScriptPath = "Main.csx"; + scriptExecutor.EngineExecute("", new string[] {}, result); + scriptExecutor.ScriptInfo.ScriptPath.ShouldEqual("Main.csx"); + } + + [Theory, ScriptCsAutoData] + public void ShouldPopulateScriptInfo_LoadedScript( + [Frozen] Mock scriptEngine, + ScriptExecutor scriptExecutor) + { + scriptEngine.Setup(e => e.Execute( + It.IsAny(), + It.IsAny(), + It.IsAny(), + It.IsAny>(), + It.IsAny())); + + scriptExecutor.Initialize(Enumerable.Empty(), Enumerable.Empty()); + + var result = new FilePreProcessorResult(); + result.ScriptPath = "Main.csx"; + result.LoadedScripts.Add("Child.csx"); + scriptExecutor.EngineExecute("", new string[] { }, result); + scriptExecutor.ScriptInfo.LoadedScripts.First().ShouldEqual("Child.csx"); + } + [Theory, ScriptCsAutoData] public void ShouldAddReferenceToEachDestinationFile( [Frozen] Mock scriptEngine, diff --git a/test/ScriptCsMoqCustomization.cs b/test/ScriptCsMoqCustomization.cs index 3525c6da..4426cc37 100644 --- a/test/ScriptCsMoqCustomization.cs +++ b/test/ScriptCsMoqCustomization.cs @@ -13,39 +13,40 @@ void ICustomization.Customize(IFixture fixture) this.Customize(fixture); fixture.Register(() => - { - var fileSystem = new Mock(); - fileSystem.SetupGet(f => f.PackagesFile).Returns("scriptcs_packages.config"); - fileSystem.SetupGet(f => f.PackagesFolder).Returns("scriptcs_packages"); - fileSystem.SetupGet(f => f.BinFolder).Returns("scriptcs_bin"); - fileSystem.SetupGet(f => f.DllCacheFolder).Returns(".scriptcs_cache"); - fileSystem.SetupGet(f => f.NugetFile).Returns("scriptcs_nuget.config"); - fileSystem.SetupGet(f => f.CurrentDirectory).Returns("workingdirectory"); - fileSystem.Setup(f => f.FileExists(@"workingdirectory\scriptcs_packages\PackageScripts.csx")).Returns(false); - fileSystem.Setup(f => f.DirectoryExists(@"workingdirectory\scriptcs_packages")).Returns(true); - fileSystem.Setup(f => f.GetWorkingDirectory(It.IsAny())).Returns("workingdirectory"); - return fileSystem; - }); + { + var fileSystem = new Mock(); + fileSystem.SetupGet(f => f.PackagesFile).Returns("scriptcs_packages.config"); + fileSystem.SetupGet(f => f.PackagesFolder).Returns("scriptcs_packages"); + fileSystem.SetupGet(f => f.BinFolder).Returns("scriptcs_bin"); + fileSystem.SetupGet(f => f.DllCacheFolder).Returns(".scriptcs_cache"); + fileSystem.SetupGet(f => f.NugetFile).Returns("scriptcs_nuget.config"); + fileSystem.SetupGet(f => f.CurrentDirectory).Returns("workingdirectory"); + fileSystem.Setup(f => f.FileExists(@"workingdirectory\scriptcs_packages\PackageScripts.csx")) + .Returns(false); + fileSystem.Setup(f => f.DirectoryExists(@"workingdirectory\scriptcs_packages")).Returns(true); + fileSystem.Setup(f => f.GetWorkingDirectory(It.IsAny())).Returns("workingdirectory"); + return fileSystem; + }); fixture.Register(() => - { - var composer = new Mock(); - composer.SetupGet(c => c.ScriptLibrariesFile).Returns("ScriptLibraries.csx"); - return composer; - }); + { + var composer = new Mock(); + composer.SetupGet(c => c.ScriptLibrariesFile).Returns("ScriptLibraries.csx"); + return composer; + }); var logProvider = new TestLogProvider(); fixture.Register(() => logProvider); fixture.Register(() => logProvider); - fixture.Register(()=>new AppDomainAssemblyResolver( + fixture.Register(() => new AppDomainAssemblyResolver( fixture.Create(), fixture.Create(), fixture.Create(), fixture.Create(), fixture.Create>())); - fixture.Register(()=> new ScriptLibraryComposer( + fixture.Register(() => new ScriptLibraryComposer( fixture.Create(), fixture.Create(), fixture.Create(), @@ -69,6 +70,14 @@ void ICustomization.Customize(IFixture fixture) fixture.Create(), fixture.Create(), fixture.Create())); + + fixture.Register(() => new ScriptExecutor( + fixture.Create(), + fixture.Create(), + fixture.Create(), + fixture.Create(), + fixture.Create(), + new ScriptInfo())); } } }