anchor.diff:      for (final test in tests) {
         if (test.approvedResultData == null) continue;
         if (test.result == null &&
  -          (test.approvedResultData["preapprovals"] ?? "").isEmpty) continue;
  +          (test.approvedResultData["preapprovals"] ?? <dynamic>[]).isEmpty) {
  +        continue;
  +      }
         final approvalData = deepClone(test.approvedResultData);
         // TODO(https://github.com/dart-lang/sdk/issues/36279): Remove needless
         // fields that shouldn't be in the approvals data. Remove this 2019-04-03.
  
positive.code:   Map<String, dynamic> get _sharedData =>
        resultData ?? baselineData ?? approvedResultData;
    String get name => _sharedData["name"];
    String get configuration => _sharedData["configuration"] ?? "";
    String get key => "$configuration:$name";
    String get expected => _sharedData["expected"];
    String get result => (resultData ?? const {})["result"];
  
negative.code:           test.bot, () => new SplayTreeMap<String, Map<String, dynamic>>());
        final approvalData =
            newApprovals.putIfAbsent(test.key, () => <String, dynamic>{});
        approvalData["name"] = test.name;
        approvalData["configuration"] = test.configuration;
        approvalData["suite"] = test.resultData["suite"];
        approvalData["test_name"] = test.resultData["test_name"];
        final preapprovals =
            approvalData.putIfAbsent("preapprovals", () => <String, dynamic>{});
        final preapproval =
  