diff --git a/test/unit/blocks.js b/test/unit/blocks.js index 09690bf9a..ead221b24 100644 --- a/test/unit/blocks.js +++ b/test/unit/blocks.js @@ -16,10 +16,221 @@ test('spec', function (t) { t.type(b.moveBlock, 'function'); t.type(b.changeBlock, 'function'); t.type(b.deleteBlock, 'function'); + t.type(b.getBlock, 'function'); + t.type(b.getStacks, 'function'); + t.type(b.getNextBlock, 'function'); + t.type(b.getSubstack, 'function'); + t.type(b.getOpcode, 'function'); + t.end(); }); +// Getter tests +test('getBlock', function (t) { + var b = new Blocks(); + b.createBlock({ + id: 'foo', + opcode: 'TEST_BLOCK', + next: null, + fields: {}, + inputs: {}, + topLevel: true + }); + var block = b.getBlock('foo'); + t.type(block, 'object'); + var notBlock = b.getBlock('?'); + t.type(notBlock, 'undefined'); + t.end(); +}); + +test('getStacks', function (t) { + var b = new Blocks(); + var stacks = b.getStacks(); + t.type(stacks, 'object'); + t.equals(stacks.length, 0); + // Create two top-level blocks and one not. + b.createBlock({ + id: 'foo', + opcode: 'TEST_BLOCK', + next: null, + fields: {}, + inputs: {}, + topLevel: true + }); + b.createBlock({ + id: 'foo2', + opcode: 'TEST_BLOCK', + next: null, + fields: {}, + inputs: {}, + topLevel: true + }); + b.createBlock({ + id: 'foo3', + opcode: 'TEST_BLOCK', + next: null, + fields: {}, + inputs: {}, + topLevel: false + }); + + stacks = b.getStacks(); + t.type(stacks, 'object'); + t.equals(stacks.length, 2); + t.ok(stacks.indexOf('foo') > -1); + t.ok(stacks.indexOf('foo2') > -1); + t.equals(stacks.indexOf('foo3'), -1); + t.end(); + +}); + +test('getNextBlock', function (t) { + var b = new Blocks(); + b.createBlock({ + id: 'foo', + opcode: 'TEST_BLOCK', + next: null, + fields: {}, + inputs: {}, + topLevel: true + }); + + var next = b.getNextBlock('foo'); + t.equals(next, null); + + // Add a block with "foo" as its next. + b.createBlock({ + id: 'foo2', + opcode: 'TEST_BLOCK', + next: 'foo', + fields: {}, + inputs: {}, + topLevel: true + }); + + next = b.getNextBlock('foo2'); + t.equals(next, 'foo'); + + // Block that doesn't exist. + var noBlock = b.getNextBlock('?'); + t.equals(noBlock, null); + + t.end(); +}); + +test('getSubstack', function (t) { + var b = new Blocks(); + // Single substack + b.createBlock({ + id: 'foo', + opcode: 'TEST_BLOCK', + next: null, + fields: {}, + inputs: { + SUBSTACK: { + name: 'SUBSTACK', + block: 'foo2' + } + }, + topLevel: true + }); + b.createBlock({ + id: 'foo2', + opcode: 'TEST_BLOCK', + next: null, + fields: {}, + inputs: {}, + topLevel: false + }); + + var substack = b.getSubstack('foo'); + t.equals(substack, 'foo2'); + + var notSubstack = b.getSubstack('?'); + t.equals(notSubstack, null); + + t.end(); +}); + +test('getSubstack2', function (t) { + var b = new Blocks(); + // Second substack + b.createBlock({ + id: 'foo', + opcode: 'TEST_BLOCK', + next: null, + fields: {}, + inputs: { + SUBSTACK: { + name: 'SUBSTACK', + block: 'foo2' + }, + SUBSTACK2: { + name: 'SUBSTACK2', + block: 'foo3' + } + }, + topLevel: true + }); + b.createBlock({ + id: 'foo2', + opcode: 'TEST_BLOCK', + next: null, + fields: {}, + inputs: {}, + topLevel: false + }); + b.createBlock({ + id: 'foo3', + opcode: 'TEST_BLOCK', + next: null, + fields: {}, + inputs: {}, + topLevel: false + }); + + var substack1 = b.getSubstack('foo', 1); + var substack2 = b.getSubstack('foo', 2); + t.equals(substack1, 'foo2'); + t.equals(substack2, 'foo3'); + + t.end(); +}); + +test('getSubstack with none', function (t) { + var b = new Blocks(); + b.createBlock({ + id: 'foo', + opcode: 'TEST_BLOCK', + next: null, + fields: {}, + inputs: {}, + topLevel: true + }); + var noSubstack = b.getSubstack('foo'); + t.equals(noSubstack, null); + t.end(); +}); + +test('getOpcode', function (t) { + var b = new Blocks(); + b.createBlock({ + id: 'foo', + opcode: 'TEST_BLOCK', + next: null, + fields: {}, + inputs: {}, + topLevel: true + }); + var opcode = b.getOpcode('foo'); + t.equals(opcode, 'TEST_BLOCK'); + var notOpcode = b.getOpcode('?'); + t.equals(notOpcode, null); + t.end(); +}); + +// Block events tests test('create', function (t) { var b = new Blocks(); b.createBlock({