mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
124 lines
2.9 KiB
Python
124 lines
2.9 KiB
Python
# 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 gc
|
|
import weakref
|
|
|
|
# pylint: disable=F0401,E0611
|
|
import mojo_bindings.promise as promise
|
|
import mojo_system as system
|
|
import mojo_unittest
|
|
import regression_tests_mojom
|
|
import sample_factory_mojom
|
|
import sample_service_mojom
|
|
|
|
|
|
def _BuildProxy(impl):
|
|
pipe = system.MessagePipe()
|
|
impl.__class__.manager.Bind(impl, pipe.handle0)
|
|
return impl.__class__.manager.Proxy(pipe.handle1)
|
|
|
|
|
|
def _ExtractValue(p):
|
|
container = []
|
|
@promise.async
|
|
def GetValue(value):
|
|
container.append(value)
|
|
GetValue(p)
|
|
assert len(container)
|
|
return container[0]
|
|
|
|
|
|
class EmptyServiceImpl(sample_service_mojom.Service):
|
|
|
|
def __init__(self):
|
|
pass
|
|
|
|
|
|
class ServiceImpl(sample_service_mojom.Service):
|
|
|
|
def __init__(self):
|
|
pass
|
|
|
|
# pylint: disable=C0102,W0613
|
|
def Frobinate(self, foo, baz, port):
|
|
return baz
|
|
|
|
|
|
class NamedObjectImpl(sample_factory_mojom.NamedObject):
|
|
|
|
def __init__(self):
|
|
self.name = 'name'
|
|
|
|
def SetName(self, name):
|
|
self.name = name
|
|
|
|
def GetName(self):
|
|
return self.name
|
|
|
|
|
|
class DelegatingNamedObject(sample_factory_mojom.NamedObject):
|
|
|
|
def __init__(self):
|
|
self.proxy = _BuildProxy(NamedObjectImpl())
|
|
|
|
def SetName(self, name):
|
|
self.proxy.SetName(name)
|
|
|
|
def GetName(self):
|
|
return self.proxy.GetName()
|
|
|
|
class InterfaceTest(mojo_unittest.MojoTestCase):
|
|
|
|
def testBaseInterface(self):
|
|
service = sample_service_mojom.Service()
|
|
with self.assertRaises(AttributeError):
|
|
service.NotExisting()
|
|
with self.assertRaises(NotImplementedError):
|
|
service.Frobinate()
|
|
|
|
def testEmpty(self):
|
|
service = EmptyServiceImpl()
|
|
with self.assertRaises(NotImplementedError):
|
|
service.Frobinate()
|
|
|
|
def testServiceWithReturnValue(self):
|
|
proxy = _BuildProxy(DelegatingNamedObject())
|
|
p1 = proxy.GetName()
|
|
|
|
self.assertEquals(p1.state, promise.Promise.STATE_PENDING)
|
|
self.loop.RunUntilIdle()
|
|
self.assertEquals(p1.state, promise.Promise.STATE_FULLFILLED)
|
|
name = _ExtractValue(p1)
|
|
self.assertEquals(name, 'name')
|
|
|
|
proxy.SetName('hello')
|
|
p2 = proxy.GetName()
|
|
|
|
self.assertEquals(p2.state, promise.Promise.STATE_PENDING)
|
|
self.loop.RunUntilIdle()
|
|
self.assertEquals(p2.state, promise.Promise.STATE_FULLFILLED)
|
|
name = _ExtractValue(p2)
|
|
self.assertEquals(name, 'hello')
|
|
|
|
def testCloseProxy(self):
|
|
named_object_impl = NamedObjectImpl()
|
|
proxy = _BuildProxy(named_object_impl)
|
|
response = proxy.GetName()
|
|
proxy.manager.Close()
|
|
|
|
self.assertEquals(response.state, promise.Promise.STATE_REJECTED)
|
|
|
|
def testCloseImplementationWithResponse(self):
|
|
impl = DelegatingNamedObject()
|
|
proxy = _BuildProxy(impl)
|
|
p1 = proxy.GetName()
|
|
|
|
self.assertEquals(p1.state, promise.Promise.STATE_PENDING)
|
|
|
|
impl.manager.Close()
|
|
self.loop.RunUntilIdle()
|
|
|
|
self.assertEquals(p1.state, promise.Promise.STATE_REJECTED)
|