diff options
author | robot-piglet <[email protected]> | 2025-08-11 15:54:55 +0300 |
---|---|---|
committer | robot-piglet <[email protected]> | 2025-08-11 16:09:24 +0300 |
commit | aadaac8b7487cac5fb041864293156b5e5a368ae (patch) | |
tree | cbebe670dfb6b735bef49525b64cb7e0e54e84bb /yql/essentials/tests | |
parent | f2bae7e4afaea0c99d6c1ac5338aa9a24b504474 (diff) |
Intermediate changes
commit_hash:5b0aadf271c553415c536606ff7f52575bd267c4
Diffstat (limited to 'yql/essentials/tests')
-rw-r--r-- | yql/essentials/tests/common/test_framework/test_file_common.py | 9 | ||||
-rw-r--r-- | yql/essentials/tests/common/test_framework/test_utils.py | 41 | ||||
-rw-r--r-- | yql/essentials/tests/sql/minirun/pure.py | 4 | ||||
-rw-r--r-- | yql/essentials/tests/sql/sql2yql/test_sql2yql.py | 6 | ||||
-rw-r--r-- | yql/essentials/tests/sql/sql2yql/test_sql_format.py | 6 | ||||
-rw-r--r-- | yql/essentials/tests/sql/suites/select/values.yql (renamed from yql/essentials/tests/sql/suites/select/values.sql) | 0 |
6 files changed, 50 insertions, 16 deletions
diff --git a/yql/essentials/tests/common/test_framework/test_file_common.py b/yql/essentials/tests/common/test_framework/test_file_common.py index 197759ddc5e..5afaafbe228 100644 --- a/yql/essentials/tests/common/test_framework/test_file_common.py +++ b/yql/essentials/tests/common/test_framework/test_file_common.py @@ -1,5 +1,4 @@ import codecs -import os import pytest import re import cyson @@ -11,7 +10,7 @@ from yql_utils import execute, get_supported_providers, get_tables, get_files, g get_pragmas, KSV_ATTR, is_xfail, get_param, YQLExecResult, yql_binary_path, do_custom_error_check from yqlrun import YQLRun -from test_utils import get_parameters_json, replace_vars +from test_utils import get_parameters_json, replace_vars, get_case_file def get_gateways_config(http_files, yql_http_file_server, force_blocks=False, is_hybrid=False, allow_llvm=True, postprocess_func=None): @@ -56,7 +55,7 @@ def check_provider(provider, config): pytest.skip('%s provider is not supported here' % provider) -def get_sql_query(provider, suite, case, config, data_path=None, template='.sql'): +def get_sql_query(provider, suite, case, config, data_path=None, template={'.sql', '.yql'}): pragmas = get_pragmas(config) if get_param('TARGET_PLATFORM'): @@ -66,7 +65,7 @@ def get_sql_query(provider, suite, case, config, data_path=None, template='.sql' if get_param('TARGET_PLATFORM') and is_xfail(config): pytest.skip('xfail is not supported on non-default target platform') - program_sql = os.path.join(data_path, suite, '%s%s' % (case, template)) + program_sql = get_case_file(data_path, suite, case, template) with codecs.open(program_sql, encoding='utf-8') as program_file_descr: sql_query = program_file_descr.read() @@ -91,7 +90,7 @@ def run_file_no_cache(provider, suite, case, cfg, config, yql_http_file_server, run_sql=True, cfg_postprocess=None, langver=None, attr_postprocess=None): check_provider(provider, config) - sql_query = get_sql_query(provider, suite, case, config, data_path, template='.sql' if run_sql else '.yqls') + sql_query = get_sql_query(provider, suite, case, config, data_path, template={'.sql', '.yql'} if run_sql else '.yqls') sql_query = replace_vars(sql_query, "yqlrun_var") xfail = is_xfail(config) diff --git a/yql/essentials/tests/common/test_framework/test_utils.py b/yql/essentials/tests/common/test_framework/test_utils.py index e760e19a342..5406d88a7e0 100644 --- a/yql/essentials/tests/common/test_framework/test_utils.py +++ b/yql/essentials/tests/common/test_framework/test_utils.py @@ -55,7 +55,7 @@ def recursive_glob(root, begin_template=None, end_template=None): yield os.path.relpath(path, root) -def pytest_generate_tests_by_template(template, metafunc, data_path): +def collect_argvalues_by_template(template, data_path): assert data_path is not None argvalues = [] @@ -66,10 +66,23 @@ def pytest_generate_tests_by_template(template, metafunc, data_path): for sql_query_path in recursive_glob(os.path.join(data_path, suite), end_template=template)]): argvalues.append((suite, case)) + return argvalues + + +def pytest_generate_tests_by_template(template, metafunc, data_path): + assert isinstance(template, (str, set)) + + if isinstance(template, str): + template = [template] + + argvalues = [] + for t in template: + argvalues += collect_argvalues_by_template(t, data_path) + metafunc.parametrize(['suite', 'case'], argvalues) -def pytest_generate_tests_for_run(metafunc, template='.sql', suites=None, currentPart=0, partsCount=1, data_path=None, mode_expander=None): +def collect_argvalues_for_run(template, suites, currentPart, partsCount, data_path, mode_expander): assert data_path is not None argvalues = [] @@ -104,13 +117,24 @@ def pytest_generate_tests_for_run(metafunc, template='.sql', suites=None, curren else: argvalues += mode_expander(to_append) + return argvalues + + +def pytest_generate_tests_for_run(metafunc, template={'.sql', '.yql'}, suites=None, currentPart=0, partsCount=1, data_path=None, mode_expander=None): + if isinstance(template, str): + template = [template] + + argvalues = [] + for t in template: + argvalues += collect_argvalues_for_run(t, suites, currentPart, partsCount, data_path, mode_expander) + metafunc.parametrize( ['suite', 'case', 'cfg'] + (['what'] if mode_expander is not None else []), argvalues, ) -def pytest_generate_tests_for_part(metafunc, currentPart, partsCount, data_path=None, template='.sql', mode_expander=None): +def pytest_generate_tests_for_part(metafunc, currentPart, partsCount, data_path=None, template={'.sql', '.yql'}, mode_expander=None): return pytest_generate_tests_for_run(metafunc, currentPart=currentPart, partsCount=partsCount, data_path=data_path, template=template, mode_expander=mode_expander) @@ -285,3 +309,14 @@ def replace_vars(sql_query, var_tag): for var_name, var_value in vars: sql_query = re.sub(re.escape(var_name.strip()), var_value.strip(), sql_query) return sql_query + + +def get_case_file(data, suite, case, exts): + if isinstance(exts, str): + exts = [exts] + + files = [os.path.join(data, suite, '%s%s' % (case, ext)) for ext in exts] + files = [file for file in files if os.path.exists(file)] + assert len(files) != 0, 'No file for %s/%s found' % (suite, case) + assert len(files) == 1, 'Ambiguous files for %s/%s: %s' % (suite, case, exts) + return files[0] diff --git a/yql/essentials/tests/sql/minirun/pure.py b/yql/essentials/tests/sql/minirun/pure.py index 3ec17bb2fa0..d84a4c80aa7 100644 --- a/yql/essentials/tests/sql/minirun/pure.py +++ b/yql/essentials/tests/sql/minirun/pure.py @@ -12,7 +12,7 @@ from yql_utils import execute, get_tables, get_files, get_http_files, \ normalize_result, get_langver from yqlrun import YQLRun -from test_utils import get_config, get_parameters_json +from test_utils import get_config, get_parameters_json, get_case_file from test_file_common import run_file, run_file_no_cache, get_gateways_config, get_sql_query DEFAULT_LANG_VER = '2025.01' @@ -48,7 +48,7 @@ def run_test(suite, case, cfg, tmpdir, what, yql_http_file_server): if xfail and what != 'Results': pytest.skip('xfail is not supported in this mode') - program_sql = os.path.join(DATA_PATH, suite, '%s.sql' % case) + program_sql = get_case_file(DATA_PATH, suite, case, {'.sql', '.yql'}) with codecs.open(program_sql, encoding='utf-8') as program_file_descr: sql_query = program_file_descr.read() diff --git a/yql/essentials/tests/sql/sql2yql/test_sql2yql.py b/yql/essentials/tests/sql/sql2yql/test_sql2yql.py index c8f5bbcd845..bead20d966d 100644 --- a/yql/essentials/tests/sql/sql2yql/test_sql2yql.py +++ b/yql/essentials/tests/sql/sql2yql/test_sql2yql.py @@ -2,7 +2,7 @@ import os import yatest.common -from test_utils import get_config, pytest_generate_tests_by_template, SQLRUN_PATH, SQL_FLAGS +from test_utils import get_config, pytest_generate_tests_by_template, SQLRUN_PATH, SQL_FLAGS, get_case_file from yql_utils import get_langver @@ -11,7 +11,7 @@ DATA_PATH = yatest.common.source_path('yql/essentials/tests/sql/suites') def pytest_generate_tests(metafunc): - return pytest_generate_tests_by_template('.sql', metafunc, data_path=DATA_PATH) + return pytest_generate_tests_by_template({'.sql', '.yql'}, metafunc, data_path=DATA_PATH) def _get_cfg_path(suite, case, data_path): @@ -81,7 +81,7 @@ def test(suite, case, tmpdir): files = [] # case can contain slash because of nested suites out_dir = tmpdir.mkdir(suite).mkdir(case.replace('/', '_')).dirname - case_file = os.path.join(DATA_PATH, suite, '%s.sql' % case) + case_file = get_case_file(DATA_PATH, suite, case, {'.sql', '.yql'}) with open(case_file, 'r') as f: content = f.read() ansi_lexer = 'ansi_lexer' in content diff --git a/yql/essentials/tests/sql/sql2yql/test_sql_format.py b/yql/essentials/tests/sql/sql2yql/test_sql_format.py index fdf2ca75e88..6e97535b61a 100644 --- a/yql/essentials/tests/sql/sql2yql/test_sql_format.py +++ b/yql/essentials/tests/sql/sql2yql/test_sql_format.py @@ -3,20 +3,20 @@ import yatest.common import pytest from test_sql2yql import get_sql2yql_cmd -from test_utils import pytest_generate_tests_by_template +from test_utils import pytest_generate_tests_by_template, get_case_file DATA_PATH = yatest.common.source_path('yql/essentials/tests/sql/suites') def pytest_generate_tests(metafunc): - return pytest_generate_tests_by_template('.sql', metafunc, data_path=DATA_PATH) + return pytest_generate_tests_by_template({'.sql', '.yql'}, metafunc, data_path=DATA_PATH) def test(suite, case, tmpdir): files = [] # case can contain slash because of nested suites out_dir = tmpdir.mkdir(suite).mkdir(case.replace('/', '_')).dirname - case_file = os.path.join(DATA_PATH, suite, '%s.sql' % case) + case_file = get_case_file(DATA_PATH, suite, case, {'.sql', '.yql'}) ansi_lexer = False with open(case_file, 'r') as f: content = f.read() diff --git a/yql/essentials/tests/sql/suites/select/values.sql b/yql/essentials/tests/sql/suites/select/values.yql index 345513ede5e..345513ede5e 100644 --- a/yql/essentials/tests/sql/suites/select/values.sql +++ b/yql/essentials/tests/sql/suites/select/values.yql |