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