public void TestOpenBeforeRender() { VisualGridRunner runner = new VisualGridRunner(10); Eyes eyes = new Eyes(runner); eyes.SetLogHandler(TestUtils.InitLogHandler()); eyes.visualGridEyes_.EyesConnectorFactory = new MockEyesConnectorFactory(); Configuration config = eyes.GetConfiguration(); config.AddBrowser(new IosDeviceInfo(IosDeviceName.iPhone_7)); eyes.SetConfiguration(config); object errorMessageLocker = new object(); string errorMessage = null; IWebDriver driver = SeleniumUtils.CreateChromeDriver(); driver.Url = "http://applitools.github.io/demo"; try { eyes.Open(driver, "Mock app", "Mock Test"); MockEyesConnector mockEyesConnector = (MockEyesConnector)eyes.visualGridEyes_.eyesConnector_; mockEyesConnector.BeforeRender += (renderRequests) => { IVisualGridEyes eyes = runner.allEyes_.First(); if (!eyes.GetAllRunningTests().First().IsTestOpen) { lock (errorMessageLocker) { errorMessage = "Render called before open"; } } }; eyes.CheckWindow(); eyes.CloseAsync(); } finally { eyes.AbortAsync(); driver.Quit(); runner.GetAllTestResults(false); } Assert.IsNull(errorMessage); }
public void Open(IVisualGridEyes eyes, RenderingInfo renderingInfo) { Logger.Verbose("enter"); if (RenderingInfo == null) { RenderingInfo = renderingInfo; } Logger.Verbose("locking eyesToOpenList_"); lock (eyesToOpenList_) { eyesToOpenList_.Add(eyes); } Logger.Verbose("releasing eyesToOpenList_"); Logger.Verbose("locking allEyes_"); lock (allEyes_) { if (!allEyes_.Contains(eyes)) { if (allEyes_.Count == 0 && Logger.GetILogHandler() is NullLogHandler) { ILogHandler handler = eyes.Logger.GetILogHandler(); if (handler != null) { Logger.SetLogHandler(handler); } } allEyes_.Add(eyes); } else { Logger.Verbose("eyes already in list."); } } Logger.Verbose("releasing allEyes"); eyes.SetListener(eyesListener_); AddBatch(eyes.Batch.Id, eyes.GetBatchCloser()); Logger.Log("exit"); }
void OnTaskComplete(VisualGridTask task, IVisualGridEyes eyes) { Logger.Verbose("Enter with: {0}", task.TaskType); TaskType type = task.TaskType; try { switch (type) { case TaskType.Open: Logger.Verbose("locking eyesToOpenList"); lock (eyesToOpenList_) { Logger.Verbose("removing task {0}", task); eyesToOpenList_.Remove(eyes); } Logger.Verbose("releasing eyesToOpenList"); break; case TaskType.Abort: case TaskType.Close: Logger.Verbose("Task {0}", type); eyesOpenerService_.DecrementConcurrency(); openerServiceConcurrencyLock_.Set(); break; case TaskType.Check: Logger.Verbose("Check complete."); break; } } catch (Exception e) { Logger.Log("Error: " + e); } NotifyAllServices(); }
protected override TestResultsSummary GetAllTestResultsImpl(bool shouldThrowException) { Logger.Verbose("enter"); Dictionary <IVisualGridEyes, ICollection <Task <TestResultContainer> > > allFutures = new Dictionary <IVisualGridEyes, ICollection <Task <TestResultContainer> > >(); List <IVisualGridEyes> allEyes; lock (allEyes_) { allEyes = new List <IVisualGridEyes>(allEyes_); } foreach (IVisualGridEyes eyes in allEyes) { ICollection <Task <TestResultContainer> > futureList = eyes.Close(); Logger.Verbose("adding a {0} items list to allFutures.", futureList.Count); if (allFutures.TryGetValue(eyes, out ICollection <Task <TestResultContainer> > futures) && futures != null) { foreach (Task <TestResultContainer> future in futures) { futureList.Add(future); } } allFutures.Add(eyes, futureList); } Exception exception = null; NotifyAllServices(); List <TestResultContainer> allResults = new List <TestResultContainer>(); Logger.Verbose("trying to call future.get on {0} future lists.", allFutures.Count); foreach (KeyValuePair <IVisualGridEyes, ICollection <Task <TestResultContainer> > > entry in allFutures) { ICollection <Task <TestResultContainer> > value = entry.Value; IVisualGridEyes key = entry.Key; key.TestResults.Clear(); Logger.Verbose("trying to call future.get on {0} futures of {1}", value.Count, key); foreach (Task <TestResultContainer> future in value) { Logger.Verbose("calling future.get on {0}", key); TestResultContainer testResultContainer = null; try { if (Task.WhenAny(future, Task.Delay(waitForResultTimeout_)).Result == future) { testResultContainer = future.Result; if (testResultContainer.Exception != null && exception == null) { exception = testResultContainer.Exception; } allResults.Add(testResultContainer); key.TestResults.Add(testResultContainer); } } catch (Exception e) { Logger.Log("Error: " + e); if (exception == null) { exception = e; } } Logger.Verbose("got TestResultContainer: {0}", testResultContainer); } } //lock (allEyes_) allEyes_.Clear(); //eyesToOpenList_.Clear(); //renderingTaskList_.Clear(); StopServices(); NotifyAllServices(); if (shouldThrowException && exception != null) { Logger.Log("Error: " + exception); throw exception; } Logger.Verbose("exit"); TaskScheduler.UnobservedTaskException -= TaskScheduler_UnobservedTaskException; return(new TestResultsSummary(allResults)); }
public void Close(IVisualGridEyes eyes) { NotifyAllServices(); }