diff --git a/CHANGELOG.md b/CHANGELOG.md
index e23b748..8ecaaac 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,6 +6,10 @@ All notable changes to [@bpmn-io/variable-resolver](https://github.com/bpmn-io/v
___Note:__ Yet to be released changes appear here._
+## 1.3.6
+
+* `FIX`: always return an instance of variables context in `getResultContext` ([#58](https://github.com/bpmn-io/variable-resolver/pull/58))
+
## 1.3.5
* `FIX`: do not try to find unresolved variables of a broken expression ([#50](https://github.com/bpmn-io/variable-resolver/issues/50))
diff --git a/lib/zeebe/util/feelUtility.js b/lib/zeebe/util/feelUtility.js
index b42ecc5..c647576 100644
--- a/lib/zeebe/util/feelUtility.js
+++ b/lib/zeebe/util/feelUtility.js
@@ -129,7 +129,7 @@ export function getResultContext(expression, variables = {}) {
// This is a hack to get the latest variables from the context tracker
// lezer does not automatically annotate the parse tree with the context
- let latestVariables = null;
+ let latestVariables = contextTracker.start;
const customContextTracker = new ContextTracker({
start: contextTracker.start,
diff --git a/test/fixtures/zeebe/immediately-broken-expression.bpmn b/test/fixtures/zeebe/immediately-broken-expression.bpmn
new file mode 100644
index 0000000..f759a6b
--- /dev/null
+++ b/test/fixtures/zeebe/immediately-broken-expression.bpmn
@@ -0,0 +1,33 @@
+
+
+
+
+ Flow_1imcl82
+
+
+
+
+
+
+
+
+ Flow_1imcl82
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/test/fixtures/zeebe/long-broken-expression.bpmn b/test/fixtures/zeebe/long-broken-expression.bpmn
index fadd8da..ebeca2c 100644
--- a/test/fixtures/zeebe/long-broken-expression.bpmn
+++ b/test/fixtures/zeebe/long-broken-expression.bpmn
@@ -1,7 +1,7 @@
-
+
@@ -10,14 +10,14 @@
Flow_1imcl82
-
+
Flow_1imcl82
-
+
diff --git a/test/spec/zeebe/ZeebeVariableResolver.spec.js b/test/spec/zeebe/ZeebeVariableResolver.spec.js
index 60f0de5..3bcaf3a 100644
--- a/test/spec/zeebe/ZeebeVariableResolver.spec.js
+++ b/test/spec/zeebe/ZeebeVariableResolver.spec.js
@@ -14,6 +14,7 @@ import complexXML from 'test/fixtures/zeebe/complex.bpmn';
import connectorsXML from 'test/fixtures/zeebe/connectors.bpmn';
import ioMappingsXML from 'test/fixtures/zeebe/ioMappings.bpmn';
import longBrokenExpressionXML from 'test/fixtures/zeebe/long-broken-expression.bpmn';
+import immediatelyBrokenExpressionXML from 'test/fixtures/zeebe/immediately-broken-expression.bpmn';
import VariableProvider from 'lib/VariableProvider';
import { getInputOutput } from '../../../lib/base/util/ExtensionElementsUtil';
@@ -1043,32 +1044,65 @@ describe('ZeebeVariableResolver', function() {
describe('parsing', function() {
- beforeEach(bootstrapModeler(longBrokenExpressionXML, {
- container,
- additionalModules: [
- ZeebeVariableResolverModule
- ],
- moddleExtensions: {
- zeebe: ZeebeModdle
- }
- }));
+ describe('long broken expression', function() {
+ beforeEach(bootstrapModeler(longBrokenExpressionXML, {
+ container,
+ additionalModules: [
+ ZeebeVariableResolverModule
+ ],
+ moddleExtensions: {
+ zeebe: ZeebeModdle
+ }
+ }));
- it('should NOT error on a long broken expression', inject(async function(elementRegistry, variableResolver) {
- // given
- const task = elementRegistry.get('Task_1');
- const bo = getBusinessObject(task);
- const input = getInputOutput(bo).inputParameters[1];
+ it('should NOT error on a long broken expression', inject(async function(elementRegistry, variableResolver) {
- // when
- const variables = await variableResolver.getVariablesForElement(bo, input);
+ // given
+ const task = elementRegistry.get('TASK_WITH_LONG_BROKEN_EXPRESSION');
+ const bo = getBusinessObject(task);
- // then
- expect(variables).to.variableEqual([
- { name: 'target' }
- ]);
- }));
+ // when
+ const variables = await variableResolver.getVariablesForElement(bo);
+
+ // then
+ expect(variables).to.variableEqual([
+ { name: 'target' }
+ ]);
+ }));
+
+ });
+
+
+ describe('immediately broken expression', function() {
+
+ beforeEach(bootstrapModeler(immediatelyBrokenExpressionXML, {
+ container,
+ additionalModules: [
+ ZeebeVariableResolverModule
+ ],
+ moddleExtensions: {
+ zeebe: ZeebeModdle
+ }
+ }));
+
+
+ it('should NOT error on an immediate syntax error', inject(async function(elementRegistry, variableResolver) {
+
+ // given
+ const task = elementRegistry.get('TASK_WITH_IMMEDIATELY_BROKEN_EXPRESSION');
+ const bo = getBusinessObject(task);
+
+ // when
+ const variables = await variableResolver.getVariablesForElement(bo);
+
+ // then
+ expect(variables).to.variableEqual([
+ { name: 'target' }
+ ]);
+ }));
+ });
});
});