SPIGOT-5900: Add test for the order of Material enum entries

This commit is contained in:
Ben Woodworth 2020-07-02 09:34:13 +10:00 committed by md_5
parent 8297676c20
commit 551e770f5f
No known key found for this signature in database
GPG Key ID: E8E901AC7C617C11

View File

@ -3,9 +3,14 @@ package org.bukkit;
import static org.hamcrest.Matchers.*; import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*; import static org.junit.Assert.*;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator; import java.util.Iterator;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.StreamSupport;
import net.minecraft.server.IRegistry; import net.minecraft.server.IRegistry;
import net.minecraft.server.Item; import net.minecraft.server.Item;
import net.minecraft.server.MinecraftKey; import net.minecraft.server.MinecraftKey;
@ -43,4 +48,28 @@ public class MaterialTest extends AbstractTestingBase {
assertThat(materials, is(Collections.EMPTY_MAP)); assertThat(materials, is(Collections.EMPTY_MAP));
} }
@Test
public void verifyMaterialOrder() {
List<Material> expectedOrder = new ArrayList<>(Material.values().length);
// Start with items in the same order as IRegistry.ITEM
StreamSupport.stream(IRegistry.ITEM.spliterator(), false)
.map(CraftMagicNumbers::getMaterial)
.forEach(expectedOrder::add);
// Then non-item blocks in the same order as IRegistry.BLOCK
StreamSupport.stream(IRegistry.BLOCK.spliterator(), false)
.map(CraftMagicNumbers::getMaterial)
.filter(block -> !block.isItem())
.forEach(expectedOrder::add);
// Then legacy materials in order of ID
Arrays.stream(Material.values())
.filter(Material::isLegacy)
.sorted(Comparator.comparingInt(Material::getId))
.forEach(expectedOrder::add);
assertArrayEquals(Material.values(), expectedOrder.toArray());
}
} }