// 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 '../../pkg/unittest/lib/unittest.dart';
import '../../pkg/unittest/lib/html_individual_config.dart';
import 'dart:html';
import 'dart:async';

main() {
  useHtmlIndividualConfiguration();

  group('supported', () {
    test('supported', () {
      expect(CssStyleDeclaration.supportsTransitions, true);
    });
  });

  group('functional', () {
    test('transitionEnd', () {
      if (CssStyleDeclaration.supportsTransitions) {
        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';

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

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