blob: 5d3c17455de558b761605ee24c80594810251671 [file] [log] [blame]
#!/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()