From 686975ec294311631aee0f465f82a9c0c6501fb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Lindqvist?= Date: Fri, 27 Nov 2015 13:15:17 +0100 Subject: [PATCH] ui.tools.listener: only wait up to 5 seconds for the listener to start otherwise unit tests can wait forever if there is an error in listener-thread --- basis/concurrency/flags/flags-docs.factor | 12 ++++++++---- basis/ui/tools/listener/listener-docs.factor | 14 +++++++++----- basis/ui/tools/listener/listener.factor | 2 +- 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/basis/concurrency/flags/flags-docs.factor b/basis/concurrency/flags/flags-docs.factor index 2d622d6b30..006d00b8e1 100644 --- a/basis/concurrency/flags/flags-docs.factor +++ b/basis/concurrency/flags/flags-docs.factor @@ -1,6 +1,6 @@ ! Copyright (C) 2008 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: help.markup help.syntax ; +USING: calendar concurrency.conditions help.markup help.syntax ; IN: concurrency.flags HELP: flag @@ -10,6 +10,10 @@ HELP: { $values { "flag" flag } } { $description "Creates a new flag." } ; +HELP: lower-flag +{ $values { "flag" flag } } +{ $description "Attempts to lower a flag. If the flag has been raised previously, returns immediately, otherwise waits for it to be raised first." } ; + HELP: raise-flag { $values { "flag" flag } } { $description "Raises a flag, notifying any threads waiting on it. Does nothing if the flag has already been raised." } ; @@ -18,9 +22,9 @@ HELP: wait-for-flag { $values { "flag" flag } } { $description "Waits for a flag to be raised. If the flag has already been raised, returns immediately." } ; -HELP: lower-flag -{ $values { "flag" flag } } -{ $description "Attempts to lower a flag. If the flag has been raised previously, returns immediately, otherwise waits for it to be raised first." } ; +HELP: wait-for-flag-timeout +{ $values { "flag" flag } { "timeout" duration } } +{ $description "Waits for a flag to be raised or throws a " { $link timed-out-error } " if the flag wasn't raised in time." } ; ARTICLE: "concurrency.flags" "Flags" "A " { $emphasis "flag" } " is a condition notification device which can be in one of two states: " { $emphasis "lowered" } " (the initial state) or " { $emphasis "raised" } "." diff --git a/basis/ui/tools/listener/listener-docs.factor b/basis/ui/tools/listener/listener-docs.factor index be9d01f238..5edaaebd81 100644 --- a/basis/ui/tools/listener/listener-docs.factor +++ b/basis/ui/tools/listener/listener-docs.factor @@ -1,7 +1,7 @@ -USING: help.markup help.syntax help.tips io kernel listener -ui.commands ui.gadgets ui.gadgets.editors ui.gadgets.panes -ui.operations ui.tools.common ui.tools.listener.completion vocabs -vocabs.refresh words ; +USING: help.markup help.syntax help.tips io kernel listener sequences +ui.commands ui.gadgets.editors ui.gadgets.panes ui.operations +ui.tools.common ui.tools.listener.completion vocabs vocabs.refresh +words ; IN: ui.tools.listener HELP: @@ -24,9 +24,13 @@ HELP: interactor-busy? { $values { "interactor" interactor } { "?" boolean } } { $description "We're busy if there's no thread to resume." } ; +HELP: interactor-read +{ $values { "interactor" interactor } { "lines" sequence } } +{ $description "Implements the " { $link stream-readln } " generic for the interactor." } ; + HELP: wait-for-listener { $values { "listener" listener-gadget } } -{ $description "Wait for the listener to start." } ; +{ $description "Wait up to five seconds for the listener to start." } ; ARTICLE: "ui-listener" "UI listener" "The graphical listener adds input history and word and vocabulary completion. A summary with any outstanding error conditions is displayed before every prompt (see " { $link "ui.tools.error-list" } " for details)." diff --git a/basis/ui/tools/listener/listener.factor b/basis/ui/tools/listener/listener.factor index b2576d8a07..4d543b5b13 100644 --- a/basis/ui/tools/listener/listener.factor +++ b/basis/ui/tools/listener/listener.factor @@ -222,7 +222,7 @@ M: listener-gadget focusable-child* input>> dup popup>> or ; : wait-for-listener ( listener -- ) - input>> flag>> wait-for-flag ; + input>> flag>> 5 seconds wait-for-flag-timeout ; : listener-busy? ( listener -- ? ) input>> interactor-busy? ;