#!/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 ! 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( """\ ! idcode: 0x362d093 global_clock_regions: top: ! rows: 0: ! configuration_buses: CLB_IO_CLK: ! configuration_columns: 0: ! 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])))