1# -*- coding: UTF-8 -*-
2require 'test/unit'
3require 'erb'
4
5class TestERB < Test::Unit::TestCase
6  def test_result_encoding
7    erb = ERB.new("hello")
8    assert_equal __ENCODING__, erb.result.encoding
9
10    erb = ERB.new("こんにちは".encode("EUC-JP"))
11    assert_equal Encoding::EUC_JP, erb.result.encoding
12
13    erb = ERB.new("\xC4\xE3\xBA\xC3".force_encoding("EUC-CN"))
14    assert_equal Encoding::EUC_CN, erb.result.encoding
15
16    erb = ERB.new("γεια σας".encode("ISO-8859-7"))
17    assert_equal Encoding::ISO_8859_7, erb.result.encoding
18
19    assert_raise(ArgumentError, /ASCII compatible/) {
20      ERB.new("こんにちは".force_encoding("ISO-2022-JP")) # dummy encoding
21    }
22  end
23
24  def test_generate_magic_comment
25    erb = ERB.new("hello")
26    assert_match(/#coding:UTF-8/, erb.src)
27
28    erb = ERB.new("hello".force_encoding("EUC-JP"))
29    assert_match(/#coding:EUC-JP/, erb.src)
30
31    erb = ERB.new("hello".force_encoding("ISO-8859-9"))
32    assert_match(/#coding:ISO-8859-9/, erb.src)
33  end
34
35  def test_literal_encoding
36    erb = ERB.new("literal encoding is <%= 'hello'.encoding  %>")
37    assert_match(/literal encoding is UTF-8/, erb.result)
38
39    erb = ERB.new("literal encoding is <%= 'こんにちは'.encoding  %>".encode("EUC-JP"))
40    assert_match(/literal encoding is EUC-JP/, erb.result)
41
42    erb = ERB.new("literal encoding is <%= '\xC4\xE3\xBA\xC3'.encoding %>".force_encoding("EUC-CN"))
43    assert_match(/literal encoding is GB2312/, erb.result)
44  end
45
46  def test___ENCODING__
47    erb = ERB.new("__ENCODING__ is <%= __ENCODING__ %>")
48    assert_match(/__ENCODING__ is UTF-8/, erb.result)
49
50    erb = ERB.new("__ENCODING__ is <%= __ENCODING__ %>".force_encoding("EUC-JP"))
51    assert_match(/__ENCODING__ is EUC-JP/, erb.result)
52
53    erb = ERB.new("__ENCODING__ is <%= __ENCODING__ %>".force_encoding("Big5"))
54    assert_match(/__ENCODING__ is Big5/, erb.result)
55  end
56
57  def test_recognize_magic_comment
58    erb = ERB.new(<<-EOS.encode("EUC-KR"))
59<%# -*- coding: EUC-KR -*- %>
60���������������
61    EOS
62    assert_match(/#coding:EUC-KR/, erb.src)
63    assert_equal Encoding::EUC_KR, erb.result.encoding
64
65    erb = ERB.new(<<-EOS.encode("EUC-KR").force_encoding("ASCII-8BIT"))
66<%#-*- coding: EUC-KR -*-%>
67���������������
68    EOS
69    assert_match(/#coding:EUC-KR/, erb.src)
70    assert_equal Encoding::EUC_KR, erb.result.encoding
71
72    erb = ERB.new(<<-EOS.encode("EUC-KR").force_encoding("ASCII-8BIT"))
73<%# vim: tabsize=8 encoding=EUC-KR shiftwidth=2 expandtab %>
74���������������
75    EOS
76    assert_match(/#coding:EUC-KR/, erb.src)
77    assert_equal Encoding::EUC_KR, erb.result.encoding
78
79    erb = ERB.new(<<-EOS.encode("EUC-KR").force_encoding("ASCII-8BIT"))
80<%#coding:EUC-KR %>
81���������������
82    EOS
83    assert_match(/#coding:EUC-KR/, erb.src)
84    assert_equal Encoding::EUC_KR, erb.result.encoding
85
86    erb = ERB.new(<<-EOS.encode("EUC-KR").force_encoding("EUC-JP"))
87<%#coding:EUC-KR %>
88���������������
89    EOS
90    assert_match(/#coding:EUC-KR/, erb.src)
91    assert_equal Encoding::EUC_KR, erb.result.encoding
92  end
93
94  module M; end
95  def test_method_with_encoding
96    obj = Object.new
97    obj.extend(M)
98
99    erb = ERB.new(<<-EOS.encode("EUC-JP").force_encoding("ASCII-8BIT"))
100<%#coding:EUC-JP %>
101literal encoding is <%= '���������������'.encoding %>
102__ENCODING__ is <%= __ENCODING__ %>
103    EOS
104    erb.def_method(M, :m_from_magic_comment)
105
106    result = obj.m_from_magic_comment
107    assert_equal Encoding::EUC_JP, result.encoding
108    assert_match(/literal encoding is EUC-JP/, result)
109    assert_match(/__ENCODING__ is EUC-JP/, result)
110
111    erb = ERB.new(<<-EOS.encode("EUC-KR"))
112literal encoding is <%= '���������������'.encoding %>
113__ENCODING__ is <%= __ENCODING__ %>
114EOS
115    erb.def_method(M, :m_from_eval_encoding)
116    result = obj.m_from_eval_encoding
117    assert_equal Encoding::EUC_KR, result.encoding
118    assert_match(/literal encoding is EUC-KR/, result)
119    assert_match(/__ENCODING__ is EUC-KR/, result)
120  end
121end
122
123# vim:fileencoding=UTF-8
124