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 the 'grit buildinfo' tool.
7"""
8
9import os
10import StringIO
11import sys
12import unittest
13
14# This is needed to find some of the imports below.
15if __name__ == '__main__':
16  sys.path.append(os.path.join(os.path.dirname(__file__), '../..'))
17
18# pylint: disable-msg=C6204
19from grit.tool import buildinfo
20
21
22class BuildInfoUnittest(unittest.TestCase):
23  def setUp(self):
24    self.old_cwd = os.getcwd()
25    # Change CWD to make tests work independently of callers CWD.
26    os.chdir(os.path.dirname(__file__))
27    os.chdir('..')
28    self.buf = StringIO.StringIO()
29    self.old_stdout = sys.stdout
30    sys.stdout = self.buf
31
32  def tearDown(self):
33    sys.stdout = self.old_stdout
34    os.chdir(self.old_cwd)
35
36  def testBuildOutput(self):
37    """Find all of the inputs and outputs for a GRD file."""
38    info_object = buildinfo.DetermineBuildInfo()
39
40    class DummyOpts(object):
41      def __init__(self):
42        self.input = '../grit/testdata/buildinfo.grd'
43        self.print_header = False
44        self.verbose = False
45        self.extra_verbose = False
46    info_object.Run(DummyOpts(), [])
47    output = self.buf.getvalue().replace('\\', '/')
48    self.failUnless(output.count(r'rc_all|sv_sidebar_loading.html'))
49    self.failUnless(output.count(r'rc_header|resource.h'))
50    self.failUnless(output.count(r'rc_all|en_generated_resources.rc'))
51    self.failUnless(output.count(r'rc_all|sv_generated_resources.rc'))
52    self.failUnless(output.count(r'input|../grit/testdata/substitute.xmb'))
53    self.failUnless(output.count(r'input|../grit/testdata/pr.bmp'))
54    self.failUnless(output.count(r'input|../grit/testdata/pr2.bmp'))
55    self.failUnless(
56        output.count(r'input|../grit/testdata/sidebar_loading.html'))
57    self.failUnless(output.count(r'input|../grit/testdata/transl.rc'))
58    self.failUnless(output.count(r'input|../grit/testdata/transl1.rc'))
59
60  def testBuildOutputWithDir(self):
61    """Find all the inputs and outputs for a GRD file with an output dir."""
62    info_object = buildinfo.DetermineBuildInfo()
63
64    class DummyOpts(object):
65      def __init__(self):
66        self.input = '../grit/testdata/buildinfo.grd'
67        self.print_header = False
68        self.verbose = False
69        self.extra_verbose = False
70    info_object.Run(DummyOpts(), ['-o', '../grit/testdata'])
71    output = self.buf.getvalue().replace('\\', '/')
72    self.failUnless(
73        output.count(r'rc_all|../grit/testdata/sv_sidebar_loading.html'))
74    self.failUnless(output.count(r'rc_header|../grit/testdata/resource.h'))
75    self.failUnless(
76        output.count(r'rc_all|../grit/testdata/en_generated_resources.rc'))
77    self.failUnless(
78        output.count(r'rc_all|../grit/testdata/sv_generated_resources.rc'))
79    self.failUnless(output.count(r'input|../grit/testdata/substitute.xmb'))
80    self.failUnlessEqual(0,
81        output.count(r'rc_all|../grit/testdata/sv_welcome_toast.html'))
82    self.failUnless(
83        output.count(r'rc_all|../grit/testdata/en_welcome_toast.html'))
84
85
86if __name__ == '__main__':
87  unittest.main()
88