marjoree 0.0.1 → 0.0.9

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 (174) hide show
  1. data/Marjoree.iml +14 -0
  2. data/README +9 -36
  3. data/bin/create_marj_structure.rb +75 -0
  4. data/bin/create_odbc_connections.rb +39 -0
  5. data/bin/odbc_connection_finder.rb +46 -0
  6. data/examples/contains_example.rb +1 -1
  7. data/examples/count_and_insert_example.rb +1 -1
  8. data/examples/select_example.rb +1 -1
  9. data/html/classes/ExpectedResultSet.html +60 -33
  10. data/html/classes/ExpectedResultSet.src/M000002.html +6 -5
  11. data/html/classes/ExpectedResultSet.src/M000003.html +5 -5
  12. data/html/classes/ExpectedResultSet.src/M000004.html +5 -5
  13. data/html/classes/ExpectedResultSet.src/M000005.html +18 -0
  14. data/html/classes/ExpectedResultSet.src/M000006.html +24 -0
  15. data/html/classes/ExpectedResultSet.src/M000007.html +23 -0
  16. data/html/classes/ExpectedResultSet.src/M000008.html +29 -0
  17. data/html/classes/Fixnum.html +287 -0
  18. data/html/classes/Fixnum.src/M000031.html +18 -0
  19. data/html/classes/Fixnum.src/M000034.html +18 -0
  20. data/html/classes/Fixnum.src/M000037.html +18 -0
  21. data/html/classes/Fixnum.src/M000039.html +18 -0
  22. data/html/classes/Fixnum.src/M000041.html +18 -0
  23. data/html/classes/Hash.html +156 -0
  24. data/html/classes/Hash.src/M000009.html +21 -0
  25. data/html/classes/Hash.src/M000010.html +20 -0
  26. data/html/classes/Marjoree.html +268 -151
  27. data/html/classes/Marjoree.src/M000057.html +19 -0
  28. data/html/classes/Marjoree.src/M000058.html +18 -0
  29. data/html/classes/{ExpectedResultSet.src/M000001.html → Marjoree.src/M000059.html} +4 -4
  30. data/html/classes/Marjoree.src/{M000024.html → M000060.html} +4 -4
  31. data/html/classes/Marjoree.src/{M000031.html → M000061.html} +4 -4
  32. data/html/classes/Marjoree.src/{M000026.html → M000062.html} +3 -3
  33. data/html/classes/Marjoree.src/{M000027.html → M000063.html} +3 -3
  34. data/html/classes/Marjoree.src/{M000028.html → M000064.html} +3 -3
  35. data/html/classes/Marjoree.src/{M000029.html → M000065.html} +5 -6
  36. data/html/classes/Marjoree.src/{M000030.html → M000066.html} +5 -5
  37. data/html/classes/Marjoree.src/M000067.html +19 -0
  38. data/html/classes/Marjoree.src/{M000032.html → M000068.html} +3 -3
  39. data/html/classes/{ResultSetWrapper.src/M000009.html → Marjoree.src/M000069.html} +4 -4
  40. data/html/classes/{ResultSetWrapper.src/M000010.html → Marjoree.src/M000070.html} +4 -4
  41. data/html/classes/{ResultSetWrapper.src/M000011.html → Marjoree.src/M000071.html} +4 -4
  42. data/html/classes/Marjoree.src/M000072.html +20 -0
  43. data/html/classes/Marjoree.src/M000073.html +20 -0
  44. data/html/classes/Marjoree.src/M000074.html +20 -0
  45. data/html/classes/Marjoree.src/{M000033.html → M000075.html} +3 -3
  46. data/html/classes/Marjoree.src/{M000034.html → M000076.html} +4 -4
  47. data/html/classes/Marjoree.src/{M000035.html → M000077.html} +2 -2
  48. data/html/classes/Marjoree.src/{M000036.html → M000078.html} +4 -3
  49. data/html/classes/Marjoree.src/{M000037.html → M000079.html} +1 -1
  50. data/html/classes/Marjoree.src/{M000038.html → M000080.html} +3 -3
  51. data/html/classes/Marjoree.src/{M000039.html → M000081.html} +3 -4
  52. data/html/classes/Marjoree.src/{M000040.html → M000082.html} +3 -3
  53. data/html/classes/Marjoree.src/{M000041.html → M000083.html} +3 -3
  54. data/html/classes/{ResultSetWrapper.src/M000008.html → Marjoree.src/M000084.html} +4 -4
  55. data/html/classes/ODBC.html +4 -0
  56. data/html/classes/ODBC/Error.html +12 -12
  57. data/html/classes/ODBC/Error.src/M000047.html +21 -0
  58. data/html/classes/ODBC/Error.src/{M000021.html → M000048.html} +2 -2
  59. data/html/classes/ODBC/TimeStamp.html +48 -18
  60. data/html/classes/ODBC/TimeStamp.src/{M000017.html → M000042.html} +2 -2
  61. data/html/classes/ODBC/TimeStamp.src/M000043.html +22 -0
  62. data/html/classes/ODBC/TimeStamp.src/{M000019.html → M000044.html} +2 -3
  63. data/html/classes/ODBC/TimeStamp.src/M000045.html +18 -0
  64. data/html/classes/ODBC/TimeStamp.src/M000046.html +18 -0
  65. data/html/classes/OdbcConnectionWrapper.html +244 -0
  66. data/html/classes/OdbcConnectionWrapper.src/M000023.html +18 -0
  67. data/html/classes/OdbcConnectionWrapper.src/M000024.html +18 -0
  68. data/html/classes/OdbcConnectionWrapper.src/M000025.html +22 -0
  69. data/html/classes/OdbcConnectionWrapper.src/M000026.html +25 -0
  70. data/html/classes/OdbcConnectionWrapper.src/M000027.html +20 -0
  71. data/html/classes/OdbcConnectionWrapper.src/M000028.html +28 -0
  72. data/html/classes/OdbcConnectionWrapper.src/M000029.html +24 -0
  73. data/html/classes/OdbcConnectionWrapper.src/M000030.html +30 -0
  74. data/html/classes/{ResultSetWrapper.html → ResultSet.html} +71 -94
  75. data/html/classes/ResultSet.src/M000011.html +27 -0
  76. data/html/classes/ResultSet.src/M000012.html +21 -0
  77. data/html/classes/ResultSet.src/M000013.html +23 -0
  78. data/html/classes/ResultSet.src/M000014.html +18 -0
  79. data/html/classes/ResultSet.src/M000015.html +18 -0
  80. data/html/classes/ResultSet.src/M000016.html +18 -0
  81. data/html/classes/ResultSet.src/M000017.html +18 -0
  82. data/html/classes/ResultSet.src/M000018.html +20 -0
  83. data/html/classes/ResultSet.src/M000019.html +18 -0
  84. data/html/classes/ResultSet.src/M000020.html +22 -0
  85. data/html/classes/ResultSet.src/M000021.html +23 -0
  86. data/html/classes/ResultSet.src/M000022.html +22 -0
  87. data/html/classes/Test.html +107 -0
  88. data/html/classes/Test/Unit.html +107 -0
  89. data/html/classes/Test/Unit/TestCase.html +257 -0
  90. data/html/classes/Test/Unit/TestCase.src/M000049.html +18 -0
  91. data/html/classes/Test/Unit/TestCase.src/M000050.html +18 -0
  92. data/html/classes/Test/Unit/TestCase.src/M000051.html +17 -0
  93. data/html/classes/Test/Unit/TestCase.src/M000052.html +17 -0
  94. data/html/classes/Test/Unit/TestCase.src/M000053.html +25 -0
  95. data/html/classes/Test/Unit/TestCase.src/M000054.html +18 -0
  96. data/html/classes/Test/Unit/TestCase.src/M000055.html +18 -0
  97. data/html/classes/Test/Unit/TestCase.src/M000056.html +35 -0
  98. data/html/created.rid +1 -1
  99. data/html/files/README.html +2 -51
  100. data/html/files/lib/expected_result_set_rb.html +1 -16
  101. data/html/files/lib/marjoree/core_rb.html +111 -0
  102. data/html/files/lib/marjoree/fixtures_rb.html +111 -0
  103. data/html/files/lib/marjoree/odbc_connection_wrapper_rb.html +109 -0
  104. data/html/files/lib/marjoree/odbc_rb.html +108 -0
  105. data/html/files/lib/{odbc_overrides_rb.html → marjoree/result_set_rb.html} +5 -5
  106. data/html/files/lib/{result_set_wrapper_rb.html → marjoree/time_rb.html} +5 -5
  107. data/html/files/lib/marjoree_rb.html +3 -4
  108. data/html/files/lib/run_marjoree_rb.html +145 -0
  109. data/html/files/lib/run_marjoree_rb.src/M000001.html +34 -0
  110. data/html/fr_class_index.html +7 -1
  111. data/html/fr_file_index.html +7 -2
  112. data/html/fr_method_index.html +84 -42
  113. data/lib/Marjoree.iml +12 -0
  114. data/lib/expected_result_set.rb +51 -24
  115. data/lib/marjoree.rb +2 -344
  116. data/lib/marjoree/core.rb +388 -0
  117. data/lib/marjoree/fixtures.rb +156 -0
  118. data/lib/marjoree/odbc.rb +45 -0
  119. data/lib/marjoree/odbc_connection_wrapper.rb +79 -0
  120. data/lib/marjoree/result_set.rb +165 -0
  121. data/lib/marjoree/sybase_definitions.rb +223 -0
  122. data/lib/marjoree/time.rb +31 -0
  123. data/lib/proc_param_info.txt +20 -0
  124. data/lib/run_marjoree.rb +31 -0
  125. data/pkg/marjoree-0.0.9.gem +0 -0
  126. data/rakefile.rb +3 -3
  127. data/tests/all_cruby_tests.rb +24 -0
  128. data/tests/all_jruby_tests.rb +22 -0
  129. data/tests/all_tests.rb +9 -6
  130. data/tests/fixtures/A.yml +3 -0
  131. data/tests/fixtures/B.yml +5 -0
  132. data/tests/fixtures/first_db/FIRST.yml +8 -0
  133. data/tests/fixtures/second_db/SECOND.yml +9 -0
  134. data/tests/marjoree/test_assert_results.rb +82 -0
  135. data/tests/marjoree/test_connection_details.rb +44 -0
  136. data/tests/{test_contains.rb → marjoree/test_contains.rb} +0 -0
  137. data/tests/{test_delete.rb → marjoree/test_delete.rb} +0 -0
  138. data/tests/marjoree/test_drop_user_objects.rb +52 -0
  139. data/tests/marjoree/test_expected_result_set.rb +111 -0
  140. data/tests/marjoree/test_fixtures.rb +112 -0
  141. data/tests/{test_insert.rb → marjoree/test_insert.rb} +0 -0
  142. data/tests/{test_marjoree.rb → marjoree/test_marjoree.rb} +14 -2
  143. data/tests/marjoree/test_multiple_db_fixtures.rb +35 -0
  144. data/tests/{test_num_rows.rb → marjoree/test_num_rows.rb} +0 -0
  145. data/tests/marjoree/test_odbc_connection_wrapper.rb +47 -0
  146. data/tests/{test_result_set_wrapper.rb → marjoree/test_result_set_wrapper.rb} +8 -8
  147. data/tests/marjoree/test_select.rb +55 -0
  148. data/tests/marjoree/test_single_odbc_connection_wrapper.rb +39 -0
  149. data/tests/{test_sproc.rb → marjoree/test_sproc.rb} +3 -4
  150. data/tests/marjoree/test_time.rb +25 -0
  151. data/tests/{test_time_stamp.rb → marjoree/test_time_stamp.rb} +10 -1
  152. data/tests/{test_truncate.rb → marjoree/test_truncate.rb} +0 -0
  153. data/tests/{test_update.rb → marjoree/test_update.rb} +14 -14
  154. data/tests/multiple_odbc_config/connections.yml +13 -0
  155. data/tests/single_odbc_config/connections.yml +3 -0
  156. metadata +214 -112
  157. data/html/classes/Marjoree.src/M000022.html +0 -19
  158. data/html/classes/Marjoree.src/M000023.html +0 -20
  159. data/html/classes/Marjoree.src/M000025.html +0 -18
  160. data/html/classes/Marjoree.src/M000042.html +0 -25
  161. data/html/classes/ODBC/Error.src/M000020.html +0 -21
  162. data/html/classes/ODBC/TimeStamp.src/M000018.html +0 -22
  163. data/html/classes/ResultSetWrapper.src/M000005.html +0 -27
  164. data/html/classes/ResultSetWrapper.src/M000006.html +0 -24
  165. data/html/classes/ResultSetWrapper.src/M000007.html +0 -23
  166. data/html/classes/ResultSetWrapper.src/M000012.html +0 -20
  167. data/html/classes/ResultSetWrapper.src/M000013.html +0 -18
  168. data/html/classes/ResultSetWrapper.src/M000014.html +0 -22
  169. data/html/classes/ResultSetWrapper.src/M000015.html +0 -23
  170. data/html/classes/ResultSetWrapper.src/M000016.html +0 -27
  171. data/lib/odbc_overrides.rb +0 -33
  172. data/lib/result_set_wrapper.rb +0 -193
  173. data/tests/test_expected_result_set.rb +0 -40
  174. data/tests/test_select.rb +0 -30
@@ -0,0 +1,223 @@
1
+ module SybaseDefinitions
2
+
3
+ def view( view_name )
4
+ return View.new( view_name )
5
+ end
6
+
7
+ def table( table_name )
8
+ return Table.new( table_name )
9
+ end
10
+
11
+ def int_column( column_name )
12
+ return ColumnDefinition.new( column_name, "int" )
13
+ end
14
+
15
+ def varchar_column( column_name )
16
+ return ColumnDefinition.new( column_name, "varchar" )
17
+ end
18
+
19
+ def char_column( column_name )
20
+ return ColumnDefinition.new( column_name, "char" )
21
+ end
22
+
23
+ def datetime_column( column_name )
24
+ return ColumnDefinition.new( column_name, "datetime" )
25
+ end
26
+
27
+ def numeric_column( column_name )
28
+ return ColumnDefinition.new( column_name, "numeric" )
29
+ end
30
+
31
+ def bit_column( column_name )
32
+ return ColumnDefinition.new( column_name, "bit" )
33
+ end
34
+
35
+ # helper classes
36
+
37
+ class View
38
+ def initialize( view_name )
39
+ @view_name = view_name
40
+ #puts $connection.columns( @table_name ).columns.each_hash{ |key,value| puts "Key: #{key}, value: #{value}"}
41
+ end
42
+
43
+ def exists?
44
+ fail( "View #{@view_name} does not exist" ) unless get_user_views.include? @view_name
45
+ end
46
+ end
47
+
48
+ class Table
49
+ def initialize( table_name )
50
+ @table_name = table_name
51
+ #puts $connection.columns( @table_name ).columns.each_hash{ |key,value| puts "Key: #{key}, value: #{value}"}
52
+ end
53
+
54
+ def exists?
55
+ fail( "Table #{@table_name} does not exist" ) unless get_user_tables.include? @table_name
56
+ end
57
+
58
+ def contains_data?( map )
59
+ if( count( @table_name, map ) == 0 )
60
+ fail( "#{@table_name} does not contain data" )
61
+ end
62
+
63
+ return true
64
+ end
65
+
66
+ def does_not_contain_data?( map )
67
+ if( count( @table_name, map ) != 0 )
68
+ fail( "#{@table_name} does contain data" )
69
+ end
70
+
71
+ return true
72
+ end
73
+
74
+ def contains_columns?( list_of_expected_columns_definitions )
75
+ list_of_expected_columns_definitions.each do |expected_column|
76
+ contains_column?( expected_column.to_hash )
77
+ end
78
+ end
79
+
80
+ def has_index?( index_name )
81
+ $db.indexes( @table_name ).each_hash do |map,value|
82
+ return true if map["INDEX_NAME"].eql?( index_name )
83
+ end
84
+
85
+ fail "#{@table_name} does not have index '#{index_name}'"
86
+ end
87
+
88
+ def has_dropped_index?( column_name )
89
+ $db.indexes( @table_name ).each_hash do |map,value|
90
+ fail "#{@table_name} does contain index '#{column_name}'" if map["INDEX_NAME"].eql?( column_name )
91
+ end
92
+
93
+ return true
94
+ end
95
+
96
+ def has_primary_key_on?( column_name )
97
+ $db.primary_keys( @table_name ).each_hash do |map,value|
98
+ return true if map["COLUMN_NAME"].eql?( column_name )
99
+ end
100
+
101
+ fail "#{@table_name} does not have a primary key on '#{column_name}'"
102
+ end
103
+
104
+ def is_referenced_by_foreign_key?( referring_table, column_name )
105
+ $db.foreign_keys( @table_name ).each_hash do |map,value|
106
+ #p map
107
+ return true if (map["FKCOLUMN_NAME"].eql?( column_name ) && map["FKTABLE_NAME"].eql?( referring_table ) )
108
+ end
109
+
110
+ fail "#{@table_name} does not have a foreign key on '#{column_name}'"
111
+ end
112
+
113
+ def has_row_count?( expected_count )
114
+ actual_count = count( @table_name )
115
+ if( expected_count != count( @table_name ) )
116
+ fail( "Number of colums are not equal,\nExpected: #{expected_count}\nActual: #{actual_count}")
117
+ end
118
+
119
+ return self
120
+ end
121
+
122
+ private
123
+
124
+ def contains_column?( expected_column_details )
125
+ actual_column = column( expected_column_details[:name] )
126
+
127
+ type_match?(expected_column_details, actual_column )
128
+ nullability_match?(expected_column_details, actual_column )
129
+ column_size_match?(expected_column_details, actual_column )
130
+
131
+ return !actual_column.exists?
132
+ end
133
+
134
+ def type_match?( expected_column, actual_column)
135
+ return do_they_match?( expected_column[:type], actual_column.type, "Type", expected_column[:name])
136
+ end
137
+
138
+ def nullability_match?( expected_column, actual_column)
139
+ return do_they_match?( expected_column[:nullable], actual_column.nullable?, "Nullability", expected_column[:name])
140
+ end
141
+
142
+ def column_size_match?(expected_column, actual_column)
143
+ return do_they_match?( expected_column[:column_size], actual_column.column_size, "Column size", expected_column[:name])
144
+ end
145
+
146
+ def column( column_name )
147
+ $db.columns( @table_name ).each_hash do |map,value|
148
+ return Column.new( map ) if map["COLUMN_NAME"].eql?( column_name )
149
+ end
150
+ end
151
+
152
+ def do_they_match?( expected, actual, error_type, column_name )
153
+ if( !expected.nil? )
154
+ if( !expected.eql?( actual ) )
155
+ fail( "#{error_type} mismatch for column #{column_name}, \nExpected: #{expected}\nActual: #{actual}")
156
+ end
157
+ end
158
+
159
+ return true
160
+ end
161
+ end
162
+
163
+ class Column
164
+ def initialize( column_map )
165
+ @map = column_map
166
+ end
167
+
168
+ def type
169
+ return @map["TYPE_NAME"]
170
+ end
171
+
172
+ def nullable?
173
+ return @map["IS_NULLABLE"].eql?( "YES" )
174
+ end
175
+
176
+ def column_size
177
+ return @map["COLUMN_SIZE"]
178
+ end
179
+
180
+ def exists?
181
+ return !@map.nil?
182
+ end
183
+ end
184
+
185
+ class ColumnDefinition
186
+ attr_accessor :name, :type
187
+
188
+ def initialize( name, type )
189
+ @name, @type = name, type
190
+ end
191
+
192
+ def to_hash
193
+ result = {}
194
+
195
+ result[:name] = @name unless @name.nil?
196
+ result[:type] = @type unless @type.nil?
197
+ result[:nullable] = @nullable unless @nullable.nil?
198
+ result[:column_size] = @size unless @size.nil?
199
+
200
+ return result
201
+ end
202
+
203
+ def with_size( size )
204
+ @size = size
205
+ return self
206
+ end
207
+
208
+ def is_nullable
209
+ @nullable = true
210
+ return self
211
+ end
212
+
213
+ def is_not_nullable
214
+ @nullable = false
215
+ return self
216
+ end
217
+
218
+ def with_identity
219
+ @type += " identity";
220
+ return self
221
+ end
222
+ end
223
+ end
@@ -0,0 +1,31 @@
1
+ class Fixnum
2
+ def secs
3
+ self
4
+ end
5
+
6
+ alias_method :seconds, :secs
7
+ alias_method :sec, :secs
8
+
9
+ def mins
10
+ self * 60
11
+ end
12
+
13
+ alias_method :minutes, :mins
14
+ alias_method :min, :mins
15
+
16
+ def hours
17
+ self * 60 * 60
18
+ end
19
+
20
+ alias_method :hour, :hours
21
+
22
+ def days
23
+ hours * 24
24
+ end
25
+
26
+ alias_method :day, :days
27
+
28
+ def ago
29
+ Time.new - self
30
+ end
31
+ end
@@ -0,0 +1,20 @@
1
+
2
+ # Get proc info result set
3
+ odbc_statement = $db.procedure_columns '<proc_name>'
4
+ results_set = ResultSet.new( odbc_statement )
5
+
6
+ # Three columns are of interest
7
+ # COLUMN_NAME - gives the param names for the sp
8
+ # COLUMN_TYPE - 1 means the param specified in COLUMN_NAME is an input param
9
+ - 2 means the param specified in COLUMN_NAME is an output param
10
+ # TYPE_NAME - is the type associated with the param. ie: int, varchar
11
+
12
+
13
+ | ORDINAL_POSITION | SQL_DATA_TYPE | REMARKS | NULLABLE | NUM_PREC_RADIX | PROCEDURE_NAME | CHAR_OCTET_LENGTH | PROCEDURE_SCHEM | COLUMN_SIZE | COLUMN_TYPE | IS_NULLABLE | DATA_TYPE | BUFFER_LENGTH | TYPE_NAME | SQL_DATETIME_SUB | DECIMAL_DIGITS | COLUMN_NAME | COLUMN_DEF | PROCEDURE_CAT |
14
+ ------------------ --------------- --------- ---------- ---------------- ------------------------------- ------------------- ----------------- ------------- ------------- ------------- ----------- --------------- ----------- ------------------ ---------------- -------------------- ------------ ---------------
15
+ | 0 | 4 | | 1 | 10 | test_sproc_with_output_params | | dbo | 10 | 5 | YES | 4 | 4 | int | | 0 | RETURN_VALUE | | EMT |
16
+ | 1 | 4 | | 1 | 10 | test_sproc_with_output_params | | dbo | 10 | 1 | YES | 4 | 4 | int | | 0 | @input_param_one | | EMT |
17
+ | 2 | 4 | | 1 | 10 | test_sproc_with_output_params | | dbo | 10 | 4 | YES | 4 | 4 | int | | 0 | @output_number | | EMT |
18
+ | 3 | 12 | | 1 | | test_sproc_with_output_params | 10 | dbo | 10 | 1 | YES | 12 | 10 | varchar | | | @input_param_two | | EMT |
19
+ | 4 | 12 | | 1 | | test_sproc_with_output_params | 10 | dbo | 10 | 4 | YES | 12 | 10 | varchar | | | @output_text | | EMT |
20
+ | 5 | -7 | | 1 | 10 | test_sproc_with_output_params | | dbo | 1 | 1 | YES | -7 | 1 | bit | | 0 | @input_param_three | | EMT |
@@ -0,0 +1,31 @@
1
+ $:.unshift File.dirname(__FILE__)
2
+
3
+
4
+ require 'test/unit'
5
+ require 'marjoree'
6
+ require 'marjoree/fixtures'
7
+ require 'marjoree/odbc_connection_wrapper'
8
+ require 'test/unit'
9
+ #require 'util/majoree_util'
10
+
11
+ include Marjoree
12
+
13
+ def run_marjoree_tests_and_exit
14
+ Test::Unit.run=true
15
+ puts Test::Unit.run?
16
+
17
+ #OdbcConnectionWrapper.odbc_config_path = '../../../DatabaseTests/credit_manager/odbc_config/connections.yml'
18
+ OdbcConnectionWrapper.odbc_config_path = 'odbc_config/connections.yml'
19
+
20
+ odbc_connection = OdbcConnectionWrapper.new()
21
+ establish_connection_to( odbc_connection )
22
+ connect_me_to( 'EMT_TEST' )
23
+
24
+ # connect('EMT_TEST', 'sa', '' )
25
+ Kernel.at_exit { disconnect_me }
26
+
27
+ yield
28
+
29
+ passed = Test::Unit::AutoRunner.run
30
+ exit passed ? 0 : -1
31
+ end
Binary file
data/rakefile.rb CHANGED
@@ -9,10 +9,10 @@ task :default => ['test', "rdoc"]
9
9
 
10
10
  spec = Gem::Specification.new do |s|
11
11
  s.name = 'marjoree'
12
- s.version = "0.0.1"
12
+ s.version = "0.0.9"
13
13
  s.platform = Gem::Platform::RUBY
14
14
  s.summary = "Marjoree is the Stored Procedure Testing Library"
15
- s.homepage = "http://www.jiggypete.com"
15
+ s.homepage = "http://marjoree.rubyforge.org"
16
16
  s.files = Dir["./**/*"]
17
17
  s.has_rdoc=true
18
18
  s.author = "Peter Aitken, Ian Davies, Gus MacCuish"
@@ -33,6 +33,6 @@ end
33
33
 
34
34
  Rake::TestTask.new do |t|
35
35
  t.libs << "lib"
36
- t.test_files = FileList['tests/all_tests.rb']
36
+ t.test_files = FileList['tests/all_cruby_tests.rb']
37
37
  t.verbose = true
38
38
  end
@@ -0,0 +1,24 @@
1
+ $:.unshift File.join(File.dirname(__FILE__), "..", "lib")
2
+
3
+ require 'marjoree'
4
+ require 'expected_result_set'
5
+ require 'marjoree/odbc_connection_wrapper'
6
+
7
+ include Marjoree
8
+
9
+ #Path from all_cruby_tests.rb
10
+ OdbcConnectionWrapper.odbc_config_path = './tests/multiple_odbc_config/connections.yml'
11
+
12
+ odbc_connection = OdbcConnectionWrapper.new()
13
+ establish_connection_to( odbc_connection )
14
+
15
+ Kernel.at_exit {
16
+ disconnect_me
17
+ }
18
+
19
+ Dir['**/test_*.rb'].each do |test_case|
20
+ require test_case
21
+ # puts "require \"#{test_case}\""
22
+ end
23
+
24
+ #require "tests/marjoree/test_assert_results.rb"
@@ -0,0 +1,22 @@
1
+ #$:.unshift File.join(File.dirname(__FILE__), "..", "lib")
2
+ #
3
+ #require 'marjoree'
4
+ #require 'expected_result_set'
5
+ #require 'marjoree/jdbc_connection_wrapper'
6
+ #
7
+ #include Marjoree
8
+ #
9
+ #
10
+ #connection = JDBCConnectionWrapper.new( 'LGLAIB9B98T2J', 'EMT', 'sa', '' )
11
+ #connect_to(connection)
12
+ #
13
+ #Kernel.at_exit {
14
+ # disconnect
15
+ #}
16
+ #
17
+ #Dir['**/test_*.rb'].each do |test_case|
18
+ # require test_case
19
+ #end
20
+
21
+
22
+ puts "Running in JRUBY"
data/tests/all_tests.rb CHANGED
@@ -2,14 +2,17 @@ $:.unshift File.join(File.dirname(__FILE__), "..", "lib")
2
2
 
3
3
  require 'marjoree'
4
4
  require 'expected_result_set'
5
- require 'rake'
5
+ require 'marjoree/odbc_connection_wrapper'
6
6
 
7
7
  include Marjoree
8
- connect('ODBC_DATASOURCE_NAME', 'USERNAME', 'PASSWORD' )
9
- Kernel.at_exit { disconnect }
10
8
 
11
- FileList['**/test_*.rb'].to_a.each do |test_case|
12
- require test_case
13
- end
9
+ connection = OdbcConnectionWrapper.new( 'EMT_LOCAL', 'sa', '' )
10
+ connect_to(connection)
14
11
 
12
+ Kernel.at_exit {
13
+ disconnect
14
+ }
15
15
 
16
+ Dir['**/test_*.rb'].each do |test_case|
17
+ require test_case
18
+ end
@@ -0,0 +1,3 @@
1
+ one:
2
+ id: 1
3
+ name: Marvin
@@ -0,0 +1,5 @@
1
+ one:
2
+ id_b: 1
3
+
4
+ two:
5
+ id_b: <%= 1 + 1 %>
@@ -0,0 +1,8 @@
1
+ first_record:
2
+ id: 1
3
+ name: "first name"
4
+
5
+ second_record:
6
+ id: 2
7
+ name: "second name"
8
+
@@ -0,0 +1,9 @@
1
+ first_record:
2
+ id: 10
3
+
4
+ second_record:
5
+ id: 20
6
+
7
+ third_record:
8
+ id: 30
9
+
@@ -0,0 +1,82 @@
1
+ $:.unshift File.dirname(__FILE__) + "/../../lib"
2
+
3
+ require 'test/unit'
4
+ require 'expected_result_set'
5
+ require 'marjoree/result_set'
6
+ require 'marjoree'
7
+
8
+ class TestAssertResults < Test::Unit::TestCase
9
+ include Marjoree
10
+ class StubStatement
11
+ def initialize( result_set_rows = [])
12
+ @result_set_rows = result_set_rows
13
+ end
14
+
15
+ def each_hash
16
+ @result_set_rows.each { |row| yield row }
17
+ end
18
+
19
+ def columns
20
+ return {"first"=>"val", "second"=>"val", "third"=>"val" }
21
+ end
22
+ end
23
+
24
+ def setup
25
+ @expected = ExpectedResultSet.new
26
+ end
27
+
28
+ def test_assert_equals_fails_when_expected_columns_not_found
29
+ @expected.columns = [:first, :beta]
30
+ other = ResultSet.new StubStatement.new
31
+ assert_raises(Test::Unit::AssertionFailedError) {assert_results @expected, other}
32
+ end
33
+
34
+ def test_assert_unxexpected_columns_in_actual_ignored
35
+ @expected.columns = [:first]
36
+ other = ResultSet.new StubStatement.new
37
+ assert_results @expected, other
38
+ end
39
+
40
+ def test_assert_equals_passes_with_empty_rows_and_identical_columns
41
+ @expected.columns = [:first, :second]
42
+ other = ResultSet.new StubStatement.new
43
+ assert_results @expected, other
44
+ end
45
+
46
+ def test_assert_equals_fails_when_expected_row_count_excedes_actual
47
+ @expected.columns = [:first, :second]
48
+ @expected.rows << [1, 10]
49
+ other = ResultSet.new StubStatement.new([{"first"=>1, "second"=>2}])
50
+
51
+ assert_raises(Test::Unit::AssertionFailedError) {assert_results @expected, other}
52
+ end
53
+
54
+
55
+ def test_assert_equals_passes_when_actual_row_count_excedes_expected
56
+ @expected.columns = [:first, :second]
57
+ other = ResultSet.new StubStatement.new([{"first"=>1, "second"=>2}, {}])
58
+
59
+ assert_results @expected, other
60
+ end
61
+
62
+ def test_assert_equals_passes_when_row_value_are_equal
63
+ @expected.columns = [:first, :second]
64
+ @expected.rows << [1, 2]
65
+ other = ResultSet.new StubStatement.new([{"first"=>1, "second"=>2}])
66
+
67
+ assert_results @expected, other
68
+ end
69
+
70
+ def test_assert_equals_fails_when_row_count_differs
71
+ @expected.columns = [:first, :second]
72
+ @expected.rows << [1, 2]
73
+ @expected.rows << []
74
+ other = ResultSet.new StubStatement.new([{"first"=>1, "second"=>2}])
75
+
76
+
77
+ assert_raises(Test::Unit::AssertionFailedError) {assert_results @expected, other}
78
+ end
79
+
80
+
81
+
82
+ end