// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'dart:async';

import 'package:flutter_test/flutter_test.dart';

void testConfig(
  String description,
  String expectedStringValue, {
  Map<Type, dynamic> otherExpectedValues = const <Type, dynamic>{int: isNull},
}) {
  final String actualStringValue = Zone.current[String];
  final Map<Type, dynamic> otherActualValues = otherExpectedValues.map<Type, dynamic>(
    (Type key, dynamic value) {
      return MapEntry<Type, dynamic>(key, Zone.current[key]);
    },
  );

  test(description, () {
    expect(actualStringValue, expectedStringValue);
    for (Type key in otherExpectedValues.keys) {
      expect(otherActualValues[key], otherExpectedValues[key]);
    }
  });
}
