From ryand-ruby at zenspider.com Tue Mar 8 04:26:30 2005 From: ryand-ruby at zenspider.com (Ryan Davis) Date: Tue Mar 8 04:22:14 2005 Subject: [Rubytests-devel] introduction and patch Message-ID: 'Lo all. Being new to the list I thought I'd introduce myself. I am one of the developers on the ruby2c and metaruby projects. I've started spinning up on metaruby's standard library component and we plan on using rubicon to test our implementations. I plan on tracking rubicon closely and contributing to it when and where I can. I can start with two contributions. The first: http://blog.zenspider.com/archives/2005/03/do_you_have_a_p.html and the second is a patch that allows us to build the tools w/o running the tests and to fix an error in the boolean tests (result and expected were backwards, a really common error). Thanks! ---- Index: GNUmakefile =================================================================== RCS file: /var/cvs/rubytests/rubicon/GNUmakefile,v retrieving revision 1.1.1.1 diff -d -u -r1.1.1.1 GNUmakefile --- GNUmakefile 13 Feb 2004 15:35:11 -0000 1.1.1.1 +++ GNUmakefile 7 Mar 2005 20:56:55 -0000 @@ -21,10 +21,11 @@ default: test - -test: $(UTILSTUFF) +test: tools $(RUBY) AllTests.rb +tools: $(UTILSTUFF) + Builtin: $(UTILSTUFF) cd builtin && $(RUBY) AllBuiltinTests.rb Index: rubicon_tests.rb =================================================================== RCS file: /var/cvs/rubytests/rubicon/rubicon_tests.rb,v retrieving revision 1.11 diff -d -u -r1.11 rubicon_tests.rb --- rubicon_tests.rb 5 Jan 2005 10:19:05 -0000 1.11 +++ rubicon_tests.rb 7 Mar 2005 20:56:56 -0000 @@ -112,9 +112,9 @@ def truth_table(method, *result) for a in [ false, true ] - res = result.shift - assert_equal(method.call(a), res) - assert_equal(method.call(a ? self : nil), res) + expected = result.shift + assert_equal(expected, method.call(a)) + assert_equal(expected, method.call(a ? self : nil)) end end From neoneye at gmail.com Tue Mar 8 05:29:08 2005 From: neoneye at gmail.com (Simon Strandgaard) Date: Tue Mar 8 05:24:51 2005 Subject: [Rubytests-devel] introduction and patch In-Reply-To: References: Message-ID: On Tue, 8 Mar 2005 01:26:30 -0800, Ryan Davis wrote: [snip] > I plan on tracking rubicon closely > and contributing to it when and where I can. I can start with two > contributions. The first: > > http://blog.zenspider.com/archives/2005/03/do_you_have_a_p.html Nice picture. How does it taste btw ? > and the second is a patch that allows us to build the tools w/o running > the tests and to fix an error in the boolean tests (result and expected > were backwards, a really common error). Would you be interested in a rubicon account ? -- Simon Strandgaard From holmberg at iar.se Thu Mar 10 17:12:26 2005 From: holmberg at iar.se (Johan Holmberg) Date: Thu Mar 10 17:22:16 2005 Subject: [Rubytests-devel] introduction and patch In-Reply-To: References: Message-ID: On Tue, 8 Mar 2005, Ryan Davis wrote: > > 'Lo all. > > Being new to the list I thought I'd introduce myself. I am one of the > developers on the ruby2c and metaruby projects. I've started spinning up on > metaruby's standard library component and we plan on using rubicon to test > our implementations. I plan on tracking rubicon closely and contributing to > it when and where I can. Welcome to the list! Nice to see that Rubicon finds more and more uses: Ruby, JRuby and now metaruby ... Maybe someday, someone will even write a Ruby-interpreter in Haskell :) Take a look at: http://www.pugscode.org/ /Johan Holmberg From holmberg at iar.se Fri Mar 11 09:45:24 2005 From: holmberg at iar.se (Johan Holmberg) Date: Fri Mar 11 09:41:04 2005 Subject: [Rubytests-devel] Re: [Rubytests-commit] rubicon/builtin TestKernel.rb In-Reply-To: <200503101833.j2AIXudS030057@rubyforge.org> References: <200503101833.j2AIXudS030057@rubyforge.org> Message-ID: On Thu, 10 Mar 2005 neoneye@rubyforge.org wrote: > > Modified Files: > TestKernel.rb > Log Message: > I have gotten a Mac Mini, so I decided to try out rubicon. > For some reason Rubicon got a bus error in > builtin/TestKernel.rb#test_s_open2. I have disabled this test for MacOS, > so that rubicon doesn't terminate suddenly. Status on MacOS: > All 71 files FAIL 955 23352 2 0 > Hi! I wonder why you got this error. What was the version of Ruby you were testing? Two months ago Chad Fowler ran Rubicon on Ruby 1.8.2: http://rubyforge.org/pipermail/rubytests-devel/2005-January/000132.html He had some errors, but no "bus error". So I wonder if this really is a problem with MacOS? /Johan Holmberg From neoneye at gmail.com Fri Mar 11 11:07:18 2005 From: neoneye at gmail.com (Simon Strandgaard) Date: Fri Mar 11 11:02:56 2005 Subject: Fwd: [Rubytests-devel] Re: [Rubytests-commit] rubicon/builtin TestKernel.rb In-Reply-To: References: <200503101833.j2AIXudS030057@rubyforge.org> Message-ID: On Fri, 11 Mar 2005 15:45:24 +0100 (MET), Johan Holmberg wrote: > On Thu, 10 Mar 2005 neoneye@rubyforge.org wrote: > > > > Modified Files: > > TestKernel.rb > > Log Message: > > I have gotten a Mac Mini, so I decided to try out rubicon. > > For some reason Rubicon got a bus error in > > builtin/TestKernel.rb#test_s_open2. I have disabled this test for MacOS, > > so that rubicon doesn't terminate suddenly. Status on MacOS: > > All 71 files FAIL 955 23352 2 0 > > > > Hi! > > I wonder why you got this error. > What was the version of Ruby you were testing? > > Two months ago Chad Fowler ran Rubicon on Ruby 1.8.2: > > http://rubyforge.org/pipermail/rubytests-devel/2005-January/000132.html > > He had some errors, but no "bus error". So I wonder if this really > is a problem with MacOS? If I enable #test_s_open2, I get the following error (and no results): Simon-Strandgaards-computer:~/code/rubicon/rubicon simonstrandgaard$ make ruby AllTests.rb TestArray: S TestBignum: TestBinding: TestClass: TestComparable: TestContinuation: TestDir: SS TestEnumerable: TestException: TestFalseClass: TestFile: SS TestFile__Stat: SSSSSSS TestFileTest: S TestFixnum: TestFloat: TestGC: SSS TestHash: TestInteger: TestIO: SSS TestKanjiIndex: TestKernel: S./builtin/TestKernel.rb:1290: [BUG] Bus Error ruby 1.8.2 (2004-11-03) [powerpc-darwin7.5.0] S TestFileTest: S TestFixnum: TestFloat: TestGC: SSS TestHash: TestInteger: TestIO: SSS TestKanjiIndex: TestKernel: S./builtin/TestKernel.rb:1290: [BUG] Bus Error ruby 1.8.2 (2004-11-03) [powerpc-darwin7.5.0] make: *** [test] Abort trap Simon-Strandgaards-computer:~/code/rubicon/rubicon simonstrandgaard$ I have zero knowledge about pipes, so I have no idea what seems to be the problem. If I run the tests without #test_s_open2, then I get the following results. my ruby version: ruby 1.8.2 (2004-11-03) [powerpc-darwin7.5.0] ======================================================================== All Tests Test Results V0.3.5 ======================================================================== Name OK? Tests Asserts Failures Errors ------------------------------------------------------------ Rubicon::TestCase 1 0 AccessControl 3 18 Array 69 614 Arrays 1 0 Assignment 4 75 BasicExpressions 3 15 Bignum 29 1598 Binding 1 0 BlocksProcs 3 61 BooleanExpressions 1 2 CatchThrow 1 1 Class 5 16 Classes 1 0 Comparable 7 26 Constants 2 15 Continuation 5 5 Dir 21 116 Enumerable 23 176 Eval 8 39 Exception 6 16 Exceptions 6 6 FalseClass 6 17 File 33 323 FileTest 4 136 File__Stat FAIL 35 352 1 Fixnum 35 414 Flip 6 28 Float 28 178 Floats 3 34 GC 4 1 Hash 44 296 Hashes 1 0 IO 53 1229 IfUnless 1 2 Integer 9 347 Integers 1 0 Invocation 5 11 KanjiIndex 20 190 Kernel 108 13013 LoopStuff 15 65 Marshal 6 31 MatchData 11 18 Math 2 62 Method 4 11 Methods 2 6 Module 25 101 ModulePrivate 15 41 Modules 1 0 Names 1 0 NilClass 8 21 Numeric 10 21 Object 2 11 ObjectSpace 4 6 PredefinedVariables 1 3 Proc 4 5 Range 14 159 Ranges 1 0 Regexp 14 39 RegularExpressions FAIL 3 37 1 Scope 12 27 SourceLayout 7 23 String 87 1252 Strings 5 27 Struct 11 47 Struct__Tms 1 9 Symbol 8 20 Symbols 1 0 Thread 33 103 ThreadGroup 4 7 Time 41 1813 TrueClass 6 17 ======================================================================== All 71 files FAIL 955 23352 2 0 ======================================================================== Failure Report ======================================================================== TestFile__Stat: --------------- ./builtin/TestFile__Stat.rb:219:in `test_pipe?' ./builtin/TestFile__Stat.rb:218:in `popen' ./builtin/TestFile__Stat.rb:218:in `test_pipe?' ./builtin/TestFile__Stat.rb:217:in `dont' ./builtin/TestFile__Stat.rb:217:in `test_pipe?' .... expected but was . ------------------------------------------------------------ TestRegularExpressions: ----------------------- ./language/TestRegularExpressions.rb:119:in `testGlobal' ./language/TestRegularExpressions.rb:81:in `foreach' ./language/TestRegularExpressions.rb:81:in `testGlobal' ....Expected error: 'invalid regular expression; there's no previous pattern, to which '*' would define cardinality at 2: /$*/'. <"invalid regular expression; there's no previous pattern, to which '*' would define cardinality at 2: /$*/"> expected but was <"target of repeat operator is invalid: /$*/">. ======================================================================== make: *** [test] Error 2 -- Simon Strandgaard From holmberg at iar.se Fri Mar 11 11:31:35 2005 From: holmberg at iar.se (Johan Holmberg) Date: Fri Mar 11 11:27:14 2005 Subject: Fwd: [Rubytests-devel] Re: [Rubytests-commit] rubicon/builtin TestKernel.rb In-Reply-To: References: <200503101833.j2AIXudS030057@rubyforge.org> Message-ID: On Fri, 11 Mar 2005, Simon Strandgaard wrote: >> >> He had some errors, but no "bus error". So I wonder if this really >> is a problem with MacOS? > > If I enable #test_s_open2, I get the following error (and no results): > Simon-Strandgaards-computer:~/code/rubicon/rubicon simonstrandgaard$ make > ruby AllTests.rb > [...] > TestKernel: S./builtin/TestKernel.rb:1290: [BUG] Bus Error > ruby 1.8.2 (2004-11-03) [powerpc-darwin7.5.0] > When I look at Chads mail again I see that he had: > > $ ruby -v > ruby 1.8.2 (2004-12-25) [powerpc-darwin7.7.0] > Do you know what these darwin numbers translate to in terms of OS X numbers? Can it be the difference in version that causes the difference in Rubicon behaviour? /Johan Holmberg (wishing I had a Mac to test on) From neoneye at gmail.com Fri Mar 11 11:35:50 2005 From: neoneye at gmail.com (Simon Strandgaard) Date: Fri Mar 11 11:31:33 2005 Subject: Fwd: [Rubytests-devel] Re: [Rubytests-commit] rubicon/builtin TestKernel.rb In-Reply-To: References: <200503101833.j2AIXudS030057@rubyforge.org> Message-ID: On Fri, 11 Mar 2005 17:31:35 +0100 (MET), Johan Holmberg wrote: > On Fri, 11 Mar 2005, Simon Strandgaard wrote: > >> > >> He had some errors, but no "bus error". So I wonder if this really > >> is a problem with MacOS? > > > > If I enable #test_s_open2, I get the following error (and no results): > > Simon-Strandgaards-computer:~/code/rubicon/rubicon simonstrandgaard$ make > > ruby AllTests.rb > > > [...] > > TestKernel: S./builtin/TestKernel.rb:1290: [BUG] Bus Error > > ruby 1.8.2 (2004-11-03) [powerpc-darwin7.5.0] > > > > When I look at Chads mail again I see that he had: > > > > $ ruby -v > > ruby 1.8.2 (2004-12-25) [powerpc-darwin7.7.0] > > > > Do you know what these darwin numbers translate to in terms of OS X > numbers? I have recently switched to macosx, so I am still learning. I have no idea how 7.5.0 and 7.7.0 compares. > Can it be the difference in version that causes the difference in > Rubicon behaviour? I should add that I installed Ruby as binary from this site: http://homepage.mac.com/discord/Ruby/ -- Simon Strandgaard From holmberg at iar.se Mon Mar 14 14:04:03 2005 From: holmberg at iar.se (Johan Holmberg) Date: Mon Mar 14 13:59:35 2005 Subject: [Rubytests-devel] Updated README & http://rubytests.rubyforge.org/ Message-ID: Hi! A while ago we talked about making a release of Rubicon, now when it works reasonably well with Ruby 1.8.2. In preparation for a such a release I have tried to update the README of the project. You can view the result at: http://rubytests.rubyforge.org/ # HTML version http://rubytests.rubyforge.org/README # text source My intention was that the page should be able to serve both as the README file in CVS and also as the "Project Home Page" at RubyForge. The previous home page was very minimal: http://rubytests.rubyforge.org/index-old.html so I replaced it with the current one. My current thoughts is to commit that new README to the CVS-archives, and add a rule in the Makefile for how to produce the HTML-version at http://rubytests.rubyforge.org/. I'm using Docutils (from http://docutils.sourceforge.net/) for the HTML-generation. That format has the great advantage that the source is *very readable* as it is too (as you can see from the README-link above). What do you think? Is the new content of the README file OK? Is the "approach" OK, with a generated HTML-version? /Johan Holmberg From enebo at acm.org Mon Mar 14 14:54:43 2005 From: enebo at acm.org (Thomas E Enebo) Date: Mon Mar 14 14:50:12 2005 Subject: [Rubytests-devel] Updated README & http://rubytests.rubyforge.org/ In-Reply-To: References: Message-ID: <20050314195443.GM27628@garnet.tc.umn.edu> For what its worth I run rubicon when testing JRuby with: make RUBY=/path/to/jruby.sh This is a little different from what we see in the new README. I am including what we have in our documentation. I would like to change our documentation for our next release so it jives with rubicon "best practices" in documenting rubicon use. I will also try and following the various methods listed in the new proposed documents to make sure JRuby runs Rubicon adequately. -Tom Here is the Rubicon section of our README.testing: ---Part of README.testing--- Using Rubicon ------------- a) Before you can use rubicon, you must allow jruby to use ruby's core modules. jruby does not distribute its own set, so you must borrow them. Copy your 'ruby/{verion}' (i.e. /usr/lib/ruby/1.8 on most linuxes) to 'lib/ruby' in your CVS sandbox (on linux a softlink works also). b) Install rubicon (http://rubyforge.org/projects/rubytests). To get it from CVS: cvs -d:pserver:anonymous@rubyforge.org:/var/cvs/rubytests login cvs -z3 -d:pserver:anonymous@rubyforge.org:/var/cvs/rubytests co rubicon c) Run rubicon make RUBY={PATH_TO_JRUBY_HOME}/bin/jruby.sh to run all tests {PATH_TO_JRUBY_HOME}/bin/jruby.sh builtin/TestFloat.rb to test a single file (TestFloat in this case). Read rubicon documentation for more details (or if rubicon changes something since this document was published). ---Part of README.testing--- On Mon, 14 Mar 2005, Johan Holmberg defenestrated me: > > Hi! > > A while ago we talked about making a release of Rubicon, now when it > works reasonably well with Ruby 1.8.2. > > In preparation for a such a release I have tried to update the > README of the project. You can view the result at: > > http://rubytests.rubyforge.org/ # HTML version > http://rubytests.rubyforge.org/README # text source > > My intention was that the page should be able to serve both as the > README file in CVS and also as the "Project Home Page" at RubyForge. > The previous home page was very minimal: > > http://rubytests.rubyforge.org/index-old.html > > so I replaced it with the current one. > > My current thoughts is to commit that new README to the > CVS-archives, and add a rule in the Makefile for how to produce the > HTML-version at http://rubytests.rubyforge.org/. I'm using Docutils > (from http://docutils.sourceforge.net/) for the HTML-generation. > That format has the great advantage that the source is *very > readable* as it is too (as you can see from the README-link above). > > What do you think? > Is the new content of the README file OK? > Is the "approach" OK, with a generated HTML-version? > > /Johan Holmberg > > _______________________________________________ > Rubytests-devel mailing list > Rubytests-devel@rubyforge.org > http://rubyforge.org/mailman/listinfo/rubytests-devel -- + http://www.tc.umn.edu/~enebo +---- mailto:enebo@acm.org ----+ | Thomas E Enebo, Protagonist | "A word is worth a thousand | | | pictures" -Bruce Tognazzini | From holmberg at iar.se Tue Mar 15 03:22:02 2005 From: holmberg at iar.se (Johan Holmberg) Date: Tue Mar 15 03:17:34 2005 Subject: [Rubytests-devel] Updated README & http://rubytests.rubyforge.org/ In-Reply-To: <20050314195443.GM27628@garnet.tc.umn.edu> References: <20050314195443.GM27628@garnet.tc.umn.edu> Message-ID: On Mon, 14 Mar 2005, Thomas E Enebo wrote: > > For what its worth I run rubicon when testing JRuby with: > > make RUBY=/path/to/jruby.sh > > This is a little different from what we see in the new README. I am > including what we have in our documentation. I would like to change > our documentation for our next release so it jives with rubicon > "best practices" in documenting rubicon use. I will also try and > following the various methods listed in the new proposed documents to > make sure JRuby runs Rubicon adequately. > > -Tom > I tried to de-emphasize the role of the makefiles, but I should probably add an example with the "make RUBY=...." kind of command line (I was thinking that an interested user could find out by himself by reading the makefile). Another difference in your readme seems to be that you have an example of running individual testfiles without doing a "cd" to the subdirectory. I avoided this in my examples, since it doesn't work for the "All*.rb" files in the subdirectories (I'll try to fix this, and maybe change the examples). I also think I will try to run JRuby :) (I don't know why I haven't tried yet ...). /Johan Holmberg From ryand-ruby at zenspider.com Fri Mar 18 03:20:40 2005 From: ryand-ruby at zenspider.com (Ryan Davis) Date: Fri Mar 18 03:16:04 2005 Subject: [Rubytests-devel] test scaffolding? Message-ID: <99b25f7f40ddcf3843244d08f4bc79a9@zenspider.com> Would anyone cry if I ripped all of the test runner / suite stuff out and made this a 100% plain vanilla test/unit suite? Pros: + LESS CODE! + Ability to use -t and -n to select what you want to run. + LESS CODE! + Able to use all the other runners that test/unit provides support for. + LESS CODE! + ??? I dunno - prolly other benes Cons: + I'd have a fair amount of work to do up front. + ??? I dunno - prolly other cons -- I know that you believe you understand what you think I said but, I'm not sure you realize that what you heard is not what I meant. From holmberg at iar.se Fri Mar 18 10:18:19 2005 From: holmberg at iar.se (Johan Holmberg) Date: Fri Mar 18 10:13:48 2005 Subject: [Rubytests-devel] test scaffolding? In-Reply-To: <99b25f7f40ddcf3843244d08f4bc79a9@zenspider.com> References: <99b25f7f40ddcf3843244d08f4bc79a9@zenspider.com> Message-ID: On Fri, 18 Mar 2005, Ryan Davis wrote: > > Would anyone cry if I ripped all of the test runner / suite stuff out and > made this a 100% plain vanilla test/unit suite? > That depends ... In general I think it is a good idea to move towards being more of an ordinary test/unit testsuite. But I also think we should be careful not to loose any functionality currently available. One such thing might be the summary that can be produced now, like: http://jruby.sourceforge.net/release-announcement.shtml?0.8.0 I'm not an advanced user of Test::Unit; maybe that kind of output is possible more or less "out of the box" with Test::Unit too? Do you know if it is? About the "LESS CODE" aspect: isn't most of the code in for example "rubicon.rb" and "rubicon_tests.rb" either code concerned with the summary I described above, or Rubicon-specific stuff than can't be removed even if the suite becomes "vanilla test/unit" ? A while ago I tried to understand how "extensible" Test::Unit is, with the intention of doing something similar to what you want to do now. But I didn't realize how to make the move without loosing for example the summary feature I mentioned above. My personal conclusion then, was to continue writing/improving testcases instead, until the issue got resolved. What do you think about it? Do you already have a solution? /Johan Holmberg From enebo at acm.org Fri Mar 18 13:00:32 2005 From: enebo at acm.org (Thomas E Enebo) Date: Fri Mar 18 12:55:52 2005 Subject: [Rubytests-devel] test scaffolding? In-Reply-To: References: <99b25f7f40ddcf3843244d08f4bc79a9@zenspider.com> Message-ID: <20050318180032.GB5135@garnet.tc.umn.edu> On Fri, 18 Mar 2005, Johan Holmberg defenestrated me: > On Fri, 18 Mar 2005, Ryan Davis wrote: > > > >Would anyone cry if I ripped all of the test runner / suite stuff out and > >made this a 100% plain vanilla test/unit suite? > > But I also think we should be careful not to loose any functionality > currently available. One such thing might be the summary > that can be produced now, like: > > http://jruby.sourceforge.net/release-announcement.shtml?0.8.0 Having the summary of passes/fails is a nice feature to keep for JRuby since we are still not very close to passing all tests. It is nice to send out the summary with a release to give a scannable result of what we can and cannot do... > My personal conclusion then, was to continue writing/improving > testcases instead, until the issue got resolved. What do you think > about it? Do you already have a solution? I will make more of an effort to try and submit unit tests where we find weak coverage areas (we have been updating our internal unit test suite, but have not been a very good citizens with passing those tests on). One problem with rubicon in regards to implementing Ruby with it is test/unit itself. It is a great unit test module (from what little experience I have with it), but it requires quite a few things to be implemented before rubicon will start running. A simple example of one problem we had was needing to implement Thread.critical= so that tempfile.rb would run (I think we initially subbed it out :)). JRuby implements enough Ruby features to run rubicon now, so this is just a historical observation. When that mythical Haskell port starts they may end up feeling that pain though :) -Tom -- + http://www.tc.umn.edu/~enebo +---- mailto:enebo@acm.org ----+ | Thomas E Enebo, Protagonist | "A word is worth a thousand | | | pictures" -Bruce Tognazzini | From ryand-ruby at zenspider.com Tue Mar 22 22:36:59 2005 From: ryand-ruby at zenspider.com (Ryan Davis) Date: Tue Mar 22 22:32:25 2005 Subject: [Rubytests-devel] Code Review changes to Nil/True/False/Time & rubicon_tests Message-ID: I'd like a code review before I check in. We are starting to work on the metaruby project full time now and we're starting to put in changes to rubicon that we need to progress incrementally. Below are tentative changes to rubicon_tests, true, false, nil, and time test classes. A brief summary/reasoning followed by full diffs are below: rubicon_tests: modified to properly do filtering (-n works on cmdline) and exit non-zero if failed. True/False/Nil: Changed test method names to be auditable by ZenTest. Time: Ugh. I'm sorry about the size of these diffs, and I'm totally willing and able to break up the commits into different pieces. Basically, I've fixed a bunch of tests (eg using assert instead of assert_equal), renamed the methods for ZenTest, run and merged in an audit's results, and put some flunks in where the tests were deficient (eg to_s uses strftime to test). What I haven't done is improved the situation in here at all (yet). I'm getting to it, but I'm also getting in too deep and would like smaller commit chunks. Oh, and I re-sorted all the tests. :) If I had more history w/ this project, I'd just commit, but I don't and these changes are not insignificant. Before I go and step on toes, I'd like some eyeballs and permission to commit. Thanks guys. -- Ryan Index: rubicon_tests.rb =================================================================== RCS file: /var/cvs/rubytests/rubicon/rubicon_tests.rb,v retrieving revision 1.12 diff -d -u -r1.12 rubicon_tests.rb --- rubicon_tests.rb 10 Mar 2005 08:59:54 -0000 1.12 +++ rubicon_tests.rb 23 Mar 2005 03:08:31 -0000 @@ -29,12 +29,16 @@ else suite = Test::Unit::TestSuite.new ARGV.each do |testmethod| - suite << testClass.new(testmethod) + catch(:invalid_test) do + suite << testClass.new(testmethod) + end end end Test::Unit.run = true testrunner = Rubicon::TestRunner.new(suite, Test::Unit::UI::VERBOSE) results = testrunner.start + + exit(results.error_count + results.failure_count > 0 ? 1 : 0) end # ------------------------------------------------------- Index: builtin/TestFalseClass.rb =================================================================== RCS file: /var/cvs/rubytests/rubicon/builtin/TestFalseClass.rb,v retrieving revision 1.1.1.1 diff -d -u -r1.1.1.1 TestFalseClass.rb --- builtin/TestFalseClass.rb 13 Feb 2004 15:35:13 -0000 1.1.1.1 +++ builtin/TestFalseClass.rb 23 Mar 2005 03:08:32 -0000 @@ -4,19 +4,19 @@ class TestFalseClass < Rubicon::TestCase - def test_00_sanity + def test_00sanity assert_equal(false, FALSE) end - def test_AND # '&' + def test_and # '&' truth_table(false.method("&"), false, false) end - def test_OR # '|' + def test_or # '|' truth_table(false.method("|"), false, true) end - def test_XOR # '^' + def test_carat # '^' truth_table(false.method("^"), false, true) end Index: builtin/TestNilClass.rb =================================================================== RCS file: /var/cvs/rubytests/rubicon/builtin/TestNilClass.rb,v retrieving revision 1.2 diff -d -u -r1.2 TestNilClass.rb --- builtin/TestNilClass.rb 21 Nov 2004 07:15:40 -0000 1.2 +++ builtin/TestNilClass.rb 23 Mar 2005 03:08:32 -0000 @@ -4,7 +4,7 @@ class TestNilClass < Rubicon::TestCase - def test_AND # '&' + def test_and # '&' truth_table(nil.method("&"), false, false) end @@ -12,14 +12,14 @@ $global = 1 end - def test_OR # '|' + def test_or # '|' truth_table(nil.method("|"), false, true) $global = 0 assert_equal(true, nil | sideEffect) assert_equal(1, $global) end - def test_XOR # '^' + def test_carat # '^' truth_table(nil.method("^"), false, true) $global = 0 assert_equal(true, nil ^ sideEffect) Index: builtin/TestTime.rb =================================================================== RCS file: /var/cvs/rubytests/rubicon/builtin/TestTime.rb,v retrieving revision 1.5 diff -d -u -r1.5 TestTime.rb --- builtin/TestTime.rb 28 Dec 2004 09:07:38 -0000 1.5 +++ builtin/TestTime.rb 23 Mar 2005 03:08:32 -0000 @@ -5,7 +5,7 @@ # NOTICE: These tests assume that your local time zone is *not* GMT. # -class T +class T # ZenTest SKIP attr :orig attr :amt attr :result @@ -89,68 +89,159 @@ # def checkComponent(m, i) @@dates.each do |x| - msg = "\nTesting method Time."+m.id2name+" with "+x.orig.join(' ')+":\n" - assert_equal(x.orig[i], Time.local(*x.orig).send(m), msg) - assert_equal(x.result[i], Time.local(*x.result).send(m), msg) - assert_equal(x.orig[i], Time.gm(*x.orig).send(m), msg) - assert_equal(x.result[i], Time.gm(*x.result).send(m), msg) + assert_equal(x.orig[i], Time.local(*x.orig).send(m)) + assert_equal(x.result[i], Time.local(*x.result).send(m)) + assert_equal(x.orig[i], Time.gm(*x.orig).send(m)) + assert_equal(x.result[i], Time.gm(*x.result).send(m)) + end + end + + def os_specific_epoch + if $os == MsWin32 || $os == JRuby + "Thu Jan 01 00:00:00 1970" + else + "Thu Jan 1 00:00:00 1970" end end # # Ensure against time travel # - def test_00sanity - Time.now.to_i > 960312287 # Tue Jun 6 13:25:06 EDT 2000 + def test_00sanity # ZenTest SKIP + assert_operator Time.now.to_i, :>, 960312287 # Tue Jun 6 13:25:06 EDT 2000 end - # Method tests: + # Class methods: - def test_CMP # '<=>' - @@dates.each do |x| - if (x.amt != 0) - assert_equal(1, Time.local(*x.result) <=> Time.local(*x.orig), - "#{x.result} should be > #{x.orig}") + def test_class__load + raise NotImplementedError, 'Need to write test_class__load' + end - assert_equal(-1, Time.local(*x.orig) <=> Time.local(*x.result)) - assert_equal(0, Time.local(*x.orig) <=> Time.local(*x.orig)) - assert_equal(0, Time.local(*x.result) <=> Time.local(*x.result)) - - assert_equal(1,Time.gm(*x.result) <=> Time.gm(*x.orig)) - assert_equal(-1,Time.gm(*x.orig) <=> Time.gm(*x.result)) - assert_equal(0,Time.gm(*x.orig) <=> Time.gm(*x.orig)) - assert_equal(0,Time.gm(*x.result) <=> Time.gm(*x.result)) - end + def test_class_at + t = Time.now + sec = t.to_i + assert_equal(0, Time.at(0).to_i) + assert_equal(t, Time.at(t)) + assert((Time.at(sec,1000000).to_f - Time.at(sec).to_f) == 1.0) + end + + def test_class_gm + assert_raises(ArgumentError) { Time.gm } + assert(Time.gm(2000) != Time.local(2000)) + assert_equal(Time.gm(2000), Time.gm(2000,1,1,0,0,0)) + assert_equal(Time.gm(2000,nil,nil,nil,nil,nil), Time.gm(2000,1,1,0,0,0)) + assert_raises(ArgumentError) { Time.gm(2000,0) } + assert_raises(ArgumentError) { Time.gm(2000,13) } + assert_raises(ArgumentError) { Time.gm(2000,1,1,24) } + Time.gm(2000,1,1,23) + @@months.each do |month, num| + assert_equal(Time.gm(2000,month), Time.gm(2000,num,1,0,0,0)) + assert_equal(Time.gm(1970,month), Time.gm(1970,num,1,0,0,0)) + assert_equal(Time.gm(2037,month), Time.gm(2037,num,1,0,0,0)) end + t = Time.gm(2000,1,1) + a = t.to_a + assert_equal(Time.gm(*a),t) end - def test_MINUS # '-' - @@dates.each do |x| - # Check subtracting an amount in seconds - assert_equal(Time.local(*x.result) - x.amt, Time.local(*x.orig)) - assert_equal(Time.gm(*x.result) - x.amt, Time.gm(*x.orig)) - # Check subtracting two times - assert_equal(Time.local(*x.result) - Time.local(*x.orig), x.amt) - assert_equal(Time.gm(*x.result) - Time.gm(*x.orig), x.amt) + def test_class_httpdate + raise NotImplementedError, 'Need to write test_class_httpdate' + end + + def test_class_iso8601 + raise NotImplementedError, 'Need to write test_class_iso8601' + end + + def test_class_local + assert_raises(ArgumentError) { Time.local } + assert(Time.gm(2000) != Time.local(2000)) + assert_equal(Time.local(2000), Time.local(2000,1,1,0,0,0)) + assert_equal(Time.local(2000,nil,nil,nil,nil,nil), Time.local(2000,1,1,0,0,0)) + assert_raises(ArgumentError) { Time.local(2000,0) } + assert_raises(ArgumentError) { Time.local(2000,13) } + assert_raises(ArgumentError) { Time.local(2000,1,1,24) } + Time.local(2000,1,1,23) + @@months.each do |month, num| + assert_equal(Time.local(2000,month), Time.local(2000,num,1,0,0,0)) + assert_equal(Time.local(1971,month), Time.local(1971,num,1,0,0,0)) + assert_equal(Time.local(2037,month), Time.local(2037,num,1,0,0,0)) end + t = Time.local(2000,1,1) + a = t.to_a + assert_equal(Time.local(*a),t) end - def test_PLUS # '+' - @@dates.each do |x| - assert_equal(Time.local(*x.orig) + x.amt, Time.local(*x.result)) - assert_equal(Time.gm(*x.orig) + x.amt, Time.gm(*x.result)) + def test_class_mktime + # + # Test insufficient arguments + # + assert_raises(ArgumentError) { Time.mktime } + assert(Time.gm(2000) != Time.mktime(2000)) + assert_equal(Time.mktime(2000), Time.mktime(2000,1,1,0,0,0)) + assert_equal(Time.mktime(2000,nil,nil,nil,nil,nil), Time.mktime(2000,1,1,0,0,0)) + assert_raises(ArgumentError) { Time.mktime(2000,0) } + assert_raises(ArgumentError) { Time.mktime(2000,13) } + assert_raises(ArgumentError) { Time.mktime(2000,1,1,24) } + Time.mktime(2000,1,1,23) + + # + # Make sure spelled-out month names work + # + @@months.each do |month, num| + assert_equal(Time.mktime(2000,month), Time.mktime(2000,num,1,0,0,0)) + assert_equal(Time.mktime(1971,month), Time.mktime(1971,num,1,0,0,0)) + assert_equal(Time.mktime(2037,month), Time.mktime(2037,num,1,0,0,0)) end + t = Time.mktime(2000,1,1) + a = t.to_a + assert_equal(Time.mktime(*a),t) end - def test__dump + def test_class_now + t1 = Time.now + sleep 1 + t2 = Time.now + d = t2.to_f - t1.to_f + assert(d > 0.9 && d < 1.1) end - def os_specific_epoch - if $os == MsWin32 || $os == JRuby - "Thu Jan 01 00:00:00 1970" - else - "Thu Jan 1 00:00:00 1970" + def test_class_parse + raise NotImplementedError, 'Need to write test_class_parse' + end + + def test_class_rfc2822 + raise NotImplementedError, 'Need to write test_class_rfc2822' + end + + def test_class_rfc822 + raise NotImplementedError, 'Need to write test_class_rfc822' + end + + def test_class_times + Version.less_than("1.7") do + assert_instance_of(Struct::Tms, Time.times) end + Version.greater_or_equal("1.7") do + assert_instance_of(Struct::Tms, Process.times) + end + end + + def test_class_utc + raise NotImplementedError, 'Need to write test_class_utc' + end + + def test_class_xmlschema + raise NotImplementedError, 'Need to write test_class_xmlschema' + end + + def test_class_zone_offset + raise NotImplementedError, 'Need to write test_class_zone_offset' + end + + # Instance Methods: + + def test__dump + raise NotImplementedError, 'Need to write test__dump' end def test_asctime @@ -183,7 +274,11 @@ checkComponent(:day, 2) end - def test_eql? + def test_dst_eh + raise NotImplementedError, 'Need to write test_dst_eh' + end + + def test_eql_eh t1=Time.now t2=t1 t2+= 2e-6 @@ -192,13 +287,29 @@ assert(!t1.eql?(t2)) end - def test_gmt? + def test_getgm + raise NotImplementedError, 'Need to write test_getgm' + end + + def test_getlocal + raise NotImplementedError, 'Need to write test_getlocal' + end + + def test_getutc + raise NotImplementedError, 'Need to write test_getutc' + end + + def test_gmt_eh assert(!Time.now.gmt?) assert(Time.now.gmtime.gmt?) assert(!Time.local(2000).gmt?) assert(Time.gm(2000).gmt?) end + def test_gmt_offset + raise NotImplementedError, 'Need to write test_gmt_offset' + end + def test_gmtime t = Time.now loc = Time.at(t) @@ -208,19 +319,39 @@ assert(t.asctime != loc.asctime) end + def test_gmtoff + raise NotImplementedError, 'Need to write test_gmtoff' + end + def test_hash t = Time.now t2 = Time.at(t) sleep(0.1) t3 = Time.now - assert(t.hash == t2.hash) - assert(t.hash != t3.hash) + assert_equal(t.hash, t2.hash) + assert_not_equal(t.hash, t3.hash) end def test_hour checkComponent(:hour, 3) end + def test_httpdate + raise NotImplementedError, 'Need to write test_httpdate' + end + + def test_initialize + t1 = Time.new + sleep 1 + t2 = Time.new + d = t2.to_f - t1.to_f + assert(d > 0.9 && d < 1.1) + end + + def test_inspect + raise NotImplementedError, 'Need to write test_inspect' + end + def test_isdst # This code is problematic: how do I find out the exact # date and time of the dst switch for all the possible @@ -239,7 +370,7 @@ "PST", "PDT"].include? zone dtest = [ - [false, 2000, 1, 1], + [false, 2000, 1, 1], [true, 2000, 7, 1], ] @@ -262,6 +393,10 @@ end end + def test_iso8601 + raise NotImplementedError, 'Need to write test_iso8601' + end + def test_localtime t = Time.now.gmtime utc = Time.at(t) @@ -279,6 +414,17 @@ checkComponent(:min, 4) end + def test_minus # '-' + @@dates.each do |x| + # Check subtracting an amount in seconds + assert_equal(Time.local(*x.result) - x.amt, Time.local(*x.orig)) + assert_equal(Time.gm(*x.result) - x.amt, Time.gm(*x.orig)) + # Check subtracting two times + assert_equal(Time.local(*x.result) - Time.local(*x.orig), x.amt) + assert_equal(Time.gm(*x.result) - Time.gm(*x.orig), x.amt) + end + end + def test_mon checkComponent(:mon, 1) end @@ -287,10 +433,43 @@ checkComponent(:month, 1) end + def test_plus # '+' + @@dates.each do |x| + assert_equal(Time.local(*x.orig) + x.amt, Time.local(*x.result)) + assert_equal(Time.gm(*x.orig) + x.amt, Time.gm(*x.result)) + end + end + + def test_rfc2822 + raise NotImplementedError, 'Need to write test_rfc2822' + end + + def test_rfc822 + raise NotImplementedError, 'Need to write test_rfc822' + end + def test_sec checkComponent(:sec, 5) end + def test_spaceship # '<=>' + @@dates.each do |x| + if (x.amt != 0) + assert_equal(1, Time.local(*x.result) <=> Time.local(*x.orig), + "#{x.result} should be > #{x.orig}") + + assert_equal(-1, Time.local(*x.orig) <=> Time.local(*x.result)) + assert_equal(0, Time.local(*x.orig) <=> Time.local(*x.orig)) + assert_equal(0, Time.local(*x.result) <=> Time.local(*x.result)) + + assert_equal(1,Time.gm(*x.result) <=> Time.gm(*x.orig)) + assert_equal(-1,Time.gm(*x.orig) <=> Time.gm(*x.result)) + assert_equal(0,Time.gm(*x.orig) <=> Time.gm(*x.orig)) + assert_equal(0,Time.gm(*x.result) <=> Time.gm(*x.result)) + end + end + end + def test_strftime # Sat Jan 1 14:58:42 2000 t = Time.local(2000,1,1,14,58,42) @@ -326,6 +505,10 @@ end + def test_succ + raise NotImplementedError, 'Need to write test_succ' + end + def test_to_a t = Time.now a = t.to_a @@ -354,6 +537,7 @@ end def test_to_s + flunk "You can't use strftime to test to_s!" t = Time.now assert_equal(t.strftime("%a %b %d %H:%M:%S %Z %Y"),t.to_s) end @@ -375,6 +559,18 @@ assert_equal(1066,t.usec) end + def test_utc + raise NotImplementedError, 'Need to write test_utc' + end + + def test_utc_eh + raise NotImplementedError, 'Need to write test_utc_eh' + end + + def test_utc_offset + raise NotImplementedError, 'Need to write test_utc_offset' + end + def test_wday t = Time.local(2001, 4, 1) @@ -384,6 +580,10 @@ } end + def test_xmlschema + raise NotImplementedError, 'Need to write test_xmlschema' + end + def test_yday t = Time.local(2001, 1, 1) 365.times {|i| @@ -406,106 +606,6 @@ assert(gmt != t.zone) end - def test_s__load - end - - def test_s_at - t = Time.now - sec = t.to_i - assert_equal(0, Time.at(0).to_i) - assert_equal(t, Time.at(t)) - assert((Time.at(sec,1000000).to_f - Time.at(sec).to_f) == 1.0) - end - - def test_s_gm - assert_raises(ArgumentError) { Time.gm } - assert(Time.gm(2000) != Time.local(2000)) - assert_equal(Time.gm(2000), Time.gm(2000,1,1,0,0,0)) - assert_equal(Time.gm(2000,nil,nil,nil,nil,nil), Time.gm(2000,1,1,0,0,0)) - assert_raises(ArgumentError) { Time.gm(2000,0) } - assert_raises(ArgumentError) { Time.gm(2000,13) } - assert_raises(ArgumentError) { Time.gm(2000,1,1,24) } - Time.gm(2000,1,1,23) - @@months.each do |month, num| - assert_equal(Time.gm(2000,month), Time.gm(2000,num,1,0,0,0)) - assert_equal(Time.gm(1970,month), Time.gm(1970,num,1,0,0,0)) - assert_equal(Time.gm(2037,month), Time.gm(2037,num,1,0,0,0)) - end - t = Time.gm(2000,1,1) - a = t.to_a - assert_equal(Time.gm(*a),t) - end - - def test_s_local - assert_raises(ArgumentError) { Time.local } - assert(Time.gm(2000) != Time.local(2000)) - assert_equal(Time.local(2000), Time.local(2000,1,1,0,0,0)) - assert_equal(Time.local(2000,nil,nil,nil,nil,nil), Time.local(2000,1,1,0,0,0)) - assert_raises(ArgumentError) { Time.local(2000,0) } - assert_raises(ArgumentError) { Time.local(2000,13) } - assert_raises(ArgumentError) { Time.local(2000,1,1,24) } - Time.local(2000,1,1,23) - @@months.each do |month, num| - assert_equal(Time.local(2000,month), Time.local(2000,num,1,0,0,0)) - assert_equal(Time.local(1971,month), Time.local(1971,num,1,0,0,0)) - assert_equal(Time.local(2037,month), Time.local(2037,num,1,0,0,0)) - end - t = Time.local(2000,1,1) - a = t.to_a - assert_equal(Time.local(*a),t) - end - - def test_s_mktime - # - # Test insufficient arguments - # - assert_raises(ArgumentError) { Time.mktime } - assert(Time.gm(2000) != Time.mktime(2000)) - assert_equal(Time.mktime(2000), Time.mktime(2000,1,1,0,0,0)) - assert_equal(Time.mktime(2000,nil,nil,nil,nil,nil), Time.mktime(2000,1,1,0,0,0)) - assert_raises(ArgumentError) { Time.mktime(2000,0) } - assert_raises(ArgumentError) { Time.mktime(2000,13) } - assert_raises(ArgumentError) { Time.mktime(2000,1,1,24) } - Time.mktime(2000,1,1,23) - - # - # Make sure spelled-out month names work - # - @@months.each do |month, num| - assert_equal(Time.mktime(2000,month), Time.mktime(2000,num,1,0,0,0)) - assert_equal(Time.mktime(1971,month), Time.mktime(1971,num,1,0,0,0)) - assert_equal(Time.mktime(2037,month), Time.mktime(2037,num,1,0,0,0)) - end - t = Time.mktime(2000,1,1) - a = t.to_a - assert_equal(Time.mktime(*a),t) - end - - def test_s_new - t1 = Time.new - sleep 1 - t2 = Time.new - d = t2.to_f - t1.to_f - assert(d > 0.9 && d < 1.1) - end - - def test_s_now - t1 = Time.now - sleep 1 - t2 = Time.now - d = t2.to_f - t1.to_f - assert(d > 0.9 && d < 1.1) - end - - def test_s_times - Version.less_than("1.7") do - assert_instance_of(Struct::Tms, Time.times) - end - Version.greater_or_equal("1.7") do - assert_instance_of(Struct::Tms, Process.times) - end - end - end Rubicon::handleTests(TestTime) if $0 == __FILE__ Index: builtin/TestTrueClass.rb =================================================================== RCS file: /var/cvs/rubytests/rubicon/builtin/TestTrueClass.rb,v retrieving revision 1.2 diff -d -u -r1.2 TestTrueClass.rb --- builtin/TestTrueClass.rb 13 Feb 2004 16:46:00 -0000 1.2 +++ builtin/TestTrueClass.rb 23 Mar 2005 03:08:32 -0000 @@ -8,15 +8,15 @@ assert_equal(true,TRUE) end - def test_AND # '&' + def test_and # '&' truth_table(true.method("&"), false, true) end - def test_OR # '|' + def test_or # '|' truth_table(true.method("|"), true, true) end - def test_XOR # '^' + def test_carat # '^' truth_table(true.method("^"), true, false) end -- ryand-ruby@zenspider.com - Seattle.rb - http://www.zenspider.com/seattle.rb http://blog.zenspider.com/ - http://rubyforge.org/projects/ruby2c From ryand-ruby at zenspider.com Wed Mar 23 18:56:19 2005 From: ryand-ruby at zenspider.com (Ryan Davis) Date: Wed Mar 23 18:51:36 2005 Subject: [Rubytests-devel] Code Review changes to Nil/True/False/Time & rubicon_tests In-Reply-To: References: Message-ID: <3f3b71a3a3d2272282b7aaa263843b45@zenspider.com> On Mar 22, 2005, at 7:36 PM, Ryan Davis wrote: > Time: Ugh. I'm sorry about the size of these diffs, and I'm totally > willing and able to break up the commits into different > pieces. Basically, I've fixed a bunch of tests (eg using assert > instead of assert_equal), renamed the methods for ZenTest, run > and merged in an audit's results, and put some flunks in where > the tests were deficient (eg to_s uses strftime to test). What I > haven't done is improved the situation in here at all (yet). I'm > getting to it, but I'm also getting in too deep and would like > smaller commit chunks. Oh, and I re-sorted all the tests. :) Simon asked me to post the test results to the list. I haven't changed Nil/False/True, just Time. Oh, and the one legit test that fails below is a bug w/ the test that I have a fix for in another checkout. I'll submit that after this one goes through (or doesn't). Here goes: Loaded suite TestTime Started test_00sanity(TestTime): . test__dump(TestTime): E test_asctime(TestTime): . test_class__load(TestTime): E test_class_at(TestTime): . test_class_gm(TestTime): . test_class_httpdate(TestTime): E test_class_iso8601(TestTime): E test_class_local(TestTime): . test_class_mktime(TestTime): . test_class_now(TestTime): . test_class_parse(TestTime): E test_class_rfc2822(TestTime): E test_class_rfc822(TestTime): E test_class_times(TestTime): . test_class_utc(TestTime): E test_class_xmlschema(TestTime): E test_class_zone_offset(TestTime): E test_clone(TestTime): . test_ctime(TestTime): . test_day(TestTime): . test_dst_eh(TestTime): E test_eql_eh(TestTime): . test_getgm(TestTime): E test_getlocal(TestTime): E test_getutc(TestTime): E test_gmt_eh(TestTime): . test_gmt_offset(TestTime): E test_gmtime(TestTime): . test_gmtoff(TestTime): E test_hash(TestTime): . test_hour(TestTime): . test_httpdate(TestTime): E test_initialize(TestTime): . test_inspect(TestTime): E test_isdst(TestTime): F test_iso8601(TestTime): E test_localtime(TestTime): . test_mday(TestTime): . test_min(TestTime): . test_minus(TestTime): . test_mon(TestTime): . test_month(TestTime): . test_plus(TestTime): . test_rfc2822(TestTime): E test_rfc822(TestTime): E test_sec(TestTime): . test_spaceship(TestTime): . test_strftime(TestTime): . test_succ(TestTime): E test_to_a(TestTime): . test_to_f(TestTime): . test_to_i(TestTime): . test_to_s(TestTime): F test_tv_sec(TestTime): . test_tv_usec(TestTime): . test_usec(TestTime): . test_utc(TestTime): E test_utc_eh(TestTime): E test_utc_offset(TestTime): E test_wday(TestTime): . test_xmlschema(TestTime): E test_yday(TestTime): . test_year(TestTime): . test_zone(TestTime): . Finished in 2.588752 seconds. 1) Error: test__dump(TestTime): NotImplementedError: Need to write test__dump TestTime.rb:244:in `test__dump' 2) Error: test_class__load(TestTime): NotImplementedError: Need to write test_class__load TestTime.rb:117:in `test_class__load' 3) Error: test_class_httpdate(TestTime): NotImplementedError: Need to write test_class_httpdate TestTime.rb:148:in `test_class_httpdate' 4) Error: test_class_iso8601(TestTime): NotImplementedError: Need to write test_class_iso8601 TestTime.rb:152:in `test_class_iso8601' 5) Error: test_class_parse(TestTime): NotImplementedError: Need to write test_class_parse TestTime.rb:209:in `test_class_parse' 6) Error: test_class_rfc2822(TestTime): NotImplementedError: Need to write test_class_rfc2822 TestTime.rb:213:in `test_class_rfc2822' 7) Error: test_class_rfc822(TestTime): NotImplementedError: Need to write test_class_rfc822 TestTime.rb:217:in `test_class_rfc822' 8) Error: test_class_utc(TestTime): NotImplementedError: Need to write test_class_utc TestTime.rb:230:in `test_class_utc' 9) Error: test_class_xmlschema(TestTime): NotImplementedError: Need to write test_class_xmlschema TestTime.rb:234:in `test_class_xmlschema' 10) Error: test_class_zone_offset(TestTime): NotImplementedError: Need to write test_class_zone_offset TestTime.rb:238:in `test_class_zone_offset' 11) Error: test_dst_eh(TestTime): NotImplementedError: Need to write test_dst_eh TestTime.rb:278:in `test_dst_eh' 12) Error: test_getgm(TestTime): NotImplementedError: Need to write test_getgm TestTime.rb:291:in `test_getgm' 13) Error: test_getlocal(TestTime): NotImplementedError: Need to write test_getlocal TestTime.rb:295:in `test_getlocal' 14) Error: test_getutc(TestTime): NotImplementedError: Need to write test_getutc TestTime.rb:299:in `test_getutc' 15) Error: test_gmt_offset(TestTime): NotImplementedError: Need to write test_gmt_offset TestTime.rb:310:in `test_gmt_offset' 16) Error: test_gmtoff(TestTime): NotImplementedError: Need to write test_gmtoff TestTime.rb:323:in `test_gmtoff' 17) Error: test_httpdate(TestTime): NotImplementedError: Need to write test_httpdate TestTime.rb:340:in `test_httpdate' 18) Error: test_inspect(TestTime): NotImplementedError: Need to write test_inspect TestTime.rb:352:in `test_inspect' 19) Failure: test_isdst(TestTime) [TestTime.rb:388:in `test_isdst' TestTime.rb:386:in `each' TestTime.rb:386:in `test_isdst']: Expected 2000,10,29,1,59 to be dst=true. expected but was . 20) Error: test_iso8601(TestTime): NotImplementedError: Need to write test_iso8601 TestTime.rb:397:in `test_iso8601' 21) Error: test_rfc2822(TestTime): NotImplementedError: Need to write test_rfc2822 TestTime.rb:444:in `test_rfc2822' 22) Error: test_rfc822(TestTime): NotImplementedError: Need to write test_rfc822 TestTime.rb:448:in `test_rfc822' 23) Error: test_succ(TestTime): NotImplementedError: Need to write test_succ TestTime.rb:509:in `test_succ' 24) Failure: test_to_s(TestTime) [TestTime.rb:540]: You can't use strftime to test to_s!. 25) Error: test_utc(TestTime): NotImplementedError: Need to write test_utc TestTime.rb:563:in `test_utc' 26) Error: test_utc_eh(TestTime): NotImplementedError: Need to write test_utc_eh TestTime.rb:567:in `test_utc_eh' 27) Error: test_utc_offset(TestTime): NotImplementedError: Need to write test_utc_offset TestTime.rb:571:in `test_utc_offset' 28) Error: test_xmlschema(TestTime): NotImplementedError: Need to write test_xmlschema TestTime.rb:584:in `test_xmlschema' 65 tests, 1821 assertions, 2 failures, 26 errors From holmberg at iar.se Wed Mar 23 19:22:20 2005 From: holmberg at iar.se (Johan Holmberg) Date: Wed Mar 23 19:17:33 2005 Subject: [Rubytests-devel] Code Review changes to Nil/True/False/Time & rubicon_tests In-Reply-To: References: Message-ID: On Tue, 22 Mar 2005, Ryan Davis wrote: > > I'd like a code review before I check in. We are starting to work on > the metaruby project full time now and we're starting to put in > changes to rubicon that we need to progress incrementally. Below are > tentative changes to rubicon_tests, true, false, nil, and time test > classes. A brief summary/reasoning followed by full diffs are below: > Hi! I've taken a first look at your changes. I have some immediate comments about the test-method renaming & ZenTest stuff. I share your concern about knowing "what is left to do" (e.g. methods without tests), but I don't like the way the patch handles this. I'll try to explain why. - I think missing test-methods for existing methods is only half the story: another issue is existing test-methods for non-existing methods (I've seen such cases before, in association with mixins). I have a preliminary change that handles both these cases, and would like to show it here on the list before we decide what to do (I'll try to post a mail describing it next week). - I doubt that it is a good idea to *always* consider not-yet-tested methods as errors in Rubicon (if I understand your patch correctly it works that way). I think a common "use case" is wanting to run the current testsuite and see how many "Ruby/JRuby/... bugs" we discover. The not-yet-implement stuff is more of a "Rubicon bug", and is not always interesting. - Rubicon currently has a test-method naming scheme that is used in all test-files, not just the ones included in your patch. It is already quite systematic. - I think the current test-method naming scheme in Rubicon is quite well thought out: + test-method names for operators (e.g. "test_EQUAL") are visually distinctive, by the use of uppercase. + the use of uppercase alphabetic "aliases" for operators (e.g. "EQUAL" for "==") makes the names part of another "namespace". There is no risk with for a collision with the test-method for an "EQUAL" method, since method names never are uppercase in Ruby. + I think a name such as "test_eql?" is easier to read than "test_eql_eh". These are just my first reactions (maybe I have misunderstood something about your ZenTest approach). As I said above, I'll try to post a description of my missing-test-method-code next week, to comapre our approaches. I hope we can find a solution that everybody will be happy with. I'll try to comment on the rest later (don't know if I'll have time before Easter weekend). /Johan Holmberg From holmberg at iar.se Thu Mar 24 03:21:11 2005 From: holmberg at iar.se (Johan Holmberg) Date: Thu Mar 24 03:16:23 2005 Subject: [Rubytests-devel] Goal of Rubicon? Message-ID: Hi! On the RubyForge page of our project it says: Porting The Pragmatic Programmers' Rubicon to Test::Unit and Ruby 1.8+ in an effort to eventually include it in the "test" directory of the Ruby distribution. I would like to change that text to something more implementation-neutral. Now that we have Ruby, JRuby and metaruby (and the mythical Haskell port), I think we should emhasize this. We try to test the "language", not a specific implementation. ( I already tried to make changes in this direction when I modified the README file (see an earlier mail). If noone has any objections to these README changes I'll commit the new README soon. ) I actually think it is a *feature* that we are a separate project, and not included in the C-Ruby distribution. If it was included, the focus would probably be too much on C-Ruby. What are your thought about the description/goal of Rubicon? /Johan Holmberg From headius at gmail.com Thu Mar 24 10:03:21 2005 From: headius at gmail.com (Charles O Nutter) Date: Thu Mar 24 09:58:28 2005 Subject: [Rubytests-devel] Goal of Rubicon? In-Reply-To: References: Message-ID: I agree, I think we should put together a goal statement more in line with what we're really trying to do...create an independent test suite for Ruby the language, regardless of platform or implementation. On Thu, 24 Mar 2005 09:21:11 +0100 (MET), Johan Holmberg wrote: > > Hi! > > On the RubyForge page of our project it says: > > Porting The Pragmatic Programmers' Rubicon to Test::Unit and > Ruby 1.8+ in an effort to eventually include it in the "test" > directory of the Ruby distribution. > > I would like to change that text to something more > implementation-neutral. Now that we have Ruby, JRuby and metaruby > (and the mythical Haskell port), I think we should emhasize this. > We try to test the "language", not a specific implementation. > > ( I already tried to make changes in this direction when I modified > the README file (see an earlier mail). If noone has any objections > to these README changes I'll commit the new README soon. ) > > I actually think it is a *feature* that we are a separate project, > and not included in the C-Ruby distribution. If it was included, the > focus would probably be too much on C-Ruby. > > What are your thought about the description/goal of Rubicon? > > /Johan Holmberg > > _______________________________________________ > Rubytests-devel mailing list > Rubytests-devel@rubyforge.org > http://rubyforge.org/mailman/listinfo/rubytests-devel > From ryand-ruby at zenspider.com Thu Mar 24 17:56:45 2005 From: ryand-ruby at zenspider.com (Ryan Davis) Date: Thu Mar 24 17:51:54 2005 Subject: [Rubytests-devel] Code Review changes to Nil/True/False/Time & rubicon_tests In-Reply-To: References: Message-ID: On Mar 23, 2005, at 4:22 PM, Johan Holmberg wrote: Sorry I committed before getting your mail. I did have Simon take a good look at it first tho. I have responses to your concerns below. > I've taken a first look at your changes. I have some immediate > comments about the test-method renaming & ZenTest stuff. > > I share your concern about knowing "what is left to do" (e.g. methods > without tests), but I don't like the way the patch handles this. I'll > try to explain why. > > - I think missing test-methods for existing methods is only half > the story: another issue is existing test-methods for non-existing > methods (I've seen such cases before, in association with > mixins). I totally agree. ZenTest already does a bidirectional audit. The only thing that came up (for any of the classes I ran against) was clone, which I didn't bother to do because it is inherited from Object. > I have a preliminary change that handles both these > cases, and would like to show it here on the list before we decide > what to do (I'll try to post a mail describing it next week). As I said above. I'm sorry that I committed before getting to your email. I doubt it would have stopped me from committing (seeing as Simon signed off on it already) because we are working on metaruby at a full clip right now. I don't mind going back and changing things later to satisfy the group. > - I doubt that it is a good idea to *always* consider not-yet-tested > methods as errors in Rubicon (if I understand your patch correctly > it works that way). I think a common "use case" is wanting to run > the current testsuite and see how many "Ruby/JRuby/... bugs" we > discover. The not-yet-implement stuff is more of a "Rubicon bug", > and is not always interesting. Hrm. This is probably just a philosophical difference, but I have to disagree with you here. Yes, I think it is a bug in Rubicon when it doesn't cover methods that it should, but in the same vein, the data is just as valuable to JRuby/metaruby/whomever else. The sooner they know that they've now got a moving target, the better. The closer we can track with ruby itself, the better. The only group this doesn't help is the original ruby group, but at the very least they could now see that we are actively aware that we are behind and are working on catching up. If they see that we are too far behind for too long, then the value of the tests can start to go down in the minds of the core developers. We can certainly take it too far in the other direction, if all we do is fill the reports with noise for far too long. We don't intend to do that. We'll only work at a reasonable pace we can keep up with. Again, probably just a philosophical difference. I'll try to keep mine in check. :) > - Rubicon currently has a test-method naming scheme that is used in > all test-files, not just the ones included in your patch. It is > already quite systematic. *nod* and I am certainly causing some pain in the interim there, and I apologize for that. I do fully intend to do a full sweep and make everything consistent with itself. I will happily take full responsibility for any of these such changes and get them all done in as timely a manner as possible. I also intend to scrutinize all the tests that I'm responsible for (wrt metaruby implementation). I'm not done w/ Time at all, but I wanted to get this stuff out of the way first because I didn't want anyone to have to wade through a ton of diffs that were a mix of resorting the test methods, test method renames AND test logic errors. This commit is just a first trial step. There is certainly more to come. > - I think the current test-method naming scheme in Rubicon is quite > well thought out: > + test-method names for operators (e.g. "test_EQUAL") are > visually distinctive, by the use of uppercase. > + the use of uppercase alphabetic "aliases" for operators > (e.g. "EQUAL" for "==") makes the names part of another > "namespace". There is no risk with for a collision with the > test-method for an "EQUAL" method, since method names never are > uppercase in Ruby. I don't disagree that the current naming convention is well thought out (with the exception of my point below). It just didn't match up with ZenTest and I really don't want to "break" anyone else's code that already passes an audit on the next (very soon) pending release of ZenTest. Both naming schemes are arbitrary, but fairly similar. As long as they both make sense (they do) and are both well thought out (they are) I figured this was as good a move as any and would be accepted (in time at least). > + I think a name such as "test_eql?" is easier to read than > "test_eql_eh". But you can't write: def test_eql?_normal def test_eql?_edgecase1 ... def test_eql?_edgecaseN The mapping that ZenTest does allows for that. Minor, but used quite a bit. > These are just my first reactions (maybe I have misunderstood > something about your ZenTest approach). As I said above, I'll try to > post a description of my missing-test-method-code next week, to > comapre our approaches. I hope we can find a solution that everybody > will be happy with. *nod* I do too. > I'll try to comment on the rest later (don't know if I'll have time > before Easter weekend). I look forward to it. -- ryand-ruby@zenspider.com - Seattle.rb - http://www.zenspider.com/seattle.rb http://blog.zenspider.com/ - http://rubyforge.org/projects/ruby2c From holmberg at iar.se Wed Mar 30 19:35:52 2005 From: holmberg at iar.se (Johan Holmberg) Date: Wed Mar 30 19:30:54 2005 Subject: [Rubytests-devel] Finding "missing test methods" ... Message-ID: Hi! In a response to Ryans mail last week, I mentioned that I had some uncommitted code that did checking of "methods not tested" and "tests of non-existing methods". I'll try to describe it now. I have used my code when I have been writing new test methods for the tests under "builtin", and have found it very useful. I run it like: $ ruby TestDir.rb # normal run ... $ ruby TestDir.rb -m # show missing test methods ... 1) Failure: test_95_untested_methods(TestDir) [./../rubicon_missing.rb:140]: Missing tests in TestDir. <[]> expected but was <["test_pos=", "test_path", "test_pos"]>. ... $ ruby AllTests.rb -m # show missing test methods ... With the "-m" option, an error will be generated showing "methods not tested" and "tests of non-existing methods". The "-m" option can be given both to individual testcases and to "AllTest.rb". In essence my code and Ryans ZenTest does the same thing (as far as I understand): make sure that a tested class (say Foo) and the testcase class testing it (TestFoo) are "in sync". A bit simplified one can say that each method "xyz" in Foo should have a corresponding "test_xyz" method in TestFoo that tests that particular method. But there are differences too: *** the search for missing methods is done by introspection *when running Rubicon* (not offline). I think this important, since the list of methods in a Ruby class depends on what version of Ruby we are running. And the testcases in Rubicon sometimes looks like: Version.greater_or_equal("1.6.8") do def test_xyz ... end end With my approach (checking everything at runtime), it is possible to take care of both variations in Ruby-version and "if-statements" like the one above. And one of the goals I think we should have for Rubicon is that it should be possible to test several version of Ruby (and thereby see the evolution of Ruby). *** the test for missing methods is selectable (via the -m option). Thinking about when I was trying to get Rubicon "in shape" for Ruby 1.8.2, I feel that it would have been a real problem if I always had been bothered with a bunch of "not yet implemented" errors. I regularly ran Rubicon on at least Windows XP, Linux, FreeBSD and Solaris. One of my motivations was the possibility of getting rid of (almost) all errors. I don't mean that it is unimportant to fill in the "missing test methods", just that always comparing with the ultimate goal (when everything is tested) may make it harder to see the smaller steps of progress. I think having the "missing method tests" selectable would suite both use cases (maybe the default could be switched to "on", but I still want to have it selectable). *** the tests know about details in Rubicon. For example that the test methods for the "Array" class exist in the "ArrayBase" test class, not in "TestArray". *** my missing method tests are very non-intrusive. I wrote them so they know about the current naming conversion of testmethods in Rubicon: test_xyz ---> tests method "xyz" test_s_abc ---> tests class method "abc" test_OP ---> test operator with alias "OP" ( e.g. LSHIFT for << ) I don't mean that the current naming scheme is perfect, but it has worked well so far. And if needed, it can also be extended. My changes consist of: - a new file "rubicon_missing.rb". This file implements the "missing test methods" checks. - a couple of lines added to "AllTests.rb" and to "rubicon_tests.rb". They handle the newly introduced -m option (and a variant -M). First I thought about sending a patch to the list. But since the changes are so non-intrusive, I think I will commit them to the archive so you can try them out more easily. Examples of running: $ ruby AllTests.rb -m $ ruby AllTests.rb -M # stricter version $ cd builtin $ ruby TestDir.rb -m The -M option differ in how it handles inherited methods (if they should be tested or not). The code may still need a bit of tweaking, to adapt to the details of Rubicon. Finally I add the output of a Rubicon run with the "-m" option below so you can see the kind of output produced. /Johan Holmberg ---------------------------------------------------------------------- TestArray: S TestBignum: TestBinding: TestClass: TestComparable: TestContinuation: TestDir: SS TestEnumerable: TestException: TestFalseClass: TestFile: SS TestFileTest: S TestFile__Stat: SSSS TestFixnum: TestFloat: TestGC: SSS TestHash: TestIO: SSS TestInteger: TestKanjiIndex: TestKernel: not_a_valid_command: not found not_a_valid_command: not found SS TestMarshal: TestMatchData: TestMath: TestMethod: TestModule: TestModulePrivate: S TestNilClass: TestNumeric: SSSS TestObject: TestObjectSpace: S TestProc: TestRange: TestRegexp: TestString: S TestStruct: TestStruct__Tms: TestSymbol: TestThread: TestThreadGroup: TestTime: S TestTrueClass: TestAccessControl: TestArrays: TestAssignment: TestBasicExpressions: TestBlocksProcs: ./language/TestBlocksProcs.rb:56: warning: multiple values for a block parameter (0 for 1) from ./language/TestBlocksProcs.rb:56 ./language/TestBlocksProcs.rb:60: warning: multiple values for a block parameter (0 for 1) from ./language/TestBlocksProcs.rb:60 ./language/TestBlocksProcs.rb:62: warning: multiple values for a block parameter (2 for 1) from ./language/TestBlocksProcs.rb:62 TestBooleanExpressions: TestCase: TestCatchThrow: TestClasses: TestConstants: TestEval: TestExceptions: TestFlip: TestFloats: TestHashes: TestIfUnless: TestIntegers: TestInvocation: TestLoopStuff: TestMethods: TestModules: TestNames: TestPredefinedVariables: TestRanges: TestRegularExpressions: TestScope: TestSourceLayout: TestStrings: TestSymbols: ======================================================================== All Tests Test Results V0.3.5 ======================================================================== Name OK? Tests Asserts Failures Errors ------------------------------------------------------------ Rubicon::TestCase 4 0 AccessControl 7 18 Array FAIL 73 618 3 Arrays 4 0 Assignment 8 75 BasicExpressions 7 15 Bignum FAIL 33 1602 1 Binding FAIL 4 4 1 BlocksProcs 7 61 BooleanExpressions 5 2 CatchThrow 5 1 Class FAIL 9 20 2 Classes 4 0 Comparable 11 30 Constants 6 15 Continuation FAIL 9 9 2 Dir FAIL 25 120 4 Enumerable 27 180 Eval 12 39 Exception FAIL 10 20 2 Exceptions 10 6 FalseClass FAIL 10 21 2 File FAIL 37 343 2 FileTest FAIL 8 172 2 File__Stat 39 387 Fixnum FAIL 39 418 1 Flip 10 28 Float FAIL 32 182 1 Floats 7 34 GC 8 5 Hash FAIL 48 300 3 Hashes 4 0 IO FAIL 57 1233 4 IfUnless 5 2 Integer FAIL 13 351 1 Integers 4 0 Invocation 9 11 KanjiIndex 24 190 Kernel FAIL 113 147231 4 LoopStuff 19 69 Marshal FAIL 10 35 2 MatchData FAIL 15 22 1 Math FAIL 6 66 2 Method FAIL 8 15 1 Methods 6 6 Module FAIL 29 105 2 ModulePrivate 19 41 Modules 4 0 Names 4 0 NilClass FAIL 12 25 2 Numeric FAIL 14 25 1 Object 6 15 ObjectSpace FAIL 8 10 1 PredefinedVariables 5 3 Proc FAIL 8 9 1 Range FAIL 18 163 1 Ranges 4 0 Regexp FAIL 18 43 3 RegularExpressions 7 2993 Scope 16 27 SourceLayout 11 23 String FAIL 91 1256 3 Strings 9 27 Struct FAIL 15 51 2 Struct__Tms 5 9 Symbol FAIL 12 24 2 Symbols 4 0 Thread FAIL 37 107 2 ThreadGroup FAIL 8 11 2 Time FAIL 45 1817 3 TrueClass FAIL 10 21 2 ======================================================================== All 71 files FAIL 1230 160761 68 0 ======================================================================== Failure Report ======================================================================== TestArray: ---------- ....Missing tests in ArrayBase. <[]> expected but was <["test_indexes", "test_select", "test_zip", "test_map", "test_indices", "test_reject", "test_inspect", "test_frozen?"]>. ....Missing tests in ArrayBase (for singletons). <[]> expected but was <["test_s_AREF ( operator [] )"]>. ....Unknown tests in ArrayBase. <[]> expected but was <["test_values_at1"]>. ------------------------------------------------------------ TestBignum: ----------- ....Missing tests in TestBignum. <[]> expected but was <["test_div", "test_quo", "test_coerce", "test_modulo"]>. ------------------------------------------------------------ TestBinding: ------------ ....Missing tests in TestBinding. <[]> expected but was <["test_clone"]>. ------------------------------------------------------------ TestClass: ---------- ....Missing tests in TestClass. <[]> expected but was <["test_new", "test_allocate"]>. ....Unknown tests in TestClass (for singletons). <[]> expected but was <["test_s_new", "test_s_inherited"]>. ------------------------------------------------------------ TestContinuation: ----------------- ....Missing tests in TestContinuation. <[]> expected but was <["test_AREF ( operator [] )", "test_call"]>. ....Unknown tests in TestContinuation. <[]> expected but was <["test_call_no_args", "test_remote_call", "test_call_many_args", "test_call_one_args"]>. ------------------------------------------------------------ TestDir: -------- ....Missing tests in TestDir. <[]> expected but was <["test_pos=", "test_path", "test_pos"]>. ....Missing tests in TestDir (for singletons). <[]> expected but was <["test_s_tmpdir", "test_s_AREF ( operator [] )"]>. ....Unknown tests in TestDir. <[]> expected but was <["test_improper_close"]>. ....Unknown tests in TestDir (for singletons). <[]> expected but was <["test_s_aref", "test_s_new"]>. ------------------------------------------------------------ TestException: -------------- ....Missing tests in TestException. <[]> expected but was <["test_to_str", "test_inspect", "test_to_s"]>. ....Unknown tests in TestException. <[]> expected but was <["test_set_backtrace2"]>. ------------------------------------------------------------ TestFalseClass: --------------- ....Missing tests in TestFalseClass. <[]> expected but was <["test_OR ( operator | )", "test_pretty_print", "test_AND ( operator & )", "test_XOR ( operator ^ )", "test_pretty_print_cycle"]>. ....Unknown tests in TestFalseClass. <[]> expected but was <["test_carat", "test_or", "test_and"]>. ------------------------------------------------------------ TestFile: --------- ....Missing tests in TestFile (for singletons). <[]> expected but was <["test_s_exist?", "test_s_grpowned?", "test_s_executable_real?", "test_s_setgid?", "test_s_readable_real?", "test_s_socket?", "test_s_directory?", "test_s_owned?", "test_s_lchown", "test_s_executable?", "test_s_setuid?", "test_s_readable?", "test_s_symlink?", "test_s_size?", "test_s_lchmod", "test_s_extname", "test_s_fnmatch", "test_s_writable_real?", "test_s_chardev?", "test_s_exists?", "test_s_pipe?", "test_s_file?", "test_s_sticky?", "test_s_fnmatch?", "test_s_writable?", "test_s_zero?", "test_s_blockdev?"]>. ....Unknown tests in TestFile (for singletons). <[]> expected but was <["test_s_open"]>. ------------------------------------------------------------ TestFileTest: ------------- ....Missing tests in TestFileTest (for singletons). <[]> expected but was <["test_s_exist?", "test_s_size", "test_s_grpowned?", "test_s_executable_real?", "test_s_setgid?", "test_s_readable_real?", "test_s_socket?", "test_s_directory?", "test_s_owned?", "test_s_executable?", "test_s_setuid?", "test_s_readable?", "test_s_symlink?", "test_s_size?", "test_s_writable_real?", "test_s_chardev?", "test_s_exists?", "test_s_pipe?", "test_s_file?", "test_s_sticky?", "test_s_writable?", "test_s_zero?", "test_s_blockdev?"]>. ....Unknown tests in TestFileTest. <[]> expected but was <["test_test", "test_skipped", "test_CMP ( operator <=> )", "test_hlink"]>. ------------------------------------------------------------ TestFixnum: ----------- ....Missing tests in TestFixnum. <[]> expected but was <["test_div", "test_quo", "test_modulo", "test_to_sym", "test_divmod"]>. ------------------------------------------------------------ TestFloat: ---------- ....Missing tests in TestFloat. <[]> expected but was <["test_eql?", "test_hash", "test_to_int", "test_coerce", "test_modulo"]>. ------------------------------------------------------------ TestHash: --------- ....Missing tests in HashBase. <[]> expected but was <["test_indices", "test_select", "test_inspect", "test_indexes", "test_pretty_print", "test_merge!", "test_pretty_print_cycle"]>. ....Missing tests in HashBase (for singletons). <[]> expected but was <["test_s_AREF ( operator [] )"]>. ....Unknown tests in HashBase (for singletons). <[]> expected but was <["test_s_aref", "test_s_new"]>. ------------------------------------------------------------ TestIO: ------- ....Missing tests in TestIO. <[]> expected but was <["test_fsync", "test_sysseek", "test_inspect", "test_to_io", "test_reopen", "test_eof?"]>. ....Missing tests in TestIO (for singletons). <[]> expected but was <["test_s_for_fd", "test_s_read", "test_s_open", "test_s_sysopen"]>. ....Unknown tests in TestIO. <[]> expected but was <["test_reopen1", "test_gets_para", "test_reopen2"]>. ....Unknown tests in TestIO (for singletons). <[]> expected but was <["test_s_popen_spawn"]>. ------------------------------------------------------------ TestInteger: ------------ ....Missing tests in TestInteger. <[]> expected but was <["test_truncate", "test_to_int", "test_round", "test_ceil", "test_to_i", "test_floor"]>. ------------------------------------------------------------ TestKernel: ----------- ....Missing tests in TestKernel. <[]> expected but was <["test_instance_variable_set", "test___id__", "test___send__", "test_instance_variable_get", "test_object_id"]>. ....Missing tests in TestKernel (for singletons). <[]> expected but was <["test_s_gets", "test_s_pp", "test_s_warn", "test_s_open", "test_s_readlines", "test_s_test", "test_s_untrace_var", "test_s_readline", "test_s_method_missing", "test_s_autoload?", "test_s_getc"]>. ....Unknown tests in TestKernel. <[]> expected but was <["test_svar_alias", "test_method_missing", "test_gvar_alias"]>. ....Unknown tests in TestKernel (for singletons). <[]> expected but was <["test_s_open1", "test_s_require_changedpath", "test_s_readline1", "test_s_gets1", "test_s_readline2", "test_s_gets2", "test_s_open2", "test_s_untrace_var1", "test_s_readline3", "test_s_gets3", "test_s_readlines1", "test_s_untrace_var2", "test_s_singleton_method_added", "test_s_readlines2"]>. ------------------------------------------------------------ TestMarshal: ------------ ....Missing tests in TestMarshal (for singletons). <[]> expected but was <["test_s_load", "test_s_dump"]>. ....Unknown tests in TestMarshal (for singletons). <[]> expected but was <["test_s_dump_load4", "test_s_dump_load1", "test_s_dump_load3", "test_s_dump_load5", "test_s_dump_load2"]>. ------------------------------------------------------------ TestMatchData: -------------- ....Missing tests in TestMatchData. <[]> expected but was <["test_select", "test_inspect", "test_pretty_print", "test_captures", "test_values_at"]>. ------------------------------------------------------------ TestMath: --------- ....Missing tests in TestMath (for singletons). <[]> expected but was <["test_s_atan2", "test_s_asinh", "test_s_cosh", "test_s_ldexp", "test_s_tan", "test_s_log", "test_s_acosh", "test_s_erfc", "test_s_atan", "test_s_frexp", "test_s_sin", "test_s_exp", "test_s_tanh", "test_s_erf", "test_s_asin", "test_s_sqrt", "test_s_cos", "test_s_atanh", "test_s_sinh", "test_s_hypot", "test_s_acos", "test_s_log10"]>. ....Unknown tests in TestMath. <[]> expected but was <["test_constants", "test_fns"]>. ------------------------------------------------------------ TestMethod: ----------- ....Missing tests in TestMethod. <[]> expected but was <["test_inspect", "test_EQUAL ( operator == )", "test_to_s", "test_unbind", "test_clone"]>. ------------------------------------------------------------ TestModule: ----------- ....Missing tests in TestModule. <[]> expected but was <["test_public_method_defined?", "test_freeze", "test_EQUAL ( operator == )", "test_pretty_print", "test_to_s", "test_instance_method", "test_class_variables", "test_protected_method_defined?", "test_autoload", "test_pretty_print_cycle", "test_include?", "test_const_missing", "test_private_method_defined?", "test_autoload?"]>. ....Unknown tests in TestModule (for singletons). <[]> expected but was <["test_s_new"]>. ------------------------------------------------------------ TestNilClass: ------------- ....Missing tests in TestNilClass. <[]> expected but was <["test_inspect", "test_OR ( operator | )", "test_AND ( operator & )", "test_XOR ( operator ^ )", "test_pretty_print_cycle"]>. ....Unknown tests in TestNilClass. <[]> expected but was <["test_carat", "test_or", "test_and"]>. ------------------------------------------------------------ TestNumeric: ------------ ....Missing tests in TestNumeric. <[]> expected but was <["test_div", "test_truncate", "test_CMP ( operator <=> )", "test_remainder", "test_to_int", "test_quo", "test_round", "test_pretty_print", "test_modulo", "test_singleton_method_added", "test_ceil", "test_pretty_print_cycle", "test_step", "test_floor"]>. ------------------------------------------------------------ TestObjectSpace: ---------------- ....Missing tests in TestObjectSpace (for singletons). <[]> expected but was <["test_s_undefine_finalizer", "test_s_remove_finalizer", "test_s_define_finalizer", "test_s_add_finalizer", "test_s_call_finalizer", "test_s__id2ref"]>. ------------------------------------------------------------ TestProc: --------- ....Missing tests in TestProc. <[]> expected but was <["test_EQUAL ( operator == )", "test_dup", "test_to_s", "test_clone", "test_binding", "test_to_proc"]>. ------------------------------------------------------------ TestRange: ---------- ....Missing tests in TestRange. <[]> expected but was <["test_inspect", "test_pretty_print"]>. ------------------------------------------------------------ TestRegexp: ----------- ....Missing tests in TestRegexp. <[]> expected but was <["test_eql?", "test_inspect", "test_hash", "test_options", "test_to_s"]>. ....Missing tests in TestRegexp (for singletons). <[]> expected but was <["test_s_union"]>. ....Unknown tests in TestRegexp (for singletons). <[]> expected but was <["test_s_new"]>. ------------------------------------------------------------ TestString: ----------- ....Missing tests in StringBase. <[]> expected but was <["test_inspect"]>. ....Unknown tests in StringBase. <[]> expected but was <["test_REV ( operator ~ )"]>. ....Unknown tests in StringBase (for singletons). <[]> expected but was <["test_s_new"]>. ------------------------------------------------------------ TestStruct: ----------- ....Missing tests in TestStruct. <[]> expected but was <["test_eql?", "test_select", "test_inspect", "test_each_pair", "test_hash", "test_pretty_print", "test_to_s", "test_pretty_print_cycle", "test_values_at"]>. ....Missing tests in TestStruct (for singletons). <[]> expected but was <["test_s_new"]>. ------------------------------------------------------------ TestSymbol: ----------- ....Missing tests in TestSymbol. <[]> expected but was <["test_inspect", "test_to_int", "test_VERY_EQUAL ( operator === )", "test_pretty_print_cycle", "test_to_sym"]>. ....Missing tests in TestSymbol (for singletons). <[]> expected but was <["test_s_all_symbols"]>. ------------------------------------------------------------ TestThread: ----------- ....Missing tests in TestThread. <[]> expected but was <["test_inspect", "test_terminate", "test_group", "test_keys"]>. ....Unknown tests in TestThread. <[]> expected but was <["test_timeout"]>. ------------------------------------------------------------ TestThreadGroup: ---------------- ....Missing tests in TestThreadGroup. <[]> expected but was <["test_enclose", "test_enclosed?"]>. ....Unknown tests in TestThreadGroup (for singletons). <[]> expected but was <["test_s_new"]>. ------------------------------------------------------------ TestTime: --------- ....Missing tests in TestTime. <[]> expected but was <["test_inspect", "test_gmt_offset", "test_utc?", "test_getutc", "test_succ", "test__dump", "test_utc", "test_gmtoff", "test_getgm", "test_dst?", "test_getlocal", "test_utc_offset"]>. ....Missing tests in TestTime (for singletons). <[]> expected but was <["test_s_utc", "test_s__load"]>. ....Unknown tests in TestTime (for singletons). <[]> expected but was <["test_s_new"]>. ------------------------------------------------------------ TestTrueClass: -------------- ....Missing tests in TestTrueClass. <[]> expected but was <["test_OR ( operator | )", "test_pretty_print", "test_AND ( operator & )", "test_XOR ( operator ^ )", "test_pretty_print_cycle"]>. ....Unknown tests in TestTrueClass. <[]> expected but was <["test_carat", "test_or", "test_and"]>. ========================================================================