44 lines
1.2 KiB
Dart
44 lines
1.2 KiB
Dart
|
import 'package:graphql_parser/graphql_parser.dart';
|
||
|
import 'package:matcher/matcher.dart';
|
||
|
import 'package:test/test.dart';
|
||
|
import 'common.dart';
|
||
|
|
||
|
main() {
|
||
|
test('argument', () {
|
||
|
expect('foo: 2', isArgument('foo', 2));
|
||
|
expect(r'foo: $bar', isArgument('foo', 'bar'));
|
||
|
});
|
||
|
|
||
|
test('exception', () {
|
||
|
expect(() => parseArgument('foo'), throwsSyntaxError);
|
||
|
expect(() => parseArgument('foo:'), throwsSyntaxError);
|
||
|
});
|
||
|
}
|
||
|
|
||
|
ArgumentContext parseArgument(String text) => parse(text).parseArgument();
|
||
|
|
||
|
Matcher isArgument(String name, value) => new _IsArgument(name, value);
|
||
|
|
||
|
class _IsArgument extends Matcher {
|
||
|
final String name;
|
||
|
final value;
|
||
|
|
||
|
_IsArgument(this.name, this.value);
|
||
|
|
||
|
@override
|
||
|
Description describe(Description description) {
|
||
|
return description.add('is an argument named "$name" with value $value');
|
||
|
}
|
||
|
|
||
|
@override
|
||
|
bool matches(item, Map matchState) {
|
||
|
var arg = item is ArgumentContext ? item : parseArgument(item);
|
||
|
if (arg == null) return false;
|
||
|
return equals(name).matches(arg.name, matchState) &&
|
||
|
equals(value).matches(
|
||
|
arg.valueOrVariable.value?.value ??
|
||
|
arg.valueOrVariable.variable?.name,
|
||
|
matchState);
|
||
|
}
|
||
|
}
|