7a3554e77a
By adding a way to check for the loglevel, we can easily check there's no message but still wait for the session to be saved.
391 lines
13 KiB
Gherkin
391 lines
13 KiB
Gherkin
# vim: ft=cucumber fileencoding=utf-8 sts=4 sw=4 et:
|
|
|
|
Feature: Saving and loading sessions
|
|
|
|
Background:
|
|
Given I clean up open tabs
|
|
|
|
Scenario: Saving a simple session
|
|
When I open data/hello.txt
|
|
And I open data/title.html in a new tab
|
|
Then the session should look like:
|
|
windows:
|
|
- active: true
|
|
tabs:
|
|
- history:
|
|
- url: about:blank
|
|
- active: true
|
|
url: http://localhost:*/data/hello.txt
|
|
- active: true
|
|
history:
|
|
- active: true
|
|
url: http://localhost:*/data/title.html
|
|
title: Test title
|
|
|
|
@qtwebengine_skip
|
|
Scenario: Zooming (qtwebkit)
|
|
When I open data/hello.txt
|
|
And I run :zoom 50
|
|
Then the session should look like:
|
|
windows:
|
|
- tabs:
|
|
- history:
|
|
- url: about:blank
|
|
zoom: 1.0
|
|
- url: http://localhost:*/data/hello.txt
|
|
zoom: 0.5
|
|
|
|
# The zoom level is only stored for the newest element for QtWebEngine.
|
|
@qtwebkit_skip
|
|
Scenario: Zooming (qtwebengine)
|
|
When I open data/hello.txt
|
|
And I run :zoom 50
|
|
Then the session should look like:
|
|
windows:
|
|
- tabs:
|
|
- history:
|
|
- url: about:blank
|
|
- url: http://localhost:*/data/hello.txt
|
|
zoom: 0.5
|
|
|
|
@qtwebengine_skip
|
|
Scenario: Scrolling (qtwebkit)
|
|
When I open data/scroll/simple.html
|
|
And I run :scroll-px 10 20
|
|
Then the session should look like:
|
|
windows:
|
|
- tabs:
|
|
- history:
|
|
- url: about:blank
|
|
scroll-pos:
|
|
x: 0
|
|
y: 0
|
|
- url: http://localhost:*/data/scroll/simple.html
|
|
scroll-pos:
|
|
x: 10
|
|
y: 20
|
|
|
|
# The scroll position is only stored for the newest element for QtWebEngine.
|
|
@qtwebkit_skip
|
|
Scenario: Scrolling (qtwebengine)
|
|
When I open data/scroll/simple.html
|
|
And I run :scroll-px 10 20
|
|
And I wait until the scroll position changed to 10/20
|
|
Then the session should look like:
|
|
windows:
|
|
- tabs:
|
|
- history:
|
|
- url: about:blank
|
|
- url: http://localhost:*/data/scroll/simple.html
|
|
scroll-pos:
|
|
x: 10
|
|
y: 20
|
|
Scenario: Redirect
|
|
When I open redirect-to?url=data/title.html without waiting
|
|
And I wait until data/title.html is loaded
|
|
Then the session should look like:
|
|
windows:
|
|
- tabs:
|
|
- history:
|
|
- url: about:blank
|
|
- active: true
|
|
url: http://localhost:*/data/title.html
|
|
original-url: http://localhost:*/redirect-to?url=data/title.html
|
|
title: Test title
|
|
|
|
Scenario: Valid UTF-8 data
|
|
When I open data/sessions/snowman.html
|
|
Then the session should look like:
|
|
windows:
|
|
- tabs:
|
|
- history:
|
|
- url: about:blank
|
|
- url: http://localhost:*/data/sessions/snowman.html
|
|
title: snow☃man
|
|
|
|
@qtwebengine_skip
|
|
Scenario: Long output comparison (qtwebkit)
|
|
When I open data/numbers/1.txt
|
|
And I open data/title.html
|
|
And I open data/numbers/2.txt in a new tab
|
|
And I open data/numbers/3.txt in a new window
|
|
# Full output apart from "geometry:" and the active window (needs qutewm)
|
|
Then the session should look like:
|
|
windows:
|
|
- tabs:
|
|
- history:
|
|
- scroll-pos:
|
|
x: 0
|
|
y: 0
|
|
title: about:blank
|
|
url: about:blank
|
|
zoom: 1.0
|
|
- scroll-pos:
|
|
x: 0
|
|
y: 0
|
|
title: http://localhost:*/data/numbers/1.txt
|
|
url: http://localhost:*/data/numbers/1.txt
|
|
zoom: 1.0
|
|
- active: true
|
|
scroll-pos:
|
|
x: 0
|
|
y: 0
|
|
title: Test title
|
|
url: http://localhost:*/data/title.html
|
|
zoom: 1.0
|
|
- active: true
|
|
history:
|
|
- active: true
|
|
scroll-pos:
|
|
x: 0
|
|
y: 0
|
|
title: ''
|
|
url: http://localhost:*/data/numbers/2.txt
|
|
zoom: 1.0
|
|
- tabs:
|
|
- active: true
|
|
history:
|
|
- active: true
|
|
scroll-pos:
|
|
x: 0
|
|
y: 0
|
|
title: ''
|
|
url: http://localhost:*/data/numbers/3.txt
|
|
zoom: 1.0
|
|
|
|
# FIXME:qtwebengine what's up with the titles there?
|
|
@qtwebkit_skip
|
|
Scenario: Long output comparison (qtwebengine)
|
|
When I open data/numbers/1.txt
|
|
And I open data/title.html
|
|
And I open data/numbers/2.txt in a new tab
|
|
And I open data/numbers/3.txt in a new window
|
|
# Full output apart from "geometry:" and the active window (needs qutewm)
|
|
Then the session should look like:
|
|
windows:
|
|
- tabs:
|
|
- history:
|
|
- title: about:blank
|
|
url: about:blank
|
|
- title: http://localhost:*/data/numbers/1.txt
|
|
url: http://localhost:*/data/numbers/1.txt
|
|
- active: true
|
|
scroll-pos:
|
|
x: 0
|
|
y: 0
|
|
title: Test title
|
|
url: http://localhost:*/data/title.html
|
|
zoom: 1.0
|
|
- active: true
|
|
history:
|
|
- active: true
|
|
scroll-pos:
|
|
x: 0
|
|
y: 0
|
|
title: localhost:*/data/numbers/2.txt
|
|
url: http://localhost:*/data/numbers/2.txt
|
|
zoom: 1.0
|
|
- tabs:
|
|
- active: true
|
|
history:
|
|
- active: true
|
|
scroll-pos:
|
|
x: 0
|
|
y: 0
|
|
title: localhost:*/data/numbers/3.txt
|
|
url: http://localhost:*/data/numbers/3.txt
|
|
zoom: 1.0
|
|
|
|
# https://github.com/qutebrowser/qutebrowser/issues/879
|
|
|
|
Scenario: Saving a session with a page using history.replaceState()
|
|
When I open data/sessions/history_replace_state.html without waiting
|
|
Then the javascript message "Called history.replaceState" should be logged
|
|
And the session should look like:
|
|
windows:
|
|
- tabs:
|
|
- history:
|
|
- url: about:blank
|
|
- active: true
|
|
url: http://localhost:*/data/sessions/history_replace_state.html?state=2
|
|
title: Test title
|
|
|
|
@qtwebengine_skip
|
|
Scenario: Saving a session with a page using history.replaceState() and navigating away (qtwebkit)
|
|
When I open data/sessions/history_replace_state.html
|
|
And I open data/hello.txt
|
|
Then the javascript message "Called history.replaceState" should be logged
|
|
And the session should look like:
|
|
windows:
|
|
- tabs:
|
|
- history:
|
|
- url: about:blank
|
|
- url: http://localhost:*/data/sessions/history_replace_state.html?state=2
|
|
# What we'd *really* expect here is "Test title", but that
|
|
# workaround is the best we can do.
|
|
title: http://localhost:*/data/sessions/history_replace_state.html?state=2
|
|
- active: true
|
|
url: http://localhost:*/data/hello.txt
|
|
|
|
# Seems like that bug is fixed upstream in QtWebEngine
|
|
@qtwebkit_skip
|
|
Scenario: Saving a session with a page using history.replaceState() and navigating away
|
|
When I open data/sessions/history_replace_state.html without waiting
|
|
And I wait for "* Called history.replaceState" in the log
|
|
And I open data/hello.txt
|
|
Then the session should look like:
|
|
windows:
|
|
- tabs:
|
|
- history:
|
|
- url: about:blank
|
|
- url: http://localhost:*/data/sessions/history_replace_state.html?state=2
|
|
title: Test title
|
|
- active: true
|
|
url: http://localhost:*/data/hello.txt
|
|
|
|
# :session-save
|
|
|
|
Scenario: Saving to a directory
|
|
When I run :session-save (tmpdir)
|
|
Then the error "Error while saving session: *" should be shown
|
|
|
|
Scenario: Saving internal session without --force
|
|
When I run :session-save _internal
|
|
Then the error "_internal is an internal session, use --force to save anyways." should be shown
|
|
And the session _internal should not exist
|
|
|
|
Scenario: Saving internal session with --force
|
|
When I run :session-save --force _internal_force
|
|
Then the message "Saved session _internal_force." should be shown
|
|
And the session _internal_force should exist
|
|
|
|
Scenario: Saving current session without one loaded
|
|
Given I have a fresh instance
|
|
And I run :session-save --current
|
|
Then the error "No session loaded currently!" should be shown
|
|
|
|
Scenario: Saving current session after one is loaded
|
|
When I open data/numbers/1.txt
|
|
When I run :session-save current_session
|
|
And I run :session-load current_session
|
|
And I wait until data/numbers/1.txt is loaded
|
|
And I run :session-save --current
|
|
Then the message "Saved session current_session." should be shown
|
|
|
|
Scenario: Saving session
|
|
When I run :session-save session_name
|
|
Then the message "Saved session session_name." should be shown
|
|
And the session session_name should exist
|
|
|
|
Scenario: Saving session with --quiet
|
|
When I run :session-save --quiet quiet_session
|
|
Then "Saved session quiet_session." should be logged with level debug
|
|
And the session quiet_session should exist
|
|
|
|
Scenario: Saving session with --only-active-window
|
|
When I open data/numbers/1.txt
|
|
And I open data/numbers/2.txt in a new tab
|
|
And I open data/numbers/3.txt in a new window
|
|
And I open data/numbers/4.txt in a new tab
|
|
And I open data/numbers/5.txt in a new tab
|
|
And I run :session-save --only-active-window window_session_name
|
|
And I run :window-only
|
|
And I run :tab-only
|
|
And I run :session-load window_session_name
|
|
And I wait until data/numbers/5.txt is loaded
|
|
Then the session should look like:
|
|
windows:
|
|
- tabs:
|
|
- history:
|
|
- active: true
|
|
url: http://localhost:*/data/numbers/5.txt
|
|
- tabs:
|
|
- history:
|
|
- url: http://localhost:*/data/numbers/3.txt
|
|
- history:
|
|
- url: http://localhost:*/data/numbers/4.txt
|
|
- history:
|
|
- active: true
|
|
url: http://localhost:*/data/numbers/5.txt
|
|
|
|
# :session-delete
|
|
|
|
Scenario: Deleting a directory
|
|
When I run :session-delete (tmpdir)
|
|
Then "Error while deleting session!" should be logged
|
|
And the error "Error while deleting session: *" should be shown
|
|
|
|
Scenario: Deleting internal session without --force
|
|
When I run :session-save --force _internal
|
|
And I run :session-delete _internal
|
|
Then the error "_internal is an internal session, use --force to delete anyways." should be shown
|
|
And the session _internal should exist
|
|
|
|
Scenario: Deleting internal session with --force
|
|
When I run :session-save --force _internal
|
|
And I run :session-delete --force _internal
|
|
And I wait for "Deleted session _internal." in the log
|
|
Then the session _internal should not exist
|
|
|
|
Scenario: Normally deleting a session
|
|
When I run :session-save deleted_session
|
|
And I run :session-delete deleted_session
|
|
And I wait for "Deleted session deleted_session." in the log
|
|
Then the session deleted_session should not exist
|
|
|
|
Scenario: Deleting a session which doesn't exist
|
|
When I run :session-delete inexistent_session
|
|
Then the error "Session inexistent_session not found!" should be shown
|
|
|
|
# :session-load
|
|
|
|
Scenario: Loading a directory
|
|
When I run :session-load (tmpdir)
|
|
Then the error "Error while loading session: *" should be shown
|
|
|
|
Scenario: Loading internal session without --force
|
|
When I run :session-save --force _internal
|
|
And I run :session-load _internal
|
|
Then the error "_internal is an internal session, use --force to load anyways." should be shown
|
|
|
|
@qtwebengine_flaky
|
|
Scenario: Loading internal session with --force
|
|
When I open about:blank
|
|
And I run :session-save --force _internal
|
|
And I replace "about:blank" by "http://localhost:(port)/data/numbers/1.txt" in the "_internal" session file
|
|
And I run :session-load --force _internal
|
|
Then data/numbers/1.txt should be loaded
|
|
|
|
@qtwebengine_flaky
|
|
Scenario: Normally loading a session
|
|
When I open about:blank
|
|
And I run :session-save loaded_session
|
|
And I replace "about:blank" by "http://localhost:(port)/data/numbers/2.txt" in the "loaded_session" session file
|
|
And I run :session-load loaded_session
|
|
Then data/numbers/2.txt should be loaded
|
|
|
|
Scenario: Loading a session which doesn't exist
|
|
When I run :session-load inexistent_session
|
|
Then the error "Session inexistent_session not found!" should be shown
|
|
|
|
|
|
# Test load/save of pinned tabs
|
|
|
|
Scenario: Saving/Loading a session with pinned tabs
|
|
When I open data/numbers/1.txt
|
|
And I open data/numbers/2.txt in a new tab
|
|
And I open data/numbers/3.txt in a new tab
|
|
And I run :tab-pin with count 2
|
|
And I run :session-save pin_session
|
|
And I run :tab-only --force
|
|
And I run :tab-close --force
|
|
And I run :session-load -c pin_session
|
|
And I wait until data/numbers/3.txt is loaded
|
|
And I run :tab-focus 2
|
|
And I run :open hello world
|
|
Then the message "Tab is pinned!" should be shown
|
|
And the following tabs should be open:
|
|
- data/numbers/1.txt
|
|
- data/numbers/2.txt (active) (pinned)
|
|
- data/numbers/3.txt
|