public void TestUrlNavigation_SetNewVisible_UrlUpdatedCorrectly() { JsVisible visibleBefore = vcPageObj.GetViewport(); JsVisible visibleAfter = new JsVisible(-6000000000, 2000000000, 6000000); JsVisible urlVisible = new JsVisible(); // Get the query string and extract number values from it. // It looks like this: #x=7Ga&y=2500000000&s=7000000. string query = new Uri(Driver.Url).Fragment; MatchCollection match = Regex.Matches(query, @"[\d]+"); // It stores in Ga units here, so multiply by one billion. Also, it's negative value. urlVisible.CenterX = Convert.ToDouble(match[0].Value) * (-1000000000); urlVisible.CenterY = Convert.ToDouble(match[1].Value); urlVisible.Scale = Convert.ToDouble(match[2].Value); Assert.AreEqual(visibleBefore, urlVisible); // Change visible and check that url changed also. vcPageObj.MoveToVisible(visibleAfter, false); vcPageObj.WaitAnimation(); ExecuteScript("updateLayout();"); // Get the query string and extract number values from it. query = new Uri(Driver.Url).Fragment; match = Regex.Matches(query, @"[\d]+"); // It stores in Ga units here, so multiply by one billion. Also, it's negative value. urlVisible.CenterX = Convert.ToDouble(match[0].Value) * (-1000000000); urlVisible.CenterY = Convert.ToDouble(match[1].Value); urlVisible.Scale = Convert.ToDouble(match[2].Value); Assert.AreEqual(visibleAfter, urlVisible); }
public void TestViewport_ChangeViewport_VisibleChanged() { // TODO: probably it's good idea to make this input values random. const double offsetX = 50; const double offsetY = 25; const double scaleBias = 1; JsVisible offset = new JsVisible(offsetX, offsetY, scaleBias); JsVisible visibleBefore = vcPage.GetViewport(); JsVisible newVisible = visibleBefore; JsVisible visibleAfter; newVisible += offset; vcPage.SetVisible(newVisible); visibleAfter = vcPage.GetViewport(); Assert.AreEqual(newVisible, visibleAfter); newVisible -= offset; vcPage.SetVisible(newVisible); visibleAfter = vcPage.GetViewport(); Assert.AreEqual(visibleBefore, visibleAfter); }
public void TestRegimes_ClickEarthBarNoOverlay_EarthTimelineIsVisible() { var vc = new VirtualCanvasComponent(Driver); vc.SetVisible(new JsVisible(-21.173972602739752, 226047946.84065938, 0.02607632093933464)); vc.UpdateViewport(); Thread.Sleep(100); Point barPosition = vcPageObj.EarthBar.Location; JsVisible visibleBefore = vcPageObj.GetViewport(); action = new ActionsExtension(Driver); // Click on the regime bar. action.MoveByOffset(barPosition.X + 5, barPosition.Y + 2).Click().Perform(); vcPageObj.WaitAnimation(); JsVisible visibleAfter = vcPageObj.GetViewport(); JsTimeline timeline = GetEarthTimeline(); double width = timeline.right - timeline.left; JsCoordinates timelineCenter = new JsCoordinates(timeline.left + width / 2, timeline.y + timeline.height / 2); Assert.IsTrue(IsTimlineInFullSize(visibleAfter, timeline)); Assert.AreEqual(visibleAfter.CenterX, timelineCenter.X, AnimationImplicity); Assert.AreEqual(visibleAfter.CenterY, timelineCenter.Y, AnimationImplicity); Assert.AreNotEqual(visibleBefore, visibleAfter); }
public void TestRegimes_ClickCosmosLink_CosmosTimelineIsVisible() { Point cosmosLinkPosition = vcPageObj.CosmosLink.Location; Point earthLinkPosition = vcPageObj.EarthLink.Location; action = new ActionsExtension(Driver); // Click on the earth regime link. action.MoveByOffset(earthLinkPosition.X + 5, earthLinkPosition.Y + 2).Click().Perform(); vcPageObj.WaitAnimation(); action.SetDefault(); JsVisible visibleBefore = vcPageObj.GetViewport(); // Click on the cosmos regime link. action.MoveByOffset(cosmosLinkPosition.X + 5, cosmosLinkPosition.Y + 2).Click().Perform(); vcPageObj.WaitAnimation(); JsVisible visibleAfter = vcPageObj.GetViewport(); JsTimeline timeline = GetCosmosTimeline(); double width = timeline.right - timeline.left; JsCoordinates timelineCenter = new JsCoordinates(timeline.left + width / 2, timeline.y + timeline.height / 2); Assert.IsTrue(IsTimlineInFullSize(visibleAfter, timeline)); Assert.AreEqual(visibleAfter.CenterX, timelineCenter.X, 1); Assert.AreEqual(visibleAfter.CenterY, timelineCenter.Y, 1); Assert.AreNotEqual(visibleBefore, visibleAfter); }
public void TestMouseBehavior_SingleClickOnInfodot_ZoomIntoInfodot() { // Compute coordinates of infodot on the screen. JsCoordinates offsetVirtual = new JsCoordinates(-3200, 400); // k = 200; time = -16 * k, vyc = 2.0 * k, radv = 0.6 * k; JsCoordinates offsetScreen = vcPageObj.PointVirtualToScreen(offsetVirtual); JsVisible visibleBefore = vcPageObj.GetViewport(); action = new ActionsExtension(Driver); action.MoveToElement(vcPageObj.VirtualCanvas, (int)offsetScreen.X, (int)offsetScreen.Y).Perform(); action.Click().Perform(); vcPageObj.WaitAnimation(); JsVisible visibleAfter = vcPageObj.GetViewport(); Size vcSize = vcPageObj.VirtualCanvas.Size; double infodotVirtualSize = 240; // k = 200; radv = 0.6 * k; double infodotScreenSize = infodotVirtualSize / visibleAfter.Scale; // Infodot fills more than 90% of canvas' height. This condition can be regulated. // Also check, that center of viewport in the same point as center of the infodot. // It indicates, that infodot is inside of visible region and that infodot fills most of its space. double ratio = infodotScreenSize / vcSize.Height; Assert.IsTrue(ratio > 0.9 && ratio < 1); Assert.IsTrue(visibleAfter.CenterX == offsetVirtual.X && visibleAfter.CenterY == offsetVirtual.Y); Assert.AreNotEqual(visibleBefore, visibleAfter); }
public void TestMouseBehavior_Panning_VisibleChangedCorrectly() { const int offsetX = 100; const int offsetY = 100; action = new ActionsExtension(Driver); JsVisible visibleBefore = vcPageObj.GetViewport(); JsVisible visibleAfter; action.MoveToElement(vcPageObj.VirtualCanvas, offsetX, offsetY); action.ClickAndHold(); action.MoveByOffset(offsetX, offsetY); action.Release(); action.Perform(); vcPageObj.WaitAnimation(); visibleAfter = vcPageObj.GetViewport(); JsCoordinates offsetScreen; JsCoordinates offsetVirtual; // Firefox browser had an inaccuracy in 3px. offsetScreen = (Browser == BrowserType.Firefox) ? new JsCoordinates(offsetX - 3, offsetY - 3) : new JsCoordinates(offsetX, offsetY); offsetVirtual = vcPageObj.VectorScreenToVirtual(offsetScreen); Assert.AreEqual(visibleBefore.CenterX - offsetVirtual.X, visibleAfter.CenterX, 1); Assert.AreEqual(visibleBefore.CenterY - offsetVirtual.Y, visibleAfter.CenterY, 1); }
public void MoveToVisible(JsVisible visible, bool noAnimation) { // controller.moveToVisible(visible, false); string json = JSONHelper.Stringify(visible); StringBuilder script = new StringBuilder("controller.moveToVisible("); script.Append(json).Append(',').Append(noAnimation.ToString().ToLower()).Append(");"); jsExecutor.ExecuteScript(script.ToString()); }
public void SetVisible(JsVisible newVisible) { // $("#id").virtualCanvas("setVisible", newVisible); string json = JSONHelper.Stringify(newVisible); StringBuilder script = new StringBuilder("$("); script.Append('"').Append('#').Append(virtualCanvas.GetAttribute("id")).Append('"'); script.Append(").virtualCanvas("); script.Append('"').Append("setVisible").Append('"'); script.Append(',').Append(json).Append(");"); jsExecutor.ExecuteScript(script.ToString()); }
public void TestMouseBehavior_SingleClickOnTimeline_ZoomIntoTimeline() { // Compute coordinates of timeline's center on the screen. // k = 200; timeStart: -18.7 * k, timeEnd: 0, top: 0, height: 5 * k const double Width = 3740; const double Height = 1000; JsCoordinates offsetVirtual = new JsCoordinates(-3740 + Width / 2, 0 + Height / 2); JsCoordinates offsetScreen = vcPageObj.PointVirtualToScreen(offsetVirtual); JsVisible visibleBefore = vcPageObj.GetViewport(); // Enable onmouseclick handler. ExecuteScript("timelineClickOn();"); action = new ActionsExtension(Driver); action.MoveToElement(vcPageObj.VirtualCanvas, (int)offsetScreen.X, (int)offsetScreen.Y).Perform(); action.Click().Perform(); vcPageObj.WaitAnimation(); JsVisible visibleAfter = vcPageObj.GetViewport(); Size vcSize = vcPageObj.VirtualCanvas.Size; double timelineScreenWidth = Width / visibleAfter.Scale; double timelineScreenHeight = Height / visibleAfter.Scale; double timelineAspectRatio = timelineScreenWidth / timelineScreenHeight; double canvasAspectRatio = (double)vcSize.Width / vcSize.Height; double ratio = 0; // Check the side, that should fit the corresponding side of canvas. if (timelineAspectRatio >= canvasAspectRatio) { ratio = timelineScreenWidth / vcSize.Width; } else { ratio = timelineScreenHeight / vcSize.Height; } // Timeline fills more than 90% of canvas' side, but less or equal than 100% of the same side. // Also check, that center of viewport in the same point as center of the timeline. // It indicates, that timeline is inside of visible region and that timeline fills most of its space. Console.WriteLine(ratio); Assert.IsTrue(ratio > 0.9 && ratio <= 1); Assert.IsTrue(visibleAfter.CenterX == offsetVirtual.X && visibleAfter.CenterY == offsetVirtual.Y); Assert.AreNotEqual(visibleBefore, visibleAfter); }
// NOTE: Mark this test with TestMethod attribute, if need // to check error of mouse move actions in Selenium. public void TestRegimes_SeleniumMouseMoveError() { Point linkPosition = vcPageObj.CosmosLink.Location; for (int j = 5; j < 10; ++j) { for (int i = 35; i < 50; ++i) { JsVisible v = vcPageObj.GetViewport(); action.MoveByOffset(linkPosition.X + i, linkPosition.Y + j).Click().Perform(); if (v != vcPageObj.GetViewport()) { Console.WriteLine(i + " " + j); } action.SetDefault(); } } }
public void TestRegimes_ClickHumanityLink_HumanityTimelineIsVisible() { Point linkPosition = vcPageObj.HumanityLink.Location; JsVisible visibleBefore = vcPageObj.GetViewport(); action = new ActionsExtension(Driver); // Click on the regime link. action.MoveByOffset(linkPosition.X + 5, linkPosition.Y + 2).Click().Perform(); vcPageObj.WaitAnimation(); JsVisible visibleAfter = vcPageObj.GetViewport(); JsTimeline timeline = GetHumanityTimeline(); double width = timeline.right - timeline.left; JsCoordinates timelineCenter = new JsCoordinates(timeline.left + width / 2, timeline.y + timeline.height / 2); Assert.IsTrue(IsTimlineInFullSize(visibleAfter, timeline)); Assert.AreEqual(visibleAfter.CenterX, timelineCenter.X, AnimationImplicity); Assert.AreEqual(visibleAfter.CenterY, timelineCenter.Y, AnimationImplicity); Assert.AreNotEqual(visibleBefore, visibleAfter); }
public bool IsTimlineInFullSize(JsVisible visible, JsTimeline timeline) { Size vcSize = vcPageObj.VirtualCanvas.Size; double vwidth = timeline.right - timeline.left; double vheight = timeline.height; double pwidth = vwidth / visible.Scale; double pheight = vheight / visible.Scale; double timelineAspectRatio = pwidth / pheight; double canvasAspectRatio = (double)vcSize.Width / vcSize.Height; double ratio = 0; if (timelineAspectRatio >= canvasAspectRatio) { ratio = pwidth / vcSize.Width; } else { ratio = pheight / vcSize.Height; } // NOTE: It's possible to regulate this condition. The term of "full size" is documented. return(ratio > 0.9 && ratio <= 1); }
public void TestMouseBehavior_SingleClickOnContentItem_ZoomIntoContentItem() { Thread.Sleep(5000); // Compute coordinates of infodot on the screen. JsCoordinates offsetVirtual = new JsCoordinates(-3200, 400); // k = 200; time = -16 * k, vyc = 2.0 * k, radv = 0.6 * k; JsCoordinates offsetScreen = vcPageObj.PointVirtualToScreen(offsetVirtual); JsVisible visibleBefore = vcPageObj.GetViewport(); // Click on the infodot and wait animation. action = new ActionsExtension(Driver); action.MoveToElement(vcPageObj.VirtualCanvas, (int)offsetScreen.X, (int)offsetScreen.Y).Perform(); action.Click().Perform(); vcPageObj.WaitAnimation(); action.SetDefault(); offsetScreen = vcPageObj.PointVirtualToScreen(offsetVirtual); // Click on the content item. action.MoveToElement(vcPageObj.VirtualCanvas, (int)offsetScreen.X, (int)offsetScreen.Y).Perform(); vcPageObj.WaitAnimation(); action.Click().Perform(); vcPageObj.WaitAnimation(); JsVisible visibleAfter = vcPageObj.GetViewport(); Size vcSize = vcPageObj.VirtualCanvas.Size; // From Javascript code: // // var _rad = 450.0 / 2.0; //489.0 / 2.0; // var k = 1.0 / _rad; // var _wc = 260.0 * k; // var _hc = 270.0 * k; // Width = _wc * rad, Height = _hc * rad, rad = 120. const double Width = 1.155555555555556 * 120; const double Height = 1.2 * 120; double contentItemScreenWidth = Width / visibleAfter.Scale; double contentItemScreenHeight = Height / visibleAfter.Scale; double contentItemAspectRatio = contentItemScreenWidth / contentItemScreenHeight; double canvasAspectRatio = (double)vcSize.Width / vcSize.Height; double ratio = 0; // Check the side, that should fit the corresponding side of canvas. if (contentItemAspectRatio >= canvasAspectRatio) { ratio = contentItemScreenWidth / vcSize.Width; } else { ratio = contentItemScreenHeight / vcSize.Height; } // Content item fills more than 90% of canvas' side, but less or equal than 100% of the same side. // Also check, that center of viewport in the same point as center of the timeline. // It indicates, that timeline is inside of visible region and that timeline fills most of its space. Assert.IsTrue(ratio > 0.9 && ratio <= 1); Assert.IsTrue(visibleAfter.CenterX == offsetVirtual.X && visibleAfter.CenterY == offsetVirtual.Y); Assert.AreNotEqual(visibleBefore, visibleAfter); }