"""
Test for -> String subpattern recognition III.
Created by Egor Kostan.
GitHub: https://github.com/ikostan
"""
# FUNDAMENTALS STRINGS REGULAR EXPRESSIONS
# DECLARATIVE PROGRAMMING ADVANCED LANGUAGE FEATURES
import unittest
import allure
from utils.log_func import print_log
from kyu_6.string_subpattern_recognition_3.has_subpattern \
import has_subpattern
# pylint: disable-msg=R0801
[docs]
@allure.epic('6 kyu')
@allure.parent_suite('Novice')
@allure.suite("Advanced Language Features")
@allure.sub_suite("Unit Tests")
@allure.feature("String")
@allure.story('String subpattern recognition III')
@allure.tag('FUNDAMENTALS',
'STRINGS',
'REGULAR EXPRESSIONS',
'DECLARATIVE PROGRAMMING',
'ADVANCED LANGUAGE FEATURES')
@allure.link(
url='https://www.codewars.com/kata/5a4a2973d8e14586c700000a',
name='Source/Kata')
# pylint: enable-msg=R0801
class HasSubpatternTestCase(unittest.TestCase):
"""Testing 'has_subpattern' function."""
[docs]
def test_has_subpattern(self):
"""
Verify that 'has_subpattern' function.
Return a subpattern with sorted characters,
otherwise return the base string with sorted
characters (you might consider this case as
an edge case, with the subpattern being repeated
only once and thus equalling the original input string).
:return:
"""
# pylint: disable-msg=R0801
allure.dynamic.title("Testing 'has_subpattern' (part 3) function")
allure.dynamic.severity(allure.severity_level.NORMAL)
allure.dynamic.description_html(
'<h3>Codewars badge:</h3>'
'<img src="https://www.codewars.com/users/myFirstCode'
'/badges/large">'
'<h3>Test Description:</h3>'
"<p></p>")
# pylint: enable-msg=R0801
# pylint: disable-msg=C0301
with allure.step("Pass the string and verify the output"):
data_set: tuple = (
('sZZpCWRNzSfvfZy5CMsRbdHeb85L3DmMB7dLMIM33pylSW6hHXp'
'dthSmvynxF7cSUtSVShx8vwSYaa7dg4jyCzHzJqnYHRGD0sTg5z'
'XOB42f9fuo47NhwV7fVZkzCyIfVzUvb90M5FOx3xXPo3fqFOqZk'
'rH5HZ59juv3SWPIJKG7VfWh1R6O3S42by54D0W5rHYtxTjLsP3I'
'PkR5WhsFNbYXMZwfIfcovPKfWzqD0ZTDWDdfMLkTyncVL3fODk9'
'5V3Jz6p0jRsCv8ahOky6BLgffzBfb9SMnq3spM8q9wVZbaLWPVk'
'ywWNypYC3MnCyQKxVd6Mvo1fq2I26uajR5aXMrrKX4MdyhfQfza'
'rK5Pm2nb8IMs8zgNKMDrwKfcD553Os8OZs5eHYyn415Zvy0RCd3'
'FyjFa3DGJs7IhSqnlvVJZYaKiFV45dtxkMsh2m5C2vvz2fyt24C'
'raMULMxJwjYMuGM7Cz65hdWJaNcWCjyguWMqrdMO02Nf8RInK7G'
'MVf2CWrR4RXiSv6yD29XBhIOkT5Cm7TfX8ZFk5FP4sKcWqHZGst'
'DdM0ZHkyNFjQWJZCFQe5h5rguha8COIZVdcH7x4oMRRWXJwTn5o'
'zzR8jYS54fFSwfoCgMkxXBhSjMWyk3PWnRW3vvkYW39vSjMo4bz'
'jdJD1Dq1j3gs5WavPxNfjC0j63Ca6pHt44D5MFCgXaC1rz346wH'
'ldbf89huLqOXg4WqByOW9SR8xXng9xC4CajsOC5HS2jzYuMdUXv'
'jPZuIfgusZDZbReZCJ2fn4mapgL6z0FS94S3HuMwIGwnyyafxQ8'
'84Y0T6kFFMcCknMcZ4uxowP7jzyWNO6SdPxZLZNqYC2roWSZxGN'
'rFKwzfVPZOxPyzzktkW8fQyyv9zCSzgbd3kCvzYFxmrR5CMLiq8'
'xz8cxWDCYWPN1WLNYsngLrCcdop0XDDgQXfXpZyRV56lZsRLZoa'
'6WfCap9B3wNx2k4Z1Cwr5NL8IMCpWmKSsxiQ9MHZ9c5fC8dZJFz'
'DxXXqIFI',
'000112222333333444444555555556666777888889999BBCCCC'
'CCCCCDDDDDFFFFFGGHHHHIIIIJJJKKKLLLLMMMMMMMMMNNNNOOO'
'OPPPPQQRRRRRSSSSSSTTUVVVVWWWWWWWWXXXXXYYYYZZZZZZZZa'
'aaaabbbcccdddddefffffffffgggghhhhijjjjjkkkkklmmnnnn'
'ooopppqqqqrrrrsssssttuuuvvvvvwwwwxxxxxxyyyyyyyzzzzzzz'),
('lcGPumgkSKgXDCAOuYEFfE2oDFCRrMzGoYupyfrDA3UxGGgnlix'
'KobXYNrRlMRIYnq1imYuIyoIrakSmCKq7XDRcDWcmXPuRl67MGi'
'q2g8CJUu0hfuXomi1OGUMIu6mpuJXfUPDzv7q0zN8zhlxoc7arm'
'RmuxvfP3WrfbrrKlY',
'01236778ACCDDDEFGGGIIJKKMMNOPPRRRSUUWXXXYYYabccfffgg'
'hiiklllmmmmnooopqqrrrruuuuuvxxyzz'),
('00000000000000000000000011111111111111111111111111'
'2222222222222222222222333333333333333333333333'
'4444444444444444444444444444444444555555555555555555'
'66666666666666666677777777777777777777777788888888888888888888'
'9999999999999999999999AAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBB'
'CCCCCCCCCCCCCCCCDDDDDDDDDDDDDDDDDDDDEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFF'
'GGGGGGGGGGGGGGGGGGGGGGHHHHHHHHHHHHHHHHHHHHHHHHHHIIIIIIIIIIIIIIIIIIIIII'
'JJJJJJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKKKKLLLLLLLLLLLLLLLLLLLLLL'
'MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN'
'OOOOOOOOOOOOOOOOOOOOOOPPPPPPPPPPPPPPPPPPPPQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ'
'RRRRRRRRRRRRRRRRSSSSSSSSSSSSSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTTTTTTTTTTTTT'
'UUUUUUUUUUUUUUUUVVVVVVVVVVVVVVVVVVWWWWWWWWWWWWWWWWWWWWWWXXXXXXXXXXXXXXXXXXXXXX'
'YYYYYYYYYYYYYYYYZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZaaaaaaaaaaaaaaaaaaaaaa'
'bbbbbbbbbbbbbbbbbbccccccccccccccccccccccccccdddddddddddddddddddddddddddddddddddd'
'eeeeeeeeeeeeeeeeeeeeeeffffffffffffffffffffffffffgggggggggggggggggggg'
'hhhhhhhhhhhhhhhhhhhhhhhhhhhhiiiiiiiiiiiiiijjjjjjjjjjjjjjkkkkkkkkkkkkkkkkkkkkkk'
'llllllllllllllmmmmmmmmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnnnnnnnnnnnn'
'ooooooooooooooooooooooooooooooooooooooppppppppppppppppppppqqqqqqqqqqqqqqqqqqqq'
'rrrrrrrrrrrrrrrrrrrrrrrrrrsssssssssssssssssssssssstttttttttttttttttttttttt'
'uuuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
'yyyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzz',
'00000000000011111111111112222222222233333333333344444444444444444555555555666666666'
'777777777777888888888899999999999AAAAAAAAAAABBBBBBBBBBBCCCCCCCCDDDDDDDDDDEEEEEEEEEEFFFFFFFFFF'
'GGGGGGGGGGGHHHHHHHHHHHHHIIIIIIIIIIIJJJJJJJJJJJKKKKKKKKKLLLLLLLLLLLMMMMMMMMMMMMMMMNNNNNNNNNNNNNNN'
'OOOOOOOOOOOPPPPPPPPPPQQQQQQQQQQQQQQQQQQRRRRRRRRSSSSSSSSSSSSSTTTTTTTTTTTTTTUUUUUUUUVVVVVVVVV'
'WWWWWWWWWWWXXXXXXXXXXXYYYYYYYYZZZZZZZZZZZZZZZZZaaaaaaaaaaabbbbbbbbbccccccccccccc'
'ddddddddddddddddddeeeeeeeeeeefffffffffffffgggggggggghhhhhhhhhhhhhhiiiiiiijjjjjjjkkkkkkkkkkk'
'lllllllmmmmmmmmmmmmmmnnnnnnnnnnoooooooooooooooooooppppppppppqqqqqqqqqqrrrrrrrrrrrrr'
'ssssssssssssttttttttttttuuuuuuuuuvvvvvvvvvwwwwwwwwwxxxxxxxxxxxxxxxxxyyyyyyyyyyyyzzzzzzzzzzzz'),
("a", "a"),
("aaaa", "a"),
("abcd", "abcd"),
("babababababababa", "ab"),
("bbabbaaabbaaaabb", "ab"),
("123a123a123a", "123a"),
("123A123a123a", "111222333Aaa"),
("12aa13a21233", "123a"),
("12aa13a21233A", "111222333Aaaa"),
("abcdabcaccd", "aaabbccccdd"),
('49OTbVT2Hu8EFdYrbYhCQ2hCFpOwq3bpzVuopQ1O4QTTby83J5k'
'vbVHw1T4OpuQyK1bnXU8azTyqumEGvQaFb8nEHY35yr0dOy1b49'
'pApQXmUF8YIUkrboEI8ovHOYHVGKdgbH3odYAsgyhUr0vYsYJh',
'0112334458889ACEEFFGHHHIJKOOOQQQTTTUUVVXYYYYabbbbb'
'ddghhkmnoopppqrrsuuvvwyyyz'),
('mTcL4El8ONERf60xgTmZcywggRHxmLyTxEtly6RhOLsRfXsdy0c'
'iOXRtljgZYfX43ZE20gLRJfROmw3Yd08sLFyXcJ0R2ccRgHg3s2'
'xygcHYy3ih4Jclye9igFLeixhwYfT2EN4sEdLLsiLx4HXyE49Om'
'L3f6hyHwLETYe4MHXt2t2RLj0lcM2Mcs43J4f2004gicEEwjNLY'
'gEJE0T3Eh8LRL23RRdcyixH2FTwJgiOlgM34EXZJLfcg26lLLtg'
'6mtegHFymFE42hcFR2gi26JRFJ90jsM9xmEj3TZx24diRmhlgZH'
'gXHYjgdFxEdO2tetREe6EmL36y4fi42ORwYf4m8clET3ics2469'
'NgMm3OMgTLTLw0gjELcLcxt893H9s4NZZgef2Ys4iJcFtd2w9iw'
'Fmte9Ml433MhjEFx2e2gyJig6gMOLjXYf2HY6gHNT0YggNxMLLg'
'fiwc4Nt0406tiiH0wtgm0yLgg44J4NLZXYitg02Jh8Rdf80602X'
'FNi0NimsMYTcHxj8Xlgmxx4sYeLhdOMh440hfRcElgt0hgceZ2l'
'FTw2YMXcsw4NhJfgJgEfFH2F60EZ3geHc6y04Mt29l0cfRLiggi'
'LhedOs0wlXfgtR8fRY2RT4wdl4F93xHggXOEyyJ4xMRtc0gREiL'
'ZMsE2L0MeMwTRTRlNYFTH3iJtmlyjg0gOO2jc2Ei204w2iidFLZ'
'sXHLX4j6iEeic6i0RZc0ix4wLcdds2JgRZgNOYh2Emg08XdlgNl'
'iMN0EH0JLFigcelmgOcN6jEeiLjR9688Fcjw0fd9EZ9ER8899E8'
'EEiJYhmJf99TZZZLLM0dTgxEZcmTlNXJH494sO2i6cOiYYg9thN'
'Rg3iXRijggiYRdhjdcc9c60cgiyje32wOLRLd89dFsg40eRRd4F'
'yte9H0c8hOcsjLNyX0wMcch8L228E4e0i4Xf3cgRZmZj08j8ggg'
'xsX0gNRs24OLRwEE2lOM3hL0TZEEFh2c4i0N68xRR4iRTe2m2tj'
'N48JeERERix6gyg',
'0022344689EEFHJLLMNORRTXYZccdefggghiijlmstwxy'))
# pylint: enable-msg=C0301
for data in data_set:
result = has_subpattern(data[0])
expected = data[1]
print_log(result=result, expected=expected)
self.assertEqual(expected, result)