Skip to content

Commit

Permalink
add truthy check for binary operators and & or
Browse files Browse the repository at this point in the history
  • Loading branch information
Cem Kara committed Oct 22, 2024
1 parent dbfb3da commit 07f8cba
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 2 deletions.
5 changes: 3 additions & 2 deletions lib/src/evaluator.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import 'package:liquify/parser.dart' show parseInput;
import 'package:liquify/src/context.dart';
import 'package:liquify/src/drop.dart';
import 'package:liquify/src/tag_registry.dart';
import 'package:liquify/src/util.dart';

import 'ast.dart';
import 'buffer.dart';
Expand Down Expand Up @@ -139,10 +140,10 @@ class Evaluator implements ASTVisitor<dynamic> {
result = left >= right;
break;
case 'and':
result = left && right;
result = isTruthy(left) && isTruthy(right);
break;
case 'or':
result = left || right;
result = isTruthy(left) || isTruthy(right);
break;
case '..':
result = List.generate(right - left + 1, (index) => left + index);
Expand Down
48 changes: 48 additions & 0 deletions test/tags_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -777,5 +777,53 @@ void main() {
expect(evaluator.buffer.toString(), contains('not truthy'));
});
});

test('empty string', () {
testParser('''
{% assign name = "" %}
{% if name %}
truthy.
{% endif %}
''', (document) {
evaluator.evaluate(document);
expect(evaluator.buffer.toString(), contains('truthy'));
});
});

test('null', () {
testParser('''
{% assign name = null %}
{% if name %}
truthy.
{% endif %}
''', (document) {
evaluator.evaluate(document);
expect(evaluator.buffer.toString(), isNot(contains('truthy')));
});
});

test('binary operator and', () {
testParser('''
{% assign name = null %}
{% if name and "" %}
truthy.
{% endif %}
''', (document) {
evaluator.evaluate(document);
expect(evaluator.buffer.toString(), isNot(contains('truthy')));
});
});

test('binary operator or', () {
testParser('''
{% assign name = null %}
{% if name or "" %}
truthy.
{% endif %}
''', (document) {
evaluator.evaluate(document);
expect(evaluator.buffer.toString(), contains('truthy'));
});
});
});
}

0 comments on commit 07f8cba

Please sign in to comment.