core_ex 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,166 @@
1
+ # Author:: Nicolas Despres <nicolas.despres@epita.fr>.
2
+ # Copyright:: Copyright (c) 2004 TTK Team. All rights reserved.
3
+ # License:: Ruby license.
4
+
5
+ # $LastChangedBy: ertai $
6
+ # $Id: testrunner.rb 252 2005-05-31 23:41:42Z ertai $
7
+
8
+
9
+ require 'test/unit/autorunner'
10
+ require 'test/unit/ui/testrunnermediator'
11
+ require 'test/unit/ui/testrunnermediator'
12
+ require 'test/unit/ui/testrunnerutilities'
13
+ require 'core_ex'
14
+
15
+
16
+ module Test
17
+
18
+ module Unit
19
+
20
+ module UI
21
+
22
+ module Yaml
23
+
24
+ class TestRunner
25
+ extend TestRunnerUtilities
26
+
27
+ public
28
+ def initialize(suite, output_level=NORMAL, io=STDOUT)
29
+ if (suite.respond_to?(:suite))
30
+ @suite = suite.suite
31
+ else
32
+ @suite = suite
33
+ end
34
+ @output_level = output_level
35
+ @io = io
36
+ @failures = []
37
+ @errors = []
38
+ end
39
+
40
+ # Begins the test run.
41
+ public
42
+ def start
43
+ setup_mediator
44
+ attach_to_mediator
45
+ return start_mediator
46
+ end
47
+
48
+ private
49
+ def setup_mediator
50
+ @mediator = create_mediator(@suite)
51
+ suite_name = @suite.to_s
52
+ if ( @suite.kind_of?(Module) )
53
+ suite_name = @suite.name
54
+ end
55
+ @io.puts('---')
56
+ @io.puts("suite_class: #{suite_name}")
57
+ @io.puts('details:') if $VERBOSE
58
+ @test_outcome = 'S'
59
+ end
60
+
61
+ private
62
+ def create_mediator(suite)
63
+ return TestRunnerMediator.new(suite)
64
+ end
65
+
66
+ private
67
+ def attach_to_mediator
68
+ @mediator.add_listener(TestResult::FAULT, &method(:add_fault))
69
+ @mediator.add_listener(TestRunnerMediator::STARTED,
70
+ &method(:started))
71
+ @mediator.add_listener(TestRunnerMediator::FINISHED,
72
+ &method(:finished))
73
+ if $VERBOSE
74
+ @mediator.add_listener(TestCase::STARTED,
75
+ &method(:test_started))
76
+ @mediator.add_listener(TestCase::FINISHED,
77
+ &method(:test_finished))
78
+ end
79
+ end
80
+
81
+ private
82
+ def test_started(name)
83
+ @test_start_time = Time.now
84
+ @io.print(" #{name}:")
85
+ @io.flush
86
+ end
87
+
88
+ private
89
+ def test_finished(name)
90
+ #FIXME: remove the double-quote when the TTK Dumper manages oneline
91
+ # feature
92
+ @io.puts(" \"[ #@test_outcome, #{Time.now - @test_start_time} ]\"")
93
+ @test_outcome = 'S'
94
+ @io.flush
95
+ end
96
+
97
+ private
98
+ def start_mediator
99
+ return @mediator.run_suite
100
+ end
101
+
102
+ private
103
+ def add_fault(fault)
104
+ case fault.class.to_s
105
+ when 'Test::Unit::Failure'
106
+ @test_outcome = 'F'
107
+ @failures << fault
108
+ when 'Test::Unit::Error'
109
+ @test_outcome = 'E'
110
+ @errors << fault
111
+ else
112
+ raise(Exception, 'unexpected fault!!')
113
+ end
114
+ end
115
+
116
+ private
117
+ def started(result)
118
+ @result = result
119
+ end
120
+
121
+ private
122
+ def finished(elapsed_time)
123
+ t = DTime.new(elapsed_time)
124
+ @io.puts("elapsed_time: #{t}")
125
+ if $VERBOSE
126
+ @io.puts("detail_elpased_time: #{t.inspect}")
127
+ end
128
+ @io.puts("tests_number: #{@result.run_count}")
129
+ @io.puts("assertions_number: #{@result.assertion_count}")
130
+ @io.puts("errors_number: #{@errors.length}")
131
+ @io.puts("failures_number: #{@failures.length}")
132
+ unless @failures.empty?
133
+ @io.puts('failures:')
134
+ @failures.each { |fault| print_fault(fault) }
135
+ end
136
+ unless @errors.empty?
137
+ @io.puts('errors:')
138
+ @errors.each { |err| print_fault(err) }
139
+ end
140
+ @io.flush
141
+ end
142
+
143
+ private
144
+ def print_fault(fault)
145
+ fault_disp = fault.long_display.split("\n")
146
+ indent = ' '
147
+ @io.puts("#{indent}#{fault_disp[1].chomp(':')}: |")
148
+ for i in 2...fault_disp.length do
149
+ 2.times { @io.print(indent) }
150
+ @io.puts(fault_disp[i].strip)
151
+ end
152
+ end
153
+
154
+ end # class TestRunner
155
+
156
+ end # module Yaml
157
+
158
+ end # module UI
159
+
160
+ end # module Unit
161
+
162
+ end # module Test
163
+
164
+ Test::Unit::AutoRunner::RUNNERS[:yaml] = lambda do |r|
165
+ Test::Unit::UI::Yaml::TestRunner
166
+ end
@@ -0,0 +1,91 @@
1
+ # Author:: Nicolas Pouillard <ertai@lrde.epita.fr>.
2
+ # Copyright:: Copyright (c) 2005 Nicolas Pouillard. All rights reserved.
3
+ # License:: GNU General Public License (GPL).
4
+ # Revision:: $Id: time.rb 252 2005-05-31 23:41:42Z ertai $
5
+
6
+ require 'time'
7
+ require 'core_ex'
8
+ require 'core_ex/dtime'
9
+
10
+ class Time
11
+
12
+ PRECISION = 1e-016
13
+
14
+ def float_minus ( rhs )
15
+ diff = to_f - rhs.to_f
16
+ (diff / PRECISION).to_i * PRECISION
17
+ end
18
+ private :float_minus
19
+
20
+
21
+ undef :-
22
+ undef :+
23
+
24
+
25
+ def - ( rhs )
26
+ case rhs
27
+ when Time
28
+ DTime.new(float_minus(rhs))
29
+ when 0
30
+ self
31
+ when Numeric
32
+ Time.at(float_minus(rhs)).utc
33
+ when DTime
34
+ Time.at(float_minus(rhs)).utc
35
+ else
36
+ raise TypeError, rhs
37
+ end
38
+ end
39
+
40
+
41
+ def + ( rhs )
42
+ if rhs.is_a? Numeric or rhs.is_a? DTime
43
+ Time.at(to_f + rhs.to_f).utc
44
+ else
45
+ raise TypeError, rhs
46
+ end
47
+ end
48
+
49
+
50
+ def self.diff ( *args, &block )
51
+ DTime.diff(*args, &block)
52
+ end
53
+
54
+ end # class Time
55
+
56
+
57
+
58
+ test_section __FILE__ do
59
+
60
+ class TimeExTest < Test::Unit::TestCase
61
+
62
+ def setup
63
+ @t1, @t2 = Time.now, Time.now
64
+ end
65
+
66
+ def test_minus
67
+ d1 = @t1 - @t2
68
+ assert_kind_of(DTime, d1)
69
+ assert_kind_of(Time, Time.now - d1)
70
+ assert_kind_of(Time, Time.now - 1.4)
71
+ assert_kind_of(Time, Time.now - 4)
72
+ assert_equal(@t1, @t1 - 0)
73
+ assert_equal(@t1, @t1 - 0.0)
74
+ assert_equal(0, (@t1 - @t1).to_f)
75
+ end
76
+
77
+ def test_minus_2
78
+ t = Time.utc(1937, 1, 1, 11, 40, 27, 870000)
79
+ s = "1937-01-01T12:00:27.87+00:20"
80
+ assert_equal(0, (t - Time.iso8601(s)).to_f)
81
+ end
82
+
83
+ def test_plus
84
+ d1 = @t1 - @t2
85
+ assert_raise(TypeError) { @t1 + @t2 }
86
+ assert_kind_of(Time, @t1 + d1)
87
+ end
88
+
89
+ end # TimeExTest
90
+
91
+ end
@@ -0,0 +1,119 @@
1
+ # Copyright: Copyright (c) 2004 Nicolas Despres. All rights reserved.
2
+ # Author: Nicolas Despres <polrop@lrde.epita.fr>.
3
+ # License: Gnu General Public License.
4
+
5
+ # $LastChangedBy: ertai $
6
+ # $Id: version.rb 252 2005-05-31 23:41:42Z ertai $
7
+
8
+ require 'core_ex'
9
+
10
+ class Version
11
+ include Comparable
12
+
13
+ attr_accessor :major, :minor, :build, :revision
14
+
15
+ def initialize(major, minor, build, revision)
16
+ @major = major
17
+ @minor = minor
18
+ @build = build
19
+ @revision = revision
20
+ end
21
+
22
+ def <=>(other)
23
+ to_a <=> other.to_a
24
+ end
25
+
26
+ def pp
27
+ "#{to_s} (Revision: #@revision)"
28
+ end
29
+
30
+ def to_s
31
+ "#@major.#@minor.#@build"
32
+ end
33
+
34
+ def to_a
35
+ [ @major, @minor, @build, @revision ]
36
+ end
37
+
38
+ def major_release
39
+ @major += 1
40
+ @minor = 0
41
+ @build = 0
42
+ @revision += 1
43
+ self
44
+ end
45
+
46
+ def minor_release
47
+ @minor += 1
48
+ @build = 0
49
+ @revision += 1
50
+ self
51
+ end
52
+
53
+ def build_release
54
+ @build += 1
55
+ @revision += 1
56
+ self
57
+ end
58
+
59
+ end # class Version
60
+
61
+
62
+ test_section __FILE__ do
63
+
64
+
65
+ class VersionTest < Test::Unit::TestCase
66
+
67
+ def setup
68
+ @a = Version.new(0, 1, 2, 3)
69
+ @b = Version.new(2, 1, 0, 10)
70
+ @c = Version.new(0, 0, 0, 0)
71
+ end
72
+
73
+
74
+ def test_simple
75
+ assert(Version.new(0, 1, 2, 3) < Version.new(0, 1, 2, 4))
76
+ assert(Version.new(0, 1, 2, 4) > Version.new(0, 1, 2, 3))
77
+ assert(Version.new(0, 1, 2, 3) == Version.new(0, 1, 2, 3))
78
+ assert(Version.new(0, 1, 3, 3) > Version.new(0, 1, 2, 3))
79
+ assert(Version.new(0, 1, 2, 3) < Version.new(0, 1, 3, 3))
80
+ assert(Version.new(3, 2, 2, 3) > Version.new(3, 1, 2, 3))
81
+ assert(Version.new(0, 1, 2, 3) < Version.new(0, 2, 2, 3))
82
+ assert(Version.new(0, 3, 3, 3) < Version.new(1, 2, 2, 10))
83
+ end
84
+
85
+ def checker ( my, meth, *ref )
86
+ assert_equal(Version.new(*ref), my.send(meth), meth)
87
+ assert_equal(Version.new(*ref), my, meth)
88
+ end
89
+
90
+ def test_major_release
91
+ checker(@a, :major_release, 1, 0, 0, 4)
92
+ checker(@b, :major_release, 3, 0, 0, 11)
93
+ checker(@c, :major_release, 1, 0, 0, 1)
94
+ end
95
+
96
+ def test_minor_release
97
+ checker(@a, :minor_release, 0, 2, 0, 4)
98
+ checker(@b, :minor_release, 2, 2, 0, 11)
99
+ checker(@c, :minor_release, 0, 1, 0, 1)
100
+ end
101
+
102
+ def test_build_release
103
+ checker(@a, :build_release, 0, 1, 3, 4)
104
+ checker(@b, :build_release, 2, 1, 1, 11)
105
+ checker(@c, :build_release, 0, 0, 1, 1)
106
+ end
107
+
108
+ def test_pp
109
+ assert_equal('0.1.2 (Revision: 3)', @a.pp)
110
+ assert_equal('2.1.0 (Revision: 10)', @b.pp)
111
+ assert_equal('0.0.0 (Revision: 0)', @c.pp)
112
+ end
113
+
114
+ end # class VersionTest
115
+
116
+
117
+ end
118
+
119
+
@@ -0,0 +1,24 @@
1
+ # Copyright:: Copyright (c) 2005 Nicolas Pouillard. All rights reserved.
2
+ # Author:: Nicolas Pouillard <ertai@lrde.epita.fr>.
3
+ # License:: Gnu General Public License.
4
+ # Revision:: $Id: yaml.rb 249 2005-05-31 13:23:42Z ertai $
5
+
6
+ require 'yaml'
7
+
8
+ YAML.add_builtin_type('!re') do |type, val|
9
+ Regexp.new(val.to_s)
10
+ end
11
+
12
+ YAML.add_builtin_type('!path') do |type, val|
13
+ Pathname.new(val.to_s)
14
+ end
15
+
16
+ YAML.add_builtin_type('!proc') do |type, val|
17
+ require 'dumpable_proc'
18
+ DumpableProc.new(val.to_s)
19
+ end
20
+
21
+ YAML.add_builtin_type('!filelist') do |type, val|
22
+ require 'rake'
23
+ FileList.new(val)
24
+ end
data/lib/core_ex.rb ADDED
@@ -0,0 +1,55 @@
1
+ # Copyright:: Copyright (c) 2005 Nicolas Pouillard. All rights reserved.
2
+ # Author:: Nicolas Pouillard <ertai@lrde.epita.fr>.
3
+ # License:: Gnu General Public License.
4
+ # Revision:: $Id: core_ex.rb 252 2005-05-31 23:41:42Z ertai $
5
+
6
+ require 'pathname'
7
+
8
+ module CoreEx
9
+ @@dir = Pathname.new(__FILE__).dirname.expand_path
10
+ $: << @@dir.to_s
11
+ $" << 'core_ex.rb'
12
+
13
+ @@core_ex = @@dir + 'core_ex'
14
+
15
+ %w[ embedded_tests pathname require ].each do |aPath|
16
+ require "core_ex/#{aPath}"
17
+ end
18
+ RequireSystem.instance
19
+ %w[ attr_once enumerable exception string fileutils yaml ].each do |aPath|
20
+ (@@core_ex + aPath).require
21
+ end
22
+
23
+ def self.each ( &block )
24
+ @@core_list ||= FileList[@@core_ex + '**/*.rb']
25
+ @@core_list.each(&block)
26
+ end
27
+
28
+ def self.require
29
+ @@core_list ||= FileList[@@core_ex + '**/*.rb']
30
+ @@core_list.require
31
+ end
32
+
33
+ def self.dir
34
+ @@dir
35
+ end
36
+
37
+ end # module CoreEx
38
+
39
+ core_ex = CoreEx.dir + 'core_ex'
40
+ {
41
+ :Time => 'time',
42
+ :DTime => 'dtime',
43
+ :Version => 'version',
44
+ :FileList => 'filelist',
45
+ :Test => 'test/unit/ui/yaml/testrunner',
46
+ :TempPath => 'temp_path'
47
+ }.each do |k, v|
48
+ k = [k] unless k.is_a? Enumerable
49
+ v = [v] unless v.is_a? Enumerable
50
+ k.each do |aConst|
51
+ v.each do |aPath|
52
+ Kernel.autoload(aConst, (core_ex + aPath).to_s)
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,12 @@
1
+ ---
2
+
3
+ CoreEx Main Test Suite:
4
+
5
+ strategy: Glob
6
+ glob : <<pwd>>/*-suite.yml
7
+ regexp : !re ([^/]*)\.yml$
8
+
9
+ test:
10
+ <<match>>:
11
+ strategy: Import
12
+ import : <<path>>
@@ -0,0 +1,15 @@
1
+ ---
2
+
3
+ # Run this suite with -S 'url: scheme://the/url/to/the/ttk/package'
4
+ CoreEx Package Test Suite:
5
+ strategy: Suite
6
+ contents:
7
+
8
+ - Checkout:
9
+ strategy: Checkout
10
+ url: <<url>>
11
+ fatal: true
12
+
13
+ - Check the package:
14
+ strategy: Import
15
+ import: <<checkout_dir>>/test/check-core_ex.yml
@@ -0,0 +1,11 @@
1
+
2
+
3
+ module AutoloadTree
4
+
5
+ class A
6
+
7
+ end
8
+
9
+ end
10
+
11
+
@@ -0,0 +1,10 @@
1
+
2
+ require 'A'
3
+
4
+ module AutoloadTree
5
+
6
+ class B < A
7
+
8
+ end
9
+
10
+ end
@@ -0,0 +1,18 @@
1
+
2
+
3
+ require 'A'
4
+
5
+ module AutoloadTree
6
+
7
+ module Foo
8
+
9
+ class C < A
10
+
11
+ end
12
+
13
+ end
14
+
15
+ end
16
+
17
+
18
+
@@ -0,0 +1 @@
1
+ $REQUIRE_SYSTEM_TEST_COUNTER += 1
@@ -0,0 +1 @@
1
+ $REQUIRE_SYSTEM_TEST_COUNTER += 1
@@ -0,0 +1 @@
1
+ $REQUIRE_SYSTEM_TEST_COUNTER += 1
@@ -0,0 +1,9 @@
1
+ require 'rubygems'
2
+ require_gem 'core_ex' # FIXME version
3
+ require 'core_ex'
4
+ require 'test/unit'
5
+ class TC_ < Test::Unit::TestCase
6
+ def test_string_to_pathmame
7
+ assert_respond_to('', :to_path)
8
+ end
9
+ end
@@ -0,0 +1,43 @@
1
+
2
+
3
+
4
+ class Good
5
+
6
+
7
+ end
8
+
9
+
10
+ # FIXME bootstrap me
11
+ if __FILE__ == $0
12
+
13
+ require 'test/unit/ui/yaml/testrunner'
14
+
15
+ class GoodTest < Test::Unit::TestCase
16
+
17
+ def test_1
18
+ assert(true)
19
+ end
20
+
21
+ def test_2
22
+ assert(false, 'bad')
23
+ end
24
+
25
+ def test_3
26
+ assert(true, 'good')
27
+ assert(true, 'very good')
28
+ end
29
+
30
+ def test_4
31
+ raise 'error'
32
+ end
33
+
34
+ def test_5
35
+ assert(true)
36
+ end
37
+
38
+ end
39
+
40
+ Test::Unit::UI::Yaml::TestRunner.run(GoodTest)
41
+
42
+ end
43
+
@@ -0,0 +1,20 @@
1
+ ---
2
+
3
+ CoreEx Sanity Multiple Requires Test Suite:
4
+
5
+ strategy: Cmd
6
+ command: ruby
7
+ exit: 0
8
+ error: ""
9
+ output: !re 0 failures, 0 errors$
10
+ args: -I<<pwd>>/../../lib
11
+ input: |2
12
+ require 'core_ex'
13
+ CoreEx.require
14
+ class TC_ < Test::Unit::TestCase
15
+ def test_definitions
16
+ CoreEx.each do |file|
17
+ assert(RequireSystem.instance.required?(file), "#{file} not present")
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,24 @@
1
+ ---
2
+
3
+ CoreEx Sanity Single Requires Test Suite:
4
+
5
+ strategy: Glob
6
+ glob: <<pwd>>/../../lib/**/*.rb
7
+ regexp: !re ^<<pwd>>\/\.\.\/\.\.\/lib\/(.*)\.rb$
8
+ test:
9
+ <<match>>:
10
+ strategy: RUnit
11
+ strategy: Cmd
12
+ command: ruby
13
+ exit: 0
14
+ error: ""
15
+ output: !re 0 failures, 0 errors$
16
+ args: -I<<pwd>>/../../lib
17
+ input: |
18
+ require '<<match>>'
19
+ require 'test/unit'
20
+ class TC_ < Test::Unit::TestCase
21
+ def test_definitions
22
+ assert($".include?('<<match>>.rb')) #"
23
+ end
24
+ end
@@ -0,0 +1,12 @@
1
+ ---
2
+
3
+ CoreEx Sanity Test Suite:
4
+
5
+ strategy: Glob
6
+ glob : <<pwd>>/sanity/**/*.yml
7
+ regexp : !re ([^\/]*)\.yml$
8
+
9
+ test:
10
+ <<match>>:
11
+ strategy: Import
12
+ import : <<path>>
@@ -0,0 +1,6 @@
1
+ require 'pathname'
2
+ require 'core_ex/embedded_tests'
3
+ args = ARGV.inject(nil) { |accu, x| (accu)? accu << x : ((x == '--')? [] : accu) }
4
+ path = Pathname.new(args[0]).expand_path.cleanpath
5
+ test_mode Regexp.new(path)
6
+ require path.to_s
@@ -0,0 +1,14 @@
1
+ ---
2
+
3
+ CoreEx Unit Test Suite:
4
+
5
+ strategy: Glob
6
+ glob : <<pwd>>/../lib/**/*.rb
7
+ regexp : !re ([^/]*)\.rb$
8
+ symbols : { core_ex: <<pwd>>/../lib }
9
+
10
+ test:
11
+ <<match>>:
12
+ strategy: RUnit
13
+ unit_file: <<pwd>>/test-unit-setup.rb
14
+ args: <<path>>