summaryrefslogtreecommitdiffstats
path: root/yql/essentials/tests
diff options
context:
space:
mode:
authorrobot-piglet <[email protected]>2025-08-11 15:54:55 +0300
committerrobot-piglet <[email protected]>2025-08-11 16:09:24 +0300
commitaadaac8b7487cac5fb041864293156b5e5a368ae (patch)
treecbebe670dfb6b735bef49525b64cb7e0e54e84bb /yql/essentials/tests
parentf2bae7e4afaea0c99d6c1ac5338aa9a24b504474 (diff)
Intermediate changes
commit_hash:5b0aadf271c553415c536606ff7f52575bd267c4
Diffstat (limited to 'yql/essentials/tests')
-rw-r--r--yql/essentials/tests/common/test_framework/test_file_common.py9
-rw-r--r--yql/essentials/tests/common/test_framework/test_utils.py41
-rw-r--r--yql/essentials/tests/sql/minirun/pure.py4
-rw-r--r--yql/essentials/tests/sql/sql2yql/test_sql2yql.py6
-rw-r--r--yql/essentials/tests/sql/sql2yql/test_sql_format.py6
-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