Skip to content

Commit 8f90f81

Browse files
committed
Fix =~ and a few bugs with assert_*
1 parent a77ec7b commit 8f90f81

File tree

2 files changed

+36
-8
lines changed

2 files changed

+36
-8
lines changed

src/vimscript/expression/evaluate.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import {
1414
FunctionCallExpression,
1515
ListValue,
1616
NumberValue,
17-
StringValue,
1817
UnaryOp,
1918
Value,
2019
VariableExpression,
@@ -653,8 +652,8 @@ export class EvaluationContext {
653652
const pattern = Pattern.parser({
654653
direction: SearchDirection.Forward,
655654
delimiter: '/', // TODO: Are these params right?
656-
}).tryParse(toString(lhs));
657-
return pattern.regex.test(toString(rhs));
655+
}).tryParse(toString(rhs));
656+
return pattern.regex.test(toString(lhs));
658657
}
659658
}
660659
}
@@ -718,7 +717,10 @@ export class EvaluationContext {
718717
}
719718
case 'assert_equal': {
720719
const [expected, actual, msg] = getArgs(2, 3);
721-
if (this.evaluateComparison('==', true, expected!, actual!)) {
720+
if (
721+
expected!.type === actual!.type &&
722+
this.evaluateComparison('==', true, expected!, actual!)
723+
) {
722724
return assertPassed();
723725
}
724726
return assertFailed(
@@ -790,7 +792,7 @@ export class EvaluationContext {
790792
}
791793
case 'assert_true': {
792794
const [actual, msg] = getArgs(1, 2);
793-
if (this.evaluateComparison('==', true, bool(true), actual!)) {
795+
if (this.evaluateComparison('!=', true, bool(false), actual!)) {
794796
return assertPassed();
795797
}
796798
return assertFailed(msg ? toString(msg) : `Expected True but got ${displayValue(actual!)}`);

test/vimscript/expression.test.ts

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -426,6 +426,11 @@ suite('Vimscript expressions', () => {
426426
exprTest("'abc' ==? 'Abc'", { value: bool(true) });
427427
});
428428

429+
suite.only('Pattern matching', () => {
430+
exprTest("'apple' =~ '^a.*e$'", { value: bool(true) });
431+
// TODO
432+
});
433+
429434
suite('Different types', () => {
430435
exprTest("4 == '4'", { value: bool(true) });
431436
exprTest("4 is '4'", { value: bool(false) });
@@ -527,9 +532,30 @@ suite('Vimscript expressions', () => {
527532
});
528533

529534
suite('Builtin functions', () => {
530-
suite('assert_*', () => {
531-
exprTest('assert_equal(1, 1)', { value: int(0) });
532-
exprTest('assert_equal(1, 2)', { value: int(1) });
535+
suite.only('assert_*', () => {
536+
const PASS = { value: int(0) };
537+
const FAIL = { value: int(1) };
538+
539+
exprTest('assert_equal(1, 1)', PASS);
540+
exprTest('assert_equal(1, 2)', FAIL);
541+
exprTest('assert_equal(4, "4")', FAIL);
542+
543+
exprTest('assert_true(-123)', PASS);
544+
exprTest('assert_true(0)', FAIL);
545+
546+
exprTest('assert_false(-123)', FAIL);
547+
exprTest('assert_false(0)', PASS);
548+
549+
exprTest('assert_inrange(-123, 123, 4)', PASS);
550+
exprTest('assert_inrange(-123, 123, -123)', PASS);
551+
exprTest('assert_inrange(-123, 123, 123)', PASS);
552+
exprTest('assert_inrange(-123, 123, 123.001)', FAIL);
553+
exprTest('assert_inrange(-123, 123, -123.001)', FAIL);
554+
555+
exprTest("assert_match('^f.*o$', 'foo')", PASS);
556+
exprTest("assert_match('^f.*o$', 'foobar')", FAIL);
557+
558+
exprTest('assert_report("whatever")', FAIL);
533559
});
534560

535561
suite('count', () => {

0 commit comments

Comments
 (0)