Esempio n. 1
0
        public void Bind_FieldTypeSupplied_UsesBinderToResolveType()
        {
            // Arrange
            var @struct = new StructBuilder().Build();
            var input   =
                @"struct User {
    i32 Id
}";
            var structNode = ParserInput
                             .FromString(input)
                             .ParseInput(parser => parser.structDefinition());

            this.binderProvider.GetBinder(structNode.field()[0].fieldType())
            .Returns(this.typeBinder);
            var type = Substitute.For <IFieldType>();

            this.typeBinder.Bind <IFieldType>(
                structNode.field()[0].fieldType(), Arg.Any <ISymbol>())
            .Returns(type);

            // Act
            var field = this.binder.Bind <Field>(structNode.field()[0], @struct);

            // Assert
            Assert.Same(type, field.Type);
        }
Esempio n. 2
0
        protected void AssertCompilerReturnsMessage(
            string input,
            CompilerMessageId messageId,
            CompilerMessageType messageType,
            string[] messageParameters)
        {
            // Arrange
            var compiler    = new ThriftCompiler();
            var parserInput = ParserInput.FromString(input);

            // Act
            var result = compiler.Compile(parserInput.GetStream());

            // Assert
            var message = result.Messages.FirstOrDefault(
                m => m.MessageType == messageType && m.MessageId == messageId);

            Assert.True(message != null, $"No {messageType.ToString().ToLower()} messages were returned from the compiler");

            if (parserInput.LineNumber != null)
            {
                Assert.Equal(parserInput.LineNumber, message.LineNumber);
                Assert.Equal(parserInput.StartPosition, message.StartPosition);
                Assert.Equal(parserInput.EndPosition, message.EndPosition);
            }

            if (messageParameters?.Length > 0)
            {
                var expectedMessage = string.Format(
                    CompilerMessages.Get(messageId), messageParameters);
                Assert.Equal(expectedMessage, message.Message);
            }
        }
Esempio n. 3
0
        protected Exception CreateExceptionFromInput(string input)
        {
            var node = ParserInput
                       .FromString(input)
                       .ParseInput(parser => parser.exceptionDefinition());

            return(new ExceptionBuilder()
                   .SetNode(node)
                   .SetBinderProvider(this.BinderProvider)
                   .Build());
        }
Esempio n. 4
0
        protected Struct CreateStructFromInput(string input)
        {
            var structNode = ParserInput
                             .FromString(input)
                             .ParseInput(parser => parser.structDefinition());

            return(new StructBuilder()
                   .SetNode(structNode)
                   .SetBinderProvider(this.BinderProvider)
                   .Build());
        }
Esempio n. 5
0
        protected Union CreateUnionFromInput(string input)
        {
            var structNode = ParserInput
                             .FromString(input)
                             .ParseInput(parser => parser.unionDefinition());

            return(new UnionBuilder()
                   .SetNode(structNode)
                   .SetBinderProvider(this.BinderProvider)
                   .Build());
        }
Esempio n. 6
0
        protected Document CreateDocumentFromInput(string input)
        {
            var documentNode = ParserInput
                               .FromString(input)
                               .ParseInput(parser => parser.document());

            return(new DocumentBuilder()
                   .SetNode(documentNode)
                   .SetBinderProvider(this.BinderProvider)
                   .Build());
        }
Esempio n. 7
0
        protected Enum CreateEnumFromInput(string input)
        {
            var enumNode = ParserInput
                           .FromString(input)
                           .ParseInput(parser => parser.enumDefinition());

            return(new EnumBuilder()
                   .SetNode(enumNode)
                   .SetBinderProvider(this.BinderProvider)
                   .Build());
        }
Esempio n. 8
0
        public void TypeNotABaseType_ThrowsException()
        {
            // Arrange
            var node = ParserInput
                       .FromString("UserType")
                       .ParseInput(parser => parser.baseType());
            var parent = Substitute.For <IField>();

            // Act / Assert
            Assert.Throws <InvalidOperationException>(() => BaseType.Resolve(node, parent));
        }
Esempio n. 9
0
        public void Bind_UnknownType_ThrowsException()
        {
            // Arrange
            var field = new FieldBuilder().Build();
            var node  = ParserInput
                        .FromString("12345")
                        .ParseInput(parser => parser.fieldType());

            // Act / Assert
            Assert.Throws <ArgumentException>(() => this.binder.Bind <IFieldType>(node, field));
        }
Esempio n. 10
0
        protected void AssertCompilerDoesNotReturnAnyMessages(string input)
        {
            // Arrange
            var compiler    = new ThriftCompiler();
            var parserInput = ParserInput.FromString(input);

            // Act
            var result = compiler.Compile(parserInput.GetStream());

            // Assert
            Assert.Empty(result.Messages);
        }
Esempio n. 11
0
        public static IEnumerable <object[]> GetBaseTypes()
        {
            var field = Substitute.For <IField>();

            return(BaseType.Names.Select(name => new[]
            {
                BaseType.Resolve(
                    ParserInput
                    .FromString(name)
                    .ParseInput(parser => parser.baseType()),
                    field),
            }));
        }
Esempio n. 12
0
        public void SetsCorrectTypeForValue(string input, BaseType expectedType)
        {
            // Arrange
            var binder = new ConstantExpressionBinder();
            var node   = ParserInput.FromString(input)
                         .ParseInput(parser => parser.constExpression());
            var parent = Substitute.For <IConstant>();

            // Act
            var value = binder.Bind <IConstantExpression>(node, parent);

            // Assert
            Assert.Same(expectedType, value.Type);
        }
Esempio n. 13
0
        public void SetsInvalidValueReasonCorrectly(string input, InvalidEnumValueReason expected)
        {
            // Arrange
            var @enum      = new EnumBuilder().Build();
            var memberNode = ParserInput
                             .FromString(input)
                             .ParseInput(parser => parser.enumMember());

            // Act
            var member = this.Binder.Bind <EnumMember>(memberNode, @enum);

            // Assert
            Assert.Equal(expected, member.InvalidValueReason);
        }
Esempio n. 14
0
        public void RawValueNotProvided_Null()
        {
            // Arrange
            var binder = new ConstantExpressionBinder();
            var node   = ParserInput.FromString(string.Empty)
                         .ParseInput(parser => parser.constExpression());
            var parent = Substitute.For <IConstant>();

            // Act
            var value = binder.Bind <IConstantExpression>(node, parent);

            // Assert
            Assert.Null(value.RawValue);
        }
Esempio n. 15
0
        public void Bind_IdentifierSupplied_SetsIdentifier()
        {
            // Arrange
            var @struct      = new StructBuilder().Build();
            var fieldContext = ParserInput
                               .FromString("string Name")
                               .ParseInput(parser => parser.field());

            // Act
            var field = this.binder.Bind <Field>(fieldContext, @struct);

            // Assert
            Assert.Equal("Name", field.Name);
        }
Esempio n. 16
0
        public void CanBindAllBaseTypes(string baseType)
        {
            // Arrange
            var fieldTypeNode = ParserInput
                                .FromString(baseType)
                                .ParseInput(parser => parser.baseType());

            // Act
            var parent = Substitute.For <IField>();
            var type   = this.binder.Bind <BaseType>(fieldTypeNode, parent);

            // Assert
            Assert.Equal(baseType, type.Name);
        }
Esempio n. 17
0
        public void RawValueProvided_SetsRawValue()
        {
            // Arrange
            var binder = new ConstantExpressionBinder();
            var node   = ParserInput.FromString("100")
                         .ParseInput(parser => parser.constExpression());
            var parent = Substitute.For <IConstant>();

            // Act
            var value = binder.Bind <IConstantExpression>(node, parent);

            // Assert
            Assert.Equal("100", value.RawValue);
        }
Esempio n. 18
0
        public void Bind_FieldIdNotAnInteger_SetsFieldIdNull()
        {
            // Arrange
            var @struct      = new StructBuilder().Build();
            var fieldContext = ParserInput
                               .FromString("abc: i32 Id")
                               .ParseInput(parser => parser.field());

            // Act
            var field = this.binder.Bind <Field>(fieldContext, @struct);

            // Assert
            Assert.Null(field.FieldId);
        }
Esempio n. 19
0
        public void Bind_ExceptionNameNotSupplied_Null()
        {
            // Arrange
            var document      = new DocumentBuilder().Build();
            var exceptionNode = ParserInput
                                .FromString("exception {}")
                                .ParseInput(parser => parser.exceptionDefinition());

            // Act
            var exception = this.binder.Bind <IException>(exceptionNode, document);

            // Assert
            Assert.Null(exception.Name);
        }
Esempio n. 20
0
        public void Bind_FieldRequirednessOptional_SetsRequiredness()
        {
            // Arrange
            var @struct      = new StructBuilder().Build();
            var fieldContext = ParserInput
                               .FromString("optional i32 Id")
                               .ParseInput(parser => parser.field());

            // Act
            var field = this.binder.Bind <Field>(fieldContext, @struct);

            // Assert
            Assert.Equal(FieldRequiredness.Optional, field.Requiredness);
        }
Esempio n. 21
0
        public void Bind_StructNameSupplied_SetsName()
        {
            // Arrange
            var document      = new DocumentBuilder().Build();
            var structContext = ParserInput
                                .FromString("union User {}")
                                .ParseInput(parser => parser.unionDefinition());

            // Act
            var union = this.binder.Bind <IUnion>(structContext, document);

            // Assert
            Assert.Equal("User", union.Name);
        }
Esempio n. 22
0
        public void NameNotSupplied_Null()
        {
            // Arrange
            var input = ParserInput
                        .FromString("const i32 = 100")
                        .ParseInput(parser => parser.constDefinition());
            var parent = Substitute.For <IDocument>();

            // Act
            var result = this.constantBinder.Bind <IConstant>(input, parent);

            // Assert
            Assert.Null(result.Name);
        }
Esempio n. 23
0
        protected override (IParseTree elementNode, ICollectionType collectionType) ParseInput(string input)
        {
            var node = ParserInput
                       .FromString(input)
                       .ParseInput(parser => parser.setType());

            var setType = new SetTypeBuilder()
                          .SetNode(node)
                          .SetParent(this.Field)
                          .SetBinderProvider(this.BinderProvider)
                          .Build();

            return(node.fieldType(), setType);
        }
Esempio n. 24
0
        public void IndicatesWhenValueIsImplicit(string input, bool isImplicit)
        {
            // Arrange
            var @enum      = new EnumBuilder().Build();
            var memberNode = ParserInput
                             .FromString(input)
                             .ParseInput(parser => parser.enumMember());

            // Act
            var member = this.Binder.Bind <EnumMember>(memberNode, @enum);

            // Assert
            Assert.Equal(isImplicit, member.IsValueImplicit);
        }
Esempio n. 25
0
        public void SetsNameCorrectly(string input, string expectedResult)
        {
            // Arrange
            var @enum      = new EnumBuilder().Build();
            var memberNode = ParserInput
                             .FromString(input)
                             .ParseInput(parser => parser.enumMember());

            // Act
            var member = this.Binder.Bind <EnumMember>(memberNode, @enum);

            // Assert
            Assert.Equal(expectedResult, member.Name);
        }
Esempio n. 26
0
        public void Bind_FieldIdProvided_SetsFieldId()
        {
            // Arrange
            var @struct      = new StructBuilder().Build();
            var fieldContext = ParserInput
                               .FromString("1: i32 Id")
                               .ParseInput(parser => parser.field());

            // Act
            var field = this.binder.Bind <Field>(fieldContext, @struct);

            // Assert
            Assert.Equal(1, field.FieldId);
        }
Esempio n. 27
0
        public void Bind_StructNameNotSupplied_Null()
        {
            // Arrange
            var document      = new DocumentBuilder().Build();
            var structContext = ParserInput
                                .FromString("struct {}")
                                .ParseInput(parser => parser.structDefinition());

            // Act
            var structDefinition = this.Binder.Bind <Struct>(structContext, document);

            // Assert
            Assert.Null(structDefinition.Name);
        }
Esempio n. 28
0
        public void SetsNameCorrectly(string input, string name)
        {
            // Arrange
            var document   = new DocumentBuilder().Build();
            var structNode = ParserInput
                             .FromString(input)
                             .ParseInput(parser => parser.enumDefinition());

            // Act
            var symbol = this.Binder.Bind <Enum>(structNode, document);

            // Assert
            Assert.Equal(name, symbol.Name);
        }
Esempio n. 29
0
        public void NameSupplied_SetsName()
        {
            // Arrange
            var input = ParserInput
                        .FromString("const i32 MaxPageSize = 100")
                        .ParseInput(parser => parser.constDefinition());
            var parent = Substitute.For <IDocument>();

            // Act
            var result = this.constantBinder.Bind <IConstant>(input, parent);

            // Assert
            Assert.Equal("MaxPageSize", result.Name);
        }
Esempio n. 30
0
        public void Bind_FieldRequirednessNotSupplied_UsesDefault()
        {
            // Arrange
            var @struct = new StructBuilder().Build();

            var fieldContext = ParserInput
                               .FromString("i32 Id")
                               .ParseInput(parser => parser.field());

            // Act
            var field = this.binder.Bind <Field>(fieldContext, @struct);

            // Assert
            Assert.Equal(FieldRequiredness.Default, field.Requiredness);
        }