dohruby 0.2.1 → 0.3

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 (154) hide show
  1. data/CHANGELOG +8 -0
  2. data/bin/config.rb +61 -0
  3. data/bin/create_database.rb +13 -6
  4. data/bin/gendata.rb +37 -0
  5. data/bin/migrate.rb +66 -0
  6. data/bin/{rcov-preprocess-files.rb → rcov_preprocess_files.rb} +1 -1
  7. data/bin/run_tests.rb +15 -5
  8. data/bin/update_rdoc.rb +28 -0
  9. data/dohapp_home +0 -0
  10. data/lib/doh/app/activate_database.rb +5 -12
  11. data/lib/doh/app/activate_logger.rb +29 -13
  12. data/lib/doh/app/config.rb +18 -0
  13. data/lib/doh/app/home.rb +3 -8
  14. data/lib/doh/app/init_runnable.rb +39 -8
  15. data/lib/doh/app/init_script.rb +19 -0
  16. data/lib/doh/app/init_unit_test.rb +4 -1
  17. data/lib/doh/app_no_stdio.rb +1 -1
  18. data/lib/doh/boot/app.rb +2 -0
  19. data/lib/doh/boot/app_pwd.rb +2 -0
  20. data/lib/doh/boot/find_dohruby.rb +5 -0
  21. data/lib/doh/boot/find_dohruby_18.rb +37 -0
  22. data/lib/doh/boot/find_dohruby_19.rb +58 -0
  23. data/lib/doh/boot/init_runnable.rb +2 -0
  24. data/lib/doh/boot/options.rb +2 -0
  25. data/lib/doh/core/array.rb +10 -0
  26. data/lib/doh/core/bigdecimal.rb +15 -0
  27. data/lib/doh/core/date.rb +73 -0
  28. data/lib/doh/core/deep_dup.rb +12 -0
  29. data/lib/doh/core/hash.rb +21 -0
  30. data/lib/doh/core/object.rb +6 -0
  31. data/lib/doh/core/require_local.rb +5 -0
  32. data/lib/doh/core/socket.rb +25 -0
  33. data/lib/doh/core/string.rb +34 -4
  34. data/lib/doh/core.rb +4 -1
  35. data/lib/doh/data/basic.rb +24 -19
  36. data/lib/doh/data/bulk.rb +28 -88
  37. data/lib/doh/data/catalog.rb +44 -0
  38. data/lib/doh/data/human.rb +50 -42
  39. data/lib/doh/data/make_global.rb +3 -0
  40. data/lib/doh/data/require_datagen.rb +2 -1
  41. data/lib/doh/home.rb +16 -0
  42. data/lib/doh/logger/email_acceptor.rb +6 -3
  43. data/lib/doh/logger/event.rb +19 -6
  44. data/lib/doh/logger/formatter.rb +22 -16
  45. data/lib/doh/logger/interface.rb +13 -0
  46. data/lib/doh/logger/iostream_acceptor.rb +3 -2
  47. data/lib/doh/logger/null_interface.rb +1 -0
  48. data/lib/doh/logger/proxy.rb +53 -0
  49. data/lib/doh/logger/socket_acceptor.rb +53 -0
  50. data/lib/doh/logger/socket_viewer.rb +64 -0
  51. data/lib/doh/logger/standard_interface.rb +46 -17
  52. data/lib/doh/logger/util.rb +18 -0
  53. data/lib/doh/logger.rb +2 -1
  54. data/lib/doh/logger_configure.rb +1 -1
  55. data/lib/doh/merb/db_session.rb +136 -0
  56. data/lib/doh/merb/form_helpers.rb +16 -0
  57. data/lib/doh/merb/login.rb +27 -12
  58. data/lib/doh/merb/merb_dohsession.rb +4 -0
  59. data/lib/doh/merb/notify_on_exception.rb +1 -1
  60. data/lib/doh/merb/session.rb +7 -0
  61. data/lib/doh/merb/source_ip.rb +10 -0
  62. data/lib/doh/merb.rb +0 -1
  63. data/lib/doh/mysql/abstract_row.rb +81 -0
  64. data/lib/doh/mysql/cache_connector.rb +11 -8
  65. data/lib/doh/mysql/connector_instance.rb +32 -5
  66. data/lib/doh/mysql/connector_util.rb +1 -0
  67. data/lib/doh/mysql/convert.rb +18 -0
  68. data/lib/doh/mysql/database_creator.rb +18 -5
  69. data/lib/doh/mysql/db_date.rb +2 -2
  70. data/lib/doh/mysql/default_type_guesser.rb +21 -4
  71. data/lib/doh/mysql/error.rb +3 -2
  72. data/lib/doh/mysql/handle.rb +144 -18
  73. data/lib/doh/mysql/hash_row.rb +13 -0
  74. data/lib/doh/mysql/load_sql.rb +1 -0
  75. data/lib/doh/mysql/metadata_util.rb +60 -19
  76. data/lib/doh/mysql/migrate.rb +122 -0
  77. data/lib/doh/mysql/migrate_check.rb +139 -0
  78. data/lib/doh/mysql/parse.rb +2 -0
  79. data/lib/doh/mysql/readonly_row.rb +11 -48
  80. data/lib/doh/mysql/require_dbtypes.rb +8 -0
  81. data/lib/doh/mysql/smart_row.rb +156 -0
  82. data/lib/doh/mysql/to_sql.rb +12 -0
  83. data/lib/doh/mysql/typed_row_builder.rb +4 -3
  84. data/lib/doh/mysql/types.rb +33 -0
  85. data/lib/doh/mysql/unquoted.rb +8 -0
  86. data/lib/doh/mysql/version.rb +102 -0
  87. data/lib/doh/mysql/virtual.rb +17 -0
  88. data/lib/doh/mysql/writable_row.rb +58 -0
  89. data/lib/doh/mysql.rb +2 -1
  90. data/lib/doh/paypal/paypal.rb +20 -0
  91. data/lib/doh/paypal/pdt.rb +14 -0
  92. data/lib/doh/paypal.rb +1 -0
  93. data/lib/doh/rails/form_helpers.rb +53 -0
  94. data/lib/doh/rails/login.rb +143 -0
  95. data/lib/doh/test/error_acceptor.rb +1 -1
  96. data/lib/doh/test/run_tests.rb +48 -43
  97. data/lib/doh/test/setup_once.rb +15 -0
  98. data/lib/doh/test/test_result.rb +7 -0
  99. data/lib/doh/unit_test.rb +6 -0
  100. data/lib/doh/util/banking_workday.rb +16 -12
  101. data/lib/doh/util/class_basename.rb +10 -0
  102. data/lib/doh/util/current_date.rb +18 -41
  103. data/lib/doh/util/doh_socket.rb +56 -0
  104. data/lib/doh/util/email.rb +18 -0
  105. data/lib/doh/util/file_edit.rb +64 -0
  106. data/lib/doh/util/http_helper.rb +107 -0
  107. data/lib/doh/util/internal_ip.rb +1 -1
  108. data/lib/doh/util/jsval.rb +13 -0
  109. data/lib/doh/util/post_hash.rb +14 -0
  110. data/lib/doh/util/xml_util.rb +48 -0
  111. data/test/core/tc_array.rb +12 -0
  112. data/test/core/tc_date.rb +53 -0
  113. data/test/core/tc_deep_dup.rb +69 -0
  114. data/test/core/tc_hash.rb +28 -0
  115. data/test/core/tc_socket.rb +30 -0
  116. data/test/core/tc_string.rb +15 -22
  117. data/test/local_tests.rb +3 -0
  118. data/test/local_tests_including_slow.rb +4 -0
  119. data/test/logger/tc_acceptor.rb +23 -6
  120. data/test/logger/tc_event.rb +1 -1
  121. data/test/logger/tc_formatter.rb +3 -2
  122. data/test/logger/tc_socket_viewer_acceptor.rb +48 -0
  123. data/test/mysql/001_down.sql +1 -0
  124. data/test/mysql/001_up.sql +4 -0
  125. data/test/mysql/002_down.sql +1 -0
  126. data/test/mysql/002_up.sql +1 -0
  127. data/test/mysql/tc_connector_instance.rb +8 -8
  128. data/test/mysql/tc_convert.rb +45 -0
  129. data/test/mysql/tc_handle.rb +94 -2
  130. data/test/mysql/tc_metadata_util.rb +50 -0
  131. data/test/mysql/tc_migrate.rb +50 -0
  132. data/test/mysql/tc_parse.rb +3 -1
  133. data/test/mysql/tc_readonly_row.rb +14 -10
  134. data/test/mysql/tc_smart_row.rb +22 -0
  135. data/test/mysql/tc_to_sql.rb +20 -0
  136. data/test/mysql/tc_types.rb +32 -0
  137. data/test/mysql/tc_unquoted.rb +1 -0
  138. data/test/mysql/tc_writable_row.rb +22 -0
  139. data/test/ts_core.rb +4 -0
  140. data/test/ts_logger.rb +4 -0
  141. data/test/ts_mysql.rb +6 -0
  142. data/test/ts_util.rb +6 -0
  143. data/test/util/slow_doh_socket.rb +102 -0
  144. data/test/util/tc_banking_workday.rb +18 -0
  145. data/test/util/tc_file_edit.rb +54 -0
  146. data/test/util/tc_jsval.rb +12 -0
  147. data/test/util/tc_to_display.rb +14 -0
  148. data/test/util/tc_xml_util.rb +17 -0
  149. metadata +130 -39
  150. data/README +0 -4
  151. data/lib/doh/merb/post_hash.rb +0 -26
  152. data/lib/doh/mysql/db_null.rb +0 -24
  153. data/lib/doh/mysql/hash_util.rb +0 -56
  154. data/test/mysql/tc_hash_util.rb +0 -23
@@ -0,0 +1,50 @@
1
+ require File.join(File.dirname(__FILE__), 'db_unit_test')
2
+ require 'doh/mysql/migrate'
3
+ require 'doh/mysql/version'
4
+
5
+ module DohDb
6
+
7
+ class TC_migrate < Test::Unit::TestCase
8
+ def cleanup_tables
9
+ DohDb::query("DROP TABLE IF EXISTS version")
10
+ DohDb::query("DROP TABLE IF EXISTS migrate_test_version2")
11
+ end
12
+
13
+ def create_version_table
14
+ DohDb::query("CREATE TABLE IF NOT EXISTS version (version INT UNSIGNED NOT NULL) ENGINE=MyISAM")
15
+ DohDb::query("INSERT INTO version VALUES (0)")
16
+ end
17
+
18
+ def test_stuff
19
+ cleanup_tables
20
+ create_version_table
21
+ dbmg = DatabaseMigrator.new(DohDb::connector_instance.database, nil, File.dirname(__FILE__))
22
+
23
+ dbmg.update
24
+ table_info = DohDb::select("DESC migrate_test_version2")
25
+ assert_equal(2, table_info.size)
26
+ assert_equal(2, DohDb::current_database_version)
27
+
28
+ dbmg.make_version(1)
29
+ table_info = DohDb::select("DESC migrate_test_version2")
30
+ assert_equal(1, table_info.size)
31
+ assert_equal(1, DohDb::current_database_version)
32
+
33
+ dbmg.make_version(0)
34
+ assert_raise(Mysql::Error) {DohDb::query("DESC migrate_test_version2")}
35
+ assert(DohTest::pop_error.exception.to_s =~ /doesn't exist/)
36
+ assert_equal(0, DohDb::current_database_version)
37
+
38
+ dbmg.make_version(1)
39
+ table_info = DohDb::select("DESC migrate_test_version2")
40
+ assert_equal(1, table_info.size)
41
+ assert_equal(1, DohDb::current_database_version)
42
+ end
43
+
44
+ def teardown
45
+ cleanup_tables
46
+ super
47
+ end
48
+ end
49
+
50
+ end
@@ -3,7 +3,7 @@ require 'doh/mysql/parse'
3
3
 
4
4
  module DohDb
5
5
 
6
- class TC_Convert < Test::Unit::TestCase
6
+ class TC_Parse < Test::Unit::TestCase
7
7
  def test_bool
8
8
  assert_equal(false, DohDb::parse_bool('0'))
9
9
  assert_equal(true, DohDb::parse_bool('1'))
@@ -15,6 +15,7 @@ class TC_Convert < Test::Unit::TestCase
15
15
  assert_equal(Date.new(2008,2,14), DohDb::parse_date('2008-02-14'))
16
16
  assert_raise(ArgumentError) {DohDb::parse_date('20080214')}
17
17
  assert_not_equal(Date.new(2008,2,14), DohDb::parse_date('2008-02-15'))
18
+ assert_equal(nil, DohDb::parse_date('0000-00-00'))
18
19
  end
19
20
 
20
21
  def test_datetime
@@ -22,6 +23,7 @@ class TC_Convert < Test::Unit::TestCase
22
23
  assert_raise(ArgumentError) {DohDb::parse_datetime('zzzzzzzzzzzzzzzzzzz')}
23
24
  assert_equal(DateTime.new(2008,2,14,10,20,30), DohDb::parse_datetime('2008-02-14 10:20:30'))
24
25
  assert_not_equal(DateTime.new(2008,2,14,10,20,30), DohDb::parse_datetime('2008-02-14 10:20:31'))
26
+ assert_equal(nil, DohDb::parse_datetime('0000-00-00 00:00:00'))
25
27
  end
26
28
 
27
29
  def test_decimal
@@ -5,11 +5,11 @@ module DohDb
5
5
 
6
6
  class TC_ReadOnlyRow < Test::Unit::TestCase
7
7
  def setup
8
- @row = ReadOnlyRow.new(['id', 'fname', 'lname', 'other'], [3, 'george', 'bob', nil])
8
+ @row = ReadOnlyRow.new(['id', 'fname', 'lname', 'other', 'flag', 'emptystr'], [3, 'george', 'bob', nil, true, ''])
9
9
  end
10
10
 
11
11
  def test_keys
12
- assert_equal(['id', 'fname', 'lname', 'other'], @row.keys)
12
+ assert_equal(['id', 'fname', 'lname', 'other', 'flag', 'emptystr'], @row.keys)
13
13
  end
14
14
 
15
15
  def test_at_bad
@@ -50,32 +50,36 @@ class TC_ReadOnlyRow < Test::Unit::TestCase
50
50
 
51
51
  def test_to_a
52
52
  ary = @row.to_a
53
- assert_equal(4, ary.size)
53
+ assert_equal(6, ary.size)
54
54
  assert_equal(['id', 3], ary.at(0))
55
55
  assert_equal(['fname','george'], ary.at(1))
56
56
  assert_equal(['lname', 'bob'], ary.at(2))
57
57
  assert_equal(['other', nil], ary.at(3))
58
+ assert_equal(['flag', true], ary.at(4))
59
+ assert_equal(['emptystr', ''], ary.at(5))
58
60
  end
59
61
 
60
62
  def test_to_h
61
63
  hsh = @row.to_h
62
- assert_equal(4, hsh.size)
64
+ assert_equal(6, hsh.size)
63
65
  assert_equal(3, hsh['id'])
64
66
  assert_equal('george', hsh['fname'])
65
67
  assert_equal('bob', hsh['lname'])
66
68
  assert_equal(nil, hsh['other'])
67
69
  end
68
70
 
69
- def test_inspect
70
- assert_equal(@row.inspect, @row.to_h.inspect)
71
- end
72
-
73
71
  def test_method_missing
74
- assert_equal(3, @row.id)
75
72
  assert_equal('george', @row.fname)
76
73
  assert_equal('bob', @row.lname)
77
74
  assert_equal(nil, @row.other)
78
- assert_raise(RuntimeError) {@row.this_name_doesnt_exist}
75
+ assert_raise(RuntimeError) {@row.this_field_doesnt_exist}
76
+ end
77
+
78
+ def test_empty_field
79
+ assert(!@row.empty_field?('id'))
80
+ assert(@row.empty_field?('other'))
81
+ assert(@row.empty_field?('emptystr'))
82
+ assert(@row.empty_field?('unknown_field_name'))
79
83
  end
80
84
  end
81
85
 
@@ -0,0 +1,22 @@
1
+ require 'doh/unit_test'
2
+ require 'doh/mysql/smart_row'
3
+
4
+ module DohDb
5
+
6
+ class TC_SmartRow < Test::Unit::TestCase
7
+ def test_display
8
+ row = SmartRow.new(['flag'], [true])
9
+ assert_equal('', row.display('this_field_doesnt_exist'))
10
+ assert_raise(RuntimeError) { row.display.this_field_doesnt_exist }
11
+ assert_equal('yes', row.display('flag'))
12
+ assert_equal('yes', row.display.flag)
13
+ row2 = row.dup
14
+ assert_equal(true, row2.flag)
15
+ row2.flag = false
16
+ assert_equal(false, row2.flag)
17
+ assert_equal(true, row.flag)
18
+ assert_raise(RuntimeError) { row.this_field_doesnt_exist }
19
+ end
20
+ end
21
+
22
+ end
@@ -0,0 +1,20 @@
1
+ require 'test/unit'
2
+ require 'doh/mysql/to_sql'
3
+
4
+ module DohDb
5
+
6
+ class TC_to_sql < Test::Unit::TestCase
7
+ def test_stuff
8
+ assert_equal('"blah"', 'blah'.to_sql)
9
+ assert_equal('NULL', nil.to_sql)
10
+ assert_equal('3', 3.to_sql)
11
+ assert_equal('"2008-09-24 09:30:04"', DateTime.new(2008,9,24,9,30,4).to_sql)
12
+ assert_equal('1', true.to_sql)
13
+ assert_equal('0', false.to_sql)
14
+ assert_equal('10.0', BigDecimal.new('10').to_sql)
15
+ assert_equal('("a","b","c")', ['a', 'b', 'c'].to_sql)
16
+ end
17
+ end
18
+
19
+ end
20
+
@@ -0,0 +1,32 @@
1
+ require File.join(File.dirname(__FILE__), 'db_unit_test')
2
+ require 'doh/mysql/types'
3
+
4
+ module DohDb
5
+
6
+ class ConvertToString
7
+ def self.build(field, value)
8
+ value.to_s
9
+ end
10
+ end
11
+
12
+ class TC_Types < Test::Unit::TestCase
13
+ def test_stuff
14
+ dbh = DohDb::request_handle
15
+ tbl = "doh_mysql_types_stuff_test"
16
+ tbl2 = "island.doh_mysql_types_stuff_another_test"
17
+ DohDb::query("CREATE TEMPORARY TABLE #{tbl} (amount INT)")
18
+ DohDb::query("INSERT INTO #{tbl} SET amount = NULL")
19
+ assert_equal(nil, DohDb::select_field("SELECT amount FROM #{tbl}"))
20
+ DohDb::query("UPDATE #{tbl} SET amount = 5")
21
+ assert_equal(5, DohDb::select_field("SELECT amount FROM #{tbl}"))
22
+
23
+ DohDb::query("CREATE TEMPORARY TABLE #{tbl2} (other INT)")
24
+ DohDb::query("INSERT INTO #{tbl2} SET other = 7")
25
+ assert_equal(5, DohDb::select_field("SELECT amount, other FROM #{tbl}, #{tbl2}"))
26
+
27
+ DohDb::register_column_type(DohDb::connector_instance.database, tbl, 'amount', ConvertToString)
28
+ assert_equal('5', DohDb::select_field("SELECT amount FROM #{tbl}"))
29
+ end
30
+ end
31
+
32
+ end
@@ -9,6 +9,7 @@ class TC_Unquoted < Test::Unit::TestCase
9
9
  assert_equal('blah', Unquoted.new('blah'))
10
10
  assert_equal('blah', Unquoted.new('blah').to_s)
11
11
  assert_equal('blah', Unquoted.new('blah').to_sql)
12
+ assert_equal('SELECT * FROM blah WHERE smoe = NULL', "SELECT * FROM blah WHERE smoe = #{DohDb::NULL.to_sql}")
12
13
  end
13
14
  end
14
15
 
@@ -0,0 +1,22 @@
1
+ require 'doh/unit_test'
2
+ require 'doh/mysql/writable_row'
3
+
4
+ module DohDb
5
+
6
+ class TC_WritableRow < Test::Unit::TestCase
7
+ def test_bracket_assign_not_mutate
8
+ keys = []; values = []
9
+ row = WritableRow.new(keys, values)
10
+ keys.push('blah')
11
+ values.push('blee')
12
+ assert(row.keys.empty?)
13
+ assert(row.values.empty?)
14
+ row['frog'] = 'chicken'
15
+ assert_equal(['blah'], keys)
16
+ assert_equal(['blee'], values)
17
+ assert_equal(['frog'], row.keys)
18
+ assert_equal(['chicken'], row.values)
19
+ end
20
+ end
21
+
22
+ end
data/test/ts_core.rb ADDED
@@ -0,0 +1,4 @@
1
+ require './core/tc_bigdecimal'
2
+ require './core/tc_date'
3
+ require './core/tc_string'
4
+ require './core/tc_socket'
data/test/ts_logger.rb ADDED
@@ -0,0 +1,4 @@
1
+ require './logger/tc_acceptor'
2
+ require './logger/tc_event'
3
+ require './logger/tc_formatter'
4
+ require './logger/tc_interface'
data/test/ts_mysql.rb ADDED
@@ -0,0 +1,6 @@
1
+ require './mysql/tc_cache_connector'
2
+ require './mysql/tc_connector_instance'
3
+ require './mysql/tc_handle'
4
+ require './mysql/tc_parse'
5
+ require './mysql/tc_readonly_row'
6
+ require './mysql/tc_unquoted'
data/test/ts_util.rb ADDED
@@ -0,0 +1,6 @@
1
+ require './util/tc_banking_workday'
2
+ require './util/tc_file_edit'
3
+ require './util/tc_jsval'
4
+ require './util/tc_to_display'
5
+ require './util/tc_xml_util'
6
+
@@ -0,0 +1,102 @@
1
+ require 'test/unit'
2
+ require 'doh/util/doh_socket'
3
+ require 'doh/util/time_util'
4
+ module Doh
5
+
6
+ #single client timeout server
7
+ class TimeoutServer
8
+ attr_accessor :shutdown
9
+ attr_reader :listening
10
+ def initialize(port)
11
+ @port = port
12
+ end
13
+
14
+ def run
15
+ @server = TCPServer.new(nil, @port)
16
+ @listening = true
17
+ loop do
18
+ while (!select([@server], nil, nil, 0.1) && !@shutdown) do
19
+ end
20
+ return if !@shutdown
21
+
22
+ session = @server.accept
23
+ request = session.gets
24
+ sleep request.to_i
25
+ session.write("slept: #{request.to_i} seconds -- sleeping another #{request.to_i} before sending the newline")
26
+ sleep request.to_i
27
+ session.write("\n")
28
+ session.close
29
+ end
30
+ end
31
+ end
32
+
33
+ class TC_slow_doh_socket < Test::Unit::TestCase
34
+ def test_stuff
35
+ server = TimeoutServer.new(3233)
36
+ thread = Thread.new do
37
+ server.run
38
+ end
39
+ while !server.listening
40
+ end
41
+
42
+ subtest_timeout_block
43
+ subtest_timed_readln
44
+ subtest_combination
45
+
46
+ server.shutdown = true
47
+ thread.join
48
+ end
49
+
50
+ def subtest_timeout_block
51
+ time_took = Doh::time_block do
52
+ assert_raises(TimeoutError) do
53
+ DohSocket::timeout_block(0.2) do
54
+ sock = DohSocket.new('127.0.0.1', 3233)
55
+ sock.write("1\n")
56
+ sock.timed_readln
57
+ end
58
+ end
59
+ end
60
+ assert((time_took - 0.2).abs < 0.001)
61
+ end
62
+
63
+ def subtest_timed_readln
64
+ time_took = Doh::time_block do
65
+ assert_raises(TimeoutError) do
66
+ sock = DohSocket.new('127.0.0.1', 3233)
67
+ sock.timeout = 0.2
68
+ sock.write("1\n")
69
+ sock.timed_readln
70
+ end
71
+ end
72
+ assert((time_took - 0.2).abs < 0.001)
73
+ end
74
+
75
+
76
+ def subtest_combination
77
+ time_took = Doh::time_block do
78
+ assert_raises(TimeoutError) do
79
+ DohSocket::timeout_block(1) do
80
+ time2_took = Doh::time_block do
81
+ assert_raises(TimeoutError) do
82
+ sock = DohSocket.new('127.0.0.1', 3233)
83
+ sock.timeout = 0.3
84
+ sock.write("4\n")
85
+ sock.timed_readln
86
+ end
87
+ end
88
+ assert((time2_took - 0.3).abs < 0.001)
89
+
90
+ sock = DohSocket.new('127.0.0.1', 3233)
91
+ sock.timeout = 1
92
+ sock.write("4\n")
93
+ sock.timed_readln
94
+ end
95
+ end
96
+ end
97
+ assert((time_took - 1).abs < 0.001)
98
+ end
99
+
100
+ end
101
+
102
+ end
@@ -3,6 +3,18 @@ require 'doh/util/banking_workday'
3
3
  module Doh
4
4
 
5
5
  class TC_banking_workday < Test::Unit::TestCase
6
+ # taken from http://www.federalreserve.gov/releases/k8/default.htm
7
+ @@federal_reserve_holidays =
8
+ [Date.new(2007, 1, 1), Date.new(2007, 1, 15), Date.new(2007, 2, 19), Date.new(2007, 5, 28), Date.new(2007, 7, 4), Date.new(2007, 9, 3), Date.new(2007, 10, 8), Date.new(2007, 11, 12), Date.new(2007, 11, 22), Date.new(2007, 12, 25),
9
+ Date.new(2008, 1, 1), Date.new(2008, 1, 21), Date.new(2008, 2, 18), Date.new(2008, 5, 26), Date.new(2008, 7, 4), Date.new(2008, 9, 1), Date.new(2008, 10, 13), Date.new(2008, 11, 11), Date.new(2008, 11, 27), Date.new(2008, 12, 25),
10
+ Date.new(2009, 1, 1), Date.new(2009, 1, 19), Date.new(2009, 2, 16), Date.new(2009, 5, 25), Date.new(2009, 7, 4), Date.new(2009, 9, 7), Date.new(2009, 10, 12), Date.new(2009, 11, 11), Date.new(2009, 11, 26), Date.new(2009, 12, 25),
11
+ Date.new(2010, 1, 1), Date.new(2010, 1, 18), Date.new(2010, 2, 15), Date.new(2010, 5, 31), Date.new(2010, 7, 5), Date.new(2010, 9, 6), Date.new(2010, 10, 11), Date.new(2010, 11, 11), Date.new(2010, 11, 25), Date.new(2010, 12, 25),
12
+ Date.new(2011, 1, 1), Date.new(2011, 1, 17), Date.new(2011, 2, 21), Date.new(2011, 5, 30), Date.new(2011, 7, 4), Date.new(2011, 9, 5), Date.new(2011, 10, 10), Date.new(2011, 11, 11), Date.new(2011, 11, 24), Date.new(2011, 12, 26),
13
+ Date.new(2012, 1, 2), Date.new(2012, 1, 16), Date.new(2012, 2, 20), Date.new(2012, 5, 28), Date.new(2012, 7, 4), Date.new(2012, 9, 3), Date.new(2012, 10, 8), Date.new(2012, 11, 12), Date.new(2012, 11, 22), Date.new(2012, 12, 25),
14
+ Date.new(2013, 1, 1), Date.new(2013, 1, 21), Date.new(2013, 2, 18), Date.new(2013, 5, 27), Date.new(2013, 7, 4), Date.new(2013, 9, 2), Date.new(2013, 10, 14), Date.new(2013, 11, 11), Date.new(2013, 11, 28), Date.new(2013, 12, 25),
15
+ Date.new(2014, 1, 1), Date.new(2014, 1, 20), Date.new(2014, 2, 17), Date.new(2014, 5, 26), Date.new(2014, 7, 4), Date.new(2014, 9, 1), Date.new(2014, 10, 13), Date.new(2014, 11, 11), Date.new(2014, 11, 27), Date.new(2014, 12, 25)
16
+ ]
17
+
6
18
  def test_forward_banking_workday
7
19
  assert_equal(Date.new(2007, 2, 2).to_s, Date.new(2007, 2, 1).forward_banking_workday.to_s)
8
20
  assert_equal(Date.new(2007, 2, 5).to_s, Date.new(2007, 2, 2).forward_banking_workday.to_s)
@@ -22,6 +34,12 @@ class TC_banking_workday < Test::Unit::TestCase
22
34
  def test_banking_holiday
23
35
  assert(Date.new(2007, 2, 19).banking_holiday?)
24
36
  end
37
+
38
+ def test_all_federal_reserve_scraped
39
+ @@federal_reserve_holidays.each do |day|
40
+ assert(!day.banking_workday?)
41
+ end
42
+ end
25
43
  end
26
44
 
27
45
  end
@@ -0,0 +1,54 @@
1
+ require 'test/unit'
2
+ require 'doh/util/file_edit'
3
+
4
+ module Doh
5
+
6
+ class TC_file_edit < Test::Unit::TestCase
7
+ def setup
8
+ @fname = '/tmp/file_edit_test.out'
9
+ file = File.open(@fname, 'w+')
10
+ @line1 = "line1 test"
11
+ @line2 = "test line2"
12
+ @line3 = "yet another line -- number 3"
13
+ file << @line1 << "\n"
14
+ file << @line2 << "\n"
15
+ file << @line3 << "\n"
16
+ file.close
17
+ end
18
+
19
+ def readfile
20
+ File.open(@fname, 'r').to_a.collect { |line| line[0..-2]}
21
+ end
22
+
23
+ def test_delete
24
+ assert_equal([@line1, @line2, @line3], readfile)
25
+ file = FileEdit.new(@fname)
26
+ file.delete
27
+ file.save
28
+ assert_equal([@line2, @line3], readfile)
29
+ file.move_after(/line2/)
30
+ file.delete
31
+ file.save
32
+ assert_equal([@line2], readfile)
33
+ end
34
+
35
+ def test_delete2
36
+ assert_equal([@line1, @line2, @line3], readfile)
37
+ file = FileEdit.new(@fname)
38
+ file.move_after(/line1/)
39
+ file.delete(2)
40
+ file.save
41
+ assert_equal([@line1], readfile)
42
+ end
43
+
44
+ def test_insert
45
+ file = FileEdit.new(@fname)
46
+ file.move_before(/line2/)
47
+ file.insert(@line3, @line2)
48
+ file.save
49
+ assert_equal([@line1, @line3, @line2, @line2, @line3], readfile)
50
+ end
51
+
52
+ end
53
+
54
+ end
@@ -0,0 +1,12 @@
1
+ require 'test/unit'
2
+ require 'doh/util/jsval'
3
+
4
+ module Doh
5
+
6
+ class TC_util_jsval < Test::Unit::TestCase
7
+ def test_jsval
8
+ assert_equal('new Date(2010,4,10)', Doh::jsval(Date.new(2010,5,10)))
9
+ end
10
+ end
11
+
12
+ end
@@ -0,0 +1,14 @@
1
+ require 'test/unit'
2
+ require 'doh/util/to_display'
3
+
4
+ module Doh
5
+
6
+ class TC_util_to_display < Test::Unit::TestCase
7
+ def test_to_display
8
+ assert_equal('', nil.to_display)
9
+ assert_equal('no', false.to_display)
10
+ assert_equal('yes', true.to_display)
11
+ end
12
+ end
13
+
14
+ end
@@ -0,0 +1,17 @@
1
+ require 'test/unit'
2
+ require 'doh/util/xml_util'
3
+ module Doh
4
+
5
+ class TC_xml_util < Test::Unit::TestCase
6
+ def setup
7
+ @hash = {'person' => {'phones' => {'home' => '5552222', 'cell' => '5553333'}, 'name' => {'first' => 'john', 'last' => 'doe'}, 'height' => '184cm', 'weight' => '73kg'}}
8
+ end
9
+
10
+ def test_stuff
11
+ xml = Doh::hash_to_xml(@hash)
12
+ hash = Doh::xml_to_hash(xml)
13
+ assert_equal(@hash, hash)
14
+ end
15
+ end
16
+
17
+ end