public static void run_executes_the_expected_file_operations_when_running_an_unrealtypejob() { var mockFileSystem = GenerateMockFileSystem(); mockFileSystem.GetFileInfoMock = (path) => { var file = new MockFileWrapper(path, Path.GetDirectoryName(path), new DateTime(1, 1, 1)); file.ExistsMock = () => { return(false); }; return(file); }; mockFileSystem.GetFilesInDirectoryMock = (path, searchpattern, recursive) => { return(new List <IFile>()); }; var unrealPackageDetails = new UnrealPackageDetails("improbable.codegen.TestComponent", TestSchemaPath, "improbable.codegen"); var unrealTypeDetails = new UnrealTypeDetails(GenerateTypeDefinition("TestType", "improbable.codegen.TestType"), "TestType", new List <UnrealFieldDetails>(), unrealPackageDetails); var typeJob = new UnrealTypeJob(unrealTypeDetails, new HashSet <string>(), new HashSet <string>(), new HashSet <string>(), Path.Combine("OutputDir", "test"), mockFileSystem); var jobRunner = new JobRunner(mockFileSystem); jobRunner.Run(new List <ICodegenJob>() { typeJob }, new List <string>() { OutputDirectory }); Assert.That(mockFileSystem.DirectoryExistsCallCount == 2); Assert.That(mockFileSystem.WriteToFileCallCount == 2); Assert.That(mockFileSystem.WrittenFiles.Count == 2); Assert.That(mockFileSystem.WrittenFiles.Contains(Path.Combine(OutputDirectory, "TestType.h"))); Assert.That(mockFileSystem.WrittenFiles.Contains(Path.Combine(OutputDirectory, "TestType.cpp"))); }
public static void run_does_not_clean_output_folders_of_jobs_if_the_output_folder_contains_the_files_to_be_generated() { var mockFileSystem = GenerateMockFileSystem(); mockFileSystem.GetFilesInDirectoryMock = (path, searchpatter, recursive) => { return(new List <IFile>() { new MockFileWrapper(Path.Combine(path, "TestType.h"), path, new DateTime(1, 1, 1)), new MockFileWrapper(Path.Combine(path, "TestType.cpp"), path, new DateTime(1, 1, 1)) }); }; mockFileSystem.GetFileInfoMock = (path) => { var fileMock = new MockFileWrapper(path, Path.GetDirectoryName(path), new DateTime(1, 1, 1)); fileMock.ExistsMock = () => { return(true); }; return(fileMock); }; var unrealPackageDetails = new UnrealPackageDetails("improbable.codegen.TestComponent", TestSchemaPath, "improbable.codegen"); var cleanUnrealTypeDetails = new UnrealTypeDetails(GenerateTypeDefinition("TestType", "improbable.codegen.TestType"), "TestType", new List <UnrealFieldDetails>(), unrealPackageDetails); var cleanTypeJob = new UnrealTypeJob(cleanUnrealTypeDetails, new HashSet <string>(), new HashSet <string>(), new HashSet <string>(), OutputDirectory, mockFileSystem); var jobRunner = new JobRunner(mockFileSystem); jobRunner.Run(new List <ICodegenJob>() { cleanTypeJob }, new List <string>() { OutputDirectory }); //This validates that the output folder was not deleted Assert.That(mockFileSystem.DeleteDirectoryCallCount == 0); Assert.That(mockFileSystem.GetFilesInDirectoryCallCount == 1); //This validates that no codegen jobs were run as they were expected to not be dirty. Assert.That(mockFileSystem.WriteToFileCallCount == 0); Assert.That(mockFileSystem.DirectoryExistsCallCount == 0); Assert.That(mockFileSystem.DirectoryExistsCallCount == 0); Assert.That(mockFileSystem.WriteToFileCallCount == 0); Assert.That(cleanTypeJob.IsDirty() == false); }
public void run_does_clean_if_files_are_present_in_output_folder_that_should_not_be_there() { var mockFileSystem = GenerateMockFileSystem(); mockFileSystem.GetFilesInDirectoryMock = (path, searchpatter, recursive) => { return(new List <IFile>() { new MockFileWrapper(Path.Combine(path, "TestType.h"), path, new DateTime(1, 1, 1)), new MockFileWrapper(Path.Combine(path, "TestType.cpp"), path, new DateTime(1, 1, 1)), new MockFileWrapper(Path.Combine(path, "Invalid.cpp"), path, new DateTime(1, 1, 1)), }); }; mockFileSystem.DeleteDirectoryMock = (path) => { }; mockFileSystem.GetFileInfoMock = (path) => { var fileMock = new MockFileWrapper(path, Path.GetDirectoryName(path), new DateTime(1, 1, 1)); bool fileExists = false; var fileName = Path.GetFileName(path); if (fileName == "TestType.h" || fileName == "TestType.cpp" || fileName == "Invalid.cpp") { fileExists = true; } fileMock.ExistsMock = () => { return(fileExists); }; return(fileMock); }; var unrealPackageDetails = new UnrealPackageDetails("improbable.codegen.TestComponent", TestSchemaPath, "improbable.codegen"); var cleanUnrealTypeDetails = new UnrealTypeDetails(GenerateTypeDefinition("TestType", "improbable.codegen.TestType"), "TestType", new List <UnrealFieldDetails>(), unrealPackageDetails); var cleanTypeJob = new UnrealTypeJob(cleanUnrealTypeDetails, new HashSet <string>(), new HashSet <string>(), new HashSet <string>(), OutputDirectory, mockFileSystem); var dirtyUnrealTypeDetails = new UnrealTypeDetails(GenerateTypeDefinition("DirtyTestType", "improbable.codegen.DirtyTestType"), "DirtyTestType", new List <UnrealFieldDetails>(), unrealPackageDetails); var dirtyTypeJob = new UnrealTypeJob(dirtyUnrealTypeDetails, new HashSet <string>(), new HashSet <string>(), new HashSet <string>(), OutputDirectory, mockFileSystem); var jobRunner = new JobRunner(mockFileSystem); jobRunner.Run(new List <ICodegenJob>() { cleanTypeJob, dirtyTypeJob }, new List <string>() { OutputDirectory }); //Validate that the folder check was correct Assert.That(mockFileSystem.DeleteDirectoryCallCount == 1); Assert.That(mockFileSystem.GetFilesInDirectoryCallCount == 1); //Validate that the correct jobs were run and expected files were written Assert.That(mockFileSystem.GetFileInfoCallCount == 4); Assert.That(mockFileSystem.DirectoryExistsCallCount == 4); Assert.That(mockFileSystem.WriteToFileCallCount == 4); Assert.That(mockFileSystem.WrittenFiles.Count == 4); Assert.That(mockFileSystem.WrittenFiles.Contains(Path.Combine(OutputDirectory, "TestType.h"))); Assert.That(mockFileSystem.WrittenFiles.Contains(Path.Combine(OutputDirectory, "TestType.cpp"))); Assert.That(mockFileSystem.WrittenFiles.Contains(Path.Combine(OutputDirectory, "DirtyTestType.h"))); Assert.That(mockFileSystem.WrittenFiles.Contains(Path.Combine(OutputDirectory, "DirtyTestType.cpp"))); Assert.That(cleanTypeJob.IsDirty()); Assert.That(dirtyTypeJob.IsDirty()); }