xref: /aosp_15_r20/external/antlr/runtime/Ruby/test/unit/test-scheme.rb (revision 16467b971bd3e2009fad32dd79016f2c7e421deb)
1*16467b97STreehugger Robot#!/usr/bin/ruby
2*16467b97STreehugger Robot# encoding: utf-8
3*16467b97STreehugger Robotrequire 'antlr3'
4*16467b97STreehugger Robotrequire 'test/unit'
5*16467b97STreehugger Robotrequire 'spec'
6*16467b97STreehugger Robot
7*16467b97STreehugger Robotinclude ANTLR3
8*16467b97STreehugger Robot
9*16467b97STreehugger Robotdescribe TokenScheme do
10*16467b97STreehugger Robot  before do
11*16467b97STreehugger Robot    @ts = TokenScheme.new do
12*16467b97STreehugger Robot      define_tokens(:A => 4, :B => 5, :T__6 => 6)
13*16467b97STreehugger Robot      register_names('A', 'B', "'+'")
14*16467b97STreehugger Robot    end
15*16467b97STreehugger Robot    @a_class = Class.new do
16*16467b97STreehugger Robot      class << self
17*16467b97STreehugger Robot        attr_accessor :token_scheme
18*16467b97STreehugger Robot      end
19*16467b97STreehugger Robot    end
20*16467b97STreehugger Robot    @a_class.send(:include, @ts)
21*16467b97STreehugger Robot
22*16467b97STreehugger Robot    @an_instance = @a_class.new
23*16467b97STreehugger Robot  end
24*16467b97STreehugger Robot
25*16467b97STreehugger Robot  example "token schemes define tokens as constants" do
26*16467b97STreehugger Robot    @ts::A.should == 4
27*16467b97STreehugger Robot    @ts::B.should == 5
28*16467b97STreehugger Robot    @ts::T__6.should == 6
29*16467b97STreehugger Robot    @ts::EOF.should == -1
30*16467b97STreehugger Robot  end
31*16467b97STreehugger Robot
32*16467b97STreehugger Robot  example "token schemes track human-friendly token names" do
33*16467b97STreehugger Robot    @ts::TOKEN_NAMES.should == {
34*16467b97STreehugger Robot      0 => "<invalid>", -1 => "<EOF>", 1 => "<EOR>",
35*16467b97STreehugger Robot      2 => "<DOWN>", 3 => "<UP>", 4 => "A",
36*16467b97STreehugger Robot      5 => "B", 6 => "'+'"
37*16467b97STreehugger Robot    }
38*16467b97STreehugger Robot    @ts.token_name(5).should == 'B'
39*16467b97STreehugger Robot    @ts.token_name(6).should == "'+'"
40*16467b97STreehugger Robot    @ts.token_name(-1).should == '<EOF>'
41*16467b97STreehugger Robot    @ts.token_name(7).should == '<UNKNOWN: 7>'
42*16467b97STreehugger Robot  end
43*16467b97STreehugger Robot
44*16467b97STreehugger Robot
45*16467b97STreehugger Robot  example 'class-level results of including a token scheme' do
46*16467b97STreehugger Robot    #@a_class.token_scheme.should == @ts
47*16467b97STreehugger Robot
48*16467b97STreehugger Robot    @a_class::A.should == 4
49*16467b97STreehugger Robot    @a_class::B.should == 5
50*16467b97STreehugger Robot    @a_class::T__6.should == 6
51*16467b97STreehugger Robot    @a_class::EOF.should == -1
52*16467b97STreehugger Robot
53*16467b97STreehugger Robot    @a_class.send(:token_names).should == {
54*16467b97STreehugger Robot      0 => "<invalid>", -1 => "<EOF>", 1 => "<EOR>",
55*16467b97STreehugger Robot      2 => "<DOWN>", 3 => "<UP>", 4 => "A",
56*16467b97STreehugger Robot      5 => "B", 6 => "'+'"
57*16467b97STreehugger Robot    }
58*16467b97STreehugger Robot  end
59*16467b97STreehugger Robot
60*16467b97STreehugger Robot  example 'instance-level results of including a token scheme' do
61*16467b97STreehugger Robot  end
62*16467b97STreehugger Robotend
63