From: Helmut Eller Date: Fri, 8 Nov 2013 03:28:19 +0000 (-0500) Subject: * test/automated/sentinel-tests.el: New file. X-Git-Tag: emacs-24.3.90~173^2^2~42^2~45^2~387^2~910 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=21cfbae5b5b359a270a1df8c0fd41c0ad53b6529;p=emacs.git * test/automated/sentinel-tests.el: New file. --- diff --git a/test/ChangeLog b/test/ChangeLog index 2e8b8a6dca8..32d856c33b8 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,7 @@ +2013-11-08 Helmut Eller + + * automated/sentinel-tests.el: New file. + 2013-11-08 Dmitry Gutov * indent/ruby.rb: New examples. diff --git a/test/automated/sentinel-tests.el b/test/automated/sentinel-tests.el new file mode 100644 index 00000000000..f694a341661 --- /dev/null +++ b/test/automated/sentinel-tests.el @@ -0,0 +1,53 @@ +;;; process-tests.el --- Testing the process facilities + +;; Copyright (C) 2013 Free Software Foundation, Inc. + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: + +;; + +;;; Code: + +(require 'ert) + +;; Timeout in seconds; the test fails if the timeout is reached. +(defvar process-test-sentinel-wait-timeout 2.0) + +;; Start a process that exits immediately. Call WAIT-FUNCTION, +;; possibly multiple times, to wait for the process to complete. +(defun process-test-sentinel-wait-function-working-p (wait-function) + (let ((proc (start-process "test" nil "bash" "-c" "exit 20")) + (sentinel-called nil) + (start-time (float-time))) + (set-process-sentinel proc (lambda (proc msg) + (setq sentinel-called t))) + (while (not (or sentinel-called + (> (- (float-time) start-time) + process-test-sentinel-wait-timeout))) + (funcall wait-function)) + (cl-assert (eq (process-status proc) 'exit)) + (cl-assert (= (process-exit-status proc) 20)) + sentinel-called)) + +(ert-deftest process-test-sentinel-accept-process-output () + (should (process-test-sentinel-wait-function-working-p + #'accept-process-output))) + +(ert-deftest process-test-sentinel-sit-for () + (should + (process-test-sentinel-wait-function-working-p (lambda () (sit-for 0.01 t))))) + +(provide 'process-tests)