IronRuby.Tests.Tests.ParserErrors1 C# (CSharp) Method

ParserErrors1() private method

private ParserErrors1 ( ) : void
return void
        private void ParserErrors1() {
            LoggingErrorSink log = new LoggingErrorSink();

            var tokens = GetRubyTokens(log, "def [");

            Assert(tokens.ToArray().ValueEquals(new[] {
                Tokens.Def,
                Tokens.LeftIndexingBracket,
            }));

            Assert(log.Errors.Count == 1 &&
                log.Errors[0].Severity == Severity.FatalError
            );

            log.Errors.Clear();

            tokens = GetRubyTokens(log, "${");

            Assert(tokens.ToArray().ValueEquals(new[] {
                Tokens.Dollar,
            }));

            Assert(log.Errors.Count == 1 &&
                log.Errors[0].Severity == Severity.FatalError
            );

            log.Errors.Clear();

            // Error: block argument should not be given (yield as a command):
            tokens = GetRubyTokens(log, "a[yield 1, &x]");
            Assert(tokens.ToArray().ValueEquals(new[] {
		        Tokens.Identifier,
		        Tokens.LeftIndexingBracket,
		        Tokens.Yield,
		        Tokens.Integer,
		        Tokens.Comma,
		        Tokens.BlockReference,
		        Tokens.Identifier,
		        Tokens.RightBracket,
		        Tokens.EndOfFile,
            }));

            Assert(log.Errors.Count == 1 &&
                log.Errors[0].Severity == Severity.Error
            );

            log.Errors.Clear();

            // restrictions on jump statements:
            foreach (var src in new[] {
              "a[return 1, &x]",
              "puts if return 1",
              "1 && return 1",
              "(a ? return 1 : 1) while true",
              "a while return",
              "1 + return",
              "return / 1",
              "a = return",
              "return.foo = bar",
              "a = 1 rescue return 2",
            }) {
                tokens = GetRubyTokens(log, src);
                Assert(log.Errors.Count > 0 && log.Errors.Exists((e) => e.Severity == Severity.FatalError));
                log.Errors.Clear();
            }

            // Error: Duplicate parameter name:
            tokens = GetRubyTokens(log, "lambda { |x,x| }");
            Assert(log.Errors.Count == 1 && log.Errors[0].Severity == Severity.Error);
            log.Errors.Clear();

            // Underscore may be duplicated:
            tokens = GetRubyTokens(log, "lambda { |_,_| }");
            Assert(log.Errors.Count == 0);
            log.Errors.Clear();
        }
Tests