From eff4df64429e70793881904f2d45022e78ea8203 Mon Sep 17 00:00:00 2001
From: Janne Koschinski <janne@kuschku.de>
Date: Mon, 21 Jan 2019 16:54:41 +0100
Subject: [PATCH] =?UTF-8?q?Fixed=20issue=20with=20flags=20and=20added=20te?=
 =?UTF-8?q?st=20to=20ensure=20they=20won=E2=80=99t=20happen=20again?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../de/kuschku/libquassel/util/flag/Flag.kt   |  2 +-
 .../kuschku/libquassel/util/flag/LongFlag.kt  |  2 +-
 .../kuschku/libquassel/util/flag/ShortFlag.kt |  2 +-
 .../libquassel/quassel/BufferTypeTest.kt      | 70 +++++++++++++++++++
 4 files changed, 73 insertions(+), 3 deletions(-)
 create mode 100644 lib/src/test/java/de/kuschku/libquassel/quassel/BufferTypeTest.kt

diff --git a/lib/src/main/java/de/kuschku/libquassel/util/flag/Flag.kt b/lib/src/main/java/de/kuschku/libquassel/util/flag/Flag.kt
index a73c80f57..ab5ce92ea 100644
--- a/lib/src/main/java/de/kuschku/libquassel/util/flag/Flag.kt
+++ b/lib/src/main/java/de/kuschku/libquassel/util/flag/Flag.kt
@@ -104,7 +104,7 @@ data class Flags<E>(
 
 infix fun <T> Flags<T>.hasFlag(which: T): Boolean where T : Enum<T>, T : Flag<T> {
   // an Undefined flag is a special case.
-  if (value == 0u) return false
+  if (which.bit == 0u) return false
   return value and which.bit == which.bit
 }
 
diff --git a/lib/src/main/java/de/kuschku/libquassel/util/flag/LongFlag.kt b/lib/src/main/java/de/kuschku/libquassel/util/flag/LongFlag.kt
index 61dec8af0..5aa32e182 100644
--- a/lib/src/main/java/de/kuschku/libquassel/util/flag/LongFlag.kt
+++ b/lib/src/main/java/de/kuschku/libquassel/util/flag/LongFlag.kt
@@ -104,7 +104,7 @@ data class LongFlags<E>(
 
 infix fun <T> LongFlags<T>.hasFlag(which: T): Boolean where T : Enum<T>, T : LongFlag<T> {
   // an Undefined flag is a special case.
-  if (value == 0uL) return false
+  if (which.bit == 0uL) return false
   return value and which.bit == which.bit
 }
 
diff --git a/lib/src/main/java/de/kuschku/libquassel/util/flag/ShortFlag.kt b/lib/src/main/java/de/kuschku/libquassel/util/flag/ShortFlag.kt
index 273d8cce6..0eacf94f3 100644
--- a/lib/src/main/java/de/kuschku/libquassel/util/flag/ShortFlag.kt
+++ b/lib/src/main/java/de/kuschku/libquassel/util/flag/ShortFlag.kt
@@ -104,7 +104,7 @@ data class ShortFlags<E>(
 
 infix fun <T> ShortFlags<T>.hasFlag(which: T): Boolean where T : Enum<T>, T : ShortFlag<T> {
   // an Undefined flag is a special case.
-  if (value == 0u.toUShort()) return false
+  if (which.bit == 0u.toUShort()) return false
   return value and which.bit == which.bit
 }
 
diff --git a/lib/src/test/java/de/kuschku/libquassel/quassel/BufferTypeTest.kt b/lib/src/test/java/de/kuschku/libquassel/quassel/BufferTypeTest.kt
new file mode 100644
index 000000000..e8e4389d4
--- /dev/null
+++ b/lib/src/test/java/de/kuschku/libquassel/quassel/BufferTypeTest.kt
@@ -0,0 +1,70 @@
+package de.kuschku.libquassel.quassel
+
+import de.kuschku.libquassel.protocol.Buffer_Type
+import de.kuschku.libquassel.util.flag.hasFlag
+import org.junit.Assert
+import org.junit.Test
+
+class BufferTypeTest {
+  @Test
+  fun testHasFlag() {
+    Assert.assertTrue(Buffer_Type.of(Buffer_Type.StatusBuffer).hasFlag(Buffer_Type.StatusBuffer))
+    Assert.assertFalse(Buffer_Type.of(Buffer_Type.StatusBuffer).hasFlag(Buffer_Type.QueryBuffer))
+    Assert.assertFalse(Buffer_Type.of(Buffer_Type.StatusBuffer).hasFlag(Buffer_Type.ChannelBuffer))
+    Assert.assertFalse(Buffer_Type.of(Buffer_Type.StatusBuffer).hasFlag(Buffer_Type.GroupBuffer))
+
+    Assert.assertFalse(Buffer_Type.of(Buffer_Type.QueryBuffer).hasFlag(Buffer_Type.StatusBuffer))
+    Assert.assertTrue(Buffer_Type.of(Buffer_Type.QueryBuffer).hasFlag(Buffer_Type.QueryBuffer))
+    Assert.assertFalse(Buffer_Type.of(Buffer_Type.QueryBuffer).hasFlag(Buffer_Type.ChannelBuffer))
+    Assert.assertFalse(Buffer_Type.of(Buffer_Type.QueryBuffer).hasFlag(Buffer_Type.GroupBuffer))
+
+    Assert.assertFalse(Buffer_Type.of(Buffer_Type.ChannelBuffer).hasFlag(Buffer_Type.StatusBuffer))
+    Assert.assertFalse(Buffer_Type.of(Buffer_Type.ChannelBuffer).hasFlag(Buffer_Type.QueryBuffer))
+    Assert.assertTrue(Buffer_Type.of(Buffer_Type.ChannelBuffer).hasFlag(Buffer_Type.ChannelBuffer))
+    Assert.assertFalse(Buffer_Type.of(Buffer_Type.ChannelBuffer).hasFlag(Buffer_Type.GroupBuffer))
+
+    Assert.assertFalse(Buffer_Type.of(Buffer_Type.GroupBuffer).hasFlag(Buffer_Type.StatusBuffer))
+    Assert.assertFalse(Buffer_Type.of(Buffer_Type.GroupBuffer).hasFlag(Buffer_Type.QueryBuffer))
+    Assert.assertFalse(Buffer_Type.of(Buffer_Type.GroupBuffer).hasFlag(Buffer_Type.ChannelBuffer))
+    Assert.assertTrue(Buffer_Type.of(Buffer_Type.GroupBuffer).hasFlag(Buffer_Type.GroupBuffer))
+  }
+
+  @Test
+  fun testEnabledValues() {
+    Assert.assertEquals(
+      Buffer_Type.StatusBuffer,
+      Buffer_Type.of(Buffer_Type.StatusBuffer).enabledValues().firstOrNull()
+    )
+    Assert.assertEquals(
+      setOf(Buffer_Type.StatusBuffer),
+      Buffer_Type.of(Buffer_Type.StatusBuffer).enabledValues()
+    )
+
+    Assert.assertEquals(
+      Buffer_Type.QueryBuffer,
+      Buffer_Type.of(Buffer_Type.QueryBuffer).enabledValues().firstOrNull()
+    )
+    Assert.assertEquals(
+      setOf(Buffer_Type.QueryBuffer),
+      Buffer_Type.of(Buffer_Type.QueryBuffer).enabledValues()
+    )
+
+    Assert.assertEquals(
+      Buffer_Type.ChannelBuffer,
+      Buffer_Type.of(Buffer_Type.ChannelBuffer).enabledValues().firstOrNull()
+    )
+    Assert.assertEquals(
+      setOf(Buffer_Type.ChannelBuffer),
+      Buffer_Type.of(Buffer_Type.ChannelBuffer).enabledValues()
+    )
+
+    Assert.assertEquals(
+      Buffer_Type.GroupBuffer,
+      Buffer_Type.of(Buffer_Type.GroupBuffer).enabledValues().firstOrNull()
+    )
+    Assert.assertEquals(
+      setOf(Buffer_Type.GroupBuffer),
+      Buffer_Type.of(Buffer_Type.GroupBuffer).enabledValues()
+    )
+  }
+}
-- 
GitLab