예제 #1
0
        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")));
        }
예제 #2
0
        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);
        }
예제 #3
0
        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()");
        }
예제 #5
0
        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");
        }
예제 #6
0
        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;
 }