// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

// @dart = 2.9

import 'package:expect/expect.dart';

void main() {
  // Cast for variable.
  dynamic nonInt = "string";
  Expect.throwsTypeError(() => <int>[for (int i = nonInt; false;) 1]);
  Expect.throwsTypeError(() => <int, int>{for (int i = nonInt; false;) 1: 1});
  Expect.throwsTypeError(() => <int>{for (int i = nonInt; false;) 1});

  // Cast for-in variable.
  dynamic nonIterable = 3;
  Expect.throwsTypeError(() => <int>[for (int i in nonIterable) 1]);
  Expect.throwsTypeError(() => <int, int>{for (int i in nonIterable) 1: 1});
  Expect.throwsTypeError(() => <int>{for (int i in nonIterable) 1});

  // Wrong element type.
  Expect.throwsTypeError(() => <int>[for (var i = 0; i < 1; i++) nonInt]);
  Expect.throwsTypeError(
      () => <int, int>{for (var i = 0; i < 1; i++) nonInt: 1});
  Expect.throwsTypeError(
      () => <int, int>{for (var i = 0; i < 1; i++) 1: nonInt});
  Expect.throwsTypeError(() => <int>{for (var i = 0; i < 1; i++) nonInt});
}
