| #!/usr/bin/env python3 | 
 | # -*- coding: utf-8 -*- | 
 | # | 
 | # Copyright (C) 2017-2020  The Project X-Ray Authors. | 
 | # | 
 | # Use of this source code is governed by a ISC-style | 
 | # license that can be found in the LICENSE file or at | 
 | # https://opensource.org/licenses/ISC | 
 | # | 
 | # SPDX-License-Identifier: ISC | 
 | import io | 
 | import re | 
 | import yaml | 
 | import json | 
 | import unittest | 
 |  | 
 | from utils import xjson | 
 |  | 
 |  | 
 | def load(f): | 
 |     data = f.read() | 
 |     if isinstance(data, bytes): | 
 |         data = data.decode('utf-8') | 
 |     # Strip out of !<tags> | 
 |     data = re.sub("!<[^>]*>", "", data) | 
 |     return yaml.safe_load(io.StringIO(data)) | 
 |  | 
 |  | 
 | def tojson(f): | 
 |     d = load(f) | 
 |     o = io.StringIO() | 
 |     xjson.pprint(o, d) | 
 |     return o.getvalue() | 
 |  | 
 |  | 
 | class XYamlTest(unittest.TestCase): | 
 |     def test(self): | 
 |         s = io.StringIO( | 
 |             """\ | 
 | !<xilinx/xc7series/part> | 
 | idcode: 0x362d093 | 
 | global_clock_regions: | 
 |   top: !<xilinx/xc7series/global_clock_region> | 
 |     rows: | 
 |       0: !<xilinx/xc7series/row> | 
 |         configuration_buses: | 
 |           CLB_IO_CLK: !<xilinx/xc7series/configuration_bus> | 
 |             configuration_columns: | 
 |               0: !<xilinx/xc7series/configuration_column> | 
 |                 frame_count: 42 | 
 | """) | 
 |         djson = tojson(s) | 
 |         self.assertMultiLineEqual( | 
 |             djson, """\ | 
 | { | 
 |     "global_clock_regions": { | 
 |         "top": { | 
 |             "rows": { | 
 |                 "0": { | 
 |                     "configuration_buses": { | 
 |                         "CLB_IO_CLK": { | 
 |                             "configuration_columns": { | 
 |                                 "0": { | 
 |                                     "frame_count": 42 | 
 |                                 } | 
 |                             } | 
 |                         } | 
 |                     } | 
 |                 } | 
 |             } | 
 |         } | 
 |     }, | 
 |     "idcode": 56807571 | 
 | }""") | 
 |  | 
 |  | 
 | if __name__ == "__main__": | 
 |     import sys | 
 |     if len(sys.argv) == 1: | 
 |         unittest.main() | 
 |     else: | 
 |         assert len(sys.argv) == 2 | 
 |         print(tojson(open(sys.argv[1]))) |