Show
Ignore:
Timestamp:
01/29/08 23:01:39 (10 months ago)
Author:
deveiant
Message:

Started update of specs and build system

Location:
trunk/spec
Files:
1 added
1 moved

Legend:

Unmodified
Added
Removed
  • trunk/spec/linguistics_spec.rb

    r95 r98  
    1 #!/usr/bin/ruby -w 
    2 # 
    3 # Unit test for the 'use' function of the Linguistics module. 
    4 # $Id$ 
    5 # 
    6 # Copyright (c) 2003 The FaerieMUD Consortium. 
    7 #  
     1#!/usr/bin/env spec -cfs 
    82 
    9 unless defined? Linguistics::TestCase 
    10     testsdir = File::dirname( File::expand_path( __FILE__ ) ) 
    11     $LOAD_PATH.unshift testsdir unless $LOAD_PATH.include?( testsdir ) 
     3BEGIN { 
     4    require 'pathname' 
     5    basedir = Pathname.new( __FILE__ ).dirname.parent 
    126 
    13     require 'lingtestcase' 
     7    libdir = basedir + "lib" 
     8 
     9    $LOAD_PATH.unshift( libdir ) unless $LOAD_PATH.include?( libdir ) 
     10} 
     11 
     12begin 
     13    require 'spec/runner' 
     14    require 'linguistics' 
     15rescue LoadError 
     16    unless Object.const_defined?( :Gem ) 
     17        require 'rubygems' 
     18        retry 
     19    end 
     20    raise 
    1421end 
    1522 
    1623 
    17 ### This test suite tests the language-installation function of the Linguistics 
    18 ### module. 
    19 module Linguistics 
    20 class UseTestCase < Linguistics::TestCase 
    21  
    22     LanguageCodes = [ :en, :EN, 'en', 'EN', 'En', 'eN' ] 
    23     BogusLanguageCodes = [ :zz, :ry, :qi ] 
    24     MissingLanguageCodes = [ :ja, :fr, :es ] 
     24describe Linguistics do 
    2525 
    2626    TestArray = %w{stone stick hammer stone lantern} 
     
    2828    TestNumber = 5 
    2929 
    30     def test_00_UseEnglish 
    31         printTestHeader "Linguistics: Use <language>" 
     30    before( :all ) do 
     31        Linguistics.use( :en ) 
     32    end 
    3233 
    33         # Test the only (currently) valid codes 
    34         LanguageCodes.each do |code| 
    35             assert_nothing_raised { 
    36                 Linguistics::use( code ) 
    37             } 
     34 
     35    it "loads a language's linguistic functions via variants of its ISO639 code" do 
     36 
     37        [:en, :EN, 'en', 'EN', 'En', 'eN'].each do |code| 
     38            res = Linguistics.use( code ) 
     39            res.should have(3).members 
     40            res.should include(Array) 
     41            res.should include(String) 
     42            res.should include(Numeric) 
    3843        end 
     44    end 
    3945 
    40         # Test bogus codes 
    41         BogusLanguageCodes.each do |code| 
    42             assert_raises( RuntimeError ) { 
    43                 Linguistics::use( code ) 
    44             } 
     46 
     47    it "raises an error when a language that doesn't exist is requested" do 
     48        [ :zz, :ry, :qi ].each do |code| 
     49            lambda {  
     50                Linguistics.use( code ) 
     51              }.should raise_error( RuntimeError, /unknown language code/i ) 
    4552        end 
    46  
    47         # Test valid, but missing languages (might fail for implementors of new 
    48         # languages). 
    49         MissingLanguageCodes.each do |code| 
    50             assert_raises( LoadError ) { 
    51                 Linguistics::use( code ) 
    52             } 
     53    end 
     54     
     55     
     56    it "raises an error for valid languages that don't have any linguistic functions to load" do 
     57        [ :ja, :fr, :es ].each do |code| 
     58            lambda { 
     59                Linguistics.use( code ) 
     60              }.should raise_error( LoadError, /failed to load language extension/i ) 
    5361        end 
    5462 
     
    5664 
    5765 
    58     def test_10_InflectorMethod 
    59         printTestHeader "Linguistics: Inflector method (core classes)" 
    60         rval = nil 
     66    it "adds a method with the same name as the language code to Array that returns an inflector" + 
     67       " proxy for that language" do 
     68        TestArray.should respond_to( :en ) 
     69        TestArray.en.should be_a_kind_of( Linguistics::LanguageProxyClass ) 
     70    end 
     71     
     72     
     73    it "adds a method with the same name as the language code to String that returns an inflector" + 
     74       " proxy for that language" do 
     75        TestString.should respond_to( :en ) 
     76        TestString.en.should be_a_kind_of( Linguistics::LanguageProxyClass ) 
     77    end 
     78     
     79     
     80    it "adds a method with the same name as the language code to Numeric that returns an inflector" + 
     81       " proxy for that language" do 
     82        TestNumber.should respond_to( :en ) 
     83        TestNumber.en.should be_a_kind_of( Linguistics::LanguageProxyClass ) 
     84    end 
     85     
     86     
     87    it "allows one to extend an additional class by passing it in the ':classes' argument to ::use" do 
     88        Linguistics.use( :en, :classes => Symbol ) 
     89        :foo.should respond_to( :en ) 
     90        :foo.en.should be_a_kind_of( Linguistics::LanguageProxyClass ) 
     91    end 
     92     
    6193 
    62         # This shouldn't be necessary, but it's here for completeness 
    63         Linguistics::use( :en ) 
     94    it "allows one to extend multiple additional classes by passing them in an Array in the "+ 
     95       " ':classes' argument to ::use" do 
     96        Linguistics.use( :en, :classes => [IO, Class, Range] ) 
     97        $stderr.should respond_to( :en ) 
     98        $stderr.en.should be_a_kind_of( Linguistics::LanguageProxyClass ) 
    6499 
    65         [ TestArray, TestString, TestNumber ].each do |obj| 
    66             debug_msg "obj.class.instance_variables = %s" % 
    67                 obj.class.instance_variables.inspect 
     100        Object.should respond_to( :en ) 
     101        Object.en.should be_a_kind_of( Linguistics::LanguageProxyClass ) 
    68102 
    69             assert_respond_to obj, :en 
    70             assert_nothing_raised { 
    71                 rval = obj.en 
    72             } 
    73             assert_kind_of Linguistics::LanguageProxyClass, rval 
    74         end 
     103        (0..155).should respond_to( :en ) 
     104        (0..155).en.should be_a_kind_of( Linguistics::LanguageProxyClass ) 
    75105    end 
    76  
    77  
    78     def test_20_SpecifyClasses 
    79         printTestHeader "Linguistics: Extend specific classes" 
    80          
    81         assert_nothing_raised( "One class, not in an array" ) { 
    82             Linguistics::use( :en, :classes => Symbol ) 
    83         } 
    84         assert_respond_to :foo, :en 
    85  
    86         assert_nothing_raised( "One class, in an array" ) { 
    87             Linguistics::use( :en, :classes => [IO] ) 
    88         } 
    89         assert_respond_to $stderr, :en 
    90  
    91         assert_nothing_raised( "Two classes, in an Array" ) { 
    92             Linguistics::use( :en, :classes => [Class, Range] ) 
    93         } 
    94         assert_respond_to Array, :en 
    95         assert_respond_to( (1..5), :en ) 
    96     end 
    97  
     106     
    98107end 
    99 end