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