diff -r ffa851df0825 -r 2fb8b9db1c86 symbian-qemu-0.9.1-12/python-2.6.1/Lib/test/test_MimeWriter.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/symbian-qemu-0.9.1-12/python-2.6.1/Lib/test/test_MimeWriter.py Fri Jul 31 15:01:17 2009 +0100 @@ -0,0 +1,295 @@ +"""Test program for MimeWriter module. + +The test program was too big to comfortably fit in the MimeWriter +class, so it's here in its own file. + +This should generate Barry's example, modulo some quotes and newlines. + +""" + +import unittest, StringIO +from test.test_support import run_unittest + +import warnings +warnings.filterwarnings("ignore", "the MimeWriter module is deprecated.*", + DeprecationWarning) + +from MimeWriter import MimeWriter + +SELLER = '''\ +INTERFACE Seller-1; + +TYPE Seller = OBJECT + DOCUMENTATION "A simple Seller interface to test ILU" + METHODS + price():INTEGER, + END; +''' + +BUYER = '''\ +class Buyer: + def __setup__(self, maxprice): + self._maxprice = maxprice + + def __main__(self, kos): + """Entry point upon arrival at a new KOS.""" + broker = kos.broker() + # B4 == Barry's Big Bass Business :-) + seller = broker.lookup('Seller_1.Seller', 'B4') + if seller: + price = seller.price() + print 'Seller wants $', price, '... ' + if price > self._maxprice: + print 'too much!' + else: + print "I'll take it!" + else: + print 'no seller found here' +''' # Don't ask why this comment is here + +STATE = '''\ +# instantiate a buyer instance and put it in a magic place for the KOS +# to find. +__kp__ = Buyer() +__kp__.__setup__(500) +''' + +SIMPLE_METADATA = [ + ("Interpreter", "python"), + ("Interpreter-Version", "1.3"), + ("Owner-Name", "Barry Warsaw"), + ("Owner-Rendezvous", "bwarsaw@cnri.reston.va.us"), + ("Home-KSS", "kss.cnri.reston.va.us"), + ("Identifier", "hdl://cnri.kss/my_first_knowbot"), + ("Launch-Date", "Mon Feb 12 16:39:03 EST 1996"), + ] + +COMPLEX_METADATA = [ + ("Metadata-Type", "complex"), + ("Metadata-Key", "connection"), + ("Access", "read-only"), + ("Connection-Description", "Barry's Big Bass Business"), + ("Connection-Id", "B4"), + ("Connection-Direction", "client"), + ] + +EXTERNAL_METADATA = [ + ("Metadata-Type", "complex"), + ("Metadata-Key", "generic-interface"), + ("Access", "read-only"), + ("Connection-Description", "Generic Interface for All Knowbots"), + ("Connection-Id", "generic-kp"), + ("Connection-Direction", "client"), + ] + + +OUTPUT = '''\ +From: bwarsaw@cnri.reston.va.us +Date: Mon Feb 12 17:21:48 EST 1996 +To: kss-submit@cnri.reston.va.us +MIME-Version: 1.0 +Content-Type: multipart/knowbot; + boundary="801spam999"; + version="0.1" + +This is a multi-part message in MIME format. + +--801spam999 +Content-Type: multipart/knowbot-metadata; + boundary="802spam999" + + +--802spam999 +Content-Type: message/rfc822 +KP-Metadata-Type: simple +KP-Access: read-only + +KPMD-Interpreter: python +KPMD-Interpreter-Version: 1.3 +KPMD-Owner-Name: Barry Warsaw +KPMD-Owner-Rendezvous: bwarsaw@cnri.reston.va.us +KPMD-Home-KSS: kss.cnri.reston.va.us +KPMD-Identifier: hdl://cnri.kss/my_first_knowbot +KPMD-Launch-Date: Mon Feb 12 16:39:03 EST 1996 + +--802spam999 +Content-Type: text/isl +KP-Metadata-Type: complex +KP-Metadata-Key: connection +KP-Access: read-only +KP-Connection-Description: Barry's Big Bass Business +KP-Connection-Id: B4 +KP-Connection-Direction: client + +INTERFACE Seller-1; + +TYPE Seller = OBJECT + DOCUMENTATION "A simple Seller interface to test ILU" + METHODS + price():INTEGER, + END; + +--802spam999 +Content-Type: message/external-body; + access-type="URL"; + URL="hdl://cnri.kss/generic-knowbot" + +Content-Type: text/isl +KP-Metadata-Type: complex +KP-Metadata-Key: generic-interface +KP-Access: read-only +KP-Connection-Description: Generic Interface for All Knowbots +KP-Connection-Id: generic-kp +KP-Connection-Direction: client + + +--802spam999-- + +--801spam999 +Content-Type: multipart/knowbot-code; + boundary="803spam999" + + +--803spam999 +Content-Type: text/plain +KP-Module-Name: BuyerKP + +class Buyer: + def __setup__(self, maxprice): + self._maxprice = maxprice + + def __main__(self, kos): + """Entry point upon arrival at a new KOS.""" + broker = kos.broker() + # B4 == Barry's Big Bass Business :-) + seller = broker.lookup('Seller_1.Seller', 'B4') + if seller: + price = seller.price() + print 'Seller wants $', price, '... ' + if price > self._maxprice: + print 'too much!' + else: + print "I'll take it!" + else: + print 'no seller found here' + +--803spam999-- + +--801spam999 +Content-Type: multipart/knowbot-state; + boundary="804spam999" +KP-Main-Module: main + + +--804spam999 +Content-Type: text/plain +KP-Module-Name: main + +# instantiate a buyer instance and put it in a magic place for the KOS +# to find. +__kp__ = Buyer() +__kp__.__setup__(500) + +--804spam999-- + +--801spam999-- +''' + +class MimewriterTest(unittest.TestCase): + + def test(self): + buf = StringIO.StringIO() + + # Toplevel headers + + toplevel = MimeWriter(buf) + toplevel.addheader("From", "bwarsaw@cnri.reston.va.us") + toplevel.addheader("Date", "Mon Feb 12 17:21:48 EST 1996") + toplevel.addheader("To", "kss-submit@cnri.reston.va.us") + toplevel.addheader("MIME-Version", "1.0") + + # Toplevel body parts + + f = toplevel.startmultipartbody("knowbot", "801spam999", + [("version", "0.1")], prefix=0) + f.write("This is a multi-part message in MIME format.\n") + + # First toplevel body part: metadata + + md = toplevel.nextpart() + md.startmultipartbody("knowbot-metadata", "802spam999") + + # Metadata part 1 + + md1 = md.nextpart() + md1.addheader("KP-Metadata-Type", "simple") + md1.addheader("KP-Access", "read-only") + m = MimeWriter(md1.startbody("message/rfc822")) + for key, value in SIMPLE_METADATA: + m.addheader("KPMD-" + key, value) + m.flushheaders() + del md1 + + # Metadata part 2 + + md2 = md.nextpart() + for key, value in COMPLEX_METADATA: + md2.addheader("KP-" + key, value) + f = md2.startbody("text/isl") + f.write(SELLER) + del md2 + + # Metadata part 3 + + md3 = md.nextpart() + f = md3.startbody("message/external-body", + [("access-type", "URL"), + ("URL", "hdl://cnri.kss/generic-knowbot")]) + m = MimeWriter(f) + for key, value in EXTERNAL_METADATA: + md3.addheader("KP-" + key, value) + md3.startbody("text/isl") + # Phantom body doesn't need to be written + + md.lastpart() + + # Second toplevel body part: code + + code = toplevel.nextpart() + code.startmultipartbody("knowbot-code", "803spam999") + + # Code: buyer program source + + buyer = code.nextpart() + buyer.addheader("KP-Module-Name", "BuyerKP") + f = buyer.startbody("text/plain") + f.write(BUYER) + + code.lastpart() + + # Third toplevel body part: state + + state = toplevel.nextpart() + state.addheader("KP-Main-Module", "main") + state.startmultipartbody("knowbot-state", "804spam999") + + # State: a bunch of assignments + + st = state.nextpart() + st.addheader("KP-Module-Name", "main") + f = st.startbody("text/plain") + f.write(STATE) + + state.lastpart() + + # End toplevel body parts + + toplevel.lastpart() + + self.assertEqual(buf.getvalue(), OUTPUT) + +def test_main(): + run_unittest(MimewriterTest) + +if __name__ == '__main__': + test_main()