| 12
 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()
 |