Skip to content

Commit 0631db2

Browse files
authored
use features in tests (#233)
* use features in tests * Update ChunkColumn.test.js * fix lint, skip bedrock 0.14 in pc.test.js
1 parent 39f95d8 commit 0631db2

File tree

5 files changed

+39
-36
lines changed

5 files changed

+39
-36
lines changed

test/ChunkColumn.test.js

+13-7
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,32 @@
11
/* eslint-env mocha */
22

3-
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']
3+
const { allVersions } = require('./versions')
44
const constants = require('../src/pc/common/constants')
55
const { Vec3 } = require('vec3')
66
const assert = require('assert')
77
const expect = require('expect').default
88

9-
for (const version of versions) {
9+
for (const version of allVersions) {
1010
const registry = require('prismarine-registry')(version)
1111
const Block = require('prismarine-block')(registry)
1212
const ChunkColumn = require('prismarine-chunk')(registry)
1313

14+
// 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
15+
// let chunkHeight
16+
const chunkHeight = constants.CHUNK_HEIGHT
17+
if (version === 'bedrock_0.14' || version === 'bedrock_1.0') continue
18+
1419
describe('ChunkColumn on ' + version, () => {
1520
it('use function to initialize the chunk column', () => {
1621
const stateId = 20
1722
const block = Block.fromStateId(stateId, 1)
23+
assert(block.stateId === stateId)
1824
const column = new ChunkColumn()
1925
column.initialize(() => { return block })
2026

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

3642
let different = 0
3743
const p = new Vec3(0, 0, 0)
38-
for (p.y = 0; p.y < constants.CHUNK_HEIGHT; p.y++) {
44+
for (p.y = 0; p.y < chunkHeight; p.y++) {
3945
for (p.z = 0; p.z < constants.SECTION_WIDTH; p.z++) {
4046
for (p.x = 0; p.x < constants.SECTION_WIDTH; p.x++) {
4147
// 0 cannot be assumed as air, bedrock assigns stateIds alphabetically
@@ -61,7 +67,7 @@ for (const version of versions) {
6167
it('Defaults to all blocks being air', function () {
6268
const chunk = new ChunkColumn()
6369
assert.strictEqual(registry.blocksByName.air.id, chunk.getBlock(new Vec3(0, 0, 0)).type)
64-
assert.strictEqual(registry.blocksByName.air.id, chunk.getBlock(new Vec3(15, constants.CHUNK_HEIGHT - 1, 15)).type)
70+
assert.strictEqual(registry.blocksByName.air.id, chunk.getBlock(new Vec3(15, chunkHeight - 1, 15)).type)
6571
})
6672

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

98104
// Everything should have a stateId
99105
{
100-
const birchPlanksId = registry.blocksByName.planks?.defaultState || registry.blocksByName.birch_planks.defaultState
106+
const birchPlanksId = registry.blocksByName.planks?.defaultState || registry.blocksByName.wood_planks?.defaultState || registry.blocksByName.birch_planks.defaultState
101107
chunk.setBlock(new Vec3(0, 0, 0), Block.fromStateId(birchPlanksId))
102108
assert.strictEqual(birchPlanksId, chunk.getBlock(new Vec3(0, 0, 0)).stateId)
103109

104-
const ironBlockId = registry.blocksByName.iron_block.defaultState
110+
const ironBlockId = registry.blocksByName.iron_block?.defaultState || registry.blocksByName.block_of_iron.defaultState
105111
chunk.setBlock(new Vec3(0, 37, 0), Block.fromStateId(ironBlockId))
106112
assert.strictEqual(ironBlockId, chunk.getBlock(new Vec3(0, 37, 0)).stateId)
107113
}

test/ChunkSection.test.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ const ChunkSection = require('../src/pc/1.13/ChunkSection')
55
const constants = require('../src/pc/common/constants')
66
const assert = require('assert')
77

8-
describe('ChunkSection', () => {
8+
describe('pc 1.13 ChunkSection', () => {
99
it('insert into middle of palette', () => {
1010
const section = new ChunkSection()
1111
section.setBlock(new Vec3(0, 0, 0), 14)

test/pc.test.js

+7-7
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
/* eslint-env mocha */
22
const { Vec3 } = require('vec3')
33
const assert = require('assert')
4+
const { pcVersions } = require('./versions')
45

5-
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']
6+
for (const version of pcVersions) {
7+
const registry = require('prismarine-registry')(version)
8+
if (!registry.supportFeature('usesPalettedChunks')) {
9+
continue
10+
}
11+
if (version === 'bedrock_0.14') continue // todo: remove after https://github.com/PrismarineJS/minecraft-data/pull/769
612

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

12-
if (registry.version['<']('1.9')) {
13-
return
14-
}
15-
1616
it('compaction works', () => {
1717
const column = new ChunkColumn()
1818
const fakeBlocks = [1, 2, 3]

test/test.js

+10-21
Original file line numberDiff line numberDiff line change
@@ -9,32 +9,21 @@ const chunkLoader = require('../index')
99
const SingleValueContainer = require('../src/pc/common/PaletteContainer').SingleValueContainer
1010
const constants = require('../src/pc/common/constants')
1111
const { performance } = require('perf_hooks')
12+
const { pcVersions, pcCycleTests } = require('./versions')
1213
const expect = require('expect').default
1314

14-
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']
15-
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']
16-
17-
versions.forEach((version) => describe(`Chunk implementation for minecraft ${version}`, () => {
15+
pcVersions.forEach((version) => describe(`Chunk implementation for minecraft ${version}`, () => {
1816
const registry = require('prismarine-registry')(version)
1917
const Chunk = chunkLoader(registry)
2018
const Block = prismarineBlockLoader(registry)
2119

22-
const isPostFlattening = version.startsWith('1.13') || version.startsWith('1.14') ||
23-
version.startsWith('1.15') || version.startsWith('1.16') || version.startsWith('1.17') ||
24-
version.startsWith('1.18') || version.startsWith('1.19') || version.startsWith('1.20')
25-
26-
const serializesLightingDataSeparately = version.startsWith('1.14') || version.startsWith('1.15') ||
27-
version.startsWith('1.16') || version.startsWith('1.17') || version.startsWith('1.18') ||
28-
version.startsWith('1.19') || version.startsWith('1.20')
29-
30-
const newLightingDataFormat = version.startsWith('1.17') || version.startsWith('1.18') || version.startsWith('1.19') ||
31-
version.startsWith('1.20')
32-
33-
const serializesBiomesSeparately = version.startsWith('1.15') || version.startsWith('1.16') ||
34-
version.startsWith('1.17')
35-
36-
const unifiedPaletteFormat = version.startsWith('1.18') || version.startsWith('1.19') || version.startsWith('1.20')
37-
const tallWorld = version.startsWith('1.18') || version.startsWith('1.19') || version.startsWith('1.20')
20+
// TODO: remove these in favor of direct registry.feature calls
21+
const isPostFlattening = registry.supportFeature('usesBlockStates')
22+
const serializesLightingDataSeparately = registry.supportFeature('lightSentSeparately')
23+
const newLightingDataFormat = registry.supportFeature('newLightingDataFormat')
24+
const serializesBiomesSeparately = registry.supportFeature('biomesSentSeparately')
25+
const tallWorld = registry.supportFeature('tallWorld')
26+
const unifiedPaletteFormat = tallWorld
3827

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

223-
if (cycleTests.includes(version)) {
212+
if (pcCycleTests.includes(version)) {
224213
const folder = path.join(__dirname, version)
225214
const files = fs.readdirSync(folder)
226215
const chunkFiles = files.filter(file => file.includes('.dump') && !file.includes('light'))

test/versions.js

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
const fs = require('fs')
2+
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']
3+
const bedrockVersions = ['bedrock_1.16.220', 'bedrock_1.17.40', 'bedrock_1.18.0']
4+
const allVersions = [...bedrockVersions, ...pcVersions]
5+
6+
const pcCycleTests = pcVersions.filter(v => fs.existsSync(v))
7+
const bedrockCycleTests = bedrockVersions.filter(v => fs.existsSync(v))
8+
module.exports = { pcVersions, pcCycleTests, bedrockVersions, bedrockCycleTests, allVersions }

0 commit comments

Comments
 (0)