Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* bootstraptest/runner.rb: new file. * bootstraptest/test_literal.rb: new file. * bootstraptest/test_method.rb: new file. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@11851 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
- Loading branch information
aamine
committed
Feb 24, 2007
1 parent
1930f14
commit 18e1d27
Showing
4 changed files
with
573 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,120 @@ | ||
# $Id: $ | ||
|
||
# NOTE: | ||
# Never use optparse in this file. | ||
# Never use test/unit in this file. | ||
# Never use Ruby extensions in this file. | ||
|
||
require 'fileutils' | ||
|
||
def main | ||
@ruby = nil | ||
dir = 'bootstraptest.tmpwd' | ||
tests = nil | ||
ARGV.delete_if {|arg| | ||
case arg | ||
when /\A--ruby=(.*)/ | ||
@ruby = File.expand_path($1) | ||
true | ||
when /\A--sets=(.*)/ | ||
tests = Dir.glob("#{File.dirname($0)}/test_{#{$1}}*.rb") | ||
puts tests.map {|path| File.basename(path) }.inspect | ||
true | ||
else | ||
false | ||
end | ||
} | ||
if tests and not ARGV.empty? | ||
$stderr.puts "--tests and arguments are exclusive" | ||
exit 1 | ||
end | ||
tests ||= ARGV | ||
tests = Dir.glob("#{File.dirname($0)}/test_*.rb") if tests.empty? | ||
pathes = tests.map {|path| File.expand_path(path) } | ||
in_temporary_working_directory(dir) { | ||
exec_test pathes | ||
} | ||
end | ||
|
||
def exec_test(pathes) | ||
@count = 0 | ||
@error = 0 | ||
@errbuf = [] | ||
@location = nil | ||
pathes.each do |path| | ||
load File.expand_path(path) | ||
end | ||
$stderr.puts | ||
if @error == 0 | ||
$stderr.puts "PASS #{@count} tests" | ||
exit 0 | ||
else | ||
@errbuf.each do |msg| | ||
$stderr.puts msg | ||
end | ||
$stderr.puts "FAIL #{@error}/#{@count} tests failed" | ||
exit 1 | ||
end | ||
end | ||
|
||
def assert_equal(expected, really) | ||
newtest | ||
restr = get_result_string(really) | ||
check_coredump | ||
if expected == restr | ||
$stderr.print '.' | ||
else | ||
$stderr.print 'F' | ||
error "expected #{expected.inspect} but is: #{restr.inspect}" | ||
end | ||
rescue Exception => err | ||
$stderr.print 'E' | ||
error err.message | ||
end | ||
|
||
def get_result_string(src) | ||
if @ruby | ||
File.open('bootstraptest.tmp.rb', 'w') {|f| | ||
f.puts "print(begin; #{src}; end)" | ||
} | ||
`#{@ruby} bootstraptest.tmp.rb` | ||
else | ||
eval(src).to_s | ||
end | ||
end | ||
|
||
def newtest | ||
@location = File.basename(caller(2).first) | ||
@count += 1 | ||
cleanup_coredump | ||
end | ||
|
||
def error(msg) | ||
@errbuf.push "\##{@count} #{@location}: #{msg}" | ||
@error += 1 | ||
end | ||
|
||
def in_temporary_working_directory(dir) | ||
FileUtils.rm_rf dir | ||
Dir.mkdir dir | ||
Dir.chdir(dir) { | ||
yield | ||
} | ||
end | ||
|
||
def cleanup_coredump | ||
FileUtils.rm_f 'core' | ||
Dir.glob('core.*').each do |ent| | ||
FileUtils.rm_f ent | ||
end | ||
end | ||
|
||
class CoreDumpError < StandardError; end | ||
|
||
def check_coredump | ||
if File.file?('core') or not Dir.glob('core.*').empty? | ||
raise CoreDumpError, "core dumped" | ||
end | ||
end | ||
|
||
main |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,165 @@ | ||
# empty program | ||
assert_equal '', '' | ||
assert_equal '', ' ' | ||
assert_equal '', "\n" | ||
|
||
# special const | ||
assert_equal 'true', 'true' | ||
assert_equal 'TrueClass', 'true.class' | ||
assert_equal 'false', 'false' | ||
assert_equal 'FalseClass', 'false.class' | ||
assert_equal '', 'nil' | ||
assert_equal 'nil', 'nil.inspect' | ||
assert_equal 'NilClass', 'nil.class' | ||
assert_equal 'sym', ':sym' | ||
assert_equal ':sym', ':sym.inspect' | ||
assert_equal 'Symbol', ':sym.class' | ||
assert_equal '1234', '1234' | ||
assert_equal 'Fixnum', '1234.class' | ||
assert_equal '1234', '1_2_3_4' | ||
assert_equal 'Fixnum', '1_2_3_4.class' | ||
assert_equal '18', '0x12' | ||
assert_equal 'Fixnum', '0x12.class' | ||
assert_equal '15', '0o17' | ||
assert_equal 'Fixnum', '0o17.class' | ||
assert_equal '5', '0b101' | ||
assert_equal 'Fixnum', '0b101.class' | ||
assert_equal '123456789012345678901234567890', '123456789012345678901234567890' | ||
assert_equal 'Bignum', '123456789012345678901234567890.class' | ||
assert_equal '2.0', '2.0' | ||
assert_equal 'Float', '1.3.class' | ||
|
||
# self | ||
assert_equal 'main', 'self' | ||
assert_equal 'Object', 'self.class' | ||
|
||
# string literal | ||
assert_equal 'a', '?a' | ||
assert_equal 'String', '?a.class' | ||
assert_equal 'A', '?A' | ||
assert_equal 'String', '?A.class' | ||
assert_equal "\n", '?\n' | ||
assert_equal 'String', '?\n.class' | ||
assert_equal ' ', '?\ ' | ||
assert_equal 'String', '?\ .class' | ||
assert_equal 'string', "'string'" | ||
assert_equal 'string', '"string"' | ||
assert_equal 'string', '%(string)' | ||
assert_equal 'string', '%q(string)' | ||
assert_equal 'string', '%Q(string)' | ||
assert_equal 'string string', '"string string"' | ||
assert_equal ' ', '" "' | ||
assert_equal "\0", '"\0"' | ||
assert_equal "\1", '"\1"' | ||
assert_equal "3", '"\x33"' | ||
assert_equal "\n", '"\n"' | ||
|
||
# dynamic string literal | ||
assert_equal '2', '"#{1 + 1}"' | ||
assert_equal '16', '"#{2 ** 4}"' | ||
assert_equal 'string', 's = "string"; "#{s}"' | ||
|
||
# dynamic symbol literal | ||
assert_equal 'a3c', ':"a#{1+2}c"' | ||
assert_equal ':a3c', ':"a#{1+2}c".inspect' | ||
assert_equal 'Symbol', ':"a#{1+2}c".class' | ||
|
||
# xstring | ||
assert_equal "foo\n", %q(`echo foo`) | ||
assert_equal "foo\n", %q(s = "foo"; `echo #{s}`) | ||
|
||
# regexp | ||
assert_equal '', '//.source' | ||
assert_equal 'Regexp', '//.class' | ||
assert_equal '0', '// =~ "a"' | ||
assert_equal '0', '// =~ ""' | ||
assert_equal 'a', '/a/.source' | ||
assert_equal 'Regexp', '/a/.class' | ||
assert_equal '0', '/a/ =~ "a"' | ||
assert_equal '0', '/test/ =~ "test"' | ||
assert_equal '', '/test/ =~ "tes"' | ||
assert_equal '0', 're = /test/; re =~ "test"' | ||
assert_equal '0', 'str = "test"; /test/ =~ str' | ||
assert_equal '0', 're = /test/; str = "test"; re =~ str' | ||
|
||
# dynacmi regexp | ||
assert_equal 'regexp', %q(/re#{'ge'}xp/.source) | ||
assert_equal 'Regexp', %q(/re#{'ge'}xp/.class) | ||
|
||
# array | ||
assert_equal 'Array', '[].class' | ||
assert_equal '0', '[].size' | ||
assert_equal '0', '[].length' | ||
assert_equal '[]', '[].inspect' | ||
assert_equal 'Array', '[0].class' | ||
assert_equal '1', '[3].size' | ||
assert_equal '[3]', '[3].inspect' | ||
assert_equal '3', 'a = [3]; a[0]' | ||
assert_equal 'Array', '[1,2].class' | ||
assert_equal '2', '[1,2].size' | ||
assert_equal '[1, 2]', '[1,2].inspect' | ||
assert_equal 'Array', '[1,2,3,4,5].class' | ||
assert_equal '5', '[1,2,3,4,5].size' | ||
assert_equal '[1, 2, 3, 4, 5]', '[1,2,3,4,5].inspect' | ||
assert_equal '1', 'a = [1,2]; a[0]' | ||
assert_equal '2', 'a = [1,2]; a[1]' | ||
assert_equal 'Array', 'a = [1 + 2, 3 + 4, 5 + 6]; a.class' | ||
assert_equal '[3, 7, 11]', 'a = [1 + 2, 3 + 4, 5 + 6]; a.inspect' | ||
assert_equal '7', 'a = [1 + 2, 3 + 4, 5 + 6]; a[1]' | ||
assert_equal '1', '([0][0] += 1)' | ||
assert_equal '1', '([2][0] -= 1)' | ||
assert_equal 'Array', 'a = [obj = Object.new]; a.class' | ||
assert_equal '1', 'a = [obj = Object.new]; a.size' | ||
assert_equal 'true', 'a = [obj = Object.new]; a[0] == obj' | ||
assert_equal '5', 'a = [1,2,3]; a[1] = 5; a[1]' | ||
|
||
# hash | ||
assert_equal 'Hash', '{}.class' | ||
assert_equal '{}', '{}.inspect' | ||
assert_equal 'Hash', '{1=>2}.class' | ||
assert_equal '{1=>2}', '{1=>2}.inspect' | ||
assert_equal '2', 'h = {1 => 2}; h[1]' | ||
assert_equal '0', 'h = {1 => 2}; h.delete(1); h.size' | ||
assert_equal '', 'h = {1 => 2}; h.delete(1); h[1]' | ||
assert_equal '2', 'h = {"string" => "literal", "goto" => "hell"}; h.size' | ||
assert_equal 'literal', 'h = {"string"=>"literal", "goto"=>"hell"}; h["string"]' | ||
assert_equal 'hell', 'h = {"string"=>"literal", "goto"=>"hell"}; h["goto"]' | ||
|
||
# range | ||
assert_equal 'Range', '(1..2).class' | ||
assert_equal '1..2', '(1..2).inspect' | ||
assert_equal '1', '(1..2).begin' | ||
assert_equal '2', '(1..2).end' | ||
assert_equal 'false', '(1..2).exclude_end?' | ||
assert_equal 'Range', 'r = 1..2; r.class' | ||
assert_equal '1..2', 'r = 1..2; r.inspect' | ||
assert_equal '1', 'r = 1..2; r.begin' | ||
assert_equal '2', 'r = 1..2; r.end' | ||
assert_equal 'false', 'r = 1..2; r.exclude_end?' | ||
assert_equal 'Range', '(1...3).class' | ||
assert_equal '1...3', '(1...3).inspect' | ||
assert_equal '1', '(1...3).begin' | ||
assert_equal '3', '(1...3).end' | ||
assert_equal 'true', '(1...3).exclude_end?' | ||
assert_equal 'Range', 'r = (1...3); r.class' | ||
assert_equal '1...3', 'r = (1...3); r.inspect' | ||
assert_equal '1', 'r = (1...3); r.begin' | ||
assert_equal '3', 'r = (1...3); r.end' | ||
assert_equal 'true', 'r = (1...3); r.exclude_end?' | ||
assert_equal 'Range', 'r = (1+2 .. 3+4); r.class' | ||
assert_equal '3..7', 'r = (1+2 .. 3+4); r.inspect' | ||
assert_equal '3', 'r = (1+2 .. 3+4); r.begin' | ||
assert_equal '7', 'r = (1+2 .. 3+4); r.end' | ||
assert_equal 'false', 'r = (1+2 .. 3+4); r.exclude_end?' | ||
assert_equal 'Range', 'r = (1+2 ... 3+4); r.class' | ||
assert_equal '3...7', 'r = (1+2 ... 3+4); r.inspect' | ||
assert_equal '3', 'r = (1+2 ... 3+4); r.begin' | ||
assert_equal '7', 'r = (1+2 ... 3+4); r.end' | ||
assert_equal 'true', 'r = (1+2 ... 3+4); r.exclude_end?' | ||
assert_equal 'Range', 'r = ("a".."c"); r.class' | ||
assert_equal '"a".."c"', 'r = ("a".."c"); r.inspect' | ||
assert_equal 'a', 'r = ("a".."c"); r.begin' | ||
assert_equal 'c', 'r = ("a".."c"); r.end' | ||
|
||
assert_equal 'String', '__FILE__.class' | ||
assert_equal 'Fixnum', '__LINE__.class' |
Oops, something went wrong.