Skip to content

Commit 4048248

Browse files
authored
Add support for same braces in expression parsing and corresponding tests (#10991)
1 parent 9b313ea commit 4048248

File tree

2 files changed

+29
-0
lines changed

2 files changed

+29
-0
lines changed

packages/survey-core/src/conditionsParser.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,14 @@ export class ConditionsParser {
2222
const start = settings.expressionVariableDelimiters.start;
2323
const end = settings.expressionVariableDelimiters.end;
2424
if (start === "{" && end === "}") return text;
25+
if (start === end) {
26+
const parts = text.split(start);
27+
let result = parts[0];
28+
for (let i = 1; i < parts.length; i++) {
29+
result += (i % 2 === 1 ? "{" : "}") + parts[i];
30+
}
31+
return result;
32+
}
2533
return text.split(start).join("{").split(end).join("}");
2634
}
2735

packages/survey-core/tests/doubleBracesTests.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -363,3 +363,24 @@ QUnit.test("Survey: calculatedValues with double braces", function (assert) {
363363
resetBraces();
364364
}
365365
});
366+
367+
QUnit.test("Survey: calculatedValues with same braces", function (assert) {
368+
settings.expressionVariableDelimiters = { start: "%", end: "%" };
369+
try {
370+
var survey = new SurveyModel({
371+
calculatedValues: [
372+
{ name: "sum", expression: "%q1% + %q2%" }
373+
],
374+
elements: [
375+
{ type: "text", name: "q1", inputType: "number" },
376+
{ type: "text", name: "q2", inputType: "number" },
377+
{ type: "expression", name: "q3", expression: "%sum%" }
378+
]
379+
});
380+
survey.setValue("q1", 3);
381+
survey.setValue("q2", 4);
382+
assert.equal(survey.getQuestionByName("q3").value, 7, "calculated value with same braces");
383+
} finally {
384+
settings.expressionVariableDelimiters = { start: "{", end: "}" };
385+
}
386+
});

0 commit comments

Comments
 (0)