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