blob: 7b1f07e7c8d6cf422d6954fb9fc9fb858efff6df [file] [log] [blame]
# 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 logging
import os
import os.path
import mojo_unittest
import validation_test_interfaces_mojom
# pylint: disable=E0611
import mojo_system as system
from mojo_bindings import messaging
from mojo_tests import validation_util
from mopy.paths import Paths
logging.basicConfig(level=logging.ERROR)
paths = Paths()
class RoutingMessageReceiver(messaging.MessageReceiver):
def __init__(self, request, response):
self.request = request
self.response = response
def Accept(self, message):
if message.header.is_response:
return self.response.Accept(message)
else:
return self.request.Accept(message)
class SinkMessageReceiver(messaging.MessageReceiverWithResponder):
def Accept(self, message):
return False
def AcceptWithResponder(self, message, responder):
return False
def Close(self):
pass
class HandleMock(object):
def IsValid(self):
return True
def Close(self):
pass
class ValidationTest(mojo_unittest.MojoTestCase):
@staticmethod
def ParseData(data_dir, filename):
data = validation_util.ParseData(
open(os.path.join(data_dir, filename), 'r').read())
expect_file = filename[:-4] + 'expected'
expected_error = open(
os.path.join(data_dir, expect_file), 'r').read().strip();
success = expected_error == 'PASS'
return (filename, data, success)
@staticmethod
def GetData(prefix):
data_dir = os.path.join(paths.src_root, 'mojo', 'public', 'interfaces',
'bindings', 'tests', 'data', 'validation')
# TODO(yzshen): Skip some interface versioning tests.
skipped_tests = ["conformance_mthd13_good_2.data"]
return [ValidationTest.ParseData(data_dir, x) for x in os.listdir(data_dir)
if x.startswith(prefix) and x.endswith('.data') and
x not in skipped_tests]
def runTest(self, prefix, message_receiver):
for (filename, data, expected) in ValidationTest.GetData(prefix):
self.assertEquals(len(data.error_message), 0)
handles = [HandleMock() for _ in xrange(data.num_handles)]
message = messaging.Message(data.data, handles)
self.assertEquals(message_receiver.Accept(message), expected,
'Unexpected result for test: %s' % filename)
def testConformance(self):
manager = validation_test_interfaces_mojom.ConformanceTestInterface.manager
proxy = manager._InternalProxy(SinkMessageReceiver(), None, 0)
stub = manager._Stub(proxy)
self.runTest('conformance_', stub)