Skip to content

Commit

Permalink
use features in tests (#233)
Browse files Browse the repository at this point in the history
* use features in tests

* Update ChunkColumn.test.js

* fix lint, skip bedrock 0.14 in pc.test.js
  • Loading branch information
extremeheat authored Dec 31, 2023
1 parent 39f95d8 commit 0631db2
Show file tree
Hide file tree
Showing 5 changed files with 39 additions and 36 deletions.
20 changes: 13 additions & 7 deletions test/ChunkColumn.test.js
Original file line number Diff line number Diff line change
@@ -1,26 +1,32 @@
/* eslint-env mocha */

const versions = ['bedrock_1.16.220', 'bedrock_1.17.40', 'bedrock_1.18.0', '1.8', '1.9', '1.10', '1.11', '1.12', '1.13.2', '1.14.4', '1.15.2', '1.16.1', '1.17', '1.18']
const { allVersions } = require('./versions')
const constants = require('../src/pc/common/constants')
const { Vec3 } = require('vec3')
const assert = require('assert')
const expect = require('expect').default

for (const version of versions) {
for (const version of allVersions) {
const registry = require('prismarine-registry')(version)
const Block = require('prismarine-block')(registry)
const ChunkColumn = require('prismarine-chunk')(registry)

// TODO: fix 2 bugs: node-mc-data feature checks fail on bedrock 0.14, is missing some functions and bedrock v1.0 chunk impl fails here
// let chunkHeight
const chunkHeight = constants.CHUNK_HEIGHT
if (version === 'bedrock_0.14' || version === 'bedrock_1.0') continue

describe('ChunkColumn on ' + version, () => {
it('use function to initialize the chunk column', () => {
const stateId = 20
const block = Block.fromStateId(stateId, 1)
assert(block.stateId === stateId)
const column = new ChunkColumn()
column.initialize(() => { return block })

const p = new Vec3(0, 0, 0)
for (p.x = 0; p.x < constants.SECTION_WIDTH; p.x++) {
for (p.y = 0; p.y < constants.CHUNK_HEIGHT; p.y++) {
for (p.y = 0; p.y < chunkHeight; p.y++) {
for (p.z = 0; p.z < constants.SECTION_WIDTH; p.z++) {
if (column.getBlock(p).stateId !== stateId) {
throw new Error('id mismatch: expected ' + stateId + ' got ' + column.getBlock(p).stateId)
Expand All @@ -35,7 +41,7 @@ for (const version of versions) {

let different = 0
const p = new Vec3(0, 0, 0)
for (p.y = 0; p.y < constants.CHUNK_HEIGHT; p.y++) {
for (p.y = 0; p.y < chunkHeight; p.y++) {
for (p.z = 0; p.z < constants.SECTION_WIDTH; p.z++) {
for (p.x = 0; p.x < constants.SECTION_WIDTH; p.x++) {
// 0 cannot be assumed as air, bedrock assigns stateIds alphabetically
Expand All @@ -61,7 +67,7 @@ for (const version of versions) {
it('Defaults to all blocks being air', function () {
const chunk = new ChunkColumn()
assert.strictEqual(registry.blocksByName.air.id, chunk.getBlock(new Vec3(0, 0, 0)).type)
assert.strictEqual(registry.blocksByName.air.id, chunk.getBlock(new Vec3(15, constants.CHUNK_HEIGHT - 1, 15)).type)
assert.strictEqual(registry.blocksByName.air.id, chunk.getBlock(new Vec3(15, chunkHeight - 1, 15)).type)
})

it('Out of bounds blocks being air', function () {
Expand Down Expand Up @@ -97,11 +103,11 @@ for (const version of versions) {

// Everything should have a stateId
{
const birchPlanksId = registry.blocksByName.planks?.defaultState || registry.blocksByName.birch_planks.defaultState
const birchPlanksId = registry.blocksByName.planks?.defaultState || registry.blocksByName.wood_planks?.defaultState || registry.blocksByName.birch_planks.defaultState
chunk.setBlock(new Vec3(0, 0, 0), Block.fromStateId(birchPlanksId))
assert.strictEqual(birchPlanksId, chunk.getBlock(new Vec3(0, 0, 0)).stateId)

const ironBlockId = registry.blocksByName.iron_block.defaultState
const ironBlockId = registry.blocksByName.iron_block?.defaultState || registry.blocksByName.block_of_iron.defaultState
chunk.setBlock(new Vec3(0, 37, 0), Block.fromStateId(ironBlockId))
assert.strictEqual(ironBlockId, chunk.getBlock(new Vec3(0, 37, 0)).stateId)
}
Expand Down
2 changes: 1 addition & 1 deletion test/ChunkSection.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ const ChunkSection = require('../src/pc/1.13/ChunkSection')
const constants = require('../src/pc/common/constants')
const assert = require('assert')

describe('ChunkSection', () => {
describe('pc 1.13 ChunkSection', () => {
it('insert into middle of palette', () => {
const section = new ChunkSection()
section.setBlock(new Vec3(0, 0, 0), 14)
Expand Down
14 changes: 7 additions & 7 deletions test/pc.test.js
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
/* eslint-env mocha */
const { Vec3 } = require('vec3')
const assert = require('assert')
const { pcVersions } = require('./versions')

const versions = ['1.8', '1.9', '1.10', '1.11', '1.12', '1.13.2', '1.14.4', '1.15.2', '1.16.1', '1.17', '1.18', '1.19', '1.20']
for (const version of pcVersions) {
const registry = require('prismarine-registry')(version)
if (!registry.supportFeature('usesPalettedChunks')) {
continue
}
if (version === 'bedrock_0.14') continue // todo: remove after https://github.com/PrismarineJS/minecraft-data/pull/769

for (const version of versions) {
describe('pc section tests ' + version, () => {
const registry = require('prismarine-registry')(version)
const ChunkColumn = require('prismarine-chunk')(registry)

if (registry.version['<']('1.9')) {
return
}

it('compaction works', () => {
const column = new ChunkColumn()
const fakeBlocks = [1, 2, 3]
Expand Down
31 changes: 10 additions & 21 deletions test/test.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,32 +9,21 @@ const chunkLoader = require('../index')
const SingleValueContainer = require('../src/pc/common/PaletteContainer').SingleValueContainer
const constants = require('../src/pc/common/constants')
const { performance } = require('perf_hooks')
const { pcVersions, pcCycleTests } = require('./versions')
const expect = require('expect').default

const versions = ['bedrock_0.14', 'bedrock_1.0', '1.8', '1.9', '1.10', '1.11', '1.12', '1.13.2', '1.14.4', '1.15.2', '1.16.1', '1.17', '1.18', '1.19', '1.20']
const cycleTests = ['1.8', '1.9', '1.10', '1.11', '1.12', '1.13.2', '1.14.4', '1.15.2', '1.16.1', '1.17', '1.18', '1.19', '1.20']

versions.forEach((version) => describe(`Chunk implementation for minecraft ${version}`, () => {
pcVersions.forEach((version) => describe(`Chunk implementation for minecraft ${version}`, () => {
const registry = require('prismarine-registry')(version)
const Chunk = chunkLoader(registry)
const Block = prismarineBlockLoader(registry)

const isPostFlattening = version.startsWith('1.13') || version.startsWith('1.14') ||
version.startsWith('1.15') || version.startsWith('1.16') || version.startsWith('1.17') ||
version.startsWith('1.18') || version.startsWith('1.19') || version.startsWith('1.20')

const serializesLightingDataSeparately = version.startsWith('1.14') || version.startsWith('1.15') ||
version.startsWith('1.16') || version.startsWith('1.17') || version.startsWith('1.18') ||
version.startsWith('1.19') || version.startsWith('1.20')

const newLightingDataFormat = version.startsWith('1.17') || version.startsWith('1.18') || version.startsWith('1.19') ||
version.startsWith('1.20')

const serializesBiomesSeparately = version.startsWith('1.15') || version.startsWith('1.16') ||
version.startsWith('1.17')

const unifiedPaletteFormat = version.startsWith('1.18') || version.startsWith('1.19') || version.startsWith('1.20')
const tallWorld = version.startsWith('1.18') || version.startsWith('1.19') || version.startsWith('1.20')
// TODO: remove these in favor of direct registry.feature calls
const isPostFlattening = registry.supportFeature('usesBlockStates')
const serializesLightingDataSeparately = registry.supportFeature('lightSentSeparately')
const newLightingDataFormat = registry.supportFeature('newLightingDataFormat')
const serializesBiomesSeparately = registry.supportFeature('biomesSentSeparately')
const tallWorld = registry.supportFeature('tallWorld')
const unifiedPaletteFormat = tallWorld

if (version === '1.8') {
it('Handles {skylightSent: false}', () => {
Expand Down Expand Up @@ -220,7 +209,7 @@ versions.forEach((version) => describe(`Chunk implementation for minecraft ${ver
}
}

if (cycleTests.includes(version)) {
if (pcCycleTests.includes(version)) {
const folder = path.join(__dirname, version)
const files = fs.readdirSync(folder)
const chunkFiles = files.filter(file => file.includes('.dump') && !file.includes('light'))
Expand Down
8 changes: 8 additions & 0 deletions test/versions.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
const fs = require('fs')
const pcVersions = ['bedrock_0.14', 'bedrock_1.0', '1.8', '1.9', '1.10', '1.11', '1.12', '1.13.2', '1.14.4', '1.15.2', '1.16.1', '1.17', '1.18', '1.19', '1.20']
const bedrockVersions = ['bedrock_1.16.220', 'bedrock_1.17.40', 'bedrock_1.18.0']
const allVersions = [...bedrockVersions, ...pcVersions]

const pcCycleTests = pcVersions.filter(v => fs.existsSync(v))
const bedrockCycleTests = bedrockVersions.filter(v => fs.existsSync(v))
module.exports = { pcVersions, pcCycleTests, bedrockVersions, bedrockCycleTests, allVersions }

0 comments on commit 0631db2

Please sign in to comment.