Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 47 additions & 1 deletion test/ScriptCs.Core.Tests/FileProcessorTests.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Diagnostics.Contracts;
using System.Linq;
using Moq;
using ScriptCs.Contracts;
Expand All @@ -11,6 +12,51 @@ namespace ScriptCs.Tests
{
public class FileProcessorTests
{
public class TheParseFileMethod
{
private readonly Mock<IFileSystem> _fileSystem;

public TheParseFileMethod()
{
_fileSystem = new Mock<IFileSystem>();
_fileSystem.SetupGet(x => x.NewLine).Returns(Environment.NewLine);
_fileSystem.Setup(x => x.ReadFileLines(It.Is<string>(f => f == @"c:\test\main.csx")))
.Returns(new string[] {"main"});
_fileSystem.Setup(x => x.ReadFileLines(It.Is<string>(f => f == @"c:\test\child.csx")))
.Returns(new string[] {"child"});

_fileSystem.Setup(fs => fs.GetFullPath(It.IsAny<string>())).Returns<string>((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<string>(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<string>(f => f == path)), Times.Exactly(1));
context.LoadedScripts.ShouldContain(path);
}

private IFilePreProcessor GetFilePreProcessor()
{
return new FilePreProcessor(_fileSystem.Object, new TestLogProvider(), Enumerable.Empty<ILineProcessor>());
}
}

public class ProcessFileMethod
{
private List<string> _file1 = new List<string>
Expand Down Expand Up @@ -81,7 +127,7 @@ public void MultipleUsingStatementsShouldProduceDistinctOutput()
}

[Fact]
public void UsingStateMentsShoulAllBeAtTheTop()
public void UsingStateMentsShouldAllBeAtTheTop()
{
var processor = GetFilePreProcessor();
var result = processor.ProcessFile("script1.csx");
Expand Down
41 changes: 41 additions & 0 deletions test/ScriptCs.Core.Tests/ScriptExecutorTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,47 @@ public void ShouldTerminateScriptPacksWhenTerminateIsCalled(

public class TheEngineExecuteMethod
{
[Theory, ScriptCsAutoData]
public void ShouldSetScriptInfo_ScriptPath(
[Frozen] Mock<IScriptEngine> scriptEngine,
ScriptExecutor scriptExecutor)
{
scriptEngine.Setup(e => e.Execute(
It.IsAny<string>(),
It.IsAny<string[]>(),
It.IsAny<AssemblyReferences>(),
It.IsAny<IEnumerable<string>>(),
It.IsAny<ScriptPackSession>()));

scriptExecutor.Initialize(Enumerable.Empty<string>(), Enumerable.Empty<IScriptPack>());

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<IScriptEngine> scriptEngine,
ScriptExecutor scriptExecutor)
{
scriptEngine.Setup(e => e.Execute(
It.IsAny<string>(),
It.IsAny<string[]>(),
It.IsAny<AssemblyReferences>(),
It.IsAny<IEnumerable<string>>(),
It.IsAny<ScriptPackSession>()));

scriptExecutor.Initialize(Enumerable.Empty<string>(), Enumerable.Empty<IScriptPack>());

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<IScriptEngine> scriptEngine,
Expand Down
49 changes: 29 additions & 20 deletions test/ScriptCsMoqCustomization.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,39 +13,40 @@ void ICustomization.Customize(IFixture fixture)
this.Customize(fixture);

fixture.Register(() =>
{
var fileSystem = new Mock<IFileSystem>();
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<string>())).Returns("workingdirectory");
return fileSystem;
});
{
var fileSystem = new Mock<IFileSystem>();
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<string>())).Returns("workingdirectory");
return fileSystem;
});

fixture.Register(() =>
{
var composer = new Mock<IScriptLibraryComposer>();
composer.SetupGet(c => c.ScriptLibrariesFile).Returns("ScriptLibraries.csx");
return composer;
});
{
var composer = new Mock<IScriptLibraryComposer>();
composer.SetupGet(c => c.ScriptLibrariesFile).Returns("ScriptLibraries.csx");
return composer;
});

var logProvider = new TestLogProvider();
fixture.Register(() => logProvider);
fixture.Register<ILogProvider>(() => logProvider);

fixture.Register(()=>new AppDomainAssemblyResolver(
fixture.Register(() => new AppDomainAssemblyResolver(
fixture.Create<ILogProvider>(),
fixture.Create<IFileSystem>(),
fixture.Create<IAssemblyResolver>(),
fixture.Create<IAssemblyUtility>(),
fixture.Create<IDictionary<string, AssemblyInfo>>()));

fixture.Register(()=> new ScriptLibraryComposer(
fixture.Register(() => new ScriptLibraryComposer(
fixture.Create<IFileSystem>(),
fixture.Create<IFilePreProcessor>(),
fixture.Create<IPackageContainer>(),
Expand All @@ -69,6 +70,14 @@ void ICustomization.Customize(IFixture fixture)
fixture.Create<IConsole>(),
fixture.Create<IInstallationProvider>(),
fixture.Create<IScriptLibraryComposer>()));

fixture.Register(() => new ScriptExecutor(
fixture.Create<IFileSystem>(),
fixture.Create<IFilePreProcessor>(),
fixture.Create<IScriptEngine>(),
fixture.Create<ILogProvider>(),
fixture.Create<IScriptLibraryComposer>(),
new ScriptInfo()));
}
}
}