diff --git a/src/integration-test/kotlin/de/bixilon/minosoft/data/container/click/CloneContainerActionTest.kt b/src/integration-test/kotlin/de/bixilon/minosoft/data/container/click/CloneContainerActionTest.kt
index eda1b63a6..fae3aeb26 100644
--- a/src/integration-test/kotlin/de/bixilon/minosoft/data/container/click/CloneContainerActionTest.kt
+++ b/src/integration-test/kotlin/de/bixilon/minosoft/data/container/click/CloneContainerActionTest.kt
@@ -13,45 +13,62 @@
package de.bixilon.minosoft.data.container.click
+import de.bixilon.minosoft.data.container.click.ContainerTestUtil.createContainer
import de.bixilon.minosoft.data.container.stack.ItemStack
+import de.bixilon.minosoft.data.registries.items.AppleTestO
import de.bixilon.minosoft.data.registries.items.EggTestO
+import de.bixilon.minosoft.protocol.network.connection.play.PlayConnectionUtil.assertNoPacket
+import de.bixilon.minosoft.protocol.network.connection.play.PlayConnectionUtil.assertOnlyPacket
+import de.bixilon.minosoft.protocol.network.connection.play.PlayConnectionUtil.createConnection
+import de.bixilon.minosoft.protocol.packets.c2s.play.container.ContainerClickC2SP
import org.testng.Assert.*
import org.testng.annotations.Test
@Test(groups = ["container"])
+@Deprecated("Verify with minecraft")
class CloneContainerActionTest {
fun testEmpty() {
- val container = ContainerTestUtil.createContainer()
+ val connection = createConnection()
+ val container = createContainer(connection)
container.invokeAction(CloneContainerAction(0))
assertNull(container.floatingItem)
+ connection.assertNoPacket()
}
fun testAlready() {
- val container = ContainerTestUtil.createContainer()
- container.floatingItem = ItemStack(EggTest0.item, count = 7)
+ val connection = createConnection()
+ val container = createContainer(connection)
+ container.floatingItem = ItemStack(EggTestO.item, count = 7)
container.invokeAction(CloneContainerAction(6))
- assertEquals(container.floatingItem, ItemStack(EggTest0.item, count = 7))
+ assertEquals(container.floatingItem, ItemStack(EggTestO.item, count = 7))
+ connection.assertNoPacket()
}
fun testTaking() {
- val container = ContainerTestUtil.createContainer()
- container[1] = ItemStack(AppleTest0.item)
+ val connection = createConnection()
+ val container = createContainer(connection)
+ container[1] = ItemStack(AppleTestO.item)
container.invokeAction(CloneContainerAction(1))
- assertEquals(container.floatingItem, ItemStack(AppleTest0.item, count = 64))
+ assertEquals(container.floatingItem, ItemStack(AppleTestO.item, count = 64))
+ connection.assertOnlyPacket(ContainerClickC2SP(9, container.serverRevision, 1, 3, 0, 0, emptyMap(), ItemStack(AppleTestO.item)))
}
fun taskTalking2() {
- val container = ContainerTestUtil.createContainer()
- container[3] = ItemStack(AppleTest0.item, count = 8)
+ val connection = createConnection()
+ val container = createContainer(connection)
+ container[3] = ItemStack(AppleTestO.item, count = 8)
container.invokeAction(CloneContainerAction(3))
- assertEquals(container.floatingItem, ItemStack(AppleTest0.item, count = 64))
+ assertEquals(container.floatingItem, ItemStack(AppleTestO.item, count = 64))
+ connection.assertOnlyPacket(ContainerClickC2SP(9, container.serverRevision, 3, 3, 0, 0, emptyMap(), ItemStack(AppleTestO.item, count = 8)))
}
fun testStackLimit() {
- val container = ContainerTestUtil.createContainer()
+ val connection = createConnection()
+ val container = createContainer(connection)
container[8] = ItemStack(EggTestO.item, count = 9)
container.invokeAction(CloneContainerAction(8))
assertEquals(container.floatingItem, ItemStack(EggTestO.item, count = 16))
+ connection.assertOnlyPacket(ContainerClickC2SP(9, container.serverRevision, 8, 3, 0, 0, emptyMap(), ItemStack(EggTestO.item, count = 9)))
}
}
diff --git a/src/integration-test/kotlin/de/bixilon/minosoft/data/container/click/ContainerTestUtil.kt b/src/integration-test/kotlin/de/bixilon/minosoft/data/container/click/ContainerTestUtil.kt
index 5a30215cd..ef113f589 100644
--- a/src/integration-test/kotlin/de/bixilon/minosoft/data/container/click/ContainerTestUtil.kt
+++ b/src/integration-test/kotlin/de/bixilon/minosoft/data/container/click/ContainerTestUtil.kt
@@ -14,11 +14,14 @@
package de.bixilon.minosoft.data.container.click
import de.bixilon.minosoft.data.container.Container
+import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
+import de.bixilon.minosoft.protocol.network.connection.play.PlayConnectionUtil.createConnection
object ContainerTestUtil {
- fun createContainer(): Container {
+ fun createContainer(connection: PlayConnection = createConnection()): Container {
+ // TODO: set id to 9
TODO()
}
}
diff --git a/src/integration-test/kotlin/de/bixilon/minosoft/protocol/network/connection/play/PlayConnectionUtil.kt b/src/integration-test/kotlin/de/bixilon/minosoft/protocol/network/connection/play/PlayConnectionUtil.kt
new file mode 100644
index 000000000..9bc9a6002
--- /dev/null
+++ b/src/integration-test/kotlin/de/bixilon/minosoft/protocol/network/connection/play/PlayConnectionUtil.kt
@@ -0,0 +1,57 @@
+/*
+ * Minosoft
+ * Copyright (C) 2020-2022 Moritz Zwerger
+ *
+ * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with this program. If not, see .
+ *
+ * This software is not affiliated with Mojang AB, the original developer of Minecraft.
+ */
+
+package de.bixilon.minosoft.protocol.network.connection.play
+
+import de.bixilon.kutil.cast.CastUtil.unsafeCast
+import de.bixilon.minosoft.IT.reference
+import de.bixilon.minosoft.protocol.network.network.client.test.TestNetwork
+import de.bixilon.minosoft.protocol.packets.c2s.C2SPacket
+import org.objenesis.ObjenesisStd
+import org.testng.Assert
+import org.testng.Assert.assertNull
+
+
+object PlayConnectionUtil {
+ private val OBJENESIS = ObjenesisStd()
+
+ init {
+ reference()
+ }
+
+ fun createConnection(): PlayConnection {
+ val connection = OBJENESIS.newInstance(PlayConnection::class.java)
+ TODO()
+
+ connection::network.forceSet(TestNetwork())
+
+ return connection
+ }
+
+ fun PlayConnection.test(): TestNetwork {
+ return network.unsafeCast()
+ }
+
+ fun PlayConnection.assertPacket(packet: C2SPacket) {
+ Assert.assertEquals(test().take(), packet)
+ }
+
+ fun PlayConnection.assertNoPacket() {
+ assertNull(test().take())
+ }
+
+ fun PlayConnection.assertOnlyPacket(packet: C2SPacket) {
+ assertPacket(packet)
+ assertNoPacket()
+ }
+}
diff --git a/src/integration-test/kotlin/de/bixilon/minosoft/protocol/network/network/client/test/TestNetwork.kt b/src/integration-test/kotlin/de/bixilon/minosoft/protocol/network/network/client/test/TestNetwork.kt
new file mode 100644
index 000000000..237083aca
--- /dev/null
+++ b/src/integration-test/kotlin/de/bixilon/minosoft/protocol/network/network/client/test/TestNetwork.kt
@@ -0,0 +1,57 @@
+/*
+ * Minosoft
+ * Copyright (C) 2020-2022 Moritz Zwerger
+ *
+ * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with this program. If not, see .
+ *
+ * This software is not affiliated with Mojang AB, the original developer of Minecraft.
+ */
+
+package de.bixilon.minosoft.protocol.network.network.client.test
+
+import de.bixilon.minosoft.protocol.address.ServerAddress
+import de.bixilon.minosoft.protocol.network.network.client.ClientNetwork
+import de.bixilon.minosoft.protocol.packets.c2s.C2SPacket
+import de.bixilon.minosoft.protocol.protocol.ProtocolStates
+import java.util.concurrent.ConcurrentLinkedQueue
+import javax.crypto.Cipher
+
+class TestNetwork : ClientNetwork {
+ override var connected: Boolean = false
+ override var state: ProtocolStates = ProtocolStates.PLAY
+ override var compressionThreshold: Int = -1
+ override var encrypted: Boolean = false
+
+ private var queue = ConcurrentLinkedQueue()
+
+ override fun connect(address: ServerAddress, native: Boolean) {
+ connected = true
+ }
+
+ override fun disconnect() {
+ connected = false
+ }
+
+ override fun setupEncryption(encrypt: Cipher, decrypt: Cipher) {
+ encrypted = true
+ }
+
+ override fun pauseSending(pause: Boolean) = Unit
+ override fun pauseReceiving(pause: Boolean) = Unit
+
+ override fun send(packet: C2SPacket) {
+ if (queue.size > 15) {
+ // leaking
+ return
+ }
+ queue += packet
+ }
+
+ fun take(): C2SPacket? {
+ return queue.remove()
+ }
+}