UNPKG

rpg-table-randomizer

Version:

Module for random tables for use in roleplaying games

282 lines (256 loc) 8.82 kB
'use strict'; import { describe, it } from 'mocha'; import { expect } from 'chai'; import DisplayOptions from '../src/DisplayOptions.js'; import RandomTableResult from '../src/RandomTableResult.js'; import RandomTableResultSet from '../src/RandomTableResultSet.js'; import TableErrorResult from '../src/TableErrorResult.js'; describe('RandomTableResultSet', function () { it('should unserialize an object to the class props', function () { const result1 = { table: 'default', result: 'blue' }; const result2 = { table: 'Error', result: 'Ran out of room', className: 'TableErrorResult' }; const result3 = { table: 'hue', result: 'Cerulean', desc: 'in some place', className: 'RandomTableResult' }; const displayOptionsObj = { default: { table: 'default', hide_table: true, className: 'DisplayOptions' }, hue: new DisplayOptions({ table: 'hue', hide_table: false }) }; const resultSet = new RandomTableResultSet({ key: 'tkey', title: 'colors', results: [ result1, result2, result3 ], displayOptions: displayOptionsObj }); expect(resultSet.key).to.equal('tkey'); expect(resultSet.title).to.equal('colors'); expect(resultSet.results[0]).to.be.instanceOf(RandomTableResult); expect(resultSet.results[1]).to.be.instanceOf(TableErrorResult); expect(resultSet.results[2]).to.be.instanceOf(RandomTableResult); expect(resultSet.displayOptions.get('default')).to.be.instanceOf(DisplayOptions); expect(resultSet.displayOptions.get('hue')).to.be.instanceOf(DisplayOptions); }); it('should return results for specific tables', function () { const result1 = new RandomTableResult({ table: 'default', result: 'blue' }); const result2 = new RandomTableResult({ table: 'intensity', result: 'dark', desc: 'Powerful stuff' }); const result3 = new TableErrorResult({ table: 'Error', result: 'Ran out of room' }); const displayOptionsMap = new Map(); const resultSet = new RandomTableResultSet({ title: 'colors', results: [ result1, result2, result3 ], displayOptions: displayOptionsMap }); const actual = resultSet.findResultByTable('intensity'); expect(actual).to.equal(result2); expect(resultSet.findResultByTable('foo')).to.equal(null); }); it('should output empty string for no results', function () { const resultSet = new RandomTableResultSet({}); expect(resultSet.niceString()).to.equal(''); }); it('should output a string from the set with no display options', function () { const result1 = new RandomTableResult({ table: 'default', result: 'blue' }); const result2 = new RandomTableResult({ table: 'intensity', result: 'dark', desc: 'Powerful stuff' }); const result3 = new TableErrorResult({ table: 'Error', result: 'Ran out of room' }); const displayOptionsMap = new Map(); const resultSet = new RandomTableResultSet({ title: 'colors', results: [ result1, result2, result3 ], displayOptions: displayOptionsMap }); expect(resultSet.toString()).to.equal('Blue\nIntensity: Dark\nPowerful stuff\nError: Ran out of room'); }); it('should output a string from the set with display options hide_table', function () { const opt1 = new DisplayOptions({ table: 'default', hide_table: true, hide_result: false, hide_desc: true }); const result1 = new RandomTableResult({ table: 'default', result: 'blue', desc: 'the color' }); const opt2 = new DisplayOptions({ table: 'intensity', hide_table: false, hide_result: false, hide_desc: false }); const result2 = new RandomTableResult({ table: 'intensity', result: 'dark', desc: 'Powerful stuff' }); const displayOptionsMap = new Map(); displayOptionsMap.set('default', opt1); displayOptionsMap.set('intensity', opt2); const resultSet = new RandomTableResultSet({ title: 'colors', results: [ result1, result2 ], displayOptions: displayOptionsMap }); expect(resultSet.toString()).to.equal('Blue\nIntensity: Dark\n(Powerful stuff)'); }); it('should output a string from the set with display options hide_result', function () { const opt1 = new DisplayOptions({ table: 'default', hide_table: false, hide_result: false, hide_desc: true }); const result1 = new RandomTableResult({ table: 'default', result: 'blue', desc: 'the color' }); const opt2 = new DisplayOptions({ table: 'intensity', hide_table: false, hide_result: true, hide_desc: true }); const result2 = new RandomTableResult({ table: 'intensity', result: 'dark', desc: 'Powerful stuff' }); const displayOptionsMap = new Map(); displayOptionsMap.set('default', opt1); displayOptionsMap.set('intensity', opt2); const resultSet = new RandomTableResultSet({ title: 'colors', results: [ result1, result2 ], displayOptions: displayOptionsMap }); expect(resultSet.toString()).to.equal('Default: Blue\nIntensity:'); }); it('should output a string from the set with display options hide_desc', function () { const opt1 = new DisplayOptions({ table: 'default', hide_table: false, hide_result: false, hide_desc: false }); const result1 = new RandomTableResult({ table: 'default', result: 'blue', desc: 'the color' }); const opt2 = new DisplayOptions({ table: 'intensity', hide_table: false, hide_result: false, hide_desc: true }); const result2 = new RandomTableResult({ table: 'intensity', result: 'dark', desc: 'Powerful stuff' }); const displayOptionsMap = new Map(); displayOptionsMap.set('default', opt1); displayOptionsMap.set('intensity', opt2); const resultSet = new RandomTableResultSet({ title: 'colors', results: [ result1, result2 ], displayOptions: displayOptionsMap }); expect(resultSet.toString()).to.equal('Default: Blue\n(the color)\nIntensity: Dark'); }); it('should output a string from the set with the simple option', function () { const opt1 = new DisplayOptions({ table: 'default', hide_table: false, hide_result: false, hide_desc: false }); const result1 = new RandomTableResult({ table: 'default', result: 'blue', desc: 'the color' }); const opt2 = new DisplayOptions({ table: 'intensity', hide_table: false, hide_result: false, hide_desc: true }); const result2 = new RandomTableResult({ table: 'intensity', result: 'dark', desc: 'Powerful stuff' }); const displayOptionsMap = new Map(); displayOptionsMap.set('default', opt1); displayOptionsMap.set('intensity', opt2); const resultSet = new RandomTableResultSet({ title: 'colors', results: [ result1, result2 ], displayOptions: displayOptionsMap }); expect(resultSet.niceString(true)).to.equal('blue dark'); }); });