def test_invalid_css_selector_expr(element, expr): extractor = JSONExtractor(expr) with pytest.raises(ExprError) as catch: extractor.extract(element) exc = catch.value assert exc.extractor is extractor assert isinstance(exc.exc, (JsonPathLexerError, Exception))
def test_extract(element, expr, expect, build_first): extractor = JSONExtractor(expr) assert not extractor.built if build_first: extractor.build() assert extractor.built assert expect == extractor.extract(element) assert extractor.built
def test_invalid_css_selector_expr(element, expr, by): extractor = JSONExtractor(expr) with pytest.raises(ExprError) as catch: if by == "build": extractor.build() elif by == "extract": extractor.extract(element) exc = catch.value assert exc.extractor is extractor if (data_extractor.json.json_extractor_backend is data_extractor.json.JSONPathExtractor): # JSONExtractor implementated by 'jsonpath-extractor' # only raise SyntaxError in build method assert isinstance(exc.exc, SyntaxError) else: from jsonpath_rw.lexer import JsonPathLexerError assert isinstance(exc.exc, (JsonPathLexerError, Exception)) assert re.match(r"ExprError with .+? raised by .+? extracting", str(exc))
def test_extract(element, expr, expect): extractor = JSONExtractor(expr) assert expect == extractor.extract(element)