public void CreateSyncSourceMethodResolver()
        {
            // arrange
            Mock <IResolverContext> context = new Mock <IResolverContext>(MockBehavior.Strict);

            context.Setup(t => t.Parent <FooType>()).Returns(new FooType());

            FieldReference          fieldReference = new FieldReference("type", "field");
            FieldResolverDescriptor descriptor     = FieldResolverDescriptor
                                                     .CreateSourceMethod(fieldReference, typeof(FooType),
                                                                         typeof(FooType).GetMethod("Bar"), false,
                                                                         Array.Empty <FieldResolverArgumentDescriptor>());

            // act
            FieldResolverBuilder fieldResolverBuilder = new FieldResolverBuilder();

            FieldResolver[] resolvers = fieldResolverBuilder.Build(
                new[] { descriptor }).ToArray();

            // assert
            Assert.Collection(resolvers,
                              r =>
            {
                Assert.Equal("type", r.TypeName);
                Assert.Equal("field", r.FieldName);
                Assert.NotNull(r.Resolver);

                object result = r.Resolver(context.Object, CancellationToken.None);
                Assert.Equal("Hello World", result);
            });
        }
Beispiel #2
0
        public void SyncSourceMethodGenerator_GenerateWithTwoArgument()
        {
            // arrange
            FieldResolverArgumentDescriptor argumentDescriptor1 =
                FieldResolverArgumentDescriptor.Create("a",
                                                       FieldResolverArgumentKind.Argument,
                                                       typeof(string));

            FieldResolverArgumentDescriptor argumentDescriptor2 =
                FieldResolverArgumentDescriptor.Create("b",
                                                       FieldResolverArgumentKind.Argument,
                                                       typeof(int));

            MethodInfo method = typeof(GeneratorTestDummy).GetMethods()
                                .Single(t => t.Name == "GetFoo" && t.GetParameters().Length == 2);
            FieldResolverDescriptor descriptor = FieldResolverDescriptor
                                                 .CreateSourceMethod(new FieldReference("Foo", "bar"),
                                                                     method.ReflectedType, method, false,
                                                                     new[] { argumentDescriptor1, argumentDescriptor2 });

            // act
            StringBuilder             source    = new StringBuilder();
            SyncSourceMethodGenerator generator = new SyncSourceMethodGenerator();
            string result = generator.Generate("abc", descriptor);

            // assert
            Assert.Equal(Snapshot.Current(), Snapshot.New(result));
        }
Beispiel #3
0
        public void SyncSourceMethodGenerator_GenerateWithoutArguments()
        {
            // arrange
            MethodInfo method = typeof(GeneratorTestDummy).GetMethods()
                                .Single(t => t.Name == "GetFoo" && t.GetParameters().Length == 0);
            FieldResolverDescriptor descriptor = FieldResolverDescriptor
                                                 .CreateSourceMethod(new FieldReference("Foo", "bar"),
                                                                     method.ReflectedType, method, false,
                                                                     Enumerable.Empty <FieldResolverArgumentDescriptor>());

            // act
            StringBuilder             source    = new StringBuilder();
            SyncSourceMethodGenerator generator = new SyncSourceMethodGenerator();
            string result = generator.Generate("abc", descriptor);

            // assert
            Assert.Equal(Snapshot.Current(), Snapshot.New(result));
        }
        private FieldResolverDescriptor CreateSourceResolverDescriptor(
            FieldResolverMember fieldResolverMember,
            Type resolverType, Type sourceType)
        {
            if (fieldResolverMember.Member is PropertyInfo p)
            {
                return(FieldResolverDescriptor.CreateSourceProperty(
                           fieldResolverMember, sourceType, p));
            }
            else if (fieldResolverMember.Member is MethodInfo m)
            {
                bool isAsync = typeof(Task).IsAssignableFrom(m.ReturnType);
                IReadOnlyCollection <FieldResolverArgumentDescriptor> argumentDescriptors =
                    CreateResolverArgumentDescriptors(m, resolverType, sourceType);
                return(FieldResolverDescriptor.CreateSourceMethod(
                           fieldResolverMember, sourceType, m, isAsync,
                           argumentDescriptors));
            }

            throw new NotSupportedException();
        }