mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
91 lines
2.6 KiB
Python
91 lines
2.6 KiB
Python
# Copyright 2015 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.
|
|
|
|
# pylint: disable=F0401,E0611
|
|
import mojo_bindings.promise as promise
|
|
import mojo_system as system
|
|
import mojo_unittest
|
|
import sample_interfaces_mojom
|
|
|
|
|
|
def _BuildProxy(impl):
|
|
pipe = system.MessagePipe()
|
|
impl.__class__.manager.Bind(impl, pipe.handle0)
|
|
return impl.__class__.manager.Proxy(pipe.handle1)
|
|
|
|
|
|
def _ExtractValue(v_promise):
|
|
container = []
|
|
@promise.async
|
|
def GetInternalValue(value):
|
|
container.append(value)
|
|
GetInternalValue(v_promise)
|
|
assert len(container)
|
|
return container[0]
|
|
|
|
|
|
class IntegerAccessorImpl(sample_interfaces_mojom.IntegerAccessor):
|
|
"""
|
|
Interface definition is in
|
|
mojo/public/interfaces/bindings/tests/sample_interfaces.mojom
|
|
"""
|
|
def __init__(self):
|
|
self.values = {
|
|
'data': 0,
|
|
'type': 0,
|
|
}
|
|
|
|
def GetInteger(self):
|
|
return self.values;
|
|
|
|
def SetInteger(self, **values):
|
|
self.values = values
|
|
|
|
def GetInternalValue(self):
|
|
return self.values['data']
|
|
|
|
|
|
class ControlMessagesTest(mojo_unittest.MojoTestCase):
|
|
|
|
def testQueryVersion(self):
|
|
p = _BuildProxy(IntegerAccessorImpl())
|
|
self.assertEquals(p.manager.version, 0)
|
|
v_promise = p.manager.QueryVersion()
|
|
self.loop.RunUntilIdle()
|
|
self.assertEquals(v_promise.state, promise.Promise.STATE_FULLFILLED)
|
|
self.assertEquals(_ExtractValue(v_promise), 3)
|
|
self.assertEquals(p.manager.version, 3)
|
|
|
|
def testRequireVersion(self):
|
|
impl = IntegerAccessorImpl()
|
|
errors = []
|
|
p = _BuildProxy(impl)
|
|
p.manager.AddOnErrorCallback(lambda: errors.append(0))
|
|
|
|
self.assertEquals(p.manager.version, 0)
|
|
|
|
p.manager.RequireVersion(1)
|
|
self.assertEquals(p.manager.version, 1)
|
|
p.SetInteger(123, sample_interfaces_mojom.Enum.VALUE)
|
|
self.loop.RunUntilIdle()
|
|
self.assertEquals(len(errors), 0)
|
|
self.assertEquals(impl.GetInternalValue(), 123)
|
|
|
|
p.manager.RequireVersion(3)
|
|
self.assertEquals(p.manager.version, 3)
|
|
p.SetInteger(456, sample_interfaces_mojom.Enum.VALUE)
|
|
self.loop.RunUntilIdle()
|
|
self.assertEquals(len(errors), 0)
|
|
self.assertEquals(impl.GetInternalValue(), 456)
|
|
|
|
# Require a version that is not supported by the implementation side.
|
|
p.manager.RequireVersion(4)
|
|
# version is updated synchronously.
|
|
self.assertEquals(p.manager.version, 4)
|
|
p.SetInteger(789, sample_interfaces_mojom.Enum.VALUE)
|
|
self.loop.RunUntilIdle()
|
|
self.assertEquals(len(errors), 1)
|
|
# The call to SetInteger() after RequireVersion() is ignored.
|
|
self.assertEquals(impl.GetInternalValue(), 456)
|