# Copyright 2026 jCloud # 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 # http://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. import types import pytest from src.jcloud_docsgen.utils import assert_that_is_instance class TestType: ... TestType.__name__ = 'NOT TestType' @pytest.mark.parametrize( 'obj,class_or_tuple', [ (1, int), (1, (int,)), (1, str | int), (1, int | str | list), (TestType(), TestType), (None, types.NoneType), ], ) def test_assert_that_is_instance(obj, class_or_tuple): assert_that_is_instance(obj, class_or_tuple) @pytest.mark.parametrize( 'obj,class_or_tuple,expected_exception_msg', [ ( 1, str, "expected 'str', got 'int'", ), ( 1, (str,), "expected 'str', got 'int'", ), ( 1, str | float, "expected either 'str' or 'float', got 'int'", ), ( 1, str | float | list, "expected either 'str', 'float' or 'list', got 'int'", ), ( 1, TestType, "expected 'NOT TestType', got 'int'", ), ], ) def test_assert_that_is_instance_exceptions( obj, class_or_tuple, expected_exception_msg, ): with pytest.raises(TypeError) as exc_info: assert_that_is_instance(obj, class_or_tuple) assert str(exc_info.value) == expected_exception_msg