import pytest

from pydle.features import ircv3

pytestmark = [pytest.mark.unit, pytest.mark.ircv3]


@pytest.mark.parametrize(
    "payload, expected",
    [
        (
                rb"@+example=raw+:=,escaped\:\s\\ :irc.example.com NOTICE #channel :Message",
                {"+example": """raw+:=,escaped; \\"""}
        ),
        (
                rb"@+example=\foo\bar :irc.example.com NOTICE #channel :Message",
                {"+example": "foobar"}
        ),
        (
                rb'@msgid=796~1602221579~51;account=user123 :user123!user123@((ip) PRIVMSG #user123 :ping',
                {'msgid': '796~1602221579~51', 'account': 'user123'}
        ),
        (
                rb'@inspircd.org/service;inspircd.org/bot :ChanServ!services@services.(domain) MODE #user123 +qo user123 :user123',
                {"inspircd.org/service": True, r"inspircd.org/bot": True}

        )
    ]
)
def test_tagged_message_escape_sequences(payload, expected):
    message = ircv3.tags.TaggedMessage.parse(payload)

    assert message.tags == expected

import pytest

from pydle.features import ircv3

pytestmark = [pytest.mark.unit, pytest.mark.ircv3]


@pytest.mark.parametrize(
    "payload, expected",
    [
        (
                rb'@empty=;missing :irc.example.com NOTICE #channel :Message',
                {'empty': True, 'missing': True}
        ),
        (
                rb"@+example=raw+:=,escaped\:\s\\ :irc.example.com NOTICE #channel :Message",
                {"+example": """raw+:=,escaped; \\"""}
        ),
        (
                rb"@+example=\foo\bar :irc.example.com NOTICE #channel :Message",
                {"+example": "foobar"}
        ),
        (
                rb'@msgid=796~1602221579~51;account=user123 :user123!user123@(ip) PRIVMSG #user123 :ping',
                {'msgid': '796~1602221579~51', 'account': 'user123'}
        ),
        (
                rb'@inspircd.org/service;inspircd.org/bot :ChanServ!services@services.(domain) MODE #user123 +qo user123 :user123',
                {"inspircd.org/service": True, r"inspircd.org/bot": True}
        )
    ]
)
def test_tagged_message_escape_sequences(payload, expected):
    message = ircv3.tags.TaggedMessage.parse(payload)

    assert message.tags == expected

Add test case for empty and missing IRCv3 tags
Add test case for empty and missing IRCv3 tags

  import pytest
  
  from pydle.features import ircv3
  
  pytestmark = [pytest.mark.unit, pytest.mark.ircv3]
  
  
  @pytest.mark.parametrize(
      "payload, expected",
      [
          (
+                 rb'@empty=;missing :irc.example.com NOTICE #channel :Message',
+                 {'empty': True, 'missing': True}
+         ),
+         (
                  rb"@+example=raw+:=,escaped\:\s\\ :irc.example.com NOTICE #channel :Message",
                  {"+example": """raw+:=,escaped; \\"""}
          ),
          (
                  rb"@+example=\foo\bar :irc.example.com NOTICE #channel :Message",
                  {"+example": "foobar"}
          ),
          (
-                 rb'@msgid=796~1602221579~51;account=user123 :user123!user123@((ip) PRIVMSG #user123 :ping',
+                 rb'@msgid=796~1602221579~51;account=user123 :user123!user123@(ip) PRIVMSG #user123 :ping',
                  {'msgid': '796~1602221579~51', 'account': 'user123'}
          ),
          (
                  rb'@inspircd.org/service;inspircd.org/bot :ChanServ!services@services.(domain) MODE #user123 +qo user123 :user123',
                  {"inspircd.org/service": True, r"inspircd.org/bot": True}
- 
          )
      ]
  )
  def test_tagged_message_escape_sequences(payload, expected):
      message = ircv3.tags.TaggedMessage.parse(payload)
  
      assert message.tags == expected
  
Add test case for empty and missing IRCv3 tags
## Code Before:
import pytest

from pydle.features import ircv3

pytestmark = [pytest.mark.unit, pytest.mark.ircv3]


@pytest.mark.parametrize(
    "payload, expected",
    [
        (
                rb"@+example=raw+:=,escaped\:\s\\ :irc.example.com NOTICE #channel :Message",
                {"+example": """raw+:=,escaped; \\"""}
        ),
        (
                rb"@+example=\foo\bar :irc.example.com NOTICE #channel :Message",
                {"+example": "foobar"}
        ),
        (
                rb'@msgid=796~1602221579~51;account=user123 :user123!user123@((ip) PRIVMSG #user123 :ping',
                {'msgid': '796~1602221579~51', 'account': 'user123'}
        ),
        (
                rb'@inspircd.org/service;inspircd.org/bot :ChanServ!services@services.(domain) MODE #user123 +qo user123 :user123',
                {"inspircd.org/service": True, r"inspircd.org/bot": True}

        )
    ]
)
def test_tagged_message_escape_sequences(payload, expected):
    message = ircv3.tags.TaggedMessage.parse(payload)

    assert message.tags == expected

## Instruction:
Add test case for empty and missing IRCv3 tags
## Code After:
import pytest

from pydle.features import ircv3

pytestmark = [pytest.mark.unit, pytest.mark.ircv3]


@pytest.mark.parametrize(
    "payload, expected",
    [
        (
                rb'@empty=;missing :irc.example.com NOTICE #channel :Message',
                {'empty': True, 'missing': True}
        ),
        (
                rb"@+example=raw+:=,escaped\:\s\\ :irc.example.com NOTICE #channel :Message",
                {"+example": """raw+:=,escaped; \\"""}
        ),
        (
                rb"@+example=\foo\bar :irc.example.com NOTICE #channel :Message",
                {"+example": "foobar"}
        ),
        (
                rb'@msgid=796~1602221579~51;account=user123 :user123!user123@(ip) PRIVMSG #user123 :ping',
                {'msgid': '796~1602221579~51', 'account': 'user123'}
        ),
        (
                rb'@inspircd.org/service;inspircd.org/bot :ChanServ!services@services.(domain) MODE #user123 +qo user123 :user123',
                {"inspircd.org/service": True, r"inspircd.org/bot": True}
        )
    ]
)
def test_tagged_message_escape_sequences(payload, expected):
    message = ircv3.tags.TaggedMessage.parse(payload)

    assert message.tags == expected
