summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/navigation-api/navigate-event/event-constructor.html
blob: 89ac934020eec9c7771b2fbd608a95e730b5d093 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
<!doctype html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
test(() => {
  assert_throws_js(TypeError, () => {
    new NavigateEvent("navigate");
  });
}, "can't bypass required members by omitting the dictionary entirely");

test(() => {
  assert_throws_js(TypeError, () => {
    new NavigateEvent("navigate", {
      navigationType: "push",
      canIntercept: false,
      userInitiated: false,
      hashChange: false,
      signal: (new AbortController()).signal,
      formData: null,
      downloadRequest: null,
      info: null,
      sourceElement: null
    });
  });
}, "destination is required");

async_test(t => {
  // We need to grab an NavigationDestination.
  navigation.onnavigate = t.step_func_done(e => {
    assert_throws_js(TypeError, () => {
      new NavigateEvent("navigate", {
        navigationType: "push",
        destination: e.destination,
        canIntercept: false,
        userInitiated: false,
        hashChange: false,
        formData: null,
        downloadRequest: null,
        info: null,
        sourceElement: null
      });
    });
  });
  history.pushState(1, null, "#1");
}, "signal is required");

async_test(t => {
  // We need to grab an NavigationDestination.
  navigation.onnavigate = t.step_func_done(e => {
    const info = { some: "object with identity" };
    const formData = new FormData();
    const signal = (new AbortController()).signal;
    const downloadRequest = "abc";
    const hasUAVisualTransition = true;
    const sourceElement = document.createElement("a");

    const event = new NavigateEvent("navigate", {
      navigationType: "replace",
      destination: e.destination,
      canIntercept: true,
      userInitiated: true,
      hashChange: true,
      signal,
      formData,
      downloadRequest,
      info,
      hasUAVisualTransition,
      sourceElement
    });

    assert_equals(event.navigationType, "replace");
    assert_equals(event.destination, e.destination);
    assert_equals(event.canIntercept, true);
    assert_equals(event.userInitiated, true);
    assert_equals(event.hashChange, true);
    assert_equals(event.signal, signal);
    assert_equals(event.formData, formData);
    assert_equals(event.downloadRequest, downloadRequest);
    assert_equals(event.info, info);
    assert_equals(event.hasUAVisualTransition, hasUAVisualTransition);
    // NavigateEvent sourceElement is still in development, so test whether it is available.
    if ("sourceElement" in e) assert_equals(event.sourceElement, sourceElement);
  });
  history.pushState(2, null, "#2");
}, "all properties are reflected back");

async_test(t => {
  // We need to grab an NavigationDestination.
  navigation.onnavigate = t.step_func_done(e => {
    const event = new NavigateEvent("navigate", {
      destination: e.destination,
      signal: (new AbortController()).signal
    });

    assert_equals(event.navigationType, "push");
    assert_equals(event.canIntercept, false);
    assert_equals(event.userInitiated, false);
    assert_equals(event.hashChange, false);
    assert_equals(event.formData, null);
    assert_equals(event.downloadRequest, null);
    assert_equals(event.info, undefined);
    // NavigateEvent sourceElement is still in development, so test whether it is available.
    if ("sourceElement" in e) assert_equals(event.sourceElement, null);
  });
  history.pushState(3, null, "#3");
}, "defaults are as expected");

async_test(t => {
  navigation.onnavigate = t.step_func_done(e => {
    const event = new NavigateEvent("navigate", {
      destination: e.destination,
      signal: (new AbortController()).signal
    });

    assert_false(event.hasUAVisualTransition);
  });
  history.pushState(3, null, "#3");
}, "hasUAVisualTransition is default false");
</script>