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