File: toolchain_main_test.py

package info (click to toggle)
chromium-browser 41.0.2272.118-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie-kfreebsd
  • size: 2,189,132 kB
  • sloc: cpp: 9,691,462; ansic: 3,341,451; python: 712,689; asm: 518,779; xml: 208,926; java: 169,820; sh: 119,353; perl: 68,907; makefile: 28,311; yacc: 13,305; objc: 11,385; tcl: 3,186; cs: 2,225; sql: 2,217; lex: 2,215; lisp: 1,349; pascal: 1,256; awk: 407; ruby: 155; sed: 53; php: 14; exp: 11
file content (101 lines) | stat: -rwxr-xr-x 2,951 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#!/usr/bin/python
# Copyright (c) 2012 The Native Client Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""End to end test of toolchain_build."""

import os
import sys
import unittest

sys.path.append(os.path.join(os.path.dirname(__file__), '..'))
import pynacl.file_tools
import pynacl.working_directory

import command
import toolchain_main


INITIAL_README_TEXT = 'foo'
LATER_README_TEXT = 'bar'


def GetTestPackages(change_readme):

  def ShouldChangeReadme(_):
    return change_readme

  return {
      'newlib': {
          'type': 'source',
          'commands': [
              command.WriteData(INITIAL_README_TEXT, '%(output)s/README'),
              command.WriteData(LATER_README_TEXT, '%(output)s/README',
                                run_cond=ShouldChangeReadme),
          ],
      },
      'newlib_build': {
          'type': 'build',
          'dependencies': ['newlib'],
          'commands': [
              command.Copy('%(newlib)s/README', '%(output)s/test1'),
          ],
      },
  }


def GetTestPackageTargets():
  return {
      'newlib_test': {
           'newlib_out': ['newlib_build'],
      },
  }


class TestToolchainBuild(unittest.TestCase):

  def test_BuildAfterChange(self):
    # Test that changes trigger a rebuild immediately.
    with pynacl.working_directory.TemporaryWorkingDirectory() as work_dir:
      source_dir = os.path.join(work_dir, 'src')
      output_dir = os.path.join(work_dir, 'out')
      cache_dir = os.path.join(work_dir, 'cache')
      readme_out = os.path.join(output_dir, 'newlib_build_install', 'test1')
      args = ['--source', source_dir,
              '--output', output_dir,
              '--cache', cache_dir,
              '--no-use-remote-cache',
              '--sync']
      if '-v' in sys.argv or '--verbose' in sys.argv:
        args += ['--verbose', '--emit-signatures=-', '--no-annotator']
      else:
        args += ['--quiet']
      packages = GetTestPackages(change_readme=False)
      package_targets = GetTestPackageTargets()
      # Build once (so things are in place).
      tb = toolchain_main.PackageBuilder(
          packages, package_targets, args)
      tb.Main()
      self.assertEqual(
          INITIAL_README_TEXT,
          pynacl.file_tools.ReadFile(readme_out))
      # Build again (so the the cache is hit).
      tb = toolchain_main.PackageBuilder(
          packages, package_targets, args)
      tb.Main()
      self.assertEqual(
          INITIAL_README_TEXT,
          pynacl.file_tools.ReadFile(readme_out))
      # Build again after changing README.
      packages = GetTestPackages(change_readme=True)
      tb = toolchain_main.PackageBuilder(
          packages, package_targets, args)
      tb.Main()
      self.assertEqual(
          LATER_README_TEXT,
          pynacl.file_tools.ReadFile(readme_out))


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