From b22c17eedaad93fc87191319766d09a9d20dd413 Mon Sep 17 00:00:00 2001 From: modmuss Date: Wed, 3 Jan 2024 23:14:42 +0000 Subject: [PATCH] Fix and test ClassInstance.addInputTags (#121) * Fix and test ClassInstance.addInputTags * Update fix --- .../fabricmc/tinyremapper/ClassInstance.java | 4 +- .../tinyremapper/ClassInstanceTest.java | 58 +++++++++++++++++++ 2 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 src/test/java/net/fabricmc/tinyremapper/ClassInstanceTest.java diff --git a/src/main/java/net/fabricmc/tinyremapper/ClassInstance.java b/src/main/java/net/fabricmc/tinyremapper/ClassInstance.java index 2017aca6..24491a11 100644 --- a/src/main/java/net/fabricmc/tinyremapper/ClassInstance.java +++ b/src/main/java/net/fabricmc/tinyremapper/ClassInstance.java @@ -112,7 +112,7 @@ void addInputTags(InputTag[] tags) { if (missingTags == 0) return; - newTags = Arrays.copyOf(tags, oldTags.length + missingTags); + newTags = Arrays.copyOf(oldTags, oldTags.length + missingTags); for (InputTag newTag : tags) { boolean found = false; @@ -129,6 +129,8 @@ void addInputTags(InputTag[] tags) { missingTags--; } } + + assert missingTags == 0; } } while (!inputTagsUpdater.compareAndSet(this, oldTags, newTags)); } diff --git a/src/test/java/net/fabricmc/tinyremapper/ClassInstanceTest.java b/src/test/java/net/fabricmc/tinyremapper/ClassInstanceTest.java new file mode 100644 index 00000000..a03947f3 --- /dev/null +++ b/src/test/java/net/fabricmc/tinyremapper/ClassInstanceTest.java @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2016, 2018, Player, asie + * Copyright (c) 2021, FabricMC + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +package net.fabricmc.tinyremapper; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.fail; + +import org.junit.jupiter.api.Test; + +public class ClassInstanceTest { + @Test + void addInputTags() { + InputTag tag1 = new InputTag(); + InputTag tag2 = new InputTag(); + + ClassInstance classInstance = new ClassInstance(null, false, new InputTag[]{}, null, new byte[]{}); + assertEquals(0, classInstance.getInputTags().length); + + classInstance.addInputTags(new InputTag[]{tag1}); + assertEquals(1, classInstance.getInputTags().length); + assertContains(tag1, classInstance.getInputTags()); + + classInstance.addInputTags(new InputTag[]{tag1}); + assertEquals(1, classInstance.getInputTags().length); + assertContains(tag1, classInstance.getInputTags()); + + classInstance.addInputTags(new InputTag[]{tag2}); + assertEquals(2, classInstance.getInputTags().length); + assertContains(tag1, classInstance.getInputTags()); + assertContains(tag2, classInstance.getInputTags()); + } + + private static void assertContains(T value, T[] array) { + for (T t : array) { + if (t == value) { + return; + } + } + + fail("Array does not contain value: " + value); + } +}