anchor.diff:  
       group('Expression compiler scope collection tests', () {
         var source = '''
  -        ${setup.dartLangComment}
  -
           class C {
             C(this.field);
   
  
positive.code:               }''');
        });
      });
    });
  
    group('Sound null safety:', () {
  
negative.code:         returnByValue: false);
  
      await debugger.removeBreakpoint(bp.breakpointId);
      var value = await stringifyRemoteObject(evalResult);
  
      expect(
          result,
          const TypeMatcher<TestCompilationResult>()
              .having((_) => '$value', 'result', _matches(expectedResult)));
    }
  
    /// Generate simple string representation of a RemoteObject that closely
    /// resembles Chrome's console output.
    ///
    /// Examples:
    /// Class: t.C.new {Symbol(C.field): 5, Symbol(_field): 7}
    /// Function: function main() {
    ///             return test.foo(1, {y: 2});
    ///           }
    Future<String> stringifyRemoteObject(wip.RemoteObject obj) async {
      String str;
      switch (obj.type) {
        case 'function':
          str = obj.description;
          break;
        case 'object':
          if (obj.subtype == 'null') {
            return 'null';
          }
          var properties =
              await connection.runtime.getProperties(obj, ownProperties: true);
          var filteredProps = <String, String>{};
          for (var prop in properties) {
            if (prop.value != null && prop.name != '__proto__') {
              filteredProps[prop.name] = await stringifyRemoteObject(prop.value);
            }
          }
          str = '${obj.description} $filteredProps';
          break;
        default:
          str = '${obj.value}';
          break;
      }
      return str;
    }
  
    /// Collects local JS variables visible at a breakpoint during evaluation.
  