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")); }
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)))); }
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())); }
/// <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); }
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); }
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); }
public void Visit(ValueTypeDeclaration node) { var fullName = FullName(node.Name); _knownTypes.Add(new KnownType(fullName, true)); }
private static void AddDebuggerDisplayAttribute(ValueTypeDeclaration declaration, CodeTypeDeclaration result) { var displayTemplate = String.Format("{{{0}}}", declaration.Properties.Single().Name); result.CustomAttributes.Add(CreateDebuggerDisplayAttribute(displayTemplate)); }
private static void AddToString(ValueTypeDeclaration declaration, CodeTypeDeclaration result) { result.Members.Add(CreateToString(declaration.Properties)); }
private static void Add(CodeNamespace ns, ConventionsDeclaration conventions, SemanticModel model, NamespaceName namespaceName, ValueTypeDeclaration declaration) { ns.Types.Add(ValueTypeGenerator.CreateValueTypeDeclaration(model, namespaceName, declaration)); }
public virtual ValueTypeDeclaration Transform(ValueTypeDeclaration declaration) { return(declaration); }