Skip to content

Commit

Permalink
chore: update tests to use mocks
Browse files Browse the repository at this point in the history
  • Loading branch information
BeksOmega committed Oct 20, 2022
1 parent 2a87585 commit d942f08
Show file tree
Hide file tree
Showing 2 changed files with 119 additions and 54 deletions.
14 changes: 14 additions & 0 deletions tests/mocha/jso_deserialization_test.js
Expand Up @@ -713,4 +713,18 @@ suite('JSO Deserialization', function() {
chai.assert.equal(block.someProperty, 'some value');
});
});

suite('Procedures', function() {
suite('invariant properties', function() {

});

suite('return types', function() {

});

suite('parameters', function() {

});
});
});
159 changes: 105 additions & 54 deletions tests/mocha/jso_serialization_test.js
Expand Up @@ -795,34 +795,119 @@ suite('JSO Serialization', function() {
});
});

suite.skip('Procedures', function() {
suite.only('Procedures', function() {
class MockProcedureModel {
constructor() {
this.id = Blockly.utils.idgenerator.genUid();
this.name = '';
this.parameters = [];
this.returnTypes = null;
this.enabled = true;
}

setName(name) {
this.name = name;
return this;
}

insertParameter(parameterModel, index) {
this.parameters.splice(index, 0, parameterModel);
return this;
}

deleteParameter(index) {
this.parameters.splice(index, 1);
return this;
}

setReturnTypes(types) {
this.returnTypes = types;
return this;
}

setEnabled(enabled) {
this.enabled = enabled;
return this;
}

getId() {
return this.id;
}

getName() {
return this.name;
}

getParameter(index) {
return this.parameters[index];
}

getParameters() {
return [...this.parameters];
}

getReturnTypes() {
return this.returnTypes;
}

getEnabled() {
return this.enabled;
}
}

class MockParameterModel {
constructor(name) {
this.id = Blockly.utils.idgenerator.genUid();
this.name = name;
this.types = [];
}

setName(name) {
this.name = name;
return this;
}

setTypes(types) {
this.types = types;
return this;
}

getName() {
return this.name;
}

getTypes() {
return this.types;
}

getId() {
return this.id;
}
}

setup(function() {
this.procedureMap = this.workspace.getProcedureMap();
});

suite('invariant properties', function() {
test('the state always has an id property', function() {
const procedureModel =
new Blockly.procedures.ObservableProcedureModel(this.workspace);
const procedureModel = new MockProcedureModel();
this.procedureMap.add(procedureModel);
const jso = Blockly.serialization.workspaces.save(this.workspace);
const procedure = jso['procedures'][0];
assertProperty(procedure, 'id', procedureModel.getId());
});

test('if the name has not been set, name is an empty string', function() {
const procedureModel =
new Blockly.procedures.ObservableProcedureModel(this.workspace);
const procedureModel = new MockProcedureModel();
this.procedureMap.add(procedureModel);
const jso = Blockly.serialization.workspaces.save(this.workspace);
const procedure = jso['procedures'][0];
assertProperty(procedure, 'name', '');
});

test('if the name has been set, name is the string', function() {
const procedureModel =
new Blockly.procedures.ObservableProcedureModel(this.workspace)
.setName('testName');
const procedureModel = new MockProcedureModel().setName('testName');
this.procedureMap.add(procedureModel);
const jso = Blockly.serialization.workspaces.save(this.workspace);
const procedure = jso['procedures'][0];
Expand All @@ -832,8 +917,7 @@ suite('JSO Serialization', function() {

suite('return types', function() {
test('if the procedure does not return, returnTypes is null', function() {
const procedureModel =
new Blockly.procedures.ObservableProcedureModel(this.workspace);
const procedureModel = new MockProcedureModel();
this.procedureMap.add(procedureModel);
const jso = Blockly.serialization.workspaces.save(this.workspace);
const procedure = jso['procedures'][0];
Expand All @@ -843,9 +927,7 @@ suite('JSO Serialization', function() {
test(
'if the procedure has no return type, returnTypes is an empty array',
function() {
const procedureModel =
new Blockly.procedures.ObservableProcedureModel(this.workspace)
.setReturnTypes([]);
const procedureModel = new MockProcedureModel().setReturnTypes([]);
this.procedureMap.add(procedureModel);
const jso = Blockly.serialization.workspaces.save(this.workspace);
const procedure = jso['procedures'][0];
Expand All @@ -855,9 +937,8 @@ suite('JSO Serialization', function() {
test(
'if the procedure has return types, returnTypes is the array',
function() {
const procedureModel =
new Blockly.procedures.ObservableProcedureModel(this.workspace)
.setReturnTypes(['a type']);
const procedureModel = new MockProcedureModel()
.setReturnTypes(['a type']);
this.procedureMap.add(procedureModel);
const jso = Blockly.serialization.workspaces.save(this.workspace);
const procedure = jso['procedures'][0];
Expand All @@ -868,24 +949,18 @@ suite('JSO Serialization', function() {
suite('parameters', function() {
suite('invariant properties', function() {
test('the state always has an id property', function() {
const parameterModel =
new Blockly.procedures.ObservableParameterModel(
this.workspace, 'testparam');
const parameterModel = new MockParameterModel('testparam');
this.procedureMap.add(
new Blockly.procedures.ObservableProcedureModel(this.workspace)
.insertParameter(parameterModel, 0));
new MockProcedureModel().insertParameter(parameterModel, 0));
const jso = Blockly.serialization.workspaces.save(this.workspace);
const parameter = jso['procedures'][0]['parameters'][0];
assertProperty(parameter, 'id', parameterModel.getId());
});

test('the state always has a name property', function() {
const parameterModel =
new Blockly.procedures.ObservableParameterModel(
this.workspace, 'testparam');
const parameterModel = new MockParameterModel('testparam');
this.procedureMap.add(
new Blockly.procedures.ObservableProcedureModel(this.workspace)
.insertParameter(parameterModel, 0));
new MockProcedureModel().insertParameter(parameterModel, 0));
const jso = Blockly.serialization.workspaces.save(this.workspace);
const parameter = jso['procedures'][0]['parameters'][0];
assertProperty(parameter, 'id', 'testparam');
Expand All @@ -896,44 +971,20 @@ suite('JSO Serialization', function() {
test(
'if the parameter has no type, there is no type property',
function() {
const parameterModel =
new Blockly.procedures.ObservableParameterModel(
this.workspace, 'testparam');
const parameterModel = new MockParameterModel('testparam');
this.procedureMap.add(
new Blockly.procedures.ObservableProcedureModel(
this.workspace
)
.insertParameter(parameterModel, 0));
new MockProcedureModel().insertParameter(parameterModel, 0));
const jso = Blockly.serialization.workspaces.save(this.workspace);
const parameter = jso['procedures'][0]['parameters'][0];
assertNoProperty(parameter, 'types');
});

test('if the parameter has types, types is an array', function() {
// We need to define a dummy class that actually fully implements the
// IParameterModel interface so that we can test serialization (which
// only relies on the interface).
class TestParameterModel extends
Blockly.procedures.ObservableParameterModel {
setTypes(types) {
this.types = types;
return this;
}

getTypes() {
return this.types;
}
}

const parameterModel =
new TestParameterModel(this.workspace, 'testparam')
.setTypes(['a type']);
new MockParameterModel('testparam').setTypes(['a type']);
this.procedureMap.add(
new Blockly.procedures.ObservableProcedureModel(this.workspace)
.insertParameter(parameterModel, 0));

new MockProcedureModel().insertParameter(parameterModel, 0));
const jso = Blockly.serialization.workspaces.save(this.workspace);

const parameter = jso['procedures'][0]['parameters'][0];
assertProperty(parameter, 'types', ['a type']);
});
Expand Down

0 comments on commit d942f08

Please sign in to comment.