Skip to content

Instantly share code, notes, and snippets.

@DamianReeves
Last active November 18, 2016 14:57
Show Gist options
  • Save DamianReeves/512a7be6b93dd8057aa92837760e599d to your computer and use it in GitHub Desktop.
Save DamianReeves/512a7be6b93dd8057aa92837760e599d to your computer and use it in GitHub Desktop.
Cake Alias Tests
using Cake.Core;
using Cake.Core.Diagnostics;
using Cake.Core.IO;
using Cake.Core.Tooling;
using NSubstitute;
namespace Mohawk.Cake.Fixtures
{
public sealed class CakeContextFixture
{
public IFileSystem FileSystem { get; set; }
public ICakeEnvironment Environment { get; set; }
public IGlobber Globber { get; set; }
public ICakeLog Log { get; set; }
public ICakeArguments Arguments { get; set; }
public IProcessRunner ProcessRunner { get; set; }
public IRegistry Registry { get; set; }
public IToolLocator Tools { get; set; }
public CakeContextFixture()
{
FileSystem = Substitute.For<IFileSystem>();
Environment = Substitute.For<ICakeEnvironment>();
Globber = Substitute.For<IGlobber>();
Log = Substitute.For<ICakeLog>();
Arguments = Substitute.For<ICakeArguments>();
ProcessRunner = Substitute.For<IProcessRunner>();
Registry = Substitute.For<IRegistry>();
Tools = Substitute.For<IToolLocator>();
}
public CakeContext CreateContext()
{
return new CakeContext(FileSystem, Environment, Globber,
Log, Arguments, ProcessRunner, Registry, Tools);
}
}
}
using Cake.Core;
using Cake.Core.IO;
using Cake.Testing;
namespace Mohawk.Cake.Fixtures
{
internal class FileSystemFixture
{
public ICakeEnvironment Environment { get; set; }
public IFileSystem FileSystem { get; set; }
public FileSystemFixture(bool windows = true)
{
if (windows)
{
Environment = FakeEnvironment.CreateWindowsEnvironment();
}
else
{
Environment = FakeEnvironment.CreateUnixEnvironment();
}
FileSystem = CreateFileSystem(Environment);
}
private FakeFileSystem CreateFileSystem(ICakeEnvironment environment)
{
var fileSystem = new FakeFileSystem(environment);
ConfigureFileSystem(fileSystem, environment);
return fileSystem;
}
protected virtual void ConfigureFileSystem(FakeFileSystem fileSystem, ICakeEnvironment environment)
{
if (environment.Platform.IsUnix())
{
PrepareUnixSystem(fileSystem);
}
else
{
PrepareWindowsSystem(fileSystem);
}
}
private void PrepareWindowsSystem(FakeFileSystem fileSystem)
{
fileSystem.CreateDirectory("C:/DEV");
fileSystem.CreateDirectory("C:/DEV/repos");
fileSystem.CreateDirectory("C:/DEV/repos/FakeProjects");
fileSystem.CreateDirectory("C:/DEV/repos/FakeProjects/Foo");
fileSystem.CreateDirectory("C:/DEV/repos/FakeProjects/Foo/src");
fileSystem.CreateDirectory("C:/DEV/repos/FakeProjects/Foo/src/Foo");
fileSystem.CreateFile("C:/DEV/repos/FakeProjects/Foo/src/Foo/Foo.csproj");
fileSystem.CreateFile("C:/DEV/repos/FakeProjects/Foo/src/Foo/Foo.xproj");
fileSystem.CreateFile("C:/DEV/repos/FakeProjects/Foo/src/Foo/project.json");
fileSystem.CreateFile("C:/DEV/repos/FakeProjects/Foo/src/Foo/Foo.nuspec");
fileSystem.CreateDirectory("C:/DEV/repos/FakeProjects/Foo/src/Bar");
fileSystem.CreateFile("C:/DEV/repos/FakeProjects/Foo/src/Bar/Bar.project.json");
fileSystem.CreateDirectory("C:/DEV/repos/FakeProjects/Foo/src/Baz");
fileSystem.CreateFile("C:/DEV/repos/FakeProjects/Foo/src/Baz/project.json");
}
private void PrepareUnixSystem(FakeFileSystem fileSystem)
{
fileSystem.CreateDirectory("/DEV");
fileSystem.CreateDirectory("/DEV/repos");
fileSystem.CreateDirectory("/DEV/repos/FakeProjects");
fileSystem.CreateDirectory("/DEV/repos/FakeProjects/Foo");
fileSystem.CreateDirectory("/DEV/repos/FakeProjects/Foo/src");
fileSystem.CreateDirectory("/DEV/repos/FakeProjects/Foo/src/Foo");
fileSystem.CreateFile("/DEV/repos/FakeProjects/Foo/src/Foo/Foo.csproj");
fileSystem.CreateFile("/DEV/repos/FakeProjects/Foo/src/Foo/Foo.xproj");
fileSystem.CreateFile("/DEV/repos/FakeProjects/Foo/src/Foo/project.json");
fileSystem.CreateFile("/DEV/repos/FakeProjects/Foo/src/Foo/Foo.nuspec");
fileSystem.CreateDirectory("/DEV/repos/FakeProjects/Foo/src/Bar");
fileSystem.CreateFile("/DEV/repos/FakeProjects/Foo/src/Bar/Bar.project.json");
fileSystem.CreateDirectory("/DEV/repos/FakeProjects/Foo/src/Baz");
fileSystem.CreateFile("/DEV/repos/FakeProjects/Foo/src/Baz/project.json");
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Cake.Core;
using Cake.Core.IO;
using FluentAssertions;
using Mohawk.Cake.Fixtures;
using NSubstitute;
using Xunit;
namespace Mohawk.Cake
{
public class ProjectInfoAliasesSpecs
{
public class GetProjectsByPattern
{
[Fact]
public void GlobberTest()
{
var contextFixture = new CakeContextFixture();
var fileSystemFixture = new FileSystemFixture();
contextFixture.FileSystem = fileSystemFixture.FileSystem;
contextFixture.Globber = new Globber(fileSystemFixture.FileSystem, fileSystemFixture.Environment);
var context = contextFixture.CreateContext();
context.Environment.WorkingDirectory = new DirectoryPath("C:/DEV/repos/FakeProjects/Foo");
var results = contextFixture.Globber.Match("./**/project.json");
results.Should().NotBeEmpty();
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment