diff options
Diffstat (limited to 'python/mozbuild/mozbuild/test/test_makeutil.py')
-rw-r--r-- | python/mozbuild/mozbuild/test/test_makeutil.py | 164 |
1 files changed, 164 insertions, 0 deletions
diff --git a/python/mozbuild/mozbuild/test/test_makeutil.py b/python/mozbuild/mozbuild/test/test_makeutil.py new file mode 100644 index 0000000000..524851bfbd --- /dev/null +++ b/python/mozbuild/mozbuild/test/test_makeutil.py @@ -0,0 +1,164 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +import os +import unittest + +from mozunit import main +from six import StringIO + +from mozbuild.makeutil import Makefile, Rule, read_dep_makefile, write_dep_makefile + + +class TestMakefile(unittest.TestCase): + def test_rule(self): + out = StringIO() + rule = Rule() + rule.dump(out) + self.assertEqual(out.getvalue(), "") + + out = StringIO() + rule.add_targets(["foo", "bar"]) + rule.dump(out) + self.assertEqual(out.getvalue(), "foo bar:\n") + + out = StringIO() + rule.add_targets(["baz"]) + rule.add_dependencies(["qux", "hoge", "piyo"]) + rule.dump(out) + self.assertEqual(out.getvalue(), "foo bar baz: qux hoge piyo\n") + + out = StringIO() + rule = Rule(["foo", "bar"]) + rule.add_dependencies(["baz"]) + rule.add_commands(["echo $@"]) + rule.add_commands(["$(BAZ) -o $@ $<", "$(TOUCH) $@"]) + rule.dump(out) + self.assertEqual( + out.getvalue(), + "foo bar: baz\n" + + "\techo $@\n" + + "\t$(BAZ) -o $@ $<\n" + + "\t$(TOUCH) $@\n", + ) + + out = StringIO() + rule = Rule(["foo"]) + rule.add_dependencies(["bar", "foo", "baz"]) + rule.dump(out) + self.assertEqual(out.getvalue(), "foo: bar baz\n") + + out = StringIO() + rule.add_targets(["bar"]) + rule.dump(out) + self.assertEqual(out.getvalue(), "foo bar: baz\n") + + out = StringIO() + rule.add_targets(["bar"]) + rule.dump(out) + self.assertEqual(out.getvalue(), "foo bar: baz\n") + + out = StringIO() + rule.add_dependencies(["bar"]) + rule.dump(out) + self.assertEqual(out.getvalue(), "foo bar: baz\n") + + out = StringIO() + rule.add_dependencies(["qux"]) + rule.dump(out) + self.assertEqual(out.getvalue(), "foo bar: baz qux\n") + + out = StringIO() + rule.add_dependencies(["qux"]) + rule.dump(out) + self.assertEqual(out.getvalue(), "foo bar: baz qux\n") + + out = StringIO() + rule.add_dependencies(["hoge", "hoge"]) + rule.dump(out) + self.assertEqual(out.getvalue(), "foo bar: baz qux hoge\n") + + out = StringIO() + rule.add_targets(["fuga", "fuga"]) + rule.dump(out) + self.assertEqual(out.getvalue(), "foo bar fuga: baz qux hoge\n") + + def test_makefile(self): + out = StringIO() + mk = Makefile() + rule = mk.create_rule(["foo"]) + rule.add_dependencies(["bar", "baz", "qux"]) + rule.add_commands(["echo foo"]) + rule = mk.create_rule().add_targets(["bar", "baz"]) + rule.add_dependencies(["hoge"]) + rule.add_commands(["echo $@"]) + mk.dump(out, removal_guard=False) + self.assertEqual( + out.getvalue(), + "foo: bar baz qux\n" + "\techo foo\n" + "bar baz: hoge\n" + "\techo $@\n", + ) + + out = StringIO() + mk.dump(out) + self.assertEqual( + out.getvalue(), + "foo: bar baz qux\n" + + "\techo foo\n" + + "bar baz: hoge\n" + + "\techo $@\n" + + "hoge qux:\n", + ) + + def test_statement(self): + out = StringIO() + mk = Makefile() + mk.create_rule(["foo"]).add_dependencies(["bar"]).add_commands(["echo foo"]) + mk.add_statement("BAR = bar") + mk.create_rule(["$(BAR)"]).add_commands(["echo $@"]) + mk.dump(out, removal_guard=False) + self.assertEqual( + out.getvalue(), + "foo: bar\n" + "\techo foo\n" + "BAR = bar\n" + "$(BAR):\n" + "\techo $@\n", + ) + + @unittest.skipIf(os.name != "nt", "Test only applicable on Windows.") + def test_path_normalization(self): + out = StringIO() + mk = Makefile() + rule = mk.create_rule(["c:\\foo"]) + rule.add_dependencies(["c:\\bar", "c:\\baz\\qux"]) + rule.add_commands(["echo c:\\foo"]) + mk.dump(out) + self.assertEqual( + out.getvalue(), + "c:/foo: c:/bar c:/baz/qux\n" + "\techo c:\\foo\n" + "c:/bar c:/baz/qux:\n", + ) + + def test_read_dep_makefile(self): + input = StringIO( + os.path.abspath("foo") + + ": bar\n" + + "baz qux: \\ \n" + + "hoge \\\n" + + "piyo \\\n" + + "fuga\n" + + "fuga:\n" + ) + result = list(read_dep_makefile(input)) + self.assertEqual(len(result), 2) + self.assertEqual( + list(result[0].targets()), [os.path.abspath("foo").replace(os.sep, "/")] + ) + self.assertEqual(list(result[0].dependencies()), ["bar"]) + self.assertEqual(list(result[1].targets()), ["baz", "qux"]) + self.assertEqual(list(result[1].dependencies()), ["hoge", "piyo", "fuga"]) + + def test_write_dep_makefile(self): + out = StringIO() + write_dep_makefile(out, "target", ["b", "c", "a"]) + self.assertEqual(out.getvalue(), "target: b c a\n" + "a b c:\n") + + +if __name__ == "__main__": + main() |