// Copyright 2020 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

import 'dart:async';

import 'package:test/test.dart';
import 'package:yaml_edit/yaml_edit.dart';

import 'problem_strings.dart';

void main() {
  for (final string in problemStrings) {
    test('expect string $string', () {
      final doc = YamlEditor('');

      /// Using [runZoned] to hide `package:yaml`'s warnings.
      /// Test failures and errors will still be shown.
      runZoned(() {
        expect(() => doc.update([], string), returnsNormally);
        final value = doc.parseAt([]).value;
        expect(value, isA<String>());
        expect(value, equals(string));
      },
          zoneSpecification: ZoneSpecification(
              print: (Zone self, ZoneDelegate parent, Zone zone,
                  String message) {}));
    });
  }
}
