blob: 9cc05d3205f94493059ffa1805489ef91ec892d9 [file] [log] [blame]
#!/usr/bin/env fuchsia-vendored-python
# Copyright 2024 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 json
import tempfile
import unittest
import sys
from pathlib import Path
sys.path.insert(0, Path(__file__).parent)
import gn_ninja_outputs
_NINJA_OUTPUTS = {
"//:foo": ["obj/foo.stamp"],
"//:bar": [
"obj/bar.output",
"obj/bar.stamp",
],
"//:zoo": [
"obj/zoo.output",
"obj/zoo.stamp",
],
"//:zoo(//toolchain:secondary)": [
"secondary/obj/zoo.output",
"secondary/obj/zoo.stamp",
],
}
class TestNinjaOutputsDatabase(unittest.TestCase):
def setUp(self):
self._inputs_json_file = tempfile.NamedTemporaryFile(
mode="wt", suffix=".json"
)
self.inputs_json = Path(self._inputs_json_file.name)
json.dump(_NINJA_OUTPUTS, self._inputs_json_file)
self._inputs_json_file.flush()
def run_tests(self, db):
self.assertEqual([], db.gn_label_to_paths("//:unknown"))
for label, paths in _NINJA_OUTPUTS.items():
self.assertListEqual(
paths,
db.gn_label_to_paths(label),
f"When querying label {label}",
)
self.assertEqual("", db.path_to_gn_label("unknown_path"))
for label, paths in _NINJA_OUTPUTS.items():
for path in paths:
self.assertEqual(
label,
db.path_to_gn_label(path),
f"When querying path {path}",
)
self.assertListEqual(sorted(_NINJA_OUTPUTS.keys()), db.get_labels())
expected_paths = sorted(
path for sublist in _NINJA_OUTPUTS.values() for path in sublist
)
self.assertListEqual(expected_paths, db.get_paths())
def run_tests_for_class(self, db_class):
db = db_class()
db.load_from_json(self.inputs_json)
self.run_tests(db)
database_file = tempfile.NamedTemporaryFile(suffix=".database")
database_path = Path(database_file.name)
db.save_to_file(database_path)
db = db_class()
db.load_from_file(database_path)
self.run_tests(db)
def test_json_database(self):
self.run_tests_for_class(gn_ninja_outputs.NinjaOutputsJSON)
def test_tabular_database(self):
self.run_tests_for_class(gn_ninja_outputs.NinjaOutputsTabular)
def test_sqlite_database(self):
self.run_tests_for_class(gn_ninja_outputs.NinjaOutputsSqlite3)
def test_marshal_database(self):
self.run_tests_for_class(gn_ninja_outputs.NinjaOutputsMarshal)
if __name__ == "__main__":
unittest.main()