# -*- coding: utf-8 -*- # # Copyright (C) 2012 Haruka Yoshihara # Copyright (C) 2012 Kouhei Sutou # # License: Ruby's or LGPL # # This library is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . require "gettext/tools/po" class TestPO < Test::Unit::TestCase def setup @po = nil end class TestHasKey < self def setup @po = GetText::PO.new end def test_msgid_exist @po["msgid"] = "msgstr" assert_true(@po.has_key?("msgid")) assert_true(@po.has_key?(nil, "msgid")) end def test_msgid_notexistent assert_false(@po.has_key?("msgid")) assert_false(@po.has_key?(nil, "msgid")) end def test_msgctxt_and_msgid_exist @po["msgctxt", "msgid"] = "msgstr" assert_false(@po.has_key?("msgid")) assert_true(@po.has_key?("msgctxt", "msgid")) end def test_wrong_arguments @po["msgctxt", "msgid"] = "msgstr" assert_raise(ArgumentError) do @po.has_key?("msgctxt", "msgid", "wrong_argument") end end end class TestEach < self def setup @hello = "hello" @hello_translation = "bonjour" @he = "he" @he_translation = "il" @po = GetText::PO.new @po[@hello] = @hello_translation @po[@he] = @he_translation end def test_block_given entries = [] @po.each do |entry| entries << entry end entries = entries.sort_by do |entry| entry.msgid end assert_equal(expected_entries, entries) end def test_no_block_given entries = @po.each.sort_by do |entry| entry.msgid end assert_equal(expected_entries, entries) end private def expected_entries he_entry = POEntry.new(:normal) he_entry.msgid = @he he_entry.msgstr = @he_translation hello_entry = POEntry.new(:normal) hello_entry.msgid = @hello hello_entry.msgstr = @hello_translation [he_entry, hello_entry] end end class TestSetEntry < self def test_normal msgid = "msgid" msgstr = "msgstr" @po = GetText::PO.new @po[msgid] = msgstr entry = POEntry.new(:normal) entry.msgid = msgid entry.msgstr = msgstr assert_equal(entry, @po[msgid]) end def test_msgctxt msgctxt = "msgctxt" msgid = "msgid" msgstr = "msgstr" @po = GetText::PO.new @po[msgctxt, msgid] = msgstr entry = POEntry.new(:msgctxt) entry.msgctxt = msgctxt entry.msgid = msgid entry.msgstr = msgstr assert_equal(entry, @po[msgctxt, msgid]) end def test_wrong_arguments msgctxt = "msgctxt" msgid = "msgid" msgstr = "msgstr" @po = GetText::PO.new assert_raise(ArgumentError) do @po[msgctxt, msgid, "wrong argument"] = msgstr end end def test_update_existing_entry test_normal msgid = "msgid" new_msgstr = "new_msgstr" @po[msgid] = new_msgstr entry = POEntry.new(:normal) entry.msgid = msgid entry.msgstr = new_msgstr assert_equal(entry, @po[msgid]) end def test_po_entry @po = GetText::PO.new msgid = "msgid" msgstr = "msgstr" entry = POEntry.new(:normal) entry.msgid = msgid entry.msgstr = msgstr @po[msgid] = entry assert_true(@po.has_key?(nil, msgid)) assert_equal(msgstr, @po[msgid].msgstr) end end class TestComment < self def test_add msgid = "msgid" comment = "comment" @po = GetText::PO.new @po.set_comment(msgid, comment) entry = POEntry.new(:normal) entry.msgid = msgid entry.comment = comment assert_equal(entry, @po[msgid]) assert_equal(nil, @po[msgid].msgstr) end def test_add_to_existing_entry msgid = "msgid" msgstr = "msgstr" @po = GetText::PO.new @po[msgid] = msgstr comment = "comment" @po.set_comment(msgid, comment) entry = POEntry.new(:normal) entry.msgid = msgid entry.msgstr = msgstr entry.comment = comment assert_equal(entry, @po[msgid]) end end class TestToS < self def setup @po = GetText::PO.new @po[""] = header @po[""].translator_comment = header_comment end def test_same_filename hello = "hello" hello_translation = "こんにちは" hello_references = ["file.rb:10"] hello_comment = "#: file.rb:10" bye = "bye" bye_translation = "さようなら" bye_references = ["file.rb:20"] bye_comment = "#: file.rb:20" @po[hello] = hello_translation @po[hello].references = hello_references @po[bye] = bye_translation @po[bye].references = bye_references expected_po =< Language-Team: Japanese Language: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1) EOH end def header_comment <, 2012. EOC end def expected_header expected_header = header.split("\n").collect do |line| "\"#{line}\\n\"" end expected_header.join("\n") end def expected_header_comment expected_header_comment = header_comment.split("\n").collect do |line| "# #{line}" end expected_header_comment.join("\n") end def obsolete_comment <