anchor.diff:    });
   }
   
  -class TestImageProvider extends ImageProvider<TestImageProvider> {
  +class ConfigurationAwareKey {
  +  const ConfigurationAwareKey(this.provider, this.configuration)
  +    : assert(provider != null),
  +      assert(configuration != null);
  +
  +  final ImageProvider provider;
  +  final ImageConfiguration configuration;
  +
  +  @override
  +  bool operator ==(Object other) {
  +    if (other.runtimeType != runtimeType) {
  +      return false;
  +    }
  +    return other is ConfigurationAwareKey
  +        && other.provider == provider
  +        && other.configuration == configuration;
  +  }
  +
  +  @override
  +  int get hashCode => hashValues(provider, configuration);
  +}
  +
  +class ConfigurationKeyedTestImageProvider extends TestImageProvider {
  +  @override
  +  Future<ConfigurationAwareKey> obtainKey(ImageConfiguration configuration) {
  +    return SynchronousFuture<ConfigurationAwareKey>(ConfigurationAwareKey(this, configuration));
  +  }
  +}
  +
  +class TestImageProvider extends ImageProvider<Object> {
     TestImageProvider({ImageStreamCompleter streamCompleter}) {
       _streamCompleter = streamCompleter
         ?? OneFrameImageStreamCompleter(_completer.future);
  
positive.code:     final GlobalKey mediaQueryKey1 = GlobalKey(debugLabel: 'mediaQueryKey1');
      final GlobalKey mediaQueryKey2 = GlobalKey(debugLabel: 'mediaQueryKey2');
      final GlobalKey imageKey = GlobalKey(debugLabel: 'image');
      final TestImageProvider imageProvider = TestImageProvider();
  
      // Of the two nested MediaQuery objects, the innermost one,
      // mediaQuery2, should define the configuration of the imageProvider.
  
negative.code:     final GlobalKey mediaQueryKey1 = GlobalKey(debugLabel: 'mediaQueryKey1');
      final GlobalKey mediaQueryKey2 = GlobalKey(debugLabel: 'mediaQueryKey2');
      final GlobalKey imageKey = GlobalKey(debugLabel: 'image');
      final ConfigurationKeyedTestImageProvider imageProvider = ConfigurationKeyedTestImageProvider();
      final Set<Object> seenKeys = <Object>{};
      final DebouncingImageProvider debouncingProvider = DebouncingImageProvider(imageProvider, seenKeys);
  
      // This is just a variation on the previous test. In this version the location
      // of the Image changes and the MediaQuery widgets do not.
  