gettext 1.8.0-mswin32 → 1.9.0-mswin32

Sign up to get free protection for your applications and to get access to all the features.
Files changed (180) hide show
  1. data/ChangeLog +120 -0
  2. data/NEWS +16 -0
  3. data/README +27 -19
  4. data/data/locale/ca/LC_MESSAGES/rails.mo +0 -0
  5. data/data/locale/ca/LC_MESSAGES/rgettext.mo +0 -0
  6. data/data/locale/cs/LC_MESSAGES/rails.mo +0 -0
  7. data/data/locale/cs/LC_MESSAGES/rgettext.mo +0 -0
  8. data/data/locale/de/LC_MESSAGES/rails.mo +0 -0
  9. data/data/locale/de/LC_MESSAGES/rgettext.mo +0 -0
  10. data/data/locale/el/LC_MESSAGES/rails.mo +0 -0
  11. data/data/locale/el/LC_MESSAGES/rgettext.mo +0 -0
  12. data/data/locale/eo/LC_MESSAGES/rails.mo +0 -0
  13. data/data/locale/eo/LC_MESSAGES/rgettext.mo +0 -0
  14. data/data/locale/es/LC_MESSAGES/rails.mo +0 -0
  15. data/data/locale/es/LC_MESSAGES/rgettext.mo +0 -0
  16. data/data/locale/et/LC_MESSAGES/rails.mo +0 -0
  17. data/data/locale/fr/LC_MESSAGES/rails.mo +0 -0
  18. data/data/locale/fr/LC_MESSAGES/rgettext.mo +0 -0
  19. data/data/locale/it/LC_MESSAGES/rails.mo +0 -0
  20. data/data/locale/it/LC_MESSAGES/rgettext.mo +0 -0
  21. data/data/locale/ja/LC_MESSAGES/rails.mo +0 -0
  22. data/data/locale/ja/LC_MESSAGES/rgettext.mo +0 -0
  23. data/data/locale/ko/LC_MESSAGES/rails.mo +0 -0
  24. data/data/locale/ko/LC_MESSAGES/rgettext.mo +0 -0
  25. data/data/locale/nl/LC_MESSAGES/rails.mo +0 -0
  26. data/data/locale/nl/LC_MESSAGES/rgettext.mo +0 -0
  27. data/data/locale/pt_BR/LC_MESSAGES/rails.mo +0 -0
  28. data/data/locale/pt_BR/LC_MESSAGES/rgettext.mo +0 -0
  29. data/data/locale/ru/LC_MESSAGES/rails.mo +0 -0
  30. data/data/locale/ru/LC_MESSAGES/rgettext.mo +0 -0
  31. data/data/locale/sv/LC_MESSAGES/rgettext.mo +0 -0
  32. data/data/locale/zh/LC_MESSAGES/rails.mo +0 -0
  33. data/data/locale/zh/LC_MESSAGES/rgettext.mo +0 -0
  34. data/data/locale/zh_TW/LC_MESSAGES/rails.mo +0 -0
  35. data/data/locale/zh_TW/LC_MESSAGES/rgettext.mo +0 -0
  36. data/ext/gettext/Makefile +22 -19
  37. data/ext/gettext/mkmf.log +3 -9
  38. data/lib/gettext.rb +13 -10
  39. data/lib/gettext/active_record.rb +130 -113
  40. data/lib/gettext/erb.rb +2 -2
  41. data/lib/gettext/locale.rb +11 -5
  42. data/lib/gettext/locale_cgi.rb +3 -3
  43. data/lib/gettext/locale_posix.rb +2 -2
  44. data/lib/gettext/locale_win32.rb +2 -1
  45. data/lib/gettext/parser/active_record.rb +24 -14
  46. data/lib/gettext/parser/ruby.rb +4 -63
  47. data/lib/gettext/rails.rb +23 -20
  48. data/lib/gettext/rgettext.rb +6 -6
  49. data/lib/gettext/utils.rb +12 -6
  50. data/lib/gettext/version.rb +2 -2
  51. data/po/ca/rails.po +121 -0
  52. data/po/ca/rgettext.po +130 -0
  53. data/po/cs/rails.po +30 -26
  54. data/po/cs/rgettext.po +44 -36
  55. data/po/de/rails.po +28 -24
  56. data/po/de/rgettext.po +43 -35
  57. data/po/el/rails.po +38 -34
  58. data/po/el/rgettext.po +54 -46
  59. data/po/eo/rails.po +121 -0
  60. data/po/eo/rgettext.po +127 -0
  61. data/po/es/rails.po +28 -24
  62. data/po/es/rgettext.po +45 -37
  63. data/po/et/rails.po +28 -24
  64. data/po/fr/rails.po +39 -33
  65. data/po/fr/rgettext.po +43 -35
  66. data/po/it/rails.po +28 -24
  67. data/po/it/rgettext.po +43 -35
  68. data/po/ja/rails.po +30 -26
  69. data/po/ja/rgettext.po +44 -36
  70. data/po/ko/rails.po +36 -32
  71. data/po/ko/rgettext.po +43 -35
  72. data/po/nl/rails.po +32 -28
  73. data/po/nl/rgettext.po +46 -38
  74. data/po/pt_BR/rails.po +36 -31
  75. data/po/pt_BR/rgettext.po +45 -37
  76. data/po/rails.pot +28 -24
  77. data/po/rgettext.pot +39 -31
  78. data/po/ru/rails.po +36 -30
  79. data/po/ru/rgettext.po +50 -41
  80. data/po/sv/rgettext.po +40 -32
  81. data/po/zh/rails.po +29 -24
  82. data/po/zh/rgettext.po +46 -36
  83. data/po/zh_TW/rails.po +29 -24
  84. data/po/zh_TW/rgettext.po +45 -36
  85. data/samples/cgi/locale/ca/LC_MESSAGES/helloerb1.mo +0 -0
  86. data/samples/cgi/locale/ca/LC_MESSAGES/helloerb2.mo +0 -0
  87. data/samples/cgi/locale/ca/LC_MESSAGES/hellolib.mo +0 -0
  88. data/samples/cgi/locale/ca/LC_MESSAGES/main.mo +0 -0
  89. data/samples/cgi/locale/eo/LC_MESSAGES/helloerb1.mo +0 -0
  90. data/samples/cgi/locale/eo/LC_MESSAGES/helloerb2.mo +0 -0
  91. data/samples/cgi/locale/eo/LC_MESSAGES/hellolib.mo +0 -0
  92. data/samples/cgi/locale/eo/LC_MESSAGES/main.mo +0 -0
  93. data/samples/cgi/po/ca/helloerb1.po +59 -0
  94. data/samples/cgi/po/ca/helloerb2.po +51 -0
  95. data/samples/cgi/po/ca/hellolib.po +23 -0
  96. data/samples/cgi/po/ca/main.po +83 -0
  97. data/samples/cgi/po/eo/helloerb1.po +60 -0
  98. data/samples/cgi/po/eo/helloerb2.po +52 -0
  99. data/samples/cgi/po/eo/hellolib.po +24 -0
  100. data/samples/cgi/po/eo/main.po +84 -0
  101. data/samples/locale/ca/LC_MESSAGES/hello.mo +0 -0
  102. data/samples/locale/ca/LC_MESSAGES/hello2.mo +0 -0
  103. data/samples/locale/ca/LC_MESSAGES/hello_noop.mo +0 -0
  104. data/samples/locale/ca/LC_MESSAGES/hello_plural.mo +0 -0
  105. data/samples/locale/ca/LC_MESSAGES/helloglade2.mo +0 -0
  106. data/samples/locale/ca/LC_MESSAGES/hellogtk.mo +0 -0
  107. data/samples/locale/ca/LC_MESSAGES/hellotk.mo +0 -0
  108. data/samples/locale/eo/LC_MESSAGES/hello.mo +0 -0
  109. data/samples/locale/eo/LC_MESSAGES/hello2.mo +0 -0
  110. data/samples/locale/eo/LC_MESSAGES/hello_noop.mo +0 -0
  111. data/samples/locale/eo/LC_MESSAGES/hello_plural.mo +0 -0
  112. data/samples/locale/eo/LC_MESSAGES/helloglade2.mo +0 -0
  113. data/samples/locale/eo/LC_MESSAGES/hellogtk.mo +0 -0
  114. data/samples/locale/eo/LC_MESSAGES/hellotk.mo +0 -0
  115. data/samples/po/ca/hello.po +23 -0
  116. data/samples/po/ca/hello2.po +31 -0
  117. data/samples/po/ca/hello_noop.po +27 -0
  118. data/samples/po/ca/hello_plural.po +25 -0
  119. data/samples/po/ca/helloglade2.po +31 -0
  120. data/samples/po/ca/hellogtk.po +23 -0
  121. data/samples/po/ca/hellotk.po +23 -0
  122. data/samples/po/eo/hello.po +23 -0
  123. data/samples/po/eo/hello2.po +31 -0
  124. data/samples/po/eo/hello_noop.po +27 -0
  125. data/samples/po/eo/hello_plural.po +26 -0
  126. data/samples/po/eo/helloglade2.po +32 -0
  127. data/samples/po/eo/hellogtk.po +23 -0
  128. data/samples/po/eo/hellotk.po +24 -0
  129. data/samples/rails/app/views/blog/list.rhtml +0 -1
  130. data/samples/rails/config/environment.rb +2 -0
  131. data/samples/rails/db/schema.rb +0 -79
  132. data/samples/rails/lib/tasks/gettext.rake +2 -1
  133. data/samples/rails/locale/ca/LC_MESSAGES/blog.mo +0 -0
  134. data/samples/rails/locale/cs/LC_MESSAGES/blog.mo +0 -0
  135. data/samples/rails/locale/de/LC_MESSAGES/blog.mo +0 -0
  136. data/samples/rails/locale/el/LC_MESSAGES/blog.mo +0 -0
  137. data/samples/rails/locale/en/LC_MESSAGES/blog.mo +0 -0
  138. data/samples/rails/locale/eo/LC_MESSAGES/blog.mo +0 -0
  139. data/samples/rails/locale/es/LC_MESSAGES/blog.mo +0 -0
  140. data/samples/rails/locale/fr/LC_MESSAGES/blog.mo +0 -0
  141. data/samples/rails/locale/it/LC_MESSAGES/blog.mo +0 -0
  142. data/samples/rails/locale/ja/LC_MESSAGES/blog.mo +0 -0
  143. data/samples/rails/locale/ko/LC_MESSAGES/blog.mo +0 -0
  144. data/samples/rails/locale/nl/LC_MESSAGES/blog.mo +0 -0
  145. data/samples/rails/locale/pt_BR/LC_MESSAGES/blog.mo +0 -0
  146. data/samples/rails/locale/ru/LC_MESSAGES/blog.mo +0 -0
  147. data/samples/rails/locale/zh/LC_MESSAGES/blog.mo +0 -0
  148. data/samples/rails/locale/zh_TW/LC_MESSAGES/blog.mo +0 -0
  149. data/samples/rails/po/blog.pot +106 -106
  150. data/samples/rails/po/ca/blog.po +105 -0
  151. data/samples/rails/po/cs/blog.po +107 -110
  152. data/samples/rails/po/de/blog.po +107 -107
  153. data/samples/rails/po/el/blog.po +105 -105
  154. data/samples/rails/po/en/blog.po +107 -107
  155. data/samples/rails/po/eo/blog.po +106 -0
  156. data/samples/rails/po/es/blog.po +105 -105
  157. data/samples/rails/po/fr/blog.po +105 -105
  158. data/samples/rails/po/it/blog.po +105 -105
  159. data/samples/rails/po/ja/blog.po +105 -105
  160. data/samples/rails/po/ko/blog.po +105 -105
  161. data/samples/rails/po/nl/blog.po +105 -105
  162. data/samples/rails/po/pt_BR/blog.po +105 -105
  163. data/samples/rails/po/ru/blog.po +105 -105
  164. data/samples/rails/po/zh/blog.po +105 -105
  165. data/samples/rails/po/zh_TW/blog.po +107 -107
  166. data/samples/rails/vendor/plugins/gettext/locale/ca/LC_MESSAGES/gettext_plugin.mo +0 -0
  167. data/samples/rails/vendor/plugins/gettext/po/ca/gettext_plugin.po +27 -0
  168. data/test/README +6 -0
  169. data/test/Rakefile +1 -1
  170. data/test/fixtures/book.rb +3 -0
  171. data/test/fixtures/user.rb +3 -0
  172. data/test/gettext_test_active_record.rb +347 -67
  173. data/test/gettext_test_cgi.rb +27 -2
  174. data/test/gettext_test_parser.rb +102 -4
  175. data/test/gettext_test_rails.rb +6 -1
  176. data/test/locale/ja/LC_MESSAGES/active_record.mo +0 -0
  177. data/test/po/ja/active_record.po +17 -17
  178. data/test/test.sh +1 -0
  179. data/test/test_rubyparser.rb +6 -4
  180. metadata +92 -3
@@ -0,0 +1,27 @@
1
+ # GetText Sample Blog on RoR.
2
+ #
3
+ # Copyright (C) 2005 Masao Mutoh
4
+ #
5
+ # This file is distributed under the same license as the Ruby-GetText-Package.
6
+ #
7
+ # Ramon Salvadó <rsalvado at gnuine.com>, 2006.
8
+ #
9
+ msgid ""
10
+ msgstr ""
11
+ "Project-Id-Version: gettext_plugin 1.2.0\n"
12
+ "POT-Creation-Date: 2006-05-31 02:06+0900\n"
13
+ "PO-Revision-Date: 2005-12-20 10:33+0900\n"
14
+ "Last-Translator: Ramon Salvadó <rsalvado at gnuine.com>\n"
15
+ "Language-Team: Catalan\n"
16
+ "MIME-Version: 1.0\n"
17
+ "Content-Type: text/plain; charset=UTF-8\n"
18
+ "Content-Transfer-Encoding: 8bit\n"
19
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
20
+
21
+ #: lib/gettext_plugin.rb:18
22
+ msgid "Select locale"
23
+ msgstr "Selecciona locale"
24
+
25
+ #: lib/gettext_plugin.rb:30
26
+ msgid "Cookie &quot;lang&quot; is set: %s"
27
+ msgstr "La galeta &quot;lang&quot; existeix: %s"
data/test/README CHANGED
@@ -8,3 +8,9 @@ $ sh test.sh
8
8
 
9
9
  You can set some options. See --help.
10
10
  $ sh test.sh --help
11
+
12
+ = Tasks
13
+ rake createdb # Build the MySQL test databases
14
+ rake dropdb # Drop the MySQL test databases
15
+ rake rebuilddb # Rebuild the MySQL test databases
16
+
data/test/Rakefile CHANGED
@@ -21,7 +21,7 @@ task :dropdb do
21
21
  end
22
22
 
23
23
  desc 'Rebuild the MySQL test databases'
24
- task :rebuilddb => [:dropdb, :builddb]
24
+ task :rebuilddb => [:dropdb, :createdb]
25
25
 
26
26
  require 'gettext/utils'
27
27
 
@@ -0,0 +1,3 @@
1
+ class Book < ActiveRecord::Base
2
+ untranslate :title
3
+ end
@@ -0,0 +1,3 @@
1
+ class User < ActiveRecord::Base
2
+ untranslate_all
3
+ end
@@ -4,6 +4,7 @@ $:.unshift(File.dirname(__FILE__) + '/../lib')
4
4
  require 'rubygems'
5
5
  require 'gettext'
6
6
  require 'gettext/active_record'
7
+ require 'gettext/parser/active_record'
7
8
  require 'test/unit'
8
9
  require 'active_record'
9
10
  require 'active_record/fixtures'
@@ -14,7 +15,25 @@ require 'fixtures/reply'
14
15
  require 'fixtures/developer'
15
16
  require 'logger'
16
17
 
17
- puts "This test requires MySQL"
18
+ version = /activerecord-([^\/]+)/.match($:.join)[1]
19
+
20
+ #if version > "1.15.0"
21
+ # ticket 6657 on dev.rubyonrails.org require this but it becames removed(?)
22
+ # AR_6657 = true
23
+ #else
24
+ AR_6657 = false
25
+ #end
26
+ puts "The activerecord svn version is #{$1}"
27
+
28
+
29
+ begin
30
+ `rake dropdb`
31
+ rescue
32
+ end
33
+ begin
34
+ `rake createdb`
35
+ rescue
36
+ end
18
37
 
19
38
  ActiveRecord::Base.establish_connection(
20
39
  :adapter => "mysql",
@@ -61,7 +80,7 @@ class ValidationsTest < Test::Unit::TestCase
61
80
  r.save
62
81
  assert r.errors.invalid?("content"), "A reply without content should mark that attribute as invalid"
63
82
  assert_equal "空です。", r.errors.on("content"), "A reply without content should contain an error"
64
- assert_equal "内容 空です。", r.errors.full_messages[0], "A reply without content should contain an error"
83
+ assert_equal "Reply内容 空です。", r.errors.full_messages[0], "A reply without content should contain an error"
65
84
  assert_equal 1, r.errors.count
66
85
 
67
86
  GetText.set_locale_all "en"
@@ -77,11 +96,11 @@ class ValidationsTest < Test::Unit::TestCase
77
96
  assert !r.save
78
97
 
79
98
  assert r.errors.invalid?("title"), "A reply without title should mark that attribute as invalid"
80
- assert_equal "タイトル 空です。", r.errors.full_messages[0]
99
+ assert_equal "Replyタイトル 空です。", r.errors.full_messages[0]
81
100
  assert_equal "空です。", r.errors.on("title")
82
101
 
83
102
  assert r.errors.invalid?("content"), "A reply without content should mark that attribute as invalid"
84
- assert_equal "内容 空です。", r.errors.full_messages[1]
103
+ assert_equal "Reply内容 空です。", r.errors.full_messages[1]
85
104
  assert_equal "空です。", r.errors.on("content")
86
105
 
87
106
  assert_equal 2, r.errors.count
@@ -107,7 +126,7 @@ class ValidationsTest < Test::Unit::TestCase
107
126
  r.title = "Wrong Create"
108
127
  assert !r.save
109
128
  assert r.errors.invalid?("title"), "A reply with a bad title should mark that attribute as invalid"
110
- assert_equal "タイトル が不正に生成されました。", r.errors.full_messages[0]
129
+ assert_equal "Replyタイトル が不正に生成されました。", r.errors.full_messages[0]
111
130
  assert_equal "が不正に生成されました。", r.errors.on("title")
112
131
 
113
132
  GetText.set_locale_all "en"
@@ -129,7 +148,7 @@ class ValidationsTest < Test::Unit::TestCase
129
148
  r.title = "Wrong Update"
130
149
  assert !r.save, "Second save should fail"
131
150
  assert r.errors.invalid?("title"), "A reply with a bad title should mark that attribute as invalid"
132
- assert_equal "タイトル が不正に更新されました。", r.errors.full_messages[0]
151
+ assert_equal "Replyタイトル が不正に更新されました。", r.errors.full_messages[0]
133
152
  assert_equal "が不正に更新されました。", r.errors.on("title")
134
153
 
135
154
  GetText.set_locale_all "en"
@@ -146,6 +165,56 @@ class ValidationsTest < Test::Unit::TestCase
146
165
  assert_equal "is Wrong Update", r.errors.on("title")
147
166
  end
148
167
 
168
+ def test_invalid_record_exception
169
+ assert_raises(ActiveRecord::RecordInvalid) { Reply.create! }
170
+ assert_raises(ActiveRecord::RecordInvalid) { Reply.new.save! }
171
+
172
+ GetText.set_locale_all "ja_JP.UTF-8"
173
+ begin
174
+ r = Reply.new
175
+ r.save!
176
+ flunk
177
+ rescue ActiveRecord::RecordInvalid => invalid
178
+ assert_equal r, invalid.record
179
+ assert_equal "入力値が正しくありません。: Replyタイトル 空です。, Reply内容 空です。", invalid.message
180
+ end
181
+
182
+ GetText.set_locale_all "en"
183
+ begin
184
+ r = Reply.new
185
+ r.save!
186
+ flunk
187
+ rescue ActiveRecord::RecordInvalid => invalid
188
+ assert_equal r, invalid.record
189
+ assert_equal "Validation failed: Title Empty, Content Empty", invalid.message
190
+ end
191
+ end
192
+
193
+ def test_scoped_create_without_attributes
194
+ Reply.with_scope(:create => {}) do
195
+ assert_raises(ActiveRecord::RecordInvalid) { Reply.create! }
196
+ end
197
+
198
+ GetText.set_locale_all "ja_JP.UTF-8"
199
+ Reply.with_scope(:create => {}) do
200
+ begin
201
+ Reply.create!
202
+ rescue ActiveRecord::RecordInvalid => invalid
203
+ assert_equal "入力値が正しくありません。: Replyタイトル 空です。, Reply内容 空です。", invalid.message
204
+ end
205
+ end
206
+
207
+ GetText.set_locale_all "en"
208
+ Reply.with_scope(:create => {}) do
209
+ begin
210
+ Reply.create!
211
+ rescue ActiveRecord::RecordInvalid => invalid
212
+ assert_equal "Validation failed: Title Empty, Content Empty", invalid.message
213
+ end
214
+ end
215
+ end
216
+
217
+
149
218
  def test_single_error_per_attr_iteration
150
219
  GetText.set_locale_all "ja_JP.UTF-8"
151
220
  r = Reply.new
@@ -177,8 +246,8 @@ class ValidationsTest < Test::Unit::TestCase
177
246
 
178
247
  errors = []
179
248
  r.errors.each_full { |error| errors << error }
180
- assert_equal "タイトル が不正に生成されました。", errors[0]
181
- assert_equal "タイトル は内容がミスマッチです。", errors[1]
249
+ assert_equal "Replyタイトル が不正に生成されました。", errors[0]
250
+ assert_equal "Replyタイトル は内容がミスマッチです。", errors[1]
182
251
  assert_equal 2, r.errors.count
183
252
 
184
253
  GetText.set_locale_all "en"
@@ -207,7 +276,7 @@ class ValidationsTest < Test::Unit::TestCase
207
276
 
208
277
  assert_equal "リプライはdignifyされてません。", r.errors.on_base
209
278
 
210
- assert errors.include?("タイトル 空です。")
279
+ assert errors.include?("Replyタイトル 空です。")
211
280
  assert errors.include?("リプライはdignifyされてません。")
212
281
  assert_equal 2, r.errors.count
213
282
 
@@ -498,6 +567,58 @@ class ValidationsTest < Test::Unit::TestCase
498
567
 
499
568
  assert_raise(ArgumentError) { Topic.validates_format_of(:title, :content) }
500
569
  end
570
+
571
+ def test_validate_format_numeric
572
+ Topic.validates_format_of(:title, :content, :with => /^[1-9][0-9]*$/, :message => N_("is bad data"))
573
+
574
+ GetText.set_locale_all "ja_JP.UTF-8"
575
+ t = Topic.create("title" => "72x", "content" => "6789")
576
+ assert !t.valid?, "Shouldn't be valid"
577
+ assert !t.save, "Shouldn't save because it's invalid"
578
+ assert_equal "は悪いデータです。", t.errors.on(:title)
579
+ assert_nil t.errors.on(:content)
580
+
581
+ t.title = "-11"
582
+ assert !t.valid?, "Shouldn't be valid"
583
+
584
+ t.title = "03"
585
+ assert !t.valid?, "Shouldn't be valid"
586
+
587
+ t.title = "z44"
588
+ assert !t.valid?, "Shouldn't be valid"
589
+
590
+ t.title = "5v7"
591
+ assert !t.valid?, "Shouldn't be valid"
592
+
593
+ t.title = "1"
594
+
595
+ assert t.save
596
+ assert_nil t.errors.on(:title)
597
+
598
+ GetText.set_locale_all "en"
599
+ t = Topic.create("title" => "72x", "content" => "6789")
600
+ assert !t.valid?, "Shouldn't be valid"
601
+ assert !t.save, "Shouldn't save because it's invalid"
602
+ assert_equal "is bad data", t.errors.on(:title)
603
+ assert_nil t.errors.on(:content)
604
+
605
+ t.title = "-11"
606
+ assert !t.valid?, "Shouldn't be valid"
607
+
608
+ t.title = "03"
609
+ assert !t.valid?, "Shouldn't be valid"
610
+
611
+ t.title = "z44"
612
+ assert !t.valid?, "Shouldn't be valid"
613
+
614
+ t.title = "5v7"
615
+ assert !t.valid?, "Shouldn't be valid"
616
+
617
+ t.title = "1"
618
+
619
+ assert t.save
620
+ assert_nil t.errors.on(:title)
621
+ end
501
622
 
502
623
  def test_validates_inclusion_of
503
624
  Topic.validates_inclusion_of( :title, :in => %w( a b c d e f g ) )
@@ -1001,13 +1122,20 @@ class ValidationsTest < Test::Unit::TestCase
1001
1122
  d = Developer.new
1002
1123
  d.salary = "0"
1003
1124
  assert !d.valid?
1004
- assert_equal "給料は'シングル' \"ダブル\"クオートを含む。", d.errors.on(:salary).first
1005
-
1125
+ if AR_6657
1126
+ assert_equal "給料は'シングル' \"ダブル\"クオートを含む。", d.errors.on(:salary).last
1127
+ else
1128
+ assert_equal "給料は'シングル' \"ダブル\"クオートを含む。", d.errors.on(:salary).first
1129
+ end
1006
1130
  GetText.set_locale_all "en"
1007
1131
  d = Developer.new
1008
1132
  d.salary = "0"
1009
1133
  assert !d.valid?
1010
- assert_equal "Salary contains 'single' and \"double\" quotes", d.errors.on(:salary).first
1134
+ if AR_6657
1135
+ assert_equal "Salary contains 'single' and \"double\" quotes", d.errors.on(:salary).last
1136
+ else
1137
+ assert_equal "Salary contains 'single' and \"double\" quotes", d.errors.on(:salary).first
1138
+ end
1011
1139
  end
1012
1140
 
1013
1141
  def test_validates_acceptance_of_with_custom_error_using_quotes
@@ -1017,13 +1145,20 @@ class ValidationsTest < Test::Unit::TestCase
1017
1145
  d = Developer.new
1018
1146
  d.salary = "0"
1019
1147
  assert !d.valid?
1020
- assert_equal "この文字列は'シングル' \"ダブル\"クオートを含む。", d.errors.on(:salary).first
1021
-
1148
+ if AR_6657
1149
+ assert_equal "この文字列は'シングル' \"ダブル\"クオートを含む。", d.errors.on(:salary).last
1150
+ else
1151
+ assert_equal "この文字列は'シングル' \"ダブル\"クオートを含む。", d.errors.on(:salary).first
1152
+ end
1022
1153
  GetText.set_locale_all "en"
1023
1154
  d = Developer.new
1024
1155
  d.salary = "0"
1025
1156
  assert !d.valid?
1026
- assert_equal "This string contains 'single' and \"double\" quotes", d.errors.on(:salary).first
1157
+ if AR_6657
1158
+ assert_equal "This string contains 'single' and \"double\" quotes", d.errors.on(:salary).last
1159
+ else
1160
+ assert_equal "This string contains 'single' and \"double\" quotes", d.errors.on(:salary).first
1161
+ end
1027
1162
  end
1028
1163
 
1029
1164
  def test_validates_confirmation_of_with_custom_error_using_quotes_fn
@@ -1034,14 +1169,21 @@ class ValidationsTest < Test::Unit::TestCase
1034
1169
  d.name = "John"
1035
1170
  d.name_confirmation = "Johnny"
1036
1171
  assert !d.valid?
1037
- assert_equal "開発者名は'シングル' \"ダブル\"クオートを含む。", d.errors.on(:name).first
1038
-
1172
+ if AR_6657
1173
+ assert_equal "開発者名は'シングル' \"ダブル\"クオートを含む。", d.errors.on(:name).last
1174
+ else
1175
+ assert_equal "開発者名は'シングル' \"ダブル\"クオートを含む。", d.errors.on(:name).first
1176
+ end
1039
1177
  GetText.set_locale_all "en"
1040
1178
  d = Developer.new
1041
1179
  d.name = "John"
1042
1180
  d.name_confirmation = "Johnny"
1043
1181
  assert !d.valid?
1044
- assert_equal "Name contains 'single' and \"double\" quotes", d.errors.on(:name).first
1182
+ if AR_6657
1183
+ assert_equal "Name contains 'single' and \"double\" quotes", d.errors.on(:name).last
1184
+ else
1185
+ assert_equal "Name contains 'single' and \"double\" quotes", d.errors.on(:name).first
1186
+ end
1045
1187
  end
1046
1188
 
1047
1189
  def test_validates_confirmation_of_with_custom_error_using_quotes
@@ -1069,13 +1211,21 @@ class ValidationsTest < Test::Unit::TestCase
1069
1211
  d = Developer.new
1070
1212
  d.name = "John 32"
1071
1213
  assert !d.valid?
1072
- assert_equal "開発者名は'シングル' \"ダブル\"クオートを含む。", d.errors.on(:name).first
1214
+ if AR_6657
1215
+ assert_equal "開発者名は'シングル' \"ダブル\"クオートを含む。", d.errors.on(:name).last
1216
+ else
1217
+ assert_equal "開発者名は'シングル' \"ダブル\"クオートを含む。", d.errors.on(:name).first
1218
+ end
1073
1219
 
1074
1220
  GetText.set_locale_all "en"
1075
1221
  d = Developer.new
1076
1222
  d.name = "John 32"
1077
1223
  assert !d.valid?
1078
- assert_equal "Name contains 'single' and \"double\" quotes", d.errors.on(:name).first
1224
+ if AR_6657
1225
+ assert_equal "Name contains 'single' and \"double\" quotes", d.errors.on(:name).last
1226
+ else
1227
+ assert_equal "Name contains 'single' and \"double\" quotes", d.errors.on(:name).first
1228
+ end
1079
1229
  end
1080
1230
 
1081
1231
  def test_validates_format_of_with_custom_error_using_quotes
@@ -1101,12 +1251,20 @@ class ValidationsTest < Test::Unit::TestCase
1101
1251
  d = Developer.new
1102
1252
  d.salary = "90,000"
1103
1253
  assert !d.valid?
1104
- assert_equal "給料は'シングル' \"ダブル\"クオートを含む。", d.errors.on(:salary).first
1254
+ if AR_6657
1255
+ assert_equal "給料は'シングル' \"ダブル\"クオートを含む。", d.errors.on(:salary).last
1256
+ else
1257
+ assert_equal "給料は'シングル' \"ダブル\"クオートを含む。", d.errors.on(:salary).first
1258
+ end
1105
1259
  GetText.set_locale_all "en"
1106
1260
  d = Developer.new
1107
1261
  d.salary = "90,000"
1108
1262
  assert !d.valid?
1109
- assert_equal "Salary contains 'single' and \"double\" quotes", d.errors.on(:salary).first
1263
+ if AR_6657
1264
+ assert_equal "Salary contains 'single' and \"double\" quotes", d.errors.on(:salary).last
1265
+ else
1266
+ assert_equal "Salary contains 'single' and \"double\" quotes", d.errors.on(:salary).first
1267
+ end
1110
1268
  end
1111
1269
 
1112
1270
  def test_validates_inclusion_of_with_custom_error_using_quotes
@@ -1116,14 +1274,20 @@ class ValidationsTest < Test::Unit::TestCase
1116
1274
  d = Developer.new
1117
1275
  d.salary = "90,000"
1118
1276
  assert !d.valid?
1119
-
1120
- assert_equal "この文字列は'シングル' \"ダブル\"クオートを含む。", d.errors.on(:salary).first
1121
-
1277
+ if AR_6657
1278
+ assert_equal "この文字列は'シングル' \"ダブル\"クオートを含む。", d.errors.on(:salary).last
1279
+ else
1280
+ assert_equal "この文字列は'シングル' \"ダブル\"クオートを含む。", d.errors.on(:salary).first
1281
+ end
1122
1282
  GetText.set_locale_all "en"
1123
1283
  d = Developer.new
1124
1284
  d.salary = "90,000"
1125
1285
  assert !d.valid?
1126
- assert_equal "This string contains 'single' and \"double\" quotes", d.errors.on(:salary).first
1286
+ if AR_6657
1287
+ assert_equal "This string contains 'single' and \"double\" quotes", d.errors.on(:salary).last
1288
+ else
1289
+ assert_equal "This string contains 'single' and \"double\" quotes", d.errors.on(:salary).first
1290
+ end
1127
1291
  end
1128
1292
 
1129
1293
  def test_validates_length_of_with_custom_too_long_using_quotes_fn
@@ -1133,13 +1297,20 @@ class ValidationsTest < Test::Unit::TestCase
1133
1297
  d = Developer.new
1134
1298
  d.name = "Jeffrey"
1135
1299
  assert !d.valid?
1136
- assert_equal "開発者名は'シングル' \"ダブル\"クオートを含む。", d.errors.on(:name).first
1137
-
1300
+ if AR_6657
1301
+ assert_equal "開発者名は'シングル' \"ダブル\"クオートを含む。", d.errors.on(:name).last
1302
+ else
1303
+ assert_equal "開発者名は'シングル' \"ダブル\"クオートを含む。", d.errors.on(:name).first
1304
+ end
1138
1305
  GetText.set_locale_all "en"
1139
1306
  d = Developer.new
1140
1307
  d.name = "Jeffrey"
1141
1308
  assert !d.valid?
1142
- assert_equal "Name contains 'single' and \"double\" quotes", d.errors.on(:name).first
1309
+ if AR_6657
1310
+ assert_equal "Name contains 'single' and \"double\" quotes", d.errors.on(:name).last
1311
+ else
1312
+ assert_equal "Name contains 'single' and \"double\" quotes", d.errors.on(:name).first
1313
+ end
1143
1314
  end
1144
1315
 
1145
1316
  def test_validates_length_of_with_custom_too_long_using_quotes
@@ -1149,13 +1320,13 @@ class ValidationsTest < Test::Unit::TestCase
1149
1320
  d = Developer.new
1150
1321
  d.name = "Jeffrey"
1151
1322
  assert !d.valid?
1152
- assert_equal "この文字列は'シングル' \"ダブル\"クオートを含む。", d.errors.on(:name).first
1323
+ assert_equal "この文字列は'シングル' \"ダブル\"クオートを含む。", d.errors.on(:name).last
1153
1324
 
1154
1325
  GetText.set_locale_all "en"
1155
1326
  d = Developer.new
1156
1327
  d.name = "Jeffrey"
1157
1328
  assert !d.valid?
1158
- assert_equal "This string contains 'single' and \"double\" quotes", d.errors.on(:name).first
1329
+ assert_equal "This string contains 'single' and \"double\" quotes", d.errors.on(:name).last
1159
1330
  end
1160
1331
 
1161
1332
  def test_validates_length_of_with_custom_too_short_using_quotes_fn
@@ -1164,13 +1335,20 @@ class ValidationsTest < Test::Unit::TestCase
1164
1335
  d = Developer.new
1165
1336
  d.name = "Joe"
1166
1337
  assert !d.valid?
1167
- assert_equal "開発者名は'シングル' \"ダブル\"クオートを含む。", d.errors.on(:name).first
1168
-
1338
+ if AR_6657
1339
+ assert_equal "開発者名は'シングル' \"ダブル\"クオートを含む。", d.errors.on(:name).last
1340
+ else
1341
+ assert_equal "開発者名は'シングル' \"ダブル\"クオートを含む。", d.errors.on(:name).first
1342
+ end
1169
1343
  GetText.set_locale_all "en"
1170
1344
  d = Developer.new
1171
1345
  d.name = "Joe"
1172
1346
  assert !d.valid?
1173
- assert_equal "Name contains 'single' and \"double\" quotes", d.errors.on(:name).first
1347
+ if AR_6657
1348
+ assert_equal "Name contains 'single' and \"double\" quotes", d.errors.on(:name).last
1349
+ else
1350
+ assert_equal "Name contains 'single' and \"double\" quotes", d.errors.on(:name).first
1351
+ end
1174
1352
  end
1175
1353
 
1176
1354
  def test_validates_length_of_with_custom_too_short_using_quotes
@@ -1179,13 +1357,13 @@ class ValidationsTest < Test::Unit::TestCase
1179
1357
  d = Developer.new
1180
1358
  d.name = "Joe"
1181
1359
  assert !d.valid?
1182
- assert_equal "この文字列は'シングル' \"ダブル\"クオートを含む。", d.errors.on(:name).first
1360
+ assert_equal "この文字列は'シングル' \"ダブル\"クオートを含む。", d.errors.on(:name).last
1183
1361
 
1184
1362
  GetText.set_locale_all "en"
1185
1363
  d = Developer.new
1186
1364
  d.name = "Joe"
1187
1365
  assert !d.valid?
1188
- assert_equal "This string contains 'single' and \"double\" quotes", d.errors.on(:name).first
1366
+ assert_equal "This string contains 'single' and \"double\" quotes", d.errors.on(:name).last
1189
1367
  end
1190
1368
 
1191
1369
  def test_validates_length_of_with_custom_message_using_quotes_fn
@@ -1194,13 +1372,20 @@ class ValidationsTest < Test::Unit::TestCase
1194
1372
  d = Developer.new
1195
1373
  d.name = "Joe"
1196
1374
  assert !d.valid?
1197
- assert_equal "開発者名は'シングル' \"ダブル\"クオートを含む。", d.errors.on(:name).first
1198
-
1375
+ if AR_6657
1376
+ assert_equal "開発者名は'シングル' \"ダブル\"クオートを含む。", d.errors.on(:name).last
1377
+ else
1378
+ assert_equal "開発者名は'シングル' \"ダブル\"クオートを含む。", d.errors.on(:name).first
1379
+ end
1199
1380
  GetText.set_locale_all "en"
1200
1381
  d = Developer.new
1201
1382
  d.name = "Joe"
1202
1383
  assert !d.valid?
1203
- assert_equal "Name contains 'single' and \"double\" quotes", d.errors.on(:name).first
1384
+ if AR_6657
1385
+ assert_equal "Name contains 'single' and \"double\" quotes", d.errors.on(:name).last
1386
+ else
1387
+ assert_equal "Name contains 'single' and \"double\" quotes", d.errors.on(:name).first
1388
+ end
1204
1389
  end
1205
1390
 
1206
1391
  def test_validates_length_of_with_custom_message_using_quotes
@@ -1209,13 +1394,20 @@ class ValidationsTest < Test::Unit::TestCase
1209
1394
  d = Developer.new
1210
1395
  d.name = "Joe"
1211
1396
  assert !d.valid?
1212
- assert_equal "この文字列は'シングル' \"ダブル\"クオートを含む。", d.errors.on(:name).first
1213
-
1397
+ if AR_6657
1398
+ assert_equal "この文字列は'シングル' \"ダブル\"クオートを含む。", d.errors.on(:name).last
1399
+ else
1400
+ assert_equal "この文字列は'シングル' \"ダブル\"クオートを含む。", d.errors.on(:name).first
1401
+ end
1214
1402
  GetText.set_locale_all "en"
1215
1403
  d = Developer.new
1216
1404
  d.name = "Joe"
1217
1405
  assert !d.valid?
1218
- assert_equal "This string contains 'single' and \"double\" quotes", d.errors.on(:name).first
1406
+ if AR_6657
1407
+ assert_equal "This string contains 'single' and \"double\" quotes", d.errors.on(:name).last
1408
+ else
1409
+ assert_equal "This string contains 'single' and \"double\" quotes", d.errors.on(:name).first
1410
+ end
1219
1411
  end
1220
1412
 
1221
1413
  def test_validates_presence_of_with_custom_message_using_quotes_fn
@@ -1226,13 +1418,20 @@ class ValidationsTest < Test::Unit::TestCase
1226
1418
  d.name = "Joe"
1227
1419
  assert !d.valid?
1228
1420
 
1229
- assert_equal "存在しないは'シングル' \"ダブル\"クオートを含む。", d.errors.on(:non_existent).first
1230
-
1421
+ if AR_6657
1422
+ assert_equal "存在しないは'シングル' \"ダブル\"クオートを含む。", d.errors.on(:non_existent).last
1423
+ else
1424
+ assert_equal "存在しないは'シングル' \"ダブル\"クオートを含む。", d.errors.on(:non_existent).first
1425
+ end
1231
1426
  GetText.set_locale_all "en"
1232
1427
  d = Developer.new
1233
1428
  d.name = "Joe"
1234
1429
  assert !d.valid?
1235
- assert_equal "Non existent contains 'single' and \"double\" quotes", d.errors.on(:non_existent).first
1430
+ if AR_6657
1431
+ assert_equal "Non existent contains 'single' and \"double\" quotes", d.errors.on(:non_existent).last
1432
+ else
1433
+ assert_equal "Non existent contains 'single' and \"double\" quotes", d.errors.on(:non_existent).first
1434
+ end
1236
1435
  end
1237
1436
 
1238
1437
  def test_validates_presence_of_with_custom_message_using_quotes
@@ -1242,7 +1441,6 @@ class ValidationsTest < Test::Unit::TestCase
1242
1441
  d.name = "Joe"
1243
1442
  assert !d.valid?
1244
1443
  assert_equal "この文字列は'シングル' \"ダブル\"クオートを含む。", d.errors.on(:non_existent)
1245
-
1246
1444
  GetText.set_locale_all "en"
1247
1445
  d = Developer.new
1248
1446
  d.name = "Joe"
@@ -1257,13 +1455,21 @@ class ValidationsTest < Test::Unit::TestCase
1257
1455
  d = Developer.new
1258
1456
  d.name = "David"
1259
1457
  assert !d.valid?
1260
- assert_equal d.errors.on(:name).first, "開発者名は'シングル' \"ダブル\"クオートを含む。"
1458
+ if AR_6657
1459
+ assert_equal d.errors.on(:name).last, "開発者名は'シングル' \"ダブル\"クオートを含む。"
1460
+ else
1461
+ assert_equal d.errors.on(:name).first, "開発者名は'シングル' \"ダブル\"クオートを含む。"
1462
+ end
1261
1463
 
1262
1464
  GetText.set_locale_all "en"
1263
1465
  d = Developer.new
1264
1466
  d.name = "David"
1265
1467
  assert !d.valid?
1266
- assert_equal d.errors.on(:name).first, "Name contains 'single' and \"double\" quotes"
1468
+ if AR_6657
1469
+ assert_equal d.errors.on(:name).last, "Name contains 'single' and \"double\" quotes"
1470
+ else
1471
+ assert_equal d.errors.on(:name).first, "Name contains 'single' and \"double\" quotes"
1472
+ end
1267
1473
  end
1268
1474
 
1269
1475
  def test_validates_uniqueness_of_with_custom_message_using_quotes
@@ -1273,18 +1479,18 @@ class ValidationsTest < Test::Unit::TestCase
1273
1479
  d = Developer.new
1274
1480
  d.name = "David"
1275
1481
  assert !d.valid?
1276
- assert_equal d.errors.on(:name).first, "この文字列は'シングル' \"ダブル\"クオートを含む。"
1482
+ assert_equal d.errors.on(:name).last, "この文字列は'シングル' \"ダブル\"クオートを含む。"
1277
1483
 
1278
1484
  GetText.set_locale_all "en"
1279
1485
  d = Developer.new
1280
1486
  d.name = "David"
1281
1487
  assert !d.valid?
1282
- assert_equal d.errors.on(:name).first, "This string contains 'single' and \"double\" quotes"
1488
+ assert_equal d.errors.on(:name).last, "This string contains 'single' and \"double\" quotes"
1283
1489
  end
1284
1490
 
1285
1491
  def test_validates_associated_with_custom_message_using_quotes_fn
1286
- Reply.validates_associated( :topic )
1287
- Topic.validates_presence_of( :content )
1492
+ Reply.validates_associated :topic, :message => N_("%{fn} contains 'single' and \"double\" quotes")
1493
+ Topic.validates_presence_of :content
1288
1494
  r = Reply.create("title" => "A reply", "content" => "with content!")
1289
1495
  r.topic = Topic.create("title" => "uhohuhoh")
1290
1496
  assert !r.valid?
@@ -1293,25 +1499,29 @@ class ValidationsTest < Test::Unit::TestCase
1293
1499
  assert r.valid?
1294
1500
 
1295
1501
  GetText.set_locale_all "ja_JP.UTF-8"
1296
- Reply.validates_associated :topic, :message => N_("%{fn} contains 'single' and \"double\" quotes")
1297
- Topic.validates_presence_of :content
1298
1502
  r = Reply.create("title" => "A reply", "content" => "with content!")
1299
1503
  r.topic = Topic.create("title" => "uhohuhoh")
1300
1504
  assert !r.valid?
1301
- assert_equal "トピックは'シングル' \"ダブル\"クオートを含む。", r.errors.full_messages[0]
1302
- assert_equal "トピックは'シングル' \"ダブル\"クオートを含む。", r.errors.on(:topic).first
1505
+ if AR_6657
1506
+ assert_equal "Replyトピックは'シングル' \"ダブル\"クオートを含む。", r.errors.on(:topic).last
1507
+ else
1508
+ assert_equal "Replyトピックは'シングル' \"ダブル\"クオートを含む。", r.errors.on(:topic).first
1509
+ end
1303
1510
 
1304
1511
  GetText.set_locale_all "en"
1305
1512
  r = Reply.create("title" => "A reply", "content" => "with content!")
1306
1513
  r.topic = Topic.create("title" => "uhohuhoh")
1307
1514
  assert !r.valid?
1308
- assert_equal "Topic contains 'single' and \"double\" quotes", r.errors.full_messages[0]
1309
- assert_equal "Topic contains 'single' and \"double\" quotes", r.errors.on(:topic).first
1515
+ if AR_6657
1516
+ assert_equal "Topic contains 'single' and \"double\" quotes", r.errors.on(:topic).last
1517
+ else
1518
+ assert_equal "Topic contains 'single' and \"double\" quotes", r.errors.on(:topic).first
1519
+ end
1310
1520
  end
1311
1521
 
1312
1522
  def test_validates_associated_with_custom_message_using_quotes
1313
- Reply.validates_associated( :topic )
1314
- Topic.validates_presence_of( :content )
1523
+ Reply.validates_associated :topic, :message => N_("This string contains 'single' and \"double\" quotes")
1524
+ Topic.validates_presence_of :content
1315
1525
  r = Reply.create("title" => "A reply", "content" => "with content!")
1316
1526
  r.topic = Topic.create("title" => "uhohuhoh")
1317
1527
  assert !r.valid?
@@ -1320,20 +1530,16 @@ class ValidationsTest < Test::Unit::TestCase
1320
1530
  assert r.valid?
1321
1531
 
1322
1532
  GetText.set_locale_all "ja_JP.UTF-8"
1323
- Reply.validates_associated :topic, :message => N_("This string contains 'single' and \"double\" quotes")
1324
- Topic.validates_presence_of :content
1325
1533
  r = Reply.create("title" => "A reply", "content" => "with content!")
1326
1534
  r.topic = Topic.create("title" => "uhohuhoh")
1327
1535
  assert !r.valid?
1328
- assert_equal "トピック この文字列は'シングル' \"ダブル\"クオートを含む。", r.errors.full_messages[0]
1329
- assert_equal "この文字列は'シングル' \"ダブル\"クオートを含む。", r.errors.on(:topic).first
1536
+ assert_equal "この文字列は'シングル' \"ダブル\"クオートを含む。", r.errors.on(:topic)
1330
1537
 
1331
1538
  GetText.set_locale_all "en"
1332
1539
  r = Reply.create("title" => "A reply", "content" => "with content!")
1333
1540
  r.topic = Topic.create("title" => "uhohuhoh")
1334
1541
  assert !r.valid?
1335
- assert_equal "Topic This string contains 'single' and \"double\" quotes", r.errors.full_messages[0]
1336
- assert_equal "This string contains 'single' and \"double\" quotes", r.errors.on(:topic).first
1542
+ assert_equal "This string contains 'single' and \"double\" quotes", r.errors.on(:topic)
1337
1543
  end
1338
1544
 
1339
1545
  def test_conditional_validation_using_method_true_fn
@@ -1456,7 +1662,7 @@ class ValidationsTest < Test::Unit::TestCase
1456
1662
  r = Reply.create("title" => "A reply", "content" => "with content!")
1457
1663
  # In this case, rgettext doesn't pick up the names of relations as msgid,
1458
1664
  # so you need to define N_() in the model class
1459
- assert_equal "トピックを入力してください。", r.errors.on(:topic)
1665
+ assert_equal "Replyトピックを入力してください。", r.errors.on(:topic)
1460
1666
 
1461
1667
  GetText.set_locale_all "en"
1462
1668
  r = Reply.create("title" => "A reply", "content" => "with content!")
@@ -1464,6 +1670,41 @@ class ValidationsTest < Test::Unit::TestCase
1464
1670
  assert_equal "Topic can't be blank", r.errors.full_messages[0]
1465
1671
  end
1466
1672
 
1673
+ def test_errors_to_xml
1674
+ GetText.set_locale_all "ja_JP.UTF-8"
1675
+ r = Reply.new :title => "Wrong Create"
1676
+ assert !r.valid?
1677
+ xml = r.errors.to_xml(:skip_instruct => true)
1678
+ assert_equal "<errors>", xml.first(8)
1679
+ assert xml.include?("<error>Reply&#12479;&#12452;&#12488;&#12523; &#12364;&#19981;&#27491;&#12395;&#29983;&#25104;&#12373;&#12428;&#12414;&#12375;&#12383;&#12290;</error>")
1680
+ assert xml.include?("<error>Reply&#20869;&#23481; &#31354;&#12391;&#12377;&#12290;</error>")
1681
+
1682
+ GetText.set_locale_all "en"
1683
+ r = Reply.new :title => "Wrong Create"
1684
+ assert !r.valid?
1685
+ xml = r.errors.to_xml(:skip_instruct => true)
1686
+ assert_equal "<errors>", xml.first(8)
1687
+ assert xml.include?("<error>Title is Wrong Create</error>")
1688
+ assert xml.include?("<error>Content Empty</error>")
1689
+ end
1690
+
1691
+ def test_validation_order
1692
+ if AR_6657
1693
+ Topic.validates_presence_of :title
1694
+ Topic.validates_length_of :title, :minimum => 2
1695
+
1696
+ GetText.set_locale_all "ja_JP.UTF-8"
1697
+ t = Topic.new("title" => "")
1698
+ assert !t.valid?
1699
+ assert_equal "タイトルを入力してください。", t.errors.on("title").first
1700
+
1701
+ GetText.set_locale_all "en"
1702
+ t = Topic.new("title" => "")
1703
+ assert !t.valid?
1704
+ assert_equal "Title can't be blank", t.errors.on("title").first
1705
+ end
1706
+ end
1707
+
1467
1708
  def test_default_validates_numericality_of
1468
1709
  GetText.set_locale_all "ja_JP.UTF-8"
1469
1710
  Topic.validates_numericality_of :approved
@@ -1475,5 +1716,44 @@ class ValidationsTest < Test::Unit::TestCase
1475
1716
  assert_equal "Approved is not a number", topic.errors.on(:approved)
1476
1717
  assert_equal "Approved is not a number", topic.errors.full_messages[0]
1477
1718
  end
1719
+
1720
+ def test_inherited_messages
1721
+ GetText.set_locale_all "ja_JP.UTF-8"
1722
+ Topic.validates_presence_of(:title, :content)
1723
+
1724
+ GetText.set_locale_all "ja_JP.UTF-8"
1725
+ t = Topic.create
1726
+ assert !t.save
1727
+ assert_equal "タイトルを入力してください。", t.errors.full_messages[0]
1728
+ assert_equal "内容を入力してください。", t.errors.full_messages[1]
1729
+ assert_equal "タイトルを入力してください。", t.errors.on(:title)
1730
+ assert_equal "内容を入力してください。", t.errors.on(:content)
1731
+
1732
+ t = Reply.create
1733
+ assert !t.save
1734
+ assert_equal "Replyタイトル 空です。", t.errors.full_messages[0]
1735
+ assert_equal "Reply内容 空です。", t.errors.full_messages[1]
1736
+ assert_equal "空です。", t.errors.on(:title)
1737
+ assert_equal "空です。", t.errors.on(:content)
1738
+
1739
+ t = Reply.create
1740
+ t.title = "Wrong Create"
1741
+ assert !t.save
1742
+ assert_equal "Replyタイトル が不正に生成されました。", t.errors.full_messages[0]
1743
+ assert_equal "Reply内容 空です。", t.errors.full_messages[1]
1744
+
1745
+ t = SillyReply.create
1746
+ assert !t.save
1747
+ assert_equal "Sillyタイトル 空です。", t.errors.full_messages[0]
1748
+ assert_equal "Silly内容 空です。", t.errors.full_messages[1]
1749
+ assert_equal "空です。", t.errors.on(:title)
1750
+ assert_equal "空です。", t.errors.on(:content)
1751
+
1752
+ t = SillyReply.create
1753
+ t.title = "Wrong Create"
1754
+ assert !t.save
1755
+ assert_equal "Sillyタイトル が不正に生成されました。", t.errors.full_messages[0]
1756
+ assert_equal "Silly内容 空です。", t.errors.full_messages[1]
1757
+ end
1478
1758
  end
1479
1759