Rapid spam filtering system https://rspamd.com/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

79 lines
2.1 KiB

  1. context("Rspamd_text:byte() test", function()
  2. local rspamd_text = require "rspamd_text"
  3. local str = 'OMG'
  4. local txt = rspamd_text.fromstring(str)
  5. local fmt = 'case rspamd_text:byte(%s,%s)'
  6. local cases = {
  7. {'1', 'nil'},
  8. {'nil', '1'},
  9. }
  10. for start = -4, 4 do
  11. for stop = -4, 4 do
  12. table.insert(cases, {tostring(start), tostring(stop)})
  13. end
  14. end
  15. for _, case in ipairs(cases) do
  16. local name = string.format(fmt, case[1], case[2])
  17. test(name, function()
  18. local txt_bytes = {txt:byte(tonumber(case[1]), tonumber(case[2]))}
  19. local str_bytes = {str:byte(tonumber(case[1]), tonumber(case[2]))}
  20. assert_rspamd_table_eq({
  21. expect = str_bytes,
  22. actual = txt_bytes
  23. })
  24. end)
  25. end
  26. end)
  27. context("Rspamd_text:find() test", function()
  28. local rspamd_text = require "rspamd_text"
  29. local cases = {
  30. {{'foobarfoo', 'f'}, {1, 1}},
  31. {{'foobarfoo', 'foo'}, {1, 3}},
  32. {{'foobarfoo', 'bar'}, {4, 6}},
  33. {{'foobarfoo', 'baz'}, nil},
  34. {{'foobarfoo', 'rfoo'}, {6, 9}},
  35. {{'foo', 'bar'}, nil},
  36. {{'x', 'xxxx'}, nil},
  37. {{'', ''}, {1, 0}},
  38. {{'', '_'}, nil},
  39. {{'x', ''}, {1, 0}},
  40. }
  41. for _, case in ipairs(cases) do
  42. local name = string.format('case rspamd_text:find(%s,%s)', case[1][1], case[1][2])
  43. test(name, function()
  44. local t = rspamd_text.fromstring(case[1][1])
  45. local s,e = t:find(case[1][2])
  46. if case[2] then
  47. assert_rspamd_table_eq({
  48. expect = case[2],
  49. actual = {s, e}
  50. })
  51. else
  52. assert_nil(s)
  53. end
  54. local ss,ee = string.find(case[1][1], case[1][2], 1, true)
  55. assert_rspamd_table_eq({
  56. expect = { ss, ee },
  57. actual = { s, e }
  58. })
  59. end)
  60. -- Compare with vanila lua
  61. name = string.format('case lua string vs rspamd_text:find(%s,%s)', case[1][1], case[1][2])
  62. test(name, function()
  63. local t = rspamd_text.fromstring(case[1][1])
  64. local s,e = t:find(case[1][2])
  65. local ss,ee = string.find(case[1][1], case[1][2], 1, true)
  66. assert_rspamd_table_eq({
  67. expect = { ss, ee },
  68. actual = { s, e }
  69. })
  70. end)
  71. end
  72. end)