#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2020 The ChromiumOS Authors # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. """Tests for fetch_gn_descs.py.""" import io import unittest import fetch_gn_descs # pylint: disable=protected-access class Test(unittest.TestCase): """Tests for fetch_gn_descs.""" def test_fix_result_removes_uninteresting_items(self): items = { "//uninteresting:a": {}, "//uninteresting:b": { "sources": ["whee"], }, "//uninteresting:c": { "configs": ["whee"], }, "//uninteresting:d": { "sources": [], "configs": [], }, "//interesting:a": { "sources": ["a"], "configs": ["b"], }, "//interesting:b": { "sources": ["d"], "configs": ["c"], }, } expected_items = { "//interesting:a": items["//interesting:a"], "//interesting:b": items["//interesting:b"], } self.assertDictEqual( fetch_gn_descs._fix_result("/", "/", "/", items), expected_items ) def test_fix_result_translates_paths_in_out_dir(self): items = { "//interesting:a": { "sources": ["//out_dir/foo", "//out_dir"], "configs": ["b"], }, } expected_items = { "//interesting:a": { "sources": ["//out_translated/foo", "//out_translated/"], "configs": ["b"], }, } self.assertDictEqual( fetch_gn_descs._fix_result( rename_out="//out_translated", out_dir="/chromium/src/out_dir", chromium_root="/chromium", gn_desc=items, ), expected_items, ) def test_gn_desc_output_parsing_skips_pre_json_warnings(self): gn_desc = io.StringIO( "\n".join( ( "foo", 'warning: "{" is bad', '{"bar": "baz",', ' "qux": true}', ) ) ) warnings, desc_json = fetch_gn_descs._parse_gn_desc_output(gn_desc) self.assertEqual( warnings, "\n".join( ( "foo", 'warning: "{" is bad', ) ), ) self.assertEqual( desc_json, { "bar": "baz", "qux": True, }, ) def test_gn_desc_output_parsing_issues_no_warnings_if_none_are_present( self, ): gn_desc = io.StringIO('{"bar": "baz"}') warnings, desc_json = fetch_gn_descs._parse_gn_desc_output(gn_desc) self.assertEqual(warnings, "") self.assertEqual(desc_json, {"bar": "baz"}) gn_desc = io.StringIO('\n \n\t\n{"bar": "baz"}') warnings, desc_json = fetch_gn_descs._parse_gn_desc_output(gn_desc) self.assertEqual(warnings, "") self.assertEqual(desc_json, {"bar": "baz"}) if __name__ == "__main__": unittest.main()