public static void run_executes_the_expected_file_operations_when_running_an_unrealenumjob() { 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 unrealEnumDetails = new UnrealEnumDetails(GenerateEnumDefinition(), "TestEnum", unrealPackageDetails); var enumJob = new UnrealEnumJob(unrealEnumDetails, OutputDirectory, mockFileSystem); var jobRunner = new JobRunner(mockFileSystem); jobRunner.Run(new List <ICodegenJob>() { enumJob }, new List <string>() { OutputDirectory }); Assert.That(mockFileSystem.DirectoryExistsCallCount == 1); Assert.That(mockFileSystem.WriteToFileCallCount == 1); Assert.That(mockFileSystem.WrittenFiles.Count == 1); Assert.That(mockFileSystem.WrittenFiles.Contains(Path.Combine(OutputDirectory, "TestEnum.h"))); }
private List <UnrealEnumDetails> ProcessEnums(ICollection <SchemaFileRaw> schemaFiles) { var allEnumDefinitions = schemaFiles.SelectMany(schemaFile => schemaFile.enumDefinitions); qualifiedNameToEnumDefinition = allEnumDefinitions.ToDictionary(enumDefinition => enumDefinition.qualifiedName, enumDefinition => enumDefinition); var unrealEnums = new List <UnrealEnumDetails>(); foreach (var schemaFile in schemaFiles) { var packageDetails = unrealPackageDetails[schemaFile.canonicalName]; foreach (var enumDefinition in schemaFile.enumDefinitions) { string capitalisedEnumName; if (resolvedEnumToCapitalisedNames.TryGetValue(enumDefinition, out capitalisedEnumName)) { var unrealEnum = new UnrealEnumDetails(enumDefinition, capitalisedEnumName, packageDetails); unrealEnums.Add(unrealEnum); enumDefinitionToUnrealEnum.Add(enumDefinition, unrealEnum); } } } return(unrealEnums); }
public UnrealEnumJob(UnrealEnumDetails unrealEnum, string outputDirectory, IFileSystem fileSystem) : base(outputDirectory, fileSystem) { this.unrealEnum = unrealEnum; var enumHeaderFileName = unrealEnum.CapitalisedName + headerSuffix; InputFiles = new List <string>() { unrealEnum.UnderlyingPackageDetails.SourceSchema }; OutputFiles = new List <string>() { enumHeaderFileName }; }
public static void unreallisttypereference_is_initiated_as_expected_when_passed_a_list_type_reference_with_an_enum_type_as_contained_type() { var userEnumDefinition = GenerateEnumDefinition(); var unrealEnumDetails = new UnrealEnumDetails(userEnumDefinition, "TestEnum", null); var containedEnumReference = new UnrealEnumTypeReference(unrealEnumDetails); var unrealEnumTypeReference = new UnrealListTypeReference(containedEnumReference); Assert.That(unrealEnumTypeReference.UnderlyingCapitalisedName == "ImprobableCodegenTestEnum"); Assert.That(unrealEnumTypeReference.RequiredIncludes.Count == 2); Assert.That(unrealEnumTypeReference.RequiredIncludes.Contains("\"ImprobableCodegenTestEnumList.h\"")); Assert.That(unrealEnumTypeReference.RequiredIncludes.Contains("\"TestEnum.h\"")); Assert.That(unrealEnumTypeReference.UnderlyingQualifiedName == "improbable::codegen::TestEnum"); Assert.That(unrealEnumTypeReference.UnrealType == "UImprobableCodegenTestEnumList*"); Assert.That(unrealEnumTypeReference.AssignUnderlyingValueToUnrealMemberVariable("TestField", "val") == "if (TestField == nullptr) { TestField = NewObject<UImprobableCodegenTestEnumList>(this); } TestField->Init(val)"); Assert.That(unrealEnumTypeReference.ConvertUnderlyingValueToUnrealLocalVariable("val") == "NewObject<UImprobableCodegenTestEnumList>()->Init(val)"); Assert.That(unrealEnumTypeReference.ConvertUnderlyingValueToUnrealMemberVariable("val") == "NewObject<UImprobableCodegenTestEnumList>(this)->Init(val)"); Assert.That(unrealEnumTypeReference.ConvertUnrealValueToUnderlyingValue("val") == "val->GetUnderlying()"); }
public static void unrealenumtypereference_is_initiated_as_expected_when_passed_an_enum_type_reference() { var enumDefinition = GenerateEnumDefinition(); var unrealEnumDetails = new UnrealEnumDetails(enumDefinition, "TestEnum", null); var unrealEnumTypeReference = new UnrealEnumTypeReference(unrealEnumDetails); Assert.That(unrealEnumTypeReference.UnderlyingCapitalisedName == "ImprobableCodegenTestEnum"); Assert.That(unrealEnumTypeReference.RequiredIncludes.Count == 1); Assert.That(unrealEnumTypeReference.RequiredIncludes.Contains("\"TestEnum.h\"")); Assert.That(unrealEnumTypeReference.UnderlyingQualifiedName == "improbable::codegen::TestEnum"); Assert.That(unrealEnumTypeReference.UnrealType == "ETestEnum"); Assert.That(unrealEnumTypeReference.AssignUnderlyingValueToUnrealMemberVariable("TestField", "val") == "TestField = static_cast<ETestEnum>(val)"); Assert.That(unrealEnumTypeReference.ConvertUnderlyingValueToUnrealLocalVariable("val") == "static_cast<ETestEnum>(val)"); Assert.That(unrealEnumTypeReference.ConvertUnderlyingValueToUnrealMemberVariable("val") == "static_cast<ETestEnum>(val)"); Assert.That(unrealEnumTypeReference.ConvertUnrealValueToSnapshotValue("val") == "val"); Assert.That(unrealEnumTypeReference.ConvertUnrealValueToUnderlyingValue("1") == "static_cast<improbable::codegen::TestEnum>(1)"); Assert.That(unrealEnumTypeReference.DefaultInitialisationString == "static_cast<improbable::codegen::TestEnum>(0)"); Assert.That(unrealEnumTypeReference.SnapshotType == "ETestEnum"); }
public UnrealEnumTypeReference(UnrealEnumDetails unrealEnum) { ReferenceType = ReferenceType.Enum; UnderlyingQualifiedName = unrealEnum.UnderlyingQualifiedName; UnderlyingCapitalisedName = Formatting.CppQualifiedNameToCapitalisedCamelCase(UnderlyingQualifiedName); UnrealType = string.Format("E{0}", unrealEnum.CapitalisedName); RequiredIncludes = new List <string>(); RequiredIncludes.Add(string.Format("\"{0}.h\"", unrealEnum.CapitalisedName)); ConvertUnderlyingValueToUnrealMemberVariable = (cppValue) => { // Set owning object as new uobject's outer. return(string.Format("static_cast<E{0}>({1})", unrealEnum.CapitalisedName, cppValue)); }; AssignUnderlyingValueToUnrealMemberVariable = (capitalizedName, cppValue) => { // Set owning object as new uobject's outer. return(string.Format("{0} = static_cast<E{1}>({2})", capitalizedName, unrealEnum.CapitalisedName, cppValue)); }; CheckInequality = (capitalizedName, compName) => { return(string.Format("{0} != {1}", capitalizedName, compName)); }; ConvertUnderlyingValueToUnrealLocalVariable = (cppValue) => { // Set static instance package as the uobject's outer. return(string.Format("static_cast<E{0}>({1})", unrealEnum.CapitalisedName, cppValue)); }; ConvertUnrealValueToSnapshotValue = (VarName) => { return(string.Format("{0}", VarName)); }; var underlyingQualifiedName = UnderlyingQualifiedName; ConvertUnrealValueToUnderlyingValue = (unrealValue) => { return(string.Format("static_cast<{0}>({1})", underlyingQualifiedName, unrealValue)); }; DefaultInitialisationString = string.Format("static_cast<{0}>(0)", UnderlyingQualifiedName); ArgumentName = UnrealType; SnapshotType = UnrealType; UClassName = ""; DefaultValue = string.Format("static_cast<{0}>(0)", UnrealType); }
public UnrealEnumHeaderGenerator(UnrealEnumDetails unrealEnum) { this.unrealEnum = unrealEnum; }