| # Copyright 2014 The Chromium Authors. All rights reserved. | 
 | # Use of this source code is governed by a BSD-style license that can be | 
 | # found in the LICENSE file. | 
 |  | 
 | import mojo_unittest | 
 |  | 
 | # pylint: disable=E0611 | 
 | from mojo import system | 
 |  | 
 |  | 
 | class AsyncWaitTest(mojo_unittest.MojoTestCase): | 
 |  | 
 |   def setUp(self): | 
 |     super(AsyncWaitTest, self).setUp() | 
 |     self.array = [] | 
 |     self.handles = system.MessagePipe() | 
 |     self.cancel = self.handles.handle0.AsyncWait(system.HANDLE_SIGNAL_READABLE, | 
 |                                                  system.DEADLINE_INDEFINITE, | 
 |                                                  self._OnResult) | 
 |  | 
 |   def tearDown(self): | 
 |     self.cancel() | 
 |     self.handles = None | 
 |     self.array = None | 
 |     super(AsyncWaitTest, self).tearDown() | 
 |  | 
 |   def _OnResult(self, value): | 
 |     self.array.append(value) | 
 |  | 
 |   def _WriteToHandle(self): | 
 |     self.handles.handle1.WriteMessage() | 
 |  | 
 |   def _PostWriteAndRun(self): | 
 |     self.loop.PostDelayedTask(self._WriteToHandle, 0) | 
 |     self.loop.RunUntilIdle() | 
 |  | 
 |   def testAsyncWait(self): | 
 |     self._PostWriteAndRun() | 
 |     self.assertEquals(len(self.array), 1) | 
 |     self.assertEquals(system.RESULT_OK, self.array[0]) | 
 |  | 
 |   def testAsyncWaitCancel(self): | 
 |     self.loop.PostDelayedTask(self.cancel, 0) | 
 |     self._PostWriteAndRun() | 
 |     self.assertEquals(len(self.array), 0) | 
 |  | 
 |   def testAsyncWaitImmediateCancel(self): | 
 |     self.cancel() | 
 |     self._PostWriteAndRun() | 
 |     self.assertEquals(len(self.array), 0) |