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
data/test/core/tc_date.rb CHANGED
@@ -20,6 +20,59 @@ class TC_core_date < Test::Unit::TestCase
20
20
  assert_equal(6, Date::short_weekday_to_num('saT'))
21
21
  assert_equal(nil, Date::short_weekday_to_num('saTurday'))
22
22
  end
23
+
24
+ def test_years_since
25
+ dt = Date.new(2008,2,29)
26
+ assert_equal(0, dt.years_since(Date.new(2007,3,1)))
27
+ assert_equal(1, dt.years_since(Date.new(2007,2,28)))
28
+ assert_equal(2, dt.years_since(Date.new(2006,2,28)))
29
+ assert_equal(4, dt.years_since(Date.new(2004,2,29)))
30
+ assert_equal(3, dt.years_since(Date.new(2004,3,1)))
31
+ dt = Date.new(2009,2,28)
32
+ assert_equal(0, dt.years_since(Date.new(2008,2,29)))
33
+ assert_equal(1, dt.years_since(Date.new(2008,2,28)))
34
+ end
35
+
36
+ def test_smart_parse
37
+ assert_equal(Date.new(2008, 1, 1), Date.smart_parse('01/01/08'))
38
+ assert_equal(Date.new(1950, 1, 1), Date.smart_parse('01/01/50'))
39
+ assert_equal(Date.new(2049, 1, 1), Date.smart_parse('01/01/49'))
40
+ end
41
+
42
+ def test_add_seconds
43
+ assert_equal(DateTime.new(2009, 2, 10, 15, 30, 3), DateTime.new(2009, 2, 10, 15, 30, 2).add_seconds(1))
44
+ end
45
+
46
+ def test_add_months
47
+ assert_equal(Date.new(2008, 2, 1), Date.new(2008, 1, 1).add_months(1))
48
+ assert_equal(Date.new(2008, 3, 1), Date.new(2008, 1, 1).add_months(2))
49
+ assert_equal(Date.new(2008, 4, 1), Date.new(2008, 1, 5).add_months(3, 1))
50
+ assert_equal(Date.new(2008, 11, 1), Date.new(2008, 1, 1).add_months(10))
51
+ assert_equal(Date.new(2008, 12, 1), Date.new(2008, 1, 1).add_months(11))
52
+ assert_equal(Date.new(2009, 1, 1), Date.new(2008, 1, 1).add_months(12))
53
+ assert_equal(Date.new(2009, 2, 1), Date.new(2008, 1, 1).add_months(13))
54
+ assert_equal(Date.new(2009, 3, 3), Date.new(2008, 1, 8).add_months(14, 3))
55
+ assert_equal(Date.new(2008, 3, 5), Date.new(2008, 2, 5).add_months(1))
56
+ assert_equal(Date.new(2008, 11, 2), Date.new(2008, 10, 5).add_months(1, 2))
57
+ assert_equal(Date.new(2008, 12, 5), Date.new(2008, 10, 5).add_months(2))
58
+ assert_equal(Date.new(2008, 12, 1), Date.new(2008, 10, 1).add_months(2))
59
+ assert_equal(Date.new(2009, 1, 1), Date.new(2008, 10, 1).add_months(3))
60
+ assert_equal(Date.new(2008, 12, 1), Date.new(2008, 11, 1).add_months(1))
61
+ assert_equal(Date.new(2009, 1, 1), Date.new(2008, 11, 1).add_months(2))
62
+ assert_equal(Date.new(2009, 1, 1), Date.new(2008, 12, 1).add_months(1))
63
+ assert_equal(Date.new(2009, 2, 1), Date.new(2008, 12, 1).add_months(2))
64
+ assert_equal(Date.new(2009, 12, 1), Date.new(2008, 1, 1).add_months(23))
65
+ assert_equal(Date.new(2010, 1, 1), Date.new(2008, 1, 1).add_months(24))
66
+ assert_equal(Date.new(2010, 11, 1), Date.new(2008, 12, 1).add_months(23))
67
+ assert_equal(Date.new(2010, 12, 1), Date.new(2008, 12, 1).add_months(24))
68
+ assert_equal(Date.new(2009, 2, 28), Date.new(2009, 1, 31).add_months(1))
69
+ assert_raise(ArgumentError) {Date.new(2009,1,25).add_months(1, 29)}
70
+ end
71
+
72
+ def test_add_years
73
+ assert_equal(Date.new(2010, 12, 1), Date.new(2008, 12, 1).add_years(2))
74
+ assert_equal(Date.new(2010, 2, 28), Date.new(2008, 2, 29).add_years(2))
75
+ end
23
76
  end
24
77
 
25
78
  end
@@ -0,0 +1,69 @@
1
+ require 'test/unit'
2
+ require 'doh/core/deep_dup'
3
+
4
+ module Doh
5
+
6
+ class Parent
7
+ deep_dup :var1, :var2
8
+ attr_accessor :var1, :var2
9
+ end
10
+
11
+ class Child < Parent
12
+ deep_dup :var3
13
+ attr_accessor :var3
14
+ end
15
+
16
+ class ShallowParent
17
+ attr_accessor :var1, :var2
18
+ end
19
+
20
+ class TC_core_deep_dup < Test::Unit::TestCase
21
+ def test_regular_dup
22
+ parent = ShallowParent.new
23
+ parent.var1 = ['elem1']
24
+ parent.var2 = {'key1' => 'val1'}
25
+ parent2 = parent.dup
26
+ assert(parent2.var1.equal?(parent.var1))
27
+ assert(parent2.var2.equal?(parent.var2))
28
+ end
29
+
30
+ def test_deep_dup
31
+ parent = Parent.new
32
+ parent.var1 = ['elem1']
33
+ parent.var2 = {'key1' => 'val1'}
34
+ parent2 = parent.dup
35
+ assert(!parent2.var1.equal?(parent.var1))
36
+ assert(!parent2.var2.equal?(parent.var2))
37
+
38
+ parent2.var1.push('elem2')
39
+ parent2.var2['key2'] = 'val2'
40
+ assert_equal(['elem1'], parent.var1)
41
+ assert_equal(['key1'], parent.var2.keys)
42
+ assert_equal(['val1'], parent.var2.values)
43
+ end
44
+
45
+ def test_deep_dup_inheritance
46
+ child = Child.new
47
+ child.var1 = ['elem1']
48
+ child.var2 = {'key1' => 'val1'}
49
+ child.var3 = Parent.new
50
+ child.var3.var1 = ['blah']
51
+ child2 = child.dup
52
+ assert(!child2.var1.equal?(child.var1))
53
+ assert(!child2.var2.equal?(child.var2))
54
+ assert(!child2.var3.equal?(child.var3))
55
+
56
+ child2.var1.push('elem2')
57
+ child2.var2['key2'] = 'val2'
58
+ child2.var3.var1.push(['smoe'])
59
+ child2.var3.var2 = 'val3'
60
+ assert_equal(['elem1'], child.var1)
61
+ assert_equal(['key1'], child.var2.keys)
62
+ assert_equal(['val1'], child.var2.values)
63
+ assert_equal(['blah'], child.var3.var1)
64
+ assert_equal(nil, child.var3.var2)
65
+
66
+ end
67
+ end
68
+
69
+ end
@@ -0,0 +1,28 @@
1
+ require 'test/unit'
2
+ require 'doh/core/hash'
3
+
4
+ module Doh
5
+
6
+ class TC_core_hash < Test::Unit::TestCase
7
+ def test_setnew
8
+ h = {}
9
+ h.setnew('field', 'first_value')
10
+ h.setnew('field', 'second_value')
11
+ assert_equal('first_value', h['field'])
12
+ h = {'field' => 'first'}
13
+ h.setnew('field', 'second')
14
+ assert_equal('first', h['field'])
15
+ end
16
+
17
+ def test_merge_with_remove
18
+ h = {1=>2, 2=>3}
19
+ orig_h = h.dup
20
+ assert_equal({1=>2, 3=>4}, h.merge_with_remove({2=>nil, 3=>4}))
21
+ assert_equal({1=>2, 2=>3, 3=>4}, h.merge_with_remove({3=>4}))
22
+ assert_equal(orig_h, h)
23
+ assert_equal({1=>2, 3=>4}, h.merge_with_remove!({2=>nil, 3=>4}))
24
+ assert_equal({1=>2, 3=>4}, h)
25
+ end
26
+ end
27
+
28
+ end
@@ -0,0 +1,30 @@
1
+ require 'test/unit'
2
+ require 'doh/core/socket'
3
+
4
+ module Doh
5
+
6
+ class TC_core_socket < Test::Unit::TestCase
7
+ def test_amount_header_and_object
8
+ verylongmessage = 'long message' * 100000
9
+ server = TCPServer.new(2479)
10
+ server_thread = Thread.new do
11
+ server_sock = server.accept
12
+ assert_equal('message sent from client', server_sock.read_with_amount_header)
13
+ assert_equal(verylongmessage, server_sock.read_with_amount_header)
14
+ object = server_sock.read_object
15
+ assert_equal({'this is a' => 'hash sent from client'}, object)
16
+ server_sock.write_with_amount_header('message sent from server')
17
+ server_sock.write_object(['this', 'is', 'an', 'array', 'sent', 'from', 'the', 'server'])
18
+ end
19
+
20
+ client_sock = TCPSocket.new('127.0.0.1', 2479)
21
+ client_sock.write_with_amount_header('message sent from client')
22
+ client_sock.write_with_amount_header(verylongmessage)
23
+ client_sock.write_object({'this is a' => 'hash sent from client'})
24
+ assert_equal('message sent from server', client_sock.read_with_amount_header)
25
+ assert_equal(['this', 'is', 'an', 'array', 'sent', 'from', 'the', 'server'], client_sock.read_object)
26
+ server_thread.join
27
+ end
28
+ end
29
+
30
+ end
@@ -82,30 +82,23 @@ class TC_core_string < Test::Unit::TestCase
82
82
  assert_equal('blah', str.lastn(100))
83
83
  end
84
84
 
85
- def test_starts_with
86
- assert_equal(true, ''.starts_with(''))
87
- str = 'blah'
88
- assert_equal(false, str.starts_with('blee'))
89
- assert_equal(false, str.starts_with('blax'))
90
- assert_equal(false, str.starts_with('lah'))
91
- assert_equal(true, str.starts_with(''))
92
- assert_equal(true, str.starts_with('blah'))
93
- assert_equal(true, str.starts_with('bla'))
94
- assert_equal(true, str.starts_with('bl'))
95
- assert_equal(true, str.starts_with('b'))
85
+ def test_gsub_between
86
+ str = 'start smoe blah endstart blah blah blah endstart blah blah blah endstart blah blah blah endstart blah blah blah endstart blah blah blah endstart blah blah blah end '
87
+ assert_equal('start blah endstart blah endstart blah endstart blah endstart blah endstart blah endstart blah end ', str.gsub_between('start', 'end', ' blah '))
88
+
89
+ result = str.gsub_between('start', 'end') do |contents|
90
+ contents.reverse
91
+ end
92
+ assert_equal('start halb eoms endstart halb halb halb endstart halb halb halb endstart halb halb halb endstart halb halb halb endstart halb halb halb endstart halb halb halb end ', result)
96
93
  end
97
94
 
98
- def test_ends_with
99
- assert_equal(true, ''.ends_with(''))
100
- str = 'blah'
101
- assert_equal(false, str.ends_with('blee'))
102
- assert_equal(false, str.ends_with('blax'))
103
- assert_equal(false, str.ends_with('bla'))
104
- assert_equal(true, str.ends_with(''))
105
- assert_equal(true, str.ends_with('blah'))
106
- assert_equal(true, str.ends_with('lah'))
107
- assert_equal(true, str.ends_with('ah'))
108
- assert_equal(true, str.ends_with('h'))
95
+ def test_equals_ignore_whitespace
96
+ assert_equal(true, " smoe ".equals_ignore_whitespace("smoe"))
97
+ assert_equal(true, " sm oe ".equals_ignore_whitespace("sm oe"))
98
+ assert_equal(false, " sm oe ".equals_ignore_whitespace("smoe"))
99
+ assert_equal(true, " sm\n\noe ".equals_ignore_whitespace("sm oe"))
100
+ assert_equal(true, " sm\n\noe ".equals_ignore_whitespace(" sm oe "))
101
+ assert_equal(true, " s\tm\n\no e ".equals_ignore_whitespace("s m o e"))
109
102
  end
110
103
  end
111
104
 
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ Dir::glob(File.join(Dir.pwd, '**', 'tc_*.rb')).each { |elem| require(elem) }
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ Dir::glob(File.join(Dir.pwd, '**', 'tc_*.rb')).each { |elem| require(elem) }
4
+ Dir::glob(File.join(Dir.pwd, '**', 'slow_*.rb')).each { |elem| require(elem) }
@@ -12,7 +12,7 @@ class TC_Acceptor < Test::Unit::TestCase
12
12
  @ios = StringIO.new
13
13
  @ios2 = StringIO.new
14
14
  @sched = DohLogger::DirectScheduler.new
15
- @acceptor = DohLogger::IOStreamAcceptor.new(@ios, '%msg', '%msg error')
15
+ @acceptor = DohLogger::IOStreamAcceptor.new(@ios, '%msg', '%msg error: %call_stack')
16
16
  @acceptor2 = DohLogger::IOStreamAcceptor.new(@ios2, '%msg', '%msg error')
17
17
  @interface = DohLogger::StandardInterface.new(@sched)
18
18
  @interface.add_acceptor(DohLogger::DEBUG, @acceptor)
@@ -20,19 +20,36 @@ class TC_Acceptor < Test::Unit::TestCase
20
20
  end
21
21
 
22
22
  def test_log
23
+ fake_backtrace = ['/fake/backtrace/location.rb:33:in `some_func\'', '/some/other/location']
24
+ except = Exception.new('test exception with stack')
25
+ except.set_backtrace(fake_backtrace)
26
+
23
27
  @interface.info("info1")
24
28
  @interface.warn("warn1")
25
- @interface.error("error1")
26
- @interface.fatal("fatal1")
27
- events = @ios.string.split("\n")
29
+ @interface.error("error1", except)
30
+ @interface.fatal("fatal1", except)
31
+ string = @ios.string
32
+ events = string.split("\n")
28
33
  assert_equal('info1', events[0])
29
34
  assert_equal('warn1', events[1])
30
- assert_equal('error1 error', events[2])
31
- assert_equal('fatal1 error', events[3])
35
+ assert_equal('error1 error: /fake/backtrace/location.rb:33:in `some_func\'', events[2])
36
+ assert_equal('/some/other/location', events[3])
37
+ assert_equal('fatal1 error: /fake/backtrace/location.rb:33:in `some_func\'', events[4])
38
+ assert_equal('/some/other/location', events[5])
32
39
  events2 = @ios2.string.split("\n")
33
40
  assert_equal('warn1', events2[0])
34
41
  assert_equal(1, events2.size)
35
42
  end
43
+
44
+ def test_literal
45
+ @interface.info("info\ninfo")
46
+ @interface.literal = true
47
+ @interface.info("info\ninfo")
48
+ events = @ios.string.split("\n")
49
+ assert_equal('info\ninfo', events[0])
50
+ assert_equal('info', events[1])
51
+ assert_equal('info', events[2])
52
+ end
36
53
  end
37
54
 
38
55
  end
@@ -5,7 +5,7 @@ module Doh
5
5
 
6
6
  class TC_Event < Test::Unit::TestCase
7
7
  def test_call_stack
8
- event = DohLogger::Event.new(1, '')
8
+ event = DohLogger::Event.new(1, '', '')
9
9
  stack = event.call_stack
10
10
  assert_match(/tc_event\.rb/, stack[0])
11
11
  begin
@@ -8,8 +8,8 @@ module Doh
8
8
 
9
9
  class TC_Formatter < Test::Unit::TestCase
10
10
  def setup
11
- @formatter = DohLogger::Formatter.new("severity=%severity,msg=%msg,exception=%exception,time=%time,datetime=%datetime,call_stack=%call_stack,source_ip=%source_ip")
12
- @event = DohLogger::Event.new(DohLogger::DEBUG, 'testmessage')
11
+ @formatter = DohLogger::Formatter.new("severity=%severity,msg=%msg,location=%location,exception=%exception,time=%time,datetime=%datetime,call_stack=%call_stack,source_ip=%source_ip")
12
+ @event = DohLogger::Event.new(DohLogger::DEBUG, 'testmessage', 'testloc')
13
13
  @time = '10:20:30'
14
14
  @datetime = '2008-01-02 ' + @time
15
15
  @event.time = Time.parse(@datetime)
@@ -29,6 +29,7 @@ class TC_Formatter < Test::Unit::TestCase
29
29
  hsh = format_output_to_hash(@formatter.replace(@event))
30
30
  assert_equal('debug', hsh['severity'])
31
31
  assert_equal('testmessage', hsh['msg'])
32
+ assert_equal('testloc', hsh['location'])
32
33
  assert_equal('', hsh['exception'])
33
34
  assert_equal(@time + '.000', hsh['time'])
34
35
  assert_equal(@datetime + '.000', hsh['datetime'])
@@ -0,0 +1,48 @@
1
+ require 'test/unit'
2
+ require 'doh/logger/socket_viewer.rb'
3
+ require 'doh/logger/socket_acceptor.rb'
4
+ require 'doh/logger/direct_scheduler.rb'
5
+ require 'doh/logger/standard_interface.rb'
6
+
7
+ module Doh
8
+
9
+ class TC_SocketViewerAcceptor < Test::Unit::TestCase
10
+ def setup
11
+ @port = 12377
12
+ @sched = DohLogger::DirectScheduler.new
13
+ @socket_acceptor = DohLogger::SocketAcceptor.new('127.0.0.1', @port)
14
+ @interface = DohLogger::StandardInterface.new(@sched)
15
+ @interface.add_acceptor(DohLogger::DEBUG, @socket_acceptor)
16
+ end
17
+
18
+ def test_no_viewer
19
+ assert_nothing_raised {@interface.debug("debug1")}
20
+ end
21
+
22
+ def test_with_viewer
23
+ socket_viewer = DohLogger::SocketViewer.new(@port)
24
+ @socket_acceptor.connect_socket(0)
25
+ fake_backtrace = ['/fake/backtrace/location.rb:33:in `some_func\'', '/some/other/location']
26
+ except = Exception.new('test exception with stack')
27
+ except.set_backtrace(fake_backtrace)
28
+
29
+ thread = Thread.new do
30
+ events = []
31
+ socket_viewer.handle_events do |event|
32
+ events.push(event)
33
+ break if events.size == 2
34
+ end
35
+ assert_equal('debug1', events[0].msg)
36
+ assert_equal('debug2', events[1].msg)
37
+ assert_equal("Exception(#{except.class}): #{except.to_s}", events[1].exception.to_s)
38
+ assert_equal(fake_backtrace, events[1].exception.backtrace)
39
+ end
40
+ @interface.debug('debug1')
41
+ @interface.error('debug2', except)
42
+
43
+ thread.join
44
+ socket_viewer.shutdown
45
+ end
46
+ end
47
+
48
+ end
@@ -0,0 +1 @@
1
+ DROP TABLE migrate_test_version2;
@@ -0,0 +1,4 @@
1
+ CREATE TABLE migrate_test_version2
2
+ ( id INT UNSIGNED NOT NULL AUTO_INCREMENT
3
+ , PRIMARY KEY (id)
4
+ ) ENGINE=MyISAM;
@@ -0,0 +1 @@
1
+ ALTER TABLE migrate_test_version2 DROP created_at;
@@ -0,0 +1 @@
1
+ ALTER TABLE migrate_test_version2 ADD created_at DATETIME NOT NULL;
@@ -9,20 +9,20 @@ class TC_ConnectorInstance < Test::Unit::TestCase
9
9
  assert_equal(1, DohDb::insert("INSERT INTO #{tbl} (id, created_on, created_at, money) VALUES (null, CURDATE(), '2007-01-01 10:30:05', 10.5)"))
10
10
  assert_equal(2, DohDb::insert("INSERT INTO #{tbl} (id, created_on) VALUES (null, 0)"))
11
11
  assert_equal(1, DohDb::update("UPDATE #{tbl} SET money = 10.8 WHERE id = 1"))
12
- assert_equal('10.80', DohDb::select_field("SELECT money FROM #{tbl} WHERE id = 1"))
13
- assert_raise(QueryResultError) {DohDb::select_row("SELECT * FROM #{tbl} WHERE id = 7")}
12
+ assert_equal(BigDecimal('10.80'), DohDb::select_field("SELECT money FROM #{tbl} WHERE id = 1"))
13
+ assert_raise(UnexpectedQueryResult) {DohDb::select_row("SELECT * FROM #{tbl} WHERE id = 7")}
14
14
  assert_equal(nil, DohDb::select_optional_row("SELECT * FROM #{tbl} WHERE id = 7"))
15
- assert_raise(QueryResultError){DohDb::select_optional_row("SELECT * FROM #{tbl} WHERE id < 3")}
15
+ assert_raise(UnexpectedQueryResult){DohDb::select_optional_row("SELECT * FROM #{tbl} WHERE id < 3")}
16
16
  assert_equal(nil, DohDb::select_optional_field("SELECT money FROM #{tbl} WHERE id = 7"))
17
- assert_raise(QueryResultError) {DohDb::select_field("SELECT money FROM #{tbl} WHERE id = 7")}
17
+ assert_raise(UnexpectedQueryResult) {DohDb::select_field("SELECT money FROM #{tbl} WHERE id = 7")}
18
18
  assert_equal(1, DohDb::update_row("UPDATE #{tbl} SET money = 10.95 WHERE id = 1"))
19
19
  assert_raise(Mysql::Error){DohDb::query("some invalid sql here")}
20
- assert(Doh::pop_unit_test_error)
21
- assert_raise(QueryResultError) {DohDb::update_row("UPDATE #{tbl} SET money = 10.95 WHERE id = 7")}
20
+ assert(DohTest::pop_error)
21
+ assert_raise(UnexpectedQueryResult) {DohDb::update_row("UPDATE #{tbl} SET money = 10.95 WHERE id = 7")}
22
22
  onerow = DohDb::select_row("SELECT * FROM #{tbl} WHERE id = 1")
23
- assert_equal('1', onerow['id'])
23
+ assert_equal(1, onerow['id'])
24
24
  onerow = DohDb::select_optional_row("SELECT * FROM #{tbl} WHERE id = 1")
25
- assert_equal('1', onerow['id'])
25
+ assert_equal(1, onerow['id'])
26
26
  rows = DohDb::select("SELECT * FROM #{tbl}")
27
27
  rows.each {|row| assert(row['id'] != 0)}
28
28
  end
@@ -0,0 +1,45 @@
1
+ require File.join(File.dirname(__FILE__), 'db_unit_test')
2
+ require 'doh/mysql/convert'
3
+
4
+ module DohDb
5
+
6
+ class TC_Convert < Test::Unit::TestCase
7
+ def setup
8
+ @tbl = "doh_mysql_convert_tests"
9
+ DohDb::query("DROP TABLE IF EXISTS #@tbl")
10
+ DohDb::request_handle.query("CREATE TABLE #{@tbl} (not_null_field CHAR(1) NOT NULL, null_ok_field CHAR(1), int_field INT, bool_field TINYINT(1), date_field DATE, datetime_field DATETIME)")
11
+ end
12
+
13
+ def teardown
14
+ DohDb::query("DROP TABLE IF EXISTS #@tbl")
15
+ end
16
+
17
+ def convert(value)
18
+ DohDb::convert(@tbl, @field, value)
19
+ end
20
+
21
+ def verify(converted, original)
22
+ assert_equal(converted, convert(original))
23
+ end
24
+
25
+ def verify_same(value)
26
+ verify(value, value)
27
+ end
28
+
29
+ def verify_exception(value, exception_class)
30
+ assert_raise(exception_class) { convert(value) }
31
+ end
32
+
33
+ def test_nil_null
34
+ # assert_raise(UnknownColumn) { DohDb::convert('some_table_that_doesnt_exist', 'some_column_that_doesnt_exist', 'blah') }
35
+ assert_equal('blah', DohDb::convert('some_table_that_doesnt_exist', 'some_column_that_doesnt_exist', 'blah'))
36
+ assert_equal('blah', DohDb::convert('', 'some_column_that_doesnt_exist', 'blah'))
37
+ assert_raise(CannotBeNull) { DohDb::convert(@tbl, 'not_null_field', nil) }
38
+ assert_equal(nil, DohDb::convert(@tbl, 'null_ok_field', nil))
39
+ assert_equal('', DohDb::convert(@tbl, 'not_null_field', ''))
40
+ assert_equal(nil, DohDb::convert(@tbl, 'null_ok_field', ''))
41
+ assert_equal(nil, DohDb::convert(@tbl, 'int_field', ''))
42
+ end
43
+ end
44
+
45
+ end
@@ -1,4 +1,5 @@
1
1
  require File.join(File.dirname(__FILE__), 'db_unit_test')
2
+ require 'doh/core/hash'
2
3
 
3
4
  module DohDb
4
5
 
@@ -8,13 +9,104 @@ class TC_MysqlHandle < Test::Unit::TestCase
8
9
  tbl = "doh_mysql_handle_stuff_test"
9
10
  dbh.query("CREATE TEMPORARY TABLE #{tbl} (id INT UNSIGNED AUTO_INCREMENT NOT NULL KEY, value INT NOT NULL DEFAULT 0, created_on DATE, created_at DATETIME, money DECIMAL(7,2) NOT NULL DEFAULT 0)")
10
11
  assert_equal(1, dbh.insert("INSERT INTO #{tbl} (id, created_on, created_at, money) VALUES (null, CURDATE(), '2007-01-01 10:30:05', 10.5)"))
11
- assert_equal(2, dbh.insert("INSERT INTO #{tbl} (id, created_on) VALUES (null, 0)"))
12
+ assert_equal(2, dbh.insert("INSERT INTO #{tbl} (id, created_on, created_at) VALUES (null, 0, 0)"))
12
13
  assert_equal(3, dbh.insert("INSERT INTO #{tbl} (id) VALUES (null)"))
13
14
  onerow = dbh.select_row("SELECT * FROM #{tbl} WHERE id = 1")
14
- assert_equal('1', onerow['id'])
15
+ assert_equal(1, onerow['id'])
15
16
  rows = dbh.select("SELECT * FROM #{tbl}")
16
17
  rows.each {|row| assert(row['id'] != 0)}
17
18
  end
19
+
20
+ def test_select_transpose_2fields
21
+ dbh = DohDb::request_handle
22
+ tbl = "doh_mysql_handle_select_transpose_2fields_test"
23
+ DohDb::query("CREATE TEMPORARY TABLE #{tbl} (field CHAR(30) NOT NULL, value CHAR(30) NOT NULL)")
24
+ DohDb::query("INSERT INTO #{tbl} SET field = 'some_name', value = 'some_value'")
25
+ DohDb::query("INSERT INTO #{tbl} SET field = 'other_name', value = 'matching_other_value'")
26
+ DohDb::query("INSERT INTO #{tbl} SET field = 'yet_another_name', value = 'strange_value'")
27
+ hash = DohDb::select_transpose("SELECT field, value FROM #{tbl}")
28
+ assert_equal('some_value', hash['some_name'])
29
+ assert_equal('matching_other_value', hash['other_name'])
30
+ assert_equal('strange_value', hash['yet_another_name'])
31
+ end
32
+
33
+ def test_select_transpose_3fields
34
+ dbh = DohDb::request_handle
35
+ tbl = "doh_mysql_handle_select_transpose_3fields_test"
36
+ DohDb::query("CREATE TEMPORARY TABLE #{tbl} (field CHAR(30), some_value CHAR(30), other_value CHAR(30))")
37
+ DohDb::query("INSERT INTO #{tbl} SET field = 'some_name', some_value = 'some_value', other_value = 'blah'")
38
+ DohDb::query("INSERT INTO #{tbl} SET field = 'other_name', some_value = 'matching_other_value', other_value = 'blee'")
39
+ DohDb::query("INSERT INTO #{tbl} SET field = 'yet_another_name', some_value = 'strange_value', other_value = 'bloo'")
40
+ hash = DohDb::select_transpose("SELECT field, some_value, other_value FROM #{tbl}")
41
+ assert_equal(hash['some_name'], {'some_value' => 'some_value', 'other_value' => 'blah'})
42
+ assert_equal(hash['other_name'], {'some_value' => 'matching_other_value', 'other_value' => 'blee'})
43
+ assert_equal(hash['yet_another_name'], {'some_value' => 'strange_value', 'other_value' => 'bloo'})
44
+ end
45
+
46
+ def test_select_values
47
+ dbh = DohDb::request_handle
48
+ tbl = "doh_mysql_handle_select_values_test"
49
+ DohDb::query("CREATE TEMPORARY TABLE #{tbl} (field CHAR(30), some_value CHAR(30))")
50
+ DohDb::query("INSERT INTO #{tbl} SET field = 'some_name', some_value = 'some_value'")
51
+ assert_equal([['some_name', 'some_value']], DohDb::select_values("SELECT field, some_value FROM #{tbl}"))
52
+ assert_equal([['some_name']], DohDb::select_values("SELECT field FROM #{tbl}"))
53
+ end
54
+
55
+ def test_multi_select
56
+ dbh = DohDb::request_handle
57
+ tbl = "doh_mysql_handle_multi_select_test"
58
+ DohDb::query("CREATE TEMPORARY TABLE #{tbl} (value CHAR(30))")
59
+ DohDb::query("INSERT INTO #{tbl} SET value = 'first'")
60
+ DohDb::query("INSERT INTO #{tbl} SET value = 'second'")
61
+
62
+ stmts = []
63
+ stmts.push("SELECT * FROM #{tbl}")
64
+ stmts.push("INSERT INTO #{tbl} SET value = 'third'")
65
+ stmts.push(["SELECT * FROM #{tbl}", :hash])
66
+ stmts.push("SELECT * FROM #{tbl}")
67
+ stmts.push("INSERT INTO #{tbl} SET value = 'fourth'")
68
+ stmts.push(["SELECT * FROM #{tbl}", :smart])
69
+ select_results = DohDb::multi_select(stmts)
70
+ assert_equal(4, select_results.size)
71
+ assert_equal(4, DohDb::select_field("SELECT COUNT(*) FROM #{tbl}"))
72
+
73
+ curr_select = select_results[0]
74
+ assert_equal(2, curr_select.size)
75
+ assert_kind_of(ReadOnlyRow, curr_select[0])
76
+ assert_equal({'value' => 'first'}, curr_select[0].to_h)
77
+ assert_equal({'value' => 'second'}, curr_select[1].to_h)
78
+
79
+ curr_select = select_results[1]
80
+ assert_equal(3, curr_select.size)
81
+ assert_kind_of(Hash, curr_select[0])
82
+ assert_equal({'value' => 'first'}, curr_select[0].to_h)
83
+ assert_equal({'value' => 'second'}, curr_select[1].to_h)
84
+ assert_equal({'value' => 'third'}, curr_select[2].to_h)
85
+
86
+ curr_select = select_results[2]
87
+ assert_equal(3, curr_select.size)
88
+ assert_equal({'value' => 'first'}, curr_select[0].to_h)
89
+ assert_equal({'value' => 'second'}, curr_select[1].to_h)
90
+ assert_equal({'value' => 'third'}, curr_select[2].to_h)
91
+
92
+ curr_select = select_results[3]
93
+ assert_equal(4, curr_select.size)
94
+ assert_kind_of(SmartRow, curr_select[0])
95
+ assert_equal({'value' => 'first'}, curr_select[0].to_h)
96
+ assert_equal({'value' => 'second'}, curr_select[1].to_h)
97
+ assert_equal({'value' => 'third'}, curr_select[2].to_h)
98
+ assert_equal({'value' => 'fourth'}, curr_select[3].to_h)
99
+ end
100
+
101
+ def test_insert_hash
102
+ dbh = DohDb::request_handle
103
+ tbl = "doh_mysql_insert_hash_test"
104
+ dbh.query("CREATE TEMPORARY TABLE #{tbl} (value INT KEY)")
105
+ hash1 = {'value' => 1}
106
+ assert_equal(0, dbh.insert_hash(hash1, tbl))
107
+ assert_raise(Mysql::Error) { dbh.insert_hash(hash1, tbl) }
108
+ assert_equal(0, dbh.insert_hash(hash1, tbl, true))
109
+ end
18
110
  end
19
111
 
20
112
  end
@@ -0,0 +1,50 @@
1
+ require File.join(File.dirname(__FILE__), 'db_unit_test')
2
+ require 'doh/mysql/metadata_util'
3
+
4
+ module DohDb
5
+
6
+ class TC_metadata_util < Test::Unit::TestCase
7
+ def tbl
8
+ "doh_mysql_metadata_util_test"
9
+ end
10
+
11
+ def test_stuff
12
+ dbh = DohDb::request_handle
13
+ dbh.query("CREATE TABLE #{tbl} (num INT, str CHAR(7))")
14
+ column_info = DohDb::column_info(tbl)
15
+ info = column_info['str']
16
+ assert_equal('char', info['data_type'])
17
+ assert_equal(7, info['character_maximum_length'])
18
+ info = column_info['num']
19
+ assert_equal('int', info['data_type'])
20
+ assert_equal(nil, info['character_maximum_length'])
21
+
22
+ assert_equal(7, DohDb::field_character_size(tbl, 'str'))
23
+ assert_equal(nil, DohDb::field_character_size(tbl, 'num'))
24
+
25
+ row = {'num' => 'blahblahblah', 'str' => 'blahblahblah'}
26
+ DohDb::chop_character_fields!(tbl, row)
27
+ assert_equal('blahblahblah', row['num'])
28
+ assert_equal('blahbla', row['str'])
29
+
30
+ row = {'num' => 'blahblahblah', 'str' => 'blahblahblah'}
31
+ newrow = DohDb::chop_character_fields(tbl, row)
32
+ assert_equal('blahblahblah', newrow['num'])
33
+ assert_equal('blahbla', newrow['str'])
34
+ assert_equal('blahblahblah', row['num'])
35
+ assert_equal('blahblahblah', row['str'])
36
+
37
+ assert(DohDb::table_exist?(tbl))
38
+
39
+ assert_equal('num', DohDb::find_primary_key(tbl))
40
+ assert_raise(RuntimeError) { DohDb::find_primary_key(tbl, "this_database_doesnt_exist") }
41
+ assert_raise(RuntimeError) { DohDb::find_primary_key("this table doesn't exist") }
42
+ end
43
+
44
+ def teardown
45
+ DohDb::query("DROP TABLE IF EXISTS #{tbl}")
46
+ super
47
+ end
48
+ end
49
+
50
+ end