|
| 1 | +import pytest |
| 2 | + |
| 3 | + |
| 4 | +def get_data_set(): |
| 5 | + # https://tools.ietf.org/html/rfc6901 |
| 6 | + return { |
| 7 | + "valid_pointers": [ |
| 8 | + "/myElement", |
| 9 | + "/definitions/myElement", |
| 10 | + "", |
| 11 | + "/foo", |
| 12 | + "/foo/0", |
| 13 | + "/", |
| 14 | + "/a~1b", |
| 15 | + "/c%d", |
| 16 | + "/e^f", |
| 17 | + "/g|h", |
| 18 | + "/i\\j" '/k"l', |
| 19 | + "/ ", |
| 20 | + "/m~0n", |
| 21 | + "/m~01", |
| 22 | + ], |
| 23 | + "invalid_pointers": ["../foo", "foobar", None], |
| 24 | + "tokens_by_pointer": { |
| 25 | + "/myElement": ["", "myElement"], |
| 26 | + "/definitions/myElement": ["", "definitions", "myElement"], |
| 27 | + "": [""], |
| 28 | + "/foo": ["", "foo"], |
| 29 | + "/foo/0": ["", "foo", "0"], |
| 30 | + "/": ["", ""], |
| 31 | + "/a~1b": ["", "a/b"], |
| 32 | + "/c%d": ["", "c%d"], |
| 33 | + "/e^f": ["", "e^f"], |
| 34 | + "/g|h": ["", "g|h"], |
| 35 | + "/i\\j": ["", "i\\j"], |
| 36 | + '/k"l': ["", 'k"l'], |
| 37 | + "/ ": ["", " "], |
| 38 | + "/m~0n": ["", "m~n"], |
| 39 | + "/m~01": ["", "m~1"], |
| 40 | + }, |
| 41 | + } |
| 42 | + |
| 43 | + |
| 44 | +def test___init__(): |
| 45 | + from openapi_python_client.resolver.pointer import Pointer |
| 46 | + |
| 47 | + data_set = get_data_set() |
| 48 | + |
| 49 | + for pointer_str in data_set["valid_pointers"]: |
| 50 | + p = Pointer(pointer_str) |
| 51 | + assert p.value != None |
| 52 | + assert p.value == pointer_str |
| 53 | + |
| 54 | + for pointer_str in data_set["invalid_pointers"]: |
| 55 | + with pytest.raises(ValueError): |
| 56 | + p = Pointer(pointer_str) |
| 57 | + |
| 58 | + |
| 59 | +def test_token(): |
| 60 | + from openapi_python_client.resolver.pointer import Pointer |
| 61 | + |
| 62 | + data_set = get_data_set() |
| 63 | + |
| 64 | + for pointer_str in data_set["tokens_by_pointer"].keys(): |
| 65 | + p = Pointer(pointer_str) |
| 66 | + expected_tokens = data_set["tokens_by_pointer"][pointer_str] |
| 67 | + |
| 68 | + for idx, token in enumerate(p.tokens()): |
| 69 | + assert expected_tokens[idx] == token |
| 70 | + |
| 71 | + |
| 72 | +def test_parent(): |
| 73 | + from openapi_python_client.resolver.pointer import Pointer |
| 74 | + |
| 75 | + data_set = get_data_set() |
| 76 | + |
| 77 | + for pointer_str in data_set["tokens_by_pointer"].keys(): |
| 78 | + p = Pointer(pointer_str) |
| 79 | + expected_tokens = data_set["tokens_by_pointer"][pointer_str] |
| 80 | + |
| 81 | + while p.parent is not None: |
| 82 | + p = p.parent |
| 83 | + expected_tokens.pop() |
| 84 | + assert p.tokens()[-1] == expected_tokens[-1] |
| 85 | + assert len(p.tokens()) == len(expected_tokens) |
| 86 | + |
| 87 | + assert len(expected_tokens) == 1 |
| 88 | + assert expected_tokens[-1] == "" |
| 89 | + |
| 90 | + |
| 91 | +def test__unescape_and__escape(): |
| 92 | + from openapi_python_client.resolver.pointer import Pointer |
| 93 | + |
| 94 | + escaped_unescaped_values = [("/m~0n", "/m~n"), ("/m~01", "/m~1"), ("/a~1b", "/a/b"), ("/foobar", "/foobar")] |
| 95 | + |
| 96 | + for escaped, unescaped in escaped_unescaped_values: |
| 97 | + assert Pointer(escaped).unescapated_value == unescaped |
0 commit comments