#!/usr/bin/ruby # encoding: utf-8 require 'antlr3' require 'test/unit' require 'spec' include ANTLR3 describe TokenScheme do before do @ts = TokenScheme.new do define_tokens(:A => 4, :B => 5, :T__6 => 6) register_names('A', 'B', "'+'") end @a_class = Class.new do class << self attr_accessor :token_scheme end end @a_class.send(:include, @ts) @an_instance = @a_class.new end example "token schemes define tokens as constants" do @ts::A.should == 4 @ts::B.should == 5 @ts::T__6.should == 6 @ts::EOF.should == -1 end example "token schemes track human-friendly token names" do @ts::TOKEN_NAMES.should == { 0 => "", -1 => "", 1 => "", 2 => "", 3 => "", 4 => "A", 5 => "B", 6 => "'+'" } @ts.token_name(5).should == 'B' @ts.token_name(6).should == "'+'" @ts.token_name(-1).should == '' @ts.token_name(7).should == '' end example 'class-level results of including a token scheme' do #@a_class.token_scheme.should == @ts @a_class::A.should == 4 @a_class::B.should == 5 @a_class::T__6.should == 6 @a_class::EOF.should == -1 @a_class.send(:token_names).should == { 0 => "", -1 => "", 1 => "", 2 => "", 3 => "", 4 => "A", 5 => "B", 6 => "'+'" } end example 'instance-level results of including a token scheme' do end end