1#!/usr/bin/env python 2# Copyright (c) 2012 The Chromium Authors. All rights reserved. 3# Use of this source code is governed by a BSD-style license that can be 4# found in the LICENSE file. 5 6'''Unit tests for io.FileNode''' 7 8import os 9import sys 10if __name__ == '__main__': 11 sys.path.append(os.path.join(os.path.dirname(__file__), '../..')) 12 13import os 14import StringIO 15import unittest 16 17from grit.node import misc 18from grit.node import io 19from grit.node import empty 20from grit import grd_reader 21from grit import util 22 23 24class FileNodeUnittest(unittest.TestCase): 25 def testGetPath(self): 26 root = misc.GritNode() 27 root.StartParsing(u'grit', None) 28 root.HandleAttribute(u'latest_public_release', u'0') 29 root.HandleAttribute(u'current_release', u'1') 30 root.HandleAttribute(u'base_dir', ur'..\resource') 31 translations = empty.TranslationsNode() 32 translations.StartParsing(u'translations', root) 33 root.AddChild(translations) 34 file_node = io.FileNode() 35 file_node.StartParsing(u'file', translations) 36 file_node.HandleAttribute(u'path', ur'flugel\kugel.pdf') 37 translations.AddChild(file_node) 38 root.EndParsing() 39 40 self.failUnless(root.ToRealPath(file_node.GetInputPath()) == 41 util.normpath( 42 os.path.join(ur'../resource', ur'flugel/kugel.pdf'))) 43 44 def VerifyCliquesContainEnglishAndFrenchAndNothingElse(self, cliques): 45 for clique in cliques: 46 self.failUnlessEquals(len(clique[0].clique), 2) 47 self.failUnless('en' in cliques[i][0].clique) 48 self.failUnless('fr' in cliques[i][0].clique) 49 50 def testLoadTranslations(self): 51 xml = '''<?xml version="1.0" encoding="UTF-8"?> 52 <grit latest_public_release="2" source_lang_id="en-US" current_release="3" base_dir="."> 53 <translations> 54 <file path="generated_resources_fr.xtb" lang="fr" /> 55 </translations> 56 <release seq="3"> 57 <messages> 58 <message name="ID_HELLO">Hello!</message> 59 <message name="ID_HELLO_USER">Hello <ph name="USERNAME">%s<ex>Joi</ex></ph></message> 60 </messages> 61 </release> 62 </grit>''' 63 grd = grd_reader.Parse(StringIO.StringIO(xml), 64 util.PathFromRoot('grit/testdata')) 65 grd.SetOutputLanguage('en') 66 grd.RunGatherers() 67 self.VerifyCliquesContainEnglishAndFrenchAndNothingElse(grd.GetCliques()) 68 69 def testIffyness(self): 70 grd = grd_reader.Parse(StringIO.StringIO('''<?xml version="1.0" encoding="UTF-8"?> 71 <grit latest_public_release="2" source_lang_id="en-US" current_release="3" base_dir="."> 72 <translations> 73 <if expr="lang == 'fr'"> 74 <file path="generated_resources_fr.xtb" lang="fr" /> 75 </if> 76 </translations> 77 <release seq="3"> 78 <messages> 79 <message name="ID_HELLO">Hello!</message> 80 <message name="ID_HELLO_USER">Hello <ph name="USERNAME">%s<ex>Joi</ex></ph></message> 81 </messages> 82 </release> 83 </grit>'''), util.PathFromRoot('grit/testdata')) 84 grd.SetOutputLanguage('en') 85 grd.RunGatherers() 86 87 grd.SetOutputLanguage('fr') 88 grd.RunGatherers() 89 90 def testConditionalLoadTranslations(self): 91 xml = '''<?xml version="1.0" encoding="UTF-8"?> 92 <grit latest_public_release="2" source_lang_id="en-US" current_release="3" 93 base_dir="."> 94 <translations> 95 <if expr="True"> 96 <file path="generated_resources_fr.xtb" lang="fr" /> 97 </if> 98 <if expr="False"> 99 <file path="no_such_file.xtb" lang="de" /> 100 </if> 101 </translations> 102 <release seq="3"> 103 <messages> 104 <message name="ID_HELLO">Hello!</message> 105 <message name="ID_HELLO_USER">Hello <ph name="USERNAME">%s<ex> 106 Joi</ex></ph></message> 107 </messages> 108 </release> 109 </grit>''' 110 grd = grd_reader.Parse(StringIO.StringIO(xml), 111 util.PathFromRoot('grit/testdata')) 112 grd.SetOutputLanguage('en') 113 grd.RunGatherers() 114 self.VerifyCliquesContainEnglishAndFrenchAndNothingElse(grd.GetCliques()) 115 116 def testConditionalOutput(self): 117 xml = '''<?xml version="1.0" encoding="UTF-8"?> 118 <grit latest_public_release="2" source_lang_id="en-US" current_release="3" 119 base_dir="."> 120 <outputs> 121 <output filename="resource.h" type="rc_header" /> 122 <output filename="en/generated_resources.rc" type="rc_all" 123 lang="en" /> 124 <if expr="pp_if('NOT_TRUE')"> 125 <output filename="de/generated_resources.rc" type="rc_all" 126 lang="de" /> 127 </if> 128 </outputs> 129 <release seq="3"> 130 <messages> 131 <message name="ID_HELLO">Hello!</message> 132 </messages> 133 </release> 134 </grit>''' 135 grd = grd_reader.Parse(StringIO.StringIO(xml), 136 util.PathFromRoot('grit/test/data'), 137 defines={}) 138 grd.SetOutputLanguage('en') 139 grd.RunGatherers() 140 outputs = grd.GetChildrenOfType(io.OutputNode) 141 active = set(grd.ActiveDescendants()) 142 self.failUnless(outputs[0] in active) 143 self.failUnless(outputs[0].GetType() == 'rc_header') 144 self.failUnless(outputs[1] in active) 145 self.failUnless(outputs[1].GetType() == 'rc_all') 146 self.failUnless(outputs[2] not in active) 147 self.failUnless(outputs[2].GetType() == 'rc_all') 148 149 # Verify that 'iw' and 'no' language codes in xtb files are mapped to 'he' and 150 # 'nb'. 151 def testLangCodeMapping(self): 152 grd = grd_reader.Parse(StringIO.StringIO('''<?xml version="1.0" encoding="UTF-8"?> 153 <grit latest_public_release="2" source_lang_id="en-US" current_release="3" base_dir="."> 154 <translations> 155 <file path="generated_resources_no.xtb" lang="nb" /> 156 <file path="generated_resources_iw.xtb" lang="he" /> 157 </translations> 158 <release seq="3"> 159 <messages></messages> 160 </release> 161 </grit>'''), util.PathFromRoot('grit/testdata')) 162 grd.SetOutputLanguage('en') 163 grd.RunGatherers() 164 165 166if __name__ == '__main__': 167 unittest.main() 168