| # ===----------------------------------------------------------------------===## |
| # |
| # Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| # See https://llvm.org/LICENSE.txt for license information. |
| # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| # |
| # ===----------------------------------------------------------------------===## |
| |
| # RUN: %{python} %s %{libcxx-dir}/utils %t |
| |
| import sys |
| import json |
| |
| sys.path.append(sys.argv[1]) |
| from generate_feature_test_macro_components import FeatureTestMacros |
| |
| |
| def test(output, expected): |
| assert output == expected, f"expected\n{expected}\n\noutput\n{output}" |
| |
| |
| def test_error(data, type, message): |
| tmp = sys.argv[2] |
| with open(tmp, "w") as file: |
| file.write(json.dumps(data)) |
| ftm = FeatureTestMacros(tmp) |
| try: |
| ftm.implemented_ftms |
| except type as error: |
| test(str(error), message) |
| else: |
| assert False, "no exception was thrown" |
| |
| |
| test_error( |
| [ |
| { |
| "values": { |
| "c++17": { |
| "197001": [ |
| { |
| "implemented": False, |
| }, |
| ], |
| }, |
| }, |
| "headers": [], |
| }, |
| ], |
| KeyError, |
| "'name'", |
| ) |
| |
| test_error( |
| [ |
| { |
| "name": "a", |
| "headers": [], |
| }, |
| ], |
| KeyError, |
| "'values'", |
| ) |
| |
| test_error( |
| [ |
| { |
| "name": "a", |
| "values": {}, |
| "headers": [], |
| }, |
| ], |
| AssertionError, |
| "'values' is empty", |
| ) |
| |
| |
| test_error( |
| [ |
| { |
| "name": "a", |
| "values": { |
| "c++17": {}, |
| }, |
| "headers": [], |
| }, |
| ], |
| AssertionError, |
| "a[c++17] has no entries", |
| ) |
| |
| test_error( |
| [ |
| { |
| "name": "a", |
| "values": { |
| "c++17": { |
| "197001": [ |
| {}, |
| ], |
| }, |
| }, |
| "headers": [], |
| }, |
| ], |
| KeyError, |
| "'implemented'", |
| ) |