|
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' |
|
} |
|
|