// Copyright 2014 The Flutter 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] as 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 (final Type key in otherExpectedValues.keys) {
      expect(otherActualValues[key], otherExpectedValues[key]);
    }
  });
}
