Awk.Info

"Cause a little auk awk
goes a long way."

About awk.info
 »  table of contents
 »  featured topics
 »  page tags


About Awk
 »  advocacy
 »  learning
 »  history
 »  Wikipedia entry
 »  mascot
Implementations
 »  Awk (rarely used)
 »  Nawk (the-one-true, old)
 »  Gawk (widely used)
 »  Mawk
 »  Xgawk (gawk + xml + ...)
 »  Spawk (SQL + awk)
 »  Jawk (Awk in Java JVM)
 »  QTawk (extensions to gawk)
 »  Runawk (a runtime tool)
 »  platform support
Coding
 »  one-liners
 »  ten-liners
 »  tips
 »  the Awk 100
Community
 »  read our blog
 »  read/write the awk wiki
 »  discussion news group

Libraries
 »  Gawk
 »  Xgawk
 »  the Lawker library
Online doc
 »  reference card
 »  cheat sheet
 »  manual pages
 »  FAQ

Reading
 »  articles
 »  books:

WHAT'S NEW?

Mar 01: Michael Sanders demos an X-windows GUI for AWK.

Mar 01: Awk100#24: A. Lahm and E. de Rinaldis' patent search, in AWK

Feb 28: Tim Menzies asks this community to write an AWK cookbook.

Feb 28: Arnold Robbins announces a new debugger for GAWK.

Feb 28: Awk100#23: Premysl Janouch offers a IRC bot, In AWK

Feb 28: Updated: the AWK FAQ

Feb 28: Tim Menzies offers a tiny content management system, in Awk.

Jan 31: Comment system added to awk.info. For example, see discussion bottom of ?keys2awk

Jan 31: Martin Cohen shows that Gawk can handle massively long strings (300 million characters).

Jan 31: The AWK FAQ is being updated. For comments/ corrections/ extensions, please mail tim@menzies.us

Jan 31: Martin Cohen finds Awk on the Android platform.

Jan 31: Aleksey Cheusov released a new version of runawk.

Jan 31: Hirofumi Saito contributes a candidate Awk mascot.

Jan 31: Michael Sanders shows how to quickly build an AWK GUI for windows.

Jan 31: Hyung-Hwan Chung offers QSE, an embeddable Awk Interpreter.

[More ...]

Bookmark and Share

categories: Contribute,Jan,2009,Timm

Show Unit Tests

Ideally, all code in our code repository comes with unit tests:

  • Either demo scripts to show off functionality
  • Or a regression suite that checks that new changes does not mess up existing code.

Accordingly code offered to this site can contain unit tests, using the methods described in this page.

But before going on, we stress that awk.info gratefully accepts awk contributions in any form. That is, including unit tests with code is optional.

Files

If your code is in directory yourcode then create a sub-directory yourcode/eg

Write a test in a file yourcode/eg/yourtest. Divide that test into two parts:

  1. In the first paragraph of that file, write any tedious set up required to get the system ready for the test.
  2. In the second, third, etc paragraph, write the code that shows the test
  3. For example, in the following code, the real test comes after some low-level environmental set up:
    # assumes
    # - the LAWKER trunk has been checked out and
    # - .bash_profile contains: export Lawker="$HOME/svns/lawker/fridge"
    . $Lawker/lib/bash/setup
    
    gawk -f join.awk --source '
    BEGIN { split("tim tom tam",a)
            print join(a,2)
    }'
    

Write the expected output of that test case in yourcode/eg/yourtest.out

Regression Tests

The above file conventions mean that an automatic tool can run over the entire code base and perform a regression test (checking if all the tests generate all the *.out files.

Displaying the Tests (and Output)

Another advantage of the above scheme is that you can use the tests to document your code.

To show the test case, add the following into your .awk file:

 #.BODY       yourcode/eg/yourtest
 #.CODE       yourcode/eg/yourtest.out

Then zip the directory yourcode (including yourcode/eg) and send it to awk.info. Once we install those files on our site then when awk.info displays that file, the test case trivia is hidden and the users only see the essential details. For an example of this, see http://awk.info/?gawk/array/join.awk.

blog comments powered by Disqus