Bug 1874684 - Part 28: Return DateDuration from DifferenceISODateTime. r=mgaudet
[gecko.git] / python / mozbuild / mozbuild / test / test_makeutil.py
blob524851bfbd3742612df81aa92f4c26e657d8088b
1 # This Source Code Form is subject to the terms of the Mozilla Public
2 # License, v. 2.0. If a copy of the MPL was not distributed with this
3 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
5 import os
6 import unittest
8 from mozunit import main
9 from six import StringIO
11 from mozbuild.makeutil import Makefile, Rule, read_dep_makefile, write_dep_makefile
14 class TestMakefile(unittest.TestCase):
15 def test_rule(self):
16 out = StringIO()
17 rule = Rule()
18 rule.dump(out)
19 self.assertEqual(out.getvalue(), "")
21 out = StringIO()
22 rule.add_targets(["foo", "bar"])
23 rule.dump(out)
24 self.assertEqual(out.getvalue(), "foo bar:\n")
26 out = StringIO()
27 rule.add_targets(["baz"])
28 rule.add_dependencies(["qux", "hoge", "piyo"])
29 rule.dump(out)
30 self.assertEqual(out.getvalue(), "foo bar baz: qux hoge piyo\n")
32 out = StringIO()
33 rule = Rule(["foo", "bar"])
34 rule.add_dependencies(["baz"])
35 rule.add_commands(["echo $@"])
36 rule.add_commands(["$(BAZ) -o $@ $<", "$(TOUCH) $@"])
37 rule.dump(out)
38 self.assertEqual(
39 out.getvalue(),
40 "foo bar: baz\n"
41 + "\techo $@\n"
42 + "\t$(BAZ) -o $@ $<\n"
43 + "\t$(TOUCH) $@\n",
46 out = StringIO()
47 rule = Rule(["foo"])
48 rule.add_dependencies(["bar", "foo", "baz"])
49 rule.dump(out)
50 self.assertEqual(out.getvalue(), "foo: bar baz\n")
52 out = StringIO()
53 rule.add_targets(["bar"])
54 rule.dump(out)
55 self.assertEqual(out.getvalue(), "foo bar: baz\n")
57 out = StringIO()
58 rule.add_targets(["bar"])
59 rule.dump(out)
60 self.assertEqual(out.getvalue(), "foo bar: baz\n")
62 out = StringIO()
63 rule.add_dependencies(["bar"])
64 rule.dump(out)
65 self.assertEqual(out.getvalue(), "foo bar: baz\n")
67 out = StringIO()
68 rule.add_dependencies(["qux"])
69 rule.dump(out)
70 self.assertEqual(out.getvalue(), "foo bar: baz qux\n")
72 out = StringIO()
73 rule.add_dependencies(["qux"])
74 rule.dump(out)
75 self.assertEqual(out.getvalue(), "foo bar: baz qux\n")
77 out = StringIO()
78 rule.add_dependencies(["hoge", "hoge"])
79 rule.dump(out)
80 self.assertEqual(out.getvalue(), "foo bar: baz qux hoge\n")
82 out = StringIO()
83 rule.add_targets(["fuga", "fuga"])
84 rule.dump(out)
85 self.assertEqual(out.getvalue(), "foo bar fuga: baz qux hoge\n")
87 def test_makefile(self):
88 out = StringIO()
89 mk = Makefile()
90 rule = mk.create_rule(["foo"])
91 rule.add_dependencies(["bar", "baz", "qux"])
92 rule.add_commands(["echo foo"])
93 rule = mk.create_rule().add_targets(["bar", "baz"])
94 rule.add_dependencies(["hoge"])
95 rule.add_commands(["echo $@"])
96 mk.dump(out, removal_guard=False)
97 self.assertEqual(
98 out.getvalue(),
99 "foo: bar baz qux\n" + "\techo foo\n" + "bar baz: hoge\n" + "\techo $@\n",
102 out = StringIO()
103 mk.dump(out)
104 self.assertEqual(
105 out.getvalue(),
106 "foo: bar baz qux\n"
107 + "\techo foo\n"
108 + "bar baz: hoge\n"
109 + "\techo $@\n"
110 + "hoge qux:\n",
113 def test_statement(self):
114 out = StringIO()
115 mk = Makefile()
116 mk.create_rule(["foo"]).add_dependencies(["bar"]).add_commands(["echo foo"])
117 mk.add_statement("BAR = bar")
118 mk.create_rule(["$(BAR)"]).add_commands(["echo $@"])
119 mk.dump(out, removal_guard=False)
120 self.assertEqual(
121 out.getvalue(),
122 "foo: bar\n" + "\techo foo\n" + "BAR = bar\n" + "$(BAR):\n" + "\techo $@\n",
125 @unittest.skipIf(os.name != "nt", "Test only applicable on Windows.")
126 def test_path_normalization(self):
127 out = StringIO()
128 mk = Makefile()
129 rule = mk.create_rule(["c:\\foo"])
130 rule.add_dependencies(["c:\\bar", "c:\\baz\\qux"])
131 rule.add_commands(["echo c:\\foo"])
132 mk.dump(out)
133 self.assertEqual(
134 out.getvalue(),
135 "c:/foo: c:/bar c:/baz/qux\n" + "\techo c:\\foo\n" + "c:/bar c:/baz/qux:\n",
138 def test_read_dep_makefile(self):
139 input = StringIO(
140 os.path.abspath("foo")
141 + ": bar\n"
142 + "baz qux: \\ \n"
143 + "hoge \\\n"
144 + "piyo \\\n"
145 + "fuga\n"
146 + "fuga:\n"
148 result = list(read_dep_makefile(input))
149 self.assertEqual(len(result), 2)
150 self.assertEqual(
151 list(result[0].targets()), [os.path.abspath("foo").replace(os.sep, "/")]
153 self.assertEqual(list(result[0].dependencies()), ["bar"])
154 self.assertEqual(list(result[1].targets()), ["baz", "qux"])
155 self.assertEqual(list(result[1].dependencies()), ["hoge", "piyo", "fuga"])
157 def test_write_dep_makefile(self):
158 out = StringIO()
159 write_dep_makefile(out, "target", ["b", "c", "a"])
160 self.assertEqual(out.getvalue(), "target: b c a\n" + "a b c:\n")
163 if __name__ == "__main__":
164 main()