// Copyright 2019 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.

// @dart = 2.6
import 'dart:ui';
import 'package:test/test.dart' hide TypeMatcher, isInstanceOf;

/// Verifies Semantics flags and actions.
void main() {
  // This must match the number of flags in lib/ui/semantics.dart
  const int numSemanticsFlags = 23;
  test('SemanticsFlag.values refers to all flags.', () async {
    expect(SemanticsFlag.values.length, equals(numSemanticsFlags));
    for (int index = 0; index < numSemanticsFlags; ++index) {
      final int flag = 1 << index;
      expect(SemanticsFlag.values[flag], isNotNull);
      expect(SemanticsFlag.values[flag].toString(), startsWith('SemanticsFlag.'));
    }
  });

  // This must match the number of actions in lib/ui/semantics.dart
  const int numSemanticsActions = 21;
  test('SemanticsAction.values refers to all actions.', () async {
    expect(SemanticsAction.values.length, equals(numSemanticsActions));
    for (int index = 0; index < numSemanticsActions; ++index) {
      final int flag = 1 << index;
      expect(SemanticsAction.values[flag], isNotNull);
      expect(SemanticsAction.values[flag].toString(), startsWith('SemanticsAction.'));
    }
  });
}
