diff options
author | Ned Batchelder <ned@nedbatchelder.com> | 2009-10-04 21:34:54 -0400 |
---|---|---|
committer | Ned Batchelder <ned@nedbatchelder.com> | 2009-10-04 21:34:54 -0400 |
commit | a201ff9a72ed8cccedf27ef712bae00e4532b48c (patch) | |
tree | 96710bbc3b95b5e8981b8b52c07e4e57deb161fd /doc/sample_html/cogapp_test_cogapp.html | |
parent | 4d906d76669dcaf823c0964bda83667307bd8e2e (diff) | |
download | python-coveragepy-a201ff9a72ed8cccedf27ef712bae00e4532b48c.tar.gz |
Updated sample html report.coverage-3.1
Diffstat (limited to 'doc/sample_html/cogapp_test_cogapp.html')
-rw-r--r-- | doc/sample_html/cogapp_test_cogapp.html | 3920 |
1 files changed, 1960 insertions, 1960 deletions
diff --git a/doc/sample_html/cogapp_test_cogapp.html b/doc/sample_html/cogapp_test_cogapp.html index 2f19e05..23355ae 100644 --- a/doc/sample_html/cogapp_test_cogapp.html +++ b/doc/sample_html/cogapp_test_cogapp.html @@ -2000,1966 +2000,1966 @@ function toggle_lines(btn, cls) { </td>
<td class='text' valign='top'>
-<p class='pln'>""" Test cogapp.</p>
-<p class='pln'> http://nedbatchelder.com/code/cog</p>
-<p class='pln'> </p>
-<p class='pln'> Copyright 2004-2009, Ned Batchelder.</p>
-<p class='pln'>"""</p>
-<p class='pln'> </p>
-<p class='stm run hide'>import unittest</p>
-<p class='stm run hide'>import os, random, re, StringIO, stat, sys, tempfile</p>
-<p class='stm run hide'>import path # Non-standard, from http://www.jorendorff.com/articles/python/path</p>
-<p class='stm run hide'>from cogapp import Cog, CogOptions, CogGenerator</p>
-<p class='stm run hide'>from cogapp import CogError, CogUsageError, CogGeneratedError</p>
-<p class='stm run hide'>from cogapp import usage, __version__</p>
-<p class='stm run hide'>from whiteutils import reindentBlock</p>
-<p class='stm run hide'>from makefiles import *</p>
-<p class='pln'> </p>
-<p class='stm run hide'>class TestCase(unittest.TestCase):</p>
-<p class='pln'> """ Base class for all Cog test cases. Adds utility methods I like.</p>
-<p class='pln'> """</p>
-<p class='stm run hide'> def assertRaisesMsg(self, excClass, msg, callableObj, *args, **kwargs):</p>
-<p class='pln'> """ Just like unittest.TestCase.assertRaises,</p>
-<p class='pln'> but checks that the message is right too.</p>
-<p class='pln'> """</p>
-<p class='stm run hide'> try:</p>
-<p class='stm run hide'> callableObj(*args, **kwargs)</p>
-<p class='stm run hide'> except excClass, exc:</p>
-<p class='stm run hide'> excMsg = str(exc)</p>
-<p class='stm run hide'> if not msg:</p>
-<p class='pln'> # No message provided: it passes.</p>
-<p class='exc'> return #pragma: no cover</p>
-<p class='stm run hide'> elif excMsg == msg:</p>
-<p class='pln'> # Message provided, and we got the right message: it passes.</p>
-<p class='stm run hide'> return</p>
-<p class='exc'> else: #pragma: no cover</p>
-<p class='pln'> # Message provided, and it didn't match: fail!</p>
-<p class='exc'> raise self.failureException("Right exception, wrong message: got '%s' expected '%s'" % (excMsg, msg))</p>
-<p class='exc'> else: #pragma: no cover</p>
-<p class='exc'> if hasattr(excClass,'__name__'):</p>
-<p class='exc'> excName = excClass.__name__</p>
-<p class='exc'> else:</p>
-<p class='exc'> excName = str(excClass)</p>
-<p class='exc'> raise self.failureException("Expected to raise %s, didn't get an exception at all" % excName)</p>
-<p class='pln'> </p>
-<p class='stm run hide'>class CogTestsInMemory(TestCase):</p>
-<p class='pln'> """ Test cases for cogapp.Cog()</p>
-<p class='pln'> """</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testNoCog(self):</p>
-<p class='stm run hide'> strings = [</p>
-<p class='pln'> '',</p>
-<p class='pln'> ' ',</p>
-<p class='pln'> ' \t \t \tx',</p>
-<p class='pln'> 'hello',</p>
-<p class='pln'> 'the cat\nin the\nhat.',</p>
-<p class='pln'> 'Horton\n\tHears A\n\t\tWho'</p>
-<p class='pln'> ]</p>
-<p class='stm run hide'> for s in strings:</p>
-<p class='stm run hide'> self.assertEqual(Cog().processString(s), s)</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testSimple(self):</p>
-<p class='stm run hide'> infile = """\</p>
-<p class='pln'> Some text.</p>
-<p class='pln'> //[[[cog</p>
-<p class='pln'> import cog</p>
-<p class='pln'> cog.outl("This is line one\\n")</p>
-<p class='pln'> cog.outl("This is line two")</p>
-<p class='pln'> //]]]</p>
-<p class='pln'> gobbledegook.</p>
-<p class='pln'> //[[[end]]]</p>
-<p class='pln'> epilogue.</p>
-<p class='pln'> """</p>
-<p class='pln'> </p>
-<p class='stm run hide'> outfile = """\</p>
-<p class='pln'> Some text.</p>
-<p class='pln'> //[[[cog</p>
-<p class='pln'> import cog</p>
-<p class='pln'> cog.outl("This is line one\\n")</p>
-<p class='pln'> cog.outl("This is line two")</p>
-<p class='pln'> //]]]</p>
-<p class='pln'> This is line one</p>
-<p class='pln'> </p>
-<p class='pln'> This is line two</p>
-<p class='pln'> //[[[end]]]</p>
-<p class='pln'> epilogue.</p>
-<p class='pln'> """</p>
-<p class='pln'> </p>
-<p class='stm run hide'> self.assertEqual(Cog().processString(infile), outfile)</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testEmptyCog(self):</p>
-<p class='pln'> # The cog clause can be totally empty. Not sure why you'd want it,</p>
-<p class='pln'> # but it works.</p>
-<p class='stm run hide'> infile = """\</p>
-<p class='pln'> hello</p>
-<p class='pln'> //[[[cog</p>
-<p class='pln'> //]]]</p>
-<p class='pln'> //[[[end]]]</p>
-<p class='pln'> goodbye</p>
-<p class='pln'> """</p>
-<p class='pln'> </p>
-<p class='stm run hide'> infile = reindentBlock(infile)</p>
-<p class='stm run hide'> self.assertEqual(Cog().processString(infile), infile)</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testMultipleCogs(self):</p>
-<p class='pln'> # One file can have many cog chunks, even abutting each other.</p>
-<p class='stm run hide'> infile = """\</p>
-<p class='pln'> //[[[cog</p>
-<p class='pln'> cog.out("chunk1")</p>
-<p class='pln'> //]]]</p>
-<p class='pln'> chunk1</p>
-<p class='pln'> //[[[end]]]</p>
-<p class='pln'> //[[[cog</p>
-<p class='pln'> cog.out("chunk2")</p>
-<p class='pln'> //]]]</p>
-<p class='pln'> chunk2</p>
-<p class='pln'> //[[[end]]]</p>
-<p class='pln'> between chunks</p>
-<p class='pln'> //[[[cog</p>
-<p class='pln'> cog.out("chunk3")</p>
-<p class='pln'> //]]]</p>
-<p class='pln'> chunk3</p>
-<p class='pln'> //[[[end]]]</p>
-<p class='pln'> """</p>
-<p class='pln'> </p>
-<p class='stm run hide'> infile = reindentBlock(infile)</p>
-<p class='stm run hide'> self.assertEqual(Cog().processString(infile), infile)</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testTrimBlankLines(self):</p>
-<p class='stm run hide'> infile = """\</p>
-<p class='pln'> //[[[cog</p>
-<p class='pln'> cog.out("This is line one\\n", trimblanklines=True)</p>
-<p class='pln'> cog.out('''</p>
-<p class='pln'> This is line two</p>
-<p class='pln'> ''', dedent=True, trimblanklines=True)</p>
-<p class='pln'> cog.outl("This is line three", trimblanklines=True)</p>
-<p class='pln'> //]]]</p>
-<p class='pln'> This is line one</p>
-<p class='pln'> This is line two</p>
-<p class='pln'> This is line three</p>
-<p class='pln'> //[[[end]]]</p>
-<p class='pln'> """</p>
-<p class='pln'> </p>
-<p class='stm run hide'> infile = reindentBlock(infile)</p>
-<p class='stm run hide'> self.assertEqual(Cog().processString(infile), infile)</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testTrimEmptyBlankLines(self):</p>
-<p class='stm run hide'> infile = """\</p>
-<p class='pln'> //[[[cog</p>
-<p class='pln'> cog.out("This is line one\\n", trimblanklines=True)</p>
-<p class='pln'> cog.out('''</p>
-<p class='pln'> This is line two</p>
-<p class='pln'> ''', dedent=True, trimblanklines=True)</p>
-<p class='pln'> cog.out('', dedent=True, trimblanklines=True)</p>
-<p class='pln'> cog.outl("This is line three", trimblanklines=True)</p>
-<p class='pln'> //]]]</p>
-<p class='pln'> This is line one</p>
-<p class='pln'> This is line two</p>
-<p class='pln'> This is line three</p>
-<p class='pln'> //[[[end]]]</p>
-<p class='pln'> """</p>
-<p class='pln'> </p>
-<p class='stm run hide'> infile = reindentBlock(infile)</p>
-<p class='stm run hide'> self.assertEqual(Cog().processString(infile), infile)</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def test22EndOfLine(self):</p>
-<p class='pln'> # In Python 2.2, this cog file was not parsing because the</p>
-<p class='pln'> # last line is indented but didn't end with a newline.</p>
-<p class='stm run hide'> infile = """\</p>
-<p class='pln'> //[[[cog</p>
-<p class='pln'> import cog</p>
-<p class='pln'> for i in range(3):</p>
-<p class='pln'> cog.out("%d\\n" % i)</p>
-<p class='pln'> //]]]</p>
-<p class='pln'> 0</p>
-<p class='pln'> 1</p>
-<p class='pln'> 2</p>
-<p class='pln'> //[[[end]]]</p>
-<p class='pln'> """</p>
-<p class='pln'> </p>
-<p class='stm run hide'> infile = reindentBlock(infile)</p>
-<p class='stm run hide'> self.assertEqual(Cog().processString(infile), infile)</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testIndentedCode(self):</p>
-<p class='stm run hide'> infile = """\</p>
-<p class='pln'> first line</p>
-<p class='pln'> [[[cog</p>
-<p class='pln'> import cog</p>
-<p class='pln'> for i in range(3):</p>
-<p class='pln'> cog.out("xx%d\\n" % i)</p>
-<p class='pln'> ]]]</p>
-<p class='pln'> xx0</p>
-<p class='pln'> xx1</p>
-<p class='pln'> xx2</p>
-<p class='pln'> [[[end]]]</p>
-<p class='pln'> last line</p>
-<p class='pln'> """</p>
-<p class='pln'> </p>
-<p class='stm run hide'> infile = reindentBlock(infile)</p>
-<p class='stm run hide'> self.assertEqual(Cog().processString(infile), infile)</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testPrefixedCode(self):</p>
-<p class='stm run hide'> infile = """\</p>
-<p class='pln'> --[[[cog</p>
-<p class='pln'> --import cog</p>
-<p class='pln'> --for i in range(3):</p>
-<p class='pln'> -- cog.out("xx%d\\n" % i)</p>
-<p class='pln'> --]]]</p>
-<p class='pln'> xx0</p>
-<p class='pln'> xx1</p>
-<p class='pln'> xx2</p>
-<p class='pln'> --[[[end]]]</p>
-<p class='pln'> """</p>
-<p class='pln'> </p>
-<p class='stm run hide'> infile = reindentBlock(infile)</p>
-<p class='stm run hide'> self.assertEqual(Cog().processString(infile), infile)</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testPrefixedIndentedCode(self):</p>
-<p class='stm run hide'> infile = """\</p>
-<p class='pln'> prologue</p>
-<p class='pln'> --[[[cog</p>
-<p class='pln'> -- import cog</p>
-<p class='pln'> -- for i in range(3):</p>
-<p class='pln'> -- cog.out("xy%d\\n" % i)</p>
-<p class='pln'> --]]]</p>
-<p class='pln'> xy0</p>
-<p class='pln'> xy1</p>
-<p class='pln'> xy2</p>
-<p class='pln'> --[[[end]]]</p>
-<p class='pln'> """</p>
-<p class='pln'> </p>
-<p class='stm run hide'> infile = reindentBlock(infile)</p>
-<p class='stm run hide'> self.assertEqual(Cog().processString(infile), infile)</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testBogusPrefixMatch(self):</p>
-<p class='stm run hide'> infile = """\</p>
-<p class='pln'> prologue</p>
-<p class='pln'> #[[[cog</p>
-<p class='pln'> import cog</p>
-<p class='pln'> # This comment should not be clobbered by removing the pound sign.</p>
-<p class='pln'> for i in range(3):</p>
-<p class='pln'> cog.out("xy%d\\n" % i)</p>
-<p class='pln'> #]]]</p>
-<p class='pln'> xy0</p>
-<p class='pln'> xy1</p>
-<p class='pln'> xy2</p>
-<p class='pln'> #[[[end]]]</p>
-<p class='pln'> """</p>
-<p class='pln'> </p>
-<p class='stm run hide'> infile = reindentBlock(infile)</p>
-<p class='stm run hide'> self.assertEqual(Cog().processString(infile), infile)</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testNoFinalNewline(self):</p>
-<p class='pln'> # If the cog'ed output has no final newline,</p>
-<p class='pln'> # it shouldn't eat up the cog terminator.</p>
-<p class='stm run hide'> infile = """\</p>
-<p class='pln'> prologue</p>
-<p class='pln'> [[[cog</p>
-<p class='pln'> import cog</p>
-<p class='pln'> for i in range(3):</p>
-<p class='pln'> cog.out("%d" % i)</p>
-<p class='pln'> ]]]</p>
-<p class='pln'> 012</p>
-<p class='pln'> [[[end]]]</p>
-<p class='pln'> epilogue</p>
-<p class='pln'> """</p>
-<p class='pln'> </p>
-<p class='stm run hide'> infile = reindentBlock(infile)</p>
-<p class='stm run hide'> self.assertEqual(Cog().processString(infile), infile)</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testNoOutputAtAll(self):</p>
-<p class='pln'> # If there is absolutely no cog output, that's ok.</p>
-<p class='stm run hide'> infile = """\</p>
-<p class='pln'> prologue</p>
-<p class='pln'> [[[cog</p>
-<p class='pln'> i = 1</p>
-<p class='pln'> ]]]</p>
-<p class='pln'> [[[end]]]</p>
-<p class='pln'> epilogue</p>
-<p class='pln'> """</p>
-<p class='pln'> </p>
-<p class='stm run hide'> infile = reindentBlock(infile)</p>
-<p class='stm run hide'> self.assertEqual(Cog().processString(infile), infile)</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testPurelyBlankLine(self):</p>
-<p class='pln'> # If there is a blank line in the cog code with no whitespace</p>
-<p class='pln'> # prefix, that should be OK.</p>
-<p class='pln'> </p>
-<p class='stm run hide'> infile = """\</p>
-<p class='pln'> prologue</p>
-<p class='pln'> [[[cog</p>
-<p class='pln'> import sys</p>
-<p class='pln'> cog.out("Hello")</p>
-<p class='pln'> $</p>
-<p class='pln'> cog.out("There")</p>
-<p class='pln'> ]]]</p>
-<p class='pln'> HelloThere</p>
-<p class='pln'> [[[end]]]</p>
-<p class='pln'> epilogue</p>
-<p class='pln'> """</p>
-<p class='pln'> </p>
-<p class='stm run hide'> infile = reindentBlock(infile.replace('$', ''))</p>
-<p class='stm run hide'> self.assertEqual(Cog().processString(infile), infile)</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testEmptyOutl(self):</p>
-<p class='pln'> # Alexander Belchenko suggested the string argument to outl should</p>
-<p class='pln'> # be optional. Does it work?</p>
-<p class='pln'> </p>
-<p class='stm run hide'> infile = """\</p>
-<p class='pln'> prologue</p>
-<p class='pln'> [[[cog</p>
-<p class='pln'> cog.outl("x")</p>
-<p class='pln'> cog.outl()</p>
-<p class='pln'> cog.outl("y")</p>
-<p class='pln'> cog.outl(trimblanklines=True)</p>
-<p class='pln'> cog.outl("z")</p>
-<p class='pln'> ]]]</p>
-<p class='pln'> x</p>
-<p class='pln'> </p>
-<p class='pln'> y</p>
-<p class='pln'> </p>
-<p class='pln'> z</p>
-<p class='pln'> [[[end]]]</p>
-<p class='pln'> epilogue</p>
-<p class='pln'> """</p>
-<p class='pln'> </p>
-<p class='stm run hide'> infile = reindentBlock(infile)</p>
-<p class='stm run hide'> self.assertEqual(Cog().processString(infile), infile)</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testFirstLineNum(self):</p>
-<p class='stm run hide'> infile = """\</p>
-<p class='pln'> fooey</p>
-<p class='pln'> [[[cog</p>
-<p class='pln'> cog.outl("started at line number %d" % cog.firstLineNum)</p>
-<p class='pln'> ]]]</p>
-<p class='pln'> started at line number 2</p>
-<p class='pln'> [[[end]]]</p>
-<p class='pln'> blah blah</p>
-<p class='pln'> [[[cog</p>
-<p class='pln'> cog.outl("and again at line %d" % cog.firstLineNum)</p>
-<p class='pln'> ]]]</p>
-<p class='pln'> and again at line 8</p>
-<p class='pln'> [[[end]]]</p>
-<p class='pln'> """</p>
-<p class='pln'> </p>
-<p class='stm run hide'> infile = reindentBlock(infile)</p>
-<p class='stm run hide'> self.assertEqual(Cog().processString(infile), infile)</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testCompactOneLineCode(self):</p>
-<p class='stm run hide'> infile = """\</p>
-<p class='pln'> first line</p>
-<p class='pln'> hey: [[[cog cog.outl("hello %d" % (3*3*3*3)) ]]] looky!</p>
-<p class='pln'> get rid of this!</p>
-<p class='pln'> [[[end]]]</p>
-<p class='pln'> last line</p>
-<p class='pln'> """</p>
-<p class='pln'> </p>
-<p class='stm run hide'> outfile = """\</p>
-<p class='pln'> first line</p>
-<p class='pln'> hey: [[[cog cog.outl("hello %d" % (3*3*3*3)) ]]] looky!</p>
-<p class='pln'> hello 81</p>
-<p class='pln'> [[[end]]]</p>
-<p class='pln'> last line</p>
-<p class='pln'> """</p>
-<p class='pln'> </p>
-<p class='stm run hide'> infile = reindentBlock(infile)</p>
-<p class='stm run hide'> self.assertEqual(Cog().processString(infile), reindentBlock(outfile))</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testInsideOutCompact(self):</p>
-<p class='stm run hide'> infile = """\</p>
-<p class='pln'> first line</p>
-<p class='pln'> hey?: ]]] what is this? [[[cog strange!</p>
-<p class='pln'> get rid of this!</p>
-<p class='pln'> [[[end]]]</p>
-<p class='pln'> last line</p>
-<p class='pln'> """</p>
-<p class='stm run hide'> self.assertRaisesMsg(CogError,</p>
-<p class='pln'> "infile.txt(2): Cog code markers inverted",</p>
-<p class='pln'> Cog().processString,</p>
-<p class='pln'> reindentBlock(infile), "infile.txt")</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testSharingGlobals(self):</p>
-<p class='stm run hide'> infile = """\</p>
-<p class='pln'> first line</p>
-<p class='pln'> hey: [[[cog s="hey there" ]]] looky!</p>
-<p class='pln'> [[[end]]]</p>
-<p class='pln'> more literal junk.</p>
-<p class='pln'> [[[cog cog.outl(s) ]]]</p>
-<p class='pln'> [[[end]]]</p>
-<p class='pln'> last line</p>
-<p class='pln'> """</p>
-<p class='pln'> </p>
-<p class='stm run hide'> outfile = """\</p>
-<p class='pln'> first line</p>
-<p class='pln'> hey: [[[cog s="hey there" ]]] looky!</p>
-<p class='pln'> [[[end]]]</p>
-<p class='pln'> more literal junk.</p>
-<p class='pln'> [[[cog cog.outl(s) ]]]</p>
-<p class='pln'> hey there</p>
-<p class='pln'> [[[end]]]</p>
-<p class='pln'> last line</p>
-<p class='pln'> """</p>
-<p class='pln'> </p>
-<p class='stm run hide'> infile = reindentBlock(infile)</p>
-<p class='stm run hide'> self.assertEqual(Cog().processString(infile), reindentBlock(outfile))</p>
-<p class='pln'> </p>
-<p class='stm run hide'>class CogOptionsTests(TestCase):</p>
-<p class='pln'> """ Test the CogOptions class.</p>
-<p class='pln'> """</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testEquality(self):</p>
-<p class='stm mis'> o = CogOptions()</p>
-<p class='stm mis'> p = CogOptions()</p>
-<p class='stm mis'> self.assertEqual(o, p)</p>
-<p class='stm mis'> o.parseArgs(['-r'])</p>
-<p class='stm mis'> self.assertNotEqual(o, p)</p>
-<p class='stm mis'> p.parseArgs(['-r'])</p>
-<p class='stm mis'> self.assertEqual(o, p)</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testCloning(self):</p>
-<p class='stm mis'> o = CogOptions()</p>
-<p class='stm mis'> o.parseArgs(['-I', 'fooey', '-I', 'booey', '-s', ' /*x*/'])</p>
-<p class='stm mis'> p = o.clone()</p>
-<p class='stm mis'> self.assertEqual(o, p)</p>
-<p class='stm mis'> p.parseArgs(['-I', 'huey', '-D', 'foo=quux'])</p>
-<p class='stm mis'> self.assertNotEqual(o, p)</p>
-<p class='stm mis'> q = CogOptions()</p>
-<p class='stm mis'> q.parseArgs(['-I', 'fooey', '-I', 'booey', '-s', ' /*x*/', '-I', 'huey', '-D', 'foo=quux'])</p>
-<p class='stm mis'> self.assertEqual(p, q)</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testCombiningFlags(self):</p>
-<p class='pln'> # Single-character flags can be combined.</p>
-<p class='stm mis'> o = CogOptions()</p>
-<p class='stm mis'> o.parseArgs(['-e', '-r', '-z'])</p>
-<p class='stm mis'> p = CogOptions()</p>
-<p class='stm mis'> p.parseArgs(['-erz'])</p>
-<p class='stm mis'> self.assertEqual(o, p)</p>
-<p class='pln'> </p>
-<p class='stm run hide'>class FileStructureTests(TestCase):</p>
-<p class='pln'> """ Test cases to check that we're properly strict about the structure</p>
-<p class='pln'> of files.</p>
-<p class='pln'> """</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def isBad(self, infile, msg=None):</p>
-<p class='stm mis'> infile = reindentBlock(infile)</p>
-<p class='stm mis'> self.assertRaisesMsg(CogError,</p>
-<p class='pln'> msg,</p>
-<p class='pln'> Cog().processString, (infile), 'infile.txt')</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testBeginNoEnd(self):</p>
-<p class='stm mis'> infile = """\</p>
-<p class='pln'> Fooey</p>
-<p class='pln'> #[[[cog</p>
-<p class='pln'> cog.outl('hello')</p>
-<p class='pln'> """</p>
-<p class='stm mis'> self.isBad(infile, "infile.txt(2): Cog block begun but never ended.")</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testNoEoo(self):</p>
-<p class='stm mis'> infile = """\</p>
-<p class='pln'> Fooey</p>
-<p class='pln'> #[[[cog</p>
-<p class='pln'> cog.outl('hello')</p>
-<p class='pln'> #]]]</p>
-<p class='pln'> """</p>
-<p class='stm mis'> self.isBad(infile, "infile.txt(4): Missing '[[[end]]]' before end of file.")</p>
-<p class='pln'> </p>
-<p class='stm mis'> infile2 = """\</p>
-<p class='pln'> Fooey</p>
-<p class='pln'> #[[[cog</p>
-<p class='pln'> cog.outl('hello')</p>
-<p class='pln'> #]]]</p>
-<p class='pln'> #[[[cog</p>
-<p class='pln'> cog.outl('goodbye')</p>
-<p class='pln'> #]]]</p>
-<p class='pln'> """</p>
-<p class='stm mis'> self.isBad(infile2, "infile.txt(5): Unexpected '[[[cog'")</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testStartWithEnd(self):</p>
-<p class='stm mis'> infile = """\</p>
-<p class='pln'> #]]]</p>
-<p class='pln'> """</p>
-<p class='stm mis'> self.isBad(infile, "infile.txt(1): Unexpected ']]]'")</p>
-<p class='pln'> </p>
-<p class='stm mis'> infile2 = """\</p>
-<p class='pln'> #[[[cog</p>
-<p class='pln'> cog.outl('hello')</p>
-<p class='pln'> #]]]</p>
-<p class='pln'> #[[[end]]]</p>
-<p class='pln'> #]]]</p>
-<p class='pln'> """</p>
-<p class='stm mis'> self.isBad(infile2, "infile.txt(5): Unexpected ']]]'")</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testStartWithEoo(self):</p>
-<p class='stm mis'> infile = """\</p>
-<p class='pln'> #[[[end]]]</p>
-<p class='pln'> """</p>
-<p class='stm mis'> self.isBad(infile, "infile.txt(1): Unexpected '[[[end]]]'")</p>
-<p class='pln'> </p>
-<p class='stm mis'> infile2 = """\</p>
-<p class='pln'> #[[[cog</p>
-<p class='pln'> cog.outl('hello')</p>
-<p class='pln'> #]]]</p>
-<p class='pln'> #[[[end]]]</p>
-<p class='pln'> #[[[end]]]</p>
-<p class='pln'> """</p>
-<p class='stm mis'> self.isBad(infile2, "infile.txt(5): Unexpected '[[[end]]]'")</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testNoEnd(self):</p>
-<p class='stm mis'> infile = """\</p>
-<p class='pln'> #[[[cog</p>
-<p class='pln'> cog.outl("hello")</p>
-<p class='pln'> #[[[end]]]</p>
-<p class='pln'> """</p>
-<p class='stm mis'> self.isBad(infile, "infile.txt(3): Unexpected '[[[end]]]'")</p>
-<p class='pln'> </p>
-<p class='stm mis'> infile2 = """\</p>
-<p class='pln'> #[[[cog</p>
-<p class='pln'> cog.outl('hello')</p>
-<p class='pln'> #]]]</p>
-<p class='pln'> #[[[end]]]</p>
-<p class='pln'> #[[[cog</p>
-<p class='pln'> cog.outl("hello")</p>
-<p class='pln'> #[[[end]]]</p>
-<p class='pln'> """</p>
-<p class='stm mis'> self.isBad(infile2, "infile.txt(7): Unexpected '[[[end]]]'")</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testTwoBegins(self):</p>
-<p class='stm mis'> infile = """\</p>
-<p class='pln'> #[[[cog</p>
-<p class='pln'> #[[[cog</p>
-<p class='pln'> cog.outl("hello")</p>
-<p class='pln'> #]]]</p>
-<p class='pln'> #[[[end]]]</p>
-<p class='pln'> """</p>
-<p class='stm mis'> self.isBad(infile, "infile.txt(2): Unexpected '[[[cog'")</p>
-<p class='pln'> </p>
-<p class='stm mis'> infile2 = """\</p>
-<p class='pln'> #[[[cog</p>
-<p class='pln'> cog.outl("hello")</p>
-<p class='pln'> #]]]</p>
-<p class='pln'> #[[[end]]]</p>
-<p class='pln'> #[[[cog</p>
-<p class='pln'> #[[[cog</p>
-<p class='pln'> cog.outl("hello")</p>
-<p class='pln'> #]]]</p>
-<p class='pln'> #[[[end]]]</p>
-<p class='pln'> """</p>
-<p class='stm mis'> self.isBad(infile2, "infile.txt(6): Unexpected '[[[cog'")</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testTwoEnds(self):</p>
-<p class='stm mis'> infile = """\</p>
-<p class='pln'> #[[[cog</p>
-<p class='pln'> cog.outl("hello")</p>
-<p class='pln'> #]]]</p>
-<p class='pln'> #]]]</p>
-<p class='pln'> #[[[end]]]</p>
-<p class='pln'> """</p>
-<p class='stm mis'> self.isBad(infile, "infile.txt(4): Unexpected ']]]'")</p>
-<p class='pln'> </p>
-<p class='stm mis'> infile2 = """\</p>
-<p class='pln'> #[[[cog</p>
-<p class='pln'> cog.outl("hello")</p>
-<p class='pln'> #]]]</p>
-<p class='pln'> #[[[end]]]</p>
-<p class='pln'> #[[[cog</p>
-<p class='pln'> cog.outl("hello")</p>
-<p class='pln'> #]]]</p>
-<p class='pln'> #]]]</p>
-<p class='pln'> #[[[end]]]</p>
-<p class='pln'> """</p>
-<p class='stm mis'> self.isBad(infile2, "infile.txt(8): Unexpected ']]]'")</p>
-<p class='pln'> </p>
-<p class='stm run hide'>class CogErrorTests(TestCase):</p>
-<p class='pln'> """ Test cases for cog.error().</p>
-<p class='pln'> """</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testErrorMsg(self):</p>
-<p class='stm mis'> infile = """\</p>
-<p class='pln'> [[[cog cog.error("This ain't right!")]]]</p>
-<p class='pln'> [[[end]]]</p>
-<p class='pln'> """</p>
-<p class='pln'> </p>
-<p class='stm mis'> infile = reindentBlock(infile)</p>
-<p class='stm mis'> self.assertRaisesMsg(CogGeneratedError,</p>
-<p class='pln'> "This ain't right!",</p>
-<p class='pln'> Cog().processString, (infile))</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testErrorNoMsg(self):</p>
-<p class='stm mis'> infile = """\</p>
-<p class='pln'> [[[cog cog.error()]]]</p>
-<p class='pln'> [[[end]]]</p>
-<p class='pln'> """</p>
-<p class='pln'> </p>
-<p class='stm mis'> infile = reindentBlock(infile)</p>
-<p class='stm mis'> self.assertRaisesMsg(CogGeneratedError,</p>
-<p class='pln'> "Error raised by cog generator.",</p>
-<p class='pln'> Cog().processString, (infile))</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testNoErrorIfErrorNotCalled(self):</p>
-<p class='stm mis'> infile = """\</p>
-<p class='pln'> --[[[cog</p>
-<p class='pln'> --import cog</p>
-<p class='pln'> --for i in range(3):</p>
-<p class='pln'> -- if i > 10:</p>
-<p class='pln'> -- cog.error("Something is amiss!")</p>
-<p class='pln'> -- cog.out("xx%d\\n" % i)</p>
-<p class='pln'> --]]]</p>
-<p class='pln'> xx0</p>
-<p class='pln'> xx1</p>
-<p class='pln'> xx2</p>
-<p class='pln'> --[[[end]]]</p>
-<p class='pln'> """</p>
-<p class='pln'> </p>
-<p class='stm mis'> infile = reindentBlock(infile)</p>
-<p class='stm mis'> self.assertEqual(Cog().processString(infile), infile)</p>
-<p class='pln'> </p>
-<p class='stm run hide'>class CogGeneratorGetCodeTests(TestCase):</p>
-<p class='pln'> """ Unit tests against CogGenerator to see if its getCode() method works</p>
-<p class='pln'> properly.</p>
-<p class='pln'> """</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def setUp(self):</p>
-<p class='pln'> """ All tests get a generator to use, and short same-length names for</p>
-<p class='pln'> the functions we're going to use.</p>
-<p class='pln'> """</p>
-<p class='stm mis'> self.gen = CogGenerator()</p>
-<p class='stm mis'> self.m = self.gen.parseMarker</p>
-<p class='stm mis'> self.l = self.gen.parseLine</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testEmpty(self):</p>
-<p class='stm mis'> self.m('// [[[cog')</p>
-<p class='stm mis'> self.m('// ]]]')</p>
-<p class='stm mis'> self.assertEqual(self.gen.getCode(), '')</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testSimple(self):</p>
-<p class='stm mis'> self.m('// [[[cog')</p>
-<p class='stm mis'> self.l(' print "hello"')</p>
-<p class='stm mis'> self.l(' print "bye"')</p>
-<p class='stm mis'> self.m('// ]]]')</p>
-<p class='stm mis'> self.assertEqual(self.gen.getCode(), 'print "hello"\nprint "bye"')</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testCompressed1(self):</p>
-<p class='pln'> # For a while, I supported compressed code blocks, but no longer.</p>
-<p class='stm mis'> self.m('// [[[cog: print """')</p>
-<p class='stm mis'> self.l('// hello')</p>
-<p class='stm mis'> self.l('// bye')</p>
-<p class='stm mis'> self.m('// """)]]]')</p>
-<p class='stm mis'> self.assertEqual(self.gen.getCode(), 'hello\nbye')</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testCompressed2(self):</p>
-<p class='pln'> # For a while, I supported compressed code blocks, but no longer.</p>
-<p class='stm mis'> self.m('// [[[cog: print """')</p>
-<p class='stm mis'> self.l('hello')</p>
-<p class='stm mis'> self.l('bye')</p>
-<p class='stm mis'> self.m('// """)]]]')</p>
-<p class='stm mis'> self.assertEqual(self.gen.getCode(), 'hello\nbye')</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testCompressed3(self):</p>
-<p class='pln'> # For a while, I supported compressed code blocks, but no longer.</p>
-<p class='stm mis'> self.m('// [[[cog')</p>
-<p class='stm mis'> self.l('print """hello')</p>
-<p class='stm mis'> self.l('bye')</p>
-<p class='stm mis'> self.m('// """)]]]')</p>
-<p class='stm mis'> self.assertEqual(self.gen.getCode(), 'print """hello\nbye')</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testCompressed4(self):</p>
-<p class='pln'> # For a while, I supported compressed code blocks, but no longer.</p>
-<p class='stm mis'> self.m('// [[[cog: print """')</p>
-<p class='stm mis'> self.l('hello')</p>
-<p class='stm mis'> self.l('bye""")')</p>
-<p class='stm mis'> self.m('// ]]]')</p>
-<p class='stm mis'> self.assertEqual(self.gen.getCode(), 'hello\nbye""")')</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testNoCommonPrefixForMarkers(self):</p>
-<p class='pln'> # It's important to be able to use #if 0 to hide lines from a</p>
-<p class='pln'> # C++ compiler.</p>
-<p class='stm mis'> self.m('#if 0 //[[[cog')</p>
-<p class='stm mis'> self.l('\timport cog, sys')</p>
-<p class='stm mis'> self.l('')</p>
-<p class='stm mis'> self.l('\tprint sys.argv')</p>
-<p class='stm mis'> self.m('#endif //]]]')</p>
-<p class='stm mis'> self.assertEqual(self.gen.getCode(), 'import cog, sys\n\nprint sys.argv')</p>
-<p class='pln'> </p>
-<p class='stm run hide'>class TestCaseWithTempDir(TestCase):</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def newCog(self):</p>
-<p class='pln'> """ Initialize the cog members for another run.</p>
-<p class='pln'> """</p>
-<p class='pln'> # Create a cog engine, and catch its output.</p>
-<p class='stm mis'> self.cog = Cog()</p>
-<p class='stm mis'> self.output = StringIO.StringIO()</p>
-<p class='stm mis'> self.cog.setOutput(stdout=self.output, stderr=self.output)</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def setUp(self):</p>
-<p class='pln'> # Create a temporary directory.</p>
-<p class='stm mis'> self.tempdir = path.path(tempfile.gettempdir()) / ('testcog_tempdir_' + str(random.random())[2:])</p>
-<p class='stm mis'> self.tempdir.mkdir()</p>
-<p class='stm mis'> self.olddir = os.getcwd()</p>
-<p class='stm mis'> os.chdir(self.tempdir)</p>
-<p class='stm mis'> self.newCog()</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def tearDown(self):</p>
-<p class='stm mis'> os.chdir(self.olddir)</p>
-<p class='pln'> # Get rid of the temporary directory.</p>
-<p class='stm mis'> self.tempdir.rmtree()</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def assertFilesSame(self, sFName1, sFName2):</p>
-<p class='stm mis'> self.assertEqual((self.tempdir / sFName1).text(), (self.tempdir / sFName2).text())</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def assertFileContent(self, sFName, sContent):</p>
-<p class='stm mis'> sAbsName = self.tempdir / sFName</p>
-<p class='stm mis'> f = open(sAbsName, 'rb')</p>
-<p class='stm mis'> try:</p>
-<p class='stm mis'> sFileContent = f.read()</p>
-<p class='pln'> finally:</p>
-<p class='stm mis'> f.close()</p>
-<p class='stm mis'> self.assertEqual(sFileContent, sContent)</p>
-<p class='pln'> </p>
-<p class='pln'> </p>
-<p class='stm run hide'>class ArgumentHandlingTests(TestCaseWithTempDir):</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testArgumentFailure(self):</p>
-<p class='pln'> # Return value 2 means usage problem.</p>
-<p class='stm mis'> assert(self.cog.main(['argv0', '-j']) == 2)</p>
-<p class='stm mis'> output = self.output.getvalue()</p>
-<p class='stm mis'> assert(output.find("option -j not recognized") >= 0)</p>
-<p class='stm mis'> self.assertRaises(CogUsageError, self.cog.callableMain, (['argv0']))</p>
-<p class='stm mis'> self.assertRaises(CogUsageError, self.cog.callableMain, (['argv0', '-j']))</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testNoDashOAndAtFile(self):</p>
-<p class='stm mis'> d = {</p>
-<p class='pln'> 'cogfiles.txt': """\</p>
-<p class='pln'> # Please run cog</p>
-<p class='pln'> """</p>
-<p class='pln'> }</p>
-<p class='pln'> </p>
-<p class='stm mis'> makeFiles(d)</p>
-<p class='stm mis'> self.assertRaises(CogUsageError, self.cog.callableMain, (['argv0', '-o', 'foo', '@cogfiles.txt']))</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testDashV(self):</p>
-<p class='stm mis'> assert(self.cog.main(['argv0', '-v']) == 0)</p>
-<p class='stm mis'> output = self.output.getvalue()</p>
-<p class='stm mis'> self.assertEqual('Cog version %s\n' % __version__, output)</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def producesHelp(self, args):</p>
-<p class='stm mis'> self.newCog()</p>
-<p class='stm mis'> argv = ['argv0'] + args.split()</p>
-<p class='stm mis'> assert(self.cog.main(argv) == 0)</p>
-<p class='stm mis'> self.assertEquals(usage, self.output.getvalue())</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testDashH(self):</p>
-<p class='pln'> # -h or -? anywhere on the command line should just print help.</p>
-<p class='stm mis'> self.producesHelp("-h")</p>
-<p class='stm mis'> self.producesHelp("-?")</p>
-<p class='stm mis'> self.producesHelp("fooey.txt -h")</p>
-<p class='stm mis'> self.producesHelp("-o -r @fooey.txt -? @booey.txt")</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testDashOAndDashR(self):</p>
-<p class='stm mis'> d = {</p>
-<p class='pln'> 'cogfile.txt': """\</p>
-<p class='pln'> # Please run cog</p>
-<p class='pln'> """</p>
-<p class='pln'> }</p>
-<p class='pln'> </p>
-<p class='stm mis'> makeFiles(d)</p>
-<p class='stm mis'> self.assertRaises(CogUsageError, self.cog.callableMain, (['argv0', '-o', 'foo', '-r', 'cogfile.txt']))</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testDashZ(self):</p>
-<p class='stm mis'> d = {</p>
-<p class='pln'> 'test.cog': """\</p>
-<p class='pln'> // This is my C++ file.</p>
-<p class='pln'> //[[[cog</p>
-<p class='pln'> fnames = ['DoSomething', 'DoAnotherThing', 'DoLastThing']</p>
-<p class='pln'> for fn in fnames:</p>
-<p class='pln'> cog.outl("void %s();" % fn)</p>
-<p class='pln'> //]]]</p>
-<p class='pln'> """,</p>
-<p class='pln'> </p>
-<p class='pln'> 'test.out': """\</p>
-<p class='pln'> // This is my C++ file.</p>
-<p class='pln'> //[[[cog</p>
-<p class='pln'> fnames = ['DoSomething', 'DoAnotherThing', 'DoLastThing']</p>
-<p class='pln'> for fn in fnames:</p>
-<p class='pln'> cog.outl("void %s();" % fn)</p>
-<p class='pln'> //]]]</p>
-<p class='pln'> void DoSomething();</p>
-<p class='pln'> void DoAnotherThing();</p>
-<p class='pln'> void DoLastThing();</p>
-<p class='pln'> """,</p>
-<p class='pln'> }</p>
-<p class='pln'> </p>
-<p class='stm mis'> makeFiles(d)</p>
-<p class='stm mis'> self.assertRaisesMsg(</p>
-<p class='pln'> CogError, "test.cog(6): Missing '[[[end]]]' before end of file.",</p>
-<p class='pln'> self.cog.callableMain, (['argv0', '-r', 'test.cog']))</p>
-<p class='stm mis'> self.newCog()</p>
-<p class='stm mis'> self.cog.callableMain(['argv0', '-r', '-z', 'test.cog'])</p>
-<p class='stm mis'> self.assertFilesSame('test.cog', 'test.out')</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testBadDashD(self):</p>
-<p class='stm mis'> self.assertRaises(CogUsageError, self.cog.callableMain, (['argv0', '-Dfooey', 'cog.txt']))</p>
-<p class='stm mis'> self.assertRaises(CogUsageError, self.cog.callableMain, (['argv0', '-D', 'fooey', 'cog.txt']))</p>
-<p class='pln'> </p>
-<p class='pln'> </p>
-<p class='stm run hide'>class TestFileHandling(TestCaseWithTempDir):</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testSimple(self):</p>
-<p class='stm mis'> d = {</p>
-<p class='pln'> 'test.cog': """\</p>
-<p class='pln'> // This is my C++ file.</p>
-<p class='pln'> //[[[cog</p>
-<p class='pln'> fnames = ['DoSomething', 'DoAnotherThing', 'DoLastThing']</p>
-<p class='pln'> for fn in fnames:</p>
-<p class='pln'> cog.outl("void %s();" % fn)</p>
-<p class='pln'> //]]]</p>
-<p class='pln'> //[[[end]]]</p>
-<p class='pln'> """,</p>
-<p class='pln'> </p>
-<p class='pln'> 'test.out': """\</p>
-<p class='pln'> // This is my C++ file.</p>
-<p class='pln'> //[[[cog</p>
-<p class='pln'> fnames = ['DoSomething', 'DoAnotherThing', 'DoLastThing']</p>
-<p class='pln'> for fn in fnames:</p>
-<p class='pln'> cog.outl("void %s();" % fn)</p>
-<p class='pln'> //]]]</p>
-<p class='pln'> void DoSomething();</p>
-<p class='pln'> void DoAnotherThing();</p>
-<p class='pln'> void DoLastThing();</p>
-<p class='pln'> //[[[end]]]</p>
-<p class='pln'> """,</p>
-<p class='pln'> }</p>
-<p class='pln'> </p>
-<p class='stm mis'> makeFiles(d)</p>
-<p class='stm mis'> self.cog.callableMain(['argv0', '-r', 'test.cog'])</p>
-<p class='stm mis'> self.assertFilesSame('test.cog', 'test.out')</p>
-<p class='stm mis'> output = self.output.getvalue()</p>
-<p class='stm mis'> assert(output.find("(changed)") >= 0)</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testOutputFile(self):</p>
-<p class='pln'> # -o sets the output file.</p>
-<p class='stm mis'> d = {</p>
-<p class='pln'> 'test.cog': """\</p>
-<p class='pln'> // This is my C++ file.</p>
-<p class='pln'> //[[[cog</p>
-<p class='pln'> fnames = ['DoSomething', 'DoAnotherThing', 'DoLastThing']</p>
-<p class='pln'> for fn in fnames:</p>
-<p class='pln'> cog.outl("void %s();" % fn)</p>
-<p class='pln'> //]]]</p>
-<p class='pln'> //[[[end]]]</p>
-<p class='pln'> """,</p>
-<p class='pln'> </p>
-<p class='pln'> 'test.out': """\</p>
-<p class='pln'> // This is my C++ file.</p>
-<p class='pln'> //[[[cog</p>
-<p class='pln'> fnames = ['DoSomething', 'DoAnotherThing', 'DoLastThing']</p>
-<p class='pln'> for fn in fnames:</p>
-<p class='pln'> cog.outl("void %s();" % fn)</p>
-<p class='pln'> //]]]</p>
-<p class='pln'> void DoSomething();</p>
-<p class='pln'> void DoAnotherThing();</p>
-<p class='pln'> void DoLastThing();</p>
-<p class='pln'> //[[[end]]]</p>
-<p class='pln'> """,</p>
-<p class='pln'> }</p>
-<p class='pln'> </p>
-<p class='stm mis'> makeFiles(d)</p>
-<p class='stm mis'> self.cog.callableMain(['argv0', '-o', 'test.cogged', 'test.cog'])</p>
-<p class='stm mis'> self.assertFilesSame('test.cogged', 'test.out')</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testAtFile(self):</p>
-<p class='stm mis'> d = {</p>
-<p class='pln'> 'one.cog': """\</p>
-<p class='pln'> //[[[cog</p>
-<p class='pln'> cog.outl("hello world")</p>
-<p class='pln'> //]]]</p>
-<p class='pln'> //[[[end]]]</p>
-<p class='pln'> """,</p>
-<p class='pln'> </p>
-<p class='pln'> 'one.out': """\</p>
-<p class='pln'> //[[[cog</p>
-<p class='pln'> cog.outl("hello world")</p>
-<p class='pln'> //]]]</p>
-<p class='pln'> hello world</p>
-<p class='pln'> //[[[end]]]</p>
-<p class='pln'> """,</p>
-<p class='pln'> </p>
-<p class='pln'> 'two.cog': """\</p>
-<p class='pln'> //[[[cog</p>
-<p class='pln'> cog.outl("goodbye cruel world")</p>
-<p class='pln'> //]]]</p>
-<p class='pln'> //[[[end]]]</p>
-<p class='pln'> """,</p>
-<p class='pln'> </p>
-<p class='pln'> 'two.out': """\</p>
-<p class='pln'> //[[[cog</p>
-<p class='pln'> cog.outl("goodbye cruel world")</p>
-<p class='pln'> //]]]</p>
-<p class='pln'> goodbye cruel world</p>
-<p class='pln'> //[[[end]]]</p>
-<p class='pln'> """,</p>
-<p class='pln'> </p>
-<p class='pln'> 'cogfiles.txt': """\</p>
-<p class='pln'> # Please run cog</p>
-<p class='pln'> one.cog</p>
-<p class='pln'> </p>
-<p class='pln'> two.cog</p>
-<p class='pln'> """</p>
-<p class='pln'> }</p>
-<p class='pln'> </p>
-<p class='stm mis'> makeFiles(d)</p>
-<p class='stm mis'> self.cog.callableMain(['argv0', '-r', '@cogfiles.txt'])</p>
-<p class='stm mis'> self.assertFilesSame('one.cog', 'one.out')</p>
-<p class='stm mis'> self.assertFilesSame('two.cog', 'two.out')</p>
-<p class='stm mis'> output = self.output.getvalue()</p>
-<p class='stm mis'> assert(output.find("(changed)") >= 0)</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testNestedAtFile(self):</p>
-<p class='stm mis'> d = {</p>
-<p class='pln'> 'one.cog': """\</p>
-<p class='pln'> //[[[cog</p>
-<p class='pln'> cog.outl("hello world")</p>
-<p class='pln'> //]]]</p>
-<p class='pln'> //[[[end]]]</p>
-<p class='pln'> """,</p>
-<p class='pln'> </p>
-<p class='pln'> 'one.out': """\</p>
-<p class='pln'> //[[[cog</p>
-<p class='pln'> cog.outl("hello world")</p>
-<p class='pln'> //]]]</p>
-<p class='pln'> hello world</p>
-<p class='pln'> //[[[end]]]</p>
-<p class='pln'> """,</p>
-<p class='pln'> </p>
-<p class='pln'> 'two.cog': """\</p>
-<p class='pln'> //[[[cog</p>
-<p class='pln'> cog.outl("goodbye cruel world")</p>
-<p class='pln'> //]]]</p>
-<p class='pln'> //[[[end]]]</p>
-<p class='pln'> """,</p>
-<p class='pln'> </p>
-<p class='pln'> 'two.out': """\</p>
-<p class='pln'> //[[[cog</p>
-<p class='pln'> cog.outl("goodbye cruel world")</p>
-<p class='pln'> //]]]</p>
-<p class='pln'> goodbye cruel world</p>
-<p class='pln'> //[[[end]]]</p>
-<p class='pln'> """,</p>
-<p class='pln'> </p>
-<p class='pln'> 'cogfiles.txt': """\</p>
-<p class='pln'> # Please run cog</p>
-<p class='pln'> one.cog</p>
-<p class='pln'> @cogfiles2.txt</p>
-<p class='pln'> """,</p>
-<p class='pln'> </p>
-<p class='pln'> 'cogfiles2.txt': """\</p>
-<p class='pln'> # This one too, please.</p>
-<p class='pln'> two.cog</p>
-<p class='pln'> """,</p>
-<p class='pln'> }</p>
-<p class='pln'> </p>
-<p class='stm mis'> makeFiles(d)</p>
-<p class='stm mis'> self.cog.callableMain(['argv0', '-r', '@cogfiles.txt'])</p>
-<p class='stm mis'> self.assertFilesSame('one.cog', 'one.out')</p>
-<p class='stm mis'> self.assertFilesSame('two.cog', 'two.out')</p>
-<p class='stm mis'> output = self.output.getvalue()</p>
-<p class='stm mis'> assert(output.find("(changed)") >= 0)</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testAtFileWithArgs(self):</p>
-<p class='stm mis'> d = {</p>
-<p class='pln'> 'both.cog': """\</p>
-<p class='pln'> //[[[cog</p>
-<p class='pln'> cog.outl("one: %s" % globals().has_key('one'))</p>
-<p class='pln'> cog.outl("two: %s" % globals().has_key('two'))</p>
-<p class='pln'> //]]]</p>
-<p class='pln'> //[[[end]]]</p>
-<p class='pln'> """,</p>
-<p class='pln'> </p>
-<p class='pln'> 'one.out': """\</p>
-<p class='pln'> //[[[cog</p>
-<p class='pln'> cog.outl("one: %s" % globals().has_key('one'))</p>
-<p class='pln'> cog.outl("two: %s" % globals().has_key('two'))</p>
-<p class='pln'> //]]]</p>
-<p class='pln'> one: True // ONE</p>
-<p class='pln'> two: False // ONE</p>
-<p class='pln'> //[[[end]]]</p>
-<p class='pln'> """,</p>
-<p class='pln'> </p>
-<p class='pln'> 'two.out': """\</p>
-<p class='pln'> //[[[cog</p>
-<p class='pln'> cog.outl("one: %s" % globals().has_key('one'))</p>
-<p class='pln'> cog.outl("two: %s" % globals().has_key('two'))</p>
-<p class='pln'> //]]]</p>
-<p class='pln'> one: False // TWO</p>
-<p class='pln'> two: True // TWO</p>
-<p class='pln'> //[[[end]]]</p>
-<p class='pln'> """,</p>
-<p class='pln'> </p>
-<p class='pln'> 'cogfiles.txt': """\</p>
-<p class='pln'> # Please run cog</p>
-<p class='pln'> both.cog -o both.one -s ' // ONE' -D one=x</p>
-<p class='pln'> both.cog -o both.two -s ' // TWO' -D two=x</p>
-<p class='pln'> """</p>
-<p class='pln'> }</p>
-<p class='pln'> </p>
-<p class='stm mis'> makeFiles(d)</p>
-<p class='stm mis'> self.cog.callableMain(['argv0', '@cogfiles.txt'])</p>
-<p class='stm mis'> self.assertFilesSame('both.one', 'one.out')</p>
-<p class='stm mis'> self.assertFilesSame('both.two', 'two.out')</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testAtFileWithBadArgCombo(self):</p>
-<p class='stm mis'> d = {</p>
-<p class='pln'> 'both.cog': """\</p>
-<p class='pln'> //[[[cog</p>
-<p class='pln'> cog.outl("one: %s" % globals().has_key('one'))</p>
-<p class='pln'> cog.outl("two: %s" % globals().has_key('two'))</p>
-<p class='pln'> //]]]</p>
-<p class='pln'> //[[[end]]]</p>
-<p class='pln'> """,</p>
-<p class='pln'> </p>
-<p class='pln'> 'cogfiles.txt': """\</p>
-<p class='pln'> # Please run cog</p>
-<p class='pln'> both.cog</p>
-<p class='pln'> both.cog -d # This is bad: -r and -d</p>
-<p class='pln'> """</p>
-<p class='pln'> }</p>
-<p class='pln'> </p>
-<p class='stm mis'> makeFiles(d)</p>
-<p class='stm mis'> self.assertRaises(CogUsageError, self.cog.callableMain, (['argv0', '-r', '@cogfiles.txt']))</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testAtFileWithTrickyFilenames(self):</p>
-<p class='stm mis'> d = {</p>
-<p class='pln'> 'one 1.cog': """\</p>
-<p class='pln'> //[[[cog cog.outl("hello world") ]]]</p>
-<p class='pln'> """,</p>
-<p class='pln'> </p>
-<p class='pln'> 'one.out': """\</p>
-<p class='pln'> //[[[cog cog.outl("hello world") ]]]</p>
-<p class='pln'> hello world //xxx</p>
-<p class='pln'> """,</p>
-<p class='pln'> </p>
-<p class='pln'> 'subdir': {</p>
-<p class='pln'> 'subback.cog': """\</p>
-<p class='pln'> //[[[cog cog.outl("down deep with backslashes") ]]]</p>
-<p class='pln'> """,</p>
-<p class='pln'> </p>
-<p class='pln'> 'subfwd.cog': """\</p>
-<p class='pln'> //[[[cog cog.outl("down deep with slashes") ]]]</p>
-<p class='pln'> """,</p>
-<p class='pln'> },</p>
-<p class='pln'> </p>
-<p class='pln'> 'subback.out': """\</p>
-<p class='pln'> //[[[cog cog.outl("down deep with backslashes") ]]]</p>
-<p class='pln'> down deep with backslashes //yyy</p>
-<p class='pln'> """,</p>
-<p class='pln'> </p>
-<p class='pln'> 'subfwd.out': """\</p>
-<p class='pln'> //[[[cog cog.outl("down deep with slashes") ]]]</p>
-<p class='pln'> down deep with slashes //zzz</p>
-<p class='pln'> """,</p>
-<p class='pln'> </p>
-<p class='pln'> 'cogfiles.txt': """\</p>
-<p class='pln'> # Please run cog</p>
-<p class='pln'> 'one 1.cog' -s ' //xxx'</p>
-<p class='pln'> subdir\subback.cog -s ' //yyy'</p>
-<p class='pln'> subdir/subfwd.cog -s ' //zzz'</p>
-<p class='pln'> """</p>
-<p class='pln'> }</p>
-<p class='pln'> </p>
-<p class='stm mis'> makeFiles(d)</p>
-<p class='stm mis'> self.cog.callableMain(['argv0', '-z', '-r', '@cogfiles.txt'])</p>
-<p class='stm mis'> self.assertFilesSame('one 1.cog', 'one.out')</p>
-<p class='stm mis'> self.assertFilesSame('subdir/subback.cog', 'subback.out')</p>
-<p class='stm mis'> self.assertFilesSame('subdir/subfwd.cog', 'subfwd.out')</p>
-<p class='pln'> </p>
-<p class='pln'> </p>
-<p class='stm run hide'>class CogTestLineEndings(TestCaseWithTempDir):</p>
-<p class='pln'> """Tests for -U option (force LF line-endings in output)."""</p>
-<p class='pln'> </p>
-<p class='stm run hide'> lines_in = ['Some text.',</p>
-<p class='pln'> '//[[[cog',</p>
-<p class='pln'> 'cog.outl("Cog text")',</p>
-<p class='pln'> '//]]]',</p>
-<p class='pln'> 'gobbledegook.',</p>
-<p class='pln'> '//[[[end]]]',</p>
-<p class='pln'> 'epilogue.',</p>
-<p class='pln'> '']</p>
-<p class='pln'> </p>
-<p class='stm run hide'> lines_out = ['Some text.',</p>
-<p class='pln'> '//[[[cog',</p>
-<p class='pln'> 'cog.outl("Cog text")',</p>
-<p class='pln'> '//]]]',</p>
-<p class='pln'> 'Cog text',</p>
-<p class='pln'> '//[[[end]]]',</p>
-<p class='pln'> 'epilogue.',</p>
-<p class='pln'> '']</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testOutputNativeEol(self):</p>
-<p class='stm mis'> makeFiles({'infile': '\n'.join(self.lines_in)})</p>
-<p class='stm mis'> self.cog.callableMain(['argv0', '-o', 'outfile', 'infile'])</p>
-<p class='stm mis'> self.assertFileContent('outfile', os.linesep.join(self.lines_out))</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testOutputLfEol(self):</p>
-<p class='stm mis'> makeFiles({'infile': '\n'.join(self.lines_in)})</p>
-<p class='stm mis'> self.cog.callableMain(['argv0', '-U', '-o', 'outfile', 'infile'])</p>
-<p class='stm mis'> self.assertFileContent('outfile', '\n'.join(self.lines_out))</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testReplaceNativeEol(self):</p>
-<p class='stm mis'> makeFiles({'test.cog': '\n'.join(self.lines_in)})</p>
-<p class='stm mis'> self.cog.callableMain(['argv0', '-r', 'test.cog'])</p>
-<p class='stm mis'> self.assertFileContent('test.cog', os.linesep.join(self.lines_out))</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testReplaceLfEol(self):</p>
-<p class='stm mis'> makeFiles({'test.cog': '\n'.join(self.lines_in)})</p>
-<p class='stm mis'> self.cog.callableMain(['argv0', '-U', '-r', 'test.cog'])</p>
-<p class='stm mis'> self.assertFileContent('test.cog', '\n'.join(self.lines_out))</p>
-<p class='pln'> </p>
-<p class='pln'> </p>
-<p class='stm run hide'>class TestCaseWithImports(TestCaseWithTempDir):</p>
-<p class='pln'> """ When running tests which import modules, the sys.modules list</p>
-<p class='pln'> leaks from one test to the next. This test case class scrubs</p>
-<p class='pln'> the list after each run to keep the tests isolated from each other.</p>
-<p class='pln'> """</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def setUp(self):</p>
-<p class='stm mis'> TestCaseWithTempDir.setUp(self)</p>
-<p class='stm mis'> self.sysmodulekeys = list(sys.modules)</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def tearDown(self):</p>
-<p class='stm mis'> modstoscrub = [</p>
-<p class='pln'> modname</p>
-<p class='pln'> for modname in sys.modules</p>
-<p class='pln'> if modname not in self.sysmodulekeys</p>
-<p class='pln'> ]</p>
-<p class='stm mis'> for modname in modstoscrub:</p>
-<p class='stm mis'> del sys.modules[modname]</p>
-<p class='stm mis'> TestCaseWithTempDir.tearDown(self)</p>
-<p class='pln'> </p>
-<p class='pln'> </p>
-<p class='stm run hide'>class CogIncludeTests(TestCaseWithImports):</p>
-<p class='stm run hide'> dincludes = {</p>
-<p class='pln'> 'test.cog': """\</p>
-<p class='pln'> //[[[cog</p>
-<p class='pln'> import mymodule</p>
-<p class='pln'> //]]]</p>
-<p class='pln'> //[[[end]]]</p>
-<p class='pln'> """,</p>
-<p class='pln'> </p>
-<p class='pln'> 'test.out': """\</p>
-<p class='pln'> //[[[cog</p>
-<p class='pln'> import mymodule</p>
-<p class='pln'> //]]]</p>
-<p class='pln'> Hello from mymodule</p>
-<p class='pln'> //[[[end]]]</p>
-<p class='pln'> """,</p>
-<p class='pln'> </p>
-<p class='pln'> 'test2.out': """\</p>
-<p class='pln'> //[[[cog</p>
-<p class='pln'> import mymodule</p>
-<p class='pln'> //]]]</p>
-<p class='pln'> Hello from mymodule in inc2</p>
-<p class='pln'> //[[[end]]]</p>
-<p class='pln'> """,</p>
-<p class='pln'> </p>
-<p class='pln'> 'include': {</p>
-<p class='pln'> 'mymodule.py': """\</p>
-<p class='pln'> import cog</p>
-<p class='pln'> cog.outl("Hello from mymodule")</p>
-<p class='pln'> """</p>
-<p class='pln'> },</p>
-<p class='pln'> </p>
-<p class='pln'> 'inc2': {</p>
-<p class='pln'> 'mymodule.py': """\</p>
-<p class='pln'> import cog</p>
-<p class='pln'> cog.outl("Hello from mymodule in inc2")</p>
-<p class='pln'> """</p>
-<p class='pln'> },</p>
-<p class='pln'> </p>
-<p class='pln'> 'inc3': {</p>
-<p class='pln'> 'someothermodule.py': """\</p>
-<p class='pln'> import cog</p>
-<p class='pln'> cog.outl("This is some other module.")</p>
-<p class='pln'> """</p>
-<p class='pln'> },</p>
-<p class='pln'> }</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testNeedIncludePath(self):</p>
-<p class='pln'> # Try it without the -I, to see that an ImportError happens.</p>
-<p class='stm mis'> makeFiles(self.dincludes)</p>
-<p class='stm mis'> self.assertRaises(ImportError, self.cog.callableMain, (['argv0', '-r', 'test.cog']))</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testIncludePath(self):</p>
-<p class='pln'> # Test that -I adds include directories properly.</p>
-<p class='stm mis'> makeFiles(self.dincludes)</p>
-<p class='stm mis'> self.cog.callableMain(['argv0', '-r', '-I', 'include', 'test.cog'])</p>
-<p class='stm mis'> self.assertFilesSame('test.cog', 'test.out')</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testTwoIncludePaths(self):</p>
-<p class='pln'> # Test that two -I's add include directories properly.</p>
-<p class='stm mis'> makeFiles(self.dincludes)</p>
-<p class='stm mis'> self.cog.callableMain(['argv0', '-r', '-I', 'include', '-I', 'inc2', 'test.cog'])</p>
-<p class='stm mis'> self.assertFilesSame('test.cog', 'test.out')</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testTwoIncludePaths2(self):</p>
-<p class='pln'> # Test that two -I's add include directories properly.</p>
-<p class='stm mis'> makeFiles(self.dincludes)</p>
-<p class='stm mis'> self.cog.callableMain(['argv0', '-r', '-I', 'inc2', '-I', 'include', 'test.cog'])</p>
-<p class='stm mis'> self.assertFilesSame('test.cog', 'test2.out')</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testUselessIncludePath(self):</p>
-<p class='pln'> # Test that the search will continue past the first directory.</p>
-<p class='stm mis'> makeFiles(self.dincludes)</p>
-<p class='stm mis'> self.cog.callableMain(['argv0', '-r', '-I', 'inc3', '-I', 'include', 'test.cog'])</p>
-<p class='stm mis'> self.assertFilesSame('test.cog', 'test.out')</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testSysPathIsUnchanged(self):</p>
-<p class='stm mis'> d = {</p>
-<p class='pln'> 'bad.cog': """\</p>
-<p class='pln'> //[[[cog cog.error("Oh no!") ]]]</p>
-<p class='pln'> //[[[end]]]</p>
-<p class='pln'> """,</p>
-<p class='pln'> 'good.cog': """\</p>
-<p class='pln'> //[[[cog cog.outl("Oh yes!") ]]]</p>
-<p class='pln'> //[[[end]]]</p>
-<p class='pln'> """,</p>
-<p class='pln'> }</p>
-<p class='pln'> </p>
-<p class='stm mis'> makeFiles(d)</p>
-<p class='pln'> # Is it unchanged just by creating a cog engine?</p>
-<p class='stm mis'> oldsyspath = sys.path[:]</p>
-<p class='stm mis'> self.newCog()</p>
-<p class='stm mis'> self.assertEqual(oldsyspath, sys.path)</p>
-<p class='pln'> # Is it unchanged for a successful run?</p>
-<p class='stm mis'> self.newCog()</p>
-<p class='stm mis'> self.cog.callableMain(['argv0', '-r', 'good.cog'])</p>
-<p class='stm mis'> self.assertEqual(oldsyspath, sys.path)</p>
-<p class='pln'> # Is it unchanged for a successful run with includes?</p>
-<p class='stm mis'> self.newCog()</p>
-<p class='stm mis'> self.cog.callableMain(['argv0', '-r', '-I', 'xyzzy', 'good.cog'])</p>
-<p class='stm mis'> self.assertEqual(oldsyspath, sys.path)</p>
-<p class='pln'> # Is it unchanged for a successful run with two includes?</p>
-<p class='stm mis'> self.newCog()</p>
-<p class='stm mis'> self.cog.callableMain(['argv0', '-r', '-I', 'xyzzy', '-I', 'quux', 'good.cog'])</p>
-<p class='stm mis'> self.assertEqual(oldsyspath, sys.path)</p>
-<p class='pln'> # Is it unchanged for a failed run?</p>
-<p class='stm mis'> self.newCog()</p>
-<p class='stm mis'> self.assertRaises(CogError, self.cog.callableMain, (['argv0', '-r', 'bad.cog']))</p>
-<p class='stm mis'> self.assertEqual(oldsyspath, sys.path)</p>
-<p class='pln'> # Is it unchanged for a failed run with includes?</p>
-<p class='stm mis'> self.newCog()</p>
-<p class='stm mis'> self.assertRaises(CogError, self.cog.callableMain, (['argv0', '-r', '-I', 'xyzzy', 'bad.cog']))</p>
-<p class='stm mis'> self.assertEqual(oldsyspath, sys.path)</p>
-<p class='pln'> # Is it unchanged for a failed run with two includes?</p>
-<p class='stm mis'> self.newCog()</p>
-<p class='stm mis'> self.assertRaises(CogError, self.cog.callableMain, (['argv0', '-r', '-I', 'xyzzy', '-I', 'quux', 'bad.cog']))</p>
-<p class='stm mis'> self.assertEqual(oldsyspath, sys.path)</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testSubDirectories(self):</p>
-<p class='pln'> # Test that relative paths on the command line work, with includes.</p>
-<p class='pln'> </p>
-<p class='stm mis'> d = {</p>
-<p class='pln'> 'code': {</p>
-<p class='pln'> 'test.cog': """\</p>
-<p class='pln'> //[[[cog</p>
-<p class='pln'> import mysubmodule</p>
-<p class='pln'> //]]]</p>
-<p class='pln'> //[[[end]]]</p>
-<p class='pln'> """,</p>
-<p class='pln'> </p>
-<p class='pln'> 'test.out': """\</p>
-<p class='pln'> //[[[cog</p>
-<p class='pln'> import mysubmodule</p>
-<p class='pln'> //]]]</p>
-<p class='pln'> Hello from mysubmodule</p>
-<p class='pln'> //[[[end]]]</p>
-<p class='pln'> """,</p>
-<p class='pln'> </p>
-<p class='pln'> 'mysubmodule.py': """\</p>
-<p class='pln'> import cog</p>
-<p class='pln'> cog.outl("Hello from mysubmodule")</p>
-<p class='pln'> """</p>
-<p class='pln'> }</p>
-<p class='pln'> }</p>
-<p class='pln'> </p>
-<p class='stm mis'> makeFiles(d)</p>
-<p class='pln'> # We should be able to invoke cog without the -I switch, and it will</p>
-<p class='pln'> # auto-include the current directory</p>
-<p class='stm mis'> self.cog.callableMain(['argv0', '-r', 'code/test.cog'])</p>
-<p class='stm mis'> self.assertFilesSame('code/test.cog', 'code/test.out')</p>
-<p class='pln'> </p>
-<p class='pln'> </p>
-<p class='stm run hide'>class CogTestsInFiles(TestCaseWithTempDir):</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testWarnIfNoCogCode(self):</p>
-<p class='pln'> # Test that the -e switch warns if there is no Cog code.</p>
-<p class='stm mis'> d = {</p>
-<p class='pln'> 'with.cog': """\</p>
-<p class='pln'> //[[[cog</p>
-<p class='pln'> cog.outl("hello world")</p>
-<p class='pln'> //]]]</p>
-<p class='pln'> hello world</p>
-<p class='pln'> //[[[end]]]</p>
-<p class='pln'> """,</p>
-<p class='pln'> </p>
-<p class='pln'> 'without.cog': """\</p>
-<p class='pln'> There's no cog</p>
-<p class='pln'> code in this file.</p>
-<p class='pln'> """,</p>
-<p class='pln'> }</p>
-<p class='pln'> </p>
-<p class='stm mis'> makeFiles(d)</p>
-<p class='stm mis'> self.cog.callableMain(['argv0', '-e', 'with.cog'])</p>
-<p class='stm mis'> output = self.output.getvalue()</p>
-<p class='stm mis'> assert(output.find("Warning") < 0)</p>
-<p class='stm mis'> self.newCog()</p>
-<p class='stm mis'> self.cog.callableMain(['argv0', '-e', 'without.cog'])</p>
-<p class='stm mis'> output = self.output.getvalue()</p>
-<p class='stm mis'> assert(output.find("Warning: no cog code found in without.cog") >= 0)</p>
-<p class='stm mis'> self.newCog()</p>
-<p class='stm mis'> self.cog.callableMain(['argv0', 'without.cog'])</p>
-<p class='stm mis'> output = self.output.getvalue()</p>
-<p class='stm mis'> assert(output.find("Warning") < 0)</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testFileNameProps(self):</p>
-<p class='stm mis'> d = {</p>
-<p class='pln'> 'cog1.txt': """\</p>
-<p class='pln'> //[[[cog</p>
-<p class='pln'> cog.outl("This is %s in, %s out" % (cog.inFile, cog.outFile))</p>
-<p class='pln'> //]]]</p>
-<p class='pln'> this is cog1.txt in, cog1.txt out</p>
-<p class='pln'> [[[end]]]</p>
-<p class='pln'> """,</p>
-<p class='pln'> </p>
-<p class='pln'> 'cog1.out': """\</p>
-<p class='pln'> //[[[cog</p>
-<p class='pln'> cog.outl("This is %s in, %s out" % (cog.inFile, cog.outFile))</p>
-<p class='pln'> //]]]</p>
-<p class='pln'> This is cog1.txt in, cog1.txt out</p>
-<p class='pln'> [[[end]]]</p>
-<p class='pln'> """,</p>
-<p class='pln'> </p>
-<p class='pln'> 'cog1out.out': """\</p>
-<p class='pln'> //[[[cog</p>
-<p class='pln'> cog.outl("This is %s in, %s out" % (cog.inFile, cog.outFile))</p>
-<p class='pln'> //]]]</p>
-<p class='pln'> This is cog1.txt in, cog1out.txt out</p>
-<p class='pln'> [[[end]]]</p>
-<p class='pln'> """,</p>
-<p class='pln'> }</p>
-<p class='pln'> </p>
-<p class='stm mis'> makeFiles(d)</p>
-<p class='stm mis'> self.cog.callableMain(['argv0', '-r', 'cog1.txt'])</p>
-<p class='stm mis'> self.assertFilesSame('cog1.txt', 'cog1.out')</p>
-<p class='stm mis'> self.newCog()</p>
-<p class='stm mis'> self.cog.callableMain(['argv0', '-o', 'cog1out.txt', 'cog1.txt'])</p>
-<p class='stm mis'> self.assertFilesSame('cog1out.txt', 'cog1out.out')</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testGlobalsDontCrossFiles(self):</p>
-<p class='pln'> # Make sure that global values don't get shared between files.</p>
-<p class='stm mis'> d = {</p>
-<p class='pln'> 'one.cog': """\</p>
-<p class='pln'> //[[[cog s = "This was set in one.cog" ]]]</p>
-<p class='pln'> //[[[end]]]</p>
-<p class='pln'> //[[[cog cog.outl(s) ]]]</p>
-<p class='pln'> //[[[end]]]</p>
-<p class='pln'> """,</p>
-<p class='pln'> </p>
-<p class='pln'> 'one.out': """\</p>
-<p class='pln'> //[[[cog s = "This was set in one.cog" ]]]</p>
-<p class='pln'> //[[[end]]]</p>
-<p class='pln'> //[[[cog cog.outl(s) ]]]</p>
-<p class='pln'> This was set in one.cog</p>
-<p class='pln'> //[[[end]]]</p>
-<p class='pln'> """,</p>
-<p class='pln'> </p>
-<p class='pln'> 'two.cog': """\</p>
-<p class='pln'> //[[[cog</p>
-<p class='pln'> try:</p>
-<p class='pln'> cog.outl(s)</p>
-<p class='pln'> except NameError:</p>
-<p class='pln'> cog.outl("s isn't set!")</p>
-<p class='pln'> //]]]</p>
-<p class='pln'> //[[[end]]]</p>
-<p class='pln'> """,</p>
-<p class='pln'> </p>
-<p class='pln'> 'two.out': """\</p>
-<p class='pln'> //[[[cog</p>
-<p class='pln'> try:</p>
-<p class='pln'> cog.outl(s)</p>
-<p class='pln'> except NameError:</p>
-<p class='pln'> cog.outl("s isn't set!")</p>
-<p class='pln'> //]]]</p>
-<p class='pln'> s isn't set!</p>
-<p class='pln'> //[[[end]]]</p>
-<p class='pln'> """,</p>
-<p class='pln'> </p>
-<p class='pln'> 'cogfiles.txt': """\</p>
-<p class='pln'> # Please run cog</p>
-<p class='pln'> one.cog</p>
-<p class='pln'> </p>
-<p class='pln'> two.cog</p>
-<p class='pln'> """</p>
-<p class='pln'> }</p>
-<p class='pln'> </p>
-<p class='stm mis'> makeFiles(d)</p>
-<p class='stm mis'> self.cog.callableMain(['argv0', '-r', '@cogfiles.txt'])</p>
-<p class='stm mis'> self.assertFilesSame('one.cog', 'one.out')</p>
-<p class='stm mis'> self.assertFilesSame('two.cog', 'two.out')</p>
-<p class='stm mis'> output = self.output.getvalue()</p>
-<p class='stm mis'> assert(output.find("(changed)") >= 0)</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testRemoveGeneratedOutput(self):</p>
-<p class='stm mis'> d = {</p>
-<p class='pln'> 'cog1.txt': """\</p>
-<p class='pln'> //[[[cog</p>
-<p class='pln'> cog.outl("This line was generated.")</p>
-<p class='pln'> //]]]</p>
-<p class='pln'> This line was generated.</p>
-<p class='pln'> //[[[end]]]</p>
-<p class='pln'> This line was not.</p>
-<p class='pln'> """,</p>
-<p class='pln'> </p>
-<p class='pln'> 'cog1.out': """\</p>
-<p class='pln'> //[[[cog</p>
-<p class='pln'> cog.outl("This line was generated.")</p>
-<p class='pln'> //]]]</p>
-<p class='pln'> //[[[end]]]</p>
-<p class='pln'> This line was not.</p>
-<p class='pln'> """,</p>
-<p class='pln'> </p>
-<p class='pln'> 'cog1.out2': """\</p>
-<p class='pln'> //[[[cog</p>
-<p class='pln'> cog.outl("This line was generated.")</p>
-<p class='pln'> //]]]</p>
-<p class='pln'> This line was generated.</p>
-<p class='pln'> //[[[end]]]</p>
-<p class='pln'> This line was not.</p>
-<p class='pln'> """,</p>
-<p class='pln'> }</p>
-<p class='pln'> </p>
-<p class='stm mis'> makeFiles(d)</p>
-<p class='pln'> # Remove generated output.</p>
-<p class='stm mis'> self.cog.callableMain(['argv0', '-r', '-x', 'cog1.txt'])</p>
-<p class='stm mis'> self.assertFilesSame('cog1.txt', 'cog1.out')</p>
-<p class='stm mis'> self.newCog()</p>
-<p class='pln'> # Regenerate the generated output.</p>
-<p class='stm mis'> self.cog.callableMain(['argv0', '-r', 'cog1.txt'])</p>
-<p class='stm mis'> self.assertFilesSame('cog1.txt', 'cog1.out2')</p>
-<p class='stm mis'> self.newCog()</p>
-<p class='pln'> # Remove the generated output again.</p>
-<p class='stm mis'> self.cog.callableMain(['argv0', '-r', '-x', 'cog1.txt'])</p>
-<p class='stm mis'> self.assertFilesSame('cog1.txt', 'cog1.out')</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testMsgCall(self):</p>
-<p class='stm mis'> infile = """\</p>
-<p class='pln'> #[[[cog</p>
-<p class='pln'> cog.msg("Hello there!")</p>
-<p class='pln'> #]]]</p>
-<p class='pln'> #[[[end]]]</p>
-<p class='pln'> """</p>
-<p class='stm mis'> infile = reindentBlock(infile)</p>
-<p class='stm mis'> self.assertEqual(self.cog.processString(infile), infile)</p>
-<p class='stm mis'> output = self.output.getvalue()</p>
-<p class='stm mis'> self.assertEqual(output, "Message: Hello there!\n")</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testErrorMessageHasNoTraceback(self):</p>
-<p class='pln'> # Test that a Cog error is printed to stderr with no traceback.</p>
-<p class='pln'> </p>
-<p class='stm mis'> d = {</p>
-<p class='pln'> 'cog1.txt': """\</p>
-<p class='pln'> //[[[cog</p>
-<p class='pln'> cog.outl("This line was newly")</p>
-<p class='pln'> cog.outl("generated by cog")</p>
-<p class='pln'> cog.outl("blah blah.")</p>
-<p class='pln'> //]]]</p>
-<p class='pln'> Xhis line was newly</p>
-<p class='pln'> generated by cog</p>
-<p class='pln'> blah blah.</p>
-<p class='pln'> //[[[end]]] (checksum: a8540982e5ad6b95c9e9a184b26f4346)</p>
-<p class='pln'> """,</p>
-<p class='pln'> }</p>
-<p class='pln'> </p>
-<p class='stm mis'> makeFiles(d)</p>
-<p class='stm mis'> stderr = StringIO.StringIO()</p>
-<p class='stm mis'> self.cog.setOutput(stderr=stderr)</p>
-<p class='stm mis'> self.cog.main(['argv0', '-c', '-r', "cog1.txt"])</p>
-<p class='stm mis'> output = self.output.getvalue()</p>
-<p class='stm mis'> self.assertEqual(self.output.getvalue(), "Cogging cog1.txt\n")</p>
-<p class='stm mis'> self.assertEqual(stderr.getvalue(), "cog1.txt(9): Output has been edited! Delete old checksum to unprotect.\n")</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testDashD(self):</p>
-<p class='stm mis'> d = {</p>
-<p class='pln'> 'test.cog': """\</p>
-<p class='pln'> --[[[cog cog.outl("Defined fooey as " + fooey) ]]]</p>
-<p class='pln'> --[[[end]]]</p>
-<p class='pln'> """,</p>
-<p class='pln'> </p>
-<p class='pln'> 'test.kablooey': """\</p>
-<p class='pln'> --[[[cog cog.outl("Defined fooey as " + fooey) ]]]</p>
-<p class='pln'> Defined fooey as kablooey</p>
-<p class='pln'> --[[[end]]]</p>
-<p class='pln'> """,</p>
-<p class='pln'> </p>
-<p class='pln'> 'test.einstein': """\</p>
-<p class='pln'> --[[[cog cog.outl("Defined fooey as " + fooey) ]]]</p>
-<p class='pln'> Defined fooey as e=mc2</p>
-<p class='pln'> --[[[end]]]</p>
-<p class='pln'> """,</p>
-<p class='pln'> }</p>
-<p class='pln'> </p>
-<p class='stm mis'> makeFiles(d)</p>
-<p class='stm mis'> self.cog.callableMain(['argv0', '-r', '-D', 'fooey=kablooey', 'test.cog'])</p>
-<p class='stm mis'> self.assertFilesSame('test.cog', 'test.kablooey')</p>
-<p class='stm mis'> makeFiles(d)</p>
-<p class='stm mis'> self.cog.callableMain(['argv0', '-r', '-Dfooey=kablooey', 'test.cog'])</p>
-<p class='stm mis'> self.assertFilesSame('test.cog', 'test.kablooey')</p>
-<p class='stm mis'> makeFiles(d)</p>
-<p class='stm mis'> self.cog.callableMain(['argv0', '-r', '-Dfooey=e=mc2', 'test.cog'])</p>
-<p class='stm mis'> self.assertFilesSame('test.cog', 'test.einstein')</p>
-<p class='stm mis'> makeFiles(d)</p>
-<p class='stm mis'> self.cog.callableMain(['argv0', '-r', '-Dbar=quux', '-Dfooey=kablooey', 'test.cog'])</p>
-<p class='stm mis'> self.assertFilesSame('test.cog', 'test.kablooey')</p>
-<p class='stm mis'> makeFiles(d)</p>
-<p class='stm mis'> self.cog.callableMain(['argv0', '-r', '-Dfooey=kablooey', '-Dbar=quux', 'test.cog'])</p>
-<p class='stm mis'> self.assertFilesSame('test.cog', 'test.kablooey')</p>
-<p class='stm mis'> makeFiles(d)</p>
-<p class='stm mis'> self.cog.callableMain(['argv0', '-r', '-Dfooey=gooey', '-Dfooey=kablooey', 'test.cog'])</p>
-<p class='stm mis'> self.assertFilesSame('test.cog', 'test.kablooey')</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testOutputToStdout(self):</p>
-<p class='stm mis'> d = {</p>
-<p class='pln'> 'test.cog': """\</p>
-<p class='pln'> --[[[cog cog.outl('Hey there!') ]]]</p>
-<p class='pln'> --[[[end]]]</p>
-<p class='pln'> """</p>
-<p class='pln'> }</p>
-<p class='pln'> </p>
-<p class='stm mis'> makeFiles(d)</p>
-<p class='stm mis'> stderr = StringIO.StringIO()</p>
-<p class='stm mis'> self.cog.setOutput(stderr=stderr)</p>
-<p class='stm mis'> self.cog.callableMain(['argv0', 'test.cog'])</p>
-<p class='stm mis'> output = self.output.getvalue()</p>
-<p class='stm mis'> outerr = stderr.getvalue()</p>
-<p class='stm mis'> self.assertEqual(output, "--[[[cog cog.outl('Hey there!') ]]]\nHey there!\n--[[[end]]]\n")</p>
-<p class='stm mis'> self.assertEqual(outerr, "")</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testSuffixOutputLines(self):</p>
-<p class='stm mis'> d = {</p>
-<p class='pln'> 'test.cog': """\</p>
-<p class='pln'> Hey there.</p>
-<p class='pln'> ;[[[cog cog.outl('a\\nb\\n \\nc') ]]]</p>
-<p class='pln'> ;[[[end]]]</p>
-<p class='pln'> Good bye.</p>
-<p class='pln'> """,</p>
-<p class='pln'> </p>
-<p class='pln'> 'test.out': """\</p>
-<p class='pln'> Hey there.</p>
-<p class='pln'> ;[[[cog cog.outl('a\\nb\\n \\nc') ]]]</p>
-<p class='pln'> a (foo)</p>
-<p class='pln'> b (foo)</p>
-<p class='pln'> </p>
-<p class='pln'> c (foo)</p>
-<p class='pln'> ;[[[end]]]</p>
-<p class='pln'> Good bye.</p>
-<p class='pln'> """,</p>
-<p class='pln'> }</p>
-<p class='pln'> </p>
-<p class='stm mis'> makeFiles(d)</p>
-<p class='stm mis'> self.cog.callableMain(['argv0', '-r', '-s', ' (foo)', 'test.cog'])</p>
-<p class='stm mis'> self.assertFilesSame('test.cog', 'test.out')</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testEmptySuffix(self):</p>
-<p class='stm mis'> d = {</p>
-<p class='pln'> 'test.cog': """\</p>
-<p class='pln'> ;[[[cog cog.outl('a\\nb\\nc') ]]]</p>
-<p class='pln'> ;[[[end]]]</p>
-<p class='pln'> """,</p>
-<p class='pln'> </p>
-<p class='pln'> 'test.out': """\</p>
-<p class='pln'> ;[[[cog cog.outl('a\\nb\\nc') ]]]</p>
-<p class='pln'> a</p>
-<p class='pln'> b</p>
-<p class='pln'> c</p>
-<p class='pln'> ;[[[end]]]</p>
-<p class='pln'> """,</p>
-<p class='pln'> }</p>
-<p class='pln'> </p>
-<p class='stm mis'> makeFiles(d)</p>
-<p class='stm mis'> self.cog.callableMain(['argv0', '-r', '-s', '', 'test.cog'])</p>
-<p class='stm mis'> self.assertFilesSame('test.cog', 'test.out')</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testHellishSuffix(self):</p>
-<p class='stm mis'> d = {</p>
-<p class='pln'> 'test.cog': """\</p>
-<p class='pln'> ;[[[cog cog.outl('a\\n\\nb') ]]]</p>
-<p class='pln'> """,</p>
-<p class='pln'> </p>
-<p class='pln'> 'test.out': """\</p>
-<p class='pln'> ;[[[cog cog.outl('a\\n\\nb') ]]]</p>
-<p class='pln'> a /\\n*+([)]><</p>
-<p class='pln'> </p>
-<p class='pln'> b /\\n*+([)]><</p>
-<p class='pln'> """,</p>
-<p class='pln'> }</p>
-<p class='pln'> </p>
-<p class='stm mis'> makeFiles(d)</p>
-<p class='stm mis'> self.cog.callableMain(['argv0', '-z', '-r', '-s', r' /\n*+([)]><', 'test.cog'])</p>
-<p class='stm mis'> self.assertFilesSame('test.cog', 'test.out')</p>
-<p class='pln'> </p>
-<p class='stm run hide'>class WritabilityTests(TestCaseWithTempDir):</p>
-<p class='pln'> </p>
-<p class='stm run hide'> d = {</p>
-<p class='pln'> 'test.cog': """\</p>
-<p class='pln'> //[[[cog</p>
-<p class='pln'> for fn in ['DoSomething', 'DoAnotherThing', 'DoLastThing']:</p>
-<p class='pln'> cog.outl("void %s();" % fn)</p>
-<p class='pln'> //]]]</p>
-<p class='pln'> //[[[end]]]</p>
-<p class='pln'> """,</p>
-<p class='pln'> </p>
-<p class='pln'> 'test.out': """\</p>
-<p class='pln'> //[[[cog</p>
-<p class='pln'> for fn in ['DoSomething', 'DoAnotherThing', 'DoLastThing']:</p>
-<p class='pln'> cog.outl("void %s();" % fn)</p>
-<p class='pln'> //]]]</p>
-<p class='pln'> void DoSomething();</p>
-<p class='pln'> void DoAnotherThing();</p>
-<p class='pln'> void DoLastThing();</p>
-<p class='pln'> //[[[end]]]</p>
-<p class='pln'> """,</p>
-<p class='pln'> }</p>
-<p class='pln'> </p>
-<p class='exc'> if os.name == 'nt': # pragma: no cover</p>
-<p class='pln'> # for Windows</p>
-<p class='exc'> cmd_w_args = 'attrib -R %s'</p>
-<p class='exc'> cmd_w_asterisk = 'attrib -R *'</p>
-<p class='exc'> else: # pragma: no cover</p>
-<p class='pln'> # for unix-like</p>
-<p class='exc'> cmd_w_args = 'chmod +w %s'</p>
-<p class='exc'> cmd_w_asterisk = 'chmod +w *'</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def setUp(self):</p>
-<p class='stm mis'> TestCaseWithTempDir.setUp(self)</p>
-<p class='stm mis'> makeFiles(self.d)</p>
-<p class='stm mis'> self.testcog = self.tempdir / 'test.cog'</p>
-<p class='stm mis'> self.testcog.chmod(stat.S_IREAD) # Make the file readonly.</p>
-<p class='stm mis'> assert not os.access(self.testcog, os.W_OK)</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def tearDown(self):</p>
-<p class='stm mis'> self.testcog.chmod(stat.S_IWRITE) # Make the file writable again.</p>
-<p class='stm mis'> TestCaseWithTempDir.tearDown(self)</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testReadonlyNoCommand(self):</p>
-<p class='stm mis'> self.assertRaisesMsg(</p>
-<p class='pln'> CogError, "Can't overwrite test.cog",</p>
-<p class='pln'> self.cog.callableMain, (['argv0', '-r', 'test.cog']))</p>
-<p class='stm mis'> assert not os.access(self.testcog, os.W_OK)</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testReadonlyWithCommand(self):</p>
-<p class='stm mis'> self.cog.callableMain(['argv0', '-r', '-w', self.cmd_w_args, 'test.cog'])</p>
-<p class='stm mis'> self.assertFilesSame('test.cog', 'test.out')</p>
-<p class='stm mis'> assert os.access(self.testcog, os.W_OK)</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testReadonlyWithCommandWithNoSlot(self):</p>
-<p class='stm mis'> self.cog.callableMain(['argv0', '-r', '-w', self.cmd_w_asterisk, 'test.cog'])</p>
-<p class='stm mis'> self.assertFilesSame('test.cog', 'test.out')</p>
-<p class='stm mis'> assert os.access(self.testcog, os.W_OK)</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testReadonlyWithIneffectualCommand(self):</p>
-<p class='stm mis'> self.assertRaisesMsg(</p>
-<p class='pln'> CogError, "Couldn't make test.cog writable",</p>
-<p class='pln'> self.cog.callableMain, (['argv0', '-r', '-w', 'echo %s', 'test.cog']))</p>
-<p class='stm mis'> assert not os.access(self.testcog, os.W_OK)</p>
-<p class='pln'> </p>
-<p class='stm run hide'>class ChecksumTests(TestCaseWithTempDir):</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testCreateChecksumOutput(self):</p>
-<p class='stm mis'> d = {</p>
-<p class='pln'> 'cog1.txt': """\</p>
-<p class='pln'> //[[[cog</p>
-<p class='pln'> cog.outl("This line was generated.")</p>
-<p class='pln'> //]]]</p>
-<p class='pln'> This line was generated.</p>
-<p class='pln'> //[[[end]]]</p>
-<p class='pln'> This line was not.</p>
-<p class='pln'> """,</p>
-<p class='pln'> </p>
-<p class='pln'> 'cog1.out': """\</p>
-<p class='pln'> //[[[cog</p>
-<p class='pln'> cog.outl("This line was generated.")</p>
-<p class='pln'> //]]]</p>
-<p class='pln'> This line was generated.</p>
-<p class='pln'> //[[[end]]] (checksum: 8adb13fb59b996a1c7f0065ea9f3d893)</p>
-<p class='pln'> This line was not.</p>
-<p class='pln'> """,</p>
-<p class='pln'> }</p>
-<p class='pln'> </p>
-<p class='stm mis'> makeFiles(d)</p>
-<p class='stm mis'> self.cog.callableMain(['argv0', '-r', '-c', 'cog1.txt'])</p>
-<p class='stm mis'> self.assertFilesSame('cog1.txt', 'cog1.out')</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testCheckChecksumOutput(self):</p>
-<p class='stm mis'> d = {</p>
-<p class='pln'> 'cog1.txt': """\</p>
-<p class='pln'> //[[[cog</p>
-<p class='pln'> cog.outl("This line was newly")</p>
-<p class='pln'> cog.outl("generated by cog")</p>
-<p class='pln'> cog.outl("blah blah.")</p>
-<p class='pln'> //]]]</p>
-<p class='pln'> This line was generated.</p>
-<p class='pln'> //[[[end]]] (checksum: 8adb13fb59b996a1c7f0065ea9f3d893)</p>
-<p class='pln'> """,</p>
-<p class='pln'> </p>
-<p class='pln'> 'cog1.out': """\</p>
-<p class='pln'> //[[[cog</p>
-<p class='pln'> cog.outl("This line was newly")</p>
-<p class='pln'> cog.outl("generated by cog")</p>
-<p class='pln'> cog.outl("blah blah.")</p>
-<p class='pln'> //]]]</p>
-<p class='pln'> This line was newly</p>
-<p class='pln'> generated by cog</p>
-<p class='pln'> blah blah.</p>
-<p class='pln'> //[[[end]]] (checksum: a8540982e5ad6b95c9e9a184b26f4346)</p>
-<p class='pln'> """,</p>
-<p class='pln'> }</p>
-<p class='pln'> </p>
-<p class='stm mis'> makeFiles(d)</p>
-<p class='stm mis'> self.cog.callableMain(['argv0', '-r', '-c', 'cog1.txt'])</p>
-<p class='stm mis'> self.assertFilesSame('cog1.txt', 'cog1.out')</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testRemoveChecksumOutput(self):</p>
-<p class='stm mis'> d = {</p>
-<p class='pln'> 'cog1.txt': """\</p>
-<p class='pln'> //[[[cog</p>
-<p class='pln'> cog.outl("This line was newly")</p>
-<p class='pln'> cog.outl("generated by cog")</p>
-<p class='pln'> cog.outl("blah blah.")</p>
-<p class='pln'> //]]]</p>
-<p class='pln'> This line was generated.</p>
-<p class='pln'> //[[[end]]] (checksum: 8adb13fb59b996a1c7f0065ea9f3d893) fooey</p>
-<p class='pln'> """,</p>
-<p class='pln'> </p>
-<p class='pln'> 'cog1.out': """\</p>
-<p class='pln'> //[[[cog</p>
-<p class='pln'> cog.outl("This line was newly")</p>
-<p class='pln'> cog.outl("generated by cog")</p>
-<p class='pln'> cog.outl("blah blah.")</p>
-<p class='pln'> //]]]</p>
-<p class='pln'> This line was newly</p>
-<p class='pln'> generated by cog</p>
-<p class='pln'> blah blah.</p>
-<p class='pln'> //[[[end]]] fooey</p>
-<p class='pln'> """,</p>
-<p class='pln'> }</p>
-<p class='pln'> </p>
-<p class='stm mis'> makeFiles(d)</p>
-<p class='stm mis'> self.cog.callableMain(['argv0', '-r', 'cog1.txt'])</p>
-<p class='stm mis'> self.assertFilesSame('cog1.txt', 'cog1.out')</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testTamperedChecksumOutput(self):</p>
-<p class='stm mis'> d = {</p>
-<p class='pln'> 'cog1.txt': """\</p>
-<p class='pln'> //[[[cog</p>
-<p class='pln'> cog.outl("This line was newly")</p>
-<p class='pln'> cog.outl("generated by cog")</p>
-<p class='pln'> cog.outl("blah blah.")</p>
-<p class='pln'> //]]]</p>
-<p class='pln'> Xhis line was newly</p>
-<p class='pln'> generated by cog</p>
-<p class='pln'> blah blah.</p>
-<p class='pln'> //[[[end]]] (checksum: a8540982e5ad6b95c9e9a184b26f4346)</p>
-<p class='pln'> """,</p>
-<p class='pln'> </p>
-<p class='pln'> 'cog2.txt': """\</p>
-<p class='pln'> //[[[cog</p>
-<p class='pln'> cog.outl("This line was newly")</p>
-<p class='pln'> cog.outl("generated by cog")</p>
-<p class='pln'> cog.outl("blah blah.")</p>
-<p class='pln'> //]]]</p>
-<p class='pln'> This line was newly</p>
-<p class='pln'> generated by cog</p>
-<p class='pln'> blah blah!</p>
-<p class='pln'> //[[[end]]] (checksum: a8540982e5ad6b95c9e9a184b26f4346)</p>
-<p class='pln'> """,</p>
-<p class='pln'> </p>
-<p class='pln'> 'cog3.txt': """\</p>
-<p class='pln'> //[[[cog</p>
-<p class='pln'> cog.outl("This line was newly")</p>
-<p class='pln'> cog.outl("generated by cog")</p>
-<p class='pln'> cog.outl("blah blah.")</p>
-<p class='pln'> //]]]</p>
-<p class='pln'> </p>
-<p class='pln'> This line was newly</p>
-<p class='pln'> generated by cog</p>
-<p class='pln'> blah blah.</p>
-<p class='pln'> //[[[end]]] (checksum: a8540982e5ad6b95c9e9a184b26f4346)</p>
-<p class='pln'> """,</p>
-<p class='pln'> </p>
-<p class='pln'> 'cog4.txt': """\</p>
-<p class='pln'> //[[[cog</p>
-<p class='pln'> cog.outl("This line was newly")</p>
-<p class='pln'> cog.outl("generated by cog")</p>
-<p class='pln'> cog.outl("blah blah.")</p>
-<p class='pln'> //]]]</p>
-<p class='pln'> This line was newly</p>
-<p class='pln'> generated by cog</p>
-<p class='pln'> blah blah..</p>
-<p class='pln'> //[[[end]]] (checksum: a8540982e5ad6b95c9e9a184b26f4346)</p>
-<p class='pln'> """,</p>
-<p class='pln'> </p>
-<p class='pln'> 'cog5.txt': """\</p>
-<p class='pln'> //[[[cog</p>
-<p class='pln'> cog.outl("This line was newly")</p>
-<p class='pln'> cog.outl("generated by cog")</p>
-<p class='pln'> cog.outl("blah blah.")</p>
-<p class='pln'> //]]]</p>
-<p class='pln'> This line was newly</p>
-<p class='pln'> generated by cog</p>
-<p class='pln'> blah blah.</p>
-<p class='pln'> extra</p>
-<p class='pln'> //[[[end]]] (checksum: a8540982e5ad6b95c9e9a184b26f4346)</p>
-<p class='pln'> """,</p>
-<p class='pln'> </p>
-<p class='pln'> 'cog6.txt': """\</p>
-<p class='pln'> //[[[cog</p>
-<p class='pln'> cog.outl("This line was newly")</p>
-<p class='pln'> cog.outl("generated by cog")</p>
-<p class='pln'> cog.outl("blah blah.")</p>
-<p class='pln'> //]]]</p>
-<p class='pln'> //[[[end]]] (checksum: a8540982e5ad6b95c9e9a184b26f4346)</p>
-<p class='pln'> """,</p>
-<p class='pln'> }</p>
-<p class='pln'> </p>
-<p class='stm mis'> makeFiles(d)</p>
-<p class='stm mis'> self.assertRaisesMsg(CogError,</p>
-<p class='pln'> "cog1.txt(9): Output has been edited! Delete old checksum to unprotect.",</p>
-<p class='pln'> self.cog.callableMain, (['argv0', '-c', "cog1.txt"]))</p>
-<p class='stm mis'> self.assertRaisesMsg(CogError,</p>
-<p class='pln'> "cog2.txt(9): Output has been edited! Delete old checksum to unprotect.",</p>
-<p class='pln'> self.cog.callableMain, (['argv0', '-c', "cog2.txt"]))</p>
-<p class='stm mis'> self.assertRaisesMsg(CogError,</p>
-<p class='pln'> "cog3.txt(10): Output has been edited! Delete old checksum to unprotect.",</p>
-<p class='pln'> self.cog.callableMain, (['argv0', '-c', "cog3.txt"]))</p>
-<p class='stm mis'> self.assertRaisesMsg(CogError,</p>
-<p class='pln'> "cog4.txt(9): Output has been edited! Delete old checksum to unprotect.",</p>
-<p class='pln'> self.cog.callableMain, (['argv0', '-c', "cog4.txt"]))</p>
-<p class='stm mis'> self.assertRaisesMsg(CogError,</p>
-<p class='pln'> "cog5.txt(10): Output has been edited! Delete old checksum to unprotect.",</p>
-<p class='pln'> self.cog.callableMain, (['argv0', '-c', "cog5.txt"]))</p>
-<p class='stm mis'> self.assertRaisesMsg(CogError,</p>
-<p class='pln'> "cog6.txt(6): Output has been edited! Delete old checksum to unprotect.",</p>
-<p class='pln'> self.cog.callableMain, (['argv0', '-c', "cog6.txt"]))</p>
-<p class='pln'> </p>
-<p class='stm run hide'>class BlakeTests(TestCaseWithTempDir):</p>
-<p class='pln'> </p>
-<p class='pln'> # Blake Winton's contributions.</p>
-<p class='stm run hide'> def testDeleteCode(self):</p>
-<p class='pln'> # -o sets the output file.</p>
-<p class='stm mis'> d = {</p>
-<p class='pln'> 'test.cog': """\</p>
-<p class='pln'> // This is my C++ file.</p>
-<p class='pln'> //[[[cog</p>
-<p class='pln'> fnames = ['DoSomething', 'DoAnotherThing', 'DoLastThing']</p>
-<p class='pln'> for fn in fnames:</p>
-<p class='pln'> cog.outl("void %s();" % fn)</p>
-<p class='pln'> //]]]</p>
-<p class='pln'> Some Sample Code Here</p>
-<p class='pln'> //[[[end]]]Data Data</p>
-<p class='pln'> And Some More</p>
-<p class='pln'> """,</p>
-<p class='pln'> </p>
-<p class='pln'> 'test.out': """\</p>
-<p class='pln'> // This is my C++ file.</p>
-<p class='pln'> void DoSomething();</p>
-<p class='pln'> void DoAnotherThing();</p>
-<p class='pln'> void DoLastThing();</p>
-<p class='pln'> And Some More</p>
-<p class='pln'> """,</p>
-<p class='pln'> }</p>
-<p class='pln'> </p>
-<p class='stm mis'> makeFiles(d)</p>
-<p class='stm mis'> self.cog.callableMain(['argv0', '-d', '-o', 'test.cogged', 'test.cog'])</p>
-<p class='stm mis'> self.assertFilesSame('test.cogged', 'test.out')</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testDeleteCodeWithDashRFails(self):</p>
-<p class='stm mis'> d = {</p>
-<p class='pln'> 'test.cog': """\</p>
-<p class='pln'> // This is my C++ file.</p>
-<p class='pln'> """</p>
-<p class='pln'> }</p>
-<p class='pln'> </p>
-<p class='stm mis'> makeFiles(d)</p>
-<p class='stm mis'> self.assertRaises(CogUsageError, self.cog.callableMain, (['argv0', '-r', '-d', 'test.cog']))</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testSettingGlobals(self):</p>
-<p class='pln'> # Blake Winton contributed a way to set the globals that will be used in</p>
-<p class='pln'> # processFile().</p>
-<p class='stm mis'> d = {</p>
-<p class='pln'> 'test.cog': """\</p>
-<p class='pln'> // This is my C++ file.</p>
-<p class='pln'> //[[[cog</p>
-<p class='pln'> for fn in fnames:</p>
-<p class='pln'> cog.outl("void %s();" % fn)</p>
-<p class='pln'> //]]]</p>
-<p class='pln'> Some Sample Code Here</p>
-<p class='pln'> //[[[end]]]""",</p>
-<p class='pln'> </p>
-<p class='pln'> 'test.out': """\</p>
-<p class='pln'> // This is my C++ file.</p>
-<p class='pln'> void DoBlake();</p>
-<p class='pln'> void DoWinton();</p>
-<p class='pln'> void DoContribution();</p>
-<p class='pln'> """,</p>
-<p class='pln'> }</p>
-<p class='pln'> </p>
-<p class='stm mis'> makeFiles(d)</p>
-<p class='stm mis'> globals = {}</p>
-<p class='stm mis'> globals['fnames'] = ['DoBlake', 'DoWinton', 'DoContribution']</p>
-<p class='stm mis'> self.cog.options.bDeleteCode = True</p>
-<p class='stm mis'> self.cog.processFile('test.cog', 'test.cogged', globals=globals)</p>
-<p class='stm mis'> self.assertFilesSame('test.cogged', 'test.out')</p>
-<p class='pln'> </p>
-<p class='stm run hide'>class ErrorCallTests(TestCaseWithTempDir):</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testErrorCallHasNoTraceback(self):</p>
-<p class='pln'> # Test that cog.error() doesn't show a traceback.</p>
-<p class='stm mis'> d = {</p>
-<p class='pln'> 'error.cog': """\</p>
-<p class='pln'> //[[[cog</p>
-<p class='pln'> cog.error("Something Bad!")</p>
-<p class='pln'> //]]]</p>
-<p class='pln'> //[[[end]]]</p>
-<p class='pln'> """,</p>
-<p class='pln'> }</p>
-<p class='pln'> </p>
-<p class='stm mis'> makeFiles(d)</p>
-<p class='stm mis'> self.cog.main(['argv0', '-r', 'error.cog'])</p>
-<p class='stm mis'> output = self.output.getvalue()</p>
-<p class='stm mis'> self.assertEqual(output, "Cogging error.cog\nError: Something Bad!\n")</p>
-<p class='pln'> </p>
-<p class='stm run hide'> def testRealErrorHasTraceback(self):</p>
-<p class='pln'> # Test that a genuine error does show a traceback.</p>
-<p class='stm mis'> d = {</p>
-<p class='pln'> 'error.cog': """\</p>
-<p class='pln'> //[[[cog</p>
-<p class='pln'> raise RuntimeError("Hey!")</p>
-<p class='pln'> //]]]</p>
-<p class='pln'> //[[[end]]]</p>
-<p class='pln'> """,</p>
-<p class='pln'> }</p>
-<p class='pln'> </p>
-<p class='stm mis'> makeFiles(d)</p>
-<p class='stm mis'> self.cog.main(['argv0', '-r', 'error.cog'])</p>
-<p class='stm mis'> output = self.output.getvalue()</p>
-<p class='stm mis'> msg = 'Actual output:\n' + output</p>
-<p class='stm mis'> self.assert_(output.startswith("Cogging error.cog\nTraceback (most recent"), msg)</p>
-<p class='stm mis'> self.assert_(output.find("RuntimeError: Hey!") > 0, msg)</p>
-<p class='pln'> </p>
-<p class='pln'> </p>
-<p class='exc'>if __name__ == '__main__': #pragma: no cover</p>
-<p class='exc'> unittest.main()</p>
-<p class='pln'> </p>
-<p class='pln'># Things not yet tested:</p>
-<p class='pln'># - A bad -w command (currently fails silently).</p>
+<p class='pln'><span class='str'>""" Test cogapp.</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> http://nedbatchelder.com/code/cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> </span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> Copyright 2004-2009, Ned Batchelder.</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'>"""</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'><span class='key'>import</span> <span class='nam'>unittest</span><span class="strut"> </span></p>
+<p class='stm run hide'><span class='key'>import</span> <span class='nam'>os</span><span class='op'>,</span> <span class='nam'>random</span><span class='op'>,</span> <span class='nam'>re</span><span class='op'>,</span> <span class='nam'>StringIO</span><span class='op'>,</span> <span class='nam'>stat</span><span class='op'>,</span> <span class='nam'>sys</span><span class='op'>,</span> <span class='nam'>tempfile</span><span class="strut"> </span></p>
+<p class='stm run hide'><span class='key'>import</span> <span class='nam'>path</span> <span class='com'># Non-standard, from http://www.jorendorff.com/articles/python/path</span><span class="strut"> </span></p>
+<p class='stm run hide'><span class='key'>from</span> <span class='nam'>cogapp</span> <span class='key'>import</span> <span class='nam'>Cog</span><span class='op'>,</span> <span class='nam'>CogOptions</span><span class='op'>,</span> <span class='nam'>CogGenerator</span><span class="strut"> </span></p>
+<p class='stm run hide'><span class='key'>from</span> <span class='nam'>cogapp</span> <span class='key'>import</span> <span class='nam'>CogError</span><span class='op'>,</span> <span class='nam'>CogUsageError</span><span class='op'>,</span> <span class='nam'>CogGeneratedError</span><span class="strut"> </span></p>
+<p class='stm run hide'><span class='key'>from</span> <span class='nam'>cogapp</span> <span class='key'>import</span> <span class='nam'>usage</span><span class='op'>,</span> <span class='nam'>__version__</span><span class="strut"> </span></p>
+<p class='stm run hide'><span class='key'>from</span> <span class='nam'>whiteutils</span> <span class='key'>import</span> <span class='nam'>reindentBlock</span><span class="strut"> </span></p>
+<p class='stm run hide'><span class='key'>from</span> <span class='nam'>makefiles</span> <span class='key'>import</span> <span class='op'>*</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'><span class='key'>class</span> <span class='nam'>TestCase</span><span class='op'>(</span><span class='nam'>unittest</span><span class='op'>.</span><span class='nam'>TestCase</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>""" Base class for all Cog test cases. Adds utility methods I like.</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>assertRaisesMsg</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>excClass</span><span class='op'>,</span> <span class='nam'>msg</span><span class='op'>,</span> <span class='nam'>callableObj</span><span class='op'>,</span> <span class='op'>*</span><span class='nam'>args</span><span class='op'>,</span> <span class='op'>**</span><span class='nam'>kwargs</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>""" Just like unittest.TestCase.assertRaises,</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> but checks that the message is right too.</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>try</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>callableObj</span><span class='op'>(</span><span class='op'>*</span><span class='nam'>args</span><span class='op'>,</span> <span class='op'>**</span><span class='nam'>kwargs</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>except</span> <span class='nam'>excClass</span><span class='op'>,</span> <span class='nam'>exc</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>excMsg</span> <span class='op'>=</span> <span class='nam'>str</span><span class='op'>(</span><span class='nam'>exc</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>msg</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='pln'> <span class='com'># No message provided: it passes.</span><span class="strut"> </span></p>
+<p class='exc'> <span class='key'>return</span> <span class='com'>#pragma: no cover</span><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>elif</span> <span class='nam'>excMsg</span> <span class='op'>==</span> <span class='nam'>msg</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='pln'> <span class='com'># Message provided, and we got the right message: it passes.</span><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>return</span><span class="strut"> </span></p>
+<p class='exc'> <span class='key'>else</span><span class='op'>:</span> <span class='com'>#pragma: no cover</span><span class="strut"> </span></p>
+<p class='pln'> <span class='com'># Message provided, and it didn't match: fail!</span><span class="strut"> </span></p>
+<p class='exc'> <span class='key'>raise</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>failureException</span><span class='op'>(</span><span class='str'>"Right exception, wrong message: got '%s' expected '%s'"</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>excMsg</span><span class='op'>,</span> <span class='nam'>msg</span><span class='op'>)</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='exc'> <span class='key'>else</span><span class='op'>:</span> <span class='com'>#pragma: no cover</span><span class="strut"> </span></p>
+<p class='exc'> <span class='key'>if</span> <span class='nam'>hasattr</span><span class='op'>(</span><span class='nam'>excClass</span><span class='op'>,</span><span class='str'>'__name__'</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='exc'> <span class='nam'>excName</span> <span class='op'>=</span> <span class='nam'>excClass</span><span class='op'>.</span><span class='nam'>__name__</span><span class="strut"> </span></p>
+<p class='exc'> <span class='key'>else</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='exc'> <span class='nam'>excName</span> <span class='op'>=</span> <span class='nam'>str</span><span class='op'>(</span><span class='nam'>excClass</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='exc'> <span class='key'>raise</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>failureException</span><span class='op'>(</span><span class='str'>"Expected to raise %s, didn't get an exception at all"</span> <span class='op'>%</span> <span class='nam'>excName</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'><span class='key'>class</span> <span class='nam'>CogTestsInMemory</span><span class='op'>(</span><span class='nam'>TestCase</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>""" Test cases for cogapp.Cog()</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testNoCog</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>strings</span> <span class='op'>=</span> <span class='op'>[</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>''</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>' '</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>' \t \t \tx'</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'hello'</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'the cat\nin the\nhat.'</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'Horton\n\tHears A\n\t\tWho'</span><span class="strut"> </span></p>
+<p class='pln'> <span class='op'>]</span><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>for</span> <span class='nam'>s</span> <span class='key'>in</span> <span class='nam'>strings</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>s</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>s</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testSimple</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> Some text.</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> import cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("This is line one\\n")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("This is line two")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> gobbledegook.</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> epilogue.</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>outfile</span> <span class='op'>=</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> Some text.</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> import cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("This is line one\\n")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("This is line two")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> This is line one</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'><span class='str'> This is line two</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> epilogue.</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>outfile</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testEmptyCog</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='pln'> <span class='com'># The cog clause can be totally empty. Not sure why you'd want it,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='com'># but it works.</span><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> hello</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> goodbye</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>infile</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testMultipleCogs</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='pln'> <span class='com'># One file can have many cog chunks, even abutting each other.</span><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.out("chunk1")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> chunk1</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.out("chunk2")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> chunk2</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> between chunks</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.out("chunk3")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> chunk3</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>infile</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testTrimBlankLines</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.out("This is line one\\n", trimblanklines=True)</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.out('''</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> This is line two</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> ''', dedent=True, trimblanklines=True)</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("This is line three", trimblanklines=True)</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> This is line one</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> This is line two</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> This is line three</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>infile</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testTrimEmptyBlankLines</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.out("This is line one\\n", trimblanklines=True)</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.out('''</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> This is line two</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> ''', dedent=True, trimblanklines=True)</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.out('', dedent=True, trimblanklines=True)</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("This is line three", trimblanklines=True)</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> This is line one</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> This is line two</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> This is line three</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>infile</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>test22EndOfLine</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='pln'> <span class='com'># In Python 2.2, this cog file was not parsing because the</span><span class="strut"> </span></p>
+<p class='pln'> <span class='com'># last line is indented but didn't end with a newline.</span><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> import cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> for i in range(3):</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.out("%d\\n" % i)</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> 0</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> 1</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> 2</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>infile</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testIndentedCode</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> first line</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> [[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> import cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> for i in range(3):</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.out("xx%d\\n" % i)</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> ]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> xx0</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> xx1</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> xx2</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> [[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> last line</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>infile</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testPrefixedCode</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> --[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> --import cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> --for i in range(3):</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> -- cog.out("xx%d\\n" % i)</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> --]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> xx0</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> xx1</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> xx2</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> --[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>infile</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testPrefixedIndentedCode</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> prologue</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> --[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> -- import cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> -- for i in range(3):</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> -- cog.out("xy%d\\n" % i)</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> --]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> xy0</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> xy1</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> xy2</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> --[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>infile</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testBogusPrefixMatch</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> prologue</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> #[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> import cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> # This comment should not be clobbered by removing the pound sign.</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> for i in range(3):</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.out("xy%d\\n" % i)</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> #]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> xy0</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> xy1</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> xy2</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> #[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>infile</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testNoFinalNewline</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='pln'> <span class='com'># If the cog'ed output has no final newline,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='com'># it shouldn't eat up the cog terminator.</span><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> prologue</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> [[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> import cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> for i in range(3):</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.out("%d" % i)</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> ]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> 012</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> [[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> epilogue</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>infile</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testNoOutputAtAll</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='pln'> <span class='com'># If there is absolutely no cog output, that's ok.</span><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> prologue</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> [[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> i = 1</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> ]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> [[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> epilogue</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>infile</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testPurelyBlankLine</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='pln'> <span class='com'># If there is a blank line in the cog code with no whitespace</span><span class="strut"> </span></p>
+<p class='pln'> <span class='com'># prefix, that should be OK.</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> prologue</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> [[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> import sys</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.out("Hello")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> $</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.out("There")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> ]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> HelloThere</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> [[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> epilogue</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>.</span><span class='nam'>replace</span><span class='op'>(</span><span class='str'>'$'</span><span class='op'>,</span> <span class='str'>''</span><span class='op'>)</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>infile</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testEmptyOutl</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='pln'> <span class='com'># Alexander Belchenko suggested the string argument to outl should</span><span class="strut"> </span></p>
+<p class='pln'> <span class='com'># be optional. Does it work?</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> prologue</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> [[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("x")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl()</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("y")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl(trimblanklines=True)</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("z")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> ]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> x</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'><span class='str'> y</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> </span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> z</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> [[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> epilogue</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>infile</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testFirstLineNum</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> fooey</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> [[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("started at line number %d" % cog.firstLineNum)</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> ]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> started at line number 2</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> [[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> blah blah</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> [[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("and again at line %d" % cog.firstLineNum)</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> ]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> and again at line 8</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> [[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>infile</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testCompactOneLineCode</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> first line</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> hey: [[[cog cog.outl("hello %d" % (3*3*3*3)) ]]] looky!</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> get rid of this!</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> [[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> last line</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>outfile</span> <span class='op'>=</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> first line</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> hey: [[[cog cog.outl("hello %d" % (3*3*3*3)) ]]] looky!</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> hello 81</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> [[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> last line</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>outfile</span><span class='op'>)</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testInsideOutCompact</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> first line</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> hey?: ]]] what is this? [[[cog strange!</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> get rid of this!</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> [[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> last line</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaisesMsg</span><span class='op'>(</span><span class='nam'>CogError</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>"infile.txt(2): Cog code markers inverted"</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='str'>"infile.txt"</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testSharingGlobals</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> first line</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> hey: [[[cog s="hey there" ]]] looky!</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> [[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> more literal junk.</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> [[[cog cog.outl(s) ]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> [[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> last line</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>outfile</span> <span class='op'>=</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> first line</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> hey: [[[cog s="hey there" ]]] looky!</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> [[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> more literal junk.</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> [[[cog cog.outl(s) ]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> hey there</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> [[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> last line</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>outfile</span><span class='op'>)</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'><span class='key'>class</span> <span class='nam'>CogOptionsTests</span><span class='op'>(</span><span class='nam'>TestCase</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>""" Test the CogOptions class.</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testEquality</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>o</span> <span class='op'>=</span> <span class='nam'>CogOptions</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>p</span> <span class='op'>=</span> <span class='nam'>CogOptions</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>o</span><span class='op'>,</span> <span class='nam'>p</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>o</span><span class='op'>.</span><span class='nam'>parseArgs</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'-r'</span><span class='op'>]</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertNotEqual</span><span class='op'>(</span><span class='nam'>o</span><span class='op'>,</span> <span class='nam'>p</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>p</span><span class='op'>.</span><span class='nam'>parseArgs</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'-r'</span><span class='op'>]</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>o</span><span class='op'>,</span> <span class='nam'>p</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testCloning</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>o</span> <span class='op'>=</span> <span class='nam'>CogOptions</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>o</span><span class='op'>.</span><span class='nam'>parseArgs</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'-I'</span><span class='op'>,</span> <span class='str'>'fooey'</span><span class='op'>,</span> <span class='str'>'-I'</span><span class='op'>,</span> <span class='str'>'booey'</span><span class='op'>,</span> <span class='str'>'-s'</span><span class='op'>,</span> <span class='str'>' /*x*/'</span><span class='op'>]</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>p</span> <span class='op'>=</span> <span class='nam'>o</span><span class='op'>.</span><span class='nam'>clone</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>o</span><span class='op'>,</span> <span class='nam'>p</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>p</span><span class='op'>.</span><span class='nam'>parseArgs</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'-I'</span><span class='op'>,</span> <span class='str'>'huey'</span><span class='op'>,</span> <span class='str'>'-D'</span><span class='op'>,</span> <span class='str'>'foo=quux'</span><span class='op'>]</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertNotEqual</span><span class='op'>(</span><span class='nam'>o</span><span class='op'>,</span> <span class='nam'>p</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>q</span> <span class='op'>=</span> <span class='nam'>CogOptions</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>q</span><span class='op'>.</span><span class='nam'>parseArgs</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'-I'</span><span class='op'>,</span> <span class='str'>'fooey'</span><span class='op'>,</span> <span class='str'>'-I'</span><span class='op'>,</span> <span class='str'>'booey'</span><span class='op'>,</span> <span class='str'>'-s'</span><span class='op'>,</span> <span class='str'>' /*x*/'</span><span class='op'>,</span> <span class='str'>'-I'</span><span class='op'>,</span> <span class='str'>'huey'</span><span class='op'>,</span> <span class='str'>'-D'</span><span class='op'>,</span> <span class='str'>'foo=quux'</span><span class='op'>]</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>p</span><span class='op'>,</span> <span class='nam'>q</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testCombiningFlags</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='pln'> <span class='com'># Single-character flags can be combined.</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>o</span> <span class='op'>=</span> <span class='nam'>CogOptions</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>o</span><span class='op'>.</span><span class='nam'>parseArgs</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'-e'</span><span class='op'>,</span> <span class='str'>'-r'</span><span class='op'>,</span> <span class='str'>'-z'</span><span class='op'>]</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>p</span> <span class='op'>=</span> <span class='nam'>CogOptions</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>p</span><span class='op'>.</span><span class='nam'>parseArgs</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'-erz'</span><span class='op'>]</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>o</span><span class='op'>,</span> <span class='nam'>p</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'><span class='key'>class</span> <span class='nam'>FileStructureTests</span><span class='op'>(</span><span class='nam'>TestCase</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>""" Test cases to check that we're properly strict about the structure</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> of files.</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>isBad</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>infile</span><span class='op'>,</span> <span class='nam'>msg</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaisesMsg</span><span class='op'>(</span><span class='nam'>CogError</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='nam'>msg</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>,</span> <span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='str'>'infile.txt'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testBeginNoEnd</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> Fooey</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> #[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl('hello')</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isBad</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>,</span> <span class='str'>"infile.txt(2): Cog block begun but never ended."</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testNoEoo</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> Fooey</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> #[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl('hello')</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> #]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isBad</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>,</span> <span class='str'>"infile.txt(4): Missing '[[[end]]]' before end of file."</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>infile2</span> <span class='op'>=</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> Fooey</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> #[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl('hello')</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> #]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> #[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl('goodbye')</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> #]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isBad</span><span class='op'>(</span><span class='nam'>infile2</span><span class='op'>,</span> <span class='str'>"infile.txt(5): Unexpected '[[[cog'"</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testStartWithEnd</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> #]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isBad</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>,</span> <span class='str'>"infile.txt(1): Unexpected ']]]'"</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>infile2</span> <span class='op'>=</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> #[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl('hello')</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> #]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> #[[[end]]] </span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> #]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isBad</span><span class='op'>(</span><span class='nam'>infile2</span><span class='op'>,</span> <span class='str'>"infile.txt(5): Unexpected ']]]'"</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testStartWithEoo</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> #[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isBad</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>,</span> <span class='str'>"infile.txt(1): Unexpected '[[[end]]]'"</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>infile2</span> <span class='op'>=</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> #[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl('hello')</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> #]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> #[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> #[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isBad</span><span class='op'>(</span><span class='nam'>infile2</span><span class='op'>,</span> <span class='str'>"infile.txt(5): Unexpected '[[[end]]]'"</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testNoEnd</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> #[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("hello")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> #[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isBad</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>,</span> <span class='str'>"infile.txt(3): Unexpected '[[[end]]]'"</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>infile2</span> <span class='op'>=</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> #[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl('hello')</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> #]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> #[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> #[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("hello")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> #[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isBad</span><span class='op'>(</span><span class='nam'>infile2</span><span class='op'>,</span> <span class='str'>"infile.txt(7): Unexpected '[[[end]]]'"</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testTwoBegins</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> #[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> #[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("hello")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> #]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> #[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isBad</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>,</span> <span class='str'>"infile.txt(2): Unexpected '[[[cog'"</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>infile2</span> <span class='op'>=</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> #[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("hello")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> #]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> #[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> #[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> #[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("hello")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> #]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> #[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isBad</span><span class='op'>(</span><span class='nam'>infile2</span><span class='op'>,</span> <span class='str'>"infile.txt(6): Unexpected '[[[cog'"</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testTwoEnds</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> #[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("hello")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> #]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> #]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> #[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isBad</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>,</span> <span class='str'>"infile.txt(4): Unexpected ']]]'"</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>infile2</span> <span class='op'>=</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> #[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("hello")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> #]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> #[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> #[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("hello")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> #]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> #]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> #[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isBad</span><span class='op'>(</span><span class='nam'>infile2</span><span class='op'>,</span> <span class='str'>"infile.txt(8): Unexpected ']]]'"</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'><span class='key'>class</span> <span class='nam'>CogErrorTests</span><span class='op'>(</span><span class='nam'>TestCase</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>""" Test cases for cog.error().</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testErrorMsg</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> [[[cog cog.error("This ain't right!")]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> [[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaisesMsg</span><span class='op'>(</span><span class='nam'>CogGeneratedError</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>"This ain't right!"</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>,</span> <span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testErrorNoMsg</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> [[[cog cog.error()]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> [[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaisesMsg</span><span class='op'>(</span><span class='nam'>CogGeneratedError</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>"Error raised by cog generator."</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>,</span> <span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testNoErrorIfErrorNotCalled</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> --[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> --import cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> --for i in range(3):</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> -- if i > 10:</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> -- cog.error("Something is amiss!")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> -- cog.out("xx%d\\n" % i)</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> --]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> xx0</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> xx1</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> xx2</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> --[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>infile</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'><span class='key'>class</span> <span class='nam'>CogGeneratorGetCodeTests</span><span class='op'>(</span><span class='nam'>TestCase</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>""" Unit tests against CogGenerator to see if its getCode() method works</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> properly.</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>setUp</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>""" All tests get a generator to use, and short same-length names for</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> the functions we're going to use.</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>gen</span> <span class='op'>=</span> <span class='nam'>CogGenerator</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>m</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>gen</span><span class='op'>.</span><span class='nam'>parseMarker</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>l</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>gen</span><span class='op'>.</span><span class='nam'>parseLine</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testEmpty</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>m</span><span class='op'>(</span><span class='str'>'// [[[cog'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>m</span><span class='op'>(</span><span class='str'>'// ]]]'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>gen</span><span class='op'>.</span><span class='nam'>getCode</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span> <span class='str'>''</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testSimple</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>m</span><span class='op'>(</span><span class='str'>'// [[[cog'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>l</span><span class='op'>(</span><span class='str'>' print "hello"'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>l</span><span class='op'>(</span><span class='str'>' print "bye"'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>m</span><span class='op'>(</span><span class='str'>'// ]]]'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>gen</span><span class='op'>.</span><span class='nam'>getCode</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span> <span class='str'>'print "hello"\nprint "bye"'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testCompressed1</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='pln'> <span class='com'># For a while, I supported compressed code blocks, but no longer.</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>m</span><span class='op'>(</span><span class='str'>'// [[[cog: print """'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>l</span><span class='op'>(</span><span class='str'>'// hello'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>l</span><span class='op'>(</span><span class='str'>'// bye'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>m</span><span class='op'>(</span><span class='str'>'// """)]]]'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>gen</span><span class='op'>.</span><span class='nam'>getCode</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span> <span class='str'>'hello\nbye'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testCompressed2</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='pln'> <span class='com'># For a while, I supported compressed code blocks, but no longer.</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>m</span><span class='op'>(</span><span class='str'>'// [[[cog: print """'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>l</span><span class='op'>(</span><span class='str'>'hello'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>l</span><span class='op'>(</span><span class='str'>'bye'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>m</span><span class='op'>(</span><span class='str'>'// """)]]]'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>gen</span><span class='op'>.</span><span class='nam'>getCode</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span> <span class='str'>'hello\nbye'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testCompressed3</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='pln'> <span class='com'># For a while, I supported compressed code blocks, but no longer.</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>m</span><span class='op'>(</span><span class='str'>'// [[[cog'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>l</span><span class='op'>(</span><span class='str'>'print """hello'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>l</span><span class='op'>(</span><span class='str'>'bye'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>m</span><span class='op'>(</span><span class='str'>'// """)]]]'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>gen</span><span class='op'>.</span><span class='nam'>getCode</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span> <span class='str'>'print """hello\nbye'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testCompressed4</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='pln'> <span class='com'># For a while, I supported compressed code blocks, but no longer.</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>m</span><span class='op'>(</span><span class='str'>'// [[[cog: print """'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>l</span><span class='op'>(</span><span class='str'>'hello'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>l</span><span class='op'>(</span><span class='str'>'bye""")'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>m</span><span class='op'>(</span><span class='str'>'// ]]]'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>gen</span><span class='op'>.</span><span class='nam'>getCode</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span> <span class='str'>'hello\nbye""")'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testNoCommonPrefixForMarkers</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='pln'> <span class='com'># It's important to be able to use #if 0 to hide lines from a</span><span class="strut"> </span></p>
+<p class='pln'> <span class='com'># C++ compiler.</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>m</span><span class='op'>(</span><span class='str'>'#if 0 //[[[cog'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>l</span><span class='op'>(</span><span class='str'>'\timport cog, sys'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>l</span><span class='op'>(</span><span class='str'>''</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>l</span><span class='op'>(</span><span class='str'>'\tprint sys.argv'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>m</span><span class='op'>(</span><span class='str'>'#endif //]]]'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>gen</span><span class='op'>.</span><span class='nam'>getCode</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span> <span class='str'>'import cog, sys\n\nprint sys.argv'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'><span class='key'>class</span> <span class='nam'>TestCaseWithTempDir</span><span class='op'>(</span><span class='nam'>TestCase</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>newCog</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>""" Initialize the cog members for another run.</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='pln'> <span class='com'># Create a cog engine, and catch its output.</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span> <span class='op'>=</span> <span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>output</span> <span class='op'>=</span> <span class='nam'>StringIO</span><span class='op'>.</span><span class='nam'>StringIO</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>setOutput</span><span class='op'>(</span><span class='nam'>stdout</span><span class='op'>=</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>output</span><span class='op'>,</span> <span class='nam'>stderr</span><span class='op'>=</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>output</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>setUp</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='pln'> <span class='com'># Create a temporary directory.</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>tempdir</span> <span class='op'>=</span> <span class='nam'>path</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>(</span><span class='nam'>tempfile</span><span class='op'>.</span><span class='nam'>gettempdir</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span> <span class='op'>/</span> <span class='op'>(</span><span class='str'>'testcog_tempdir_'</span> <span class='op'>+</span> <span class='nam'>str</span><span class='op'>(</span><span class='nam'>random</span><span class='op'>.</span><span class='nam'>random</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='op'>[</span><span class='num'>2</span><span class='op'>:</span><span class='op'>]</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>tempdir</span><span class='op'>.</span><span class='nam'>mkdir</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>olddir</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>getcwd</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>chdir</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>tempdir</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>newCog</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>tearDown</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>chdir</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>olddir</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'> <span class='com'># Get rid of the temporary directory.</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>tempdir</span><span class='op'>.</span><span class='nam'>rmtree</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>sFName1</span><span class='op'>,</span> <span class='nam'>sFName2</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>tempdir</span> <span class='op'>/</span> <span class='nam'>sFName1</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>text</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span> <span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>tempdir</span> <span class='op'>/</span> <span class='nam'>sFName2</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>text</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>assertFileContent</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>sFName</span><span class='op'>,</span> <span class='nam'>sContent</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>sAbsName</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>tempdir</span> <span class='op'>/</span> <span class='nam'>sFName</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>f</span> <span class='op'>=</span> <span class='nam'>open</span><span class='op'>(</span><span class='nam'>sAbsName</span><span class='op'>,</span> <span class='str'>'rb'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>sFileContent</span> <span class='op'>=</span> <span class='nam'>f</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'> <span class='key'>finally</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>f</span><span class='op'>.</span><span class='nam'>close</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>sFileContent</span><span class='op'>,</span> <span class='nam'>sContent</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'><span class='key'>class</span> <span class='nam'>ArgumentHandlingTests</span><span class='op'>(</span><span class='nam'>TestCaseWithTempDir</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testArgumentFailure</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='pln'> <span class='com'># Return value 2 means usage problem.</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='key'>assert</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>main</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-j'</span><span class='op'>]</span><span class='op'>)</span> <span class='op'>==</span> <span class='num'>2</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>output</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>getvalue</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='key'>assert</span><span class='op'>(</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>find</span><span class='op'>(</span><span class='str'>"option -j not recognized"</span><span class='op'>)</span> <span class='op'>>=</span> <span class='num'>0</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaises</span><span class='op'>(</span><span class='nam'>CogUsageError</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaises</span><span class='op'>(</span><span class='nam'>CogUsageError</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-j'</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testNoDashOAndAtFile</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'cogfiles.txt'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> # Please run cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='pln'> <span class='op'>}</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaises</span><span class='op'>(</span><span class='nam'>CogUsageError</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-o'</span><span class='op'>,</span> <span class='str'>'foo'</span><span class='op'>,</span> <span class='str'>'@cogfiles.txt'</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testDashV</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='key'>assert</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>main</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-v'</span><span class='op'>]</span><span class='op'>)</span> <span class='op'>==</span> <span class='num'>0</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>output</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>getvalue</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='str'>'Cog version %s\n'</span> <span class='op'>%</span> <span class='nam'>__version__</span><span class='op'>,</span> <span class='nam'>output</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>producesHelp</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>args</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>newCog</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>argv</span> <span class='op'>=</span> <span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>]</span> <span class='op'>+</span> <span class='nam'>args</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='key'>assert</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>main</span><span class='op'>(</span><span class='nam'>argv</span><span class='op'>)</span> <span class='op'>==</span> <span class='num'>0</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEquals</span><span class='op'>(</span><span class='nam'>usage</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>getvalue</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testDashH</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='pln'> <span class='com'># -h or -? anywhere on the command line should just print help.</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>producesHelp</span><span class='op'>(</span><span class='str'>"-h"</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>producesHelp</span><span class='op'>(</span><span class='str'>"-?"</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>producesHelp</span><span class='op'>(</span><span class='str'>"fooey.txt -h"</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>producesHelp</span><span class='op'>(</span><span class='str'>"-o -r @fooey.txt -? @booey.txt"</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testDashOAndDashR</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'cogfile.txt'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> # Please run cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='pln'> <span class='op'>}</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaises</span><span class='op'>(</span><span class='nam'>CogUsageError</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-o'</span><span class='op'>,</span> <span class='str'>'foo'</span><span class='op'>,</span> <span class='str'>'-r'</span><span class='op'>,</span> <span class='str'>'cogfile.txt'</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testDashZ</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'test.cog'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> // This is my C++ file.</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> fnames = ['DoSomething', 'DoAnotherThing', 'DoLastThing']</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> for fn in fnames:</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("void %s();" % fn)</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'test.out'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> // This is my C++ file.</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> fnames = ['DoSomething', 'DoAnotherThing', 'DoLastThing']</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> for fn in fnames:</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("void %s();" % fn)</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> void DoSomething();</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> void DoAnotherThing();</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> void DoLastThing();</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='op'>}</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaisesMsg</span><span class='op'>(</span><span class="strut"> </span></p>
+<p class='pln'> <span class='nam'>CogError</span><span class='op'>,</span> <span class='str'>"test.cog(6): Missing '[[[end]]]' before end of file."</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-r'</span><span class='op'>,</span> <span class='str'>'test.cog'</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>newCog</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-r'</span><span class='op'>,</span> <span class='str'>'-z'</span><span class='op'>,</span> <span class='str'>'test.cog'</span><span class='op'>]</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>'test.cog'</span><span class='op'>,</span> <span class='str'>'test.out'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testBadDashD</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaises</span><span class='op'>(</span><span class='nam'>CogUsageError</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-Dfooey'</span><span class='op'>,</span> <span class='str'>'cog.txt'</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaises</span><span class='op'>(</span><span class='nam'>CogUsageError</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-D'</span><span class='op'>,</span> <span class='str'>'fooey'</span><span class='op'>,</span> <span class='str'>'cog.txt'</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'><span class='key'>class</span> <span class='nam'>TestFileHandling</span><span class='op'>(</span><span class='nam'>TestCaseWithTempDir</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testSimple</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'test.cog'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> // This is my C++ file.</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> fnames = ['DoSomething', 'DoAnotherThing', 'DoLastThing']</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> for fn in fnames:</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("void %s();" % fn)</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'test.out'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> // This is my C++ file.</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> fnames = ['DoSomething', 'DoAnotherThing', 'DoLastThing']</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> for fn in fnames:</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("void %s();" % fn)</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> void DoSomething();</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> void DoAnotherThing();</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> void DoLastThing();</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='op'>}</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-r'</span><span class='op'>,</span> <span class='str'>'test.cog'</span><span class='op'>]</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>'test.cog'</span><span class='op'>,</span> <span class='str'>'test.out'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>output</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>getvalue</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='key'>assert</span><span class='op'>(</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>find</span><span class='op'>(</span><span class='str'>"(changed)"</span><span class='op'>)</span> <span class='op'>>=</span> <span class='num'>0</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testOutputFile</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='pln'> <span class='com'># -o sets the output file.</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'test.cog'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> // This is my C++ file.</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> fnames = ['DoSomething', 'DoAnotherThing', 'DoLastThing']</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> for fn in fnames:</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("void %s();" % fn)</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'test.out'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> // This is my C++ file.</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> fnames = ['DoSomething', 'DoAnotherThing', 'DoLastThing']</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> for fn in fnames:</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("void %s();" % fn)</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> void DoSomething();</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> void DoAnotherThing();</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> void DoLastThing();</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='op'>}</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-o'</span><span class='op'>,</span> <span class='str'>'test.cogged'</span><span class='op'>,</span> <span class='str'>'test.cog'</span><span class='op'>]</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>'test.cogged'</span><span class='op'>,</span> <span class='str'>'test.out'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testAtFile</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'one.cog'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("hello world")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'one.out'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("hello world")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> hello world</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'two.cog'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("goodbye cruel world")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'two.out'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("goodbye cruel world")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> goodbye cruel world</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'cogfiles.txt'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> # Please run cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> one.cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> </span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> two.cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='pln'> <span class='op'>}</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-r'</span><span class='op'>,</span> <span class='str'>'@cogfiles.txt'</span><span class='op'>]</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>'one.cog'</span><span class='op'>,</span> <span class='str'>'one.out'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>'two.cog'</span><span class='op'>,</span> <span class='str'>'two.out'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>output</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>getvalue</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='key'>assert</span><span class='op'>(</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>find</span><span class='op'>(</span><span class='str'>"(changed)"</span><span class='op'>)</span> <span class='op'>>=</span> <span class='num'>0</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testNestedAtFile</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'one.cog'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("hello world")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'one.out'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("hello world")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> hello world</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'two.cog'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("goodbye cruel world")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'two.out'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("goodbye cruel world")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> goodbye cruel world</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'cogfiles.txt'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> # Please run cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> one.cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> @cogfiles2.txt</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'cogfiles2.txt'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> # This one too, please.</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> two.cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='op'>}</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-r'</span><span class='op'>,</span> <span class='str'>'@cogfiles.txt'</span><span class='op'>]</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>'one.cog'</span><span class='op'>,</span> <span class='str'>'one.out'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>'two.cog'</span><span class='op'>,</span> <span class='str'>'two.out'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>output</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>getvalue</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='key'>assert</span><span class='op'>(</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>find</span><span class='op'>(</span><span class='str'>"(changed)"</span><span class='op'>)</span> <span class='op'>>=</span> <span class='num'>0</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testAtFileWithArgs</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'both.cog'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("one: %s" % globals().has_key('one'))</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("two: %s" % globals().has_key('two'))</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'one.out'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("one: %s" % globals().has_key('one'))</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("two: %s" % globals().has_key('two'))</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> one: True // ONE</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> two: False // ONE</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'two.out'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("one: %s" % globals().has_key('one'))</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("two: %s" % globals().has_key('two'))</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> one: False // TWO</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> two: True // TWO</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'cogfiles.txt'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> # Please run cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> both.cog -o both.one -s ' // ONE' -D one=x</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> both.cog -o both.two -s ' // TWO' -D two=x</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='pln'> <span class='op'>}</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'@cogfiles.txt'</span><span class='op'>]</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>'both.one'</span><span class='op'>,</span> <span class='str'>'one.out'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>'both.two'</span><span class='op'>,</span> <span class='str'>'two.out'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testAtFileWithBadArgCombo</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'both.cog'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("one: %s" % globals().has_key('one'))</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("two: %s" % globals().has_key('two'))</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'cogfiles.txt'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> # Please run cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> both.cog </span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> both.cog -d # This is bad: -r and -d</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='pln'> <span class='op'>}</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaises</span><span class='op'>(</span><span class='nam'>CogUsageError</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-r'</span><span class='op'>,</span> <span class='str'>'@cogfiles.txt'</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testAtFileWithTrickyFilenames</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'one 1.cog'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog cog.outl("hello world") ]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'one.out'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog cog.outl("hello world") ]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> hello world //xxx</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'subdir'</span><span class='op'>:</span> <span class='op'>{</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'subback.cog'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog cog.outl("down deep with backslashes") ]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'subfwd.cog'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog cog.outl("down deep with slashes") ]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='op'>}</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'subback.out'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog cog.outl("down deep with backslashes") ]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> down deep with backslashes //yyy</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'subfwd.out'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog cog.outl("down deep with slashes") ]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> down deep with slashes //zzz</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'cogfiles.txt'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> # Please run cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> 'one 1.cog' -s ' //xxx'</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> subdir\subback.cog -s ' //yyy'</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> subdir/subfwd.cog -s ' //zzz'</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='pln'> <span class='op'>}</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-z'</span><span class='op'>,</span> <span class='str'>'-r'</span><span class='op'>,</span> <span class='str'>'@cogfiles.txt'</span><span class='op'>]</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>'one 1.cog'</span><span class='op'>,</span> <span class='str'>'one.out'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>'subdir/subback.cog'</span><span class='op'>,</span> <span class='str'>'subback.out'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>'subdir/subfwd.cog'</span><span class='op'>,</span> <span class='str'>'subfwd.out'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'><span class='key'>class</span> <span class='nam'>CogTestLineEndings</span><span class='op'>(</span><span class='nam'>TestCaseWithTempDir</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>"""Tests for -U option (force LF line-endings in output)."""</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>lines_in</span> <span class='op'>=</span> <span class='op'>[</span><span class='str'>'Some text.'</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'//[[[cog'</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'cog.outl("Cog text")'</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'//]]]'</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'gobbledegook.'</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'//[[[end]]]'</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'epilogue.'</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>''</span><span class='op'>]</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>lines_out</span> <span class='op'>=</span> <span class='op'>[</span><span class='str'>'Some text.'</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'//[[[cog'</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'cog.outl("Cog text")'</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'//]]]'</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'Cog text'</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'//[[[end]]]'</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'epilogue.'</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>''</span><span class='op'>]</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testOutputNativeEol</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>makeFiles</span><span class='op'>(</span><span class='op'>{</span><span class='str'>'infile'</span><span class='op'>:</span> <span class='str'>'\n'</span><span class='op'>.</span><span class='nam'>join</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>lines_in</span><span class='op'>)</span><span class='op'>}</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-o'</span><span class='op'>,</span> <span class='str'>'outfile'</span><span class='op'>,</span> <span class='str'>'infile'</span><span class='op'>]</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFileContent</span><span class='op'>(</span><span class='str'>'outfile'</span><span class='op'>,</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>linesep</span><span class='op'>.</span><span class='nam'>join</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>lines_out</span><span class='op'>)</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testOutputLfEol</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>makeFiles</span><span class='op'>(</span><span class='op'>{</span><span class='str'>'infile'</span><span class='op'>:</span> <span class='str'>'\n'</span><span class='op'>.</span><span class='nam'>join</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>lines_in</span><span class='op'>)</span><span class='op'>}</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-U'</span><span class='op'>,</span> <span class='str'>'-o'</span><span class='op'>,</span> <span class='str'>'outfile'</span><span class='op'>,</span> <span class='str'>'infile'</span><span class='op'>]</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFileContent</span><span class='op'>(</span><span class='str'>'outfile'</span><span class='op'>,</span> <span class='str'>'\n'</span><span class='op'>.</span><span class='nam'>join</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>lines_out</span><span class='op'>)</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testReplaceNativeEol</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>makeFiles</span><span class='op'>(</span><span class='op'>{</span><span class='str'>'test.cog'</span><span class='op'>:</span> <span class='str'>'\n'</span><span class='op'>.</span><span class='nam'>join</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>lines_in</span><span class='op'>)</span><span class='op'>}</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-r'</span><span class='op'>,</span> <span class='str'>'test.cog'</span><span class='op'>]</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFileContent</span><span class='op'>(</span><span class='str'>'test.cog'</span><span class='op'>,</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>linesep</span><span class='op'>.</span><span class='nam'>join</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>lines_out</span><span class='op'>)</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testReplaceLfEol</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>makeFiles</span><span class='op'>(</span><span class='op'>{</span><span class='str'>'test.cog'</span><span class='op'>:</span> <span class='str'>'\n'</span><span class='op'>.</span><span class='nam'>join</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>lines_in</span><span class='op'>)</span><span class='op'>}</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-U'</span><span class='op'>,</span> <span class='str'>'-r'</span><span class='op'>,</span> <span class='str'>'test.cog'</span><span class='op'>]</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFileContent</span><span class='op'>(</span><span class='str'>'test.cog'</span><span class='op'>,</span> <span class='str'>'\n'</span><span class='op'>.</span><span class='nam'>join</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>lines_out</span><span class='op'>)</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'><span class='key'>class</span> <span class='nam'>TestCaseWithImports</span><span class='op'>(</span><span class='nam'>TestCaseWithTempDir</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>""" When running tests which import modules, the sys.modules list</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> leaks from one test to the next. This test case class scrubs</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> the list after each run to keep the tests isolated from each other.</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>setUp</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>TestCaseWithTempDir</span><span class='op'>.</span><span class='nam'>setUp</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sysmodulekeys</span> <span class='op'>=</span> <span class='nam'>list</span><span class='op'>(</span><span class='nam'>sys</span><span class='op'>.</span><span class='nam'>modules</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>tearDown</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>modstoscrub</span> <span class='op'>=</span> <span class='op'>[</span><span class="strut"> </span></p>
+<p class='pln'> <span class='nam'>modname</span><span class="strut"> </span></p>
+<p class='pln'> <span class='key'>for</span> <span class='nam'>modname</span> <span class='key'>in</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>modules</span><span class="strut"> </span></p>
+<p class='pln'> <span class='key'>if</span> <span class='nam'>modname</span> <span class='key'>not</span> <span class='key'>in</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sysmodulekeys</span><span class="strut"> </span></p>
+<p class='pln'> <span class='op'>]</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='key'>for</span> <span class='nam'>modname</span> <span class='key'>in</span> <span class='nam'>modstoscrub</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='key'>del</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>modules</span><span class='op'>[</span><span class='nam'>modname</span><span class='op'>]</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>TestCaseWithTempDir</span><span class='op'>.</span><span class='nam'>tearDown</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'><span class='key'>class</span> <span class='nam'>CogIncludeTests</span><span class='op'>(</span><span class='nam'>TestCaseWithImports</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>dincludes</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'test.cog'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> import mymodule</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'test.out'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> import mymodule</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> Hello from mymodule</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'test2.out'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> import mymodule</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> Hello from mymodule in inc2</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'include'</span><span class='op'>:</span> <span class='op'>{</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'mymodule.py'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> import cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("Hello from mymodule")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='pln'> <span class='op'>}</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'inc2'</span><span class='op'>:</span> <span class='op'>{</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'mymodule.py'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> import cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("Hello from mymodule in inc2")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='pln'> <span class='op'>}</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'inc3'</span><span class='op'>:</span> <span class='op'>{</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'someothermodule.py'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> import cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("This is some other module.")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='pln'> <span class='op'>}</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='op'>}</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testNeedIncludePath</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='pln'> <span class='com'># Try it without the -I, to see that an ImportError happens.</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>dincludes</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaises</span><span class='op'>(</span><span class='nam'>ImportError</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-r'</span><span class='op'>,</span> <span class='str'>'test.cog'</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testIncludePath</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='pln'> <span class='com'># Test that -I adds include directories properly.</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>dincludes</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-r'</span><span class='op'>,</span> <span class='str'>'-I'</span><span class='op'>,</span> <span class='str'>'include'</span><span class='op'>,</span> <span class='str'>'test.cog'</span><span class='op'>]</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>'test.cog'</span><span class='op'>,</span> <span class='str'>'test.out'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testTwoIncludePaths</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='pln'> <span class='com'># Test that two -I's add include directories properly.</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>dincludes</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-r'</span><span class='op'>,</span> <span class='str'>'-I'</span><span class='op'>,</span> <span class='str'>'include'</span><span class='op'>,</span> <span class='str'>'-I'</span><span class='op'>,</span> <span class='str'>'inc2'</span><span class='op'>,</span> <span class='str'>'test.cog'</span><span class='op'>]</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>'test.cog'</span><span class='op'>,</span> <span class='str'>'test.out'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testTwoIncludePaths2</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='pln'> <span class='com'># Test that two -I's add include directories properly.</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>dincludes</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-r'</span><span class='op'>,</span> <span class='str'>'-I'</span><span class='op'>,</span> <span class='str'>'inc2'</span><span class='op'>,</span> <span class='str'>'-I'</span><span class='op'>,</span> <span class='str'>'include'</span><span class='op'>,</span> <span class='str'>'test.cog'</span><span class='op'>]</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>'test.cog'</span><span class='op'>,</span> <span class='str'>'test2.out'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testUselessIncludePath</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='pln'> <span class='com'># Test that the search will continue past the first directory.</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>dincludes</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-r'</span><span class='op'>,</span> <span class='str'>'-I'</span><span class='op'>,</span> <span class='str'>'inc3'</span><span class='op'>,</span> <span class='str'>'-I'</span><span class='op'>,</span> <span class='str'>'include'</span><span class='op'>,</span> <span class='str'>'test.cog'</span><span class='op'>]</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>'test.cog'</span><span class='op'>,</span> <span class='str'>'test.out'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testSysPathIsUnchanged</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'bad.cog'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog cog.error("Oh no!") ]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'good.cog'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog cog.outl("Oh yes!") ]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='op'>}</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'> <span class='com'># Is it unchanged just by creating a cog engine?</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>oldsyspath</span> <span class='op'>=</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>[</span><span class='op'>:</span><span class='op'>]</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>newCog</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>oldsyspath</span><span class='op'>,</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'> <span class='com'># Is it unchanged for a successful run?</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>newCog</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-r'</span><span class='op'>,</span> <span class='str'>'good.cog'</span><span class='op'>]</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>oldsyspath</span><span class='op'>,</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'> <span class='com'># Is it unchanged for a successful run with includes?</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>newCog</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-r'</span><span class='op'>,</span> <span class='str'>'-I'</span><span class='op'>,</span> <span class='str'>'xyzzy'</span><span class='op'>,</span> <span class='str'>'good.cog'</span><span class='op'>]</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>oldsyspath</span><span class='op'>,</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'> <span class='com'># Is it unchanged for a successful run with two includes?</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>newCog</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-r'</span><span class='op'>,</span> <span class='str'>'-I'</span><span class='op'>,</span> <span class='str'>'xyzzy'</span><span class='op'>,</span> <span class='str'>'-I'</span><span class='op'>,</span> <span class='str'>'quux'</span><span class='op'>,</span> <span class='str'>'good.cog'</span><span class='op'>]</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>oldsyspath</span><span class='op'>,</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'> <span class='com'># Is it unchanged for a failed run?</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>newCog</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaises</span><span class='op'>(</span><span class='nam'>CogError</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-r'</span><span class='op'>,</span> <span class='str'>'bad.cog'</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>oldsyspath</span><span class='op'>,</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'> <span class='com'># Is it unchanged for a failed run with includes?</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>newCog</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaises</span><span class='op'>(</span><span class='nam'>CogError</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-r'</span><span class='op'>,</span> <span class='str'>'-I'</span><span class='op'>,</span> <span class='str'>'xyzzy'</span><span class='op'>,</span> <span class='str'>'bad.cog'</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>oldsyspath</span><span class='op'>,</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'> <span class='com'># Is it unchanged for a failed run with two includes?</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>newCog</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaises</span><span class='op'>(</span><span class='nam'>CogError</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-r'</span><span class='op'>,</span> <span class='str'>'-I'</span><span class='op'>,</span> <span class='str'>'xyzzy'</span><span class='op'>,</span> <span class='str'>'-I'</span><span class='op'>,</span> <span class='str'>'quux'</span><span class='op'>,</span> <span class='str'>'bad.cog'</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>oldsyspath</span><span class='op'>,</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testSubDirectories</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='pln'> <span class='com'># Test that relative paths on the command line work, with includes.</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'code'</span><span class='op'>:</span> <span class='op'>{</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'test.cog'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> import mysubmodule</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'test.out'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> import mysubmodule</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> Hello from mysubmodule</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'mysubmodule.py'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> import cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("Hello from mysubmodule")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='pln'> <span class='op'>}</span><span class="strut"> </span></p>
+<p class='pln'> <span class='op'>}</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'> <span class='com'># We should be able to invoke cog without the -I switch, and it will</span><span class="strut"> </span></p>
+<p class='pln'> <span class='com'># auto-include the current directory</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-r'</span><span class='op'>,</span> <span class='str'>'code/test.cog'</span><span class='op'>]</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>'code/test.cog'</span><span class='op'>,</span> <span class='str'>'code/test.out'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'><span class='key'>class</span> <span class='nam'>CogTestsInFiles</span><span class='op'>(</span><span class='nam'>TestCaseWithTempDir</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testWarnIfNoCogCode</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='pln'> <span class='com'># Test that the -e switch warns if there is no Cog code.</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'with.cog'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("hello world")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> hello world</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'without.cog'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> There's no cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> code in this file.</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='op'>}</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-e'</span><span class='op'>,</span> <span class='str'>'with.cog'</span><span class='op'>]</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>output</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>getvalue</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='key'>assert</span><span class='op'>(</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>find</span><span class='op'>(</span><span class='str'>"Warning"</span><span class='op'>)</span> <span class='op'><</span> <span class='num'>0</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>newCog</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-e'</span><span class='op'>,</span> <span class='str'>'without.cog'</span><span class='op'>]</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>output</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>getvalue</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='key'>assert</span><span class='op'>(</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>find</span><span class='op'>(</span><span class='str'>"Warning: no cog code found in without.cog"</span><span class='op'>)</span> <span class='op'>>=</span> <span class='num'>0</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>newCog</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'without.cog'</span><span class='op'>]</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>output</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>getvalue</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='key'>assert</span><span class='op'>(</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>find</span><span class='op'>(</span><span class='str'>"Warning"</span><span class='op'>)</span> <span class='op'><</span> <span class='num'>0</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testFileNameProps</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'cog1.txt'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("This is %s in, %s out" % (cog.inFile, cog.outFile))</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> this is cog1.txt in, cog1.txt out</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> [[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'cog1.out'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("This is %s in, %s out" % (cog.inFile, cog.outFile))</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> This is cog1.txt in, cog1.txt out</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> [[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'cog1out.out'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("This is %s in, %s out" % (cog.inFile, cog.outFile))</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> This is cog1.txt in, cog1out.txt out</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> [[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='op'>}</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-r'</span><span class='op'>,</span> <span class='str'>'cog1.txt'</span><span class='op'>]</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>'cog1.txt'</span><span class='op'>,</span> <span class='str'>'cog1.out'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>newCog</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-o'</span><span class='op'>,</span> <span class='str'>'cog1out.txt'</span><span class='op'>,</span> <span class='str'>'cog1.txt'</span><span class='op'>]</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>'cog1out.txt'</span><span class='op'>,</span> <span class='str'>'cog1out.out'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testGlobalsDontCrossFiles</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='pln'> <span class='com'># Make sure that global values don't get shared between files.</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'one.cog'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog s = "This was set in one.cog" ]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog cog.outl(s) ]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'one.out'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog s = "This was set in one.cog" ]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog cog.outl(s) ]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> This was set in one.cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'two.cog'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> try:</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl(s)</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> except NameError:</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("s isn't set!")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'two.out'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> try:</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl(s)</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> except NameError:</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("s isn't set!")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> s isn't set!</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'cogfiles.txt'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> # Please run cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> one.cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> </span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> two.cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='pln'> <span class='op'>}</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-r'</span><span class='op'>,</span> <span class='str'>'@cogfiles.txt'</span><span class='op'>]</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>'one.cog'</span><span class='op'>,</span> <span class='str'>'one.out'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>'two.cog'</span><span class='op'>,</span> <span class='str'>'two.out'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>output</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>getvalue</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='key'>assert</span><span class='op'>(</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>find</span><span class='op'>(</span><span class='str'>"(changed)"</span><span class='op'>)</span> <span class='op'>>=</span> <span class='num'>0</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testRemoveGeneratedOutput</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'cog1.txt'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("This line was generated.")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> This line was generated.</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> This line was not.</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'cog1.out'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("This line was generated.")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> This line was not.</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'cog1.out2'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("This line was generated.")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> This line was generated.</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> This line was not.</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='op'>}</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'> <span class='com'># Remove generated output.</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-r'</span><span class='op'>,</span> <span class='str'>'-x'</span><span class='op'>,</span> <span class='str'>'cog1.txt'</span><span class='op'>]</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>'cog1.txt'</span><span class='op'>,</span> <span class='str'>'cog1.out'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>newCog</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'> <span class='com'># Regenerate the generated output.</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-r'</span><span class='op'>,</span> <span class='str'>'cog1.txt'</span><span class='op'>]</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>'cog1.txt'</span><span class='op'>,</span> <span class='str'>'cog1.out2'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>newCog</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'> <span class='com'># Remove the generated output again.</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-r'</span><span class='op'>,</span> <span class='str'>'-x'</span><span class='op'>,</span> <span class='str'>'cog1.txt'</span><span class='op'>]</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>'cog1.txt'</span><span class='op'>,</span> <span class='str'>'cog1.out'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testMsgCall</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> #[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.msg("Hello there!")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> #]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> #[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>infile</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>output</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>getvalue</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>output</span><span class='op'>,</span> <span class='str'>"Message: Hello there!\n"</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testErrorMessageHasNoTraceback</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='pln'> <span class='com'># Test that a Cog error is printed to stderr with no traceback.</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'cog1.txt'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("This line was newly")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("generated by cog")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("blah blah.")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> Xhis line was newly</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> generated by cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> blah blah.</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]] (checksum: a8540982e5ad6b95c9e9a184b26f4346)</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='op'>}</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>stderr</span> <span class='op'>=</span> <span class='nam'>StringIO</span><span class='op'>.</span><span class='nam'>StringIO</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>setOutput</span><span class='op'>(</span><span class='nam'>stderr</span><span class='op'>=</span><span class='nam'>stderr</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>main</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-c'</span><span class='op'>,</span> <span class='str'>'-r'</span><span class='op'>,</span> <span class='str'>"cog1.txt"</span><span class='op'>]</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>output</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>getvalue</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>getvalue</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span> <span class='str'>"Cogging cog1.txt\n"</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>stderr</span><span class='op'>.</span><span class='nam'>getvalue</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span> <span class='str'>"cog1.txt(9): Output has been edited! Delete old checksum to unprotect.\n"</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testDashD</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'test.cog'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> --[[[cog cog.outl("Defined fooey as " + fooey) ]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> --[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'test.kablooey'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> --[[[cog cog.outl("Defined fooey as " + fooey) ]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> Defined fooey as kablooey</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> --[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'test.einstein'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> --[[[cog cog.outl("Defined fooey as " + fooey) ]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> Defined fooey as e=mc2</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> --[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='op'>}</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-r'</span><span class='op'>,</span> <span class='str'>'-D'</span><span class='op'>,</span> <span class='str'>'fooey=kablooey'</span><span class='op'>,</span> <span class='str'>'test.cog'</span><span class='op'>]</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>'test.cog'</span><span class='op'>,</span> <span class='str'>'test.kablooey'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-r'</span><span class='op'>,</span> <span class='str'>'-Dfooey=kablooey'</span><span class='op'>,</span> <span class='str'>'test.cog'</span><span class='op'>]</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>'test.cog'</span><span class='op'>,</span> <span class='str'>'test.kablooey'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-r'</span><span class='op'>,</span> <span class='str'>'-Dfooey=e=mc2'</span><span class='op'>,</span> <span class='str'>'test.cog'</span><span class='op'>]</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>'test.cog'</span><span class='op'>,</span> <span class='str'>'test.einstein'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-r'</span><span class='op'>,</span> <span class='str'>'-Dbar=quux'</span><span class='op'>,</span> <span class='str'>'-Dfooey=kablooey'</span><span class='op'>,</span> <span class='str'>'test.cog'</span><span class='op'>]</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>'test.cog'</span><span class='op'>,</span> <span class='str'>'test.kablooey'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-r'</span><span class='op'>,</span> <span class='str'>'-Dfooey=kablooey'</span><span class='op'>,</span> <span class='str'>'-Dbar=quux'</span><span class='op'>,</span> <span class='str'>'test.cog'</span><span class='op'>]</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>'test.cog'</span><span class='op'>,</span> <span class='str'>'test.kablooey'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-r'</span><span class='op'>,</span> <span class='str'>'-Dfooey=gooey'</span><span class='op'>,</span> <span class='str'>'-Dfooey=kablooey'</span><span class='op'>,</span> <span class='str'>'test.cog'</span><span class='op'>]</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>'test.cog'</span><span class='op'>,</span> <span class='str'>'test.kablooey'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testOutputToStdout</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'test.cog'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> --[[[cog cog.outl('Hey there!') ]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> --[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='pln'> <span class='op'>}</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>stderr</span> <span class='op'>=</span> <span class='nam'>StringIO</span><span class='op'>.</span><span class='nam'>StringIO</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>setOutput</span><span class='op'>(</span><span class='nam'>stderr</span><span class='op'>=</span><span class='nam'>stderr</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'test.cog'</span><span class='op'>]</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>output</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>getvalue</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>outerr</span> <span class='op'>=</span> <span class='nam'>stderr</span><span class='op'>.</span><span class='nam'>getvalue</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>output</span><span class='op'>,</span> <span class='str'>"--[[[cog cog.outl('Hey there!') ]]]\nHey there!\n--[[[end]]]\n"</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>outerr</span><span class='op'>,</span> <span class='str'>""</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testSuffixOutputLines</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'test.cog'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> Hey there.</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> ;[[[cog cog.outl('a\\nb\\n \\nc') ]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> ;[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> Good bye.</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'test.out'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> Hey there.</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> ;[[[cog cog.outl('a\\nb\\n \\nc') ]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> a (foo)</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> b (foo)</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> </span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> c (foo)</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> ;[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> Good bye.</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='op'>}</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-r'</span><span class='op'>,</span> <span class='str'>'-s'</span><span class='op'>,</span> <span class='str'>' (foo)'</span><span class='op'>,</span> <span class='str'>'test.cog'</span><span class='op'>]</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>'test.cog'</span><span class='op'>,</span> <span class='str'>'test.out'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testEmptySuffix</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'test.cog'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> ;[[[cog cog.outl('a\\nb\\nc') ]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> ;[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'test.out'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> ;[[[cog cog.outl('a\\nb\\nc') ]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> a</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> b</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> c</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> ;[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='op'>}</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-r'</span><span class='op'>,</span> <span class='str'>'-s'</span><span class='op'>,</span> <span class='str'>''</span><span class='op'>,</span> <span class='str'>'test.cog'</span><span class='op'>]</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>'test.cog'</span><span class='op'>,</span> <span class='str'>'test.out'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testHellishSuffix</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'test.cog'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> ;[[[cog cog.outl('a\\n\\nb') ]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'test.out'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> ;[[[cog cog.outl('a\\n\\nb') ]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> a /\\n*+([)]><</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> </span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> b /\\n*+([)]><</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='op'>}</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-z'</span><span class='op'>,</span> <span class='str'>'-r'</span><span class='op'>,</span> <span class='str'>'-s'</span><span class='op'>,</span> <span class='str'>r' /\n*+([)]><'</span><span class='op'>,</span> <span class='str'>'test.cog'</span><span class='op'>]</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>'test.cog'</span><span class='op'>,</span> <span class='str'>'test.out'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'><span class='key'>class</span> <span class='nam'>WritabilityTests</span><span class='op'>(</span><span class='nam'>TestCaseWithTempDir</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'test.cog'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> for fn in ['DoSomething', 'DoAnotherThing', 'DoLastThing']:</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("void %s();" % fn)</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'test.out'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> for fn in ['DoSomething', 'DoAnotherThing', 'DoLastThing']:</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("void %s();" % fn)</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> void DoSomething();</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> void DoAnotherThing();</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> void DoLastThing();</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='op'>}</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='exc'> <span class='key'>if</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>name</span> <span class='op'>==</span> <span class='str'>'nt'</span><span class='op'>:</span> <span class='com'># pragma: no cover</span><span class="strut"> </span></p>
+<p class='pln'> <span class='com'># for Windows</span><span class="strut"> </span></p>
+<p class='exc'> <span class='nam'>cmd_w_args</span> <span class='op'>=</span> <span class='str'>'attrib -R %s'</span><span class="strut"> </span></p>
+<p class='exc'> <span class='nam'>cmd_w_asterisk</span> <span class='op'>=</span> <span class='str'>'attrib -R *'</span><span class="strut"> </span></p>
+<p class='exc'> <span class='key'>else</span><span class='op'>:</span> <span class='com'># pragma: no cover</span><span class="strut"> </span></p>
+<p class='pln'> <span class='com'># for unix-like</span><span class="strut"> </span></p>
+<p class='exc'> <span class='nam'>cmd_w_args</span> <span class='op'>=</span> <span class='str'>'chmod +w %s'</span><span class="strut"> </span></p>
+<p class='exc'> <span class='nam'>cmd_w_asterisk</span> <span class='op'>=</span> <span class='str'>'chmod +w *'</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>setUp</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>TestCaseWithTempDir</span><span class='op'>.</span><span class='nam'>setUp</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>d</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>testcog</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>tempdir</span> <span class='op'>/</span> <span class='str'>'test.cog'</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>testcog</span><span class='op'>.</span><span class='nam'>chmod</span><span class='op'>(</span><span class='nam'>stat</span><span class='op'>.</span><span class='nam'>S_IREAD</span><span class='op'>)</span> <span class='com'># Make the file readonly.</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='key'>assert</span> <span class='key'>not</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>access</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>testcog</span><span class='op'>,</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>W_OK</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>tearDown</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>testcog</span><span class='op'>.</span><span class='nam'>chmod</span><span class='op'>(</span><span class='nam'>stat</span><span class='op'>.</span><span class='nam'>S_IWRITE</span><span class='op'>)</span> <span class='com'># Make the file writable again.</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>TestCaseWithTempDir</span><span class='op'>.</span><span class='nam'>tearDown</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testReadonlyNoCommand</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaisesMsg</span><span class='op'>(</span><span class="strut"> </span></p>
+<p class='pln'> <span class='nam'>CogError</span><span class='op'>,</span> <span class='str'>"Can't overwrite test.cog"</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-r'</span><span class='op'>,</span> <span class='str'>'test.cog'</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='key'>assert</span> <span class='key'>not</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>access</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>testcog</span><span class='op'>,</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>W_OK</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testReadonlyWithCommand</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-r'</span><span class='op'>,</span> <span class='str'>'-w'</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cmd_w_args</span><span class='op'>,</span> <span class='str'>'test.cog'</span><span class='op'>]</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>'test.cog'</span><span class='op'>,</span> <span class='str'>'test.out'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='key'>assert</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>access</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>testcog</span><span class='op'>,</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>W_OK</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testReadonlyWithCommandWithNoSlot</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-r'</span><span class='op'>,</span> <span class='str'>'-w'</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cmd_w_asterisk</span><span class='op'>,</span> <span class='str'>'test.cog'</span><span class='op'>]</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>'test.cog'</span><span class='op'>,</span> <span class='str'>'test.out'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='key'>assert</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>access</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>testcog</span><span class='op'>,</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>W_OK</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testReadonlyWithIneffectualCommand</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaisesMsg</span><span class='op'>(</span><span class="strut"> </span></p>
+<p class='pln'> <span class='nam'>CogError</span><span class='op'>,</span> <span class='str'>"Couldn't make test.cog writable"</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-r'</span><span class='op'>,</span> <span class='str'>'-w'</span><span class='op'>,</span> <span class='str'>'echo %s'</span><span class='op'>,</span> <span class='str'>'test.cog'</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='key'>assert</span> <span class='key'>not</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>access</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>testcog</span><span class='op'>,</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>W_OK</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'><span class='key'>class</span> <span class='nam'>ChecksumTests</span><span class='op'>(</span><span class='nam'>TestCaseWithTempDir</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testCreateChecksumOutput</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'cog1.txt'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("This line was generated.")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> This line was generated.</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> This line was not.</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'cog1.out'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("This line was generated.")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> This line was generated.</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]] (checksum: 8adb13fb59b996a1c7f0065ea9f3d893)</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> This line was not.</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='op'>}</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-r'</span><span class='op'>,</span> <span class='str'>'-c'</span><span class='op'>,</span> <span class='str'>'cog1.txt'</span><span class='op'>]</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>'cog1.txt'</span><span class='op'>,</span> <span class='str'>'cog1.out'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testCheckChecksumOutput</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'cog1.txt'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("This line was newly")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("generated by cog")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("blah blah.")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> This line was generated.</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]] (checksum: 8adb13fb59b996a1c7f0065ea9f3d893)</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'cog1.out'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("This line was newly")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("generated by cog")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("blah blah.")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> This line was newly</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> generated by cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> blah blah.</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]] (checksum: a8540982e5ad6b95c9e9a184b26f4346)</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='op'>}</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-r'</span><span class='op'>,</span> <span class='str'>'-c'</span><span class='op'>,</span> <span class='str'>'cog1.txt'</span><span class='op'>]</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>'cog1.txt'</span><span class='op'>,</span> <span class='str'>'cog1.out'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testRemoveChecksumOutput</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'cog1.txt'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("This line was newly")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("generated by cog")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("blah blah.")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> This line was generated.</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]] (checksum: 8adb13fb59b996a1c7f0065ea9f3d893) fooey</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'cog1.out'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("This line was newly")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("generated by cog")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("blah blah.")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> This line was newly</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> generated by cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> blah blah.</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]] fooey</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='op'>}</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-r'</span><span class='op'>,</span> <span class='str'>'cog1.txt'</span><span class='op'>]</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>'cog1.txt'</span><span class='op'>,</span> <span class='str'>'cog1.out'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testTamperedChecksumOutput</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'cog1.txt'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("This line was newly")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("generated by cog")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("blah blah.")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> Xhis line was newly</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> generated by cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> blah blah.</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]] (checksum: a8540982e5ad6b95c9e9a184b26f4346)</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'cog2.txt'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("This line was newly")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("generated by cog")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("blah blah.")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> This line was newly</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> generated by cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> blah blah!</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]] (checksum: a8540982e5ad6b95c9e9a184b26f4346)</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'cog3.txt'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("This line was newly")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("generated by cog")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("blah blah.")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> </span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> This line was newly</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> generated by cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> blah blah.</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]] (checksum: a8540982e5ad6b95c9e9a184b26f4346)</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'cog4.txt'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("This line was newly")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("generated by cog")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("blah blah.")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> This line was newly</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> generated by cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> blah blah..</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]] (checksum: a8540982e5ad6b95c9e9a184b26f4346)</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'cog5.txt'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("This line was newly")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("generated by cog")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("blah blah.")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> This line was newly</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> generated by cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> blah blah.</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> extra</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]] (checksum: a8540982e5ad6b95c9e9a184b26f4346)</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'cog6.txt'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("This line was newly")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("generated by cog")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("blah blah.")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]] (checksum: a8540982e5ad6b95c9e9a184b26f4346)</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='op'>}</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaisesMsg</span><span class='op'>(</span><span class='nam'>CogError</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>"cog1.txt(9): Output has been edited! Delete old checksum to unprotect."</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-c'</span><span class='op'>,</span> <span class='str'>"cog1.txt"</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaisesMsg</span><span class='op'>(</span><span class='nam'>CogError</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>"cog2.txt(9): Output has been edited! Delete old checksum to unprotect."</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-c'</span><span class='op'>,</span> <span class='str'>"cog2.txt"</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaisesMsg</span><span class='op'>(</span><span class='nam'>CogError</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>"cog3.txt(10): Output has been edited! Delete old checksum to unprotect."</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-c'</span><span class='op'>,</span> <span class='str'>"cog3.txt"</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaisesMsg</span><span class='op'>(</span><span class='nam'>CogError</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>"cog4.txt(9): Output has been edited! Delete old checksum to unprotect."</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-c'</span><span class='op'>,</span> <span class='str'>"cog4.txt"</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaisesMsg</span><span class='op'>(</span><span class='nam'>CogError</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>"cog5.txt(10): Output has been edited! Delete old checksum to unprotect."</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-c'</span><span class='op'>,</span> <span class='str'>"cog5.txt"</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaisesMsg</span><span class='op'>(</span><span class='nam'>CogError</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>"cog6.txt(6): Output has been edited! Delete old checksum to unprotect."</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-c'</span><span class='op'>,</span> <span class='str'>"cog6.txt"</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'><span class='key'>class</span> <span class='nam'>BlakeTests</span><span class='op'>(</span><span class='nam'>TestCaseWithTempDir</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'> <span class='com'># Blake Winton's contributions. </span><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testDeleteCode</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='pln'> <span class='com'># -o sets the output file.</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'test.cog'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> // This is my C++ file.</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> fnames = ['DoSomething', 'DoAnotherThing', 'DoLastThing']</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> for fn in fnames:</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("void %s();" % fn)</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> Some Sample Code Here</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]]Data Data</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> And Some More</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'test.out'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> // This is my C++ file.</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> void DoSomething();</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> void DoAnotherThing();</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> void DoLastThing();</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> And Some More</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='op'>}</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-d'</span><span class='op'>,</span> <span class='str'>'-o'</span><span class='op'>,</span> <span class='str'>'test.cogged'</span><span class='op'>,</span> <span class='str'>'test.cog'</span><span class='op'>]</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>'test.cogged'</span><span class='op'>,</span> <span class='str'>'test.out'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testDeleteCodeWithDashRFails</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'test.cog'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> // This is my C++ file.</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
+<p class='pln'> <span class='op'>}</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaises</span><span class='op'>(</span><span class='nam'>CogUsageError</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-r'</span><span class='op'>,</span> <span class='str'>'-d'</span><span class='op'>,</span> <span class='str'>'test.cog'</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testSettingGlobals</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='pln'> <span class='com'># Blake Winton contributed a way to set the globals that will be used in</span><span class="strut"> </span></p>
+<p class='pln'> <span class='com'># processFile().</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'test.cog'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> // This is my C++ file.</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> for fn in fnames:</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.outl("void %s();" % fn)</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> Some Sample Code Here</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]]"""</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'test.out'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> // This is my C++ file.</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> void DoBlake();</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> void DoWinton();</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> void DoContribution();</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='op'>}</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>globals</span> <span class='op'>=</span> <span class='op'>{</span><span class='op'>}</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>globals</span><span class='op'>[</span><span class='str'>'fnames'</span><span class='op'>]</span> <span class='op'>=</span> <span class='op'>[</span><span class='str'>'DoBlake'</span><span class='op'>,</span> <span class='str'>'DoWinton'</span><span class='op'>,</span> <span class='str'>'DoContribution'</span><span class='op'>]</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>bDeleteCode</span> <span class='op'>=</span> <span class='nam'>True</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>processFile</span><span class='op'>(</span><span class='str'>'test.cog'</span><span class='op'>,</span> <span class='str'>'test.cogged'</span><span class='op'>,</span> <span class='nam'>globals</span><span class='op'>=</span><span class='nam'>globals</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>'test.cogged'</span><span class='op'>,</span> <span class='str'>'test.out'</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'><span class='key'>class</span> <span class='nam'>ErrorCallTests</span><span class='op'>(</span><span class='nam'>TestCaseWithTempDir</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testErrorCallHasNoTraceback</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='pln'> <span class='com'># Test that cog.error() doesn't show a traceback.</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'error.cog'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> cog.error("Something Bad!")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='op'>}</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>main</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-r'</span><span class='op'>,</span> <span class='str'>'error.cog'</span><span class='op'>]</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>output</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>getvalue</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>output</span><span class='op'>,</span> <span class='str'>"Cogging error.cog\nError: Something Bad!\n"</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>testRealErrorHasTraceback</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
+<p class='pln'> <span class='com'># Test that a genuine error does show a traceback.</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut"> </span></p>
+<p class='pln'> <span class='str'>'error.cog'</span><span class='op'>:</span> <span class='str'>"""\</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[cog</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> raise RuntimeError("Hey!")</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> //[[[end]]]</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'> """</span><span class='op'>,</span><span class="strut"> </span></p>
+<p class='pln'> <span class='op'>}</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>main</span><span class='op'>(</span><span class='op'>[</span><span class='str'>'argv0'</span><span class='op'>,</span> <span class='str'>'-r'</span><span class='op'>,</span> <span class='str'>'error.cog'</span><span class='op'>]</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>output</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>getvalue</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>msg</span> <span class='op'>=</span> <span class='str'>'Actual output:\n'</span> <span class='op'>+</span> <span class='nam'>output</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assert_</span><span class='op'>(</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>startswith</span><span class='op'>(</span><span class='str'>"Cogging error.cog\nTraceback (most recent"</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>msg</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assert_</span><span class='op'>(</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>find</span><span class='op'>(</span><span class='str'>"RuntimeError: Hey!"</span><span class='op'>)</span> <span class='op'>></span> <span class='num'>0</span><span class='op'>,</span> <span class='nam'>msg</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='exc'><span class='key'>if</span> <span class='nam'>__name__</span> <span class='op'>==</span> <span class='str'>'__main__'</span><span class='op'>:</span> <span class='com'>#pragma: no cover</span><span class="strut"> </span></p>
+<p class='exc'> <span class='nam'>unittest</span><span class='op'>.</span><span class='nam'>main</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
+<p class='pln'><span class="strut"> </span></p>
+<p class='pln'><span class='com'># Things not yet tested:</span><span class="strut"> </span></p>
+<p class='pln'><span class='com'># - A bad -w command (currently fails silently).</span><span class="strut"> </span></p>
</td>
</tr>
|