public async Task QueryEvents()
        {
            // arrange
            var     observer = new TestDiagnosticObserver();
            ISchema schema   = CreateSchema();

            // act
            await schema.MakeExecutable(b => b
                                        .UseDefaultPipeline(new QueryExecutionOptions
            {
                TracingPreference = TracingPreference.Always
            })
                                        .AddDiagnosticObserver(observer))
            .ExecuteAsync("{ foo }");

            // assert
            Assert.True(observer.QueryStart);
            Assert.True(observer.QueryStop);
        }
        public async Task ResolverEvents()
        {
            // arrange
            var     observer = new TestDiagnosticObserver();
            ISchema schema   = CreateSchema();

            // act
            await schema.MakeExecutable(b => b
                                        .UseDefaultPipeline(new QueryExecutionOptions
            {
                TracingPreference = TracingPreference.Always
            })
                                        .AddDiagnosticObserver(observer))
            .ExecuteAsync("{ foo }");

            // assert
            Assert.True(observer.ResolveFieldStart);
            Assert.True(observer.ResolveFieldStop);
            Assert.Equal("foo", observer.FieldSelection.Name.Value);
            Assert.InRange(observer.Duration,
                           TimeSpan.FromMilliseconds(50),
                           TimeSpan.FromMilliseconds(2000));
        }