Beispiel #1
0
        public void ApplyDefaults_ValueTypeDeclarationWithNullPropertyName_ShouldSetPropertyName()
        {
            var valueTypeDeclaration = new ValueTypeDeclaration("EmployeeNumber",
                                                                new[] { new PropertyDeclaration(null, null) });
            var actualDeclaration =
                (ValueTypeDeclaration)ApplyDefaultsOnSingleDeclarationNamespace(valueTypeDeclaration);

            Assert.That(actualDeclaration.Properties.Single().Name, Is.EqualTo("Value"));
        }
Beispiel #2
0
        public void ApplyDefaults_ValueTypeDeclarationWithNullType_ShouldSetTypeToInt32()
        {
            var valueTypeDeclaration = new ValueTypeDeclaration("EmployeeNumber",
                                                                new[] { new PropertyDeclaration(null, null) });
            var actualDeclaration =
                (ValueTypeDeclaration)ApplyDefaultsOnSingleDeclarationNamespace(valueTypeDeclaration);

            Assert.That(actualDeclaration.Name, Is.EqualTo(valueTypeDeclaration.Name));
            Assert.That(actualDeclaration.Properties.Single().Type, Is.EqualTo(new SimpleType(typeof(Int32))));
        }
Beispiel #3
0
        public void ApplyDefaults_ValueTypeDeclarationWithType_ShouldNotModifyNameOrType()
        {
            var valueTypeDeclaration = new ValueTypeDeclaration("Name",
                                                                new[] { new PropertyDeclaration("FullName", new StringReferenceType()) });
            var actualDeclaration =
                (ValueTypeDeclaration)ApplyDefaultsOnSingleDeclarationNamespace(valueTypeDeclaration);
            var actualProperty = actualDeclaration.Properties.Single();

            Assert.That(actualProperty.Name, Is.EqualTo("FullName"));
            Assert.That(actualProperty.Type, Is.EqualTo(new StringReferenceType()));
        }
Beispiel #4
0
        /// <summary>
        /// Add the default type and property name to
        /// <see cref="ValueTypeDeclaration"/> if they have not been specified.
        /// </summary>
        public override ValueTypeDeclaration Transform(ValueTypeDeclaration valueTypeDeclaration)
        {
            var result = base.Transform(valueTypeDeclaration);
            var isSimpleDeclaration = (valueTypeDeclaration.Properties.Count() == 1);

            if (isSimpleDeclaration)
            {
                result = result
                         .ReplaceProperties(p => (null == p.Type) ? p.OverrideType(DefaultPropertyType) : p)
                         .ReplaceProperties(p => (null == p.Name) ? p.OverrideName(DefaultPropertyName) : p);
            }
            return(result);
        }
Beispiel #5
0
        public static CodeTypeDeclaration CreateValueTypeDeclaration(
            SemanticModel model, NamespaceName namespaceName,
            ValueTypeDeclaration declaration)
        {
            var result = CreateTypeWithValueSemantics(
                ValueObjectSpecification.CreateStruct(
                    namespaceName, declaration.Name,
                    declaration.Properties.ToArray(),
                    new BaseTypes(new TypeName[0]),
                    false),
                model.KnownTypes);

            if (declaration.Properties.Count() == 1)
            {
                AddDebuggerDisplayAttribute(declaration, result);
            }
            AddToString(declaration, result);
            return(result);
        }
Beispiel #6
0
        public void ValueType_WithNestedValueTypes_ShouldCompile()
        {
            var employeeNumber = new ValueTypeDeclaration(
                "EmployeeNumber",
                new[]
            {
                new PropertyDeclaration("Value",
                                        new SimpleType(typeof(int)))
            });
            var employeeName = new ValueTypeDeclaration(
                "EmployeeName",
                new[]
            {
                new PropertyDeclaration("First",
                                        new StringReferenceType()),
                new PropertyDeclaration("Last",
                                        new StringReferenceType()),
            }
                );
            var employeeInfo = new ValueTypeDeclaration(
                "EmployeeInfo",
                new[]
            {
                new PropertyDeclaration("Number",
                                        new TypeName("EmployeeNumber")),
                new PropertyDeclaration("Name",
                                        new TypeName("EmployeeName")),
            }
                );
            var model  = CreateSemanticModelWith(employeeNumber, employeeName, employeeInfo);
            var actual = CodeDomCompiler.Compile(model);
            var source = CompileToSource(actual);

            Assert.That(source, Is.StringMatching(@"public\s+EmployeeNumber\s+Number"));
            Assert.That(source, Is.StringMatching(@"public\s+EmployeeName\s+Name"));
            Console.WriteLine(source);
        }
Beispiel #7
0
        public void Visit(ValueTypeDeclaration node)
        {
            var fullName = FullName(node.Name);

            _knownTypes.Add(new KnownType(fullName, true));
        }
Beispiel #8
0
        private static void AddDebuggerDisplayAttribute(ValueTypeDeclaration declaration, CodeTypeDeclaration result)
        {
            var displayTemplate = String.Format("{{{0}}}", declaration.Properties.Single().Name);

            result.CustomAttributes.Add(CreateDebuggerDisplayAttribute(displayTemplate));
        }
Beispiel #9
0
 private static void AddToString(ValueTypeDeclaration declaration, CodeTypeDeclaration result)
 {
     result.Members.Add(CreateToString(declaration.Properties));
 }
Beispiel #10
0
 private static void Add(CodeNamespace ns, ConventionsDeclaration conventions, SemanticModel model, NamespaceName namespaceName, ValueTypeDeclaration declaration)
 {
     ns.Types.Add(ValueTypeGenerator.CreateValueTypeDeclaration(model, namespaceName, declaration));
 }
Beispiel #11
0
 public virtual ValueTypeDeclaration Transform(ValueTypeDeclaration declaration)
 {
     return(declaration);
 }