def test_concat_path(self): self.assertEqual( Pattern('%.c') + path.Path('bar'), safe_str.jbos(safe_str.literal('%'), '.c', path.Path('bar'))) self.assertEqual( path.Path('foo') + Pattern('%.h'), safe_str.jbos(path.Path('foo'), safe_str.literal('%'), '.h'))
def test_concat_str(self): self.assertEqual(Pattern('%.c') + 'bar', safe_str.jbos( safe_str.literal('%'), '.cbar' )) self.assertEqual('foo' + Pattern('%.h'), safe_str.jbos( 'foo', safe_str.literal('%'), '.h' ))
def test_expand_word_jbos(self): p = Placeholder('files') zero = AttrDict(files=[]) one = AttrDict(files=[literal('foo')]) two = AttrDict(files=[literal('foo'), literal('bar')]) foo = jbos('{', literal('foo'), '}') bar = jbos('{', literal('bar'), '}') j = '{' + p + '}' self.assertEqual(Placeholder.expand_word(j, zero), []) self.assertEqual(Placeholder.expand_word(j, one), [foo]) self.assertEqual(Placeholder.expand_word(j, two), [foo, bar]) j = '{' + p[0] + '}' with self.assertRaises(IndexError): Placeholder.expand_word(j, zero) self.assertEqual(Placeholder.expand_word(j, one), [foo]) self.assertEqual(Placeholder.expand_word(j, two), [foo]) j = '{' + p[0:1] + '}' self.assertEqual(Placeholder.expand_word(j, zero), []) self.assertEqual(Placeholder.expand_word(j, one), [foo]) self.assertEqual(Placeholder.expand_word(j, two), [foo]) j = jbos('foo') self.assertEqual(Placeholder.expand_word(j, zero), [j]) self.assertEqual(Placeholder.expand_word(j, one), [j]) self.assertEqual(Placeholder.expand_word(j, two), [j]) with self.assertRaises(ValueError): Placeholder.expand_word(p + p, zero)
def test_concat_path(self): self.assertEqual( Variable('foo') + path.Path('bar'), safe_str.jbos(safe_str.literal('$(foo)'), path.Path('bar'))) self.assertEqual( path.Path('foo') + Variable('bar'), safe_str.jbos(path.Path('foo'), safe_str.literal('$(bar)')))
def test_concat_str(self): self.assertEqual(Variable('foo') + 'bar', safe_str.jbos( safe_str.literal('${foo}'), 'bar' )) self.assertEqual('foo' + Variable('bar'), safe_str.jbos( 'foo', safe_str.literal('${bar}') ))
def test_concat_var(self): self.assertEqual( Variable('foo') + Variable('bar'), safe_str.jbos(safe_str.literal('$(foo)'), safe_str.literal('$(bar)'))) self.assertEqual( Variable('foo', True) + Variable('bar'), safe_str.jbos(safe_str.literal("'$(foo)'"), safe_str.literal('$(bar)')))
def test_concat_var(self): self.assertEqual( Function('foo', '1', '2') + Function('bar', '3', '4'), safe_str.jbos(safe_str.literal('$(foo 1,2)'), safe_str.literal('$(bar 3,4)'))) self.assertEqual( Function('foo', '1', '2', quoted=True) + Function('bar', '3', '4'), safe_str.jbos(safe_str.literal("'$(foo 1,2)'"), safe_str.literal('$(bar 3,4)')))
def test_concat_str(self): self.assertEqual( Function('fn', '1', '2') + 'foo', safe_str.jbos(safe_str.literal('$(fn 1,2)'), 'foo')) self.assertEqual('foo' + Function('fn', '1', '2'), safe_str.jbos('foo', safe_str.literal('$(fn 1,2)'))) self.assertEqual( Function('fn', '1', '2', quoted=True) + 'foo', safe_str.jbos(safe_str.literal("'$(fn 1,2)'"), 'foo')) self.assertEqual('foo' + Function('fn', '1', '2', quoted=True), safe_str.jbos('foo', safe_str.literal("'$(fn 1,2)'")))
def test_concat_path(self): self.assertEqual( Function('fn', '1', '2') + path.Path('foo'), safe_str.jbos(safe_str.literal('$(fn 1,2)'), path.Path('foo'))) self.assertEqual( path.Path('foo') + Function('fn', '1', '2'), safe_str.jbos(path.Path('foo'), safe_str.literal('$(fn 1,2)'))) self.assertEqual( Function('fn', '1', '2', quoted=True) + path.Path('foo'), safe_str.jbos(safe_str.literal("'$(fn 1,2)'"), path.Path('foo'))) self.assertEqual( path.Path('foo') + Function('fn', '1', '2', quoted=True), safe_str.jbos(path.Path('foo'), safe_str.literal("'$(fn 1,2)'")))
def test_complex(self): p = self.execpath (test_exe, driver_exe, mid_driver_exe, mid_test_exe, inner_driver_exe, inner_test_exe) = self.make_complex() cmd, deps = self._build_commands() self.assertEqual(deps, [test_exe, mid_test_exe, inner_test_exe]) self.assertEqual(cmd, [ [test_exe], [driver_exe, literal( '"' + p('mid_driver') + ' ' + p('mid_test') + r' \"' + p('inner_driver') + r' \\\"' + p('inner_test') + ' --foo' + r'\\\"\""' )], ]) arg = wshell.split(cmd[1][1].string) self.assertEqual(arg, [ p('mid_driver') + ' ' + p('mid_test') + ' "' + p('inner_driver') + r' \"' + p('inner_test') + ' --foo' + r'\""' ]) arg = wshell.split(arg[0]) self.assertEqual(arg, [ p('mid_driver'), p('mid_test'), p('inner_driver') + ' "' + p('inner_test') + ' --foo' + '"' ]) arg = wshell.split(arg[2]) self.assertEqual(arg, [ p('inner_driver'), p('inner_test') + ' --foo' ])
def test_complex(self): p = self.execpath (test_exe, driver_exe, mid_driver_exe, mid_test_exe, inner_driver_exe, inner_test_exe) = self.make_complex() cmd, deps = self._build_commands() self.assertEqual(deps, [test_exe, mid_test_exe, inner_test_exe]) self.assertEqual(cmd, [ [test_exe], [driver_exe, literal( "'" + p('mid_driver') + ' ' + p('mid_test') + r" '\''" + p('inner_driver') + r" '\''\'\'''\''" + p('inner_test') + ' --foo' + r"'\''\'\'" )], ]) arg = pshell.split(cmd[1][1].string, escapes=True) self.assertEqual(arg, [ p('mid_driver') + ' ' + p('mid_test') + " '" + p('inner_driver') + r" '\''" + p('inner_test') + ' --foo' + r"'\'" ]) arg = pshell.split(arg[0], escapes=True) self.assertEqual(arg, [ p('mid_driver'), p('mid_test'), p('inner_driver') + " '" + p('inner_test') + ' --foo' + "'" ]) arg = pshell.split(arg[2], escapes=True) self.assertEqual(arg, [ p('inner_driver'), p('inner_test') + ' --foo' ])
def test_shell(self): s = safe_str.jbos('$foo', safe_str.literal('$bar')) self.out.write(s, Syntax.shell) if platform_info().family == 'windows': expected = '$$foo$bar' else: expected = quoted('$$foo') + '$bar' self.assertEqual(self.out.stream.getvalue(), expected)
def test_shell(self): out = Writer(StringIO()) s = safe_str.jbos('$foo', safe_str.literal('$bar')) out.write(s, Syntax.shell) if platform_name() == 'windows': expected = '$$foo$bar' else: expected = quoted('$$foo') + '$bar' self.assertEqual(out.stream.getvalue(), expected)
def test_jbos(self): self.assertEqual( posix.escape_line(jbos('foo', literal('bar'))), shell_list([jbos(shell_literal('foo'), literal('bar'))])) s = jbos(r'foo\bar', literal(r'baz\quux')) with mock.patch('bfg9000.shell.posix.platform_info', return_value=self.FakePlatform('posix')): self.assertEqual( posix.escape_line(s), shell_list( [jbos(shell_literal(r'foo\bar'), literal(r'baz\quux'))])) with mock.patch('bfg9000.shell.posix.platform_info', return_value=self.FakePlatform('windows')): self.assertEqual( posix.escape_line(s), shell_list( [jbos(shell_literal(r'foo\\bar'), literal(r'baz\quux'))]))
def test_jbos(self): j = jbos('foo', literal('='), 'bar baz') self.assertEqual(textify(j), 'foo=bar baz') self.assertEqual(textify(j, True), 'foo="bar baz"')
def test_use(self): self.assertEqual( Pattern('%.c').use(), safe_str.jbos(safe_str.literal('%'), '.c'))
def test_convert_to_str(self): with self.assertRaises(NotImplementedError): str(safe_str.literal('foo')) with self.assertRaises(NotImplementedError): str(safe_str.shell_literal('foo'))
def test_target(self): self.out.write(safe_str.literal('foo: $bar|baz,quux'), Syntax.target) self.assertEqual(self.out.stream.getvalue(), 'foo: $bar|baz,quux')
def test_concat_pattern(self): self.assertEqual( Pattern('%.c') + Pattern('%.h'), safe_str.jbos(safe_str.literal('%'), '.c', safe_str.literal('%'), '.h'))
def test_shell(self): out = Writer(StringIO()) s = safe_str.jbos('$foo', safe_str.literal('$bar')) out.write(s, Syntax.shell) self.assertEqual(out.stream.getvalue(), quoted('$$foo') + '$bar')
def test_clean(self): out = Writer(StringIO()) s = safe_str.jbos('$foo', safe_str.literal('$bar')) out.write(s, Syntax.clean) self.assertEqual(out.stream.getvalue(), '$$foo$bar')
def test_variable(self): out = Writer(StringIO()) s = safe_str.jbos('$foo', safe_str.literal('bar')) out.write(s, Syntax.variable) self.assertEqual(out.stream.getvalue(), '$foobar')
def test_clean(self): out = Writer(StringIO()) out.write(safe_str.literal('foo: $bar|baz,quux'), Syntax.clean) self.assertEqual(out.stream.getvalue(), 'foo: $bar|baz,quux')
def test_input(self): s = safe_str.jbos('$foo', safe_str.literal('$bar')) self.out.write(s, Syntax.input) self.assertEqual(self.out.stream.getvalue(), '$$foo$bar')
def test_driver(self): driver_exe, test_exe = self.make_driver() cmd, deps = self._build_commands() self.assertEqual(cmd, [[driver_exe, literal(self.execpath('test'))]]) self.assertEqual(deps, [driver_exe, test_exe])
def test_clean(self): self.out.write(safe_str.literal('foo: $bar'), Syntax.clean) self.assertEqual(self.out.stream.getvalue(), 'foo: $bar')
def test_use(self): self.assertEqual(Variable('foo').use(), safe_str.literal('${foo}'))
def test_shell(self): out = Writer(StringIO()) out.write(safe_str.literal('foo: $bar'), Syntax.shell) self.assertEqual(out.stream.getvalue(), 'foo: $bar')
def test_jbos(self): self.assertEqual( windows.escape_line(jbos('foo', literal('bar'))), shell_list([jbos(shell_literal('foo'), literal('bar'))]))
def test_literal(self): self.assertEqual(textify(literal('foo bar')), 'foo bar') self.assertEqual(textify(literal('foo bar'), True), 'foo bar')