fireruby 0.3.2-mswin32 → 0.4.0-mswin32

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.
Files changed (50) hide show
  1. data/doc/CVS/Entries +3 -2
  2. data/doc/CVS/Repository +1 -1
  3. data/doc/README +86 -34
  4. data/doc/classes/CVS/Entries +1 -1
  5. data/doc/classes/CVS/Repository +1 -1
  6. data/doc/classes/FireRuby/CVS/Entries +7 -1
  7. data/doc/classes/FireRuby/CVS/Repository +1 -1
  8. data/doc/classes/FireRuby/Connection.src/CVS/Repository +1 -1
  9. data/doc/classes/FireRuby/Database.src/CVS/Repository +1 -1
  10. data/doc/classes/FireRuby/FireRubyError.src/CVS/Repository +1 -1
  11. data/doc/classes/FireRuby/Generator.src/CVS/Repository +1 -1
  12. data/doc/classes/FireRuby/ResultSet.src/CVS/Repository +1 -1
  13. data/doc/classes/FireRuby/Statement.src/CVS/Repository +1 -1
  14. data/doc/classes/FireRuby/Transaction.src/CVS/Repository +1 -1
  15. data/doc/files/CVS/Repository +1 -1
  16. data/examples/CVS/Entries +1 -1
  17. data/examples/CVS/Repository +1 -1
  18. data/examples/example01.rb +9 -4
  19. data/lib/CVS/Entries +3 -1
  20. data/lib/CVS/Repository +1 -1
  21. data/lib/SQLType.rb +228 -0
  22. data/lib/fireruby.rb +22 -0
  23. data/lib/fr_lib.so +0 -0
  24. data/lib/src.rb +53 -7
  25. data/test/AddRemoveUserTest.rb +7 -2
  26. data/test/BackupRestoreTest.rb +3 -1
  27. data/test/CVS/Entries +19 -16
  28. data/test/CVS/Repository +1 -1
  29. data/test/CharacterSetTest.rb +5 -2
  30. data/test/ConnectionTest.rb +3 -1
  31. data/test/DDLTest.rb +3 -1
  32. data/test/DatabaseTest.rb +3 -1
  33. data/test/GeneratorTest.rb +3 -1
  34. data/test/KeyTest.rb +140 -0
  35. data/test/ResultSetTest.rb +34 -3
  36. data/test/RowCountTest.rb +3 -1
  37. data/test/RowTest.rb +90 -24
  38. data/test/SQLTest.rb +4 -1
  39. data/test/SQLTypeTest.rb +101 -0
  40. data/test/ServiceManagerTest.rb +10 -2
  41. data/test/StatementTest.rb +18 -7
  42. data/test/TestSetup.rb +1 -0
  43. data/test/TransactionTest.rb +4 -1
  44. data/test/TypeTest.rb +92 -0
  45. data/test/UnitTest.rb +61 -15
  46. metadata +59 -57
  47. data/doc/CVS/Entries.Log +0 -2
  48. data/doc/classes/CVS/Entries.Log +0 -1
  49. data/doc/classes/FireRuby/CVS/Entries.Log +0 -7
  50. data/lib/fireruby.so +0 -0
data/test/RowTest.rb CHANGED
@@ -3,7 +3,7 @@
3
3
  require 'TestSetup'
4
4
  require 'test/unit'
5
5
  require 'rubygems'
6
- require_gem 'fireruby'
6
+ require 'fireruby'
7
7
 
8
8
  include FireRuby
9
9
 
@@ -12,6 +12,7 @@ class RowTest < Test::Unit::TestCase
12
12
  DB_FILE = "#{CURDIR}#{File::SEPARATOR}row_unit_test.fdb"
13
13
 
14
14
  def setup
15
+ puts "#{self.class.name} started." if TEST_LOGGING
15
16
  if File::exist?(DB_FILE)
16
17
  Database.new(DB_FILE).drop(DB_USER_NAME, DB_PASSWORD)
17
18
  end
@@ -21,12 +22,42 @@ class RowTest < Test::Unit::TestCase
21
22
  @transaction = @connection.start_transaction
22
23
  @results = ResultSet.new(@connection, @transaction,
23
24
  'SELECT * FROM RDB$FIELDS', 3, nil)
24
- @empty = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
25
- 0, 0, 0, 0, 0, 0, 0, 0, 0]
26
-
27
- @connection.execute_immediate('create table rowtest (COL01 integer, '\
28
- 'COL02 varchar(10), COL03 integer)')
29
- @connection.execute_immediate("insert into rowtest values (1, 'Two', 3)")
25
+ @empty = [[0, SQLType::INTEGER], [0, SQLType::INTEGER],
26
+ [0, SQLType::INTEGER], [0, SQLType::INTEGER],
27
+ [0, SQLType::INTEGER], [0, SQLType::INTEGER],
28
+ [0, SQLType::INTEGER], [0, SQLType::INTEGER],
29
+ [0, SQLType::INTEGER], [0, SQLType::INTEGER],
30
+ [0, SQLType::INTEGER], [0, SQLType::INTEGER],
31
+ [0, SQLType::INTEGER], [0, SQLType::INTEGER],
32
+ [0, SQLType::INTEGER], [0, SQLType::INTEGER],
33
+ [0, SQLType::INTEGER], [0, SQLType::INTEGER],
34
+ [0, SQLType::INTEGER], [0, SQLType::INTEGER],
35
+ [0, SQLType::INTEGER], [0, SQLType::INTEGER],
36
+ [0, SQLType::INTEGER], [0, SQLType::INTEGER],
37
+ [0, SQLType::INTEGER], [0, SQLType::INTEGER],
38
+ [0, SQLType::INTEGER], [0, SQLType::INTEGER]]
39
+
40
+ @connection.start_transaction do |tx|
41
+ tx.execute('create table rowtest (COL01 integer, COL02 varchar(10), '\
42
+ 'COL03 integer)')
43
+ tx.execute('create table all_types (col01 bigint, col02 blob, '\
44
+ 'col03 char(100), col04 date, col05 decimal(5,2), '\
45
+ 'col06 double precision, col07 float, col08 integer, '\
46
+ 'col09 numeric(10,3), col10 smallint, col11 time, '\
47
+ 'col12 timestamp, col13 varchar(23))')
48
+ end
49
+ @connection.start_transaction do |tx|
50
+ tx.execute("insert into rowtest values (1, 'Two', 3)")
51
+
52
+ stmt = Statement.new(@connection, tx,
53
+ "insert into all_types values(?, ?, ?, ?, ?, ?, "\
54
+ "?, ?, ?, ?, ?, ?, ?)",
55
+ 3)
56
+ #stmt.execute_for([nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil])
57
+ stmt.execute_for([100000, nil, 'La la la', Date.new(2005, 10, 29),
58
+ 10.23, 100.751, 56.25, 12345, 19863.21, 123,
59
+ Time.new, Time.new, 'The End!'])
60
+ end
30
61
  end
31
62
 
32
63
  def teardown
@@ -36,6 +67,7 @@ class RowTest < Test::Unit::TestCase
36
67
  if File::exist?(DB_FILE)
37
68
  Database.new(DB_FILE).drop(DB_USER_NAME, DB_PASSWORD)
38
69
  end
70
+ puts "#{self.class.name} finished." if TEST_LOGGING
39
71
  end
40
72
 
41
73
  def test01
@@ -56,7 +88,7 @@ class RowTest < Test::Unit::TestCase
56
88
 
57
89
  count = 0
58
90
  data.each do |name, value|
59
- assert(['COL01', 'COL02', 'COL03'].include?(name))
91
+ assert(['ONE', 'TWO', 'THREE'].include?(name))
60
92
  assert([1, 'Two', 3].include?(value))
61
93
  count += 1
62
94
  end
@@ -64,7 +96,7 @@ class RowTest < Test::Unit::TestCase
64
96
 
65
97
  count = 0
66
98
  data.each_key do |name|
67
- assert(['COL01', 'COL02', 'COL03'].include?(name))
99
+ assert(['ONE', 'TWO', 'THREE'].include?(name))
68
100
  count += 1
69
101
  end
70
102
  assert(count == 3)
@@ -76,17 +108,20 @@ class RowTest < Test::Unit::TestCase
76
108
  end
77
109
  assert(count == 3)
78
110
 
79
- assert(data.fetch('COL02') == 'Two')
80
- assert(data.fetch('COL04', 'LALALA') == 'LALALA')
81
- assert(data.fetch('COL00') {'NOT FOUND'} == 'NOT FOUND')
111
+ assert(data.fetch('TWO') == 'Two')
112
+ assert(data.fetch('FOUR', 'LALALA') == 'LALALA')
113
+ assert(data.fetch('ZERO') {'NOT FOUND'} == 'NOT FOUND')
82
114
  begin
83
- data.fetch('COL05')
115
+ data.fetch('FIVE')
84
116
  assert(false, 'Row#fetch succeeded for non-existent column name.')
85
117
  rescue IndexError
86
118
  end
87
119
 
88
- assert(data.has_key?('COL01'))
89
- assert(data.has_key?('COL10') == false)
120
+ assert(data.has_key?('ONE'))
121
+ assert(data.has_key?('TEN') == false)
122
+
123
+ assert(data.has_column?('COL02'))
124
+ assert(data.has_column?('COL22') == false)
90
125
 
91
126
  assert(data.has_alias?('TWO'))
92
127
  assert(data.has_alias?('FOUR') == false)
@@ -96,6 +131,11 @@ class RowTest < Test::Unit::TestCase
96
131
 
97
132
  assert(data.keys.size == 3)
98
133
  data.keys.each do |name|
134
+ assert(['ONE', 'TWO', 'THREE'].include?(name))
135
+ end
136
+
137
+ assert(data.names.size == 3)
138
+ data.names.each do |name|
99
139
  assert(['COL01', 'COL02', 'COL03'].include?(name))
100
140
  end
101
141
 
@@ -109,24 +149,24 @@ class RowTest < Test::Unit::TestCase
109
149
  assert([1, 'Two', 3].include?(value))
110
150
  end
111
151
 
112
- array = data.select {|name, value| name == 'COL02'}
152
+ array = data.select {|name, value| name == 'TWO'}
113
153
  assert(array.size == 1)
114
- assert(array[0][0] == 'COL02')
154
+ assert(array[0][0] == 'TWO')
115
155
  assert(array[0][1] == 'Two')
116
156
 
117
157
  array = data.to_a
118
158
  assert(array.size == 3)
119
- assert(array.include?(['COL01', 1]))
120
- assert(array.include?(['COL02', 'Two']))
121
- assert(array.include?(['COL03', 3]))
159
+ assert(array.include?(['ONE', 1]))
160
+ assert(array.include?(['TWO', 'Two']))
161
+ assert(array.include?(['THREE', 3]))
122
162
 
123
163
  hash = data.to_hash
124
164
  assert(hash.length == 3)
125
- assert(hash['COL01'] == 1)
126
- assert(hash['COL02'] == 'Two')
127
- assert(hash['COL03'] == 3)
165
+ assert(hash['ONE'] == 1)
166
+ assert(hash['TWO'] == 'Two')
167
+ assert(hash['THREE'] == 3)
128
168
 
129
- array = data.values_at('COL10', 'COL02', 'COL03')
169
+ array = data.values_at('TEN', 'TWO', 'THREE')
130
170
  assert(array.size == 3)
131
171
  assert(array.include?('Two'))
132
172
  assert(array.include?(3))
@@ -134,4 +174,30 @@ class RowTest < Test::Unit::TestCase
134
174
 
135
175
  rows.close
136
176
  end
177
+
178
+ def test03
179
+ results = nil
180
+ row = nil
181
+
182
+ begin
183
+ results = @connection.execute_immediate('select * from all_types')
184
+ row = results.fetch
185
+
186
+ assert(row.get_base_type(0) == SQLType::BIGINT)
187
+ assert(row.get_base_type(1) == SQLType::BLOB)
188
+ assert(row.get_base_type(2) == SQLType::CHAR)
189
+ assert(row.get_base_type(3) == SQLType::DATE)
190
+ assert(row.get_base_type(4) == SQLType::DECIMAL)
191
+ assert(row.get_base_type(5) == SQLType::DOUBLE)
192
+ assert(row.get_base_type(6) == SQLType::FLOAT)
193
+ assert(row.get_base_type(7) == SQLType::INTEGER)
194
+ assert(row.get_base_type(8) == SQLType::NUMERIC)
195
+ assert(row.get_base_type(9) == SQLType::SMALLINT)
196
+ assert(row.get_base_type(10) == SQLType::TIME)
197
+ assert(row.get_base_type(11) == SQLType::TIMESTAMP)
198
+ assert(row.get_base_type(12) == SQLType::VARCHAR)
199
+ ensure
200
+ results.close if results != nil
201
+ end
202
+ end
137
203
  end
data/test/SQLTest.rb CHANGED
@@ -3,7 +3,7 @@
3
3
  require 'TestSetup'
4
4
  require 'test/unit'
5
5
  require 'rubygems'
6
- require_gem 'fireruby'
6
+ require 'fireruby'
7
7
 
8
8
  include FireRuby
9
9
 
@@ -15,6 +15,7 @@ class SQLTest < Test::Unit::TestCase
15
15
  INSERT_SQL = "INSERT INTO TEST_TABLE VALUES(?, ?, ?, ?, ?, ?)"
16
16
 
17
17
  def setup
18
+ puts "#{self.class.name} started." if TEST_LOGGING
18
19
  if File::exist?(DB_FILE)
19
20
  Database.new(DB_FILE).drop(DB_USER_NAME, DB_PASSWORD)
20
21
  end
@@ -42,6 +43,7 @@ class SQLTest < Test::Unit::TestCase
42
43
  if File::exist?(DB_FILE)
43
44
  Database.new(DB_FILE).drop(DB_USER_NAME, DB_PASSWORD)
44
45
  end
46
+ puts "#{self.class.name} finished." if TEST_LOGGING
45
47
  end
46
48
 
47
49
  def test01
@@ -140,6 +142,7 @@ class SQLTest < Test::Unit::TestCase
140
142
  total = total + 1
141
143
  end
142
144
  assert(total == 20)
145
+ r.close
143
146
  end
144
147
 
145
148
  a = []
@@ -0,0 +1,101 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'TestSetup'
4
+ require 'test/unit'
5
+ require 'rubygems'
6
+ require 'fireruby'
7
+
8
+ include FireRuby
9
+
10
+ class SQLTypeTest < Test::Unit::TestCase
11
+ CURDIR = "#{Dir.getwd}"
12
+ DB_FILE = "#{CURDIR}#{File::SEPARATOR}sql_type_test.fdb"
13
+
14
+ def setup
15
+ puts "#{self.class.name} started." if TEST_LOGGING
16
+ if File::exist?(DB_FILE)
17
+ Database.new(DB_FILE).drop(DB_USER_NAME, DB_PASSWORD)
18
+ end
19
+
20
+ @database = Database.create(DB_FILE, DB_USER_NAME, DB_PASSWORD)
21
+ @connection = @database.connect(DB_USER_NAME, DB_PASSWORD)
22
+
23
+ @connection.start_transaction do |tx|
24
+ tx.execute("create table all_types (col01 bigint, col02 blob, "\
25
+ "col03 char(100), col04 date, col05 decimal(5,2), "\
26
+ "col06 double precision, col07 float, col08 integer, "\
27
+ "col09 numeric(10,3), col10 smallint, col11 time, "\
28
+ "col12 timestamp, col13 varchar(23))")
29
+ end
30
+ end
31
+
32
+ def teardown
33
+ @connection.close if @connection != nil && @connection.open?
34
+
35
+ if File::exist?(DB_FILE)
36
+ Database.new(DB_FILE).drop(DB_USER_NAME, DB_PASSWORD)
37
+ end
38
+ puts "#{self.class.name} finished." if TEST_LOGGING
39
+ end
40
+
41
+ def test01
42
+ types = []
43
+ types.push(SQLType.new(SQLType::BIGINT))
44
+ types.push(SQLType.new(SQLType::VARCHAR, 1000))
45
+ types.push(SQLType.new(SQLType::DECIMAL, nil, 10))
46
+ types.push(SQLType.new(SQLType::NUMERIC, nil, 5, 3))
47
+ types.push(SQLType.new(SQLType::BLOB, nil, nil, nil, 1))
48
+
49
+ assert(types[0] == types[0])
50
+ assert(!(types[0] == types[1]))
51
+ assert(types[1] == SQLType.new(SQLType::VARCHAR, 1000))
52
+
53
+ assert(types[0].type == SQLType::BIGINT)
54
+ assert(types[0].length == nil)
55
+ assert(types[0].precision == nil)
56
+ assert(types[0].scale == nil)
57
+ assert(types[0].subtype == nil)
58
+
59
+ assert(types[1].type == SQLType::VARCHAR)
60
+ assert(types[1].length == 1000)
61
+ assert(types[1].precision == nil)
62
+ assert(types[1].scale == nil)
63
+ assert(types[1].subtype == nil)
64
+
65
+ assert(types[2].type == SQLType::DECIMAL)
66
+ assert(types[2].length == nil)
67
+ assert(types[2].precision == 10)
68
+ assert(types[2].scale == nil)
69
+ assert(types[2].subtype == nil)
70
+
71
+ assert(types[3].type == SQLType::NUMERIC)
72
+ assert(types[3].length == nil)
73
+ assert(types[3].precision == 5)
74
+ assert(types[3].scale == 3)
75
+ assert(types[3].subtype == nil)
76
+
77
+ assert(types[4].type == SQLType::BLOB)
78
+ assert(types[4].length == nil)
79
+ assert(types[4].precision == nil)
80
+ assert(types[4].scale == nil)
81
+ assert(types[4].subtype == 1)
82
+ end
83
+
84
+ def test02
85
+ types = SQLType.for_table("all_types", @connection)
86
+
87
+ assert(types['COL01'] == SQLType.new(SQLType::BIGINT))
88
+ assert(types['COL02'] == SQLType.new(SQLType::BLOB, nil, nil, nil, 0))
89
+ assert(types['COL03'] == SQLType.new(SQLType::CHAR, 100))
90
+ assert(types['COL04'] == SQLType.new(SQLType::DATE))
91
+ assert(types['COL05'] == SQLType.new(SQLType::DECIMAL, nil, 5, 2))
92
+ assert(types['COL06'] == SQLType.new(SQLType::DOUBLE))
93
+ assert(types['COL07'] == SQLType.new(SQLType::FLOAT))
94
+ assert(types['COL08'] == SQLType.new(SQLType::INTEGER))
95
+ assert(types['COL09'] == SQLType.new(SQLType::NUMERIC, nil, 10, 3))
96
+ assert(types['COL10'] == SQLType.new(SQLType::SMALLINT))
97
+ assert(types['COL11'] == SQLType.new(SQLType::TIME))
98
+ assert(types['COL12'] == SQLType.new(SQLType::TIMESTAMP))
99
+ assert(types['COL13'] == SQLType.new(SQLType::VARCHAR, 23))
100
+ end
101
+ end
@@ -3,11 +3,19 @@
3
3
  require 'TestSetup'
4
4
  require 'test/unit'
5
5
  require 'rubygems'
6
- require_gem 'fireruby'
6
+ require 'fireruby'
7
7
 
8
8
  include FireRuby
9
9
 
10
10
  class ServiceManagerTest < Test::Unit::TestCase
11
+ def setup
12
+ puts "#{self.class.name} started." if TEST_LOGGING
13
+ end
14
+
15
+ def teardown
16
+ puts "#{self.class.name} finished." if TEST_LOGGING
17
+ end
18
+
11
19
  def test01
12
20
  sm = ServiceManager.new('localhost')
13
21
  assert(sm.connected? == false)
@@ -18,4 +26,4 @@ class ServiceManagerTest < Test::Unit::TestCase
18
26
  assert(sm.disconnect == sm)
19
27
  assert(sm.connected? == false)
20
28
  end
21
- end
29
+ end
@@ -3,7 +3,7 @@
3
3
  require 'TestSetup'
4
4
  require 'test/unit'
5
5
  require 'rubygems'
6
- require_gem 'fireruby'
6
+ require 'fireruby'
7
7
 
8
8
  include FireRuby
9
9
 
@@ -12,6 +12,7 @@ class StatementTest < Test::Unit::TestCase
12
12
  DB_FILE = "#{CURDIR}#{File::SEPARATOR}stmt_unit_test.fdb"
13
13
 
14
14
  def setup
15
+ puts "#{self.class.name} started." if TEST_LOGGING
15
16
  if File::exist?(DB_FILE)
16
17
  Database.new(DB_FILE).drop(DB_USER_NAME, DB_PASSWORD)
17
18
  end
@@ -32,6 +33,7 @@ class StatementTest < Test::Unit::TestCase
32
33
  if File::exist?(DB_FILE)
33
34
  Database.new(DB_FILE).drop(DB_USER_NAME, DB_PASSWORD)
34
35
  end
36
+ puts "#{self.class.name} finished." if TEST_LOGGING
35
37
  end
36
38
 
37
39
  def test01
@@ -47,6 +49,7 @@ class StatementTest < Test::Unit::TestCase
47
49
  assert(s1.transaction == @transactions[0])
48
50
  assert(s1.dialect == 3)
49
51
  assert(s1.type == Statement::SELECT_STATEMENT)
52
+ s1.close
50
53
 
51
54
  s2 = Statement.new(@connections[0],
52
55
  @transactions[0],
@@ -57,6 +60,7 @@ class StatementTest < Test::Unit::TestCase
57
60
  assert(s2.transaction == @transactions[0])
58
61
  assert(s2.dialect == 1)
59
62
  assert(s2.type == Statement::DELETE_STATEMENT)
63
+ s2.close
60
64
  end
61
65
 
62
66
  def test02
@@ -68,7 +72,8 @@ class StatementTest < Test::Unit::TestCase
68
72
  "WHERE RDB$FIELD_NAME LIKE ?", 3)
69
73
 
70
74
  begin
71
- s.execute
75
+ r = s.execute
76
+ r.close
72
77
  assert(false,
73
78
  "Executed statement that required parameter without the "\
74
79
  "parameter being specified.")
@@ -76,7 +81,8 @@ class StatementTest < Test::Unit::TestCase
76
81
  end
77
82
 
78
83
  begin
79
- s.execute_for([])
84
+ r = s.execute_for([])
85
+ r.close
80
86
  assert(false,
81
87
  "Executed statement that required a parameter with an empty "\
82
88
  "parameter set.")
@@ -84,20 +90,25 @@ class StatementTest < Test::Unit::TestCase
84
90
  end
85
91
 
86
92
  begin
87
- s.execute_for(['LALALA', 25])
93
+ r = s.execute_for(['LALALA', 25])
94
+ r.close
88
95
  assert(false,
89
96
  "Executed statement that required a parameter with too many "\
90
97
  "parameters.")
91
98
  rescue Exception => error
92
99
  end
93
100
 
94
- assert(s.execute_for(['LALALA']) != nil)
95
- assert(s.execute_for(['LALALA']).class == ResultSet)
101
+ r = s.execute_for(['LALALA'])
102
+ assert(r != nil)
103
+ assert(r.class == ResultSet)
104
+ r.close
105
+
96
106
  total = 0
97
107
  s.execute_for(["%"]) do |row|
98
108
  total = total + 1
99
109
  end
100
110
  assert(total = 88)
111
+ s.close
101
112
  end
102
113
 
103
114
  def test03
@@ -105,7 +116,7 @@ class StatementTest < Test::Unit::TestCase
105
116
  @database.connect(DB_USER_NAME, DB_PASSWORD) do |cxn|
106
117
  cxn.execute_immediate('CREATE TABLE STRING_TEST(TEXT VARCHAR(10))')
107
118
  cxn.start_transaction do |tx|
108
- # Perform an trancated insert.
119
+ # Perform an truncated insert.
109
120
  s = Statement.new(cxn, tx, 'INSERT INTO STRING_TEST VALUES(?)', 3)
110
121
  s.execute_for(['012345678901234'])
111
122
 
data/test/TestSetup.rb CHANGED
@@ -8,3 +8,4 @@ $:.push("#{basedir}#{File::SEPARATOR}lib")
8
8
 
9
9
  DB_USER_NAME = 'sysdba'
10
10
  DB_PASSWORD = 'masterkey'
11
+ TEST_LOGGING = false
@@ -3,7 +3,7 @@
3
3
  require 'TestSetup'
4
4
  require 'test/unit'
5
5
  require 'rubygems'
6
- require_gem 'fireruby'
6
+ require 'fireruby'
7
7
 
8
8
  include FireRuby
9
9
 
@@ -12,6 +12,7 @@ class TransactionTest < Test::Unit::TestCase
12
12
  DB_FILE = "#{CURDIR}#{File::SEPARATOR}tx_unit_test.fdb"
13
13
 
14
14
  def setup
15
+ puts "#{self.class.name} started." if TEST_LOGGING
15
16
  if File::exist?(DB_FILE)
16
17
  Database.new(DB_FILE).drop(DB_USER_NAME, DB_PASSWORD)
17
18
  end
@@ -36,6 +37,7 @@ class TransactionTest < Test::Unit::TestCase
36
37
  if File::exist?(DB_FILE)
37
38
  Database.new(DB_FILE).drop(DB_USER_NAME, DB_PASSWORD)
38
39
  end
40
+ puts "#{self.class.name} finished." if TEST_LOGGING
39
41
  end
40
42
 
41
43
  def test01
@@ -99,6 +101,7 @@ class TransactionTest < Test::Unit::TestCase
99
101
  r = @transactions[0].execute(sql[1])
100
102
  assert(r != nil)
101
103
  assert(r.class == ResultSet)
104
+ r.close
102
105
 
103
106
  total = 0
104
107
  @transactions[0].execute(sql[1]) do |row|
data/test/TypeTest.rb ADDED
@@ -0,0 +1,92 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'TestSetup'
4
+ require 'test/unit'
5
+ require 'rubygems'
6
+ require 'fireruby'
7
+ require 'date'
8
+
9
+ include FireRuby
10
+
11
+ class TypeTest < Test::Unit::TestCase
12
+ CURDIR = "#{Dir.getwd}"
13
+ DB_FILE = "#{CURDIR}#{File::SEPARATOR}types_unit_test.fdb"
14
+
15
+ def setup
16
+ puts "#{self.class.name} started." if TEST_LOGGING
17
+ if File.exist?(DB_FILE)
18
+ db = Database.new(DB_FILE)
19
+ db.drop(DB_USER_NAME, DB_PASSWORD)
20
+ end
21
+ @db = Database.create(DB_FILE, DB_USER_NAME, DB_PASSWORD)
22
+ cxn = @db.connect(DB_USER_NAME, DB_PASSWORD)
23
+ cxn.start_transaction do |tx|
24
+ tx.execute("create table types_table (COL01 integer, "\
25
+ "COL02 float, COL03 decimal(10,2), "\
26
+ "COL04 numeric(5,3), COL05 date, COL06 timestamp, "\
27
+ "COL07 char(10), COL08 time, COL09 varchar(30))")
28
+ end
29
+
30
+ cxn.start_transaction do |tx|
31
+ stmt = Statement.new(cxn, tx, "insert into types_table values "\
32
+ "(?, ?, ?, ?, ?, ?, ?, ?, ?)", 3)
33
+ stmt.execute_for([10, 100.2, 2378.65, 192.345,
34
+ Date.new(2005, 10, 21), Time.new, 'La la la',
35
+ Time.new, "Oobly Joobly"])
36
+ stmt.close
37
+ end
38
+ cxn.close
39
+ end
40
+
41
+ def teardown
42
+ if File::exist?(DB_FILE)
43
+ @db.drop(DB_USER_NAME, DB_PASSWORD)
44
+ end
45
+ puts "#{self.class.name} finished." if TEST_LOGGING
46
+ end
47
+
48
+ def test01
49
+ rows = cxn = nil
50
+ begin
51
+ cxn = @db.connect(DB_USER_NAME, DB_PASSWORD)
52
+ rows = cxn.execute_immediate('select * from types_table')
53
+ row = rows.fetch
54
+ assert(row[0].kind_of?(Integer))
55
+ assert(row[1].instance_of?(Float))
56
+ assert(row[2].instance_of?(Float))
57
+ assert(row[3].instance_of?(Float))
58
+ assert(row[4].instance_of?(Date))
59
+ assert(row[5].instance_of?(Time))
60
+ assert(row[6].instance_of?(String))
61
+ assert(row[7].instance_of?(Time))
62
+ assert(row[8].instance_of?(String))
63
+ ensure
64
+ rows.close if rows != nil
65
+ cxn.close if cxn != nil
66
+ end
67
+ end
68
+
69
+ def test02
70
+ $FireRubySettings[:DATE_AS_DATE] = false
71
+ rows = cxn = nil
72
+ begin
73
+ cxn = @db.connect(DB_USER_NAME, DB_PASSWORD)
74
+ rows = cxn.execute_immediate('select * from types_table')
75
+ row = rows.fetch
76
+ assert(row[0].kind_of?(Integer))
77
+ assert(row[1].instance_of?(Float))
78
+ assert(row[2].instance_of?(Float))
79
+ assert(row[3].instance_of?(Float))
80
+ assert(row[4].instance_of?(Time))
81
+ assert(row[5].instance_of?(Time))
82
+ assert(row[6].instance_of?(String))
83
+ assert(row[7].instance_of?(Time))
84
+ assert(row[8].instance_of?(String))
85
+ rows.close
86
+ ensure
87
+ rows.close if rows != nil
88
+ cxn.close if cxn != nil
89
+ end
90
+ $FireRubySettings[:DATE_AS_DATE] = true
91
+ end
92
+ end
data/test/UnitTest.rb CHANGED
@@ -1,18 +1,64 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require 'DatabaseTest'
4
- require 'ConnectionTest'
5
- require 'TransactionTest'
6
- require 'StatementTest'
7
- require 'ResultSetTest'
8
- require 'RowCountTest'
9
- require 'RowTest'
10
- require 'GeneratorTest'
11
- require 'DDLTest'
12
- require 'SQLTest'
13
- require 'ServiceManagerTest'
14
- require 'CharacterSetTest'
15
- if PLATFORM.include?('powerpc-darwin') == false
16
- require 'BackupRestoreTest'
17
- require 'AddRemoveUserTest'
3
+ #-------------------------------------------------------------------------------
4
+ # Old Unit Test Suite
5
+ #
6
+ # This code has been dropped for two reasons. First, adding new tests requires
7
+ # that this code be updated. Second, running the tests in a single Ruby
8
+ # interpreter seems to cause issues as the tests create, use and drop a lot of
9
+ # database files and this seems to cause intermittent problems with one or more
10
+ # of the test scripts that doesn't occur when the script is run on its own.
11
+ # Changing the number of scripts run also seemed to cause the problems to go
12
+ # away. It didn't seem to matter which scripts where left out which leads me
13
+ # to believe that the problem is related to timing issues.
14
+ #
15
+ # The new unit test suite, below, searches the directory for unit test files
16
+ # and executes each in their own interpreter. I have left this code here for
17
+ # reference purposes.
18
+ #-------------------------------------------------------------------------------
19
+ #require 'DatabaseTest'
20
+ #require 'ConnectionTest'
21
+ #require 'TransactionTest'
22
+ #require 'StatementTest'
23
+ #require 'ResultSetTest'
24
+ #require 'RowCountTest'
25
+ #require 'RowTest'
26
+ #require 'GeneratorTest'
27
+ #require 'DDLTest'
28
+ #require 'SQLTest'
29
+ #require 'ServiceManagerTest'
30
+ #require 'CharacterSetTest'
31
+ #require 'KeyTest'
32
+ #require 'TypeTest'
33
+ #require 'SQLTypeTest'
34
+ #if PLATFORM.include?('powerpc-darwin') == false
35
+ # require 'BackupRestoreTest'
36
+ # require 'AddRemoveUserTest'
37
+ #end
38
+ #-------------------------------------------------------------------------------
39
+ SPECIALS = ['AddRemoveUserTest',
40
+ 'BackupRestoreTest',
41
+ 'ServiceManagerTest']
42
+ begin
43
+ files = Dir.entries(".")
44
+ files.reject! do |name|
45
+ ['.', '..', 'UnitTest.rb'].include?(name) or
46
+ name[-7,7] != 'Test.rb'
47
+ end
48
+ files.each do |name|
49
+ execute = true
50
+ if SPECIALS.include?(name)
51
+ execute = !(PLATFORM.include?('powerpc-darwin'))
52
+ end
53
+
54
+ if execute
55
+ system("ruby #{name}")
56
+
57
+ if $? != 0
58
+ raise StandardError.new("Error executing '#{name}'. Testing terminated.")
59
+ end
60
+ end
61
+ end
62
+ rescue => error
63
+ puts "\n\nERROR: #{error.message}"
18
64
  end