| @@ -7,6 +7,29 @@ namespace Discord | |||
| public partial class Tests | |||
| { | |||
| private void TestHelper(ChannelPermissions value, ChannelPermission permission, bool expected = false) | |||
| => TestHelper(value.RawValue, (ulong)permission, expected); | |||
| private void TestHelper(GuildPermissions value, GuildPermission permission, bool expected = false) | |||
| => TestHelper(value.RawValue, (ulong)permission, expected); | |||
| private void TestHelper(ulong rawValue, ulong flagValue, bool expected) | |||
| { | |||
| Assert.Equal(expected, Permissions.GetValue(rawValue, flagValue)); | |||
| // check that toggling the bit works | |||
| Permissions.UnsetFlag(ref rawValue, flagValue); | |||
| Assert.Equal(false, Permissions.GetValue(rawValue, flagValue)); | |||
| Permissions.SetFlag(ref rawValue, flagValue); | |||
| Assert.Equal(true, Permissions.GetValue(rawValue, flagValue)); | |||
| // do the same, but with the SetValue method | |||
| Permissions.SetValue(ref rawValue, true, flagValue); | |||
| Assert.Equal(true, Permissions.GetValue(rawValue, flagValue)); | |||
| Permissions.SetValue(ref rawValue, false, flagValue); | |||
| Assert.Equal(false, Permissions.GetValue(rawValue, flagValue)); | |||
| } | |||
| /// <summary> | |||
| /// Tests for the <see cref="Discord.Permissions"/> class. | |||
| /// | |||
| @@ -19,27 +42,27 @@ namespace Discord | |||
| { | |||
| var value = ChannelPermissions.Text; | |||
| // check that the result of GetValue matches for all properties of text channel | |||
| Assert.True(value.Has(ChannelPermission.CreateInstantInvite)); | |||
| Assert.True(value.Has(ChannelPermission.ManageChannels)); | |||
| Assert.True(value.Has(ChannelPermission.AddReactions)); | |||
| Assert.True(value.Has(ChannelPermission.ViewChannel)); | |||
| Assert.True(value.Has(ChannelPermission.SendMessages)); | |||
| Assert.True(value.Has(ChannelPermission.SendTTSMessages)); | |||
| Assert.True(value.Has(ChannelPermission.ManageMessages)); | |||
| Assert.True(value.Has(ChannelPermission.EmbedLinks)); | |||
| Assert.True(value.Has(ChannelPermission.AttachFiles)); | |||
| Assert.True(value.Has(ChannelPermission.ReadMessageHistory)); | |||
| Assert.True(value.Has(ChannelPermission.MentionEveryone)); | |||
| Assert.True(value.Has(ChannelPermission.UseExternalEmojis)); | |||
| Assert.True(value.Has(ChannelPermission.ManageRoles)); | |||
| Assert.True(value.Has(ChannelPermission.ManageWebhooks)); | |||
| Assert.False(value.Has(ChannelPermission.Connect)); | |||
| Assert.False(value.Has(ChannelPermission.Speak)); | |||
| Assert.False(value.Has(ChannelPermission.MuteMembers)); | |||
| Assert.False(value.Has(ChannelPermission.DeafenMembers)); | |||
| Assert.False(value.Has(ChannelPermission.MoveMembers)); | |||
| Assert.False(value.Has(ChannelPermission.UseVAD)); | |||
| TestHelper(value, ChannelPermission.CreateInstantInvite, true); | |||
| TestHelper(value, ChannelPermission.ManageChannels, true); | |||
| TestHelper(value, ChannelPermission.AddReactions, true); | |||
| TestHelper(value, ChannelPermission.ViewChannel, true); | |||
| TestHelper(value, ChannelPermission.SendMessages, true); | |||
| TestHelper(value, ChannelPermission.SendTTSMessages, true); | |||
| TestHelper(value, ChannelPermission.ManageMessages, true); | |||
| TestHelper(value, ChannelPermission.EmbedLinks, true); | |||
| TestHelper(value, ChannelPermission.AttachFiles, true); | |||
| TestHelper(value, ChannelPermission.ReadMessageHistory, true); | |||
| TestHelper(value, ChannelPermission.MentionEveryone, true); | |||
| TestHelper(value, ChannelPermission.UseExternalEmojis, true); | |||
| TestHelper(value, ChannelPermission.ManageRoles, true); | |||
| TestHelper(value, ChannelPermission.ManageWebhooks, true); | |||
| TestHelper(value, ChannelPermission.Connect, false); | |||
| TestHelper(value, ChannelPermission.Speak, false); | |||
| TestHelper(value, ChannelPermission.MuteMembers, false); | |||
| TestHelper(value, ChannelPermission.DeafenMembers, false); | |||
| TestHelper(value, ChannelPermission.MoveMembers, false); | |||
| TestHelper(value, ChannelPermission.UseVAD, false); | |||
| return Task.CompletedTask; | |||
| } | |||
| @@ -56,26 +79,26 @@ namespace Discord | |||
| // check that none will fail all | |||
| var value = ChannelPermissions.None; | |||
| Assert.False(value.Has(ChannelPermission.CreateInstantInvite)); | |||
| Assert.False(value.Has(ChannelPermission.ManageChannels)); | |||
| Assert.False(value.Has(ChannelPermission.AddReactions)); | |||
| Assert.False(value.Has(ChannelPermission.ViewChannel)); | |||
| Assert.False(value.Has(ChannelPermission.SendMessages)); | |||
| Assert.False(value.Has(ChannelPermission.SendTTSMessages)); | |||
| Assert.False(value.Has(ChannelPermission.ManageMessages)); | |||
| Assert.False(value.Has(ChannelPermission.EmbedLinks)); | |||
| Assert.False(value.Has(ChannelPermission.AttachFiles)); | |||
| Assert.False(value.Has(ChannelPermission.ReadMessageHistory)); | |||
| Assert.False(value.Has(ChannelPermission.MentionEveryone)); | |||
| Assert.False(value.Has(ChannelPermission.UseExternalEmojis)); | |||
| Assert.False(value.Has(ChannelPermission.ManageRoles)); | |||
| Assert.False(value.Has(ChannelPermission.ManageWebhooks)); | |||
| Assert.False(value.Has(ChannelPermission.Connect)); | |||
| Assert.False(value.Has(ChannelPermission.Speak)); | |||
| Assert.False(value.Has(ChannelPermission.MuteMembers)); | |||
| Assert.False(value.Has(ChannelPermission.DeafenMembers)); | |||
| Assert.False(value.Has(ChannelPermission.MoveMembers)); | |||
| Assert.False(value.Has(ChannelPermission.UseVAD)); | |||
| TestHelper(value, ChannelPermission.CreateInstantInvite, false); | |||
| TestHelper(value, ChannelPermission.ManageChannels, false); | |||
| TestHelper(value, ChannelPermission.AddReactions, false); | |||
| TestHelper(value, ChannelPermission.ViewChannel, false); | |||
| TestHelper(value, ChannelPermission.SendMessages, false); | |||
| TestHelper(value, ChannelPermission.SendTTSMessages, false); | |||
| TestHelper(value, ChannelPermission.ManageMessages, false); | |||
| TestHelper(value, ChannelPermission.EmbedLinks, false); | |||
| TestHelper(value, ChannelPermission.AttachFiles, false); | |||
| TestHelper(value, ChannelPermission.ReadMessageHistory, false); | |||
| TestHelper(value, ChannelPermission.MentionEveryone, false); | |||
| TestHelper(value, ChannelPermission.UseExternalEmojis, false); | |||
| TestHelper(value, ChannelPermission.ManageRoles, false); | |||
| TestHelper(value, ChannelPermission.ManageWebhooks, false); | |||
| TestHelper(value, ChannelPermission.Connect, false); | |||
| TestHelper(value, ChannelPermission.Speak, false); | |||
| TestHelper(value, ChannelPermission.MuteMembers, false); | |||
| TestHelper(value, ChannelPermission.DeafenMembers, false); | |||
| TestHelper(value, ChannelPermission.MoveMembers, false); | |||
| TestHelper(value, ChannelPermission.UseVAD, false); | |||
| return Task.CompletedTask; | |||
| } | |||
| @@ -92,26 +115,26 @@ namespace Discord | |||
| // check that none will fail all | |||
| var value = ChannelPermissions.DM; | |||
| Assert.False(value.Has(ChannelPermission.CreateInstantInvite)); | |||
| Assert.False(value.Has(ChannelPermission.ManageChannels)); | |||
| Assert.False(value.Has(ChannelPermission.AddReactions)); | |||
| Assert.True(value.Has(ChannelPermission.ViewChannel)); | |||
| Assert.True(value.Has(ChannelPermission.SendMessages)); | |||
| Assert.False(value.Has(ChannelPermission.SendTTSMessages)); | |||
| Assert.False(value.Has(ChannelPermission.ManageMessages)); | |||
| Assert.True(value.Has(ChannelPermission.EmbedLinks)); | |||
| Assert.True(value.Has(ChannelPermission.AttachFiles)); | |||
| Assert.True(value.Has(ChannelPermission.ReadMessageHistory)); | |||
| Assert.False(value.Has(ChannelPermission.MentionEveryone)); | |||
| Assert.True(value.Has(ChannelPermission.UseExternalEmojis)); | |||
| Assert.False(value.Has(ChannelPermission.ManageRoles)); | |||
| Assert.False(value.Has(ChannelPermission.ManageWebhooks)); | |||
| Assert.True(value.Has(ChannelPermission.Connect)); | |||
| Assert.True(value.Has(ChannelPermission.Speak)); | |||
| Assert.False(value.Has(ChannelPermission.MuteMembers)); | |||
| Assert.False(value.Has(ChannelPermission.DeafenMembers)); | |||
| Assert.False(value.Has(ChannelPermission.MoveMembers)); | |||
| Assert.True(value.Has(ChannelPermission.UseVAD)); | |||
| TestHelper(value, ChannelPermission.CreateInstantInvite, false); | |||
| TestHelper(value, ChannelPermission.ManageChannels, false); | |||
| TestHelper(value, ChannelPermission.AddReactions, false); | |||
| TestHelper(value, ChannelPermission.ViewChannel, true); | |||
| TestHelper(value, ChannelPermission.SendMessages, true); | |||
| TestHelper(value, ChannelPermission.SendTTSMessages, false); | |||
| TestHelper(value, ChannelPermission.ManageMessages, false); | |||
| TestHelper(value, ChannelPermission.EmbedLinks, true); | |||
| TestHelper(value, ChannelPermission.AttachFiles, true); | |||
| TestHelper(value, ChannelPermission.ReadMessageHistory, true); | |||
| TestHelper(value, ChannelPermission.MentionEveryone, false); | |||
| TestHelper(value, ChannelPermission.UseExternalEmojis, true); | |||
| TestHelper(value, ChannelPermission.ManageRoles, false); | |||
| TestHelper(value, ChannelPermission.ManageWebhooks, false); | |||
| TestHelper(value, ChannelPermission.Connect, true); | |||
| TestHelper(value, ChannelPermission.Speak, true); | |||
| TestHelper(value, ChannelPermission.MuteMembers, false); | |||
| TestHelper(value, ChannelPermission.DeafenMembers, false); | |||
| TestHelper(value, ChannelPermission.MoveMembers, false); | |||
| TestHelper(value, ChannelPermission.UseVAD, true); | |||
| return Task.CompletedTask; | |||
| } | |||
| @@ -127,26 +150,26 @@ namespace Discord | |||
| { | |||
| var value = ChannelPermissions.Group; | |||
| Assert.False(value.Has(ChannelPermission.CreateInstantInvite)); | |||
| Assert.False(value.Has(ChannelPermission.ManageChannels)); | |||
| Assert.False(value.Has(ChannelPermission.AddReactions)); | |||
| Assert.False(value.Has(ChannelPermission.ViewChannel)); | |||
| Assert.True(value.Has(ChannelPermission.SendMessages)); | |||
| Assert.True(value.Has(ChannelPermission.SendTTSMessages)); | |||
| Assert.False(value.Has(ChannelPermission.ManageMessages)); | |||
| Assert.True(value.Has(ChannelPermission.EmbedLinks)); | |||
| Assert.True(value.Has(ChannelPermission.AttachFiles)); | |||
| Assert.False(value.Has(ChannelPermission.ReadMessageHistory)); | |||
| Assert.False(value.Has(ChannelPermission.MentionEveryone)); | |||
| Assert.False(value.Has(ChannelPermission.UseExternalEmojis)); | |||
| Assert.False(value.Has(ChannelPermission.ManageRoles)); | |||
| Assert.False(value.Has(ChannelPermission.ManageWebhooks)); | |||
| Assert.True(value.Has(ChannelPermission.Connect)); | |||
| Assert.True(value.Has(ChannelPermission.Speak)); | |||
| Assert.False(value.Has(ChannelPermission.MuteMembers)); | |||
| Assert.False(value.Has(ChannelPermission.DeafenMembers)); | |||
| Assert.False(value.Has(ChannelPermission.MoveMembers)); | |||
| Assert.True(value.Has(ChannelPermission.UseVAD)); | |||
| TestHelper(value, ChannelPermission.CreateInstantInvite, false); | |||
| TestHelper(value, ChannelPermission.ManageChannels, false); | |||
| TestHelper(value, ChannelPermission.AddReactions, false); | |||
| TestHelper(value, ChannelPermission.ViewChannel, false); | |||
| TestHelper(value, ChannelPermission.SendMessages, true); | |||
| TestHelper(value, ChannelPermission.SendTTSMessages, true); | |||
| TestHelper(value, ChannelPermission.ManageMessages, false); | |||
| TestHelper(value, ChannelPermission.EmbedLinks, true); | |||
| TestHelper(value, ChannelPermission.AttachFiles, true); | |||
| TestHelper(value, ChannelPermission.ReadMessageHistory, false); | |||
| TestHelper(value, ChannelPermission.MentionEveryone, false); | |||
| TestHelper(value, ChannelPermission.UseExternalEmojis, false); | |||
| TestHelper(value, ChannelPermission.ManageRoles, false); | |||
| TestHelper(value, ChannelPermission.ManageWebhooks, false); | |||
| TestHelper(value, ChannelPermission.Connect, true); | |||
| TestHelper(value, ChannelPermission.Speak, true); | |||
| TestHelper(value, ChannelPermission.MuteMembers, false); | |||
| TestHelper(value, ChannelPermission.DeafenMembers, false); | |||
| TestHelper(value, ChannelPermission.MoveMembers, false); | |||
| TestHelper(value, ChannelPermission.UseVAD, true); | |||
| return Task.CompletedTask; | |||
| } | |||
| @@ -165,26 +188,26 @@ namespace Discord | |||
| // make a flag with all possible values for Voice channel permissions | |||
| var value = ChannelPermissions.Voice; | |||
| Assert.True(value.Has(ChannelPermission.CreateInstantInvite)); | |||
| Assert.True(value.Has(ChannelPermission.ManageChannels)); | |||
| Assert.False(value.Has(ChannelPermission.AddReactions)); | |||
| Assert.False(value.Has(ChannelPermission.ViewChannel)); | |||
| Assert.False(value.Has(ChannelPermission.SendMessages)); | |||
| Assert.False(value.Has(ChannelPermission.SendTTSMessages)); | |||
| Assert.False(value.Has(ChannelPermission.ManageMessages)); | |||
| Assert.False(value.Has(ChannelPermission.EmbedLinks)); | |||
| Assert.False(value.Has(ChannelPermission.AttachFiles)); | |||
| Assert.False(value.Has(ChannelPermission.ReadMessageHistory)); | |||
| Assert.False(value.Has(ChannelPermission.MentionEveryone)); | |||
| Assert.False(value.Has(ChannelPermission.UseExternalEmojis)); | |||
| Assert.True(value.Has(ChannelPermission.ManageRoles)); | |||
| Assert.False(value.Has(ChannelPermission.ManageWebhooks)); | |||
| Assert.True(value.Has(ChannelPermission.Connect)); | |||
| Assert.True(value.Has(ChannelPermission.Speak)); | |||
| Assert.True(value.Has(ChannelPermission.MuteMembers)); | |||
| Assert.True(value.Has(ChannelPermission.DeafenMembers)); | |||
| Assert.True(value.Has(ChannelPermission.MoveMembers)); | |||
| Assert.True(value.Has(ChannelPermission.UseVAD)); | |||
| TestHelper(value, ChannelPermission.CreateInstantInvite, true); | |||
| TestHelper(value, ChannelPermission.ManageChannels, true); | |||
| TestHelper(value, ChannelPermission.AddReactions, false); | |||
| TestHelper(value, ChannelPermission.ViewChannel, false); | |||
| TestHelper(value, ChannelPermission.SendMessages, false); | |||
| TestHelper(value, ChannelPermission.SendTTSMessages, false); | |||
| TestHelper(value, ChannelPermission.ManageMessages, false); | |||
| TestHelper(value, ChannelPermission.EmbedLinks, false); | |||
| TestHelper(value, ChannelPermission.AttachFiles, false); | |||
| TestHelper(value, ChannelPermission.ReadMessageHistory, false); | |||
| TestHelper(value, ChannelPermission.MentionEveryone, false); | |||
| TestHelper(value, ChannelPermission.UseExternalEmojis, false); | |||
| TestHelper(value, ChannelPermission.ManageRoles, true); | |||
| TestHelper(value, ChannelPermission.ManageWebhooks, false); | |||
| TestHelper(value, ChannelPermission.Connect, true); | |||
| TestHelper(value, ChannelPermission.Speak, true); | |||
| TestHelper(value, ChannelPermission.MuteMembers, true); | |||
| TestHelper(value, ChannelPermission.DeafenMembers, true); | |||
| TestHelper(value, ChannelPermission.MoveMembers, true); | |||
| TestHelper(value, ChannelPermission.UseVAD, true); | |||
| return Task.CompletedTask; | |||
| } | |||
| @@ -201,6 +224,34 @@ namespace Discord | |||
| { | |||
| var value = GuildPermissions.None; | |||
| TestHelper(value, GuildPermission.CreateInstantInvite, false); | |||
| TestHelper(value, GuildPermission.KickMembers, false); | |||
| TestHelper(value, GuildPermission.BanMembers, false); | |||
| TestHelper(value, GuildPermission.Administrator, false); | |||
| TestHelper(value, GuildPermission.ManageChannels, false); | |||
| TestHelper(value, GuildPermission.ManageGuild, false); | |||
| TestHelper(value, GuildPermission.AddReactions, false); | |||
| TestHelper(value, GuildPermission.ViewAuditLog, false); | |||
| TestHelper(value, GuildPermission.ReadMessages, false); | |||
| TestHelper(value, GuildPermission.SendMessages, false); | |||
| TestHelper(value, GuildPermission.SendTTSMessages, false); | |||
| TestHelper(value, GuildPermission.ManageMessages, false); | |||
| TestHelper(value, GuildPermission.EmbedLinks, false); | |||
| TestHelper(value, GuildPermission.AttachFiles, false); | |||
| TestHelper(value, GuildPermission.ReadMessageHistory, false); | |||
| TestHelper(value, GuildPermission.MentionEveryone, false); | |||
| TestHelper(value, GuildPermission.UseExternalEmojis, false); | |||
| TestHelper(value, GuildPermission.Connect, false); | |||
| TestHelper(value, GuildPermission.Speak, false); | |||
| TestHelper(value, GuildPermission.MuteMembers, false); | |||
| TestHelper(value, GuildPermission.MoveMembers, false); | |||
| TestHelper(value, GuildPermission.UseVAD, false); | |||
| TestHelper(value, GuildPermission.ChangeNickname, false); | |||
| TestHelper(value, GuildPermission.ManageNicknames, false); | |||
| TestHelper(value, GuildPermission.ManageRoles, false); | |||
| TestHelper(value, GuildPermission.ManageWebhooks, false); | |||
| TestHelper(value, GuildPermission.ManageEmojis, false); | |||
| return Task.CompletedTask; | |||
| } | |||
| @@ -216,6 +267,35 @@ namespace Discord | |||
| { | |||
| var value = GuildPermissions.All; | |||
| TestHelper(value, GuildPermission.CreateInstantInvite, true); | |||
| TestHelper(value, GuildPermission.KickMembers, true); | |||
| TestHelper(value, GuildPermission.BanMembers, true); | |||
| TestHelper(value, GuildPermission.Administrator, true); | |||
| TestHelper(value, GuildPermission.ManageChannels, true); | |||
| TestHelper(value, GuildPermission.ManageGuild, true); | |||
| TestHelper(value, GuildPermission.AddReactions, true); | |||
| TestHelper(value, GuildPermission.ViewAuditLog, true); | |||
| TestHelper(value, GuildPermission.ReadMessages, true); | |||
| TestHelper(value, GuildPermission.SendMessages, true); | |||
| TestHelper(value, GuildPermission.SendTTSMessages, true); | |||
| TestHelper(value, GuildPermission.ManageMessages, true); | |||
| TestHelper(value, GuildPermission.EmbedLinks, true); | |||
| TestHelper(value, GuildPermission.AttachFiles, true); | |||
| TestHelper(value, GuildPermission.ReadMessageHistory, true); | |||
| TestHelper(value, GuildPermission.MentionEveryone, true); | |||
| TestHelper(value, GuildPermission.UseExternalEmojis, true); | |||
| TestHelper(value, GuildPermission.Connect, true); | |||
| TestHelper(value, GuildPermission.Speak, true); | |||
| TestHelper(value, GuildPermission.MuteMembers, true); | |||
| TestHelper(value, GuildPermission.MoveMembers, true); | |||
| TestHelper(value, GuildPermission.UseVAD, true); | |||
| TestHelper(value, GuildPermission.ChangeNickname, true); | |||
| TestHelper(value, GuildPermission.ManageNicknames, true); | |||
| TestHelper(value, GuildPermission.ManageRoles, true); | |||
| TestHelper(value, GuildPermission.ManageWebhooks, true); | |||
| TestHelper(value, GuildPermission.ManageEmojis, true); | |||
| return Task.CompletedTask; | |||
| } | |||
| @@ -229,7 +309,35 @@ namespace Discord | |||
| [Fact] | |||
| public Task TestPermissionsHasGuildPermissionWebhook() | |||
| { | |||
| var value = GuildPermissions.All; | |||
| var value = GuildPermissions.Webhook; | |||
| TestHelper(value, GuildPermission.CreateInstantInvite, false); | |||
| TestHelper(value, GuildPermission.KickMembers, false); | |||
| TestHelper(value, GuildPermission.BanMembers, false); | |||
| TestHelper(value, GuildPermission.Administrator, false); | |||
| TestHelper(value, GuildPermission.ManageChannels, false); | |||
| TestHelper(value, GuildPermission.ManageGuild, false); | |||
| TestHelper(value, GuildPermission.AddReactions, false); | |||
| TestHelper(value, GuildPermission.ViewAuditLog, false); | |||
| TestHelper(value, GuildPermission.ReadMessages, false); | |||
| TestHelper(value, GuildPermission.SendMessages, true); | |||
| TestHelper(value, GuildPermission.SendTTSMessages, true); | |||
| TestHelper(value, GuildPermission.ManageMessages, false); | |||
| TestHelper(value, GuildPermission.EmbedLinks, true); | |||
| TestHelper(value, GuildPermission.AttachFiles, true); | |||
| TestHelper(value, GuildPermission.ReadMessageHistory, false); | |||
| TestHelper(value, GuildPermission.MentionEveryone, false); | |||
| TestHelper(value, GuildPermission.UseExternalEmojis, false); | |||
| TestHelper(value, GuildPermission.Connect, false); | |||
| TestHelper(value, GuildPermission.Speak, false); | |||
| TestHelper(value, GuildPermission.MuteMembers, false); | |||
| TestHelper(value, GuildPermission.MoveMembers, false); | |||
| TestHelper(value, GuildPermission.UseVAD, false); | |||
| TestHelper(value, GuildPermission.ChangeNickname, false); | |||
| TestHelper(value, GuildPermission.ManageNicknames, false); | |||
| TestHelper(value, GuildPermission.ManageRoles, false); | |||
| TestHelper(value, GuildPermission.ManageWebhooks, false); | |||
| TestHelper(value, GuildPermission.ManageEmojis, false); | |||
| return Task.CompletedTask; | |||
| } | |||