You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

110 lines
2.8 KiB

#!/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()