| #!/usr/bin/env python3 |
| # Copyright 2023 The Chromium Authors |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| from datetime import datetime |
| import os |
| import unittest |
| import idl_schema |
| import json_parse |
| import model |
| from ts_definition_generator import TsDefinitionGenerator |
| |
| |
| class TsDefinitionGeneratorTest(unittest.TestCase): |
| |
| def _GetNamespace(self, fake_content, filename): |
| """Returns a namespace object for the given content""" |
| is_idl = filename.endswith('.idl') |
| api_def = ( |
| idl_schema.Process(fake_content, filename) |
| if is_idl |
| else json_parse.Parse(fake_content) |
| ) |
| m = model.Model() |
| return m.AddNamespace(api_def[0], filename) |
| |
| def LoadFile(self, rel_path: str): |
| dir_path = os.path.dirname(__file__) |
| resolved = os.path.join(dir_path, rel_path) |
| text = '' |
| with open(resolved, 'r') as file: |
| text = file.read() |
| return text |
| |
| def setUp(self): |
| self.maxDiff = None # Lets us see the full diff when inequal. |
| |
| def _runTest(self, in_file: str, expected_file): |
| input_text = self.LoadFile(in_file) |
| is_idl = in_file.endswith('.idl') |
| file_name = 'file' + ('.idl' if is_idl else '.json') |
| namespace = self._GetNamespace(input_text, file_name) |
| result = TsDefinitionGenerator().Generate(namespace).Render() |
| expected = self.LoadFile(expected_file) |
| self.assertMultiLineEqual(expected, result) |
| |
| def testIdlBasics(self): |
| self._runTest('test/idl_basics.idl', 'test/idl_basics_expected.d.ts') |
| |
| def testSimpleJsonApi(self): |
| self._runTest('test/json_basics.json', 'test/json_basics_expected.d.ts') |
| |
| |
| if __name__ == '__main__': |
| unittest.main() |