Skip to content

Commit 2d1ca76

Browse files
committed
Cleanup IValue
1 parent 4cf56f2 commit 2d1ca76

File tree

10 files changed

+86
-253
lines changed

10 files changed

+86
-253
lines changed

src/GraphQL.Tests/Execution/AstFromValueTests.cs

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ public void registers_ast_from_value_converters()
7575
schema.RegisterValueConverter(new ByteValueConverter());
7676

7777
byte value = 12;
78-
var result = schema.FindValueConverter(value);
78+
var result = schema.FindValueConverter(value, null);
7979
result.ShouldNotBeNull("AST from value converter should be registered");
8080
result.ShouldBeOfType<ByteValueConverter>();
8181
}
@@ -95,37 +95,27 @@ public void converts_byte_to_byte_value()
9595

9696
internal class ByteValueConverter : IAstFromValueConverter
9797
{
98-
public bool Matches(object value)
98+
public bool Matches(object value, IGraphType type)
9999
{
100100
return value is byte;
101101
}
102102

103-
public IValue Convert(object value)
103+
public IValue Convert(object value, IGraphType type)
104104
{
105105
return new ByteValue((byte)value);
106106
}
107107
}
108108

109-
internal class ByteValue : AbstractNode, IValue
109+
internal class ByteValue : ValueNode<byte>
110110
{
111111
public ByteValue(byte value)
112112
{
113113
Value = value;
114114
}
115115

116-
public byte Value { get; }
117-
118-
public object GetValue()
119-
{
120-
return Value;
121-
}
122-
123-
public override bool IsEqualTo(INode obj)
116+
protected override bool Equals(ValueNode<byte> node)
124117
{
125-
if (ReferenceEquals(null, obj)) return false;
126-
if (ReferenceEquals(this, obj)) return true;
127-
if (obj.GetType() != this.GetType()) return false;
128-
return Equals((ByteValue)obj);
118+
return Value == node.Value;
129119
}
130120
}
131121

src/GraphQL.Tests/Execution/Performance/ThreadPerformanceTests.cs

Lines changed: 22 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@
33
using System.Diagnostics;
44
using System.Linq;
55
using System.Threading;
6+
using System.Threading.Tasks;
67
using GraphQL.Conversion;
78
using GraphQL.Types;
9+
using Shouldly;
810
using Xunit;
911

1012
namespace GraphQL.Tests.Execution.Performance
@@ -15,7 +17,7 @@ public ThreadPerformanceTests()
1517
{
1618
Services.Register<PerfQuery>();
1719

18-
Services.Singleton(() => new ThreadPerformanceSchema(type => (GraphType) Services.Get(type)));
20+
Services.Singleton(() => new ThreadPerformanceSchema(new FuncDependencyResolver(type => (GraphType) Services.Get(type))));
1921
}
2022

2123
public class PerfQuery : ObjectGraphType<object>
@@ -25,13 +27,12 @@ public PerfQuery()
2527
Name = "Query";
2628

2729
FieldAsync<StringGraphType>("halfSecond", resolve: c => Get(500, "Half"));
28-
FieldAsync<StringGraphType>("quarterSecond", resolve: async c => Get(500, "Quarter"));
30+
FieldAsync<StringGraphType>("quarterSecond", resolve: c => Get(500, "Quarter"));
2931
}
3032

31-
private string Get(int milliseconds, string result)
33+
private async Task<string> Get(int milliseconds, string result)
3234
{
33-
Thread.Sleep(milliseconds);
34-
35+
await Task.Delay(milliseconds);
3536
return result;
3637
}
3738
}
@@ -45,27 +46,29 @@ public PerfMutation()
4546
Name = "Mutation";
4647

4748
FieldAsync<StringGraphType>("setFive", resolve: c => Set("5"));
48-
FieldAsync<StringGraphType>("setOne", resolve: async c => Set("1"));
49+
FieldAsync<StringGraphType>("setOne", resolve: c => Set("1"));
4950
}
5051

51-
private string Set(string result)
52+
private Task<string> Set(string result)
5253
{
5354
Calls.Add(result);
54-
return string.Join(",", Calls.ToList());
55+
var list = string.Join(",", Calls.ToList());
56+
return Task.FromResult(list);
5557
}
5658
}
5759

5860
public class ThreadPerformanceSchema : Schema
5961
{
60-
public ThreadPerformanceSchema(Func<Type, GraphType> resolveType)
61-
: base(resolveType)
62+
public ThreadPerformanceSchema(IDependencyResolver resolver)
63+
: base(resolver)
6264
{
63-
Query = (PerfQuery) resolveType(typeof(PerfQuery));
64-
Mutation = (PerfMutation) resolveType(typeof(PerfMutation));
65+
Query = resolver.Resolve<PerfQuery>();
66+
Mutation = resolver.Resolve<PerfMutation>();
6567
}
6668
}
6769

68-
[Fact(Skip = "May fail one a single processor machine.")]
70+
// [Fact(Skip = "May fail one a single processor machine.")]
71+
[Fact]
6972
public void Executes_IsQuickerThanTotalTaskTime()
7073
{
7174
var query = @"
@@ -76,28 +79,20 @@ query HeroNameAndFriendsQuery {
7679
";
7780

7881
var smallListTimer = new Stopwatch();
79-
ExecutionResult runResult2 = null;
8082
smallListTimer.Start();
8183

82-
runResult2 = Executer.ExecuteAsync(_ =>
84+
var runResult2 = Executer.ExecuteAsync(_ =>
8385
{
8486
_.EnableMetrics = false;
8587
_.SetFieldMiddleware = false;
8688
_.Schema = Schema;
8789
_.Query = query;
88-
_.Root = null;
89-
_.Inputs = null;
90-
_.UserContext = null;
91-
_.CancellationToken = default(CancellationToken);
92-
_.ValidationRules = null;
93-
_.FieldNameConverter = new CamelCaseFieldNameConverter();
9490
}).GetAwaiter().GetResult();
9591

9692
smallListTimer.Stop();
9793

98-
Assert.Null(runResult2.Errors);
99-
100-
Assert.True(smallListTimer.ElapsedMilliseconds < 900);
94+
runResult2.Errors.ShouldBeNull();
95+
smallListTimer.ElapsedMilliseconds.ShouldBeLessThan(900);
10196
}
10297

10398
[Fact]
@@ -125,23 +120,15 @@ mutation Multiple {
125120
}
126121
";
127122

128-
ExecutionResult runResult2 = null;
129-
130-
runResult2 = Executer.ExecuteAsync(_ =>
123+
var runResult2 = Executer.ExecuteAsync(_ =>
131124
{
132125
_.Schema = Schema;
133126
_.Query = query;
134-
_.Root = null;
135-
_.Inputs = null;
136-
_.UserContext = null;
137-
_.CancellationToken = default(CancellationToken);
138-
_.ValidationRules = null;
139-
_.FieldNameConverter = new CamelCaseFieldNameConverter();
140127
}).GetAwaiter().GetResult();
141128

142129
var result = runResult2.Data as dynamic;
143-
Assert.Null(runResult2.Errors);
144-
Assert.Equal("5,5,1,1,1,5,5,5,5,1,5,1,5,1,5,1,5", result["m17"]);
130+
runResult2.Errors.ShouldBeNull();
131+
((string)result["m17"]).ShouldBe("5,5,1,1,1,5,5,5,5,1,5,1,5,1,5,1,5");
145132
}
146133
}
147134
}

src/GraphQL/Execution/DocumentExecuter.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -340,7 +340,7 @@ public async Task<IDictionary<string, object>> ExecuteFieldsAsync(ExecutionConte
340340

341341
foreach (var fieldCollection in fields)
342342
{
343-
var name = fieldCollection.Key;
343+
var name = fieldCollection.Key;
344344

345345
if (!data.ContainsKey(name))
346346
{
@@ -809,7 +809,7 @@ public object GetVariableValue(Document document, ISchema schema, VariableDefini
809809
{
810810
if (variable.DefaultValue != null)
811811
{
812-
return variable.DefaultValue.ValueFromAst();
812+
return variable.DefaultValue.Value;
813813
}
814814
}
815815
var coercedValue = CoerceValue(schema, type, input.AstFromValue(schema, type));

src/GraphQL/GraphQLExtensions.cs

Lines changed: 2 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -413,37 +413,13 @@ public static IValue AstFromValue(this object value, ISchema schema, IGraphType
413413
return new StringValue(serialized.ToString());
414414
}
415415

416-
var converter = schema.FindValueConverter(serialized);
416+
var converter = schema.FindValueConverter(serialized, type);
417417
if (converter != null)
418418
{
419-
return converter.Convert(serialized);
419+
return converter.Convert(serialized, type);
420420
}
421421

422422
throw new ExecutionError($"Cannot convert value to AST: {serialized}");
423423
}
424-
425-
public static object ValueFromAst(this IValue value)
426-
{
427-
if (value == null)
428-
{
429-
return null;
430-
}
431-
432-
if (value is ObjectValue)
433-
{
434-
var objVal = (ObjectValue)value;
435-
var obj = new Dictionary<string, object>();
436-
objVal.FieldNames.Apply(name => obj.Add(name, ValueFromAst(objVal.Field(name).Value)));
437-
return obj;
438-
}
439-
440-
if (value is ListValue)
441-
{
442-
var list = (ListValue)value;
443-
return list.Values.Select(ValueFromAst).ToList();
444-
}
445-
446-
return value.GetValue();
447-
}
448424
}
449425
}

src/GraphQL/Language/AST/IValue.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@ namespace GraphQL.Language.AST
22
{
33
public interface IValue : INode
44
{
5-
object GetValue();
5+
object Value { get; }
6+
}
7+
8+
public interface IValue<T> : IValue
9+
{
10+
new T Value { get; }
611
}
712
}

0 commit comments

Comments
 (0)