anchor.diff:  }
   
   void expectComplexTypeParam(String source,
  -    {bool splitGtGt: true,
  -    String expectedAfter,
  +    {String expectedAfter,
       List<String> expectedCalls,
       List<ExpectedError> expectedErrors}) {
     Token start = scan(source);
  
positive.code:     expect(listener.errors, isNull);
    }
  
    void test_simple_parseArguments2() {
      final Token start = scanString('before <S<T>> after').tokens.next.next;
      Token t = start.next.next;
      expect(t.next.lexeme, '>>');
      final TypeInfoListener listener = new TypeInfoListener();
  
      expect(simpleTypeArgument1.parseArguments(start, new Parser(listener)), t);
      expect(listener.calls, [
        'beginTypeArguments <',
        'handleIdentifier T typeReference',
        'handleNoTypeArguments >>',
        'handleType T >>',
        'endTypeArguments 1 < T'
      ]);
      expect(listener.errors, isNull);
    }
  
    void test_simple_parseVariables2() {
      final Token start = scanString('before <S<T>> after').tokens.next.next;
      Token t = start.next.next;
      expect(t.next.lexeme, '>>');
      final TypeInfoListener listener = new TypeInfoListener();
  
      expect(simpleTypeArgument1.parseVariables(start, new Parser(listener)), t);
      expect(listener.calls, [
        'beginTypeVariables <',
        'beginTypeVariable T',
        'beginMetadataStar T',
        'endMetadataStar 0',
        'handleIdentifier T typeVariableDeclaration',
        'handleNoType T',
        'endTypeVariable T null',
        'endTypeVariables 1 < T',
      ]);
      expect(listener.errors, isNull);
    }
  
    void test_computeTypeParamOrArg_basic() {
      expectTypeParamOrArg(noTypeParamOrArg, '');
      expectTypeParamOrArg(noTypeParamOrArg, 'a');
  
negative.code:       'endTypeVariable > extends',
        'endTypeVariables 1 < >',
      ]);
      expectComplexTypeParam('<R, S extends void Function()>', expectedCalls: [
        'beginTypeVariables <',
        'beginTypeVariable R',
  