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");
        }
        public static void unrealusertypereference_is_initiated_as_expected_when_passed_an_user_type_reference()
        {
            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 unrealUserTypeReference = new UnrealUserTypeReference(unrealTypeDetails);

            Assert.That(unrealUserTypeReference.UnderlyingCapitalisedName == "ImprobableCodegenTestType");
            Assert.That(unrealUserTypeReference.RequiredIncludes.Count == 1);
            Assert.That(unrealUserTypeReference.RequiredIncludes.Contains("\"TestType.h\""));
            Assert.That(unrealUserTypeReference.UnderlyingQualifiedName == "improbable::codegen::TestType");
            Assert.That(unrealUserTypeReference.UnrealType == "UTestType*");

            Assert.That(unrealUserTypeReference.AssignUnderlyingValueToUnrealMemberVariable("TestField", "val") == "if (TestField == nullptr) { TestField = NewObject<UTestType>(this); } TestField->Init(val)");
            Assert.That(unrealUserTypeReference.ConvertUnderlyingValueToUnrealLocalVariable("val") == "NewObject<UTestType>()->Init(val)");
            Assert.That(unrealUserTypeReference.ConvertUnderlyingValueToUnrealMemberVariable("val") == "NewObject<UTestType>(this)->Init(val)");
            Assert.That(unrealUserTypeReference.ConvertUnrealValueToSnapshotValue("val") == "val->GetUnderlying()");
            Assert.That(unrealUserTypeReference.ConvertUnrealValueToUnderlyingValue("val") == "val->GetUnderlying()");

            Assert.That(unrealUserTypeReference.DefaultInitialisationString == "improbable::codegen::TestType(0, 0)");
            Assert.That(unrealUserTypeReference.SnapshotType == "improbable::codegen::TestType");
        }