import { test, expect } from 'vitest'
import { TiledParser } from "../src/parser/parser"
import { MapClass } from '../src'
const xmlWithTileProperties = `
`
const tileset = `
`
function getMap(xml: string): MapClass {
const parser = new TiledParser(xml)
const mapData = parser.parseMap()
mapData.tilesets = mapData.tilesets.map(source => {
const parserTileset = new TiledParser(tileset)
const tilesetData = parserTileset.parseTileset()
return {
...source,
...tilesetData
}
})
return new MapClass(mapData)
}
test('Tile properties should be preserved after creation', () => {
const map = getMap(xmlWithTileProperties)
// Get tile at position (0, 0) which should be tile ID 1 (firstgid=1, so tile 0 from tileset)
const tileInfo = map.getTileByPosition(0, 0)
const [tile] = tileInfo.tiles
expect(tile).toBeDefined()
expect(tile.properties).toBeDefined()
expect(Object.keys(tile.properties)).toHaveLength(2)
expect(tile.getProperty('collision')).toBe(true)
expect(tile.getProperty('damage')).toBe(10)
})
test('Multiple tiles should have their own properties', () => {
const map = getMap(xmlWithTileProperties)
// Get tile at position (32, 0) which should be tile ID 2 (tile 1 from tileset)
const tileInfo = map.getTileByPosition(32, 0)
const [tile] = tileInfo.tiles
expect(tile).toBeDefined()
expect(tile.properties).toBeDefined()
expect(Object.keys(tile.properties)).toHaveLength(2)
expect(tile.getProperty('collision')).toBe(false)
expect(tile.getProperty('heal')).toBe(5)
})
test('Tiles without properties should have empty properties object', () => {
const map = getMap(xmlWithTileProperties)
// Get tile at position (0, 32) which should be tile ID 3 (tile 2 from tileset, no properties defined)
const tileInfo = map.getTileByPosition(0, 32)
const [tile] = tileInfo.tiles
expect(tile).toBeDefined()
expect(tile.properties).toBeDefined()
expect(Object.keys(tile.properties)).toHaveLength(0)
})