| #!/usr/bin/env fuchsia-vendored-python |
| # Copyright 2021 The Fuchsia Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import os |
| import unittest |
| import tempfile |
| |
| from depfile import DepFile |
| |
| |
| class DepFileTests(unittest.TestCase): |
| """Validate the depfile generation |
| |
| This validates the rebasing behavior using the following imaginary set of |
| files:: |
| |
| /foo/ |
| bar/ |
| baz/ |
| output |
| things/ |
| input_a |
| input_b |
| input_c |
| |
| Assume a CWD of /foo/bar |
| """ |
| |
| expected = "baz/output: \\\n ../input_c \\\n things/input_a \\\n things/input_b\n" |
| |
| def test_specified_cwd(self): |
| output = "/foo/bar/baz/output" |
| input_a = "/foo/bar/things/input_a" |
| input_b = "/foo/bar/things/input_b" |
| input_c = "/foo/input_c" |
| |
| rebased_depfile = DepFile(output, rebase="/foo/bar") |
| rebased_depfile.add_input(input_a) |
| rebased_depfile.add_input(input_b) |
| rebased_depfile.update([input_b, input_c]) |
| |
| self.assertEqual(str(rebased_depfile), DepFileTests.expected) |
| |
| def test_inferred_cwd(self): |
| """Validate the standard behavior, with a mix of absolute and real paths.""" |
| |
| # make the output absolute (from a path relative to the cwd) |
| output = os.path.abspath("baz/output") |
| input_a = os.path.abspath("things/input_a") |
| input_b = "things/input_b" |
| input_c = os.path.abspath("../input_c") |
| |
| depfile = DepFile(output) |
| depfile.update([input_a, input_b, input_c]) |
| |
| self.assertEqual(str(depfile), DepFileTests.expected) |
| |
| def test_depfile_writing(self): |
| depfile = DepFile("/foo/bar/baz/output", rebase="/foo/bar") |
| depfile.update( |
| [ |
| "/foo/bar/things/input_a", |
| "/foo/bar/things/input_b", |
| "/foo/input_c", |
| ] |
| ) |
| |
| with tempfile.TemporaryFile("w+") as outfile: |
| # Write out the depfile |
| depfile.write_to(outfile) |
| |
| # Read the contents back in |
| outfile.seek(0) |
| contents = outfile.read() |
| self.assertEqual(contents, DepFileTests.expected) |
| |
| def test_empty(self): |
| depfile = DepFile("foo/bar/baz/output") |
| self.assertEqual(str(depfile), "foo/bar/baz/output:\n") |
| |
| |
| if __name__ == "__main__": |
| unittest.main() |