@@ -28,15 +28,70 @@ const checkCases = jsruntime.test_utils.checkCases;
2828pub const History = struct {
2929 pub const mem_guarantied = true ;
3030
31- const ScrollRestaurationMode = enum {
31+ const ScrollRestorationMode = enum {
3232 auto ,
3333 manual ,
3434 };
3535
36- scrollRestauration : ScrollRestaurationMode = .audio ,
36+ scrollRestoration : ScrollRestorationMode = .auto ,
37+ state : std.json.Value = .null ,
3738
38- pub fn get_length (_ : * History ) u64 {
39- return 0 ;
39+ // count tracks the history length until we implement correctly pushstate.
40+ count : u32 = 0 ,
41+
42+ pub fn get_length (self : * History ) u32 {
43+ // TODO return the real history length value.
44+ return self .count ;
45+ }
46+
47+ pub fn get_scrollRestoration (self : * History ) []const u8 {
48+ return switch (self .scrollRestoration ) {
49+ .auto = > "auto" ,
50+ .manual = > "manual" ,
51+ };
52+ }
53+
54+ pub fn set_scrollRestoration (self : * History , mode : []const u8 ) void {
55+ if (std .mem .eql (u8 , "manual" , mode )) self .scrollRestoration = .manual ;
56+ if (std .mem .eql (u8 , "auto" , mode )) self .scrollRestoration = .auto ;
57+ }
58+
59+ pub fn get_state (self : * History ) std.json.Value {
60+ return self .state ;
61+ }
62+
63+ // TODO implement the function
64+ // data must handle any argument. We could expect a std.json.Value but
65+ // https://github.com/lightpanda-io/zig-js-runtime/issues/267 is missing.
66+ pub fn _pushState (self : * History , data : []const u8 , _ : ? []const u8 , url : ? []const u8 ) void {
67+ self .count += 1 ;
68+ _ = url ;
69+ _ = data ;
70+ }
71+
72+ // TODO implement the function
73+ // data must handle any argument. We could expect a std.json.Value but
74+ // https://github.com/lightpanda-io/zig-js-runtime/issues/267 is missing.
75+ pub fn _replaceState (self : * History , data : []const u8 , _ : ? []const u8 , url : ? []const u8 ) void {
76+ _ = self ;
77+ _ = url ;
78+ _ = data ;
79+ }
80+
81+ // TODO implement the function
82+ pub fn _go (self : * History , delta : ? i32 ) void {
83+ _ = self ;
84+ _ = delta ;
85+ }
86+
87+ // TODO implement the function
88+ pub fn _back (self : * History ) void {
89+ _ = self ;
90+ }
91+
92+ // TODO implement the function
93+ pub fn _forward (self : * History ) void {
94+ _ = self ;
4095 }
4196};
4297
@@ -48,7 +103,26 @@ pub fn testExecFn(
48103 js_env : * jsruntime.Env ,
49104) anyerror ! void {
50105 var history = [_ ]Case {
51- .{ .src = "true" , .ex = "true" },
106+ .{ .src = "history.scrollRestoration" , .ex = "auto" },
107+ .{ .src = "history.scrollRestoration = 'manual'" , .ex = "manual" },
108+ .{ .src = "history.scrollRestoration = 'foo'" , .ex = "foo" },
109+ .{ .src = "history.scrollRestoration" , .ex = "manual" },
110+ .{ .src = "history.scrollRestoration = 'auto'" , .ex = "auto" },
111+ .{ .src = "history.scrollRestoration" , .ex = "auto" },
112+
113+ .{ .src = "history.state" , .ex = "null" },
114+
115+ .{ .src = "history.pushState({}, null, '')" , .ex = "undefined" },
116+
117+ .{ .src = "history.replaceState({}, null, '')" , .ex = "undefined" },
118+
119+ .{ .src = "history.go()" , .ex = "undefined" },
120+ .{ .src = "history.go(1)" , .ex = "undefined" },
121+ .{ .src = "history.go(-1)" , .ex = "undefined" },
122+
123+ .{ .src = "history.forward()" , .ex = "undefined" },
124+
125+ .{ .src = "history.back()" , .ex = "undefined" },
52126 };
53127 try checkCases (js_env , & history );
54128}
0 commit comments