Chris@441: # Redmine - project management software Chris@441: # Copyright (C) 2006-2011 Jean-Philippe Lang Chris@441: # Chris@441: # This program is free software; you can redistribute it and/or Chris@441: # modify it under the terms of the GNU General Public License Chris@441: # as published by the Free Software Foundation; either version 2 Chris@441: # of the License, or (at your option) any later version. Chris@441: # Chris@441: # This program is distributed in the hope that it will be useful, Chris@441: # but WITHOUT ANY WARRANTY; without even the implied warranty of Chris@441: # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Chris@441: # GNU General Public License for more details. Chris@441: # Chris@441: # You should have received a copy of the GNU General Public License Chris@441: # along with this program; if not, write to the Free Software Chris@441: # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Chris@441: Chris@441: require File.expand_path('../../../../../test_helper', __FILE__) Chris@441: require 'iconv' Chris@441: Chris@441: class PdfTest < ActiveSupport::TestCase Chris@441: include Redmine::I18n Chris@441: Chris@441: def test_fix_text_encoding_nil Chris@441: set_language_if_valid 'ja' Chris@441: assert_equal 'CP932', l(:general_pdf_encoding) Chris@507: if RUBY_VERSION < '1.9' Chris@507: if RUBY_PLATFORM == 'java' Chris@507: ic = Iconv.new("SJIS", 'UTF-8') Chris@507: else Chris@507: ic = Iconv.new(l(:general_pdf_encoding), 'UTF-8') Chris@507: end Chris@441: end Chris@441: assert_equal '', Redmine::Export::PDF::RDMPdfEncoding::rdm_pdf_iconv(ic, nil) Chris@441: end Chris@441: Chris@441: def test_rdm_pdf_iconv_cannot_convert_ja_cp932 Chris@441: set_language_if_valid 'ja' Chris@441: assert_equal 'CP932', l(:general_pdf_encoding) Chris@441: if RUBY_VERSION < '1.9' Chris@507: if RUBY_PLATFORM == 'java' Chris@507: ic = Iconv.new("SJIS", 'UTF-8') Chris@507: else Chris@507: ic = Iconv.new(l(:general_pdf_encoding), 'UTF-8') Chris@507: end Chris@441: end Chris@441: utf8_txt_1 = "\xe7\x8b\x80\xe6\x85\x8b" Chris@441: utf8_txt_2 = "\xe7\x8b\x80\xe6\x85\x8b\xe7\x8b\x80" Chris@441: utf8_txt_3 = "\xe7\x8b\x80\xe7\x8b\x80\xe6\x85\x8b\xe7\x8b\x80" Chris@441: if utf8_txt_1.respond_to?(:force_encoding) Chris@441: txt_1 = Redmine::Export::PDF::RDMPdfEncoding::rdm_pdf_iconv(ic, utf8_txt_1) Chris@441: txt_2 = Redmine::Export::PDF::RDMPdfEncoding::rdm_pdf_iconv(ic, utf8_txt_2) Chris@441: txt_3 = Redmine::Export::PDF::RDMPdfEncoding::rdm_pdf_iconv(ic, utf8_txt_3) Chris@441: assert_equal "?\x91\xd4", txt_1 Chris@441: assert_equal "?\x91\xd4?", txt_2 Chris@441: assert_equal "??\x91\xd4?", txt_3 Chris@441: assert_equal "ASCII-8BIT", txt_1.encoding.to_s Chris@441: assert_equal "ASCII-8BIT", txt_2.encoding.to_s Chris@441: assert_equal "ASCII-8BIT", txt_3.encoding.to_s Chris@507: elsif RUBY_PLATFORM == 'java' Chris@507: assert_equal "??", Chris@507: Redmine::Export::PDF::RDMPdfEncoding::rdm_pdf_iconv(ic, utf8_txt_1) Chris@507: assert_equal "???", Chris@507: Redmine::Export::PDF::RDMPdfEncoding::rdm_pdf_iconv(ic, utf8_txt_2) Chris@507: assert_equal "????", Chris@507: Redmine::Export::PDF::RDMPdfEncoding::rdm_pdf_iconv(ic, utf8_txt_3) Chris@441: else Chris@441: assert_equal "???\x91\xd4", Chris@441: Redmine::Export::PDF::RDMPdfEncoding::rdm_pdf_iconv(ic, utf8_txt_1) Chris@441: assert_equal "???\x91\xd4???", Chris@441: Redmine::Export::PDF::RDMPdfEncoding::rdm_pdf_iconv(ic, utf8_txt_2) Chris@441: assert_equal "??????\x91\xd4???", Chris@441: Redmine::Export::PDF::RDMPdfEncoding::rdm_pdf_iconv(ic, utf8_txt_3) Chris@441: end Chris@441: end Chris@441: Chris@441: def test_rdm_pdf_iconv_invalid_utf8_should_be_replaced_en Chris@441: set_language_if_valid 'en' Chris@441: assert_equal 'UTF-8', l(:general_pdf_encoding) Chris@441: str1 = "Texte encod\xe9 en ISO-8859-1" Chris@441: str2 = "\xe9a\xe9b\xe9c\xe9d\xe9e test" Chris@441: str1.force_encoding("UTF-8") if str1.respond_to?(:force_encoding) Chris@441: str2.force_encoding("ASCII-8BIT") if str2.respond_to?(:force_encoding) Chris@441: if RUBY_VERSION < '1.9' Chris@441: ic = Iconv.new(l(:general_pdf_encoding), 'UTF-8') Chris@441: end Chris@441: txt_1 = Redmine::Export::PDF::RDMPdfEncoding::rdm_pdf_iconv(ic, str1) Chris@441: txt_2 = Redmine::Export::PDF::RDMPdfEncoding::rdm_pdf_iconv(ic, str2) Chris@441: if txt_1.respond_to?(:force_encoding) Chris@441: assert_equal "ASCII-8BIT", txt_1.encoding.to_s Chris@441: assert_equal "ASCII-8BIT", txt_2.encoding.to_s Chris@441: end Chris@441: assert_equal "Texte encod? en ISO-8859-1", txt_1 Chris@441: assert_equal "?a?b?c?d?e test", txt_2 Chris@441: end Chris@441: Chris@441: def test_rdm_pdf_iconv_invalid_utf8_should_be_replaced_ja Chris@441: set_language_if_valid 'ja' Chris@441: assert_equal 'CP932', l(:general_pdf_encoding) Chris@441: str1 = "Texte encod\xe9 en ISO-8859-1" Chris@441: str2 = "\xe9a\xe9b\xe9c\xe9d\xe9e test" Chris@441: str1.force_encoding("UTF-8") if str1.respond_to?(:force_encoding) Chris@441: str2.force_encoding("ASCII-8BIT") if str2.respond_to?(:force_encoding) Chris@441: if RUBY_VERSION < '1.9' Chris@507: if RUBY_PLATFORM == 'java' Chris@507: ic = Iconv.new("SJIS", 'UTF-8') Chris@507: else Chris@507: ic = Iconv.new(l(:general_pdf_encoding), 'UTF-8') Chris@507: end Chris@441: end Chris@441: txt_1 = Redmine::Export::PDF::RDMPdfEncoding::rdm_pdf_iconv(ic, str1) Chris@441: txt_2 = Redmine::Export::PDF::RDMPdfEncoding::rdm_pdf_iconv(ic, str2) Chris@441: if txt_1.respond_to?(:force_encoding) Chris@441: assert_equal "ASCII-8BIT", txt_1.encoding.to_s Chris@441: assert_equal "ASCII-8BIT", txt_2.encoding.to_s Chris@441: end Chris@441: assert_equal "Texte encod? en ISO-8859-1", txt_1 Chris@441: assert_equal "?a?b?c?d?e test", txt_2 Chris@441: end Chris@441: end