88 lines
2.4 KiB
Dart
88 lines
2.4 KiB
Dart
import 'package:graphql_parser/graphql_parser.dart';
|
|
import 'package:test/test.dart';
|
|
|
|
import 'common.dart';
|
|
import 'type_test.dart';
|
|
import 'value_test.dart';
|
|
|
|
main() {
|
|
test('no default value', () {
|
|
expect(r'$foo: bar',
|
|
isVariableDefinition('foo', type: isType('bar', isNullable: true)));
|
|
});
|
|
|
|
test('default value', () {
|
|
expect(
|
|
r'$foo: int! = 2',
|
|
isVariableDefinition('foo',
|
|
type: isType('int', isNullable: false), defaultValue: isValue(2)));
|
|
});
|
|
|
|
test('exceptions', () {
|
|
var throwsSyntaxError = predicate((x) {
|
|
var parser = parse(x.toString())..parseVariableDefinition();
|
|
return parser.errors.isNotEmpty;
|
|
}, 'fails to parse variable definition');
|
|
|
|
var throwsSyntaxErrorOnDefinitions = predicate((x) {
|
|
var parser = parse(x.toString())..parseVariableDefinitions();
|
|
return parser.errors.isNotEmpty;
|
|
}, 'fails to parse variable definitions');
|
|
|
|
expect(r'$foo', throwsSyntaxError);
|
|
expect(r'$foo:', throwsSyntaxError);
|
|
expect(r'$foo: int =', throwsSyntaxError);
|
|
|
|
expect(r'($foo: int = 2', throwsSyntaxErrorOnDefinitions);
|
|
});
|
|
}
|
|
|
|
VariableDefinitionContext parseVariableDefinition(String text) =>
|
|
parse(text).parseVariableDefinition();
|
|
|
|
Matcher isVariableDefinition(String name,
|
|
{Matcher type, Matcher defaultValue}) =>
|
|
new _IsVariableDefinition(name, type, defaultValue);
|
|
|
|
class _IsVariableDefinition extends Matcher {
|
|
final String name;
|
|
final Matcher type, defaultValue;
|
|
|
|
_IsVariableDefinition(this.name, this.type, this.defaultValue);
|
|
|
|
@override
|
|
Description describe(Description description) {
|
|
var desc = description.add('is variable definition with name "$name"');
|
|
|
|
if (type != null) {
|
|
desc = type.describe(desc.add(' with type that '));
|
|
}
|
|
|
|
if (defaultValue != null) {
|
|
desc = type.describe(desc.add(' with default value that '));
|
|
}
|
|
|
|
return desc;
|
|
}
|
|
|
|
@override
|
|
bool matches(item, Map matchState) {
|
|
var def = item is VariableDefinitionContext
|
|
? item
|
|
: parseVariableDefinition(item.toString());
|
|
if (def == null) return false;
|
|
if (def.variable.name != name) return false;
|
|
bool result = true;
|
|
|
|
if (type != null) {
|
|
result == result && type.matches(def.type, matchState);
|
|
}
|
|
|
|
if (defaultValue != null) {
|
|
result =
|
|
result && defaultValue.matches(def.defaultValue.value, matchState);
|
|
}
|
|
|
|
return result;
|
|
}
|
|
}
|