platform/graphql_parser/test/variable_test.dart
2018-08-04 20:44:41 -04:00

43 lines
1 KiB
Dart

import 'package:test/test.dart';
import 'common.dart';
main() {
test('variables', () {
expect(r'$a', isVariable('a'));
expect(r'$abc', isVariable('abc'));
expect(r'$abc123', isVariable('abc123'));
expect(r'$_', isVariable('_'));
expect(r'$___', isVariable('___'));
expect(r'$_123', isVariable('_123'));
});
test('exceptions', () {
var throwsSyntaxError = predicate((x) {
var parser = parse(x.toString())..parseVariable();
return parser.errors.isNotEmpty;
}, 'fails to parse variable');
expect(r'$', throwsSyntaxError);
});
}
Matcher isVariable(String name) => new _IsVariable(name);
class _IsVariable extends Matcher {
final String name;
_IsVariable(this.name);
@override
Description describe(Description description) {
return description.add('parses as a variable named "$name"');
}
@override
bool matches(item, Map matchState) {
var p = parse(item.toString());
var v = p.parseVariable();
return equals(name).matches(v?.name, matchState);
}
}