// 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/minitest.dart';

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 done = new Completer();

  new Timer(const Duration(milliseconds: 100), () {
    element.onTransitionEnd.first.then((e) {
      expect(e is TransitionEvent, isTrue);
      expect(e.propertyName, 'opacity');
    }).then(done.complete, onError: done.completeError);

    element.style.opacity = '1';
  });

  await done.future;
}

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