1# Copyright (C) 2010 Google Inc. All rights reserved. 2# 3# Redistribution and use in source and binary forms, with or without 4# modification, are permitted provided that the following conditions are 5# met: 6# 7# * Redistributions of source code must retain the above copyright 8# notice, this list of conditions and the following disclaimer. 9# * Redistributions in binary form must reproduce the above 10# copyright notice, this list of conditions and the following disclaimer 11# in the documentation and/or other materials provided with the 12# distribution. 13# * Neither the name of Google Inc. nor the names of its 14# contributors may be used to endorse or promote products derived from 15# this software without specific prior written permission. 16# 17# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 18# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 19# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 20# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 21# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 22# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 29import unittest 30 31from webkitpy.common.thread.messagepump import MessagePump, MessagePumpDelegate 32from webkitpy.common.thread.threadedmessagequeue import ThreadedMessageQueue 33 34 35class TestDelegate(MessagePumpDelegate): 36 def __init__(self): 37 self.log = [] 38 39 def schedule(self, interval, callback): 40 self.callback = callback 41 self.log.append("schedule") 42 43 def message_available(self, message): 44 self.log.append("message_available: %s" % message) 45 46 def final_message_delivered(self): 47 self.log.append("final_message_delivered") 48 49 50class MessagePumpTest(unittest.TestCase): 51 52 def test_basic(self): 53 queue = ThreadedMessageQueue() 54 delegate = TestDelegate() 55 pump = MessagePump(delegate, queue) 56 self.assertEqual(delegate.log, [ 57 'schedule' 58 ]) 59 delegate.callback() 60 queue.post("Hello") 61 queue.post("There") 62 delegate.callback() 63 self.assertEqual(delegate.log, [ 64 'schedule', 65 'schedule', 66 'message_available: Hello', 67 'message_available: There', 68 'schedule' 69 ]) 70 queue.post("More") 71 queue.post("Messages") 72 queue.stop() 73 delegate.callback() 74 self.assertEqual(delegate.log, [ 75 'schedule', 76 'schedule', 77 'message_available: Hello', 78 'message_available: There', 79 'schedule', 80 'message_available: More', 81 'message_available: Messages', 82 'final_message_delivered' 83 ]) 84