Example #1
0
        public void SimpleEnum()
        {
            //-- arrange

            var enumMember = new TypeMember();

            enumMember.Namespace = "SyntaxGeneratorTests";
            enumMember.Name      = "TestEnum";
            enumMember.Members.Add(new EnumMember()
            {
                Name = "First"
            });
            enumMember.Members.Add(new EnumMember()
            {
                Name = "Second"
            });
            enumMember.Members.Add(new EnumMember()
            {
                Name = "Third"
            });

            var emitter = new EnumSyntaxEmitter(enumMember);

            //-- act

            var syntax = emitter.EmitSyntax();

            //-- assert

            syntax.Should().BeEquivalentToCode(
                "public enum TestEnum { First, Second, Third }"
                );
        }
        //-----------------------------------------------------------------------------------------------------------------------------------------------------

        private MemberDeclarationSyntax EmitTypeSyntax(TypeMember type)
        {
            MemberDeclarationSyntax typeSyntax;

            switch (type.TypeKind)
            {
            case TypeMemberKind.Class:
                var classEmitter = new ClassSyntaxEmitter(type);
                typeSyntax = classEmitter.EmitSyntax();
                break;

            case TypeMemberKind.Enum:
                var enumEmitter = new EnumSyntaxEmitter(type);
                typeSyntax = enumEmitter.EmitSyntax();
                break;

            default:
                throw new NotSupportedException($"TypeMember of kind '{type.TypeKind}' is not supported.");
            }

            var annotation = new SyntaxAnnotation();

            typeSyntax = typeSyntax.WithAdditionalAnnotations(annotation);
            type.SafeBackendTag().Annotation = annotation;

            return(typeSyntax);
        }
Example #3
0
        public void FlagsEnum()
        {
            //-- arrange

            var enumMember = new TypeMember();

            enumMember.Namespace = "SyntaxGeneratorTests";
            enumMember.Name      = "TestFlagsEnum";
            enumMember.Attributes.Add(new AttributeDescription()
            {
                AttributeType = new TypeMember(typeof(FlagsAttribute))
            });
            enumMember.Members.Add(new EnumMember()
            {
                Name = "None", Value = 0
            });
            enumMember.Members.Add(new EnumMember()
            {
                Name = "First", Value = 0x01
            });
            enumMember.Members.Add(new EnumMember()
            {
                Name = "Second", Value = 0x02
            });
            enumMember.Members.Add(new EnumMember()
            {
                Name = "Both", Value = 0x01 | 0x02
            });

            var emitter = new EnumSyntaxEmitter(enumMember);

            //-- act

            var syntax = emitter.EmitSyntax();

            //-- assert

            syntax.Should().BeEquivalentToCode(
                "[System.FlagsAttribute] public enum TestFlagsEnum { None = 0, First = 1, Second = 2, Both = 3 }"
                );
        }