1+ import unittest
2+ import sys
3+ import os
4+
5+ # Add parent directory to path to import backend
6+ sys .path .append (os .path .dirname (os .path .dirname (os .path .abspath (__file__ ))))
7+ from backend import BrowserHistory
8+
9+ class TestBrowserHistory (unittest .TestCase ):
10+ def setUp (self ):
11+ """Set up test cases"""
12+ self .browser = BrowserHistory ("homepage.com" )
13+
14+ def test_initialization (self ):
15+ """Test proper initialization of BrowserHistory"""
16+ self .assertEqual (self .browser ._curr .val , "homepage.com" )
17+ self .assertEqual (self .browser ._back_count , 0 )
18+ self .assertEqual (self .browser ._forward_count , 0 )
19+ self .assertIsNone (self .browser ._curr .nxt )
20+ self .assertIsNone (self .browser ._curr .prev )
21+
22+ def test_visit (self ):
23+ """Test visit functionality and forward history cleanup"""
24+ self .browser .visit ("page1.com" )
25+ self .assertEqual (self .browser ._curr .val , "page1.com" )
26+ self .assertEqual (self .browser ._back_count , 1 )
27+ self .assertEqual (self .browser ._forward_count , 0 )
28+
29+ # Test forward history cleanup
30+ self .browser .visit ("page2.com" )
31+ self .browser .back (1 )
32+ self .browser .visit ("page3.com" ) # Should clear forward history
33+ self .assertIsNone (self .browser ._curr .nxt )
34+ self .assertEqual (self .browser ._forward_count , 0 )
35+
36+ def test_back_navigation (self ):
37+ """Test back navigation with counter validation"""
38+ # Setup history
39+ self .browser .visit ("page1.com" )
40+ self .browser .visit ("page2.com" )
41+
42+ # Test normal back navigation
43+ result = self .browser .back (1 )
44+ self .assertEqual (result , "page1.com" )
45+ self .assertEqual (self .browser ._back_count , 1 )
46+ self .assertEqual (self .browser ._forward_count , 1 )
47+
48+ # Test back with more steps than available
49+ result = self .browser .back (5 ) # Should only go back 1 step
50+ self .assertEqual (result , "homepage.com" )
51+ self .assertEqual (self .browser ._back_count , 0 )
52+ self .assertEqual (self .browser ._forward_count , 2 )
53+
54+ def test_forward_navigation (self ):
55+ """Test forward navigation with counter validation"""
56+ # Setup history and position
57+ self .browser .visit ("page1.com" )
58+ self .browser .visit ("page2.com" )
59+ self .browser .back (2 ) # Go back to homepage
60+
61+ # Test normal forward navigation
62+ result = self .browser .forward (1 )
63+ self .assertEqual (result , "page1.com" )
64+ self .assertEqual (self .browser ._forward_count , 1 )
65+ self .assertEqual (self .browser ._back_count , 1 )
66+
67+ # Test forward with more steps than available
68+ result = self .browser .forward (5 ) # Should only go forward remaining 1 step
69+ self .assertEqual (result , "page2.com" )
70+ self .assertEqual (self .browser ._forward_count , 0 )
71+ self .assertEqual (self .browser ._back_count , 2 )
72+
73+ def test_complex_navigation (self ):
74+ """Test complex navigation patterns"""
75+ self .browser .visit ("page1.com" )
76+ self .browser .visit ("page2.com" )
77+ self .browser .visit ("page3.com" )
78+
79+ # Back navigation
80+ self .assertEqual (self .browser .back (2 ), "page1.com" )
81+
82+ # New visit should clear forward history
83+ self .browser .visit ("page4.com" )
84+ self .assertEqual (self .browser ._forward_count , 0 )
85+ self .assertIsNone (self .browser ._curr .nxt )
86+
87+ # Verify we can't go forward to cleared history
88+ self .assertEqual (self .browser .forward (1 ), "page4.com" )
89+
90+ if __name__ == '__main__' :
91+ unittest .main ()
0 commit comments