library NotificationsTest;
import '../../pkg/unittest/lib/unittest.dart';
import '../../pkg/unittest/lib/html_individual_config.dart';
import 'dart:html';

main() {
  useHtmlIndividualConfiguration();

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

  group('unsupported_throws', () {
    test('createNotification', () {
      var expectation = NotificationCenter.supported ? returnsNormally : throws;
      expect(() { window.notifications.createNotification; }, expectation);
    });
  });

  group('webkitNotifications', () {
    if (NotificationCenter.supported) {
      test('DomException', () {
        try {
          window.notifications.createNotification('', '', '');
        } on DomException catch (e) {
          expect(e.name, DomException.SECURITY);
        }
      });

      /*
      // Sporadically flaky on Mac Chrome. Uncomment when Issue 8482 is fixed.
      test('construct notification', () {
        var note = new Notification('this is a notification');
        var note2 = new Notification('another notificiation',
          {'option1': 'foo'});
      });
      */
    }
  });
}

