예제 #1
0
 public void CompilerTest(string/*!*/ code, int expectedCompilerWarningCount, int expectedRuntimeWarningCount) {
     LoggingErrorSink log = new LoggingErrorSink(true);
     CompilerTest(code, log);
     Assert(log.ErrorCount == 0 && log.FatalErrorCount == 0, "Compile time error");
     Assert(log.WarningCount == expectedCompilerWarningCount, "Wrong number of compile time errors/warnings");
     Assert(Context.RuntimeErrorSink.WarningCount == expectedRuntimeWarningCount, "Wrong number of runtime warnings");
 }
예제 #2
0
 public AssertTokenizer(Tests /*!*/ tests)
 {
     _log            = new LoggingErrorSink();
     _tests          = tests;
     _context        = tests.Context;
     DefaultEncoding = RubyEncoding.UTF8;
     Compatibility   = tests.Context.RubyOptions.Compatibility;
 }
예제 #3
0
        public void Scenario_RubyScopeParsing()
        {
            LoggingErrorSink log = new LoggingErrorSink();

            SourceUnitTree p;
            SourceUnit     unit;

            unit = Context.CreateSnippet(@"
                class c << G
                end
            ", SourceCodeKind.File);

            p = new Parser().Parse(unit, new RubyCompilerOptions(), log);
            Assert(p == null && log.FatalErrorCount == 1);
            log.ClearCounters();

            unit = Context.CreateSnippet(@"
                def goo(&b)
                    end

                    class C
                        def foo()
                           x.goo() { 
                                goo() {
                                    class << M
                                        def bar()
                                            goo() {
                                            }
                                        end
                                    end
                                }
                           } 
                        end
                    end

                BEGIN { goo1() { } }
                END { goo2() { } } 
            ", SourceCodeKind.File);

            p = new Parser().Parse(unit, new RubyCompilerOptions(), ErrorSink.Null);
            Assert(p != null && !log.AnyError);
            log.ClearCounters();

            unit = Context.CreateSnippet(@"
                for x in array do
                    goo()
                end
            ", SourceCodeKind.File);

            p = new Parser().Parse(unit, new RubyCompilerOptions(), ErrorSink.Null);
            Assert(p != null && !log.AnyError);
            log.ClearCounters();
        }
예제 #4
0
        public void Scenario_RubyTokenizer1()
        {
            LoggingErrorSink log = new LoggingErrorSink();

            List <Tokens> tokens;

            tokens = GetRubyTokens(log, "foo (while (f do end) do end) do end");

            Assert(tokens.Count == 14);
            Assert(tokens[0] == Tokens.Identifier);
            Assert(tokens[1] == Tokens.LparenArg);
            Assert(tokens[2] == Tokens.While);
            Assert(tokens[3] == Tokens.LeftParen);
            Assert(tokens[4] == Tokens.Identifier);
            Assert(tokens[5] == Tokens.Do);
            Assert(tokens[6] == Tokens.End);
            Assert(tokens[7] == (Tokens)')');
            Assert(tokens[8] == Tokens.LoopDo);
            Assert(tokens[9] == Tokens.End);
            Assert(tokens[10] == (Tokens)')');
            Assert(tokens[11] == Tokens.BlockDo);
            Assert(tokens[12] == Tokens.End);
            Assert(tokens[13] == Tokens.EndOfFile);

            log.Errors.Clear();

            tokens = GetRubyTokens(log, "print 'foo'");

            Assert(log.Errors.Count == 0);

            Assert(tokens.Count == 5 &&
                   tokens[0] == Tokens.Identifier &&
                   tokens[1] == Tokens.StringBeg &&
                   tokens[2] == Tokens.StringContent &&
                   tokens[3] == Tokens.StringEnd &&
                   tokens[4] == Tokens.EndOfFile);

            Assert(log.Errors.Count == 0);

            tokens = GetRubyTokens(log, "print '");

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

            Assert(tokens.Count == 4 &&
                   tokens[0] == Tokens.Identifier &&
                   tokens[1] == Tokens.StringBeg &&
                   tokens[2] == Tokens.StringEnd &&
                   tokens[3] == Tokens.EndOfFile);
        }
예제 #5
0
 public AssertTokenizer(RubyContext /*!*/ context)
 {
     _log     = new LoggingErrorSink();
     _context = context;
 }