195640e3a20adea634b4df4ccf8c93f411184c438joi@chromium.org#!/usr/bin/env python 295640e3a20adea634b4df4ccf8c93f411184c438joi@chromium.org# Copyright (c) 2012 The Chromium Authors. All rights reserved. 301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org# Use of this source code is governed by a BSD-style license that can be 401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org# found in the LICENSE file. 501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org'''Unit tests for io.FileNode''' 701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgimport os 901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgimport sys 1001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgif __name__ == '__main__': 1198b76c0017dbdc61506f146d197d594b1ce07db7joi@chromium.org sys.path.append(os.path.join(os.path.dirname(__file__), '../..')) 1201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 1301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgimport os 1401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgimport StringIO 1501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgimport unittest 1601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 1701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgfrom grit.node import misc 1801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgfrom grit.node import io 1901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgfrom grit.node import empty 2001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgfrom grit import grd_reader 2101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgfrom grit import util 2201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 2301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 2401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgclass FileNodeUnittest(unittest.TestCase): 2501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org def testGetPath(self): 2601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org root = misc.GritNode() 2701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org root.StartParsing(u'grit', None) 2801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org root.HandleAttribute(u'latest_public_release', u'0') 2901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org root.HandleAttribute(u'current_release', u'1') 3001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org root.HandleAttribute(u'base_dir', ur'..\resource') 3101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org translations = empty.TranslationsNode() 3201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org translations.StartParsing(u'translations', root) 3301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org root.AddChild(translations) 3401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org file_node = io.FileNode() 3501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org file_node.StartParsing(u'file', translations) 3601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org file_node.HandleAttribute(u'path', ur'flugel\kugel.pdf') 3701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org translations.AddChild(file_node) 3801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org root.EndParsing() 3901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 40ec8016c73b3b945b6284746230913d88653f35e7benrg@chromium.org self.failUnless(root.ToRealPath(file_node.GetInputPath()) == 4101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org util.normpath( 4201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org os.path.join(ur'../resource', ur'flugel/kugel.pdf'))) 4301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 44705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org def VerifyCliquesContainEnglishAndFrenchAndNothingElse(self, cliques): 45705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org for clique in cliques: 46705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org self.failUnlessEquals(len(clique[0].clique), 2) 47705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org self.failUnless('en' in cliques[i][0].clique) 48705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org self.failUnless('fr' in cliques[i][0].clique) 49705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org 5001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org def testLoadTranslations(self): 51705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org xml = '''<?xml version="1.0" encoding="UTF-8"?> 5201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org <grit latest_public_release="2" source_lang_id="en-US" current_release="3" base_dir="."> 5301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org <translations> 5401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org <file path="generated_resources_fr.xtb" lang="fr" /> 5501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org </translations> 5601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org <release seq="3"> 5701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org <messages> 5801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org <message name="ID_HELLO">Hello!</message> 5901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org <message name="ID_HELLO_USER">Hello <ph name="USERNAME">%s<ex>Joi</ex></ph></message> 6001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org </messages> 6101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org </release> 62705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org </grit>''' 63705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org grd = grd_reader.Parse(StringIO.StringIO(xml), 64705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org util.PathFromRoot('grit/testdata')) 65783385ad40d453977d8b9d537e204f851e21591abenrg@chromium.org grd.SetOutputLanguage('en') 66ccda47032903a6550dac2921f88c51b4da55aa36benrg@chromium.org grd.RunGatherers() 67705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org self.VerifyCliquesContainEnglishAndFrenchAndNothingElse(grd.GetCliques()) 6801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 6901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org def testIffyness(self): 7001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org grd = grd_reader.Parse(StringIO.StringIO('''<?xml version="1.0" encoding="UTF-8"?> 7101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org <grit latest_public_release="2" source_lang_id="en-US" current_release="3" base_dir="."> 7201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org <translations> 7301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org <if expr="lang == 'fr'"> 7401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org <file path="generated_resources_fr.xtb" lang="fr" /> 7501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org </if> 7601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org </translations> 7701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org <release seq="3"> 7801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org <messages> 7901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org <message name="ID_HELLO">Hello!</message> 8001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org <message name="ID_HELLO_USER">Hello <ph name="USERNAME">%s<ex>Joi</ex></ph></message> 8101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org </messages> 8201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org </release> 8301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org </grit>'''), util.PathFromRoot('grit/testdata')) 84783385ad40d453977d8b9d537e204f851e21591abenrg@chromium.org grd.SetOutputLanguage('en') 85ccda47032903a6550dac2921f88c51b4da55aa36benrg@chromium.org grd.RunGatherers() 8601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 87783385ad40d453977d8b9d537e204f851e21591abenrg@chromium.org grd.SetOutputLanguage('fr') 88ccda47032903a6550dac2921f88c51b4da55aa36benrg@chromium.org grd.RunGatherers() 8901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 90705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org def testConditionalLoadTranslations(self): 91705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org xml = '''<?xml version="1.0" encoding="UTF-8"?> 92705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org <grit latest_public_release="2" source_lang_id="en-US" current_release="3" 93705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org base_dir="."> 94705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org <translations> 95705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org <if expr="True"> 96705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org <file path="generated_resources_fr.xtb" lang="fr" /> 97705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org </if> 98705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org <if expr="False"> 99705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org <file path="no_such_file.xtb" lang="de" /> 100705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org </if> 101705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org </translations> 102705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org <release seq="3"> 103705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org <messages> 104705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org <message name="ID_HELLO">Hello!</message> 105705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org <message name="ID_HELLO_USER">Hello <ph name="USERNAME">%s<ex> 106705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org Joi</ex></ph></message> 107705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org </messages> 108705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org </release> 109705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org </grit>''' 110705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org grd = grd_reader.Parse(StringIO.StringIO(xml), 111705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org util.PathFromRoot('grit/testdata')) 112783385ad40d453977d8b9d537e204f851e21591abenrg@chromium.org grd.SetOutputLanguage('en') 113ccda47032903a6550dac2921f88c51b4da55aa36benrg@chromium.org grd.RunGatherers() 114705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org self.VerifyCliquesContainEnglishAndFrenchAndNothingElse(grd.GetCliques()) 115705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org 116705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org def testConditionalOutput(self): 117705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org xml = '''<?xml version="1.0" encoding="UTF-8"?> 118705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org <grit latest_public_release="2" source_lang_id="en-US" current_release="3" 119705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org base_dir="."> 120705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org <outputs> 121705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org <output filename="resource.h" type="rc_header" /> 122705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org <output filename="en/generated_resources.rc" type="rc_all" 123705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org lang="en" /> 124705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org <if expr="pp_if('NOT_TRUE')"> 125705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org <output filename="de/generated_resources.rc" type="rc_all" 126705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org lang="de" /> 127705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org </if> 128705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org </outputs> 129705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org <release seq="3"> 130705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org <messages> 131705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org <message name="ID_HELLO">Hello!</message> 132705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org </messages> 133705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org </release> 134705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org </grit>''' 135705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org grd = grd_reader.Parse(StringIO.StringIO(xml), 136783385ad40d453977d8b9d537e204f851e21591abenrg@chromium.org util.PathFromRoot('grit/test/data'), 137783385ad40d453977d8b9d537e204f851e21591abenrg@chromium.org defines={}) 138783385ad40d453977d8b9d537e204f851e21591abenrg@chromium.org grd.SetOutputLanguage('en') 139ccda47032903a6550dac2921f88c51b4da55aa36benrg@chromium.org grd.RunGatherers() 140705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org outputs = grd.GetChildrenOfType(io.OutputNode) 141ccda47032903a6550dac2921f88c51b4da55aa36benrg@chromium.org active = set(grd.ActiveDescendants()) 142ccda47032903a6550dac2921f88c51b4da55aa36benrg@chromium.org self.failUnless(outputs[0] in active) 143705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org self.failUnless(outputs[0].GetType() == 'rc_header') 144ccda47032903a6550dac2921f88c51b4da55aa36benrg@chromium.org self.failUnless(outputs[1] in active) 145705a118ab4a1f2fe348fccdcd4786a0b5bf426ecjoi@chromium.org self.failUnless(outputs[1].GetType() == 'rc_all') 146ccda47032903a6550dac2921f88c51b4da55aa36benrg@chromium.org self.failUnless(outputs[2] not in active) 147ccda47032903a6550dac2921f88c51b4da55aa36benrg@chromium.org self.failUnless(outputs[2].GetType() == 'rc_all') 14801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 149d769b0cb7974d27fc2e1feda9a2523e0da4a10b9tony@chromium.org # Verify that 'iw' and 'no' language codes in xtb files are mapped to 'he' and 150d769b0cb7974d27fc2e1feda9a2523e0da4a10b9tony@chromium.org # 'nb'. 151d769b0cb7974d27fc2e1feda9a2523e0da4a10b9tony@chromium.org def testLangCodeMapping(self): 152d769b0cb7974d27fc2e1feda9a2523e0da4a10b9tony@chromium.org grd = grd_reader.Parse(StringIO.StringIO('''<?xml version="1.0" encoding="UTF-8"?> 153d769b0cb7974d27fc2e1feda9a2523e0da4a10b9tony@chromium.org <grit latest_public_release="2" source_lang_id="en-US" current_release="3" base_dir="."> 154d769b0cb7974d27fc2e1feda9a2523e0da4a10b9tony@chromium.org <translations> 155d769b0cb7974d27fc2e1feda9a2523e0da4a10b9tony@chromium.org <file path="generated_resources_no.xtb" lang="nb" /> 156d769b0cb7974d27fc2e1feda9a2523e0da4a10b9tony@chromium.org <file path="generated_resources_iw.xtb" lang="he" /> 157d769b0cb7974d27fc2e1feda9a2523e0da4a10b9tony@chromium.org </translations> 158d769b0cb7974d27fc2e1feda9a2523e0da4a10b9tony@chromium.org <release seq="3"> 159d769b0cb7974d27fc2e1feda9a2523e0da4a10b9tony@chromium.org <messages></messages> 160d769b0cb7974d27fc2e1feda9a2523e0da4a10b9tony@chromium.org </release> 161d769b0cb7974d27fc2e1feda9a2523e0da4a10b9tony@chromium.org </grit>'''), util.PathFromRoot('grit/testdata')) 162d769b0cb7974d27fc2e1feda9a2523e0da4a10b9tony@chromium.org grd.SetOutputLanguage('en') 163d769b0cb7974d27fc2e1feda9a2523e0da4a10b9tony@chromium.org grd.RunGatherers() 164d769b0cb7974d27fc2e1feda9a2523e0da4a10b9tony@chromium.org 16501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org 16601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgif __name__ == '__main__': 16701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org unittest.main() 168