From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from localhost (localhost [127.0.0.1]) by olra.theworths.org (Postfix) with ESMTP id 2FDD3431FAF for ; Wed, 18 Jan 2012 06:56:05 -0800 (PST) X-Virus-Scanned: Debian amavisd-new at olra.theworths.org X-Spam-Flag: NO X-Spam-Score: 0 X-Spam-Level: X-Spam-Status: No, score=0 tagged_above=-999 required=5 tests=[none] autolearn=disabled Received: from olra.theworths.org ([127.0.0.1]) by localhost (olra.theworths.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id R3Gt2llvTxEv for ; Wed, 18 Jan 2012 06:56:03 -0800 (PST) Received: from mail-gw3.nixu.fi (mail-gw3.nixu.fi [193.209.237.7]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by olra.theworths.org (Postfix) with ESMTPS id 82BFC431FAE for ; Wed, 18 Jan 2012 06:56:03 -0800 (PST) Received: from pps.filterd (mail-gw3 [127.0.0.1]) by mail-gw3.nixu.fi (8.14.4/8.14.4) with SMTP id q0IEscsC016536; Wed, 18 Jan 2012 16:56:00 +0200 Received: from taco2.nixu.fi (taco2.nixu.fi [194.197.118.31]) by mail-gw3.nixu.fi with ESMTP id 114cs19781-1 (version=TLSv1/SSLv3 cipher=AES256-SHA bits=256 verify=NOT); Wed, 18 Jan 2012 16:55:59 +0200 Received: from taco2.nixu.fi (taco2.nixu.fi [194.197.118.31]) by taco2.nixu.fi (8.14.3/8.14.3/Debian-5+lenny1) with ESMTP id q0IEtxOL004380; Wed, 18 Jan 2012 16:55:59 +0200 From: Tomi Ollila To: David Edmondson , notmuch@notmuchmail.org Subject: Re: [PATCH 2/3] test: Add `test_emacs_expect_t'. In-Reply-To: <1326809224-22673-2-git-send-email-dme@dme.org> References: <87pqei327k.fsf@gmail.com> <1326809224-22673-1-git-send-email-dme@dme.org> <1326809224-22673-2-git-send-email-dme@dme.org> User-Agent: Notmuch/0.11+71~gefa5d6c (http://notmuchmail.org) Emacs/23.3.1 (i686-pc-linux-gnu) X-Face: HhBM'cA~ MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:5.5.7110, 1.0.211, 0.0.0000 definitions=2012-01-18_06:2012-01-17, 2012-01-18, 1970-01-01 signatures=0 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 ipscore=0 suspectscore=0 phishscore=0 bulkscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=6.0.2-1012030000 definitions=main-1201180111 X-BeenThere: notmuch@notmuchmail.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: "Use and development of the notmuch mail system." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 18 Jan 2012 14:56:05 -0000 On Tue, 17 Jan 2012 14:07:03 +0000, David Edmondson wrote: > Add a new test function to allow simpler testing of emacs > functionality. > > `test_emacs_expect_t' takes one argument - a list expression to > evaluate. The test passes if the expression returns `t', otherwise it > fails and the output is reported to the tester. > --- > > Re-worked as Dmitry suggested. > > diff --git a/test/test-lib.sh b/test/test-lib.sh > index 7c9ce24..4b05760 100644 > --- a/test/test-lib.sh > +++ b/test/test-lib.sh > @@ -503,6 +503,39 @@ test_expect_equal_file () > fi > } > > +test_emacs_expect_t () { > + test "$#" = 1 || error "bug in the test script: not 1 parameter to test_emacs_expect_t" > + > + # Run the test. > + if ! test_skip "$test_subtest_name" > + then > + # We cannot call 'test_emacs' in a subshell, because > + # the setting of EMACS_SERVER would not persist > + # throughout a sequence of tests, so we use a > + # temporary file. > + tmp="$TMPDIR"; if [ -z "$tmp" ]; then tmp=/tmp; fi > + output="$tmp/test_emacs_output.$$" > + test_emacs "$1" > "${output}" > + result=$(cat "${output}") > + rm -f "${output}" > + fi > + > + # Restore state after the test. > + exec 1>&6 2>&7 # Restore stdout and stderr > + inside_subtest= > + > + # Report success/failure. > + if ! test_skip "$test_subtest_name" > + then > + if [ "$result" == t ] if [ "$result" = t ] to be compatible with POSIX and consistent with rest code. > + then > + test_ok_ "$test_subtest_name" > + else > + test_failure_ "$test_subtest_name" "$(eval printf ${result})" This added 'eval' made me investigate further... running emacsclient --eval '(print (concat "a" "b" "\t" "c" "\n" "z"))' outputs "ab c\nz" (tab between 'ab' and 'c', quotes (") around the whole output and newlines as "\n" (even '\r' is converted)). If emacs tests run via test_emacs_expect_t wrote their output to ${output} directly above code could be much cleaner in many places. Environment variable could be used for the file name. Tomi