import os
import sys
import unittest
if sys.version_info > (3, 0):
from io import StringIO
else:
from StringIO import StringIO
module_directory = os.path.dirname(os.path.abspath(__file__))
sys.path.append(os.path.abspath(os.path.join(module_directory, os.path.pardir)))
from webkit import model from webkit import parser
class ModelCheckTest(unittest.TestCase):
def test_duplicate_receivers(self):
contents = """
messages -> WebPage {
LoadURL(String url)
}"""
receiver = parser.parse(StringIO(contents))
self.assertEquals(receiver.name, 'WebPage')
self.assertEquals(receiver.messages[0].name, 'LoadURL')
other_contents = """
messages -> WebPage {
LoadURL(String url)
LoadURL2(String url)
}"""
other_receiver = parser.parse(StringIO(other_contents))
self.assertEquals(other_receiver.name, 'WebPage')
self.assertEquals(other_receiver.messages[0].name, 'LoadURL')
self.assertEquals(other_receiver.messages[1].name, 'LoadURL2')
errors = model.check_global_model_inputs([receiver, other_receiver])
self.assertEquals(len(errors), 1)
self.assertTrue("Duplicate" in errors[0])
def test_mismatch_message_attribute_sync(self):
contents = """
messages -> WebPage {
#if USE(COCOA)
LoadURL(String url) Synchronous
#endif
#if USE(GTK)
LoadURL(String url)
#endif
}"""
receiver = parser.parse(StringIO(contents))
self.assertEquals(receiver.name, 'WebPage')
self.assertEquals(receiver.messages[0].name, 'LoadURL')
errors = model.check_global_model_inputs([receiver])
self.assertEquals(len(errors), 1)
self.assertTrue("attribute mismatch" in errors[0])
if __name__ == '__main__':
unittest.main()