public void TestParseErrorInsideDefinition()
        {
            var tokenizer = new PositionalTokenizer(Tokenizer.CreateTokenizer("function func() { j = }"));

            tokenizer.Match("function");
            var expr = UserFunctionDefinitionExpression.Parse(tokenizer);

            Assert.That(expr, Is.InstanceOf <ParseErrorExpression>());
            Assert.That(((ParseErrorExpression)expr).Message, Is.EqualTo("Unexpected end of script"));
        }
        public void TestParseErrorInsideDefinitionExpressionTokenizer()
        {
            var group     = new ExpressionGroup();
            var tokenizer = new ExpressionTokenizer(Tokenizer.CreateTokenizer("function func() { j = }"), group);

            tokenizer.Match("function");
            var expr = UserFunctionDefinitionExpression.Parse(tokenizer);

            Assert.That(expr, Is.InstanceOf <FunctionDefinitionExpression>());
            Assert.That(group.ParseErrors.Count(), Is.EqualTo(2));
            Assert.That(group.ParseErrors.First().Message, Is.EqualTo("Unexpected character: }"));
        }
        private FunctionDefinitionExpression Parse(string input, string expectedError = null)
        {
            var tokenizer = new PositionalTokenizer(Tokenizer.CreateTokenizer(input));

            tokenizer.Match("function");
            var expr = UserFunctionDefinitionExpression.Parse(tokenizer);

            if (expectedError != null)
            {
                Assert.That(expr, Is.InstanceOf <ParseErrorExpression>());

                var error = (ParseErrorExpression)expr;
                var formattedErrorMessage = string.Format("{0}:{1} {2}", error.Location.Start.Line, error.Location.Start.Column, error.Message);
                Assert.That(formattedErrorMessage, Is.EqualTo(expectedError));
                return(null);
            }
            else
            {
                Assert.That(expr, Is.InstanceOf <FunctionDefinitionExpression>());
                return((FunctionDefinitionExpression)expr);
            }
        }