spec/util_spec.rb in icu_tournament-1.7.3 vs spec/util_spec.rb in icu_tournament-1.8.0

- old
+ new

@@ -1,432 +1,436 @@ # encoding: UTF-8 require File.expand_path(File.dirname(__FILE__) + '/spec_helper') module ICU - describe Util do - context "#parsedate" do - it "should parse standard dates" do - Util.parsedate('2001-01-01').should == '2001-01-01' - Util.parsedate('1955-11-09').should == '1955-11-09' + module Util + describe Date do + context "#parse" do + it "should parse standard dates" do + Date.parse('2001-01-01').should == '2001-01-01' + Date.parse('1955-11-09').should == '1955-11-09' + end + + it "should handle US format" do + Date.parse('03/30/2009').should == '2009-03-30' + end + + it "should handle European format" do + Date.parse('30/03/2009').should == '2009-03-30' + end + + it "should prefer European format" do + Date.parse('02/03/2009').should == '2009-03-02' + end + + it "should handle US style when there's no alternative" do + Date.parse('02/23/2009').should == '2009-02-23' + end + + it "should handle single digits" do + Date.parse('9/8/2006').should == '2006-08-09' + end + + it "should handle names of monthsx" do + Date.parse('9th Nov 1955').should == '1955-11-09' + Date.parse('16th June 1986').should == '1986-06-16' + end end - - it "should handle US format" do - Util.parsedate('03/30/2009').should == '2009-03-30' - end - - it "should handle European format" do - Util.parsedate('30/03/2009').should == '2009-03-30' - end - - it "should prefer European format" do - Util.parsedate('02/03/2009').should == '2009-03-02' - end - - it "should handle US style when there's no alternative" do - Util.parsedate('02/23/2009').should == '2009-02-23' - end - - it "should handle single digits" do - Util.parsedate('9/8/2006').should == '2006-08-09' - end - - it "should handle names of monthsx" do - Util.parsedate('9th Nov 1955').should == '1955-11-09' - Util.parsedate('16th June 1986').should == '1986-06-16' - end end + + describe File do + context "#read_utf8" do + before(:all) do + @s = ::File.dirname(__FILE__) + '/samples/file' + end - context "#read_utf8" do - before(:all) do - @s = File.dirname(__FILE__) + '/samples/file' - end + it "should read ASCII" do + File.read_utf8("#{@s}/ascii.txt").should == "Resume\nResume\n" + end - it "should read ASCII" do - Util.read_utf8("#{@s}/ascii.txt").should == "Resume\nResume\n" - end + it "should read Latin-1" do + File.read_utf8("#{@s}/latin1.txt").should == "Résumé\nRésumé\n" + end - it "should read Latin-1" do - Util.read_utf8("#{@s}/latin1.txt").should == "Résumé\nRésumé\n" - end + it "should read Windows CP1252" do + File.read_utf8("#{@s}/cp1252.txt").should == "€3\n£7\n¥1\n" + end - it "should read Windows CP1252" do - Util.read_utf8("#{@s}/cp1252.txt").should == "€3\n£7\n¥1\n" - end + it "should read UTF-8" do + File.read_utf8("#{@s}/utf8.txt").should == "ヒラガナ\nヒラガナ\n" + end - it "should read UTF-8" do - Util.read_utf8("#{@s}/utf8.txt").should == "ヒラガナ\nヒラガナ\n" + it "should thow an exception for a non-existant file" do + lambda { File.read_utf8("#{@s}/no_such_file.txt") }.should raise_error + end end - it "should thow an exception for a non-existant file" do - lambda { Util.read_utf8("#{@s}/no_such_file.txt") }.should raise_error - end - end + context "#load_ini" do + before(:all) do + @s = ::File.dirname(__FILE__) + '/samples/ini' + end - context "#load_ini" do - before(:all) do - @s = File.dirname(__FILE__) + '/samples/ini' - end + it "should read ASCII" do + data = File.load_ini("#{@s}/ascii.ini") + data.should be_an_instance_of(Hash) + data["Pairing"]["UseRating"].should == "0" + data["NoKeys"] == nil + data["Tournament Info"]["Arbiter"].should == "Herbert Scarry" + data["Tournament Info"]["DrawSymbol"].should == "D" + end - it "should read ASCII" do - data = Util.load_ini("#{@s}/ascii.ini") - data.should be_an_instance_of(Hash) - data["Pairing"]["UseRating"].should == "0" - data["NoKeys"] == nil - data["Tournament Info"]["Arbiter"].should == "Herbert Scarry" - data["Tournament Info"]["DrawSymbol"].should == "D" - end + it "should read Latin1" do + data = File.load_ini("#{@s}/latin1.ini") + data.should be_an_instance_of(Hash) + data["Tournament Info"]["Arbiter"].should == "Gearóidín" + data["Tournament Info"]["DrawSymbol"].should == "½" + end - it "should read Latin1" do - data = Util.load_ini("#{@s}/latin1.ini") - data.should be_an_instance_of(Hash) - data["Tournament Info"]["Arbiter"].should == "Gearóidín" - data["Tournament Info"]["DrawSymbol"].should == "½" - end + it "should read Windows-1252" do + data = File.load_ini("#{@s}/cp1252.ini") + data.should be_an_instance_of(Hash) + data["Tournament Info"]["Entry Fee"].should == "€50" + end - it "should read Windows-1252" do - data = Util.load_ini("#{@s}/cp1252.ini") - data.should be_an_instance_of(Hash) - data["Tournament Info"]["Entry Fee"].should == "€50" - end + it "should read UTF8" do + data = File.load_ini("#{@s}/utf8.ini") + data.should be_an_instance_of(Hash) + data["Tournament Info"]["Entry Fee"].should == "€50" + data["Tournament Info"]["Arbiter"].should == "ヒラガナ" + data["Tournament Info"]["DrawSymbol"].should == "½" + end - it "should read UTF8" do - data = Util.load_ini("#{@s}/utf8.ini") - data.should be_an_instance_of(Hash) - data["Tournament Info"]["Entry Fee"].should == "€50" - data["Tournament Info"]["Arbiter"].should == "ヒラガナ" - data["Tournament Info"]["DrawSymbol"].should == "½" - end + it "should handle untidily formatted files" do + data = File.load_ini("#{@s}/untidy.ini") + data.should be_an_instance_of(Hash) + data["Tournament Info"]["Entry Fee"].should == "€50" + data["Tournament Info"]["DrawSymbol"].should == "½" + data["Pairing"]["Use Rating"].should == "0" + end - it "should handle untidily formatted files" do - data = Util.load_ini("#{@s}/untidy.ini") - data.should be_an_instance_of(Hash) - data["Tournament Info"]["Entry Fee"].should == "€50" - data["Tournament Info"]["DrawSymbol"].should == "½" - data["Pairing"]["Use Rating"].should == "0" + it "should thow an exception for a non-existant file" do + lambda { File.read_utf8("#{@s}/no_such_file.ini") }.should raise_error + end end - - it "should thow an exception for a non-existant file" do - lambda { Util.read_utf8("#{@s}/no_such_file.ini") }.should raise_error - end end - end - describe Accessor do - context "#attr_accessor" do - before(:each) do - @class = Class.new - @class.extend ICU::Accessor - @obj = @class.new - end + describe Accessor do + context "#attr_accessor" do + before(:each) do + @class = Class.new + @class.extend ICU::Util::Accessor + @obj = @class.new + end - it "should not have an accessor unless declared" do - @obj.respond_to?(:myatr).should be_false - @obj.respond_to?(:myatr=).should be_false - end + it "should not have an accessor unless declared" do + @obj.respond_to?(:myatr).should be_false + @obj.respond_to?(:myatr=).should be_false + end - it "should have a getter but no setter with the default declaration" do - @class.attr_accessor('myatr') - @obj.respond_to?(:myatr).should be_true - @obj.respond_to?(:myatr=).should be_false - @obj.instance_eval { @myatr = 42 } - @obj.myatr.should == 42 - end + it "should have a getter but no setter with the default declaration" do + @class.attr_accessor('myatr') + @obj.respond_to?(:myatr).should be_true + @obj.respond_to?(:myatr=).should be_false + @obj.instance_eval { @myatr = 42 } + @obj.myatr.should == 42 + end - it "should be able to create do-it-yourself setters such as for a positive integer" do - @class.attr_accessor('myatr') do |val| - tmp = val.to_i - raise "invalid positive integer (#{val})" unless tmp > 0 - tmp + it "should be able to create do-it-yourself setters such as for a positive integer" do + @class.attr_accessor('myatr') do |val| + tmp = val.to_i + raise "invalid positive integer (#{val})" unless tmp > 0 + tmp + end + @obj.respond_to?(:myatr).should be_true + @obj.respond_to?(:myatr=).should be_true + lambda { @obj.myatr = "no number here" }.should raise_error(/invalid positive integer \(no number here\)/) + lambda { @obj.myatr = -1 }.should raise_error + lambda { @obj.myatr = 0 }.should raise_error + lambda { @obj.myatr = 1 }.should_not raise_error + @obj.myatr.should == 1 + lambda { @obj.myatr = '42' }.should_not raise_error + @obj.myatr.should == 42 + lambda { @obj.myatr = ' 0371 ' }.should_not raise_error + @obj.myatr.should == 371 end - @obj.respond_to?(:myatr).should be_true - @obj.respond_to?(:myatr=).should be_true - lambda { @obj.myatr = "no number here" }.should raise_error(/invalid positive integer \(no number here\)/) - lambda { @obj.myatr = -1 }.should raise_error - lambda { @obj.myatr = 0 }.should raise_error - lambda { @obj.myatr = 1 }.should_not raise_error - @obj.myatr.should == 1 - lambda { @obj.myatr = '42' }.should_not raise_error - @obj.myatr.should == 42 - lambda { @obj.myatr = ' 0371 ' }.should_not raise_error - @obj.myatr.should == 371 end - end - context "#attr_integer" do - before(:each) do - @class = Class.new - @class.extend ICU::Accessor - @class.attr_integer :myint - @obj = @class.new - end + context "#attr_integer" do + before(:each) do + @class = Class.new + @class.extend ICU::Util::Accessor + @class.attr_integer :myint + @obj = @class.new + end - it "should have a getter and setter" do - @obj.respond_to?(:myint).should be_true - @obj.respond_to?(:myint=).should be_true - end + it "should have a getter and setter" do + @obj.respond_to?(:myint).should be_true + @obj.respond_to?(:myint=).should be_true + end - it "should work with ints" do - @obj.myint = -43 - @obj.myint.should == -43 - end + it "should work with ints" do + @obj.myint = -43 + @obj.myint.should == -43 + end - it "should work with strings" do - @obj.myint = " -99 " - @obj.myint.should == -99 - end + it "should work with strings" do + @obj.myint = " -99 " + @obj.myint.should == -99 + end - it "should handle zero" do - lambda { @obj.myint = 0 }.should_not raise_error - lambda { @obj.myint = '0' }.should_not raise_error - end + it "should handle zero" do + lambda { @obj.myint = 0 }.should_not raise_error + lambda { @obj.myint = '0' }.should_not raise_error + end - it "should reject nil and other non-numbers" do - lambda { @obj.myint = nil }.should raise_error(/invalid/) - lambda { @obj.myint = "N" }.should raise_error(/invalid/) - lambda { @obj.myint = " " }.should raise_error(/invalid/) - lambda { @obj.myint = '' }.should raise_error(/invalid/) - end + it "should reject nil and other non-numbers" do + lambda { @obj.myint = nil }.should raise_error(/invalid/) + lambda { @obj.myint = "N" }.should raise_error(/invalid/) + lambda { @obj.myint = " " }.should raise_error(/invalid/) + lambda { @obj.myint = '' }.should raise_error(/invalid/) + end - it "should handle multiple names" do - @class.attr_integer :yourint, :hisint - @obj.respond_to?(:yourint).should be_true - @obj.respond_to?(:hisint=).should be_true + it "should handle multiple names" do + @class.attr_integer :yourint, :hisint + @obj.respond_to?(:yourint).should be_true + @obj.respond_to?(:hisint=).should be_true + end end - end - context "#attr_integer_or_nil" do - before(:each) do - @class = Class.new - @class.extend ICU::Accessor - @class.attr_integer_or_nil :myint - @obj = @class.new - end + context "#attr_integer_or_nil" do + before(:each) do + @class = Class.new + @class.extend ICU::Util::Accessor + @class.attr_integer_or_nil :myint + @obj = @class.new + end - it "should have a getter and setter" do - @obj.respond_to?(:myint).should be_true - @obj.respond_to?(:myint=).should be_true - end + it "should have a getter and setter" do + @obj.respond_to?(:myint).should be_true + @obj.respond_to?(:myint=).should be_true + end - it "should work with ints and nil and spaces" do - @obj.myint = 43 - @obj.myint.should == 43 - @obj.myint = nil - @obj.myint.should == nil - @obj.myint = ' ' - @obj.myint.should == nil - end + it "should work with ints and nil and spaces" do + @obj.myint = 43 + @obj.myint.should == 43 + @obj.myint = nil + @obj.myint.should == nil + @obj.myint = ' ' + @obj.myint.should == nil + end - it "should reject non-numbers" do - lambda { @obj.myint = "N" }.should raise_error(/invalid/) - end + it "should reject non-numbers" do + lambda { @obj.myint = "N" }.should raise_error(/invalid/) + end - it "should handle multiple names" do - @class.attr_integer :yourint, :hisint - @obj.respond_to?(:yourint).should be_true - @obj.respond_to?(:hisint=).should be_true + it "should handle multiple names" do + @class.attr_integer :yourint, :hisint + @obj.respond_to?(:yourint).should be_true + @obj.respond_to?(:hisint=).should be_true + end end - end - context "#attr_positive" do - before(:each) do - @class = Class.new - @class.extend ICU::Accessor - @class.attr_positive :mypos - @obj = @class.new - end + context "#attr_positive" do + before(:each) do + @class = Class.new + @class.extend ICU::Util::Accessor + @class.attr_positive :mypos + @obj = @class.new + end - it "should have a getter and setter" do - @obj.respond_to?(:mypos).should be_true - @obj.respond_to?(:mypos=).should be_true - end + it "should have a getter and setter" do + @obj.respond_to?(:mypos).should be_true + @obj.respond_to?(:mypos=).should be_true + end - it "should work as expected" do - @obj.mypos = "34" - @obj.mypos.should == 34 - end + it "should work as expected" do + @obj.mypos = "34" + @obj.mypos.should == 34 + end - it "should reject nil and other non-positive integers" do - lambda { @obj.mypos = nil }.should raise_error(/invalid/) - lambda { @obj.mypos = 'X' }.should raise_error(/invalid/) - lambda { @obj.mypos = '0' }.should raise_error(/invalid/) - lambda { @obj.mypos = -13 }.should raise_error(/invalid/) - end + it "should reject nil and other non-positive integers" do + lambda { @obj.mypos = nil }.should raise_error(/invalid/) + lambda { @obj.mypos = 'X' }.should raise_error(/invalid/) + lambda { @obj.mypos = '0' }.should raise_error(/invalid/) + lambda { @obj.mypos = -13 }.should raise_error(/invalid/) + end - it "should handle multiple names" do - @class.attr_integer :ourpos, :theirpos - @obj.respond_to?(:ourpos).should be_true - @obj.respond_to?(:theirpos=).should be_true + it "should handle multiple names" do + @class.attr_integer :ourpos, :theirpos + @obj.respond_to?(:ourpos).should be_true + @obj.respond_to?(:theirpos=).should be_true + end end - end - context "#attr_positive_or_nil" do - before(:each) do - @class = Class.new - @class.extend ICU::Accessor - @class.attr_positive_or_nil :mypon - @obj = @class.new - end + context "#attr_positive_or_nil" do + before(:each) do + @class = Class.new + @class.extend ICU::Util::Accessor + @class.attr_positive_or_nil :mypon + @obj = @class.new + end - it "should have a getter and setter" do - @obj.respond_to?(:mypon).should be_true - @obj.respond_to?(:mypon=).should be_true - end + it "should have a getter and setter" do + @obj.respond_to?(:mypon).should be_true + @obj.respond_to?(:mypon=).should be_true + end - it "should work with numbers, nil, empty strings and spaces" do - @obj.mypon = " 54 " - @obj.mypon.should == 54 - @obj.mypon = nil - @obj.mypon.should be_nil - @obj.mypon = '' - @obj.mypon.should be_nil - @obj.mypon = ' ' - @obj.mypon.should be_nil - end + it "should work with numbers, nil, empty strings and spaces" do + @obj.mypon = " 54 " + @obj.mypon.should == 54 + @obj.mypon = nil + @obj.mypon.should be_nil + @obj.mypon = '' + @obj.mypon.should be_nil + @obj.mypon = ' ' + @obj.mypon.should be_nil + end - it "should reject non-integers and non-positive integers" do - lambda { @obj.mypon = 'X' }.should raise_error(/invalid/) - lambda { @obj.mypon = '0' }.should raise_error(/invalid/) - lambda { @obj.mypon = -13 }.should raise_error(/invalid/) - end + it "should reject non-integers and non-positive integers" do + lambda { @obj.mypon = 'X' }.should raise_error(/invalid/) + lambda { @obj.mypon = '0' }.should raise_error(/invalid/) + lambda { @obj.mypon = -13 }.should raise_error(/invalid/) + end - it "should handle multiple names" do - @class.attr_integer :ourpon, :theirpon - @obj.respond_to?(:ourpon).should be_true - @obj.respond_to?(:theirpon=).should be_true + it "should handle multiple names" do + @class.attr_integer :ourpon, :theirpon + @obj.respond_to?(:ourpon).should be_true + @obj.respond_to?(:theirpon=).should be_true + end end - end - context "#attr_date" do - before(:each) do - @class = Class.new - @class.extend ICU::Accessor - @class.attr_date :mydate - @obj = @class.new - end + context "#attr_date" do + before(:each) do + @class = Class.new + @class.extend ICU::Util::Accessor + @class.attr_date :mydate + @obj = @class.new + end - it "should have a getter and setter" do - @obj.respond_to?(:mydate).should be_true - @obj.respond_to?(:mydate=).should be_true - end + it "should have a getter and setter" do + @obj.respond_to?(:mydate).should be_true + @obj.respond_to?(:mydate=).should be_true + end - it "should work as expected" do - @obj.mydate = "2009/11/09" - @obj.mydate.should == '2009-11-09' - end + it "should work as expected" do + @obj.mydate = "2009/11/09" + @obj.mydate.should == '2009-11-09' + end - it "should reject nil and other non-dates" do - lambda { @obj.mydate = nil }.should raise_error(/invalid/) - lambda { @obj.mydate = 'blah de blah' }.should raise_error(/invalid/) - lambda { @obj.mydate = ' ' }.should raise_error(/invalid/) - lambda { @obj.mydate = 0 }.should raise_error(/invalid/) - end + it "should reject nil and other non-dates" do + lambda { @obj.mydate = nil }.should raise_error(/invalid/) + lambda { @obj.mydate = 'blah de blah' }.should raise_error(/invalid/) + lambda { @obj.mydate = ' ' }.should raise_error(/invalid/) + lambda { @obj.mydate = 0 }.should raise_error(/invalid/) + end - it "should handle multiple names" do - @class.attr_date :ourdate, :theirdate - @obj.respond_to?(:ourdate).should be_true - @obj.respond_to?(:theirdate=).should be_true + it "should handle multiple names" do + @class.attr_date :ourdate, :theirdate + @obj.respond_to?(:ourdate).should be_true + @obj.respond_to?(:theirdate=).should be_true + end end - end - context "#attr_date_or_nil" do - before(:each) do - @class = Class.new - @class.extend ICU::Accessor - @class.attr_date_or_nil :mydate - @obj = @class.new - end + context "#attr_date_or_nil" do + before(:each) do + @class = Class.new + @class.extend ICU::Util::Accessor + @class.attr_date_or_nil :mydate + @obj = @class.new + end - it "should have a getter and setter" do - @obj.respond_to?(:mydate).should be_true - @obj.respond_to?(:mydate=).should be_true - end + it "should have a getter and setter" do + @obj.respond_to?(:mydate).should be_true + @obj.respond_to?(:mydate=).should be_true + end - it "should work as expected, including with nil" do - @obj.mydate = "2009/11/09" - @obj.mydate.should == '2009-11-09' - @obj.mydate = nil - @obj.mydate.should be_nil - end + it "should work as expected, including with nil" do + @obj.mydate = "2009/11/09" + @obj.mydate.should == '2009-11-09' + @obj.mydate = nil + @obj.mydate.should be_nil + end - it "should reject non-dates" do - lambda { @obj.mydate = 'blah de blah' }.should raise_error(/invalid/) - lambda { @obj.mydate = 0 }.should raise_error(/invalid/) - end + it "should reject non-dates" do + lambda { @obj.mydate = 'blah de blah' }.should raise_error(/invalid/) + lambda { @obj.mydate = 0 }.should raise_error(/invalid/) + end - it "should handle multiple names" do - @class.attr_date :ourdate, :theirdate - @obj.respond_to?(:ourdate).should be_true - @obj.respond_to?(:theirdate=).should be_true + it "should handle multiple names" do + @class.attr_date :ourdate, :theirdate + @obj.respond_to?(:ourdate).should be_true + @obj.respond_to?(:theirdate=).should be_true + end end - end - context "#attr_string" do - before(:each) do - @class = Class.new - @class.extend ICU::Accessor - @class.attr_string %r%[a-z]+%i, :mystring - @obj = @class.new - end + context "#attr_string" do + before(:each) do + @class = Class.new + @class.extend ICU::Util::Accessor + @class.attr_string %r%[a-z]+%i, :mystring + @obj = @class.new + end - it "should have a getter and setter" do - @obj.respond_to?(:mystring).should be_true - @obj.respond_to?(:mystring=).should be_true - end + it "should have a getter and setter" do + @obj.respond_to?(:mystring).should be_true + @obj.respond_to?(:mystring=).should be_true + end - it "should work as expected" do - @obj.mystring = " mark " - @obj.mystring.should == 'mark' - end + it "should work as expected" do + @obj.mystring = " mark " + @obj.mystring.should == 'mark' + end - it "should reject values that don't match" do - lambda { @obj.mystring = nil }.should raise_error(/invalid/) - lambda { @obj.mystring = ' 123 ' }.should raise_error(/invalid/) - lambda { @obj.mystring = ' ' }.should raise_error(/invalid/) - lambda { @obj.mystring = 0 }.should raise_error(/invalid/) - lambda { @obj.mystring = ' a ' }.should_not raise_error - lambda { @obj.mystring = 'ZYX' }.should_not raise_error - end + it "should reject values that don't match" do + lambda { @obj.mystring = nil }.should raise_error(/invalid/) + lambda { @obj.mystring = ' 123 ' }.should raise_error(/invalid/) + lambda { @obj.mystring = ' ' }.should raise_error(/invalid/) + lambda { @obj.mystring = 0 }.should raise_error(/invalid/) + lambda { @obj.mystring = ' a ' }.should_not raise_error + lambda { @obj.mystring = 'ZYX' }.should_not raise_error + end - it "should handle multiple names" do - @class.attr_string %r%^[A-Z]{3}$%, :ourstring, :theirstring - @obj.respond_to?(:ourstring=).should be_true - @obj.respond_to?(:theirstring).should be_true + it "should handle multiple names" do + @class.attr_string %r%^[A-Z]{3}$%, :ourstring, :theirstring + @obj.respond_to?(:ourstring=).should be_true + @obj.respond_to?(:theirstring).should be_true + end end - end - context "#attr_string_or_nil" do - before(:each) do - @class = Class.new - @class.extend ICU::Accessor - @class.attr_string_or_nil %r%^[1-9]\d*$%i, :mystring - @obj = @class.new - end + context "#attr_string_or_nil" do + before(:each) do + @class = Class.new + @class.extend ICU::Util::Accessor + @class.attr_string_or_nil %r%^[1-9]\d*$%i, :mystring + @obj = @class.new + end - it "should have a getter and setter" do - @obj.respond_to?(:mystring).should be_true - @obj.respond_to?(:mystring=).should be_true - end + it "should have a getter and setter" do + @obj.respond_to?(:mystring).should be_true + @obj.respond_to?(:mystring=).should be_true + end - it "should work as expected" do - @obj.mystring = " 12345 " - @obj.mystring.should == '12345' - @obj.mystring = nil - @obj.mystring.should be_nil - @obj.mystring = ' ' - @obj.mystring.should be_nil - end + it "should work as expected" do + @obj.mystring = " 12345 " + @obj.mystring.should == '12345' + @obj.mystring = nil + @obj.mystring.should be_nil + @obj.mystring = ' ' + @obj.mystring.should be_nil + end - it "should reject values that don't match" do - lambda { @obj.mystring = ' 0 ' }.should raise_error(/invalid/) - lambda { @obj.mystring = 0 }.should raise_error(/invalid/) - lambda { @obj.mystring = -1 }.should raise_error(/invalid/) - lambda { @obj.mystring = 98 }.should_not raise_error - end + it "should reject values that don't match" do + lambda { @obj.mystring = ' 0 ' }.should raise_error(/invalid/) + lambda { @obj.mystring = 0 }.should raise_error(/invalid/) + lambda { @obj.mystring = -1 }.should raise_error(/invalid/) + lambda { @obj.mystring = 98 }.should_not raise_error + end - it "should handle multiple names" do - @class.attr_string %r%^[A-Z][a-z]+%, :ourstring, :theirstring - @obj.respond_to?(:ourstring=).should be_true - @obj.respond_to?(:theirstring).should be_true + it "should handle multiple names" do + @class.attr_string %r%^[A-Z][a-z]+%, :ourstring, :theirstring + @obj.respond_to?(:ourstring=).should be_true + @obj.respond_to?(:theirstring).should be_true + end end end end end \ No newline at end of file