Tests that showing / hiding video controls uses the display:none property


** Playing the video **
RUN(video.play())

** Move mouse somewhere over the panel **
RUN(eventSender.mouseMoveTo(muteButtonCoordinates[0], muteButtonCoordinates[1]))

** Test that controls are shown when controls attribute is present **
EXPECTED (getComputedStyle(panel).display != 'none') OK

** Move mouse outside the video **
RUN(eventSender.mouseMoveTo(video.offsetLeft, video.offsetTop + 2 * video.offsetHeight))

** The controls should have the display property set to none
EXPECTED (getComputedStyle(panel).display == 'none') OK

** Remove controls attribute**
RUN(video.removeAttribute('controls'))

** Video controls tree has been removed **
EXPECTED (panel == 'null') OK

END OF TEST

