namespace IRCSharp.Tests.State; public class Emit { private readonly Server _server = new("test"); public Emit() { _server.Parse(new Line("001 nickname")); } [Test] public async Task EmitJoin() { var emit = _server.Parse(new Line(":nickname JOIN #chan")); await Assert.That(emit.Command).IsEqualTo("JOIN"); await Assert.That(emit.Self).IsTrue(); await Assert.That(emit.User).IsEqualTo(_server.Users["nickname"]); await Assert.That(emit.Channel).IsEqualTo(_server.Channels["#chan"]); emit = _server.Parse(new Line(":other JOIN #chan")); await Assert.That(emit).IsNotNull(); await Assert.That(emit.Command).IsEqualTo("JOIN"); await Assert.That(emit.Self).IsFalse(); await Assert.That(emit.User).IsEqualTo(_server.Users["other"]); await Assert.That(emit.Channel).IsEqualTo(_server.Channels["#chan"]); } [Test] public async Task EmitPrivmsg() { _server.Parse(new Line(":nickname JOIN #chan")); var emit = _server.Parse(new Line(":nickname PRIVMSG #chan :hello")); await Assert.That(emit).IsNotNull(); await Assert.That(emit.Command).IsEqualTo("PRIVMSG"); await Assert.That(emit.Text).IsEqualTo("hello"); await Assert.That(emit.SelfSource).IsTrue(); await Assert.That(emit.User).IsEqualTo(_server.Users["nickname"]); await Assert.That(emit.Channel).IsEqualTo(_server.Channels["#chan"]); _server.Parse(new Line(":other JOIN #chan")); emit = _server.Parse(new Line(":other PRIVMSG #chan :hello2")); await Assert.That(emit).IsNotNull(); await Assert.That(emit.Command).IsEqualTo("PRIVMSG"); await Assert.That(emit.Text).IsEqualTo("hello2"); await Assert.That(emit.SelfSource).IsFalse(); await Assert.That(emit.User).IsEqualTo(_server.Users["other"]); await Assert.That(emit.Channel).IsEqualTo(_server.Channels["#chan"]); } [Test] public async Task EmitPrivmsgNoJoin() { _server.Parse(new Line(":nickname JOIN #chan")); var emit = _server.Parse(new Line(":other PRIVMSG #chan :hello")); await Assert.That(emit).IsNotNull(); await Assert.That(emit.Command).IsEqualTo("PRIVMSG"); await Assert.That(emit.Text).IsEqualTo("hello"); await Assert.That(emit.SelfSource).IsFalse(); await Assert.That(emit.User).IsNotNull(); var channel = _server.Channels["#chan"]; await Assert.That(emit.Channel).IsEqualTo(channel); } [Test] public async Task 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")); await Assert.That(emit).IsNotNull(); await Assert.That(emit.Command).IsEqualTo("KICK"); await Assert.That(emit.Text).IsEqualTo("reason"); await Assert.That(emit.SelfSource).IsTrue(); await Assert.That(emit.UserSource).IsEqualTo(user); await Assert.That(emit.UserTarget).IsEqualTo(userOther); await Assert.That(emit.Channel).IsEqualTo(channel); } [Test] public async Task EmitMode() { var emit = _server.Parse(new Line("MODE nickname x+i-i+wi-wi")); await Assert.That(emit).IsNotNull(); await Assert.That(emit.Command).IsEqualTo("MODE"); await Assert.That(emit.SelfTarget).IsTrue(); await Assert.That(emit.Tokens).IsEquivalentTo(["+x", "+i", "-i", "+w", "+i", "-w", "-i"]); } }