11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci# Copyright 2014 The Chromium Authors. All rights reserved.
21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci# Use of this source code is governed by a BSD-style license that can be
31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci# found in the LICENSE file.
41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciimport unittest
61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci# pylint: disable=F0401
81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciimport mojo.embedder
91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccifrom mojo import system
101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccidef _Increment(array):
131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  def _Closure():
141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    array.append(0)
151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return _Closure
161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass RunLoopTest(unittest.TestCase):
191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  def setUp(self):
211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    mojo.embedder.Init()
221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  def testRunLoop(self):
241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    loop = system.RunLoop()
251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    array = []
261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    for _ in xrange(10):
271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      loop.PostDelayedTask(_Increment(array))
281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    loop.RunUntilIdle()
291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertEquals(len(array), 10)
301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  def testRunLoopWithException(self):
321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    loop = system.RunLoop()
331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    def Throw():
341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      raise Exception("error")
351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    array = []
361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    loop.PostDelayedTask(Throw)
371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    loop.PostDelayedTask(_Increment(array))
381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    with self.assertRaisesRegexp(Exception, '^error$'):
391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      loop.Run()
401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertEquals(len(array), 0)
411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    loop.RunUntilIdle()
421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    self.assertEquals(len(array), 1)
43