---
test case: converts all letters to uppercase
in:
  data: 'ABCabc123'
  param1: '[a-z]'
  param2: '[A-Z]'
out:
  value: 'ABCABC123'
  return: SUCCEED
---
test case: converts all letters to lowercase
in:
  data: 'ABCabc123'
  param1: 'A-Z'
  param2: 'a-z'
out:
  value: 'abcabc123'
  return: SUCCEED
---
test case: replaces all numbers with *
in:
  data: 'ABCabc123'
  param1: '0-9'
  param2: '*'
out:
  value: 'ABCabc***'
  return: SUCCEED
---
test case: replaces all numbers and uppercase latters with *
in:
  data: 'ABCabc123'
  param1: 'A-Z0-9'
  param2: '*'
out:
  value: '***abc***'
  return: SUCCEED
---
test case: replaces all numbers and latters with *
in:
  data: 'ABCabc123'
  param1: 'A-Z0-9a-z'
  param2: '*'
out:
  value: '*********'
  return: SUCCEED
---
test case: converts all uppercase to lowercase and lowercase to uppercase
in:
  data: 'ABCabc123'
  param1: 'A-Za-z'
  param2: 'a-zA-Z'
out:
  value: 'abcABC123'
  return: SUCCEED
---
test case: empty parameter 1
in:
  data: 'A*'
  param1: '""'
  param2: '*'
out:
  value: 'A*'
  return: SUCCEED
---
test case: empty parameter 2
in:
  data: 'A*'
  param1: 'A*'
  param2: '""'
out:
  value: 'A*'
  return: SUCCEED
---
test case: empty input data
in:
  data: ''
  param1: '*'
  param2: '*'
out:
  value: ''
  return: SUCCEED
---
test case: wrong parameter 1 range
in:
  data: 'ABCabc123'
  param1: 'b-a'
  param2: '*'
out:
  value: ''
  return: FAIL
---
test case: wrong parameter 2 range
in:
  data: 'ABCabc123'
  param1: 'a'
  param2: '2-0'
out:
  value: ''
  return: FAIL
---
test case: escaped character backslash
in:
  data: 'a\b'
  param1: '\\'
  param2: '\/'
out:
  value: 'a/b'
  return: SUCCEED
---
test case: escaped character "
in:
  data: 'a"b'
  param1: '\"'
  param2: 'b'
out:
  value: 'abb'
  return: SUCCEED
---
test case: escaped character '
in:
  data: 'a''b'
  param1: '\'''
  param2: 'b'
out:
  value: 'abb'
  return: SUCCEED
---
test case: mixed long string with mixed patterns
in:
  data: 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ111222333444555666777888999000'
  param1: 'a-z0-9ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  param2: 'A-Zabcdefghijklmnopqrstuvwxyz'
out:
  value: "ABCDEFGHIJKLMNOPQRSTUVWXYZklmnopqrstuvwxyzzzzzzzzzzzbbbcccdddeeefffggghhhiiijjjaaa"
  return: SUCCEED
---
test case: mixed long string with mixed patterns extended
in:
  data: 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ111222333444555666777888999000'
  param1: 'a-z0-9ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  param2: '0-9*'
out:
  value: "0123456789************************************************************************"
  return: SUCCEED
---
test case: overridden pattern
in:
  data: '[0123456789]'
  param1: '0-9a-z0-9'
  param2: '**********A-Za-z'
out:
  value: "[abcdefghij]"
  return: SUCCEED
---
test case: unfinished range pattern
in:
  data: '$0123456789$'
  param1: '0-7'
  param2: 'a-c'
out:
  value: "$abcccccc89$"
  return: SUCCEED
---
test case: parameter 1 pattern overflow
in:
  data: '0'
  param1: 'a-Z -} -} -} -} -} -} -} -}'
  param2: '*'
out:
  value: ""
  return: FAIL
---
test case: parameter 2 pattern overflow
in:
  data: '0'
  param1: '*'
  param2: 'a-Z -} -} -} -} -} -} -} -}'
out:
  value: ""
  return: FAIL
---
test case: parameter range pattern finished with escaped char
in:
  data: '0zA'
  param1: '0-\\'
  param2: '*'
out:
  value: "*z*"
  return: SUCCEED
---
test case: parameter range pattern started with escaped char
in:
  data: 'bcA'
  param1: '\\-z'
  param2: '*'
out:
  value: "**A"
  return: SUCCEED

---
test case: replace escaped - to *
in:
  data: '---'
  param1: '\-'
  param2: '*'
out:
  value: "***"
  return: SUCCEED
---
test case: replace * to escaped -
in:
  data: '*A*'
  param1: '*'
  param2: '\-'

out:
  value: "-A-"
  return: SUCCEED
---
test case: triple range spechar usage
in:
  data: '1234567890'
  param1: '0-9'
  param2: '*---a-z'
out:
  value: '+,--abcde*'
  return: SUCCEED
---
test case: backslash at end of pattern
in:
  data: 'ABCabc123'
  param1: '\'
  param2: '\\-'
out:
  value: 'ABCabc123'
  return: SUCCEED
---
test case: different characters
in:
  data: 'ыABCabc123ыы'
  param1: 'ы'
  param2: 'в'
out:
  value: 'вABCabc123вв'
  return: SUCCEED
...