ydbi 0.5.6 → 0.5.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (92) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +35 -0
  3. data/.gitignore +8 -0
  4. data/.travis.yml +15 -0
  5. data/ChangeLog +321 -314
  6. data/Gemfile +5 -0
  7. data/Rakefile +10 -0
  8. data/TODO +44 -0
  9. data/bench/bench.rb +79 -0
  10. data/build/rake_task_lib.rb +186 -0
  11. data/doc/DBD_SPEC.rdoc +88 -0
  12. data/doc/DBI_SPEC.rdoc +157 -0
  13. data/doc/homepage/contact.html +62 -0
  14. data/doc/homepage/development.html +124 -0
  15. data/doc/homepage/index.html +83 -0
  16. data/doc/homepage/ruby-dbi.css +91 -0
  17. data/lib/dbd/Mysql.rb +137 -0
  18. data/lib/dbd/ODBC.rb +89 -0
  19. data/lib/dbd/Pg.rb +188 -0
  20. data/lib/dbd/SQLite.rb +97 -0
  21. data/lib/dbd/SQLite3.rb +124 -0
  22. data/lib/dbd/mysql/database.rb +405 -0
  23. data/lib/dbd/mysql/driver.rb +125 -0
  24. data/lib/dbd/mysql/statement.rb +188 -0
  25. data/lib/dbd/odbc/database.rb +128 -0
  26. data/lib/dbd/odbc/driver.rb +38 -0
  27. data/lib/dbd/odbc/statement.rb +137 -0
  28. data/lib/dbd/pg/database.rb +504 -0
  29. data/lib/dbd/pg/exec.rb +47 -0
  30. data/lib/dbd/pg/statement.rb +160 -0
  31. data/lib/dbd/pg/tuples.rb +121 -0
  32. data/lib/dbd/pg/type.rb +209 -0
  33. data/lib/dbd/sqlite/database.rb +151 -0
  34. data/lib/dbd/sqlite/statement.rb +125 -0
  35. data/lib/dbd/sqlite3/database.rb +201 -0
  36. data/lib/dbd/sqlite3/statement.rb +78 -0
  37. data/lib/dbi.rb +13 -17
  38. data/lib/dbi/utils/date.rb +7 -3
  39. data/lib/dbi/version.rb +1 -1
  40. data/prototypes/types2.rb +237 -0
  41. data/setup.rb +1585 -0
  42. data/test/DBD_TESTS +50 -0
  43. data/test/TESTING +16 -0
  44. data/test/dbd/general/test_database.rb +206 -0
  45. data/test/dbd/general/test_statement.rb +326 -0
  46. data/test/dbd/general/test_types.rb +296 -0
  47. data/test/dbd/mysql/base.rb +26 -0
  48. data/test/dbd/mysql/down.sql +19 -0
  49. data/test/dbd/mysql/test_blob.rb +18 -0
  50. data/test/dbd/mysql/test_new_methods.rb +7 -0
  51. data/test/dbd/mysql/test_patches.rb +111 -0
  52. data/test/dbd/mysql/up.sql +28 -0
  53. data/test/dbd/odbc/base.rb +30 -0
  54. data/test/dbd/odbc/down.sql +19 -0
  55. data/test/dbd/odbc/test_new_methods.rb +12 -0
  56. data/test/dbd/odbc/test_ping.rb +10 -0
  57. data/test/dbd/odbc/test_statement.rb +44 -0
  58. data/test/dbd/odbc/test_transactions.rb +58 -0
  59. data/test/dbd/odbc/up.sql +33 -0
  60. data/test/dbd/postgresql/base.rb +31 -0
  61. data/test/dbd/postgresql/down.sql +31 -0
  62. data/test/dbd/postgresql/test_arrays.rb +179 -0
  63. data/test/dbd/postgresql/test_async.rb +121 -0
  64. data/test/dbd/postgresql/test_blob.rb +36 -0
  65. data/test/dbd/postgresql/test_bytea.rb +87 -0
  66. data/test/dbd/postgresql/test_ping.rb +10 -0
  67. data/test/dbd/postgresql/test_timestamp.rb +77 -0
  68. data/test/dbd/postgresql/test_transactions.rb +58 -0
  69. data/test/dbd/postgresql/testdbipg.rb +307 -0
  70. data/test/dbd/postgresql/up.sql +60 -0
  71. data/test/dbd/sqlite/base.rb +32 -0
  72. data/test/dbd/sqlite/test_database.rb +30 -0
  73. data/test/dbd/sqlite/test_driver.rb +68 -0
  74. data/test/dbd/sqlite/test_statement.rb +112 -0
  75. data/test/dbd/sqlite/up.sql +25 -0
  76. data/test/dbd/sqlite3/base.rb +32 -0
  77. data/test/dbd/sqlite3/test_database.rb +77 -0
  78. data/test/dbd/sqlite3/test_driver.rb +67 -0
  79. data/test/dbd/sqlite3/test_statement.rb +88 -0
  80. data/test/dbd/sqlite3/up.sql +33 -0
  81. data/test/dbi/tc_columninfo.rb +4 -9
  82. data/test/dbi/tc_date.rb +2 -9
  83. data/test/dbi/tc_dbi.rb +3 -9
  84. data/test/dbi/tc_row.rb +17 -23
  85. data/test/dbi/tc_sqlbind.rb +6 -7
  86. data/test/dbi/tc_statementhandle.rb +3 -4
  87. data/test/dbi/tc_time.rb +2 -8
  88. data/test/dbi/tc_timestamp.rb +2 -16
  89. data/test/dbi/tc_types.rb +5 -11
  90. data/test/ts_dbd.rb +131 -0
  91. data/ydbi.gemspec +23 -0
  92. metadata +128 -10
@@ -0,0 +1,88 @@
1
+ class TestStatement < DBDConfig.testbase(:sqlite3)
2
+ def test_constructor
3
+ sth = DBI::DBD::SQLite3::Statement.new("select * from names", @dbh.instance_variable_get("@handle").instance_variable_get("@db"))
4
+
5
+ assert_kind_of DBI::DBD::SQLite3::Statement, sth
6
+ assert sth.instance_variable_get("@db")
7
+ assert_kind_of ::SQLite3::Database, sth.instance_variable_get("@db")
8
+ assert_equal(@dbh.instance_variable_get("@handle").instance_variable_get("@db"), sth.instance_variable_get("@db"))
9
+ assert_kind_of ::SQLite3::Statement, sth.instance_variable_get("@stmt")
10
+ assert_nil(@sth.instance_variable_get("@result"))
11
+
12
+ sth.finish
13
+
14
+ sth = @dbh.prepare("select * from names")
15
+
16
+ assert_kind_of DBI::StatementHandle, sth
17
+ sth.finish
18
+ end
19
+
20
+ def test_bind_param
21
+ sth = DBI::DBD::SQLite3::Statement.new("select * from names", @dbh.instance_variable_get("@handle").instance_variable_get("@db"))
22
+
23
+ assert_raises(DBI::InterfaceError) do
24
+ sth.bind_param(:foo, "monkeys")
25
+ end
26
+
27
+ sth.finish
28
+ end
29
+
30
+ def test_column_info
31
+ @sth = nil
32
+
33
+ assert_nothing_raised do
34
+ @sth = @dbh.prepare("select * from names")
35
+ @sth.execute
36
+ end
37
+
38
+ assert_kind_of Array, @sth.column_info
39
+ assert_kind_of DBI::ColumnInfo, @sth.column_info[0]
40
+ assert_kind_of DBI::ColumnInfo, @sth.column_info[1]
41
+ assert_equal [
42
+ {
43
+ :name => "name",
44
+ :sql_type => 12,
45
+ :precision => 255,
46
+ :type_name => "varchar"
47
+ },
48
+ {
49
+ :name => "age",
50
+ :sql_type => 4,
51
+ :type_name => "integer"
52
+ }
53
+ ], @sth.column_info
54
+
55
+ @sth.finish
56
+ end
57
+
58
+ def test_specific_types
59
+ assert_nothing_raised do
60
+ @sth = @dbh.prepare("insert into db_specific_types_test (dbl) values (?)")
61
+ @sth.execute(11111111.111111)
62
+ @sth.execute(22)
63
+ @sth.finish
64
+ end
65
+
66
+ assert_nothing_raised do
67
+ @sth = @dbh.prepare("select * from db_specific_types_test")
68
+ @sth.execute
69
+ assert_equal([11111111.111111], @sth.fetch)
70
+ assert_equal([22], @sth.fetch)
71
+ @sth.finish
72
+
73
+ assert_equal([[11111111.111111], [22]], @dbh.select_all("select * from db_specific_types_test"))
74
+ end
75
+
76
+ assert_nothing_raised do
77
+ @sth = @dbh.prepare("insert into names (name, age) values (?, ?)")
78
+ @sth.execute(:joseph, 20)
79
+ @sth.finish
80
+
81
+ @sth = @dbh.prepare("select name, age from names where name=?")
82
+ @sth.execute("joseph")
83
+ rows = @sth.fetch_all
84
+ @sth.finish
85
+ assert_equal(rows, [["joseph", 20]])
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,33 @@
1
+ create table names (name varchar(255), age integer);
2
+ ---
3
+ insert into names (name, age) values ("Bob", 21);
4
+ ---
5
+ insert into names (name, age) values ("Joe", 19);
6
+ ---
7
+ insert into names (name, age) values ("Jim", 30);
8
+ ---
9
+ create table precision_test (text_field varchar(20) primary key not null, integer_field integer, decimal_field decimal(2,1), numeric_field numeric(30,6));
10
+ ---
11
+ create view view_names as select * from names;
12
+ ---
13
+ create table blob_test (name varchar(255));
14
+ ---
15
+ create table boolean_test (num integer, mybool boolean);
16
+ ---
17
+ create table time_test (mytime time);
18
+ ---
19
+ create table timestamp_test (mytimestamp timestamp);
20
+ ---
21
+ create table bit_test (mybit bit);
22
+ ---
23
+ create table field_types_test (foo integer not null primary key default 1);
24
+ ---
25
+ create table db_specific_types_test (dbl double);
26
+ ---
27
+ create table names_defined_with_spaces ( name varchar( 255 ), age integer );
28
+ ---
29
+ insert into names_defined_with_spaces (name, age) values ("Bob", 21);
30
+ ---
31
+ insert into names_defined_with_spaces (name, age) values ("Joe", 19);
32
+ ---
33
+ insert into names_defined_with_spaces (name, age) values ("Jim", 30);
@@ -3,17 +3,12 @@
3
3
  #
4
4
  # Test case for the DBI::ColumnInfo class.
5
5
  ############################################################
6
- $LOAD_PATH.unshift(Dir.pwd)
7
- $LOAD_PATH.unshift(File.dirname(Dir.pwd))
8
- $LOAD_PATH.unshift("../../lib")
9
- $LOAD_PATH.unshift("../../lib/dbi")
10
- $LOAD_PATH.unshift("lib")
11
-
12
- require "dbi/columninfo"
13
6
  require "test/unit"
7
+ require_relative "../../lib/dbi/columninfo"
14
8
 
15
9
  class TC_DBI_ColumnInfo < Test::Unit::TestCase
16
10
  def setup
11
+ super
17
12
  @colinfo = DBI::ColumnInfo.new(
18
13
  "name" => "test",
19
14
  "sql_type" => "numeric",
@@ -30,7 +25,7 @@ class TC_DBI_ColumnInfo < Test::Unit::TestCase
30
25
  indexed primary unique
31
26
  /
32
27
  end
33
-
28
+
34
29
  def test_constructor
35
30
  assert_nothing_raised{ DBI::ColumnInfo.new }
36
31
 
@@ -81,7 +76,7 @@ class TC_DBI_ColumnInfo < Test::Unit::TestCase
81
76
  assert_respond_to(@colinfo, :keys)
82
77
  assert_equal(@keys.sort, @colinfo.keys.collect { |x| x.to_s }.sort)
83
78
  end
84
-
79
+
85
80
  def test_respond_to_hash_methods
86
81
  assert_respond_to(@colinfo, :each)
87
82
  assert_respond_to(@colinfo, :empty?)
@@ -3,15 +3,8 @@
3
3
  #
4
4
  # Test case for the DBI::Date class (currently) located in the utils.rb file.
5
5
  ##############################################################################
6
- $LOAD_PATH.unshift(Dir.pwd)
7
- $LOAD_PATH.unshift(File.dirname(Dir.pwd))
8
- $LOAD_PATH.unshift("../../lib")
9
- $LOAD_PATH.unshift("../../lib/dbi")
10
- $LOAD_PATH.unshift("lib")
11
-
12
- require 'date'
13
- require 'dbi'
14
- require 'test/unit'
6
+ require "test/unit"
7
+ require_relative "../../lib/dbi"
15
8
 
16
9
  Deprecate.set_action(proc { })
17
10
 
@@ -3,14 +3,8 @@
3
3
  #
4
4
  # Test case for the DBI module (dbi.rb).
5
5
  ######################################################################
6
- $LOAD_PATH.unshift(Dir.pwd)
7
- $LOAD_PATH.unshift(File.dirname(Dir.pwd))
8
- $LOAD_PATH.unshift("../../lib")
9
- $LOAD_PATH.unshift("../../lib/dbi")
10
- $LOAD_PATH.unshift("lib")
11
-
12
- require 'dbi'
13
- require 'test/unit'
6
+ require "test/unit"
7
+ require_relative "../../lib/dbi"
14
8
 
15
9
  class TC_DBI < Test::Unit::TestCase
16
10
  def setup
@@ -22,7 +16,7 @@ class TC_DBI < Test::Unit::TestCase
22
16
  end
23
17
 
24
18
  def test_dbi_version
25
- assert_equal("0.5.5", DBI::VERSION)
19
+ assert_equal("0.5.7", DBI::VERSION)
26
20
  end
27
21
 
28
22
  def test_dbd_module
@@ -1,16 +1,10 @@
1
1
  ######################################################################
2
2
  # tc_row.rb
3
3
  #
4
- # Test case for the DBI::Row class.
4
+ # Test case for the DBI::Row class.
5
5
  ######################################################################
6
- $LOAD_PATH.unshift(Dir.pwd)
7
- $LOAD_PATH.unshift(File.dirname(Dir.pwd))
8
- $LOAD_PATH.unshift("../../lib")
9
- $LOAD_PATH.unshift("../../lib/dbi")
10
- $LOAD_PATH.unshift("lib")
11
-
12
- require 'test/unit'
13
- require 'dbi'
6
+ require "test/unit"
7
+ require_relative "../../lib/dbi"
14
8
 
15
9
  class TC_DBI_Row < Test::Unit::TestCase
16
10
  def setup
@@ -18,7 +12,7 @@ class TC_DBI_Row < Test::Unit::TestCase
18
12
  @cols = %w/first last age/
19
13
  @coltypes = [DBI::Type::Varchar, DBI::Type::Varchar, DBI::Type::Integer]
20
14
  @row = DBI::Row.new(@cols, @coltypes, @data.clone)
21
- @row_noconv = DBI::Row.new(@cols, @coltypes, @data.clone, false)
15
+ @row_noconv = DBI::Row.new(@cols, @coltypes, @data.clone, false)
22
16
  end
23
17
 
24
18
  def teardown
@@ -46,7 +40,7 @@ class TC_DBI_Row < Test::Unit::TestCase
46
40
  assert_equal(@data, @row_noconv)
47
41
  end
48
42
  end
49
-
43
+
50
44
  # Ensure that constructor only allows Integers or Arrays (or nil)
51
45
  def test_row_constructor
52
46
  assert_nothing_raised{ DBI::Row.new(@cols, @coltypes) }
@@ -67,14 +61,14 @@ class TC_DBI_Row < Test::Unit::TestCase
67
61
  assert_equal(@data[2].to_s, @row.at(2).to_s)
68
62
  assert_equal(@data[99].to_s, @row.at(99).to_s)
69
63
  end
70
-
64
+
71
65
  # Should respond to Array and Enumerable methods
72
66
  def test_row_delegate
73
67
  assert_respond_to(@row, :length)
74
68
  assert_respond_to(@row, :each)
75
69
  assert_respond_to(@row, :grep)
76
70
  end
77
-
71
+
78
72
  def test_row_length
79
73
  assert_equal(3, @row.length)
80
74
  assert_equal(3, DBI::Row.new(@cols, @coltypes).length)
@@ -86,14 +80,14 @@ class TC_DBI_Row < Test::Unit::TestCase
86
80
  assert_equal(@data[2], @row.by_index(2).to_s)
87
81
  assert_nil(@row.by_index(3))
88
82
  end
89
-
83
+
90
84
  def test_row_data_by_field
91
85
  assert_equal @data[0], @row.by_field('first')
92
86
  assert_equal @data[1], @row.by_field('last')
93
87
  assert_equal @data[2], @row.by_field('age').to_s
94
88
  assert_equal nil, @row.by_field('unknown')
95
89
  end
96
-
90
+
97
91
  def test_row_set_values
98
92
  assert_respond_to(@row, :set_values)
99
93
  assert_nothing_raised{ @row.set_values(["John", "Doe", 23]) }
@@ -101,14 +95,14 @@ class TC_DBI_Row < Test::Unit::TestCase
101
95
  assert_equal("Doe", @row.by_index(1))
102
96
  assert_equal(23, @row.by_index(2))
103
97
  end
104
-
98
+
105
99
  def test_row_to_h
106
100
  assert_respond_to(@row, :to_h)
107
101
  assert_nothing_raised{ @row.to_h }
108
102
  assert_kind_of(Hash, @row.to_h)
109
103
  assert_equal({"first"=>"Daniel", "last"=>"Berger", "age"=>36}, @row.to_h)
110
104
  end
111
-
105
+
112
106
  def test_row_column_names
113
107
  assert_respond_to(@row, :column_names)
114
108
  assert_nothing_raised{ @row.column_names }
@@ -123,13 +117,13 @@ class TC_DBI_Row < Test::Unit::TestCase
123
117
  assert_kind_of(Array, @row.column_names)
124
118
  assert_equal(["first", "last", "age"], @row.column_names)
125
119
  end
126
-
120
+
127
121
  def test_indexing_numeric
128
- assert_equal(@data[0], @row[0])
129
- assert_equal(@data[1], @row[1])
130
- assert_equal(@data[2], @row[2].to_s)
122
+ assert_equal(@data[0], @row[0])
123
+ assert_equal(@data[1], @row[1])
124
+ assert_equal(@data[2], @row[2].to_s)
131
125
  end
132
-
126
+
133
127
  def test_indexing_string_or_symbol
134
128
  assert_equal(@data[0], @row['first'])
135
129
  assert_equal(@data[0], @row[:first])
@@ -137,7 +131,7 @@ class TC_DBI_Row < Test::Unit::TestCase
137
131
  assert_equal(@data[2], @row['age'].to_s)
138
132
  assert_equal(nil, @row['unknown'])
139
133
  end
140
-
134
+
141
135
  def test_indexing_regexp
142
136
  assert_equal(["Daniel"], @row[/first/])
143
137
  assert_equal(["Berger"], @row[/last/])
@@ -1,6 +1,5 @@
1
- $: << 'lib'
2
- require 'test/unit'
3
- require "dbi/sql"
1
+ require "test/unit"
2
+ require_relative "../../lib/dbi/sql"
4
3
 
5
4
  # ====================================================================
6
5
  class TestSqlBind < Test::Unit::TestCase
@@ -60,18 +59,18 @@ class TestSqlBind < Test::Unit::TestCase
60
59
  def test_minus_bug
61
60
  sql = "SELECT 1 - 3"
62
61
  res = "SELECT 1 - 3"
63
- assert_equal res, bind(self, sql, [])
62
+ assert_equal res, bind(self, sql, [])
64
63
  end
65
64
 
66
65
  def test_minus2
67
- sql = "SELECT * from test --Dan's query"
68
- assert_equal sql, bind(self, sql, [])
66
+ sql = "SELECT * from test --Dan's query"
67
+ assert_equal sql, bind(self, sql, [])
69
68
  end
70
69
 
71
70
  def test_slash
72
71
  sql = "SELECT 5 / 4"
73
72
  res = "SELECT 5 / 4"
74
- assert_equal res, bind(self, sql, [])
73
+ assert_equal res, bind(self, sql, [])
75
74
  end
76
75
 
77
76
  def test_much
@@ -1,6 +1,5 @@
1
- $: << 'lib'
2
- require 'test/unit'
3
- require 'dbi'
1
+ require "test/unit"
2
+ require_relative "../../lib/dbi"
4
3
 
5
4
  class TC_DBI_StatementHandle < Test::Unit::TestCase
6
5
  def test_fetch
@@ -9,7 +8,7 @@ class TC_DBI_StatementHandle < Test::Unit::TestCase
9
8
  def mock_handle.column_info; {}; end
10
9
  def mock_handle.fetch; nil; end
11
10
  sth = DBI::StatementHandle.new( mock_handle, true, true, false, true)
12
-
11
+
13
12
  10.times do
14
13
  assert_nil sth.fetch
15
14
  end
@@ -3,14 +3,8 @@
3
3
  #
4
4
  # Test case for the DBI::Time class (currently) located in the utils.rb file.
5
5
  ##############################################################################
6
- $LOAD_PATH.unshift(Dir.pwd)
7
- $LOAD_PATH.unshift(File.dirname(Dir.pwd))
8
- $LOAD_PATH.unshift("../../lib")
9
- $LOAD_PATH.unshift("../../lib/dbi")
10
- $LOAD_PATH.unshift("lib")
11
-
12
- require 'dbi'
13
- require 'test/unit'
6
+ require "test/unit"
7
+ require_relative "../../lib/dbi"
14
8
 
15
9
  Deprecate.set_action(proc { })
16
10
 
@@ -4,17 +4,8 @@
4
4
  # Test case for the DBI::Timestamp class (currently) located in the
5
5
  # utils.rb file.
6
6
  ##############################################################################
7
- $LOAD_PATH.unshift(Dir.pwd)
8
- $LOAD_PATH.unshift(File.dirname(Dir.pwd))
9
- $LOAD_PATH.unshift("../../lib")
10
- $LOAD_PATH.unshift("../../lib/dbi")
11
- $LOAD_PATH.unshift("lib")
12
-
13
- require 'date'
14
- require 'dbi'
15
- require 'test/unit'
16
-
17
- Deprecate.set_action(proc { })
7
+ require "test/unit"
8
+ require_relative "../../lib/dbi"
18
9
 
19
10
  class TC_DBI_Date < Test::Unit::TestCase
20
11
  def setup
@@ -134,9 +125,4 @@ class TC_DBI_Date < Test::Unit::TestCase
134
125
  assert_equal(2006, @dbi_ts.year)
135
126
  end
136
127
 
137
- def teardown
138
- @date = nil
139
- @time = nil
140
- @dbi_ts = nil
141
- end
142
128
  end
@@ -1,11 +1,5 @@
1
- $LOAD_PATH.unshift(Dir.pwd)
2
- $LOAD_PATH.unshift(File.dirname(Dir.pwd))
3
- $LOAD_PATH.unshift("../../lib")
4
- $LOAD_PATH.unshift("../../lib/dbi")
5
- $LOAD_PATH.unshift("lib")
6
-
7
- require "dbi"
8
1
  require "test/unit"
2
+ require_relative "../../lib/dbi"
9
3
 
10
4
  class MyType
11
5
  def initialize(obj)
@@ -107,7 +101,7 @@ class TC_DBI_Type < Test::Unit::TestCase
107
101
  # string coercion
108
102
  dt = DateTime.now
109
103
  assert_equal(dt.to_s, klass.parse(dt).to_s)
110
-
104
+
111
105
  t = Time.now
112
106
  assert_equal(DateTime.parse(t.to_s).to_s, klass.parse(t).to_s)
113
107
 
@@ -137,7 +131,7 @@ class TC_DBI_Type < Test::Unit::TestCase
137
131
  )
138
132
 
139
133
  # precision tests, related to ticket #27182
140
-
134
+
141
135
  # iso8601 (bypasses regex)
142
136
  [
143
137
  '2009-09-27T19:41:00-05:00',
@@ -158,7 +152,7 @@ class TC_DBI_Type < Test::Unit::TestCase
158
152
  )
159
153
 
160
154
  # unix convention (uses regex)
161
-
155
+
162
156
  [
163
157
  '2009-09-27 19:41:00 -05:00',
164
158
  '2009-09-27 19:41:00.123 -05:00'
@@ -208,7 +202,7 @@ class TC_DBI_TypeUtil < Test::Unit::TestCase
208
202
  assert_kind_of(String, cast(Time.now))
209
203
  assert_kind_of(String, cast(Date.today))
210
204
  assert_kind_of(String, cast(DateTime.now))
211
-
205
+
212
206
  obj = Time.now
213
207
  assert_equal(datecast(obj), cast(obj))
214
208
  obj = Date.today