anchor.diff:          relevanceTags: ['dart:core::double'],
           returnType: 'double');
     }
  -
  -  test_discardContexts() async {
  -    newFile('/home/test/lib/test.dart', content: r'''
  -class A {}
  -''');
  -
  -    // No libraries initially.
  -    expect(uriToLibrary, isEmpty);
  -
  -    // Add the context, and discard everything immediately.
  -    tracker.addContext(testAnalysisContext);
  -    tracker.discardContexts();
  -
  -    // There is no context.
  -    expect(tracker.getContext(testAnalysisContext), isNull);
  -
  -    // There is no work to do.
  -    expect(tracker.hasWork, isFalse);
  -    await _doAllTrackerWork();
  -
  -    // So, there are no new libraries.
  -    expect(uriToLibrary, isEmpty);
  -  }
  -
  -  test_export() async {
  +}
  +
  +@reflectiveTest
  +class ExportTest extends _Base {
  +  test_combinators_hide() async {
       newFile('/home/test/lib/a.dart', content: r'''
   class A {}
   class B {}
  -''');
  -    newFile('/home/test/lib/test.dart', content: r'''
  +class C {}
  +''');
  +    newFile('/home/test/lib/test.dart', content: r'''
  +export 'a.dart' hide B;
  +class D {}
  +''');
  +    tracker.addContext(testAnalysisContext);
  +
  +    await _doAllTrackerWork();
  +    _assertHasLibrary('package:test/test.dart', declarations: [
  +      _ExpectedDeclaration.class_('A'),
  +      _ExpectedDeclaration.class_('C'),
  +      _ExpectedDeclaration.class_('D'),
  +    ]);
  +  }
  +
  +  test_combinators_show() async {
  +    newFile('/home/test/lib/a.dart', content: r'''
  +class A {}
  +class B {}
  +class C {}
  +''');
  +    newFile('/home/test/lib/test.dart', content: r'''
  +export 'a.dart' show B;
  +class D {}
  +''');
  +    tracker.addContext(testAnalysisContext);
  +
  +    await _doAllTrackerWork();
  +    _assertHasLibrary('package:test/test.dart', declarations: [
  +      _ExpectedDeclaration.class_('B'),
  +      _ExpectedDeclaration.class_('D'),
  +    ]);
  +  }
  +
  +  test_cycle() async {
  +    newFile('/home/test/lib/a.dart', content: r'''
  +export 'b.dart';
  +class A {}
  +''');
  +    newFile('/home/test/lib/b.dart', content: r'''
   export 'a.dart';
  +class B {}
  +''');
  +    newFile('/home/test/lib/test.dart', content: r'''
  +export 'b.dart';
   class C {}
   ''');
       tracker.addContext(testAnalysisContext);
   
       await _doAllTrackerWork();
  +
  +    _assertHasLibrary('package:test/a.dart', declarations: [
  +      _ExpectedDeclaration.class_('A'),
  +      _ExpectedDeclaration.class_('B'),
  +    ]);
  +
  +    _assertHasLibrary('package:test/b.dart', declarations: [
  +      _ExpectedDeclaration.class_('A'),
  +      _ExpectedDeclaration.class_('B'),
  +    ]);
  +
       _assertHasLibrary('package:test/test.dart', declarations: [
         _ExpectedDeclaration.class_('A'),
         _ExpectedDeclaration.class_('B'),
  
positive.code:         typeParameters: '<T extends num, U>');
    }
  
    test_declaration_FUNCTION_TYPE_ALIAS() async {
      newFile('/home/test/lib/test.dart', content: r'''
  typedef A = void Function();
  
  
negative.code:     }
    }
  
    test_pub() async {
      newFile('/home/aaa/lib/a.dart', content: 'class A {}');
      newFile('/home/aaa/lib/src/a2.dart', content: 'class A2 {}');
  
  