Changeset 98 for trunk/spec/linguistics_spec.rb
- Timestamp:
- 01/29/08 23:01:39 (10 months ago)
- Location:
- trunk/spec
- Files:
-
- 1 added
- 1 moved
-
. (added)
-
linguistics_spec.rb (moved) (moved from trunk/tests/use.tests.rb) (3 diffs)
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 8 2 9 unless defined? Linguistics::TestCase 10 testsdir = File::dirname( File::expand_path( __FILE__ ) )11 $LOAD_PATH.unshift testsdir unless $LOAD_PATH.include?( testsdir )3 BEGIN { 4 require 'pathname' 5 basedir = Pathname.new( __FILE__ ).dirname.parent 12 6 13 require 'lingtestcase' 7 libdir = basedir + "lib" 8 9 $LOAD_PATH.unshift( libdir ) unless $LOAD_PATH.include?( libdir ) 10 } 11 12 begin 13 require 'spec/runner' 14 require 'linguistics' 15 rescue LoadError 16 unless Object.const_defined?( :Gem ) 17 require 'rubygems' 18 retry 19 end 20 raise 14 21 end 15 22 16 23 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 ] 24 describe Linguistics do 25 25 26 26 TestArray = %w{stone stick hammer stone lantern} … … 28 28 TestNumber = 5 29 29 30 def test_00_UseEnglish 31 printTestHeader "Linguistics: Use <language>" 30 before( :all ) do 31 Linguistics.use( :en ) 32 end 32 33 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) 38 43 end 44 end 39 45 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 ) 45 52 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 ) 53 61 end 54 62 … … 56 64 57 65 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 61 93 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 ) 64 99 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 ) 68 102 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 ) 75 105 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 98 107 end 99 end
