public void DictionaryLibrarySaveToPageTest()
        {
            const string tableName = "replace";

            const string pageContent =
                "comments\n\n" +
                "!| Dictionary | not ok |\n| Key | Value |\n| key1 | value 1 |\n| key2 | value 2 |\n| key3 | value 3 |\n\nmore comments\n\n" +
                "!| Dictionary | replace |\n| Key | Value |\n| key4 | value 4 |\n| key5 | value 5 |\n| key6 | value 6 |\n\n yet more comments\n\n" +
                "!| Dictionary | not ok 2 |\n| Key | Value |\n| 7 | 8 |\n\nand even more comments\n";

            var saver = new DictionaryLibrary
            {
                MyFitNessePage = new FitNessePageMock(pageContent),
                PageRoot       = TestPageRoot
            };

            saver.AddValue("key9", "value 9");
            saver.AddValue("key10", "value 10");
            saver.AddValue("key11", "value 11");
            saver.SaveTableToPage(tableName, PageName);
            var expected = PageDataRequest + DeletePageRequest + AddChildPartialRequest +
                           "comments\n\n" +
                           "!| Dictionary | not ok |\n| Key | Value |\n| key1 | value 1 |\n| key2 | value 2 |\n| key3 | value 3 |\n\nmore comments\n\n" +
                           DictionaryHeader(tableName) + "|key9|value 9|\n|key10|value 10|\n|key11|value 11|\n\n yet more comments\n\n" +
                           "!| Dictionary | not ok 2 |\n| Key | Value |\n| 7 | 8 |\n\nand even more comments\n" + FitNessePageTest.UriSeparator;

            Assert.AreEqual(expected, (saver.MyFitNessePage as FitNessePageMock)?.UsedUri);
        }
        public void DictionaryLibraryLoadSave()
        {
            const string defaultFileName = "DictionaryStore.json";

            Assert.IsFalse(File.Exists(defaultFileName), "File does not exist at start");
            var saver = new DictionaryLibrary();

            Assert.AreEqual(0, saver.Count);
            saver.AddValue("key2", "value 2");
            saver.AddValue("key1", "value 1");
            saver.AddValue("key3", "value 3");
            Assert.AreEqual(3, saver.Count);
            Assert.IsFalse(File.Exists(defaultFileName), "File does not exist before saving");
            Assert.IsFalse(saver.DeleteFile(defaultFileName));
            saver.FileName = string.Empty;
            saver.SaveFile(defaultFileName);
            Assert.AreEqual(defaultFileName, saver.FileName, "SaveFile sets file name");
            Assert.IsTrue(File.Exists(defaultFileName), "File exists after saving");

            var loader = new DictionaryLibrary {
                FileName = string.Empty
            };

            Assert.AreEqual(0, loader.Count, "Loader is empty before loading");
            Assert.IsTrue(loader.LoadFile(defaultFileName), "Loading after saving succeeds");
            Assert.AreEqual(defaultFileName, loader.FileName, "LoadFile sets file name");
            Assert.AreEqual(3, loader.Count);
            Assert.AreEqual("value 1", loader.Get("key1"));
            Assert.AreEqual("value 2", loader.Get("key2"));
            Assert.AreEqual("value 3", loader.Get("key3"));
            loader.AddValue("key4", "value 4");
            loader.Remove("key3");
            loader.SaveFile();
            loader.Clear();
            Assert.IsTrue(loader.LoadFile(), "Can load");
            Assert.AreEqual("value 4", loader.Get("key4"));
            Assert.IsNull(loader.Get("key3"), "Key 3 no longer there");

            Assert.IsTrue(loader.DeleteFile(), "File deleted");
            Assert.IsFalse(File.Exists(defaultFileName), "File does not exist after deleting");
            try
            {
                loader.LoadFile();
            }
            catch (Exception)
            {
                Assert.AreEqual(3, loader.Count, "original entries stay intact after failed load");
                return;
            }
            Assert.Fail("No exception thrown after loading deleted file");
        }
        public void DictionaryLibraryNewPageTest()
        {
            const string tableName = "TestTable";
            var          lib       = new DictionaryLibrary
            {
                MyFitNessePage = new FitNessePageMock(null),
                PageRoot       = TestPageRoot
            };

            lib.AddValue("key", "value");
            lib.SaveTableToPage(tableName, PageName);
            var expected = PageDataRequest + AddChildPartialRequest +
                           DictionaryHeader(tableName) + "|key|value|\n" + FitNessePageTest.UriSeparator;

            Assert.AreEqual(expected, (lib.MyFitNessePage as FitNessePageMock)?.UsedUri);
        }