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