dev-utils 1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,6 @@
1
+
2
+ require 'dev-utils/test'
3
+
4
+ DevUtils::Test.load_tests(__FILE__, ARGV)
5
+
6
+
@@ -0,0 +1,153 @@
1
+ # This is a bunch of test cases for the 'diff' method. Since that method is currently
2
+ # commented out, so too are the test cases.
3
+
4
+ =begin
5
+
6
+
7
+ #
8
+ # = test/tc_debug.rb
9
+ #
10
+ # Unit tests for the debugging utilities contained in <tt>dev-utils/debug.rb</tt>.
11
+ #
12
+ # These can be run directly, as in <tt>ruby -Ilib lib/dev-utils/test/debug-test.rb</tt>, or
13
+ # through the Rakefile, as in <tt>rake test</tt>.
14
+ #
15
+ # It's a little confusing to have <tt>dev-utils/test.rb</tt> as a library file and
16
+ # <tt>dev-utils/test/*</tt> as test cases. That's a coincidence in this case; most projects
17
+ # would not have a library file called <tt>test.rb</tt>. I'm trying out an approach to unit
18
+ # tests whereby they are placed in the <tt>lib</tt> directory, thus ensuring that they are
19
+ # accessed via the same <tt>$LOAD_PATH</tt> as the library itself. All other ways of
20
+ # organising unit tests I have found annoying, because careful load-path management is needed
21
+ # just to run them, which I find frustrating.
22
+ #
23
+ # It may turn out that I can find a really good alternative and promote that instead.
24
+ #
25
+
26
+ require 'dev-utils/debug'
27
+
28
+ require 'test/unit'
29
+
30
+ class TC_Debug < Test::Unit::TestCase
31
+
32
+ Address = Struct.new(:number, :road, :city)
33
+ class Person
34
+ attr_reader :name, :age, :address
35
+ def initialize(name, age, address)
36
+ @name, @age, @address = name, age, address
37
+ @unimportant = rand(100)
38
+ end
39
+ def ==(person)
40
+ self.name == person.name and self.age == person.age and self.address == person.address
41
+ end
42
+ end
43
+
44
+ #
45
+ # Test between some fundamental types. These do not have fields to compare between: they
46
+ # are immediate values.
47
+ #
48
+ def test_diff_0
49
+ assert_equal(nil, diff('abc', 'abc'))
50
+ assert_equal('Immediate values differ', diff('abc', 'def'))
51
+ end
52
+
53
+ #
54
+ # Test between a few simple Address structs. Structs don't have instance variables so
55
+ # they're a special case.
56
+ #
57
+ def test_diff_1
58
+ # No difference between objects.
59
+ a1 = Address.new(4, "Cumberland", "Sydney")
60
+ a2 = Address.new(4, "Cumberland", "Sydney")
61
+ assert_equal(nil, diff(a1, a2))
62
+ assert_equal(nil, diff(a2, a1))
63
+
64
+ # One difference between objects.
65
+ a3 = Address.new(4, "Cumberlond", "Sydney")
66
+ expected = ['road: "Cumberland"', 'road: "Cumberlond"']
67
+ assert_equal(expected, diff(a1, a3))
68
+ assert_equal(expected, diff(a2, a3))
69
+ expected = ['road: "Cumberlond"', 'road: "Cumberland"']
70
+ assert_equal(expected, diff(a3, a1))
71
+ assert_equal(expected, diff(a3, a2))
72
+ end
73
+
74
+ #
75
+ # This continues the work of test_diff_1, but is seperated out because it's testing
76
+ # different stuff. Objects with multiple differences are compared. Differences should be
77
+ # reported in alphabetical order, since no fundamental order is guaranteed.
78
+ #
79
+ def test_diff_2
80
+ a1 = Address.new(4, "Cumberland", "Sydney")
81
+
82
+ # Two differences between objects.
83
+ a4 = Address.new(4, "Cumberlond", "Melbourne")
84
+ # Unless asked, only report the first difference.
85
+ expected = ['city: "Sydney"', 'city: "Melbourne"']
86
+ assert_equal(expected, diff(a1, a4))
87
+ # If asked, report the first or second difference.
88
+ assert_equal(expected, diff(a1, a4, 1))
89
+ expected = ['road: "Cumberland"', 'road: "Cumberlond"']
90
+ assert_equal(expected, diff(a1, a4, 2))
91
+ # If asked, report the third or greater difference, of which there is none.
92
+ assert_equal(nil, diff(a1, a4, 3))
93
+ assert_equal(nil, diff(a1, a4, 100))
94
+ # If asked, report all differences.
95
+ expected = []
96
+ expected << ['city: "Sydney"', 'city: "Melbourne"']
97
+ expected << ['road: "Cumberland"', 'road: "Cumberlond"']
98
+ assert_equal(expected, diff(a1, a4, :all))
99
+ # If asked, report number of differences.
100
+ assert_equal(2, diff(a1, a4, :n))
101
+ end
102
+
103
+ #
104
+ # Test between a few simple Person objects. They have an instance variable that is not an
105
+ # attribute, so it shouldn't influence the comparison.
106
+ #
107
+ # test_diff_2 did some testing of the advanced features, so we don't need to do those
108
+ # here.
109
+ #
110
+ def test_diff_3
111
+ p1 = Person.new('John Smith', 31, nil)
112
+ p2 = Person.new('John Smith', 31, nil) # same as p1
113
+ p3 = Person.new('John Brown', 31, nil) # name different from p1
114
+ p4 = Person.new('John Smith', 84, nil) # age different from p1
115
+ p5 = Person.new('Joan Brown', 84, nil) # name and age different from p1
116
+
117
+ assert_equal(nil, diff(p1, p2))
118
+ assert_equal(['name: "John Brown"', 'name: "John Smith"'], diff(p3, p1))
119
+ assert_equal(['name: "John Smith"', 'name: "John Brown"'], diff(p1, p3))
120
+ assert_equal(['age: 84', 'age: 31'], diff(p4, p1))
121
+ assert_equal(['age: 31', 'age: 84'], diff(p1, p4))
122
+ assert_equal(['age: 84', 'age: 31'], diff(p5, p1))
123
+ assert_equal(['name: "Joan Brown"', 'name: "John Smith"'], diff(p5, p1, 2))
124
+ assert_equal(2, diff(p5, p1, :n))
125
+ end
126
+
127
+ #
128
+ # Now we get recursive, and compare Person objects that have Address objects within them.
129
+ #
130
+ def test_diff_4
131
+ p1 = Person.new('John Smith', 31, Address.new(4, 'Holmes', 'Sydney'))
132
+ p2 = Person.new('John Smith', 31, Address.new(4, 'Holmes', 'Sydney')) # == p1
133
+ p3 = Person.new('John Smith', 31, Address.new(4, 'Hawke', 'Sydney'))
134
+
135
+ assert_equal(p1, p2)
136
+ assert_equal(nil, diff(p1, p2))
137
+ assert_equal(nil, diff(p2, p1))
138
+ assert_equal(['address.road: "Hawke"', 'address.road: "Holmes"'], diff(p3, p1))
139
+ assert_equal(['address.road: "Hawke"', 'address.road: "Holmes"'], diff(p3, p1, 1))
140
+ assert_equal([['address.road: "Hawke"', 'address.road: "Holmes"']], diff(p3, p1, :all))
141
+ assert_equal(1, diff(p3, p1, :n))
142
+
143
+ # TODO: this should have more testing, but if that test passes, it's probably good enough
144
+ # for me to use now.
145
+ end
146
+
147
+ def test_topology
148
+ fail "Not implemented"
149
+ end
150
+ end
151
+
152
+
153
+ =end
metadata ADDED
@@ -0,0 +1,76 @@
1
+ --- !ruby/object:Gem::Specification
2
+ rubygems_version: 0.8.1
3
+ specification_version: 1
4
+ name: dev-utils
5
+ version: !ruby/object:Gem::Version
6
+ version: "1.0"
7
+ date: 2004-10-08
8
+ summary: "Debugging utilities: breakpoints, debugging, and tracing."
9
+ require_paths:
10
+ - lib
11
+ author: Gavin Sinclair
12
+ email: gsinclair@soyabean.com.au
13
+ homepage: http://dev-utils.rubyforge.org
14
+ rubyforge_project: dev-utils
15
+ description: "Debugging utilities: breakpoints, debugging, and tracing."
16
+ autorequire:
17
+ default_executable:
18
+ bindir: bin
19
+ has_rdoc: true
20
+ required_ruby_version: !ruby/object:Gem::Version::Requirement
21
+ requirements:
22
+ -
23
+ - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: 1.8.1
26
+ version:
27
+ platform: ruby
28
+ files:
29
+ - HISTORY.txt
30
+ - MIT-LICENSE.txt
31
+ - Rakefile
32
+ - README.txt
33
+ - VERSION
34
+ - etc/doc
35
+ - etc/doc/DebuggingAids.textile
36
+ - etc/doc/generate.rb
37
+ - etc/doc/index.textile
38
+ - etc/doc/links.dat
39
+ - etc/doc/textile.css
40
+ - etc/doc/UnitTestOrganisation.textile
41
+ - examples/breakpoint-example.rb
42
+ - examples/debug.log
43
+ - examples/log-trace-example.rb
44
+ - lib/dev-utils
45
+ - lib/dev-utils/debug
46
+ - lib/dev-utils/debug.rb
47
+ - lib/dev-utils/test.rb
48
+ - lib/dev-utils/debug/diff.rb
49
+ - lib/dev-utils/debug/irb.rb
50
+ - lib/dev-utils/debug/log.rb
51
+ - test/tc_debug.rb
52
+ - test/TEST.rb
53
+ test_files: []
54
+ rdoc_options:
55
+ - "--main"
56
+ - README.txt
57
+ - "--title"
58
+ - dev-utils API Documentation
59
+ extra_rdoc_files:
60
+ - HISTORY.txt
61
+ - MIT-LICENSE.txt
62
+ - README.txt
63
+ executables: []
64
+ extensions: []
65
+ requirements: []
66
+ dependencies:
67
+ - !ruby/object:Gem::Dependency
68
+ name: extensions
69
+ version_requirement:
70
+ version_requirements: !ruby/object:Gem::Version::Requirement
71
+ requirements:
72
+ -
73
+ - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: "0.5"
76
+ version: