#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2020 The Chromium OS Authors. All rights reserved. # 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.""" from __future__ import print_function 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()