about summary refs log tree commit diff
path: root/IRCSharp.Tests/State/Emit.cs
blob: 2b4d55964b2ff0f60aa438bfca1aa50bca77c1f5 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
using System.Collections.Generic;
using IRCStates;
using IRCTokens;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace IRCSharp.Tests.State
{
    [TestClass]
    public class Emit
    {
        private Server _server;

        [TestInitialize]
        public void TestInitialize()
        {
            _server = new Server("test");
            _server.Parse(new Line("001 nickname"));
        }

        [TestMethod]
        public void EmitJoin()
        {
            var emit = _server.Parse(new Line(":nickname JOIN #chan"));

            Assert.AreEqual("JOIN", emit.Command);
            Assert.IsTrue(emit.Self);
            Assert.AreEqual(_server.Users["nickname"], emit.User);
            Assert.AreEqual(_server.Channels["#chan"], emit.Channel);

            emit = _server.Parse(new Line(":other JOIN #chan"));
            Assert.IsNotNull(emit);
            Assert.AreEqual("JOIN", emit.Command);
            Assert.IsFalse(emit.Self);
            Assert.AreEqual(_server.Users["other"], emit.User);
            Assert.AreEqual(_server.Channels["#chan"], emit.Channel);
        }

        [TestMethod]
        public void EmitPrivmsg()
        {
            _server.Parse(new Line(":nickname JOIN #chan"));
            var emit = _server.Parse(new Line(":nickname PRIVMSG #chan :hello"));

            Assert.IsNotNull(emit);
            Assert.AreEqual("PRIVMSG", emit.Command);
            Assert.AreEqual("hello", emit.Text);
            Assert.IsTrue(emit.SelfSource);
            Assert.AreEqual(_server.Users["nickname"], emit.User);
            Assert.AreEqual(_server.Channels["#chan"], emit.Channel);

            _server.Parse(new Line(":other JOIN #chan"));
            emit = _server.Parse(new Line(":other PRIVMSG #chan :hello2"));

            Assert.IsNotNull(emit);
            Assert.AreEqual("PRIVMSG", emit.Command);
            Assert.AreEqual("hello2", emit.Text);
            Assert.IsFalse(emit.SelfSource);
            Assert.AreEqual(_server.Users["other"], emit.User);
            Assert.AreEqual(_server.Channels["#chan"], emit.Channel);
        }

        [TestMethod]
        public void EmitPrivmsgNoJoin()
        {
            _server.Parse(new Line(":nickname JOIN #chan"));
            var emit = _server.Parse(new Line(":other PRIVMSG #chan :hello"));

            Assert.IsNotNull(emit);
            Assert.AreEqual("PRIVMSG", emit.Command);
            Assert.AreEqual("hello", emit.Text);
            Assert.IsFalse(emit.SelfSource);
            Assert.IsNotNull(emit.User);

            var channel = _server.Channels["#chan"];
            Assert.AreEqual(channel, emit.Channel);
        }

        [TestMethod]
        public void EmitKick()
        {
            _server.Parse(new Line(":nickname JOIN #chan"));

            var user    = _server.Users["nickname"];
            var channel = _server.Channels["#chan"];
            _server.Parse(new Line(":other JOIN #chan"));
            var userOther = _server.Users["other"];
            var emit      = _server.Parse(new Line(":nickname KICK #chan other :reason"));

            Assert.IsNotNull(emit);
            Assert.AreEqual("KICK", emit.Command);
            Assert.AreEqual("reason", emit.Text);
            Assert.IsTrue(emit.SelfSource);
            Assert.AreEqual(user, emit.UserSource);
            Assert.AreEqual(userOther, emit.UserTarget);
            Assert.AreEqual(channel, emit.Channel);
        }

        [TestMethod]
        public void EmitMode()
        {
            var emit = _server.Parse(new Line("MODE nickname x+i-i+wi-wi"));

            Assert.IsNotNull(emit);
            Assert.AreEqual("MODE", emit.Command);
            Assert.IsTrue(emit.SelfTarget);
            CollectionAssert.AreEqual(new List<string>
            {
                "+x",
                "+i",
                "-i",
                "+w",
                "+i",
                "-w",
                "-i"
            }, emit.Tokens);
        }
    }
}