| import json |
| import pytest |
|
|
| from pytube.exceptions import HTMLParseError |
| from pytube.parser import parse_for_object |
|
|
|
|
| def test_invalid_start(): |
| with pytest.raises(HTMLParseError): |
| parse_for_object('test = {}', r'invalid_regex') |
|
|
|
|
| def test_parse_simple_empty_object(): |
| result = parse_for_object('test = {}', r'test\s*=\s*') |
| assert result == {} |
|
|
|
|
| def test_parse_longer_empty_object(): |
| test_html = """test = { |
| |
| |
| }""" |
| result = parse_for_object(test_html, r'test\s*=\s*') |
| assert result == {} |
|
|
|
|
| def test_parse_empty_object_with_trailing_characters(): |
| test_html = 'test = {};' |
| result = parse_for_object(test_html, r'test\s*=\s*') |
| assert result == {} |
|
|
|
|
| def test_parse_simple_object(): |
| test_html = 'test = {"foo": [], "bar": {}};' |
| result = parse_for_object(test_html, r'test\s*=\s*') |
| assert result == { |
| 'foo': [], |
| 'bar': {} |
| } |
|
|
|
|
| def test_parse_context_closer_in_string_value(): |
| test_html = 'test = {"foo": "};"};' |
| result = parse_for_object(test_html, r'test\s*=\s*') |
| assert result == { |
| 'foo': '};' |
| } |
|
|
|
|
| def test_parse_object_requiring_ast(): |
| invalid_json = '{"foo": "bar",}' |
| test_html = f'test = {invalid_json}' |
| with pytest.raises(json.decoder.JSONDecodeError): |
| json.loads(invalid_json) |
| result = parse_for_object(test_html, r'test\s*=\s*') |
| assert result == { |
| 'foo': 'bar' |
| } |
|
|