Esempio n. 1
0
    def test_ctrl_c(self):
        host = FakeHost()

        def raise_ctrl_c(*_comps):
            raise KeyboardInterrupt

        host.read = raise_ctrl_c
        host.write('simple.g', SIMPLE_GRAMMAR)

        self._call(host, ['-g', 'simple.g'], returncode=130,
                   out='', err='Interrupted, exiting ..\n')
Esempio n. 2
0
    def setUp(self):
        super(HermeticTestCase, self).setUp()
        self._host = FakeHost()
        self._host.fd_out = self._stdout
        self._host.fd_err = self._stderr

        process = self.host.create_process(['false'])
        process.succeeds = False

        process = self.host.create_process(['echo foo'])
        process.schedule(start=0, output='foo')
Esempio n. 3
0
 def __init__(self):
     super(FakeFactory, self).__init__(host=FakeHost())
Esempio n. 4
0
 def setUp(self):
     self.host = FakeHost()
     self.args = None
Esempio n. 5
0
class TestAnalyzer(unittest.TestCase):
    # 'too many public methods' pylint: disable=R0904
    # 'Invalid name 'setUp' pylint: disable=C0103

    def setUp(self):
        self.host = FakeHost()
        self.args = None

    def check(self, ast):
        analyzer = NinjaAnalyzer(self.host, self.args, parse, expand_vars)
        return analyzer.analyze(ast, 'build.ninja')

    def err(self, ast):
        analyzer = NinjaAnalyzer(self.host, self.args, parse, expand_vars)
        self.assertRaises(PynException, analyzer.analyze, ast, 'build.ninja')

    def test_empty(self):
        self.check([])

    def test_build(self):
        self.check([['build', ['foo.o'], 'cc', ['foo.c'], [], [], []]])
        self.err([['build', ['foo.o'], 'cc', ['foo.c'], [], [], []],
                  ['build', ['foo.o'], 'cc', ['foo.c'], [], [], []]])
        self.check([['build', ['foo.o'], 'cc', ['foo.c'], [], [],
                    [['var', 'foo', 'bar'],
                     ['var', 'foo', 'bar']]]])

    def test_vars(self):
        self.check([['var', 'foo', 'bar']])
        self.check([['var', 'foo', 'bar'],
                    ['var', 'foo', 'bar']])

    def test_vars_are_expanded_immediately(self):
        graph = self.check([['var', 'foo', 'bar'],
                            ['var', 'baz', '$foo']])
        self.assertEquals(graph.scopes[graph.name]['baz'],
                          'bar')

    def test_subninja_missing(self):
        self.err([['subninja', 'missing.ninja']])

    def test_subninja(self):
        self.host.files['/tmp/sub.ninja'] = ''
        self.check([['subninja', 'sub.ninja']])

    def test_scope_of_subninjas(self):
        self.host.files = {
            '/tmp/build.ninja': ('foo = 1\n'
                                 'bar = 2\n'
                                 'rule echo\n'
                                 '  command = echo $foo $bar\n'
                                 'build one : echo\n'
                                 'subninja sub.ninja\n'),
            '/tmp/sub.ninja': ('foo = s1\n'
                               'build two: echo\n'),
        }
        ast = parse(self.host.read('build.ninja'), 'build.ninja')
        analyzer = NinjaAnalyzer(self.host, self.args, parse, expand_vars)
        graph = analyzer.analyze(ast, 'build.ninja')

        n = graph.nodes['one']
        rule_scope = graph.rules[n.rule_name]
        self.assertEqual(expand_vars(rule_scope['command'], n.scope,
                                     rule_scope),
                         'echo 1 2')

        n = graph.nodes['two']
        rule_scope = graph.rules[n.rule_name]
        self.assertEqual(expand_vars(rule_scope['command'], n.scope,
                                     rule_scope),
                         'echo s1 2')

    def test_include(self):
        self.host.files['/tmp/sub.ninja'] = ''
        self.check([['include', 'sub.ninja']])

    def test_include_missing(self):
        self.err([['include', 'missing.ninja']])

    def test_pool(self):
        self.check([['pool', 'foo', [['var', 'depth', '4']]]])
        self.err([['pool', 'foo', [['var', 'depth', 'foo']]]])
        self.err([['pool', 'foo', [['var', 'depth', '4']]],
                  ['pool', 'foo', [['var', 'depth', '4']]]])
        self.err([['pool', 'foo', []]])
        self.err([['pool', 'foo', [['var', 'foo', '4']]]])
        self.err([['pool', 'foo', [['var', 'depth', '4'],
                                   ['var', 'foo', 'bar']]]])

    def test_rule(self):
        # Note that the var values are *not* expanded.
        self.check([['rule', 'cc', [['var', 'command', 'cc -o $out $in']]]])

        self.err([['rule', 'cc', [['var', 'command', 'cc -o $out $in']]],
                  ['rule', 'cc', [['var', 'command', 'cc -o $out $in']]]])

        # Note that duplicate variables are okay.
        self.check([['rule', 'cc', [['var', 'command', 'cc -o $out $in'],
                                    ['var', 'command', 'touch $out']]]])

    def test_default(self):
        self.check([['default', ['all']]])