Make ophaned editor test less flaky.

Instead of having the editor sleep a short time, explicitly send it a
signal to exit.
This commit is contained in:
Ryan Roden-Corrent 2017-11-28 08:38:04 -05:00
parent 9dfc6b0f61
commit 01a9405391
2 changed files with 24 additions and 9 deletions

View File

@ -116,14 +116,15 @@ Feature: Opening external editors
Then the javascript message "text: foobar" should be logged
Scenario: Spawning an editor and closing the tab
When I set up a fake editor returning "foo" after 1s
When I set up a fake editor that waits
And I open data/editor.html
And I run :click-element id qute-textarea
And I wait for "Entering mode KeyMode.insert (reason: clicking input)" in the log
And I run :open-editor
And I set tabs.last_close to blank
And I run :tab-close
Then the warning "Edited element was closed" should be shown
And I kill the waiting editor
Then the warning "Edited element vanished" should be shown
@qtwebengine_todo: Caret mode is not implemented yet
Scenario: Spawning an editor in caret mode

View File

@ -20,6 +20,8 @@
import sys
import json
import textwrap
import os
import signal
import pytest_bdd as bdd
bdd.scenarios('editor.feature')
@ -66,19 +68,31 @@ def set_up_editor_empty(quteproc, server, tmpdir):
set_up_editor(quteproc, server, tmpdir, "")
@bdd.when(bdd.parsers.parse(
'I set up a fake editor returning "{text}" after {t}s'))
def set_up_editor_delay(quteproc, server, tmpdir, text, t):
@bdd.when(bdd.parsers.parse('I set up a fake editor that waits'))
def set_up_editor_wait(quteproc, server, tmpdir):
"""Set up editor.command to a small python script inserting a text."""
pidfile = tmpdir / 'editor_pid'
script = tmpdir / 'script.py'
script.write(textwrap.dedent("""
import os
import sys
import time
import signal
time.sleep({t})
with open('{pidfile}', 'w') as f:
f.write(str(os.getpid()))
with open(sys.argv[1], 'w', encoding='utf-8') as f:
f.write({text!r})
""".format(text=text, t=t)))
signal.signal(signal.SIGUSR1, lambda s, f: sys.exit(0))
time.sleep(100)
""".format(pidfile=pidfile)))
editor = json.dumps([sys.executable, str(script), '{}'])
quteproc.set_setting('editor.command', editor)
@bdd.when(bdd.parsers.parse('I kill the waiting editor'))
def kill_editor_wait(quteproc, server, tmpdir):
"""Kill the waiting editor."""
pidfile = tmpdir / 'editor_pid'
pid = int(pidfile.read())
os.kill(pid, signal.SIGUSR1)