private List <UnrealCommandDetails> ProcessCommands(ICollection <SchemaFileRaw> schemaFiles) { var commandDetailsList = new List <UnrealCommandDetails>(); foreach (var schemaFile in schemaFiles) { var packageDetails = unrealPackageDetails[schemaFile.canonicalName]; if (packageDetails.IsAutoGenerated) { continue; } foreach (var componentDefinition in schemaFile.componentDefinitions) { var capitalisedComponentName = resolvedComponentToCapitalisedNames[componentDefinition]; foreach (var commandDefinition in componentDefinition.commandDefinitions) { var capitalisedCommandName = resolvedCommandToCapitalisedNames[commandDefinition]; var qualifiedComponentName = Formatting.QualifiedNameToCppQualifiedName(componentDefinition.qualifiedName); var requestTypeReference = GenerateUnrealTypeReference(commandDefinition.requestType); var responseTypeReference = GenerateUnrealTypeReference(commandDefinition.responseType); var newCommand = new UnrealCommandDetails(commandDefinition, capitalisedCommandName, qualifiedComponentName, capitalisedComponentName, requestTypeReference, responseTypeReference, packageDetails); if (!commandDetailsList.Exists(x => IsConflicting(x, newCommand))) { commandDetailsList.Add(newCommand); } } } } return(commandDetailsList); }
public static void unrealcommanddetails_has_the_correct_underlying_capitalised_name_upon_creation() { var capitalisedName = "CapitalisedName"; var qualifiedName = "improbable.codegen.Test"; var capitalisedOwnerComponent = "OwnerComponent"; var commandDefinition = GenerateCommandDefinition("Test", new TypeReferenceRaw { sourceReference = new SourceReferenceRaw { line = "1", column = "1" }, builtInType = "double" }, new TypeReferenceRaw { sourceReference = new SourceReferenceRaw { line = "1", column = "1" }, builtInType = "double" }); var packageDetails = GeneratePackageDetails(); var requestTypeReference = new UnrealBuiltInTypeReference(commandDefinition.requestType); var responseTypeReference = new UnrealBuiltInTypeReference(commandDefinition.responseType); var commandDetails = new UnrealCommandDetails(commandDefinition, capitalisedName, qualifiedName, capitalisedOwnerComponent, requestTypeReference, responseTypeReference, packageDetails); Assert.That(commandDetails.UnderlyingCapitalisedName == Formatting.SnakeCaseToCapitalisedCamelCase(commandDefinition.name), "the field UnderlyingCapitalisedName did not have the expected value upon creation"); }
public static void run_executes_the_expected_file_operations_when_running_an_unrealcommandjob() { 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 responseTypeReference = new UnrealBuiltInTypeReference(GenerateTypeReferenceRaw()); var requestTypeReference = new UnrealBuiltInTypeReference(GenerateTypeReferenceRaw()); var unrealCommandDetails = new UnrealCommandDetails(GenerateCommandDefinition(), "TestCommand", "improbable.codegen.TestComponent", "TestComponent", requestTypeReference, responseTypeReference, unrealPackageDetails); var commandJob = new UnrealCommandJob(unrealCommandDetails, Path.Combine("OutputDir", "test"), mockFileSystem); var jobRunner = new JobRunner(mockFileSystem); jobRunner.Run(new List <ICodegenJob>() { commandJob }, 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, "TestCommandCommandResponder.h"))); Assert.That(mockFileSystem.WrittenFiles.Contains(Path.Combine(OutputDirectory, "TestCommandCommandResponder.cpp"))); }
public static void unrealcommanddetails_has_the_correct_unreal_command_delegate_name_upon_creation() { var capitalisedName = "CapitalisedName"; var qualifiedOwnerName = "improbable.codegen.Test"; var captialisedOwnerName = "improbable.codegen.OwnerComponent"; var commandDefinition = GenerateCommandDefinition("Test", new TypeReferenceRaw { sourceReference = new SourceReferenceRaw { line = "1", column = "1" }, builtInType = null, userType = "DamageResponse" }, new TypeReferenceRaw { sourceReference = new SourceReferenceRaw { line = "1", column = "1" }, builtInType = null, userType = "DamageRequest" }); var packageDetails = GeneratePackageDetails(); var fieldDefinitionFloat = ModelTypeFactory.GenerateFieldDefinition("test", "1", new TypeReferenceRaw { sourceReference = new SourceReferenceRaw { line = "1", column = "1" }, builtInType = "float" }); var fieldDefinitionInt32 = ModelTypeFactory.GenerateFieldDefinition("test", "1", new TypeReferenceRaw { sourceReference = new SourceReferenceRaw { line = "1", column = "1" }, builtInType = "int32" }); var userTypeDefinition = ModelTypeFactory.GenerateTypeDefinition("TestType", "improbable.codegen.TestType", null, null, new FieldDefinitionRaw[] { fieldDefinitionFloat, fieldDefinitionInt32 }); var unrealFieldDetails = new List <UnrealFieldDetails>(); unrealFieldDetails.Add(new UnrealFieldDetails(fieldDefinitionFloat, new UnrealBuiltInTypeReference(fieldDefinitionFloat.singularType))); unrealFieldDetails.Add(new UnrealFieldDetails(fieldDefinitionInt32, new UnrealBuiltInTypeReference(fieldDefinitionInt32.singularType))); var unrealTypeDetails = new UnrealTypeDetails(userTypeDefinition, "TestType", unrealFieldDetails, null); var requestTypeReference = new UnrealUserTypeReference(unrealTypeDetails); var responseTypeReference = new UnrealUserTypeReference(unrealTypeDetails); var commandDetails = new UnrealCommandDetails(commandDefinition, capitalisedName, qualifiedOwnerName, captialisedOwnerName, requestTypeReference, responseTypeReference, packageDetails); Assert.That(commandDetails.UnrealCommandDelegateName == string.Format("F{0}Command", capitalisedName), "the field UnrealCommandDelegateName did not have the expected value upon creation"); }
private bool IsConflicting(UnrealCommandDetails existingCommand, UnrealCommandDetails newCommand) { // We can not have commands with the same name and the same delegate type (request type + response type), even if they are in different components. // Ideally we could have commands with the same name and same delegate type (request type + response type) if they are in different components. if (existingCommand.CapitalisedName == newCommand.CapitalisedName && existingCommand.UnrealCommandDelegateType == newCommand.UnrealCommandDelegateType) { return(true); } return(false); }
public UnrealCommandJob(UnrealCommandDetails commandDetails, string outputDirectory, IFileSystem fileSystem) : base(outputDirectory, fileSystem) { InputFiles = new List <string>() { commandDetails.UnderlyingPackageDetails.SourceSchema }; var commandResponderHeaderPath = commandDetails.CapitalisedName + commandResponderHeaderSuffix; var commandResponderImplPath = commandDetails.CapitalisedName + commandResponderImplSuffix; OutputFiles = new List <string>() { commandResponderHeaderPath, commandResponderImplPath, }; this.commandDetails = commandDetails; }
public static void unrealcommanddetails_has_the_correct_unreal_request_type_details_upon_creation() { var capitalisedName = "CapitalisedName"; var qualifiedOwnerName = "improbable.codegen.Test"; var captialisedOwnerName = "improbable.codegen.OwnerComponent"; var commandDefinition = GenerateCommandDefinition("Test", new TypeReferenceRaw { sourceReference = new SourceReferenceRaw { line = "1", column = "1" }, builtInType = "float" }, new TypeReferenceRaw { sourceReference = new SourceReferenceRaw { line = "1", column = "1" }, builtInType = "float" }); var packageDetails = GeneratePackageDetails(); var requestTypeReference = new UnrealBuiltInTypeReference(commandDefinition.requestType); var responseTypeReference = new UnrealBuiltInTypeReference(commandDefinition.responseType); var commandDetails = new UnrealCommandDetails(commandDefinition, capitalisedName, qualifiedOwnerName, captialisedOwnerName, requestTypeReference, responseTypeReference, packageDetails); Assert.That(commandDetails.UnrealRequestTypeDetails.UnderlyingCapitalisedName == requestTypeReference.UnderlyingCapitalisedName && commandDetails.UnrealRequestTypeDetails.UnderlyingQualifiedName == requestTypeReference.UnderlyingQualifiedName && commandDetails.UnrealRequestTypeDetails.UnrealType == requestTypeReference.UnrealType && commandDetails.UnrealRequestTypeDetails.RequiredIncludes == requestTypeReference.RequiredIncludes, "the field UnrealRequestTypeDetails did not have the expected value upon creation"); Assert.That(commandDetails.UnrealResponseTypeDetails.UnderlyingCapitalisedName == responseTypeReference.UnderlyingCapitalisedName && commandDetails.UnrealResponseTypeDetails.UnderlyingQualifiedName == responseTypeReference.UnderlyingQualifiedName && commandDetails.UnrealResponseTypeDetails.UnrealType == responseTypeReference.UnrealType && commandDetails.UnrealResponseTypeDetails.RequiredIncludes == responseTypeReference.RequiredIncludes, "the field UnrealResponseTypeDetails did not have the expected value upon creation"); }
public UnrealCommandResponderImplementationGenerator(UnrealCommandDetails commandDetails) { this.commandDetails = commandDetails; }
public UnrealCommandResponderHeaderGenerator(UnrealCommandDetails commandDetails) { this.commandDetails = commandDetails; }