#!/usr/bin/env python
# Copyright (c) 2012 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

'''Unit test that checks postprocessing of files.
   Tests postprocessing by having the postprocessor
   modify the grd data tree, changing the message name attributes.
'''

import os
import re
import sys
if __name__ == '__main__':
  sys.path.append(os.path.join(os.path.dirname(__file__), '../..'))

import unittest

import grit.tool.postprocess_interface
from grit.tool import rc2grd


class PostProcessingUnittest(unittest.TestCase):

  def testPostProcessing(self):
    rctext = '''STRINGTABLE
BEGIN
  DUMMY_STRING_1         "String 1"
  // Some random description
  DUMMY_STRING_2        "This text was added during preprocessing"
END
    '''
    tool = rc2grd.Rc2Grd()
    class DummyOpts(object):
      verbose = False
      extra_verbose = False
    tool.o = DummyOpts()
    tool.post_process = 'grit.tool.postprocess_unittest.DummyPostProcessor'
    result = tool.Process(rctext, '.\resource.rc')

    self.failUnless(
      result.children[2].children[2].children[0].attrs['name'] == 'SMART_STRING_1')
    self.failUnless(
      result.children[2].children[2].children[1].attrs['name'] == 'SMART_STRING_2')

class DummyPostProcessor(grit.tool.postprocess_interface.PostProcessor):
  '''
  Post processing replaces all message name attributes containing "DUMMY" to
  "SMART".
  '''
  def Process(self, rctext, rcpath, grdnode):
    smarter = re.compile(r'(DUMMY)(.*)')
    messages = grdnode.children[2].children[2]
    for node in messages.children:
      name_attr = node.attrs['name']
      m = smarter.search(name_attr)
      if m:
         node.attrs['name'] = 'SMART' + m.group(2)
    return grdnode

if __name__ == '__main__':
  unittest.main()

