| Index: tests/html/history_test.dart
 | 
| diff --git a/tests/html/history_test.dart b/tests/html/history_test.dart
 | 
| index 62dbc9c4010af904daf462b985b8897382c0a4e0..bce3674de18efa816b06e7e2f959082e6080467a 100644
 | 
| --- a/tests/html/history_test.dart
 | 
| +++ b/tests/html/history_test.dart
 | 
| @@ -1,18 +1,66 @@
 | 
|  library HistoryTest;
 | 
|  import '../../pkg/unittest/lib/unittest.dart';
 | 
| -import '../../pkg/unittest/lib/html_config.dart';
 | 
| +import '../../pkg/unittest/lib/html_individual_config.dart';
 | 
|  import 'dart:html';
 | 
|  
 | 
| +/// Waits for a callback once, then removes the event handler.
 | 
| +void expectAsync1Once(EventListenerList list, void callback(arg)) {
 | 
| +  var fn = null;
 | 
| +  fn = expectAsync1((arg) {
 | 
| +    list.remove(fn);
 | 
| +    callback(arg);
 | 
| +  });
 | 
| +  list.add(fn);
 | 
| +}
 | 
| +
 | 
|  main() {
 | 
| -  useHtmlConfiguration();
 | 
| -  test('History', () {
 | 
| -    window.history.pushState(null, document.title, '?foo=bar');
 | 
| -    expect(window.history.length, equals(2));
 | 
| -    window.history.back();
 | 
| -    expect(window.location.href.endsWith('foo=bar'), isTrue);
 | 
| -
 | 
| -    window.history.replaceState(null, document.title, '?foo=baz');
 | 
| -    expect(window.history.length, equals(2));
 | 
| -    expect(window.location.href.endsWith('foo=baz'), isTrue);
 | 
| +  useHtmlIndividualConfiguration();
 | 
| +
 | 
| +  group('supported_state', () {
 | 
| +    test('supportsState', () {
 | 
| +      expect(History.supportsState, true);
 | 
| +    });
 | 
| +  });
 | 
| +
 | 
| +  var expectation = History.supportsState ? returnsNormally : throws;
 | 
| +
 | 
| +  group('history', () {
 | 
| +    test('pushState', () {
 | 
| +      expect(() {
 | 
| +        window.history.pushState(null, document.title, '?dummy');
 | 
| +        var length = window.history.length;
 | 
| +
 | 
| +        window.history.pushState(null, document.title, '?foo=bar');
 | 
| +        expect(window.history.length, length + 1);
 | 
| +        expect(window.location.href.endsWith('foo=bar'), isTrue);
 | 
| +      }, expectation);
 | 
| +    });
 | 
| +
 | 
| +    test('back', () {
 | 
| +      expect(() {
 | 
| +        window.history.pushState(null, document.title, '?dummy1');
 | 
| +        window.history.pushState(null, document.title, '?dummy2');
 | 
| +        var length = window.history.length;
 | 
| +
 | 
| +        expect(window.location.href.endsWith('dummy2'), isTrue);
 | 
| +
 | 
| +        expectAsync1Once(window.on.popState, (_) {
 | 
| +          expect(window.history.length, length);
 | 
| +          expect(window.location.href.endsWith('dummy1'), isTrue);
 | 
| +        });
 | 
| +
 | 
| +        window.history.back();
 | 
| +      }, expectation);
 | 
| +    });
 | 
| +
 | 
| +    test('replaceState', () {
 | 
| +      expect(() {
 | 
| +        var length = window.history.length;
 | 
| +
 | 
| +        window.history.replaceState(null, document.title, '?foo=baz');
 | 
| +        expect(window.history.length, length);
 | 
| +        expect(window.location.href.endsWith('foo=baz'), isTrue);
 | 
| +      }, expectation);
 | 
| +    });
 | 
|    });
 | 
|  }
 | 
| 
 |