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 <structure> nodes.
701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org'''
801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgimport os
104460b853d6df39e3b89ae1abb278e9241db72e02joaodasilva@chromium.orgimport os.path
1101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgimport sys
1201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgif __name__ == '__main__':
1398b76c0017dbdc61506f146d197d594b1ce07db7joi@chromium.org  sys.path.append(os.path.join(os.path.dirname(__file__), '../..'))
1401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
15cb65c63c5c7dc388c3de73705581179f8042e7ddjoi@chromium.orgimport platform
164460b853d6df39e3b89ae1abb278e9241db72e02joaodasilva@chromium.orgimport tempfile
1701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgimport unittest
1801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgimport StringIO
1901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
2001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgfrom grit import util
21cb65c63c5c7dc388c3de73705581179f8042e7ddjoi@chromium.orgfrom grit.node import structure
22ccda47032903a6550dac2921f88c51b4da55aa36benrg@chromium.orgfrom grit.format import rc
2301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
2401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
2501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgclass StructureUnittest(unittest.TestCase):
2601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  def testSkeleton(self):
27ccda47032903a6550dac2921f88c51b4da55aa36benrg@chromium.org    grd = util.ParseGrdForUnittest('''
28ccda47032903a6550dac2921f88c51b4da55aa36benrg@chromium.org        <structures>
29ccda47032903a6550dac2921f88c51b4da55aa36benrg@chromium.org          <structure type="dialog" name="IDD_ABOUTBOX" file="klonk.rc" encoding="utf-16-le">
30ccda47032903a6550dac2921f88c51b4da55aa36benrg@chromium.org            <skeleton expr="lang == 'fr'" variant_of_revision="1" file="klonk-alternate-skeleton.rc" />
31ccda47032903a6550dac2921f88c51b4da55aa36benrg@chromium.org          </structure>
32ccda47032903a6550dac2921f88c51b4da55aa36benrg@chromium.org        </structures>''', base_dir=util.PathFromRoot('grit/testdata'))
33ccda47032903a6550dac2921f88c51b4da55aa36benrg@chromium.org    grd.SetOutputLanguage('fr')
34ccda47032903a6550dac2921f88c51b4da55aa36benrg@chromium.org    grd.RunGatherers()
35ccda47032903a6550dac2921f88c51b4da55aa36benrg@chromium.org    transl = ''.join(rc.Format(grd, 'fr', '.'))
3601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    self.failUnless(transl.count('040704') and transl.count('110978'))
3701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    self.failUnless(transl.count('2005",IDC_STATIC'))
3801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
39cb65c63c5c7dc388c3de73705581179f8042e7ddjoi@chromium.org  def testRunCommandOnCurrentPlatform(self):
40cb65c63c5c7dc388c3de73705581179f8042e7ddjoi@chromium.org    node = structure.StructureNode()
41cb65c63c5c7dc388c3de73705581179f8042e7ddjoi@chromium.org    node.attrs = node.DefaultAttributes()
42cb65c63c5c7dc388c3de73705581179f8042e7ddjoi@chromium.org    self.failUnless(node.RunCommandOnCurrentPlatform())
43cb65c63c5c7dc388c3de73705581179f8042e7ddjoi@chromium.org    node.attrs['run_command_on_platforms'] = 'Nosuch'
44cb65c63c5c7dc388c3de73705581179f8042e7ddjoi@chromium.org    self.failIf(node.RunCommandOnCurrentPlatform())
45cb65c63c5c7dc388c3de73705581179f8042e7ddjoi@chromium.org    node.attrs['run_command_on_platforms'] = (
46cb65c63c5c7dc388c3de73705581179f8042e7ddjoi@chromium.org        'Nosuch,%s,Othernot' % platform.system())
47cb65c63c5c7dc388c3de73705581179f8042e7ddjoi@chromium.org    self.failUnless(node.RunCommandOnCurrentPlatform())
48cb65c63c5c7dc388c3de73705581179f8042e7ddjoi@chromium.org
494460b853d6df39e3b89ae1abb278e9241db72e02joaodasilva@chromium.org  def testVariables(self):
504460b853d6df39e3b89ae1abb278e9241db72e02joaodasilva@chromium.org    grd = util.ParseGrdForUnittest('''
514460b853d6df39e3b89ae1abb278e9241db72e02joaodasilva@chromium.org        <structures>
52006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org          <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>
534460b853d6df39e3b89ae1abb278e9241db72e02joaodasilva@chromium.org        </structures>''', base_dir=util.PathFromRoot('grit/testdata'))
544460b853d6df39e3b89ae1abb278e9241db72e02joaodasilva@chromium.org    grd.SetOutputLanguage('en')
554460b853d6df39e3b89ae1abb278e9241db72e02joaodasilva@chromium.org    grd.RunGatherers()
564460b853d6df39e3b89ae1abb278e9241db72e02joaodasilva@chromium.org    node, = grd.GetChildrenOfType(structure.StructureNode)
574460b853d6df39e3b89ae1abb278e9241db72e02joaodasilva@chromium.org    filename = node.Process(tempfile.gettempdir())
584460b853d6df39e3b89ae1abb278e9241db72e02joaodasilva@chromium.org    with open(os.path.join(tempfile.gettempdir(), filename)) as f:
594460b853d6df39e3b89ae1abb278e9241db72e02joaodasilva@chromium.org      result = f.read()
60006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org      self.failUnlessEqual(('<h1>Hello!</h1>\n'
61006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org                            'Some cool things are foo, bar, baz.\n'
62006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org                            'Did you know that 2+2==4?\n'
63006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org                            '<p>\n'
64006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org                            '  Hello!\n'
65006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org                            '</p>\n'), result)
664460b853d6df39e3b89ae1abb278e9241db72e02joaodasilva@chromium.org
67cb65c63c5c7dc388c3de73705581179f8042e7ddjoi@chromium.org
6801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgif __name__ == '__main__':
6901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  unittest.main()
70