// Copyright (c) 2013, 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

library transition_event_test;

import 'dart:html';
import 'dart:async';

import 'package:expect/async_helper.dart';
import 'package:expect/legacy/minitest.dart'; // ignore: deprecated_member_use_from_same_package

Future testTransitionEnd() async {
  var element = new DivElement();
  document.body!.append(element);

  element.style.opacity = '0';
  element.style.width = '100px';
  element.style.height = '100px';
  element.style.background = 'red';
  element.style.transition = 'opacity .1s';
  final eventFuture = element.onTransitionEnd.first;
  await Future.delayed(const Duration(milliseconds: 100));
  element.style.opacity = '1';
  final e = await eventFuture;
  expect(e is TransitionEvent, isTrue);
  expect(e.propertyName, 'opacity');
}

main() {
  asyncTest(() async {
    expect(CssStyleDeclaration.supportsTransitions, isTrue);
    if (CssStyleDeclaration.supportsTransitions) {
      await testTransitionEnd();
    }
  });
}
