bowser/tests/test_browser.py
Benedikt Willi c9ef5e5c44 Refactor test files to remove unnecessary imports and improve readability
- 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.
2026-01-12 10:22:34 +01:00

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