# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

from marionette import MarionetteTestCase
from marionette_driver.marionette import MultiActions, Actions
from marionette_driver.by import By


class testMultiFinger(MarionetteTestCase):
    def test_move_element(self):
      testAction = self.marionette.absolute_url("testAction.html")
      self.marionette.navigate(testAction)
      start = self.marionette.find_element(By.ID, "button1")
      drop = self.marionette.find_element(By.ID, "button2")
      ele = self.marionette.find_element(By.ID, "button3")
      multi_action = MultiActions(self.marionette)
      action1 = Actions(self.marionette)
      action2 = Actions(self.marionette)
      action1.press(start).move(drop).wait(3).release()
      action2.press(ele).wait().release()
      multi_action.add(action1).add(action2).perform()
      expected = "button1-touchstart"
      self.wait_for_condition(lambda m: m.execute_script("return document.getElementById('button1').innerHTML;") == expected)
      self.assertEqual("button2-touchmove-touchend", self.marionette.execute_script("return document.getElementById('button2').innerHTML;"))
      self.assertTrue("button3-touchstart-touchend" in self.marionette.execute_script("return document.getElementById('button3').innerHTML;"))

    def test_move_offset_element(self):
      testAction = self.marionette.absolute_url("testAction.html")
      self.marionette.navigate(testAction)
      start = self.marionette.find_element(By.ID, "button1")
      ele = self.marionette.find_element(By.ID, "button3")
      multi_action = MultiActions(self.marionette)
      action1 = Actions(self.marionette)
      action2 = Actions(self.marionette)
      action1.press(start).move_by_offset(0,300).wait().release()
      action2.press(ele).wait(5).release()
      multi_action.add(action1).add(action2).perform()
      expected = "button1-touchstart"
      self.wait_for_condition(lambda m: m.execute_script("return document.getElementById('button1').innerHTML;") == expected)
      self.assertEqual("button2-touchmove-touchend", self.marionette.execute_script("return document.getElementById('button2').innerHTML;"))
      self.assertTrue("button3-touchstart-touchend" in self.marionette.execute_script("return document.getElementById('button3').innerHTML;"))

    def test_three_fingers(self):
      testAction = self.marionette.absolute_url("testAction.html")
      self.marionette.navigate(testAction)
      start_one = self.marionette.find_element(By.ID, "button1")
      start_two = self.marionette.find_element(By.ID, "button2")
      element1 = self.marionette.find_element(By.ID, "button3")
      element2 = self.marionette.find_element(By.ID, "button4")
      multi_action = MultiActions(self.marionette)
      action1 = Actions(self.marionette)
      action2 = Actions(self.marionette)
      action3 = Actions(self.marionette)
      action1.press(start_one).move_by_offset(0,300).release()
      action2.press(element1).wait().wait(5).release()
      action3.press(element2).wait().wait().release()
      multi_action.add(action1).add(action2).add(action3).perform()
      expected = "button1-touchstart"
      self.wait_for_condition(lambda m: m.execute_script("return document.getElementById('button1').innerHTML;") == expected)
      self.assertEqual("button2-touchmove-touchend", self.marionette.execute_script("return document.getElementById('button2').innerHTML;"))
      button3_text = self.marionette.execute_script("return document.getElementById('button3').innerHTML;")
      button4_text = self.marionette.execute_script("return document.getElementById('button4').innerHTML;")
      self.assertTrue("button3-touchstart-touchend" in button3_text)
      self.assertTrue("button4-touchstart-touchend" in button4_text)
      self.assertTrue(int(button3_text.rsplit("-")[-1]) >= 5000)
      self.assertTrue(int(button4_text.rsplit("-")[-1]) >= 5000)
