From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Schulte Subject: Re: [BABEL,PATCH] call awk with no input Date: Sun, 24 Jul 2011 14:07:53 -0600 Message-ID: <874o2b5tnq.fsf@gmail.com> References: <87livo9d3q.fsf@gmail.com> Mime-Version: 1.0 Content-Type: text/plain Return-path: Received: from eggs.gnu.org ([140.186.70.92]:55385) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Ql4y3-00067W-2u for emacs-orgmode@gnu.org; Sun, 24 Jul 2011 16:08:04 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Ql4y1-0006u6-5J for emacs-orgmode@gnu.org; Sun, 24 Jul 2011 16:08:03 -0400 Received: from mail-pz0-f49.google.com ([209.85.210.49]:55811) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Ql4y0-0006tp-QD for emacs-orgmode@gnu.org; Sun, 24 Jul 2011 16:08:01 -0400 Received: by pzk33 with SMTP id 33so6224739pzk.8 for ; Sun, 24 Jul 2011 13:08:00 -0700 (PDT) In-Reply-To: <87livo9d3q.fsf@gmail.com> (Litvinov Sergey's message of "Sun, 24 Jul 2011 12:39:37 +0200") List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Litvinov Sergey Cc: emacs-orgmode@gnu.org Hi Sergey, Thanks for another useful patch. This has been applied. Also, good to see you have ERT'd the testing script. The contribution of tests along with patches is *greatly* appreciated. Cheers -- Eric Litvinov Sergey writes: > Please consider this tiny fix to execute awk program with no input. > Example with gawk: > gawk --posix 'BEGIN {print 42}' > > I also added some tests for ob-awk. > > From 868fa910254c48752801cdc7849c3eb4db63f811 Mon Sep 17 00:00:00 2001 > From: Litvinov Sergey > Date: Sun, 24 Jul 2011 12:28:35 +0200 > Subject: [PATCH] Awk can be called with no in-file: and no :stdin > > --- > lisp/ob-awk.el | 6 +--- > testing/README.org | 1 + > testing/examples/ob-awk-test.in | 2 + > testing/examples/ob-awk-test.org | 39 ++++++++++++++++++++++++++++++++++++++ > testing/lisp/test-ob-awk.el | 19 ++++++++++++++++++ > 5 files changed, 63 insertions(+), 4 deletions(-) > create mode 100644 testing/examples/ob-awk-test.in > create mode 100644 testing/examples/ob-awk-test.org > create mode 100644 testing/lisp/test-ob-awk.el > > diff --git a/lisp/ob-awk.el b/lisp/ob-awk.el > index d5098bc..cfed04a 100644 > --- a/lisp/ob-awk.el > +++ b/lisp/ob-awk.el > @@ -26,8 +26,7 @@ > > ;;; Commentary: > > -;; Babel's awk support relies on two special header argument one of > -;; which is required to pass data to the awk process. > +;; Babel's awk can use special header argument: > ;; > ;; - :in-file takes a path to a file of data to be processed by awk > ;; > @@ -89,11 +88,10 @@ called by `org-babel-execute-src-block'" > (with-temp-file tmp (insert results)) > (org-babel-import-elisp-from-file tmp))))) > (cond > - (in-file (org-babel-eval cmd "")) > (stdin (with-temp-buffer > (call-process-shell-command cmd stdin (current-buffer)) > (buffer-string))) > - (t (error "ob-awk: must specify either :in-file or :stdin")))) > + (t (org-babel-eval cmd "")))) > (org-babel-pick-name > (cdr (assoc :colname-names params)) (cdr (assoc :colnames params))) > (org-babel-pick-name > diff --git a/testing/README.org b/testing/README.org > index 3cc0487..2f16a55 100644 > --- a/testing/README.org > +++ b/testing/README.org > @@ -78,6 +78,7 @@ First tangle this file out to your desktop. > (org-id-update-id-locations > (list (concat org-dir "/testing/examples/babel.org") > (concat org-dir "/testing/examples/normal.org") > + (concat org-dir "/testing/examples/ob-awk-test.org") > (concat org-dir "/testing/examples/ob-fortran-test.org") > (concat org-dir "/testing/examples/link-in-heading.org") > (concat org-dir "/testing/examples/links.org"))) > diff --git a/testing/examples/ob-awk-test.in b/testing/examples/ob-awk-test.in > new file mode 100644 > index 0000000..c38382d > --- /dev/null > +++ b/testing/examples/ob-awk-test.in > @@ -0,0 +1,2 @@ > + # an input file for awk test > +15 > \ No newline at end of file > diff --git a/testing/examples/ob-awk-test.org b/testing/examples/ob-awk-test.org > new file mode 100644 > index 0000000..7f51772 > --- /dev/null > +++ b/testing/examples/ob-awk-test.org > @@ -0,0 +1,39 @@ > +#+Title: a collection of examples for ob-awk tests > +#+OPTIONS: ^:nil > + > +* Simple tests > + :PROPERTIES: > + :ID: 9e998b2a-3581-43fe-b26d-07d3c507b86a > + :END: > +Run without input stream > +#+begin_src awk :ouput silent :results silent > + BEGIN { > + print 42 > + } > +#+end_src > + > +Use a code block ouput as an input > +#+begin_src awk :stdin genseq :results silent > + { > + print 42+$1 > + } > +#+end_src > + > +Use input file > +#+srcname: genfile > +#+begin_src awk :in-file ob-awk-test.in :results silent > + $0~/[\t]*#/{ > + # skip comments > + next > + } > + { > + print $1*10 > + } > +#+end_src > + > +* Input data generators > +A code block to generate input stream > +#+srcname: genseq > +#+begin_src emacs-lisp :results silent > +(print "1") > +#+end_src > diff --git a/testing/lisp/test-ob-awk.el b/testing/lisp/test-ob-awk.el > new file mode 100644 > index 0000000..018dec4 > --- /dev/null > +++ b/testing/lisp/test-ob-awk.el > @@ -0,0 +1,19 @@ > +(require 'ob-awk) > + > +(ert-deftest ob-awk/input-none () > + "Test with no input file" > + (org-test-at-id "9e998b2a-3581-43fe-b26d-07d3c507b86a" > + (org-babel-next-src-block) > + (should (= 42 (org-babel-execute-src-block))))) > + > +(ert-deftest ob-awk/input-src-block () > + "Test a code block as an input" > + (org-test-at-id "9e998b2a-3581-43fe-b26d-07d3c507b86a" > + (org-babel-next-src-block 2) > + (should (= 43 (org-babel-execute-src-block))))) > + > +(ert-deftest ob-awk/input-src-block () > + "Test a code block as an input" > + (org-test-at-id "9e998b2a-3581-43fe-b26d-07d3c507b86a" > + (org-babel-next-src-block 3) > + (should (= 150 (org-babel-execute-src-block))))) -- Eric Schulte http://cs.unm.edu/~eschulte/