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 <structure> nodes. 7 ''' 8 9 import os 10 import os.path 11 import sys 12 if __name__ == '__main__': 13 sys.path.append(os.path.join(os.path.dirname(__file__), '../..')) 14 15 import platform 16 import tempfile 17 import unittest 18 import StringIO 19 20 from grit import util 21 from grit.node import structure 22 from grit.format import rc 23 24 25 class StructureUnittest(unittest.TestCase): 26 def testSkeleton(self): 27 grd = util.ParseGrdForUnittest(''' 28 <structures> 29 <structure type="dialog" name="IDD_ABOUTBOX" file="klonk.rc" encoding="utf-16-le"> 30 <skeleton expr="lang == 'fr'" variant_of_revision="1" file="klonk-alternate-skeleton.rc" /> 31 </structure> 32 </structures>''', base_dir=util.PathFromRoot('grit/testdata')) 33 grd.SetOutputLanguage('fr') 34 grd.RunGatherers() 35 transl = ''.join(rc.Format(grd, 'fr', '.')) 36 self.failUnless(transl.count('040704') and transl.count('110978')) 37 self.failUnless(transl.count('2005",IDC_STATIC')) 38 39 def testRunCommandOnCurrentPlatform(self): 40 node = structure.StructureNode() 41 node.attrs = node.DefaultAttributes() 42 self.failUnless(node.RunCommandOnCurrentPlatform()) 43 node.attrs['run_command_on_platforms'] = 'Nosuch' 44 self.failIf(node.RunCommandOnCurrentPlatform()) 45 node.attrs['run_command_on_platforms'] = ( 46 'Nosuch,%s,Othernot' % platform.system()) 47 self.failUnless(node.RunCommandOnCurrentPlatform()) 48 49 def testVariables(self): 50 grd = util.ParseGrdForUnittest(''' 51 <structures> 52 <structure type="chrome_html" name="hello_tmpl" file="structure_variables.html" expand_variables="true" variables="GREETING=Hello,THINGS=foo,, bar,, baz,EQUATION=2+2==4,filename=simple" flattenhtml="true"></structure> 53 </structures>''', base_dir=util.PathFromRoot('grit/testdata')) 54 grd.SetOutputLanguage('en') 55 grd.RunGatherers() 56 node, = grd.GetChildrenOfType(structure.StructureNode) 57 filename = node.Process(tempfile.gettempdir()) 58 with open(os.path.join(tempfile.gettempdir(), filename)) as f: 59 result = f.read() 60 self.failUnlessEqual(('<h1>Hello!</h1>\n' 61 'Some cool things are foo, bar, baz.\n' 62 'Did you know that 2+2==4?\n' 63 '<p>\n' 64 ' Hello!\n' 65 '</p>\n'), result) 66 67 68 if __name__ == '__main__': 69 unittest.main() 70