// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

part of dart2js.semantics_visitor_test;

const Map<String, List<Test>> DECL_TESTS = const {
  'Function declarations': const [
    const Test(
        '''
        m(a, b) {}
        ''',
        const [
          const Visit(VisitKind.VISIT_TOP_LEVEL_FUNCTION_DECL,
              element: 'function(m)', parameters: '(a,b)', body: '{}'),
          const Visit(VisitKind.VISIT_REQUIRED_PARAMETER_DECL,
              element: 'parameter(m#a)', index: 0),
          const Visit(VisitKind.VISIT_REQUIRED_PARAMETER_DECL,
              element: 'parameter(m#b)', index: 1),
        ]),
    const Test(
        '''
        m(a, [b]) {}
        ''',
        const [
          const Visit(VisitKind.VISIT_TOP_LEVEL_FUNCTION_DECL,
              element: 'function(m)', parameters: '(a,[b])', body: '{}'),
          const Visit(VisitKind.VISIT_REQUIRED_PARAMETER_DECL,
              element: 'parameter(m#a)', index: 0),
          const Visit(VisitKind.VISIT_OPTIONAL_PARAMETER_DECL,
              element: 'parameter(m#b)', index: 1, constant: 'null'),
        ]),
    const Test(
        '''
        m(a, [b = null]) {}
        ''',
        const [
          const Visit(VisitKind.VISIT_TOP_LEVEL_FUNCTION_DECL,
              element: 'function(m)', parameters: '(a,[b=null])', body: '{}'),
          const Visit(VisitKind.VISIT_REQUIRED_PARAMETER_DECL,
              element: 'parameter(m#a)', index: 0),
          const Visit(VisitKind.VISIT_OPTIONAL_PARAMETER_DECL,
              element: 'parameter(m#b)', constant: 'null', index: 1),
        ]),
    const Test(
        '''
        m(a, [b = 42]) {}
        ''',
        const [
          const Visit(VisitKind.VISIT_TOP_LEVEL_FUNCTION_DECL,
              element: 'function(m)', parameters: '(a,[b=42])', body: '{}'),
          const Visit(VisitKind.VISIT_REQUIRED_PARAMETER_DECL,
              element: 'parameter(m#a)', index: 0),
          const Visit(VisitKind.VISIT_OPTIONAL_PARAMETER_DECL,
              element: 'parameter(m#b)', constant: 42, index: 1),
        ]),
    const Test(
        '''
        m(a, {b}) {}
        ''',
        const [
          const Visit(VisitKind.VISIT_TOP_LEVEL_FUNCTION_DECL,
              element: 'function(m)', parameters: '(a,{b})', body: '{}'),
          const Visit(VisitKind.VISIT_REQUIRED_PARAMETER_DECL,
              element: 'parameter(m#a)', index: 0),
          const Visit(VisitKind.VISIT_NAMED_PARAMETER_DECL,
              element: 'parameter(m#b)', constant: 'null'),
        ]),
    const Test(
        '''
        m(a, {b: null}) {}
        ''',
        const [
          const Visit(VisitKind.VISIT_TOP_LEVEL_FUNCTION_DECL,
              element: 'function(m)', parameters: '(a,{b: null})', body: '{}'),
          const Visit(VisitKind.VISIT_REQUIRED_PARAMETER_DECL,
              element: 'parameter(m#a)', index: 0),
          const Visit(VisitKind.VISIT_NAMED_PARAMETER_DECL,
              element: 'parameter(m#b)', constant: 'null'),
        ]),
    const Test(
        '''
        m(a, {b:42}) {}
        ''',
        const [
          const Visit(VisitKind.VISIT_TOP_LEVEL_FUNCTION_DECL,
              element: 'function(m)', parameters: '(a,{b: 42})', body: '{}'),
          const Visit(VisitKind.VISIT_REQUIRED_PARAMETER_DECL,
              element: 'parameter(m#a)', index: 0),
          const Visit(VisitKind.VISIT_NAMED_PARAMETER_DECL,
              element: 'parameter(m#b)', constant: 42),
        ]),
    const Test(
        '''
        get m => null;
        ''',
        const [
          const Visit(VisitKind.VISIT_TOP_LEVEL_GETTER_DECL,
              element: 'getter(m)', body: '=>null;'),
        ]),
    const Test(
        '''
        set m(a) {}
        ''',
        const [
          const Visit(VisitKind.VISIT_TOP_LEVEL_SETTER_DECL,
              element: 'setter(m)', parameters: '(a)', body: '{}'),
          const Visit(VisitKind.VISIT_REQUIRED_PARAMETER_DECL,
              element: 'parameter(m#a)', index: 0),
        ]),
    const Test.clazz(
        '''
        class C {
          static m(a, b) {}
        }
        ''',
        const [
          const Visit(VisitKind.VISIT_STATIC_FUNCTION_DECL,
              element: 'function(C#m)', parameters: '(a,b)', body: '{}'),
          const Visit(VisitKind.VISIT_REQUIRED_PARAMETER_DECL,
              element: 'parameter(m#a)', index: 0),
          const Visit(VisitKind.VISIT_REQUIRED_PARAMETER_DECL,
              element: 'parameter(m#b)', index: 1),
        ]),
    const Test.clazz(
        '''
        class C {
          static get m => null;
        }
        ''',
        const [
          const Visit(VisitKind.VISIT_STATIC_GETTER_DECL,
              element: 'getter(C#m)', body: '=>null;'),
        ]),
    const Test.clazz(
        '''
        class C {
          static set m(a) {}
        }
        ''',
        const [
          const Visit(VisitKind.VISIT_STATIC_SETTER_DECL,
              element: 'setter(C#m)', parameters: '(a)', body: '{}'),
          const Visit(VisitKind.VISIT_REQUIRED_PARAMETER_DECL,
              element: 'parameter(m#a)', index: 0),
        ]),
    const Test.clazz(
        '''
        class C {
          m(a, b) {}
        }
        ''',
        const [
          const Visit(VisitKind.VISIT_INSTANCE_METHOD_DECL,
              element: 'function(C#m)', parameters: '(a,b)', body: '{}'),
          const Visit(VisitKind.VISIT_REQUIRED_PARAMETER_DECL,
              element: 'parameter(m#a)', index: 0),
          const Visit(VisitKind.VISIT_REQUIRED_PARAMETER_DECL,
              element: 'parameter(m#b)', index: 1),
        ]),
    const Test.clazz(
        '''
        class C {
          get m => null;
        }
        ''',
        const [
          const Visit(VisitKind.VISIT_INSTANCE_GETTER_DECL,
              element: 'getter(C#m)', body: '=>null;'),
        ]),
    const Test.clazz(
        '''
        class C {
          set m(a) {}
        }
        ''',
        const [
          const Visit(VisitKind.VISIT_INSTANCE_SETTER_DECL,
              element: 'setter(C#m)', parameters: '(a)', body: '{}'),
          const Visit(VisitKind.VISIT_REQUIRED_PARAMETER_DECL,
              element: 'parameter(m#a)', index: 0),
        ]),
    const Test.clazz(
        '''
        abstract class C {
          m(a, b);
        }
        ''',
        const [
          const Visit(VisitKind.VISIT_ABSTRACT_METHOD_DECL,
              element: 'function(C#m)', parameters: '(a,b)'),
          const Visit(VisitKind.VISIT_REQUIRED_PARAMETER_DECL,
              element: 'parameter(m#a)', index: 0),
          const Visit(VisitKind.VISIT_REQUIRED_PARAMETER_DECL,
              element: 'parameter(m#b)', index: 1),
        ]),
    const Test.clazz(
        '''
        abstract class C {
          get m;
        }
        ''',
        const [
          const Visit(VisitKind.VISIT_ABSTRACT_GETTER_DECL,
              element: 'getter(C#m)'),
        ]),
    const Test.clazz(
        '''
        abstract class C {
          set m(a);
        }
        ''',
        const [
          const Visit(VisitKind.VISIT_ABSTRACT_SETTER_DECL,
              element: 'setter(C#m)', parameters: '(a)'),
          const Visit(VisitKind.VISIT_REQUIRED_PARAMETER_DECL,
              element: 'parameter(m#a)', index: 0),
        ]),
    const Test(
        '''
        m(a, b) {}
        ''',
        const [
          const Visit(VisitKind.VISIT_TOP_LEVEL_FUNCTION_DECL,
              element: 'function(m)', parameters: '(a,b)', body: '{}'),
          const Visit(VisitKind.VISIT_REQUIRED_PARAMETER_DECL,
              element: 'parameter(m#a)', index: 0),
          const Visit(VisitKind.VISIT_REQUIRED_PARAMETER_DECL,
              element: 'parameter(m#b)', index: 1),
        ]),
    const Test(
        '''
        m() {
          local(a, b) {}
        }
        ''',
        const [
          const Visit(VisitKind.VISIT_TOP_LEVEL_FUNCTION_DECL,
              element: 'function(m)', parameters: '()', body: '{local(a,b){}}'),
          const Visit(VisitKind.VISIT_LOCAL_FUNCTION_DECL,
              element: 'function(m#local)', parameters: '(a,b)', body: '{}'),
          const Visit(VisitKind.VISIT_REQUIRED_PARAMETER_DECL,
              element: 'parameter(local#a)', index: 0),
          const Visit(VisitKind.VISIT_REQUIRED_PARAMETER_DECL,
              element: 'parameter(local#b)', index: 1),
        ]),
    const Test(
        '''
        m() => (a, b) {};
        ''',
        const [
          const Visit(VisitKind.VISIT_TOP_LEVEL_FUNCTION_DECL,
              element: 'function(m)', parameters: '()', body: '=>(a,b){};'),
          const Visit(VisitKind.VISIT_CLOSURE_DECL,
              element: 'function(m#)', parameters: '(a,b)', body: '{}'),
          const Visit(VisitKind.VISIT_REQUIRED_PARAMETER_DECL,
              element: 'parameter(#a)', index: 0),
          const Visit(VisitKind.VISIT_REQUIRED_PARAMETER_DECL,
              element: 'parameter(#b)', index: 1),
        ]),
  ],
  'Constructor declarations': const [
    const Test.clazz(
        '''
        class C {
          C(a, b);
        }
        ''',
        const [
          const Visit(VisitKind.VISIT_GENERATIVE_CONSTRUCTOR_DECL,
              element: 'generative_constructor(C#)',
              parameters: '(a,b)',
              body: ';'),
          const Visit(VisitKind.VISIT_REQUIRED_PARAMETER_DECL,
              element: 'parameter(#a)', index: 0),
          const Visit(VisitKind.VISIT_REQUIRED_PARAMETER_DECL,
              element: 'parameter(#b)', index: 1),
          const Visit(VisitKind.VISIT_IMPLICIT_SUPER_CONSTRUCTOR_INVOKE,
              element: 'generative_constructor(Object#)', type: 'Object'),
        ],
        method: ''),
    const Test.clazz(
        '''
        class C {
          var b;
          C(a, this.b);
        }
        ''',
        const [
          const Visit(VisitKind.VISIT_GENERATIVE_CONSTRUCTOR_DECL,
              element: 'generative_constructor(C#)',
              parameters: '(a,this.b)',
              body: ';'),
          const Visit(VisitKind.VISIT_REQUIRED_PARAMETER_DECL,
              element: 'parameter(#a)', index: 0),
          const Visit(VisitKind.VISIT_REQUIRED_INITIALIZING_FORMAL_DECL,
              element: 'initializing_formal(#b)', index: 1),
          const Visit(VisitKind.VISIT_IMPLICIT_SUPER_CONSTRUCTOR_INVOKE,
              element: 'generative_constructor(Object#)', type: 'Object'),
        ],
        method: ''),
    const Test.clazz(
        '''
        class C {
          var b;
          C(a, [this.b = 42]);
        }
        ''',
        const [
          const Visit(VisitKind.VISIT_GENERATIVE_CONSTRUCTOR_DECL,
              element: 'generative_constructor(C#)',
              parameters: '(a,[this.b=42])',
              body: ';'),
          const Visit(VisitKind.VISIT_REQUIRED_PARAMETER_DECL,
              element: 'parameter(#a)', index: 0),
          const Visit(VisitKind.VISIT_OPTIONAL_INITIALIZING_FORMAL_DECL,
              element: 'initializing_formal(#b)', constant: 42, index: 1),
          const Visit(VisitKind.VISIT_IMPLICIT_SUPER_CONSTRUCTOR_INVOKE,
              element: 'generative_constructor(Object#)', type: 'Object'),
        ],
        method: ''),
    const Test.clazz(
        '''
        class C {
          var b;
          C(a, {this.b: 42});
        }
        ''',
        const [
          const Visit(VisitKind.VISIT_GENERATIVE_CONSTRUCTOR_DECL,
              element: 'generative_constructor(C#)',
              parameters: '(a,{this.b: 42})',
              body: ';'),
          const Visit(VisitKind.VISIT_REQUIRED_PARAMETER_DECL,
              element: 'parameter(#a)', index: 0),
          const Visit(VisitKind.VISIT_NAMED_INITIALIZING_FORMAL_DECL,
              element: 'initializing_formal(#b)', constant: 42),
          const Visit(VisitKind.VISIT_IMPLICIT_SUPER_CONSTRUCTOR_INVOKE,
              element: 'generative_constructor(Object#)', type: 'Object'),
        ],
        method: ''),
    const Test.clazz(
        '''
        class C {
          C(a, b) : super();
        }
        ''',
        const [
          const Visit(VisitKind.VISIT_GENERATIVE_CONSTRUCTOR_DECL,
              element: 'generative_constructor(C#)',
              parameters: '(a,b)',
              body: ';'),
          const Visit(VisitKind.VISIT_REQUIRED_PARAMETER_DECL,
              element: 'parameter(#a)', index: 0),
          const Visit(VisitKind.VISIT_REQUIRED_PARAMETER_DECL,
              element: 'parameter(#b)', index: 1),
          const Visit(VisitKind.VISIT_SUPER_CONSTRUCTOR_INVOKE,
              element: 'generative_constructor(Object#)',
              type: 'Object',
              arguments: '()',
              selector: 'CallStructure(arity=0)'),
        ],
        method: ''),
    const Test.clazz(
        '''
        class C {
          var field;
          C(a, b) : this.field = a;
        }
        ''',
        const [
          const Visit(VisitKind.VISIT_GENERATIVE_CONSTRUCTOR_DECL,
              element: 'generative_constructor(C#)',
              parameters: '(a,b)',
              body: ';'),
          const Visit(VisitKind.VISIT_REQUIRED_PARAMETER_DECL,
              element: 'parameter(#a)', index: 0),
          const Visit(VisitKind.VISIT_REQUIRED_PARAMETER_DECL,
              element: 'parameter(#b)', index: 1),
          const Visit(VisitKind.VISIT_FIELD_INITIALIZER,
              element: 'field(C#field)', rhs: 'a'),
          const Visit(VisitKind.VISIT_IMPLICIT_SUPER_CONSTRUCTOR_INVOKE,
              element: 'generative_constructor(Object#)', type: 'Object'),
        ],
        method: ''),
    const Test.clazz(
        '''
        class C {
          var field1;
          var field2;
          C(a, b) : this.field1 = a, this.field2 = b;
        }
        ''',
        const [
          const Visit(VisitKind.VISIT_GENERATIVE_CONSTRUCTOR_DECL,
              element: 'generative_constructor(C#)',
              parameters: '(a,b)',
              body: ';'),
          const Visit(VisitKind.VISIT_REQUIRED_PARAMETER_DECL,
              element: 'parameter(#a)', index: 0),
          const Visit(VisitKind.VISIT_REQUIRED_PARAMETER_DECL,
              element: 'parameter(#b)', index: 1),
          const Visit(VisitKind.VISIT_FIELD_INITIALIZER,
              element: 'field(C#field1)', rhs: 'a'),
          const Visit(VisitKind.VISIT_FIELD_INITIALIZER,
              element: 'field(C#field2)', rhs: 'b'),
          const Visit(VisitKind.VISIT_IMPLICIT_SUPER_CONSTRUCTOR_INVOKE,
              element: 'generative_constructor(Object#)', type: 'Object'),
        ],
        method: ''),
    const Test.clazz(
        '''
        class C {
          C(a, b) : this._(a, b);
          C._(a, b);
        }
        ''',
        const [
          const Visit(VisitKind.VISIT_REDIRECTING_GENERATIVE_CONSTRUCTOR_DECL,
              element: 'generative_constructor(C#)',
              parameters: '(a,b)',
              initializers: ':this._(a,b)'),
          const Visit(VisitKind.VISIT_REQUIRED_PARAMETER_DECL,
              element: 'parameter(#a)', index: 0),
          const Visit(VisitKind.VISIT_REQUIRED_PARAMETER_DECL,
              element: 'parameter(#b)', index: 1),
          const Visit(VisitKind.VISIT_THIS_CONSTRUCTOR_INVOKE,
              element: 'generative_constructor(C#_)',
              arguments: '(a,b)',
              selector: 'CallStructure(arity=2)'),
        ],
        method: ''),
    const Test.clazz(
        '''
        class C {
          factory C(a, b) => null;
        }
        ''',
        const [
          const Visit(VisitKind.VISIT_FACTORY_CONSTRUCTOR_DECL,
              element: 'factory_constructor(C#)',
              parameters: '(a,b)',
              body: '=>null;'),
          const Visit(VisitKind.VISIT_REQUIRED_PARAMETER_DECL,
              element: 'parameter(#a)', index: 0),
          const Visit(VisitKind.VISIT_REQUIRED_PARAMETER_DECL,
              element: 'parameter(#b)', index: 1),
        ],
        method: ''),
    const Test.clazz(
        '''
        class C {
          factory C(a, b) = C._;
          C._(a, b);
        }
        ''',
        const [
          const Visit(VisitKind.VISIT_REDIRECTING_FACTORY_CONSTRUCTOR_DECL,
              element: 'factory_constructor(C#)',
              parameters: '(a,b)',
              target: 'generative_constructor(C#_)',
              type: 'C'),
          const Visit(VisitKind.VISIT_REQUIRED_PARAMETER_DECL,
              element: 'parameter(#a)', index: 0),
          const Visit(VisitKind.VISIT_REQUIRED_PARAMETER_DECL,
              element: 'parameter(#b)', index: 1),
        ],
        method: ''),
    const Test.clazz(
        '''
        class C {
          factory C(a, b) = D;
        }
        class D<T> {
          D(a, b);
        }
        ''',
        const [
          const Visit(VisitKind.VISIT_REDIRECTING_FACTORY_CONSTRUCTOR_DECL,
              element: 'factory_constructor(C#)',
              parameters: '(a,b)',
              target: 'generative_constructor(D#)',
              type: 'D'),
          const Visit(VisitKind.VISIT_REQUIRED_PARAMETER_DECL,
              element: 'parameter(#a)', index: 0),
          const Visit(VisitKind.VISIT_REQUIRED_PARAMETER_DECL,
              element: 'parameter(#b)', index: 1),
        ],
        method: ''),
    const Test.clazz(
        '''
        class C {
          factory C(a, b) = D<int>;
        }
        class D<T> {
          D(a, b);
        }
        ''',
        const [
          const Visit(VisitKind.VISIT_REDIRECTING_FACTORY_CONSTRUCTOR_DECL,
              element: 'factory_constructor(C#)',
              parameters: '(a,b)',
              target: 'generative_constructor(D#)',
              type: 'D<int>'),
          const Visit(VisitKind.VISIT_REQUIRED_PARAMETER_DECL,
              element: 'parameter(#a)', index: 0),
          const Visit(VisitKind.VISIT_REQUIRED_PARAMETER_DECL,
              element: 'parameter(#b)', index: 1),
        ],
        method: ''),
    const Test.clazz(
        '''
        class C {
          factory C(a, b) = D<int>;
        }
        class D<T> {
          factory D(a, b) = E<D<T>>;
        }
        class E<S> {
          E(a, b);
        }
        ''',
        const [
          const Visit(VisitKind.VISIT_REDIRECTING_FACTORY_CONSTRUCTOR_DECL,
              element: 'factory_constructor(C#)',
              parameters: '(a,b)',
              target: 'factory_constructor(D#)',
              type: 'D<int>'),
          const Visit(VisitKind.VISIT_REQUIRED_PARAMETER_DECL,
              element: 'parameter(#a)', index: 0),
          const Visit(VisitKind.VISIT_REQUIRED_PARAMETER_DECL,
              element: 'parameter(#b)', index: 1),
        ],
        method: ''),
  ],
  "Field declarations": const [
    const Test.clazz(
        '''
        class C {
          var m;
        }
        ''',
        const [
          const Visit(VisitKind.VISIT_INSTANCE_FIELD_DECL,
              element: 'field(C#m)'),
        ]),
    const Test.clazz(
        '''
        class C {
          var m, n;
        }
        ''',
        const [
          const Visit(VisitKind.VISIT_INSTANCE_FIELD_DECL,
              element: 'field(C#m)'),
          const Visit(VisitKind.VISIT_INSTANCE_FIELD_DECL,
              element: 'field(C#n)'),
        ]),
    const Test.clazz(
        '''
        class C {
          var m = 42;
        }
        ''',
        const [
          const Visit(VisitKind.VISIT_INSTANCE_FIELD_DECL,
              element: 'field(C#m)', rhs: 42),
        ]),
    const Test(
        '''
        m() {
          var local;
        }
        ''',
        const [
          const Visit(VisitKind.VISIT_TOP_LEVEL_FUNCTION_DECL,
              element: 'function(m)', parameters: '()', body: '{var local;}'),
          const Visit(VisitKind.VISIT_LOCAL_VARIABLE_DECL,
              element: 'variable(m#local)'),
        ]),
    const Test(
        '''
        m() {
          var local = 42;
        }
        ''',
        const [
          const Visit(VisitKind.VISIT_TOP_LEVEL_FUNCTION_DECL,
              element: 'function(m)',
              parameters: '()',
              body: '{var local=42;}'),
          const Visit(VisitKind.VISIT_LOCAL_VARIABLE_DECL,
              element: 'variable(m#local)', rhs: 42),
        ]),
    const Test(
        '''
        m() {
          const local = 42;
        }
        ''',
        const [
          const Visit(VisitKind.VISIT_TOP_LEVEL_FUNCTION_DECL,
              element: 'function(m)',
              parameters: '()',
              body: '{const local=42;}'),
          const Visit(VisitKind.VISIT_LOCAL_CONSTANT_DECL,
              element: 'variable(m#local)', constant: 42),
        ]),
    const Test(
        '''
        m() {
          var local1, local2;
        }
        ''',
        const [
          const Visit(VisitKind.VISIT_TOP_LEVEL_FUNCTION_DECL,
              element: 'function(m)',
              parameters: '()',
              body: '{var local1,local2;}'),
          const Visit(VisitKind.VISIT_LOCAL_VARIABLE_DECL,
              element: 'variable(m#local1)'),
          const Visit(VisitKind.VISIT_LOCAL_VARIABLE_DECL,
              element: 'variable(m#local2)'),
        ]),
    const Test(
        '''
        m() {
          var local1 = 42, local2 = true;
        }
        ''',
        const [
          const Visit(VisitKind.VISIT_TOP_LEVEL_FUNCTION_DECL,
              element: 'function(m)',
              parameters: '()',
              body: '{var local1=42,local2=true;}'),
          const Visit(VisitKind.VISIT_LOCAL_VARIABLE_DECL,
              element: 'variable(m#local1)', rhs: 42),
          const Visit(VisitKind.VISIT_LOCAL_VARIABLE_DECL,
              element: 'variable(m#local2)', rhs: true),
        ]),
    const Test(
        '''
        m() {
          const local1 = 42, local2 = true;
        }
        ''',
        const [
          const Visit(VisitKind.VISIT_TOP_LEVEL_FUNCTION_DECL,
              element: 'function(m)',
              parameters: '()',
              body: '{const local1=42,local2=true;}'),
          const Visit(VisitKind.VISIT_LOCAL_CONSTANT_DECL,
              element: 'variable(m#local1)', constant: 42),
          const Visit(VisitKind.VISIT_LOCAL_CONSTANT_DECL,
              element: 'variable(m#local2)', constant: true),
        ]),
    const Test.clazz(
        '''
        class C {
          static var m;
        }
        ''',
        const [
          const Visit(VisitKind.VISIT_STATIC_FIELD_DECL, element: 'field(C#m)'),
        ]),
    const Test.clazz(
        '''
        class C {
          static var m, n;
        }
        ''',
        const [
          const Visit(VisitKind.VISIT_STATIC_FIELD_DECL, element: 'field(C#m)'),
          const Visit(VisitKind.VISIT_STATIC_FIELD_DECL, element: 'field(C#n)'),
        ]),
    const Test.clazz(
        '''
        class C {
          static var k, l, m, n;
        }
        ''',
        const [
          const Visit(VisitKind.VISIT_STATIC_FIELD_DECL, element: 'field(C#k)'),
          const Visit(VisitKind.VISIT_STATIC_FIELD_DECL, element: 'field(C#l)'),
          const Visit(VisitKind.VISIT_STATIC_FIELD_DECL, element: 'field(C#m)'),
          const Visit(VisitKind.VISIT_STATIC_FIELD_DECL, element: 'field(C#n)'),
        ]),
    const Test.clazz(
        '''
        class C {
          static var m = 42;
        }
        ''',
        const [
          const Visit(VisitKind.VISIT_STATIC_FIELD_DECL,
              element: 'field(C#m)', rhs: 42),
        ]),
    const Test.clazz(
        '''
        class C {
          static var m = 42, n = true;
        }
        ''',
        const [
          const Visit(VisitKind.VISIT_STATIC_FIELD_DECL,
              element: 'field(C#m)', rhs: 42),
          const Visit(VisitKind.VISIT_STATIC_FIELD_DECL,
              element: 'field(C#n)', rhs: true),
        ]),
    const Test.clazz(
        '''
        class C {
          static const m = 42;
        }
        ''',
        const [
          const Visit(VisitKind.VISIT_STATIC_CONSTANT_DECL,
              element: 'field(C#m)', constant: 42),
        ]),
    const Test(
        '''
        var m;
        ''',
        const [
          const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_DECL,
              element: 'field(m)'),
        ]),
    const Test(
        '''
        var m, n;
        ''',
        const [
          const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_DECL,
              element: 'field(m)'),
          const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_DECL,
              element: 'field(n)'),
        ]),
    const Test(
        '''
        var m = 42;
        ''',
        const [
          const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_DECL,
              element: 'field(m)', rhs: 42),
        ]),
    const Test(
        '''
        const m = 42;
        ''',
        const [
          const Visit(VisitKind.VISIT_TOP_LEVEL_CONSTANT_DECL,
              element: 'field(m)', constant: 42),
        ]),
  ],
};
