utf-8 wide-char testing of message title - this will come in useful for other things...
[rails.git] / test / unit / message_test.rb
1 require File.dirname(__FILE__) + '/../test_helper'
2
3 class MessageTest < Test::Unit::TestCase
4   fixtures :messages, :users
5
6   EURO = "\xe2\x82\xac" #euro symbol
7
8   # This needs to be updated when new fixtures are added
9   # or removed.
10   def test_check_message_count
11     assert_equal 2, Message.count
12   end
13
14   def test_check_empty_message_fails
15     message = Message.new
16     assert !message.valid?
17     assert message.errors.invalid?(:title)
18     assert message.errors.invalid?(:body)
19     assert message.errors.invalid?(:sent_on)
20     assert true, message.message_read
21   end
22   
23   def test_validating_msgs
24     message = messages(:one)
25     assert message.valid?
26     massage = messages(:two)
27     assert message.valid?
28   end
29   
30   def test_invalid_send_recipient
31     message = messages(:one)
32     message.sender = nil
33     message.recipient = nil
34     assert !message.valid?
35   end
36
37   def test_utf8_roundtrip
38     (1..255).each do |i|
39       assert_message_ok('c', i)
40       assert_message_ok(EURO, i)
41     end
42   end
43
44   def test_length_oversize
45     assert_raise(ActiveRecord::RecordInvalid) { make_message('c', 256).save! }
46     assert_raise(ActiveRecord::RecordInvalid) { make_message(EURO, 256).save! }
47   end
48
49   def make_message(char, count)
50     message = messages(:one)
51     message.title = char * count
52     return message
53   end
54
55   def assert_message_ok(char, count)
56     message = make_message(char, count)
57     assert message.save!
58     response = message.class.find(message.id) # stand by for some ├╝ber-generalisation...
59     assert_equal char * count, response.title, "message with #{count} #{char} chars (i.e. #{char.length*count} bytes) fails"
60   end
61
62 end