Skip to content

Commit 952f99c

Browse files
committed
test(html): Convert window base and history tests
Migrate tests from ginkgo to testify suites
1 parent 267470d commit 952f99c

File tree

2 files changed

+243
-247
lines changed

2 files changed

+243
-247
lines changed

html/window_history_test.go

+224
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,224 @@
1+
package html_test
2+
3+
import (
4+
"testing"
5+
6+
"github.com/stretchr/testify/suite"
7+
8+
"github.com/gost-dom/browser/dom/event"
9+
"github.com/gost-dom/browser/html"
10+
. "github.com/gost-dom/browser/html"
11+
. "github.com/gost-dom/browser/internal/testing/gomega-matchers"
12+
"github.com/gost-dom/browser/internal/testing/gosttest"
13+
. "github.com/gost-dom/browser/testing/gomega-matchers"
14+
)
15+
16+
type WindowHistoryTestSuite struct {
17+
gosttest.GomegaSuite
18+
win html.Window
19+
h *gosttest.EchoHandler
20+
}
21+
22+
func (s *WindowHistoryTestSuite) History() *html.History {
23+
return s.win.History()
24+
}
25+
26+
func (s *WindowHistoryTestSuite) SetupTest() {
27+
s.h = new(gosttest.EchoHandler)
28+
s.win = html.NewWindow(windowOptionHandler(s.h))
29+
}
30+
31+
func (s *WindowHistoryTestSuite) TestWithNewWindow() {
32+
s.Expect(s.History().Length()).To(Equal(1), "History entries")
33+
}
34+
35+
func (s *WindowHistoryTestSuite) TestHistoryAfterNavigating() {
36+
s.Expect(s.win.Navigate("/page-2")).To(Succeed())
37+
s.Expect(s.win.History().Length()).To(Equal(2), "History length after navigating")
38+
}
39+
40+
func (s *WindowHistoryTestSuite) TestReloadWithGoMethod() {
41+
s.Expect(s.win.Navigate("/page-2")).To(Succeed())
42+
s.Expect(s.History().Length()).To(Equal(2), "History length after navigate")
43+
// about:blank wasn't a request
44+
s.Expect(s.h.RequestCount()).To(Equal(1), "No of HTTP requests")
45+
s.Expect(s.History().Go(0)).To(Succeed())
46+
s.Expect(s.History().Length()).To(Equal(2), "History length after reload")
47+
s.Expect(s.h.RequestCount()).To(Equal(2), "No of HTTP requests") // about:blank wasn't a request
48+
}
49+
50+
func (s *WindowHistoryTestSuite) TestNavigate() {
51+
s.Expect(s.win.Navigate("/page-2")).To(Succeed())
52+
s.Expect(s.win.History().Length()).To(Equal(2))
53+
s.Expect(s.win.Document()).To(HaveH1("/page-2"), "Document contents reflect page")
54+
}
55+
56+
func (s *WindowHistoryTestSuite) TestGoBackOnce() {
57+
s.Expect(s.win.Navigate("/page-2")).To(Succeed())
58+
s.Expect(s.win.History().Go(-1)).To(Succeed())
59+
s.Expect(s.win.Document()).To(HaveH1("Gost-DOM"), "Page content after pack")
60+
s.Expect(s.win.Location().Href()).To(Equal("about:blank"), "Location after back")
61+
}
62+
63+
func (s *WindowHistoryTestSuite) TestGoForward() {
64+
s.Expect(s.win.Navigate("/page-2")).To(Succeed())
65+
s.Expect(s.win.Navigate("/page-3")).To(Succeed())
66+
s.Expect(s.win.Navigate("/page-4")).To(Succeed())
67+
s.Expect(s.win.Navigate("/page-5")).To(Succeed())
68+
s.Expect(s.win.History().Length()).To(Equal(5), "History length after 4 navigates")
69+
s.Expect(s.win.History().Go(-3)).To(Succeed())
70+
s.Expect(s.win.History().Length()).To(Equal(5), "History length after Go(-3)")
71+
s.Expect(s.win.Navigate("/page-6")).To(Succeed())
72+
s.Expect(s.win.History().Length()).To(Equal(3), "History length after Navigate")
73+
s.Expect(s.win.Location().Pathname()).To(Equal("/page-6"), "Location after Navigate")
74+
}
75+
76+
func (s *WindowHistoryTestSuite) TestPopStateEvent() {
77+
s.Expect(s.win.Navigate("/page-2")).To(Succeed())
78+
s.Expect(s.win.History().ReplaceState("page-2 state", "")).To(Succeed())
79+
s.Expect(s.win.History().PushState(EMPTY_STATE, "/page-3")).To(Succeed())
80+
81+
var actualEvent *event.Event
82+
s.win.AddEventListener(
83+
"popstate",
84+
event.NewEventHandlerFunc(func(e *event.Event) error {
85+
actualEvent = e
86+
return nil
87+
}),
88+
)
89+
s.Expect(s.win.History().Go(-1)).To(Succeed())
90+
91+
s.Expect(actualEvent).ToNot(BeNil(), "Event was dispatched")
92+
popEvent, ok := actualEvent.Data.(PopStateEventInit)
93+
s.Expect(ok).To(BeTrue(), "Event is a popstateevent")
94+
s.Expect(popEvent.State).To(BeEquivalentTo("page-2 state"), "Event state")
95+
}
96+
97+
func (s *WindowHistoryTestSuite) TestReplaceState() {
98+
s.Expect(s.win.Navigate("/page-2")).To(Succeed())
99+
s.Expect(s.win.History().Length()).To(Equal(2))
100+
s.Expect(s.win.History().ReplaceState(EMPTY_STATE, "/page-3"))
101+
s.Expect(s.h.RequestCount()).To(Equal(1), "No of HTTP requests")
102+
s.Expect(s.win.History().Length()).To(Equal(2), "History length after ReplaceState")
103+
s.Expect(s.win.Location().Pathname()).To(Equal("/page-3"), "Path after ReplaceState")
104+
}
105+
106+
func TestWindowHistory(t *testing.T) {
107+
suite.Run(t, new(WindowHistoryTestSuite))
108+
}
109+
110+
type WindowHistoryPushStateTestSuite struct {
111+
gosttest.GomegaSuite
112+
win html.Window
113+
h *gosttest.EchoHandler
114+
}
115+
116+
func (s *WindowHistoryPushStateTestSuite) SetupTest() {
117+
s.h = new(gosttest.EchoHandler)
118+
s.win = html.NewWindow(windowOptionHandler(s.h))
119+
s.Expect(s.win.Navigate("/page-2")).To(Succeed())
120+
s.Expect(s.win.Navigate("/page-3")).To(Succeed())
121+
122+
s.Expect(s.win.History().Length()).To(Equal(3))
123+
s.Expect(s.win.History().PushState(EMPTY_STATE, "/page-4"))
124+
}
125+
126+
func TestWindowHistoryPushState(t *testing.T) {
127+
suite.Run(t, new(WindowHistoryPushStateTestSuite))
128+
}
129+
130+
func (s *WindowHistoryPushStateTestSuite) TestPushStateWithFragment() {
131+
eventDispatched := false
132+
s.win.AddEventListener(
133+
"hashchange",
134+
event.NewEventHandlerFunc(func(e *event.Event) error {
135+
eventDispatched = true
136+
return nil
137+
}),
138+
)
139+
s.Expect(s.win.History().PushState(EMPTY_STATE, "/page-4#target"))
140+
s.Expect(eventDispatched).To(BeFalse(), "Fragment hashevent should not be emitted")
141+
}
142+
143+
func (s *WindowHistoryPushStateTestSuite) TestPushStateWithRealPage() {
144+
s.Expect(s.win.History().Length()).To(Equal(4))
145+
s.Expect(s.win.History().Length()).To(Equal(4))
146+
s.Expect(s.win.Location().Pathname()).To(Equal("/page-4"))
147+
s.Expect(s.h.RequestCount()).To(Equal(2), "No of request _after_ pushState")
148+
149+
s.Expect(s.win.History().Back()).To(Succeed())
150+
s.Expect(s.win.History().Length()).To(Equal(4))
151+
s.Expect(s.win.Location().Pathname()).To(Equal("/page-3"))
152+
s.Expect(s.h.RequestCount()).To(Equal(2), "No of request _after_ back")
153+
}
154+
155+
func (s *WindowHistoryPushStateTestSuite) TestPushStateWithEmptyURL() {
156+
s.T().Skip("TODO: Should add a new history entry")
157+
}
158+
159+
type WindowHistoryPushStateWithMultipleEntriesTestSuite struct {
160+
gosttest.GomegaSuite
161+
win html.Window
162+
h *gosttest.EchoHandler
163+
}
164+
165+
func (s *WindowHistoryPushStateWithMultipleEntriesTestSuite) SetupTest() {
166+
s.h = new(gosttest.EchoHandler)
167+
s.win = html.NewWindow(windowOptionHandler(s.h))
168+
169+
s.Expect(s.win.Navigate("/page-2")).To(Succeed())
170+
s.Expect(s.win.Navigate("/page-3")).To(Succeed())
171+
s.Expect(s.win.History().Length()).To(Equal(3))
172+
s.Expect(s.win.History().PushState(EMPTY_STATE, "/page-4"))
173+
s.Expect(s.win.History().PushState(EMPTY_STATE, "/page-5"))
174+
s.Expect(s.win.Navigate("/page-6")).To(Succeed())
175+
s.Expect(s.win.Navigate("/page-7")).To(Succeed())
176+
s.Expect(s.win.History().PushState(EMPTY_STATE, "/page-8"))
177+
s.Expect(s.win.History().PushState(EMPTY_STATE, "/page-9"))
178+
s.Expect(s.win.History().Length()).To(Equal(9))
179+
s.Expect(s.h.RequestCount()).To(Equal(4))
180+
}
181+
182+
func TestWindowHistoryPushStateWithMultipleEntries(t *testing.T) {
183+
suite.Run(t, new(WindowHistoryPushStateWithMultipleEntriesTestSuite))
184+
}
185+
186+
func (s *WindowHistoryPushStateWithMultipleEntriesTestSuite) TestGoBackTwo() {
187+
s.Expect(s.win.History().Go(-2)).To(Succeed())
188+
s.Expect(s.win.History().Length()).To(Equal(9))
189+
s.Expect(s.h.RequestCount()).
190+
To(Equal(4), "No of HTTP requests, a new should _not_ have been made")
191+
s.Expect(s.win.Document().GetElementById("heading")).To(HaveTextContent("/page-7"))
192+
}
193+
194+
func (s *WindowHistoryPushStateWithMultipleEntriesTestSuite) TestGoBackThree() {
195+
s.Expect(s.win.History().Go(-3)).To(Succeed())
196+
s.Expect(s.win.History().Length()).To(Equal(9))
197+
s.Expect(s.h.RequestCount()).To(Equal(5), "No of HTTP requests, a new _should_ have been made")
198+
s.Expect(s.win.Document().GetElementById("heading")).To(HaveTextContent("/page-6"))
199+
}
200+
201+
func (s *WindowHistoryPushStateWithMultipleEntriesTestSuite) TestGoBackFive() {
202+
s.Expect(s.win.History().Go(-5)).To(Succeed())
203+
s.Expect(s.win.Document().GetElementById("heading")).
204+
To(HaveTextContent("/page-4"), "Page for loaded")
205+
206+
s.Expect(s.win.History().Length()).To(Equal(9), "History length - should be unchanged")
207+
s.Expect(s.h.RequestCount()).To(Equal(5), "No of HTTP requests - a new should have been made")
208+
}
209+
210+
func (s *WindowHistoryPushStateWithMultipleEntriesTestSuite) TestBackFiveAndForwardOne() {
211+
s.Expect(s.win.History().Go(-5)).To(Succeed())
212+
s.Expect(s.win.History().Go(1)).To(Succeed())
213+
s.Expect(s.win.History().Length()).To(Equal(9))
214+
s.Expect(s.h.RequestCount()).
215+
To(Equal(5), "No of HTTP requests - a new should _not_ have been made")
216+
}
217+
218+
func (s *WindowHistoryPushStateWithMultipleEntriesTestSuite) TestBackFiveAndForwardTwo() {
219+
s.Expect(s.win.History().Go(-5)).To(Succeed())
220+
s.Expect(s.win.History().Go(2)).To(Succeed())
221+
s.Expect(s.win.History().Length()).To(Equal(9))
222+
s.Expect(s.h.RequestCount()).To(Equal(6), "No of HTTP requests - a new should have been made")
223+
s.Expect(s.win.Document().GetElementById("heading")).To(HaveTextContent("/page-6"))
224+
}

0 commit comments

Comments
 (0)