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