6
0
mirror of https://github.com/FirebirdSQL/firebird-qa.git synced 2025-01-23 05:53:06 +01:00
firebird-qa/tests/bugs/core_1431_test.py

207 lines
13 KiB
Python
Raw Normal View History

2021-04-26 20:07:00 +02:00
#coding:utf-8
2022-01-20 17:32:14 +01:00
"""
ID: issue-1849
ISSUE: 1849
TITLE: Greek characters in cp1251 vs uppercasing
DESCRIPTION:
JIRA: CORE-1431
FBTEST: bugs.core_1431
2022-01-20 17:32:14 +01:00
"""
2021-04-26 20:07:00 +02:00
2022-01-20 17:32:14 +01:00
import pytest
from firebird.qa import *
2021-04-26 20:07:00 +02:00
2022-01-20 17:32:14 +01:00
init_script = """
2021-04-26 20:07:00 +02:00
recreate table c1251(c char(1) character set win1251, id int, descr varchar(80) );
commit;
-- http://www.columbia.edu/kermit/cp1251.html
--char dec col/row oct hex description
insert into c1251( c, id, descr ) values('Ђ', 128, 'CYRILLIC CAPITAL LETTER DJE');
insert into c1251( c, id, descr ) values('Ѓ', 129, 'CYRILLIC CAPITAL LETTER GJE');
insert into c1251( c, id, descr ) values('', 130, 'LOW 9 SINGLE QUOTE');
insert into c1251( c, id, descr ) values('ѓ', 131, 'CYRILLIC SMALL LETTER GJE');
insert into c1251( c, id, descr ) values('', 132, 'LOW 9 DOUBLE QUOTE');
insert into c1251( c, id, descr ) values('', 133, 'ELLIPSIS');
insert into c1251( c, id, descr ) values('', 134, 'DAGGER');
insert into c1251( c, id, descr ) values('', 135, 'DOUBLE DAGGER');
insert into c1251( c, id, descr ) values('', 136, 'EURO SIGN');
insert into c1251( c, id, descr ) values('', 137, 'PER MIL SIGN');
insert into c1251( c, id, descr ) values('Љ', 138, 'CYRILLIC CAPITAL LETTER LJE');
insert into c1251( c, id, descr ) values('', 139, 'LEFT SINGLE QUOTE BRACKET');
insert into c1251( c, id, descr ) values('Њ', 140, 'CYRILLIC CAPITAL LETTER NJE');
insert into c1251( c, id, descr ) values('Ќ', 141, 'CYRILLIC CAPITAL LETTER KJE');
insert into c1251( c, id, descr ) values('Ћ', 142, 'CYRILLIC CAPITAL LETTER TSHE');
insert into c1251( c, id, descr ) values('Џ', 143, 'CYRILLIC CAPITAL LETTER DZHE');
insert into c1251( c, id, descr ) values('ђ', 144, 'CYRILLIC SMALL LETTER DJE');
insert into c1251( c, id, descr ) values('', 145, 'HIGH 6 SINGLE QUOTE');
insert into c1251( c, id, descr ) values('', 146, 'HIGH 9 SINGLE QUOTE');
insert into c1251( c, id, descr ) values('', 147, 'HIGH 6 DOUBLE QUOTE');
insert into c1251( c, id, descr ) values('', 148, 'HIGH 9 DOUBLE QUOTE');
insert into c1251( c, id, descr ) values('', 149, 'LARGE CENTERED DOT');
insert into c1251( c, id, descr ) values('', 150, 'EN DASH');
insert into c1251( c, id, descr ) values('', 151, 'EM DASH');
insert into c1251( c, id, descr ) values('', 153, 'TRADEMARK SIGN');
insert into c1251( c, id, descr ) values('љ', 154, 'CYRILLIC SMALL LETTER LJE');
insert into c1251( c, id, descr ) values('', 155, 'RIGHT SINGLE QUOTE BRACKET');
insert into c1251( c, id, descr ) values('њ', 156, 'CYRILLIC SMALL LETTER NJE');
insert into c1251( c, id, descr ) values('ќ', 157, 'CYRILLIC SMALL LETTER KJE');
insert into c1251( c, id, descr ) values('ћ', 158, 'CYRILLIC CAPITAL LETTER TSHE');
insert into c1251( c, id, descr ) values('џ', 159, 'CYRILLIC CAPITAL LETTER DZHE');
--insert into c1251( c, id, descr ) values(', ', 160, 'NO-BREAK SPACE');
insert into c1251( c, id, descr ) values('Ў', 161, 'CYRILLIC CAPITAL LETTER SHORT U');
insert into c1251( c, id, descr ) values('ў', 162, 'CYRILLIC SMALL LETTER SHORT U');
insert into c1251( c, id, descr ) values('Ј', 163, 'CYRILLIC CAPITAL LETTER JE');
insert into c1251( c, id, descr ) values('¤', 164, 'CURRENCY SIGN');
insert into c1251( c, id, descr ) values('Ґ', 165, 'CYRILLIC CAPITAL LETTER GHE WITH UPTURN');
insert into c1251( c, id, descr ) values('¦', 166, 'BROKEN BAR');
insert into c1251( c, id, descr ) values('§', 167, 'PARAGRAPH SIGN');
insert into c1251( c, id, descr ) values('Ё', 168, 'CYRILLIC CAPITAL LETTER IO');
insert into c1251( c, id, descr ) values('©', 169, 'COPYRIGHT SIGN');
insert into c1251( c, id, descr ) values('Є', 170, 'CYRILLIC CAPITAL LETTER UKRAINIAN IE');
insert into c1251( c, id, descr ) values('«', 171, 'LEFT ANGLE QUOTATION MARK');
insert into c1251( c, id, descr ) values('¬', 172, 'NOT SIGN');
2021-11-11 18:01:08 +01:00
2021-04-26 20:07:00 +02:00
-- insert into c1251( c, id, descr ) values('[SKIPPED! CAN NOT BE INTERPRETED ON LINUX!]', 173, 'SOFT HYPHEN');
insert into c1251( c, id, descr ) values('®', 174, 'REGISTERED TRADE MARK SIGN');
insert into c1251( c, id, descr ) values('Ї', 175, 'CYRILLIC CAPITAL LETTER YI');
insert into c1251( c, id, descr ) values('°', 176, 'DEGREE SIGN, RING ABOVE');
insert into c1251( c, id, descr ) values('±', 177, 'PLUS-MINUS SIGN');
insert into c1251( c, id, descr ) values('І', 178, 'CYRILLIC CAPITAL LETTER BYELORUSSION-UKRAINIAN I');
insert into c1251( c, id, descr ) values('і', 179, 'CYRILLIC SMALL LETTER BYELORUSSION-UKRAINIAN I');
insert into c1251( c, id, descr ) values('ґ', 180, 'CYRILLIC SMALL LETTER GHE WITH UPTURN');
insert into c1251( c, id, descr ) values('µ', 181, 'MICRO SIGN');
insert into c1251( c, id, descr ) values('', 182, 'PILCROW SIGN');
insert into c1251( c, id, descr ) values('·', 183, 'MIDDLE DOT');
insert into c1251( c, id, descr ) values('ё', 184, 'CYRILLIC SMALL LETTER IO');
insert into c1251( c, id, descr ) values('', 185, 'NUMERO SIGN');
insert into c1251( c, id, descr ) values('є', 186, 'CYRILLIC SMALL LETTER UKRAINIAN IE');
insert into c1251( c, id, descr ) values('»', 187, 'RIGHT ANGLE QUOTATION MARK');
insert into c1251( c, id, descr ) values('ј', 188, 'CYRILLIC SMALL LETTER JE');
insert into c1251( c, id, descr ) values('Ѕ', 189, 'CYRILLIC CAPITAL LETTER DZE');
insert into c1251( c, id, descr ) values('ѕ', 190, 'CYRILLIC SMALL LETTER DZE');
insert into c1251( c, id, descr ) values('ї', 191, 'CYRILLIC SMALL LETTER YI');
insert into c1251( c, id, descr ) values('А', 192, 'CYRILLIC CAPITAL LETTER A');
insert into c1251( c, id, descr ) values('Б', 193, 'CYRILLIC CAPITAL LETTER BE');
insert into c1251( c, id, descr ) values('В', 194, 'CYRILLIC CAPITAL LETTER VE');
insert into c1251( c, id, descr ) values('Г', 195, 'CYRILLIC CAPITAL LETTER GHE');
insert into c1251( c, id, descr ) values('Д', 196, 'CYRILLIC CAPITAL LETTER DE');
insert into c1251( c, id, descr ) values('Е', 197, 'CYRILLIC CAPITAL LETTER IE');
insert into c1251( c, id, descr ) values('Ж', 198, 'CYRILLIC CAPITAL LETTER ZHE');
insert into c1251( c, id, descr ) values('З', 199, 'CYRILLIC CAPITAL LETTER ZE');
insert into c1251( c, id, descr ) values('И', 200, 'CYRILLIC CAPITAL LETTER I');
insert into c1251( c, id, descr ) values('Й', 201, 'CYRILLIC CAPITAL LETTER SHORT I');
insert into c1251( c, id, descr ) values('К', 202, 'CYRILLIC CAPITAL LETTER KA');
insert into c1251( c, id, descr ) values('Л', 203, 'CYRILLIC CAPITAL LETTER EL');
insert into c1251( c, id, descr ) values('М', 204, 'CYRILLIC CAPITAL LETTER EM');
insert into c1251( c, id, descr ) values('Н', 205, 'CYRILLIC CAPITAL LETTER EN');
insert into c1251( c, id, descr ) values('О', 206, 'CYRILLIC CAPITAL LETTER O');
insert into c1251( c, id, descr ) values('П', 207, 'CYRILLIC CAPITAL LETTER PE');
insert into c1251( c, id, descr ) values('Р', 208, 'CYRILLIC CAPITAL LETTER ER');
insert into c1251( c, id, descr ) values('С', 209, 'CYRILLIC CAPITAL LETTER ES');
insert into c1251( c, id, descr ) values('Т', 210, 'CYRILLIC CAPITAL LETTER TE');
insert into c1251( c, id, descr ) values('У', 211, 'CYRILLIC CAPITAL LETTER U');
insert into c1251( c, id, descr ) values('Ф', 212, 'CYRILLIC CAPITAL LETTER EF');
insert into c1251( c, id, descr ) values('Х', 213, 'CYRILLIC CAPITAL LETTER HA');
insert into c1251( c, id, descr ) values('Ц', 214, 'CYRILLIC CAPITAL LETTER TSE');
insert into c1251( c, id, descr ) values('Ч', 215, 'CYRILLIC CAPITAL LETTER CHE');
insert into c1251( c, id, descr ) values('Ш', 216, 'CYRILLIC CAPITAL LETTER SHA');
insert into c1251( c, id, descr ) values('Щ', 217, 'CYRILLIC CAPITAL LETTER SHCHA');
insert into c1251( c, id, descr ) values('Ъ', 218, 'CYRILLIC CAPITAL LETTER HARD SIGN');
insert into c1251( c, id, descr ) values('Ы', 219, 'CYRILLIC CAPITAL LETTER YERU');
insert into c1251( c, id, descr ) values('Ь', 220, 'CYRILLIC CAPITAL LETTER SOFT SIGN');
insert into c1251( c, id, descr ) values('Э', 221, 'CYRILLIC CAPITAL LETTER E');
insert into c1251( c, id, descr ) values('Ю', 222, 'CYRILLIC CAPITAL LETTER YU');
insert into c1251( c, id, descr ) values('Я', 223, 'CYRILLIC CAPITAL LETTER YA');
insert into c1251( c, id, descr ) values('а', 224, 'CYRILLIC SMALL LETTER A');
insert into c1251( c, id, descr ) values('б', 225, 'CYRILLIC SMALL LETTER BE');
insert into c1251( c, id, descr ) values('в', 226, 'CYRILLIC SMALL LETTER VE');
insert into c1251( c, id, descr ) values('г', 227, 'CYRILLIC SMALL LETTER GHE');
insert into c1251( c, id, descr ) values('д', 228, 'CYRILLIC SMALL LETTER DE');
insert into c1251( c, id, descr ) values('е', 229, 'CYRILLIC SMALL LETTER IE');
insert into c1251( c, id, descr ) values('ж', 230, 'CYRILLIC SMALL LETTER ZHE');
insert into c1251( c, id, descr ) values('з', 231, 'CYRILLIC SMALL LETTER ZE');
insert into c1251( c, id, descr ) values('и', 232, 'CYRILLIC SMALL LETTER I');
insert into c1251( c, id, descr ) values('й', 233, 'CYRILLIC SMALL LETTER SHORT I');
insert into c1251( c, id, descr ) values('к', 234, 'CYRILLIC SMALL LETTER KA');
insert into c1251( c, id, descr ) values('л', 235, 'CYRILLIC SMALL LETTER EL');
insert into c1251( c, id, descr ) values('м', 236, 'CYRILLIC SMALL LETTER EM');
insert into c1251( c, id, descr ) values('н', 237, 'CYRILLIC SMALL LETTER EN');
insert into c1251( c, id, descr ) values('о', 238, 'CYRILLIC SMALL LETTER O');
insert into c1251( c, id, descr ) values('п', 239, 'CYRILLIC SMALL LETTER PE');
insert into c1251( c, id, descr ) values('р', 240, 'CYRILLIC SMALL LETTER ER');
insert into c1251( c, id, descr ) values('с', 241, 'CYRILLIC SMALL LETTER ES');
insert into c1251( c, id, descr ) values('т', 242, 'CYRILLIC SMALL LETTER TE');
insert into c1251( c, id, descr ) values('у', 243, 'CYRILLIC SMALL LETTER U');
insert into c1251( c, id, descr ) values('ф', 244, 'CYRILLIC SMALL LETTER EF');
insert into c1251( c, id, descr ) values('х', 245, 'CYRILLIC SMALL LETTER HA');
insert into c1251( c, id, descr ) values('ц', 246, 'CYRILLIC SMALL LETTER TSE');
insert into c1251( c, id, descr ) values('ч', 247, 'CYRILLIC SMALL LETTER CHE');
insert into c1251( c, id, descr ) values('ш', 248, 'CYRILLIC SMALL LETTER CHA');
insert into c1251( c, id, descr ) values('щ', 249, 'CYRILLIC SMALL LETTER SHCHA');
insert into c1251( c, id, descr ) values('ъ', 250, 'CYRILLIC SMALL LETTER HARD SIGN');
insert into c1251( c, id, descr ) values('ы', 251, 'CYRILLIC SMALL LETTER YERU');
insert into c1251( c, id, descr ) values('ь', 252, 'CYRILLIC SMALL LETTER SOFT SIGN');
insert into c1251( c, id, descr ) values('э', 253, 'CYRILLIC SMALL LETTER E');
insert into c1251( c, id, descr ) values('ю', 254, 'CYRILLIC SMALL LETTER YU');
insert into c1251( c, id, descr ) values('я', 255, 'CYRILLIC SMALL LETTER YA');
commit;
2021-12-22 20:23:11 +01:00
"""
2021-04-26 20:07:00 +02:00
2022-01-20 17:32:14 +01:00
db = db_factory(init=init_script, charset='UTF8')
2021-11-11 18:01:08 +01:00
2022-01-20 17:32:14 +01:00
test_script = """
2021-11-11 18:01:08 +01:00
set list on;
-- Test: following statement should pass OK, w/o exceptions:
select min(t.descr) as has_no_upper_case_equiv
from c1251 t
group by upper(t.c)
having count(*) <> 2 ;
"""
2022-01-20 17:32:14 +01:00
act = isql_act('db', test_script)
2021-04-26 20:07:00 +02:00
2022-01-20 17:32:14 +01:00
expected_stdout = """
2021-04-26 20:07:00 +02:00
HAS_NO_UPPER_CASE_EQUIV LOW 9 SINGLE QUOTE
HAS_NO_UPPER_CASE_EQUIV LOW 9 DOUBLE QUOTE
HAS_NO_UPPER_CASE_EQUIV ELLIPSIS
HAS_NO_UPPER_CASE_EQUIV DAGGER
HAS_NO_UPPER_CASE_EQUIV DOUBLE DAGGER
HAS_NO_UPPER_CASE_EQUIV EURO SIGN
HAS_NO_UPPER_CASE_EQUIV PER MIL SIGN
HAS_NO_UPPER_CASE_EQUIV LEFT SINGLE QUOTE BRACKET
HAS_NO_UPPER_CASE_EQUIV HIGH 6 SINGLE QUOTE
HAS_NO_UPPER_CASE_EQUIV HIGH 9 SINGLE QUOTE
HAS_NO_UPPER_CASE_EQUIV HIGH 6 DOUBLE QUOTE
HAS_NO_UPPER_CASE_EQUIV HIGH 9 DOUBLE QUOTE
HAS_NO_UPPER_CASE_EQUIV LARGE CENTERED DOT
HAS_NO_UPPER_CASE_EQUIV EN DASH
HAS_NO_UPPER_CASE_EQUIV EM DASH
HAS_NO_UPPER_CASE_EQUIV TRADEMARK SIGN
HAS_NO_UPPER_CASE_EQUIV RIGHT SINGLE QUOTE BRACKET
HAS_NO_UPPER_CASE_EQUIV CURRENCY SIGN
HAS_NO_UPPER_CASE_EQUIV BROKEN BAR
HAS_NO_UPPER_CASE_EQUIV PARAGRAPH SIGN
HAS_NO_UPPER_CASE_EQUIV COPYRIGHT SIGN
HAS_NO_UPPER_CASE_EQUIV LEFT ANGLE QUOTATION MARK
HAS_NO_UPPER_CASE_EQUIV NOT SIGN
HAS_NO_UPPER_CASE_EQUIV REGISTERED TRADE MARK SIGN
HAS_NO_UPPER_CASE_EQUIV DEGREE SIGN, RING ABOVE
HAS_NO_UPPER_CASE_EQUIV PLUS-MINUS SIGN
HAS_NO_UPPER_CASE_EQUIV MICRO SIGN
HAS_NO_UPPER_CASE_EQUIV PILCROW SIGN
HAS_NO_UPPER_CASE_EQUIV MIDDLE DOT
HAS_NO_UPPER_CASE_EQUIV NUMERO SIGN
HAS_NO_UPPER_CASE_EQUIV RIGHT ANGLE QUOTATION MARK
2021-12-22 20:23:11 +01:00
"""
2021-04-26 20:07:00 +02:00
2022-01-20 17:32:14 +01:00
@pytest.mark.version('>=3')
def test_1(act: Action):
act.expected_stdout = expected_stdout
act.execute(charset='WIN1251')
assert act.clean_stdout == act.clean_expected_stdout
2021-04-26 20:07:00 +02:00