import {resource} from '@avocado/resource'; import {Latus} from '@latus/core'; import {expect} from 'chai'; describe('@avocado/topdown', () => { describe('Tiles', () => { let latus; beforeEach(async () => { latus = Latus.mock([ '@avocado/resource', ['@avocado/topdown', `${__dirname}/../src`], ]); await Promise.all(latus.invokeFlat('@latus/core/starting')); }); it("has sane defaults", async () => { const {fromResourceType: {Tiles}} = resource(latus); const tiles = new Tiles(); expect(tiles.size).to.deep.equal([0, 0]); expect(tiles.data.length).to.equal(0); }); it("gets and sets tile data", async () => { const {fromResourceType: {Tiles}} = resource(latus); const tiles = new Tiles({data: [0, 1, 2, 3], size: [2, 2]}); expect(tiles.tileAt([0, 0])).to.equal(0); expect(tiles.tileAt([1, 0])).to.equal(1); expect(tiles.tileAt([0, 1])).to.equal(2); expect(tiles.tileAt([1, 1])).to.equal(3); tiles.setTileAt([0, 0], 69); tiles.setTileAt([1, 0], 420); tiles.setTileAt([0, 1], 311); tiles.setTileAt([1, 1], 42); expect(tiles.data).to.deep.equal([69, 420, 311, 42]); }); it("can get a data slice", async () => { const {fromResourceType: {Tiles}} = resource(latus); const tiles = new Tiles( { data: [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, ], size: [4, 4], }, ); expect(tiles.slice([1, 1, 2, 2])).to.deep.equal([5, 6, 9, 10]); expect(tiles.slice([1, 0, 3, 3])).to.deep.equal([1, 2, 3, 5, 6, 7, 9, 10, 11]); expect(tiles.slice([-1, -1, 5, 5])).to.deep.equal([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]); expect(tiles.slice([1, 1, 1, 1])).to.deep.equal([5]); expect(tiles.slice([1, 1, 0, 0])).to.deep.equal([]); }); }); });