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 test that checks postprocessing of files.
701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org   Tests postprocessing by having the postprocessor
801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org   modify the grd data tree, changing the message name attributes.
901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org'''
1001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
1101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgimport os
1201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgimport re
1301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgimport sys
1401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgif __name__ == '__main__':
1598b76c0017dbdc61506f146d197d594b1ce07db7joi@chromium.org  sys.path.append(os.path.join(os.path.dirname(__file__), '../..'))
1601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
1701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgimport unittest
1801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
1901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgimport grit.tool.postprocess_interface
2001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgfrom grit.tool import rc2grd
2101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
2201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
2301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgclass PostProcessingUnittest(unittest.TestCase):
2401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
2501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  def testPostProcessing(self):
2601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    rctext = '''STRINGTABLE
2701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgBEGIN
2801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  DUMMY_STRING_1         "String 1"
2901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  // Some random description
3001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  DUMMY_STRING_2        "This text was added during preprocessing"
3101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgEND
3201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    '''
3301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    tool = rc2grd.Rc2Grd()
3401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    class DummyOpts(object):
3501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org      verbose = False
3601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org      extra_verbose = False
3701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    tool.o = DummyOpts()
3801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    tool.post_process = 'grit.tool.postprocess_unittest.DummyPostProcessor'
3901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    result = tool.Process(rctext, '.\resource.rc')
4001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
4101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    self.failUnless(
4201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org      result.children[2].children[2].children[0].attrs['name'] == 'SMART_STRING_1')
4301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    self.failUnless(
4401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org      result.children[2].children[2].children[1].attrs['name'] == 'SMART_STRING_2')
4501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
4601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgclass DummyPostProcessor(grit.tool.postprocess_interface.PostProcessor):
4701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  '''
4801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  Post processing replaces all message name attributes containing "DUMMY" to
4901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  "SMART".
5001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  '''
5101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  def Process(self, rctext, rcpath, grdnode):
5201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    smarter = re.compile(r'(DUMMY)(.*)')
5301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    messages = grdnode.children[2].children[2]
5401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    for node in messages.children:
5501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org      name_attr = node.attrs['name']
5601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org      m = smarter.search(name_attr)
5701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org      if m:
5801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org         node.attrs['name'] = 'SMART' + m.group(2)
5901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    return grdnode
6001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
6101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgif __name__ == '__main__':
6201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  unittest.main()
6301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
64