public void NoLongerBusy_EvenWithoutEvent_IsNoticed() { var browser = new BrowserStub(); string target = "http://any old web address"; var isolator = NavigationIsolator.GetOrCreateTheOneNavigationIsolator(); isolator.Navigate(browser, target); Assert.That(browser.NavigateTarget, Is.EqualTo(target)); var browser2 = new BrowserStub(); string target2 = "http://some other web address"; isolator.Navigate(browser2, target2); Assert.That(browser.NavigateTarget, Is.EqualTo(target), "Second navigation should not have proceeded at once"); Assert.That(browser2.NavigateTarget, Is.EqualTo(null), "Second navigation should not have proceeded at once"); browser.IsBusy = false; // finished but did not raise event. var start = DateTime.Now; while (DateTime.Now - start < new TimeSpan(0, 0, 0, 0, 150)) { Application.DoEvents(); // allow timer to tick. } Assert.That(() => browser2.NavigateTarget, Is.EqualTo(target2), "Second navigation should have proceeded soon after first no longer busy"); browser.NormalTermination(); browser2.NormalTermination(); Assert.That(browser.EventHandlerCount, Is.EqualTo(0), "event handlers should be removed once last navigation completed"); Assert.That(browser2.EventHandlerCount, Is.EqualTo(0), "event handlers should be removed once last navigation completed"); }
public void Isolation_AfterLongDelay_GivesUpAndMovesOn() { var browser = new BrowserStub(); string target = "http://any old web address"; var isolator = NavigationIsolator.GetOrCreateTheOneNavigationIsolator(); isolator.Navigate(browser, target); Assert.That(browser.NavigateTarget, Is.EqualTo(target)); var browser2 = new BrowserStub(); string target2 = "http://some other web address"; isolator.Navigate(browser2, target2); var browser3 = new BrowserStub(); string target3 = "http://yet another web address"; isolator.Navigate(browser3, target3); Assert.That(browser.NavigateTarget, Is.EqualTo(target), "Second navigation should not have proceeded at once"); var start = DateTime.Now; while (DateTime.Now - start < new TimeSpan(0, 0, 0, 2, 300)) { Application.DoEvents(); // allow timer to tick. } Assert.That(() => browser2.NavigateTarget, Is.EqualTo(target2), "Second navigation should have proceeded eventually"); browser2.NormalTermination(); // the second request. Assert.That(() => browser3.NavigateTarget, Is.EqualTo(target3), "Third navigation should have proceeded when second finished"); browser3.NormalTermination(); // hopefully from the third. Assert.That(browser3.EventHandlerCount, Is.EqualTo(0), "event handlers should be removed once last navigation completed"); }
public void SpuriousNavigatedEvents_AreIgnored() { var browser = new BrowserStub(); string target = "http://any old web address"; var isolator = NavigationIsolator.GetOrCreateTheOneNavigationIsolator(); isolator.Navigate(browser, target); Assert.That(browser.NavigateTarget, Is.EqualTo(target)); var browser2 = new BrowserStub(); string target2 = "http://some other web address"; isolator.Navigate(browser2, target2); Assert.That(browser.NavigateTarget, Is.EqualTo(target), "Second navigation should not have proceeded at once"); Assert.That(browser2.NavigateTarget, Is.EqualTo(null), "Second navigation should not have proceeded at once"); browser.RaiseNavigated(this, new EventArgs()); // got the event notification, but still busy. Assert.That(browser.NavigateTarget, Is.EqualTo(target), "Second navigation should not have proceeded even on Navigated while browser still busy"); Assert.That(browser2.NavigateTarget, Is.EqualTo(null), "Second navigation should not have proceeded even on Navigated while browser still busy"); browser.NormalTermination(); Assert.That(browser2.NavigateTarget, Is.EqualTo(target2), "Second navigation should have proceeded when first completed (and browser no longer busy)"); browser2.NormalTermination(); Assert.That(browser.EventHandlerCount, Is.EqualTo(0), "event handlers should be removed once last navigation completed"); Assert.That(browser2.EventHandlerCount, Is.EqualTo(0), "event handlers should be removed once last navigation completed"); }
public void TwoPendingNavigations_WithNavigatedEvents_AreHandledCorrectly() { var browser = new BrowserStub(); string target = "http://any old web address"; var isolator = NavigationIsolator.GetOrCreateTheOneNavigationIsolator(); isolator.Navigate(browser, target); Assert.That(browser.NavigateTarget, Is.EqualTo(target)); var browser2 = new BrowserStub(); string target2 = "http://some other web address"; isolator.Navigate(browser2, target2); var browser3 = new BrowserStub(); string target3 = "http://yet another other web address"; isolator.Navigate(browser3, target3); Assert.That(browser.NavigateTarget, Is.EqualTo(target), "Second and third navigation should not have proceeded at once"); browser.NormalTermination(); Assert.That(browser2.NavigateTarget, Is.EqualTo(target2), "Second navigation should have proceeded when first completed (but third should not)"); browser2.NormalTermination(); Assert.That(browser3.NavigateTarget, Is.EqualTo(target3), "Third navigation should have proceeded when second completed"); browser3.NormalTermination(); Assert.That(browser.EventHandlerCount, Is.EqualTo(0), "event handlers should be removed once last navigation completed"); }
public void GetAllData_LocalOnly_ReturnLocal() { var c = new Configurator(_libraryFolder.Path, NavigationIsolator.GetOrCreateTheOneNavigationIsolator()); dynamic j = new DynamicJson(); j.one = 1; c.CollectJsonData(j.ToString()); Assert.AreEqual(j, DynamicJson.Parse(c.GetAllData())); }
public void GetLibraryData_NoGlobalData_Empty() { var first = new Configurator(_libraryFolder.Path, NavigationIsolator.GetOrCreateTheOneNavigationIsolator()); dynamic j = new DynamicJson(); j.one = 1; first.CollectJsonData(j.ToString()); Assert.AreEqual("{}", first.GetLibraryData()); }
public void WhenCollectedNoGlobalDataThenGlobalDataIsEmpty() { var first = new Configurator(_libraryFolder.Path, NavigationIsolator.GetOrCreateTheOneNavigationIsolator()); dynamic j = new DynamicJson(); j.one = 1; first.CollectJsonData(j.ToString()); Assert.AreEqual(j, DynamicJson.Parse(first.LocalData)); }
public void WhenCollectedNoLocalDataThenLocalDataIsEmpty() { var first = new Configurator(_libraryFolder.Path, NavigationIsolator.GetOrCreateTheOneNavigationIsolator()); var stringRep = DynamicJson.Serialize(new { library = new { librarystuff = "foo" } }); first.CollectJsonData(stringRep.ToString()); AssertEmpty(first.LocalData); }
public void SimpleNavigation_JustHappens() { var browser = new BrowserStub(); string target = "http://any old web address"; var isolator = NavigationIsolator.GetOrCreateTheOneNavigationIsolator(); isolator.Navigate(browser, target); Assert.That(browser.NavigateTarget, Is.EqualTo(target)); browser.NormalTermination(); Assert.That(browser.EventHandlerCount, Is.EqualTo(0), "event handlers should be removed after navigation completes"); }
public void IdleNavigation_WhenNothingHappening_ProceedsAtOnce() { var browser = new BrowserStub(); string target = "http://any old web address"; var isolator = NavigationIsolator.GetOrCreateTheOneNavigationIsolator(); Assert.That(isolator.NavigateIfIdle(browser, target), Is.True); Assert.That(browser.NavigateTarget, Is.EqualTo(target)); browser.NormalTermination(); Assert.That(browser.EventHandlerCount, Is.EqualTo(0), "event handlers should be removed after navigation completes"); }
public void ShowConfigureDialog() { var c = new Configurator(_libraryFolder.Path, NavigationIsolator.GetOrCreateTheOneNavigationIsolator()); var stringRep = DynamicJson.Serialize(new { library = new { calendar = new { year = "2088" } } }); c.CollectJsonData(stringRep); c.ShowConfigurationDialog(Get_NotYetConfigured_CalendardBookStorage().FolderPath); Assert.IsTrue(c.GetLibraryData().Contains("year")); }
public void IdleNavigation_NavigationInProgress_ReturnsFalse_NeverProceeds() { var browser = new BrowserStub(); string target = "http://any old web address"; var isolator = NavigationIsolator.GetOrCreateTheOneNavigationIsolator(); isolator.Navigate(browser, target); Assert.That(browser.NavigateTarget, Is.EqualTo(target)); string target2 = "http://some other web address"; Assert.That(isolator.NavigateIfIdle(browser, target2), Is.False); browser.NormalTermination(); Assert.That(browser.EventHandlerCount, Is.EqualTo(0), "event handlers should be removed after navigation completes"); Assert.That(browser.NavigateTarget, Is.EqualTo(target), "failed idle navigation should not happen"); }
public void Setup() { _thisTestId = Guid.NewGuid().ToString().Replace('-', '_'); _workFolder = new TemporaryFolder("unittest-" + _thisTestId); _workFolderPath = _workFolder.FolderPath; Assert.AreEqual(0, Directory.GetDirectories(_workFolderPath).Count(), "Some stuff was left over from a previous test"); Assert.AreEqual(0, Directory.GetFiles(_workFolderPath).Count(), "Some stuff was left over from a previous test"); // Todo: Make sure the S3 unit test bucket is empty. // Todo: Make sure the parse.com unit test book table is empty _parseClient = new BloomParseClientDouble(_thisTestId); _htmlThumbNailer = new HtmlThumbNailer(NavigationIsolator.GetOrCreateTheOneNavigationIsolator()); _transfer = new BookTransfer(_parseClient, new BloomS3Client(BloomS3Client.UnitTestBucketName), new BookThumbNailer(_htmlThumbNailer), new BookDownloadStartingEvent()); _transfer.BookDownLoaded += (sender, args) => _downloadedBooks.Add(args.BookDetails); }
public void LibrarySettingsAreRoundTriped() { var first = new Configurator(_libraryFolder.Path, NavigationIsolator.GetOrCreateTheOneNavigationIsolator()); var stringRep = DynamicJson.Serialize(new { library = new { stuff = "foo" } }); first.CollectJsonData(stringRep.ToString()); var second = new Configurator(_libraryFolder.Path, NavigationIsolator.GetOrCreateTheOneNavigationIsolator()); dynamic j = (DynamicJson)DynamicJson.Parse(second.GetLibraryData()); Assert.AreEqual("foo", j.library.stuff); }
public void CollectJsonData_HasArrayValue_DataMerged() { var firstData = "{\"library\":{\"days\":[\"1\",\"2\"]}}"; var secondData = "{\"library\":{\"days\":[\"o:e\",\"two\"]}}"; var first = new Configurator(_libraryFolder.Path, NavigationIsolator.GetOrCreateTheOneNavigationIsolator()); first.CollectJsonData(firstData.ToString()); first.CollectJsonData(secondData.ToString()); var second = new Configurator(_libraryFolder.Path, NavigationIsolator.GetOrCreateTheOneNavigationIsolator()); dynamic j = (DynamicJson)DynamicJson.Parse(second.GetLibraryData()); Assert.AreEqual("o:e", j.library.days[0]); Assert.AreEqual("two", j.library.days[1]); }
public void SecondNavigation_OnSameBrowser_HappensAtOnce() { var browser = new BrowserStub(); string target = "http://any old web address"; var isolator = NavigationIsolator.GetOrCreateTheOneNavigationIsolator(); isolator.Navigate(browser, target); Assert.That(browser.NavigateTarget, Is.EqualTo(target)); string target2 = "http://some other web address"; isolator.Navigate(browser, target2); Assert.That(browser.NavigateTarget, Is.EqualTo(target2), "Second navigation should have proceeded at once"); browser.NormalTermination(); Assert.That(browser.EventHandlerCount, Is.EqualTo(0), "event handlers should be removed once last navigation completed"); }
public void SecondRequest_WhenFirstNoLongerBusy_ProceedsAtOnce() { var browser = new BrowserStub(); string target = "http://any old web address"; var isolator = NavigationIsolator.GetOrCreateTheOneNavigationIsolator(); isolator.Navigate(browser, target); Assert.That(browser.NavigateTarget, Is.EqualTo(target)); browser.IsBusy = false; // clear state without raising event string target2 = "http://some other web address"; isolator.Navigate(browser, target2); Assert.That(browser.NavigateTarget, Is.EqualTo(target2), "Second navigation should have proceeded since browser is already not busy"); browser.NormalTermination(); Assert.That(browser.EventHandlerCount, Is.EqualTo(0), "event handlers should be removed once last navigation completed"); }
public void RegularNavigation_DelayedProperlyByIdleNavigation() { var browser = new BrowserStub(); string target = "http://any old web address"; var isolator = NavigationIsolator.GetOrCreateTheOneNavigationIsolator(); Assert.That(isolator.NavigateIfIdle(browser, target), Is.True); Assert.That(browser.NavigateTarget, Is.EqualTo(target)); var browser2 = new BrowserStub(); string target2 = "http://some other web address"; isolator.Navigate(browser2, target2); Assert.That(browser.NavigateTarget, Is.EqualTo(target), "Second navigation should not have proceeded at once"); Assert.That(browser2.NavigateTarget, Is.EqualTo(null), "Second navigation should not have proceeded at once"); browser.NormalTermination(); Assert.That(browser2.NavigateTarget, Is.EqualTo(target2), "Second navigation should have proceeded when first completed"); browser2.NormalTermination(); Assert.That(browser.EventHandlerCount, Is.EqualTo(0), "event handlers should be removed once last navigation completed"); Assert.That(browser2.EventHandlerCount, Is.EqualTo(0), "event handlers should be removed once last navigation completed"); }
public void CollectJsonData_NewTopLevelData_DataMerged() { var firstData = DynamicJson.Serialize(new { library = new { one = "1", color = "red" } }); var secondData = DynamicJson.Serialize(new { library = new { two = "2", color = "blue" } }); var first = new Configurator(_libraryFolder.Path, NavigationIsolator.GetOrCreateTheOneNavigationIsolator()); first.CollectJsonData(firstData.ToString()); first.CollectJsonData(secondData.ToString()); var second = new Configurator(_libraryFolder.Path, NavigationIsolator.GetOrCreateTheOneNavigationIsolator()); dynamic j = (DynamicJson)DynamicJson.Parse(second.GetLibraryData()); Assert.AreEqual("2", j.library.two); Assert.AreEqual("1", j.library.one); Assert.AreEqual("blue", j.library.color); }
public void SameBrowser_ReplacesPending() { var isolator = NavigationIsolator.GetOrCreateTheOneNavigationIsolator(); var browser = new BrowserStub(); string target = "http://whatever"; isolator.Navigate(browser, target); var browser2 = new BrowserStub(); string target2A = "http://first"; isolator.Navigate(browser2, target2A); string target2B = "http://second"; isolator.Navigate(browser2, target2B); // Signal the first browser to finish. browser.NormalTermination(); Assert.That(() => browser2.NavigateTarget, Is.EqualTo(target2B), "Second navigation should have proceeded with its second choice"); // Signal the second browser to finish. browser2.NormalTermination(); Assert.That(browser.EventHandlerCount, Is.EqualTo(0), "event handlers should be removed once last navigation completed"); Assert.That(browser2.EventHandlerCount, Is.EqualTo(0), "event handlers should be removed once last navigation completed"); }
public void SingleTask_AfterLongDelay_AllowsIdleNavigation() { var browser = new BrowserStub(); string target = "http://any old web address"; var isolator = NavigationIsolator.GetOrCreateTheOneNavigationIsolator(); isolator.Navigate(browser, target); Assert.That(browser.NavigateTarget, Is.EqualTo(target)); string target2 = "http://some other web address"; var start = DateTime.Now; var success = false; while (!success && DateTime.Now - start < new TimeSpan(0, 0, 0, 2, 300)) { success = isolator.NavigateIfIdle(browser, target2); Application.DoEvents(); // allow timer to tick. } Assert.That(() => browser.NavigateTarget, Is.EqualTo(target2), "Idle navigation should have proceeded eventually"); Assert.That(success, "NavigateIfIdle should eventually succeed"); browser.NormalTermination(); // possibly the long-delayed notification of the first nav, but more likely the idle navigation. Assert.That(browser.EventHandlerCount, Is.EqualTo(0), "event handlers should be removed once last navigation completed"); }
public void CollectJsonData_NewArrayItems_DataMerged() { var firstData = DynamicJson.Serialize(new { library = new { food = new { veg = "v", fruit = "f", nuts = "n" } } }); var secondData = DynamicJson.Serialize(new { library = new { food = new { bread = "b", fruit = "{f\\:", nuts = "\"nut\"" } } }); var first = new Configurator(_libraryFolder.Path, NavigationIsolator.GetOrCreateTheOneNavigationIsolator()); first.CollectJsonData(firstData.ToString()); first.CollectJsonData(secondData.ToString()); var second = new Configurator(_libraryFolder.Path, NavigationIsolator.GetOrCreateTheOneNavigationIsolator()); dynamic j = (DynamicJson)DynamicJson.Parse(second.GetLibraryData()); Assert.AreEqual("v", j.library.food.veg); Assert.AreEqual("{f\\:", j.library.food.fruit); Assert.AreEqual("b", j.library.food.bread); Assert.AreEqual("\"nut\"", j.library.food.nuts); }
public void LocalData_NothingCollected_Empty() { var first = new Configurator(_libraryFolder.Path, NavigationIsolator.GetOrCreateTheOneNavigationIsolator()); Assert.AreEqual("", first.LocalData); }
public virtual void Setup() { _testFolder = new TemporaryFolder(GetTestFolderName()); _tempFolder = new TemporaryFolder(_testFolder, "book"); _bookDom = new HtmlDom(GetThreePageDom()); // a default, many tests replace this // Note that we're passing a function which returns the _bookDom member variable. By the time we return it, // it may have a different value than the _bookDom created on the previous line. // Thus, we are making a mock storage which, unlike a real one, doesn't itself // store a DOM set at creation; many tests update _bookDom to something else AFTER // this setup routine makes the Storage they use in their books. _storage = MakeMockStorage(_tempFolder.Path, () => _bookDom); _bookDom = _storage.Object.Dom; _metadata = _storage.Object.BookInfo; _templateFinder = new Moq.Mock <ITemplateFinder>(); _fileLocator = new Moq.Mock <IFileLocator>(); string root = FileLocationUtilities.GetDirectoryDistributedWithApplication(BloomFileLocator.BrowserRoot); string xMatter = BloomFileLocator.GetInstalledXMatterDirectory(); _fileLocator.Setup(x => x.LocateFileWithThrow("langVisibility.css")).Returns("../notareallocation/langVisibility.css"); _fileLocator.Setup(x => x.LocateFileWithThrow("previewMode.css")).Returns("../notareallocation/previewMode.css"); _fileLocator.Setup(x => x.LocateFileWithThrow("origami.css")).Returns("../notareallocation/origami.css"); _fileLocator.Setup(x => x.LocateFileWithThrow("origamiEditing.css")).Returns("../notareallocation/origamiEditing.css"); _fileLocator.Setup(x => x.LocateFileWithThrow("editMode.css")).Returns("../notareallocation/editMode.css"); _fileLocator.Setup(x => x.LocateFileWithThrow("editTranslationMode.css")).Returns("../notareallocation/editTranslationMode.css"); _fileLocator.Setup(x => x.LocateFileWithThrow("editOriginalMode.css")).Returns("../notareallocation/editOriginalMode.css"); _fileLocator.Setup(x => x.LocateFileWithThrow("editPaneGlobal.css")).Returns("../notareallocation/editPaneGlobal.css"); _fileLocator.Setup(x => x.LocateFileWithThrow("basePage.css")).Returns("../notareallocation/basePage.css"); _fileLocator.Setup(x => x.LocateFileWithThrow("bloomBootstrap.js")).Returns("../notareallocation/bloomBootstrap.js"); _fileLocator.Setup(x => x.LocateFileWithThrow("bloomPreviewBootstrap.js")).Returns("../notareallocation/bloomPreviewBootstrap.js"); _fileLocator.Setup(x => x.LocateFileWithThrow("baseEPUB.css")).Returns("../notareallocation/baseEPUB.css"); _fileLocator.Setup(x => x.LocateFileWithThrow("Device-XMatter.css")).Returns("../notareallocation/Device-XMatter.css"); _fileLocator.Setup(x => x.LocateFileWithThrow("customBookStyles.css")).Returns(Path.Combine(_tempFolder.Path, "customBookStyles.css")); _fileLocator.Setup(x => x.LocateFileWithThrow("defaultLangStyles.css")).Returns(Path.Combine(_testFolder.Path, "defaultLangStyles.css")); _fileLocator.Setup(x => x.LocateFileWithThrow("customCollectionStyles.css")).Returns(Path.Combine(_testFolder.Path, "customCollectionStyles.css")); var basicBookPath = BloomFileLocator.GetCodeBaseFolder() + "/../browser/templates/template books/Basic Book/Basic Book.css"; _fileLocator.Setup(x => x.LocateFile("Basic Book.css")).Returns(basicBookPath); _fileLocator.Setup(x => x.LocateDirectory("Factory-XMatter")).Returns(xMatter.CombineForPath("Factory-XMatter")); _fileLocator.Setup(x => x.LocateDirectoryWithThrow("Factory-XMatter")).Returns(xMatter.CombineForPath("Factory-XMatter")); _fileLocator.Setup(x => x.LocateDirectory("Factory-XMatter", It.IsAny <string>())).Returns(xMatter.CombineForPath("Factory-XMatter")); _fileLocator.Setup(x => x.LocateFileWithThrow("Factory-XMatter".CombineForPath("Factory-XMatter.htm"))).Returns(xMatter.CombineForPath("Factory-XMatter", "Factory-XMatter.htm")); _fileLocator.Setup(x => x.LocateDirectory("Traditional-XMatter")).Returns(xMatter.CombineForPath("Traditional-XMatter")); _fileLocator.Setup(x => x.LocateDirectoryWithThrow("Traditional-XMatter")).Returns(xMatter.CombineForPath("Traditional-XMatter")); _fileLocator.Setup(x => x.LocateDirectory("Traditional-XMatter", It.IsAny <string>())).Returns(xMatter.CombineForPath("Traditional-XMatter")); _fileLocator.Setup(x => x.LocateFileWithThrow("Traditional-XMatter".CombineForPath("Traditional-XMatter.htm"))).Returns(xMatter.CombineForPath("Traditional-XMatter", "Factory-XMatter.htm")); _fileLocator.Setup(x => x.LocateDirectory("BigBook-XMatter")).Returns(xMatter.CombineForPath("BigBook-XMatter")); _fileLocator.Setup(x => x.LocateDirectoryWithThrow("BigBook-XMatter")).Returns(xMatter.CombineForPath("BigBook-XMatter")); _fileLocator.Setup(x => x.LocateDirectory("BigBook-XMatter", It.IsAny <string>())).Returns(xMatter.CombineForPath("BigBook-XMatter")); _fileLocator.Setup(x => x.LocateFileWithThrow("BigBook-XMatter".CombineForPath("BigBook-XMatter.htm"))).Returns(xMatter.CombineForPath("BigBook-XMatter", "BigBook-XMatter.htm")); //warning: we're neutering part of what the code under test is trying to do here: _fileLocator.Setup(x => x.CloneAndCustomize(It.IsAny <IEnumerable <string> >())).Returns(_fileLocator.Object); _thumbnailer = new Moq.Mock <HtmlThumbNailer>(new object[] { NavigationIsolator.GetOrCreateTheOneNavigationIsolator() }); _pageSelection = new Mock <PageSelection>(); _pageListChangedEvent = new PageListChangedEvent(); }
public void GetCollectionData_NothingCollected_Empty() { var first = new Configurator(_collectionFolder.Path, NavigationIsolator.GetOrCreateTheOneNavigationIsolator()); Assert.AreEqual("{}", first.GetCollectionData()); }