# Copyright 2022 The Pigweed Authors # # Licensed under the Apache License, Version 2.0 (the "License"); you may not # use this file except in compliance with the License. You may obtain a copy of # the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations under # the License. """Tests for the file_prefix_map utility""" from io import StringIO import json import unittest from pw_build import file_prefix_map # pylint: disable=line-too-long JSON_SOURCE_FILES = json.dumps([ "../pigweed/pw_polyfill/standard_library_public/pw_polyfill/standard_library/assert.h", "protocol_buffer/gen/pigweed/pw_protobuf/common_protos.proto_library/nanopb/pw_protobuf_protos/status.pb.h", "../pigweed/pw_rpc/client_server.cc", "../pigweed/pw_rpc/public/pw_rpc/client_server.h", "/home/user/pigweed/out/../gen/generated_build_info.cc", "/home/user/pigweed/pw_protobuf/encoder.cc", ]) JSON_PATH_TRANSFORMATIONS = json.dumps([ "/home/user/pigweed/out=out", "/home/user/pigweed/=", "../=", "/home/user/pigweed/out=out", ]) EXPECTED_TRANSFORMED_PATHS = json.dumps([ "pigweed/pw_polyfill/standard_library_public/pw_polyfill/standard_library/assert.h", "protocol_buffer/gen/pigweed/pw_protobuf/common_protos.proto_library/nanopb/pw_protobuf_protos/status.pb.h", "pigweed/pw_rpc/client_server.cc", "pigweed/pw_rpc/public/pw_rpc/client_server.h", "out/../gen/generated_build_info.cc", "pw_protobuf/encoder.cc", ]) class FilePrefixMapTest(unittest.TestCase): def test_prefix_remap(self): path_list = [ '/foo_root/root_subdir/source.cc', '/foo_root/root_subdir/out/../gen.cc' ] prefix_maps = [('/foo_root/root_subdir/', ''), ('out/../', 'out/')] expected_paths = ['source.cc', 'out/gen.cc'] self.assertEqual( list(file_prefix_map.remap_paths(path_list, prefix_maps)), expected_paths) def test_json_prefix_map(self): in_fd = StringIO(JSON_SOURCE_FILES) prefix_map_fd = StringIO(JSON_PATH_TRANSFORMATIONS) out_fd = StringIO() file_prefix_map.remap_json_paths(in_fd, out_fd, prefix_map_fd) self.assertEqual(json.loads(out_fd.getvalue()), json.loads(EXPECTED_TRANSFORMED_PATHS)) if __name__ == '__main__': unittest.main()