From e3f16b34576e14357dc12c66e0f4eb9af15c6ff5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Vo=C3=9F?= Date: Mon, 14 Jun 2021 20:45:13 +0200 Subject: [PATCH] first try of adding the alcatrazEscapee:mcjunitlib library for automated testing --- .gitignore | 1 + build.gradle | 39 +++++++++++++++--- config/fml.toml | 8 ++++ eula.txt | 3 ++ gradle.properties | 11 +++-- .../item/CeramicFishBucketItem.java | 2 +- src/main/resources/META-INF/mods.toml | 8 ++-- .../cech12/ceramicbucket/DispenserTests.java | 33 +++++++++++++++ .../structures/cauldron_empty.nbt | Bin 0 -> 251 bytes .../structures/cauldron_water_full.nbt | Bin 0 -> 251 bytes .../structures/cauldron_water_one_third.nbt | Bin 0 -> 251 bytes .../structures/cauldron_water_two_thirds.nbt | Bin 0 -> 251 bytes .../structures/dispenser_empty.nbt | Bin 0 -> 366 bytes .../structures/dispenser_lava.nbt | Bin 0 -> 363 bytes .../structures/dispenser_milk.nbt | Bin 0 -> 372 bytes .../structures/dispenser_water.nbt | Bin 0 -> 404 bytes .../ceramicbucket/structures/fluid_pit.nbt | Bin 0 -> 219 bytes 17 files changed, 90 insertions(+), 15 deletions(-) create mode 100644 config/fml.toml create mode 100644 eula.txt create mode 100644 src/test/java/cech12/ceramicbucket/DispenserTests.java create mode 100644 src/test/resources/cech12/ceramicbucket/structures/cauldron_empty.nbt create mode 100644 src/test/resources/cech12/ceramicbucket/structures/cauldron_water_full.nbt create mode 100644 src/test/resources/cech12/ceramicbucket/structures/cauldron_water_one_third.nbt create mode 100644 src/test/resources/cech12/ceramicbucket/structures/cauldron_water_two_thirds.nbt create mode 100644 src/test/resources/cech12/ceramicbucket/structures/dispenser_empty.nbt create mode 100644 src/test/resources/cech12/ceramicbucket/structures/dispenser_lava.nbt create mode 100644 src/test/resources/cech12/ceramicbucket/structures/dispenser_milk.nbt create mode 100644 src/test/resources/cech12/ceramicbucket/structures/dispenser_water.nbt create mode 100644 src/test/resources/cech12/ceramicbucket/structures/fluid_pit.nbt diff --git a/.gitignore b/.gitignore index 12f8644..c4a8b99 100644 --- a/.gitignore +++ b/.gitignore @@ -23,3 +23,4 @@ run # Files from Forge MDK forge*changelog.txt +/.mixin.out/ diff --git a/build.gradle b/build.gradle index 497eee9..9c0a715 100644 --- a/build.gradle +++ b/build.gradle @@ -1,7 +1,6 @@ buildscript { repositories { maven { url = 'https://files.minecraftforge.net/maven' } - jcenter() mavenCentral() } dependencies { @@ -15,7 +14,7 @@ apply plugin: 'maven-publish' version = "${mod_version}-${minecraft_version}" group = 'cech12.ceramicbucket' // http://maven.apache.org/guides/mini/guide-naming-conventions.html -archivesBaseName = 'ceramicbucket' +archivesBaseName = "${mod_id}" sourceCompatibility = targetCompatibility = compileJava.sourceCompatibility = compileJava.targetCompatibility = '1.8' // Need this here so eclipse task generates correctly. @@ -42,7 +41,7 @@ minecraft { property 'ceramicbucket.developmentMode', 'true' mods { - examplemod { + ceramicbucket { source sourceSets.main } } @@ -56,12 +55,36 @@ minecraft { property 'ceramicbucket.developmentMode', 'true' mods { - examplemod { + ceramicbucket { source sourceSets.main } } } + def testClasses = String.join(File.pathSeparator, + "${mod_id}%%${sourceSets.main.output.resourcesDir}", + "${mod_id}%%${sourceSets.main.output.classesDirs.asPath}", + "${mod_id}%%${sourceSets.test.output.resourcesDir}", + "${mod_id}%%${sourceSets.test.output.classesDirs.asPath}") + + serverTest { + parent runs.server // This run config inherits settings from the server config + workingDirectory project.file('run') + main 'com.alcatrazescapee.mcjunitlib.DedicatedTestServerLauncher' // The main class which launches a customized server which then runs JUnit tests + ideaModule "${project.name}.test" // Tell IDEA to use the classpath of the test module + property 'forge.logging.console.level', 'unittest' // This logging level prevents any other server information messages and leaves only the test output + environment 'MOD_CLASSES', testClasses + environment 'target', 'fmltestserver' // This is a custom service used to launch with ModLauncher's transforming class loader + environment 'targetModId', "${mod_id}" // Pass the mod ID directly to mcjunitlib, to find integration test classes from the mod annotation scan data + arg '--crashOnFailedTests' // Optional. Recommended when running in an automated environment. Without it, the server will continue running (and can be connected to via localhost) to inspect why tests failed. + forceExit = false // Optional. Recommended when running in an automated environment, or via the console rather than run configurations. This will allow the task to pass successfully when all tests pass. Use if you see errors along the lines of 'Gradle daemon disappeared unexpectedly'. + mods { + modid { + sources sourceSets.main, sourceSets.test + } + } + } + data { workingDirectory project.file('run') @@ -69,10 +92,10 @@ minecraft { property 'forge.logging.console.level', 'debug' property 'ceramicbucket.developmentMode', 'true' - args '--mod', 'examplemod', '--all', '--output', file('src/generated/resources/') + args '--mod', 'ceramicbucket', '--all', '--output', file('src/generated/resources/') mods { - examplemod { + ceramicbucket { source sourceSets.main } } @@ -91,6 +114,8 @@ repositories { name = "ModMaven" url = "https://modmaven.k-4u.nl" } + //for mcjunitlib + maven { url 'https://jitpack.io' } } dependencies { @@ -104,6 +129,8 @@ dependencies { compileOnly fg.deobf("mezz.jei:jei-${project.jei_version}:api") // at runtime, use the full JEI jar runtimeOnly fg.deobf("mezz.jei:jei-${project.jei_version}") + + testImplementation fg.deobf("com.github.alcatrazEscapee:mcjunitlib:${project.mcjunitlib_version}") } // Example for how to get properties into the manifest for reading by the runtime.. diff --git a/config/fml.toml b/config/fml.toml new file mode 100644 index 0000000..e1ca72d --- /dev/null +++ b/config/fml.toml @@ -0,0 +1,8 @@ +# Enable forge global version checking +versionCheck = true +# does the splashscreen run +splashscreen = true +defaultConfigPath = "defaultconfigs" +# max threads for parallel loading : -1 uses Runtime#availableProcessors +maxThreads = -1 + diff --git a/eula.txt b/eula.txt new file mode 100644 index 0000000..01e30c4 --- /dev/null +++ b/eula.txt @@ -0,0 +1,3 @@ +#By changing the setting below to TRUE you are indicating your agreement to our EULA (https://account.mojang.com/documents/minecraft_eula). +#Mon Jun 14 20:01:56 CEST 2021 +eula=true diff --git a/gradle.properties b/gradle.properties index 0b1ba4c..053c5a3 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,12 +3,15 @@ org.gradle.jvmargs=-Xmx3G org.gradle.daemon=false +mod_id=ceramicbucket mod_version=2.6.3 -minecraft_version=1.16.2+ +minecraft_version=1.16.5+ -forge_version=1.16.2-33.0.21 -forge_mappings=20200916-1.16.2 +forge_version=1.16.5-36.0.4 +forge_mappings=20210309-1.16.5 # jei -jei_version=1.16.2:7.1.+ +jei_version=1.16.5:7.6.1.75 +# mcjunitlib +mcjunitlib_version=1.4.3-1.16.5 diff --git a/src/main/java/cech12/ceramicbucket/item/CeramicFishBucketItem.java b/src/main/java/cech12/ceramicbucket/item/CeramicFishBucketItem.java index eb87ef9..401aa3a 100644 --- a/src/main/java/cech12/ceramicbucket/item/CeramicFishBucketItem.java +++ b/src/main/java/cech12/ceramicbucket/item/CeramicFishBucketItem.java @@ -82,7 +82,7 @@ public void addInformation(@Nonnull ItemStack stack, @Nullable World worldIn, @N tooltip.add((new TranslationTextComponent(TropicalFishEntity.func_212327_q(i))).mergeStyle(atextformatting)); TranslationTextComponent textComponent = new TranslationTextComponent(s); if (!s.equals(s1)) { - textComponent.appendString(", ").append(new TranslationTextComponent(s1)); + textComponent.appendString(", ").appendSibling(new TranslationTextComponent(s1)); } textComponent.mergeStyle(atextformatting); diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml index 4d15755..27ae23a 100644 --- a/src/main/resources/META-INF/mods.toml +++ b/src/main/resources/META-INF/mods.toml @@ -1,5 +1,5 @@ modLoader="javafml" -loaderVersion="[33,)" +loaderVersion="[36,)" issueTrackerURL="https://github.com/cech12/CeramicBucket/issues" license="The MIT License (MIT)" [[mods]] @@ -15,18 +15,18 @@ license="The MIT License (MIT)" [[dependencies.ceramicbucket]] modId="forge" mandatory=true - versionRange="[33.0.21,)" + versionRange="[36.0.4,)" ordering="NONE" side="BOTH" [[dependencies.ceramicbucket]] modId="minecraft" mandatory=true - versionRange="[1.16.2,)" + versionRange="[1.16.5,)" ordering="NONE" side="BOTH" [[dependencies.ceramicbucket]] modId="jei" mandatory=false - versionRange="[7.1.0.0,)" + versionRange="[7.6.1.75,)" ordering="NONE" side="BOTH" \ No newline at end of file diff --git a/src/test/java/cech12/ceramicbucket/DispenserTests.java b/src/test/java/cech12/ceramicbucket/DispenserTests.java new file mode 100644 index 0000000..aa4fee4 --- /dev/null +++ b/src/test/java/cech12/ceramicbucket/DispenserTests.java @@ -0,0 +1,33 @@ +package cech12.ceramicbucket; + +import cech12.ceramicbucket.api.item.CeramicBucketItems; +import com.alcatrazescapee.mcjunitlib.framework.IntegrationTest; +import com.alcatrazescapee.mcjunitlib.framework.IntegrationTestClass; +import com.alcatrazescapee.mcjunitlib.framework.IntegrationTestHelper; +import net.minecraft.fluid.Fluids; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.DispenserTileEntity; +import net.minecraft.util.math.BlockPos; + +import java.util.Objects; + +@IntegrationTestClass("fluids") +public class DispenserTests { + + @IntegrationTest("dispenser_water") + public void testDispenserPlaceWater(IntegrationTestHelper helper) { + helper.pushButton(new BlockPos(0, 1, 0)); + helper.assertFluidAt(new BlockPos(1, 1, 1), Fluids.WATER, "Water should have been dispensed"); + ItemStack dispenserItemStack = ((DispenserTileEntity) Objects.requireNonNull(helper.getTileEntity(new BlockPos(0, 1, 1)))).getStackInSlot(0); + helper.assertTrue(() -> !dispenserItemStack.isEmpty() && dispenserItemStack.getItem() == CeramicBucketItems.CERAMIC_BUCKET, "Empty bucket should have been remain in dispenser"); + } + + @IntegrationTest("dispenser_lava") + public void testDispenserPlaceLava(IntegrationTestHelper helper) { + helper.pushButton(new BlockPos(0, 1, 0)); + helper.assertFluidAt(new BlockPos(1, 1, 1), Fluids.LAVA, "Lava should have been dispensed"); + ItemStack dispenserItemStack = ((DispenserTileEntity) Objects.requireNonNull(helper.getTileEntity(new BlockPos(0, 1, 1)))).getStackInSlot(0); + helper.assertTrue(dispenserItemStack::isEmpty, "No bucket should have been remain in dispenser"); + } + +} diff --git a/src/test/resources/cech12/ceramicbucket/structures/cauldron_empty.nbt b/src/test/resources/cech12/ceramicbucket/structures/cauldron_empty.nbt new file mode 100644 index 0000000000000000000000000000000000000000..13a84b453374970dc920b4a3647c9e9a967ec71c GIT binary patch literal 251 zcmVmlgBLuTeNumdT zy)Bqsg*H2Z9zx#ogn`xo9X82*O9SBF)1j3iyX+)kULCGpeds@unKlm{nlYpjpH_oy z$~MdI8%qr-8m=^?uu4<2NMW(UVui&D3*}CK8d_;c(Qu_9g+&V%uQWA_6&5d8Yfa5U znYE(1G(%R*@RCIeixd_sELK>&VqK5cOU^QX+D(hilRXOVj&6`X+V^}&IShhwaC<(m zF2cY($1qBqe-$mZUcSVG_NV^--1qj=zr`?2x4C(=*}h0jZrZ}^@B?RnhZ>9o000C8 Ba{&MV literal 0 HcmV?d00001 diff --git a/src/test/resources/cech12/ceramicbucket/structures/cauldron_water_full.nbt b/src/test/resources/cech12/ceramicbucket/structures/cauldron_water_full.nbt new file mode 100644 index 0000000000000000000000000000000000000000..89aae14e4a5c9bb599bc6b8f80e56fc945146178 GIT binary patch literal 251 zcmVmlgBLuTeNumdT zy)Bqsg*H2Z9zx#ogn`xo9X82*O9SBF)1j3iyX+)kULCGpeds@unKlm{nlYpjpH_oy z$~MdI8%qr-8m=^?uu4<2NMW(UVui&D3*}CK8d_;c(Qu_9g+&V%uQWA_6&5d8Yfa5U znYE(1G(%R*@RCIeixd_sELK>&VqK5cOU^QX+D(hilRXOVj&6`X+V^}&IShhwaC<(m zF2cY($1qBqe-$mZUcSVG_NV^--1qj=zr`?2x4C(=*}h0jZrZ}^@BmlgBLuTeNumdT zy)Bqsg*H2Z9zx#ogn`xo9X82*O9SBF)1j3iyX+)kULCGpeds@unKlm{nlYpjpH_oy z$~MdI8%qr-8m=^?uu4<2NMW(UVui&D3*}CK8d_;c(Qu_9g+&V%uQWA_6&5d8Yfa5U znYE(1G(%R*@RCIeixd_sELK>&VqK5cOU^QX+D(hilRXOVj&6`X+V^}&IShhwaC<(m zF2cY($1qBqe-$mZUcSVG_NV^--1qj=zr`?2x4C(=*}h0jZrZ}^@B?(O-<6C6000Z_ BbP@mn literal 0 HcmV?d00001 diff --git a/src/test/resources/cech12/ceramicbucket/structures/cauldron_water_two_thirds.nbt b/src/test/resources/cech12/ceramicbucket/structures/cauldron_water_two_thirds.nbt new file mode 100644 index 0000000000000000000000000000000000000000..5f0e7708d1851b89dd248c2f60ef7d7f93279e78 GIT binary patch literal 251 zcmVmlgBLuTeNumdT zy)Bqsg*H2Z9zx#ogn`xo9X82*O9SBF)1j3iyX+)kULCGpeds@unKlm{nlYpjpH_oy z$~MdI8%qr-8m=^?uu4<2NMW(UVui&D3*}CK8d_;c(Qu_9g+&V%uQWA_6&5d8Yfa5U znYE(1G(%R*@RCIeixd_sELK>&VqK5cOU^QX+D(hilRXOVj&6`X+V^}&IShhwaC<(m zF2cY($1qBqe-$mZUcSVG_NV^--1qj=zr`?2x4C(=*}h0jZrZ}^@B;wYM&FDC000RK Bb9w*( literal 0 HcmV?d00001 diff --git a/src/test/resources/cech12/ceramicbucket/structures/dispenser_empty.nbt b/src/test/resources/cech12/ceramicbucket/structures/dispenser_empty.nbt new file mode 100644 index 0000000000000000000000000000000000000000..713817fa4d5a7ce24a9a499af24f65e54b581534 GIT binary patch literal 366 zcmV-!0g?V6iwFP!000000F9JUOT#b_fG=q~+lu(0_@cjLulnMP2!gMYwYM6UCMCHs z@YkEUwVNYt69^&P*Zc0Sv?V|RsgpmL0KmUpK#rOuNp!GZ1uRy|R2x_N%VPmaXIu{t zD}l_BAUr-1Vps&jCm0st>X|7Qi*WG>7msl92p8*XI%C)f!zUQta}x~o+>DDy)Waj{ znR7v)cRs?LyONRlunC3-Tw~0XtDoUio}QVj`Eov?dgfd_=qe%6D=Hv+C2apbUB)2& zP=+7}E^BzI(27=8t8KMGS{`p-hbx2Z*=)5x5Aa}9TUekFysb{V_ zp^ymoC1g3IZ=yxGJ>_#`G(sTIDB+y%qkOlfL%aVUd1@^xgmfpA%6)3HLyI+JYoQ$G zu<%i-8_2Y=^gSefxUl&q$)7{~<`fswUMdT+vT1^z6osQ9O>jsFT)zkspJ<)*N+|E) M7g5Q@>3jtM0MMVO_W%F@ literal 0 HcmV?d00001 diff --git a/src/test/resources/cech12/ceramicbucket/structures/dispenser_lava.nbt b/src/test/resources/cech12/ceramicbucket/structures/dispenser_lava.nbt new file mode 100644 index 0000000000000000000000000000000000000000..4654c991b3627ad2f0d423896f08fdb57666a12f GIT binary patch literal 363 zcmV-x0hIn9iwFP!000000F9K&P(57cSd94jWIFtcIn_inn5A$ znHN5>k0ESh(}l4%A%ynp`To-YDUcv^`kMj(|E>fv8P=@Hp&tom%c{v%F6|!f69jGJ z26#ULM2;2HZpRoSJQz8_2oKl5Ou2-IOM1AZhf8|6#E{8@IhR>@ob$0uoM7YxBSu`u zjP!6x4;O}W^kAm)49vN{&bfq#OL(}Xhf8|6#PdQ|73GWFutHXlQ zwmXIN-8L=R{%_XBW~}5~;8-3kg_A&;8y_VEoU1&@s zxl-7#U%FP?m8c1b#QSpJ-HDa}1*A^?U;+UDt^#t@BuS!!!zy65Ql{Fv(r=y$NLu4M zxL*lmjs)T9M2KM#3?E@wgsWr5Tr9%HBV0Vf#Uos-tLcJa0}LNwc*l(}&~Xzk9#IdE zsAtLrf!_H5bLmP3=EFu99&imYW3Fz7V|hAes^;tYgzA}c@t~`OM6alT?2WMb`*azD z^ivsv9JpM=bA?tkvRdt`Ez;t&TQ*W{m&a!evKO<{{(e01&`6Dy6&qTtrE5_;v;*(z zvZvHDH?2@egoiq^9MX5uAl#qxIWig{5U7=K&NowjSkt0C{FFSk5fwtZ7fR(mwb`S^ zHDnv19Of|dQK@Ulw6XNvCw;uK`6kKV`}o~CE~LFy7Gz~z2R$hYM}3;$kP^6k6(qjU SI_Z^A&fyoZdXUK(?v&#wR?m=2wz^UT)r=EFuT16k z*A)Wchp8Dcq|Wh>kyWM6W~*#LJe_M}DF50oe(hETqNjRQvGCbg6)B<@v(kBtWIMm9 zl5kz>iZZL_JY9Ra4KR5uH=BGFzh1ku-5jZ0yCqeQY{z##?MLXDi={HeOq(-AF~W1J zTos;dG~Ra^c(B)vPc y`S!4%5AmyGTxol*OxWt8X!V4o93RrOHYvd6vtsp0)@iRqdW$~|!e;Hg1pokp{lrNC literal 0 HcmV?d00001 diff --git a/src/test/resources/cech12/ceramicbucket/structures/fluid_pit.nbt b/src/test/resources/cech12/ceramicbucket/structures/fluid_pit.nbt new file mode 100644 index 0000000000000000000000000000000000000000..cdb4d952cd6e49781eb97a2e32c43df810275abf GIT binary patch literal 219 zcmV<103`n(iwFP!000000FBc>4}vfdhvDBH{-GG-;^sGTc6M~H=1dwD2))TqFC zLAWLiq%S-@5(>a!7Q<6A0AH6wE~N$y645P(#ra-cZn0=@b`Dux#T36+hIv%4(myfO zkfGs`h749}#w;>eY_Qm1vB5%rrl~WNVRkaiHDzJIqCX9fG&ErSHf*riU?F{LLo;@s z)J)AaWs$)mgT)4m4Ho~gmbJf&s&v0L=a?P+L$G;-QZ9|Z>ON{!3ev{QB