mirror of https://github.com/jesopo/irctokens
add test cases for formatting from github:ircdocs/parser-tests
This commit is contained in:
parent
85e21c5421
commit
c168ce00b5
|
@ -0,0 +1,221 @@
|
|||
# IRC parser tests
|
||||
# joining atoms into sendable messages
|
||||
|
||||
# Written in 2015 by Daniel Oaks <daniel@danieloaks.net>
|
||||
#
|
||||
# To the extent possible under law, the author(s) have dedicated all copyright
|
||||
# and related and neighboring rights to this software to the public domain
|
||||
# worldwide. This software is distributed without any warranty.
|
||||
#
|
||||
# You should have received a copy of the CC0 Public Domain Dedication along
|
||||
# with this software. If not, see
|
||||
# <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
|
||||
# some of the tests here originate from grawity's test vectors, which is WTFPL v2 licensed
|
||||
# https://github.com/grawity/code/tree/master/lib/tests
|
||||
# some of the tests here originate from Mozilla's test vectors, which is public domain
|
||||
# https://dxr.mozilla.org/comm-central/source/chat/protocols/irc/test/test_ircMessage.js
|
||||
# some of the tests here originate from SaberUK's test vectors, which he's indicated I am free to include here
|
||||
# https://github.com/SaberUK/ircparser/tree/master/test
|
||||
|
||||
tests:
|
||||
# the desc string holds a description of the test, if it exists
|
||||
|
||||
# the atoms dict has the keys:
|
||||
# * tags: tags dict
|
||||
# tags with no value are an empty string
|
||||
# * source: source string, without single leading colon
|
||||
# * verb: verb string
|
||||
# * params: params split up as a list
|
||||
# if the params key does not exist, assume it is empty
|
||||
# if any other keys do no exist, assume they are null
|
||||
# a key that is null does not exist or is not specified with the
|
||||
# given input string
|
||||
|
||||
# matches is a list of messages that match
|
||||
|
||||
# simple tests
|
||||
- desc: Simple test with verb and params.
|
||||
atoms:
|
||||
verb: "foo"
|
||||
params:
|
||||
- "bar"
|
||||
- "baz"
|
||||
- "asdf"
|
||||
matches:
|
||||
- "foo bar baz asdf"
|
||||
- "foo bar baz :asdf"
|
||||
|
||||
# with no regular params
|
||||
- desc: Simple test with source and no params.
|
||||
atoms:
|
||||
source: "src"
|
||||
verb: "AWAY"
|
||||
matches:
|
||||
- ":src AWAY"
|
||||
|
||||
- desc: Simple test with source and empty trailing param.
|
||||
atoms:
|
||||
source: "src"
|
||||
verb: "AWAY"
|
||||
params:
|
||||
- ""
|
||||
matches:
|
||||
- ":src AWAY :"
|
||||
|
||||
# with source
|
||||
- desc: Simple test with source.
|
||||
atoms:
|
||||
source: "coolguy"
|
||||
verb: "foo"
|
||||
params:
|
||||
- "bar"
|
||||
- "baz"
|
||||
- "asdf"
|
||||
matches:
|
||||
- ":coolguy foo bar baz asdf"
|
||||
- ":coolguy foo bar baz :asdf"
|
||||
|
||||
# with trailing param
|
||||
- desc: Simple test with trailing param.
|
||||
atoms:
|
||||
verb: "foo"
|
||||
params:
|
||||
- "bar"
|
||||
- "baz"
|
||||
- "asdf quux"
|
||||
matches:
|
||||
- "foo bar baz :asdf quux"
|
||||
|
||||
- desc: Simple test with empty trailing param.
|
||||
atoms:
|
||||
verb: "foo"
|
||||
params:
|
||||
- "bar"
|
||||
- "baz"
|
||||
- ""
|
||||
matches:
|
||||
- "foo bar baz :"
|
||||
|
||||
- desc: Simple test with trailing param containing colon.
|
||||
atoms:
|
||||
verb: "foo"
|
||||
params:
|
||||
- "bar"
|
||||
- "baz"
|
||||
- ":asdf"
|
||||
matches:
|
||||
- "foo bar baz ::asdf"
|
||||
|
||||
# with source and trailing param
|
||||
- desc: Test with source and trailing param.
|
||||
atoms:
|
||||
source: "coolguy"
|
||||
verb: "foo"
|
||||
params:
|
||||
- "bar"
|
||||
- "baz"
|
||||
- "asdf quux"
|
||||
matches:
|
||||
- ":coolguy foo bar baz :asdf quux"
|
||||
|
||||
- desc: Test with trailing containing beginning+end whitespace.
|
||||
atoms:
|
||||
source: "coolguy"
|
||||
verb: "foo"
|
||||
params:
|
||||
- "bar"
|
||||
- "baz"
|
||||
- " asdf quux "
|
||||
matches:
|
||||
- ":coolguy foo bar baz : asdf quux "
|
||||
|
||||
- desc: Test with trailing containing what looks like another trailing param.
|
||||
atoms:
|
||||
source: "coolguy"
|
||||
verb: "PRIVMSG"
|
||||
params:
|
||||
- "bar"
|
||||
- "lol :) "
|
||||
matches:
|
||||
- ":coolguy PRIVMSG bar :lol :) "
|
||||
|
||||
- desc: Simple test with source and empty trailing.
|
||||
atoms:
|
||||
source: "coolguy"
|
||||
verb: "foo"
|
||||
params:
|
||||
- "bar"
|
||||
- "baz"
|
||||
- ""
|
||||
matches:
|
||||
- ":coolguy foo bar baz :"
|
||||
|
||||
- desc: Trailing contains only spaces.
|
||||
atoms:
|
||||
source: "coolguy"
|
||||
verb: "foo"
|
||||
params:
|
||||
- "bar"
|
||||
- "baz"
|
||||
- " "
|
||||
matches:
|
||||
- ":coolguy foo bar baz : "
|
||||
|
||||
- desc: Param containing tab (tab is not considered SPACE for message splitting).
|
||||
atoms:
|
||||
source: "coolguy"
|
||||
verb: "foo"
|
||||
params:
|
||||
- "b\tar"
|
||||
- "baz"
|
||||
matches:
|
||||
- ":coolguy foo b\tar baz"
|
||||
- ":coolguy foo b\tar :baz"
|
||||
|
||||
# with tags
|
||||
- desc: Tag with no value and space-filled trailing.
|
||||
atoms:
|
||||
tags:
|
||||
"asd": ""
|
||||
source: "coolguy"
|
||||
verb: "foo"
|
||||
params:
|
||||
- "bar"
|
||||
- "baz"
|
||||
- " "
|
||||
matches:
|
||||
- "@asd :coolguy foo bar baz : "
|
||||
|
||||
- desc: Tags with escaped values.
|
||||
atoms:
|
||||
verb: "foo"
|
||||
tags:
|
||||
"a": "b\\and\nk"
|
||||
"d": "gh;764"
|
||||
matches:
|
||||
- "@a=b\\\\and\\nk;d=gh\\:764 foo"
|
||||
- "@d=gh\\:764;a=b\\\\and\\nk foo"
|
||||
|
||||
- desc: Tags with escaped values and params.
|
||||
atoms:
|
||||
verb: "foo"
|
||||
tags:
|
||||
"a": "b\\and\nk"
|
||||
"d": "gh;764"
|
||||
params:
|
||||
- "par1"
|
||||
- "par2"
|
||||
matches:
|
||||
- "@a=b\\\\and\\nk;d=gh\\:764 foo par1 par2"
|
||||
- "@a=b\\\\and\\nk;d=gh\\:764 foo par1 :par2"
|
||||
- "@d=gh\\:764;a=b\\\\and\\nk foo par1 par2"
|
||||
- "@d=gh\\:764;a=b\\\\and\\nk foo par1 :par2"
|
||||
|
||||
- desc: Tag with long, strange values (including LF and newline).
|
||||
atoms:
|
||||
tags:
|
||||
foo: "\\\\;\\s \r\n"
|
||||
verb: "COMMAND"
|
||||
matches:
|
||||
- "@foo=\\\\\\\\\\:\\\\s\\s\\r\\n COMMAND"
|
|
@ -24,3 +24,20 @@ class ParserTestsSplit(unittest.TestCase):
|
|||
self.assertEqual(tokens.source, atoms.get("source", None))
|
||||
self.assertEqual(tokens.command, atoms["verb"].upper())
|
||||
self.assertEqual(tokens.params, atoms.get("params", []))
|
||||
|
||||
def test_join(self):
|
||||
data_path = os.path.join(data_dir, "msg-join.yaml")
|
||||
with open(data_path) as data_file:
|
||||
tests = yaml.safe_load(data_file.read())["tests"]
|
||||
|
||||
for test in tests:
|
||||
atoms = test["atoms"]
|
||||
matches = test["matches"]
|
||||
|
||||
line = irctokens.build(
|
||||
atoms["verb"],
|
||||
atoms.get("params", []),
|
||||
source=atoms.get("source", None),
|
||||
tags=atoms.get("tags", None)).format()
|
||||
|
||||
self.assertIn(line, matches)
|
||||
|
|
Loading…
Reference in New Issue