[web] Fix url strategy null safety (#79888)

This commit is contained in:
Mouad Debbar 2021-04-06 17:59:03 -07:00 committed by GitHub
parent eb9a2f0ca5
commit 458f6f4513
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 25 additions and 16 deletions

View File

@ -90,12 +90,12 @@ abstract class JsUrlStrategy {
/// Push a new history entry. /// Push a new history entry.
/// ///
/// See: https://developer.mozilla.org/en-US/docs/Web/API/History/pushState /// See: https://developer.mozilla.org/en-US/docs/Web/API/History/pushState
external void pushState(Object state, String title, String url); external void pushState(Object? state, String title, String url);
/// Replace the currently active history entry. /// Replace the currently active history entry.
/// ///
/// See: https://developer.mozilla.org/en-US/docs/Web/API/History/replaceState /// See: https://developer.mozilla.org/en-US/docs/Web/API/History/replaceState
external void replaceState(Object state, String title, String url); external void replaceState(Object? state, String title, String url);
/// Moves forwards or backwards through the history stack. /// Moves forwards or backwards through the history stack.
/// ///

View File

@ -48,12 +48,12 @@ abstract class UrlStrategy {
/// Push a new history entry. /// Push a new history entry.
/// ///
/// See: https://developer.mozilla.org/en-US/docs/Web/API/History/pushState /// See: https://developer.mozilla.org/en-US/docs/Web/API/History/pushState
void pushState(Object state, String title, String url); void pushState(Object? state, String title, String url);
/// Replace the currently active history entry. /// Replace the currently active history entry.
/// ///
/// See: https://developer.mozilla.org/en-US/docs/Web/API/History/replaceState /// See: https://developer.mozilla.org/en-US/docs/Web/API/History/replaceState
void replaceState(Object state, String title, String url); void replaceState(Object? state, String title, String url);
/// Moves forwards or backwards through the history stack. /// Moves forwards or backwards through the history stack.
/// ///
@ -129,12 +129,12 @@ class HashUrlStrategy extends UrlStrategy {
} }
@override @override
void pushState(Object state, String title, String url) { void pushState(Object? state, String title, String url) {
_platformLocation.pushState(state, title, prepareExternalUrl(url)); _platformLocation.pushState(state, title, prepareExternalUrl(url));
} }
@override @override
void replaceState(Object state, String title, String url) { void replaceState(Object? state, String title, String url) {
_platformLocation.replaceState(state, title, prepareExternalUrl(url)); _platformLocation.replaceState(state, title, prepareExternalUrl(url));
} }
@ -245,12 +245,12 @@ abstract class PlatformLocation {
/// Adds a new entry to the browser history stack. /// Adds a new entry to the browser history stack.
/// ///
/// See: https://developer.mozilla.org/en-US/docs/Web/API/History/pushState /// See: https://developer.mozilla.org/en-US/docs/Web/API/History/pushState
void pushState(Object state, String title, String url); void pushState(Object? state, String title, String url);
/// Replaces the current entry in the browser history stack. /// Replaces the current entry in the browser history stack.
/// ///
/// See: https://developer.mozilla.org/en-US/docs/Web/API/History/replaceState /// See: https://developer.mozilla.org/en-US/docs/Web/API/History/replaceState
void replaceState(Object state, String title, String url); void replaceState(Object? state, String title, String url);
/// Moves forwards or backwards through the history stack. /// Moves forwards or backwards through the history stack.
/// ///
@ -310,12 +310,12 @@ class BrowserPlatformLocation extends PlatformLocation {
Object? get state => _history.state; Object? get state => _history.state;
@override @override
void pushState(Object state, String title, String url) { void pushState(Object? state, String title, String url) {
_history.pushState(state, title, url); _history.pushState(state, title, url);
} }
@override @override
void replaceState(Object state, String title, String url) { void replaceState(Object? state, String title, String url) {
_history.replaceState(state, title, url); _history.replaceState(state, title, url);
} }

View File

@ -17,6 +17,12 @@ void main() {
location = TestPlatformLocation(); location = TestPlatformLocation();
}); });
test('allows null state', () {
final HashUrlStrategy strategy = HashUrlStrategy(location);
expect(() => strategy.pushState(null, '', '/'), returnsNormally);
expect(() => strategy.replaceState(null, '', '/'), returnsNormally);
});
test('leading slash is optional', () { test('leading slash is optional', () {
final HashUrlStrategy strategy = HashUrlStrategy(location); final HashUrlStrategy strategy = HashUrlStrategy(location);
@ -48,6 +54,13 @@ void main() {
location = TestPlatformLocation(); location = TestPlatformLocation();
}); });
test('allows null state', () {
location.baseHref = '/';
final PathUrlStrategy strategy = PathUrlStrategy(location);
expect(() => strategy.pushState(null, '', '/'), returnsNormally);
expect(() => strategy.replaceState(null, '', '/'), returnsNormally);
});
test('validates base href', () { test('validates base href', () {
location.baseHref = '/'; location.baseHref = '/';
expect( expect(
@ -159,14 +172,10 @@ class TestPlatformLocation extends PlatformLocation {
} }
@override @override
void pushState(dynamic state, String title, String url) { void pushState(Object? state, String title, String url) {}
throw UnimplementedError();
}
@override @override
void replaceState(dynamic state, String title, String url) { void replaceState(Object? state, String title, String url) {}
throw UnimplementedError();
}
@override @override
void go(int count) { void go(int count) {