mirror of
https://github.com/Hopiu/bowser.git
synced 2026-03-16 19:10:24 +00:00
- Removed unused imports from various test files to streamline code. - Cleaned up whitespace in test cases for better consistency. - Updated dependency management in `uv.lock` to reflect changes in optional dependencies. - Ensured all tests maintain functionality while enhancing clarity and organization.
209 lines
6 KiB
Python
209 lines
6 KiB
Python
"""Tests for browser tab management."""
|
|
|
|
from unittest.mock import Mock, patch
|
|
from src.browser.browser import Browser
|
|
from src.browser.tab import Tab
|
|
from src.network.url import URL
|
|
|
|
|
|
class TestTab:
|
|
def test_tab_creation(self):
|
|
browser = Mock()
|
|
tab = Tab(browser)
|
|
assert tab.browser is browser
|
|
assert tab.current_url is None
|
|
assert tab.history == []
|
|
assert tab.history_index == -1
|
|
|
|
def test_tab_title_new(self):
|
|
browser = Mock()
|
|
tab = Tab(browser)
|
|
assert tab.title == "New Tab"
|
|
|
|
def test_tab_title_with_url(self):
|
|
browser = Mock()
|
|
browser._log = Mock()
|
|
tab = Tab(browser)
|
|
tab.load(URL("https://example.com"))
|
|
assert "example.com" in tab.title
|
|
|
|
def test_tab_load_adds_history(self):
|
|
browser = Mock()
|
|
browser._log = Mock()
|
|
tab = Tab(browser)
|
|
url1 = URL("https://example.com")
|
|
url2 = URL("https://other.com")
|
|
|
|
tab.load(url1)
|
|
assert len(tab.history) == 1
|
|
assert tab.history_index == 0
|
|
|
|
tab.load(url2)
|
|
assert len(tab.history) == 2
|
|
assert tab.history_index == 1
|
|
|
|
def test_tab_go_back(self):
|
|
browser = Mock()
|
|
browser._log = Mock()
|
|
tab = Tab(browser)
|
|
url1 = URL("https://example.com")
|
|
url2 = URL("https://other.com")
|
|
|
|
tab.load(url1)
|
|
tab.load(url2)
|
|
|
|
result = tab.go_back()
|
|
assert result is True
|
|
assert tab.history_index == 0
|
|
|
|
def test_tab_go_back_at_start(self):
|
|
browser = Mock()
|
|
browser._log = Mock()
|
|
tab = Tab(browser)
|
|
tab.load(URL("https://example.com"))
|
|
|
|
result = tab.go_back()
|
|
assert result is False
|
|
assert tab.history_index == 0
|
|
|
|
def test_tab_go_forward(self):
|
|
browser = Mock()
|
|
browser._log = Mock()
|
|
tab = Tab(browser)
|
|
|
|
tab.load(URL("https://example.com"))
|
|
tab.load(URL("https://other.com"))
|
|
tab.go_back()
|
|
|
|
result = tab.go_forward()
|
|
assert result is True
|
|
assert tab.history_index == 1
|
|
|
|
def test_tab_go_forward_at_end(self):
|
|
browser = Mock()
|
|
browser._log = Mock()
|
|
tab = Tab(browser)
|
|
tab.load(URL("https://example.com"))
|
|
|
|
result = tab.go_forward()
|
|
assert result is False
|
|
|
|
def test_tab_reload(self):
|
|
browser = Mock()
|
|
browser._log = Mock()
|
|
tab = Tab(browser)
|
|
tab.load(URL("https://example.com"))
|
|
|
|
result = tab.reload()
|
|
assert result is True
|
|
assert tab.history_index == 0
|
|
|
|
def test_tab_history_truncation(self):
|
|
browser = Mock()
|
|
browser._log = Mock()
|
|
tab = Tab(browser)
|
|
|
|
tab.load(URL("https://example.com"))
|
|
tab.load(URL("https://other.com"))
|
|
tab.load(URL("https://third.com"))
|
|
tab.go_back() # now at other.com
|
|
tab.load(URL("https://new.com")) # should truncate third.com
|
|
|
|
assert len(tab.history) == 3
|
|
assert tab.history_index == 2
|
|
|
|
|
|
@patch('src.browser.browser.Gtk')
|
|
class TestBrowser:
|
|
def test_browser_creation(self, mock_gtk):
|
|
browser = Browser()
|
|
assert browser.tabs == []
|
|
assert browser.active_tab is None
|
|
|
|
def test_new_tab(self, mock_gtk):
|
|
browser = Browser()
|
|
browser.chrome.rebuild_tab_bar = Mock()
|
|
browser.chrome.update_address_bar = Mock()
|
|
|
|
tab = browser.new_tab("https://example.com")
|
|
|
|
assert len(browser.tabs) == 1
|
|
assert browser.active_tab is tab
|
|
assert tab in browser.tabs
|
|
|
|
def test_set_active_tab(self, mock_gtk):
|
|
browser = Browser()
|
|
browser.chrome.rebuild_tab_bar = Mock()
|
|
browser.chrome.update_address_bar = Mock()
|
|
browser.chrome.paint = Mock()
|
|
browser.chrome.tabs_box = Mock()
|
|
|
|
tab1 = browser.new_tab("https://example.com")
|
|
_ = browser.new_tab("https://other.com")
|
|
|
|
browser.set_active_tab(tab1)
|
|
assert browser.active_tab is tab1
|
|
|
|
def test_close_tab(self, mock_gtk):
|
|
browser = Browser()
|
|
browser.chrome.rebuild_tab_bar = Mock()
|
|
browser.chrome.update_address_bar = Mock()
|
|
browser.chrome.paint = Mock()
|
|
browser.chrome.tabs_box = Mock()
|
|
|
|
tab1 = browser.new_tab("https://example.com")
|
|
tab2 = browser.new_tab("https://other.com")
|
|
|
|
browser.close_tab(tab1)
|
|
|
|
assert len(browser.tabs) == 1
|
|
assert tab1 not in browser.tabs
|
|
assert browser.active_tab is tab2
|
|
|
|
def test_close_active_tab_selects_previous(self, mock_gtk):
|
|
browser = Browser()
|
|
browser.chrome.rebuild_tab_bar = Mock()
|
|
browser.chrome.update_address_bar = Mock()
|
|
browser.chrome.paint = Mock()
|
|
browser.chrome.tabs_box = Mock()
|
|
|
|
_ = browser.new_tab("https://example.com")
|
|
tab2 = browser.new_tab("https://other.com")
|
|
tab3 = browser.new_tab("https://third.com")
|
|
|
|
browser.close_tab(tab3)
|
|
assert browser.active_tab is tab2
|
|
|
|
def test_close_last_tab(self, mock_gtk):
|
|
browser = Browser()
|
|
browser.chrome.rebuild_tab_bar = Mock()
|
|
browser.chrome.update_address_bar = Mock()
|
|
browser.chrome.paint = Mock()
|
|
browser.chrome.tabs_box = Mock()
|
|
|
|
tab = browser.new_tab("https://example.com")
|
|
browser.close_tab(tab)
|
|
|
|
assert len(browser.tabs) == 0
|
|
assert browser.active_tab is None
|
|
|
|
def test_navigate_to(self, mock_gtk):
|
|
browser = Browser()
|
|
browser.chrome.rebuild_tab_bar = Mock()
|
|
browser.chrome.update_address_bar = Mock()
|
|
browser.chrome.paint = Mock()
|
|
|
|
tab = browser.new_tab("https://example.com")
|
|
browser.navigate_to("https://other.com")
|
|
|
|
assert len(tab.history) == 2
|
|
|
|
def test_navigate_to_no_active_tab(self, mock_gtk):
|
|
browser = Browser()
|
|
browser.chrome.rebuild_tab_bar = Mock()
|
|
browser.chrome.update_address_bar = Mock()
|
|
|
|
browser.navigate_to("https://example.com")
|
|
|
|
assert len(browser.tabs) == 1
|
|
assert browser.active_tab is not None
|