from marionette_test import *


class SMSTest(MarionetteTestCase):

    @unittest.expectedFailure
    def test_sms_between_emulators(self):
        # Tests always have one emulator available as self.marionette; we'll
        # use this for the receiving emulator.  We'll also launch a second
        # emulator to use as the sender.
        sender = self.get_new_emulator()
        receiver = self.marionette

        self.set_up_test_page(sender, "test.html", ["dom.sms.whitelist"])
        self.set_up_test_page(receiver, "test.html", ["dom.sms.whitelist"])

        # Setup the event listsener on the receiver, which should store
        # a global variable when an SMS is received.
        message = 'hello world!'
        self.assertTrue(receiver.execute_script("return window.navigator.mozSms != null;"))
        receiver.execute_script("""
global.smsreceived = null;
window.navigator.mozSms.addEventListener("received", function(e) {
    global.smsreceived = e.message;
});
""", new_sandbox=False)

        # Send the SMS from the sender.
        sender.execute_script("""
window.navigator.mozSms.send("%d", "%s");
""" % (receiver.emulator.port, message))

        # On the receiver, wait up to 10s for an SMS to be received, by 
        # checking the value of the global var that the listener will change.
        receiver.set_script_timeout(0) # TODO no timeout for now since the test fails
        received = receiver.execute_async_script("""
        waitFor(function () {
            marionetteScriptFinished(global.smsreceived);
        }, function () {
            return global.smsreceived
        });
        """, new_sandbox=False)
        self.assertEqual(received, message)
