| // Copyright (c) 2020, 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 HistoryTest; |
| |
| import 'package:async_helper/async_minitest.dart'; |
| import 'dart:html'; |
| import 'dart:async'; |
| |
| main() { |
| var expectation = History.supportsState ? returnsNormally : throws; |
| |
| 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.location.href.endsWith('foo=bar'), isTrue); |
| }, expectation); |
| }); |
| |
| test('pushState with data', () { |
| expect(() { |
| window.history.pushState({'one': 1}, document.title, '?dummy'); |
| expect(window.history.state, equals({'one': 1})); |
| window.history.pushState(null, document.title, '?foo=bar'); |
| |
| 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); |
| |
| // Need to wait a frame or two to let the pushState events occur. |
| new Timer(const Duration(milliseconds: 100), expectAsync(() { |
| window.onPopState.first.then(expectAsync((_) { |
| 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); |
| }); |
| |
| test('popstatevent', () { |
| expect(() { |
| var event = new Event.eventType('PopStateEvent', 'popstate'); |
| expect(event is PopStateEvent, true); |
| }, expectation); |
| }); |
| |
| test('hashchangeevent', () { |
| var expectation = HashChangeEvent.supported ? returnsNormally : throws; |
| expect(() { |
| var event = new HashChangeEvent('change', oldUrl: 'old', newUrl: 'new'); |
| expect(event is HashChangeEvent, true); |
| expect(event.oldUrl, 'old'); |
| expect(event.newUrl, 'new'); |
| }, expectation); |
| }); |
| } |