public void OneTimeSetUp()
        {
            var origDom = new HtmlDom(roundtripTestBook, true);

            _roundtrippedDom = new HtmlDom(roundtripTestBook, true);             //Will get imported into

            // We want to test that exporting a book with branding in the data-dive and importing into a book with no branding
            // does not reinstate the branding. So we need to remove it from the pre-import DOM, which is otherwise
            // (for this test) the same as what we originally exported.
            var branding =
                _roundtrippedDom.SelectSingleNode("//div[@data-book='outside-back-cover-branding-bottom-html']");

            branding.ParentNode.RemoveChild(branding);
            AssertThatXmlIn.Dom(origDom.RawDom).HasSpecifiedNumberOfMatchesForXpath("//div[@id='simpleFormattingTest']", 1);
            AssertThatXmlIn.Dom(origDom.RawDom).HasSpecifiedNumberOfMatchesForXpath("//div[@id='nestedFormattingTest']", 1);
            var mockLangDisplayNameResolver = new Mock <ILanguageDisplayNameResolver>();

            mockLangDisplayNameResolver.Setup(x => x.GetLanguageDisplayName("en")).Returns("English");
            var exporter = new SpreadsheetExporter(mockLangDisplayNameResolver.Object);

            exporter.Params  = new SpreadsheetExportParams();
            _sheetFromExport = exporter.Export(origDom, "fakeImagesFolderpath");
            using (var tempFile = TempFile.WithExtension("xslx"))
            {
                _sheetFromExport.WriteToFile(tempFile.Path);
                var sheet    = InternalSpreadsheet.ReadFromFile(tempFile.Path);
                var importer = new SpreadsheetImporter(null, _roundtrippedDom);
                importer.Import(sheet);
            }
        }
        public void OneTimeSetUp()
        {
            var dom = new HtmlDom(imageBook, true);

            _spreadsheetFolder = new TemporaryFolder("SpreadsheetImagesTests");
            _bookFolder        = new TemporaryFolder("SpreadsheetImagesTests_Book");

            var mockLangDisplayNameResolver = new Mock <ILanguageDisplayNameResolver>();

            mockLangDisplayNameResolver.Setup(x => x.GetLanguageDisplayName("en")).Returns("English");

            _exporter = new SpreadsheetExporter(mockLangDisplayNameResolver.Object);
            var path = SIL.IO.FileLocationUtilities.GetDirectoryDistributedWithApplication(_pathToTestImages);

            // We need all these files in one place so we can verify that all of them get copied except placeHolder.png
            foreach (var name in new [] { "BloomWithTaglineAgainstLight.svg", "man.jpg", "Mars 2.png", "lady24b.png", "empty-file.jpg" })
            {
                RobustFile.Copy(Path.Combine(path, name), Path.Combine(_bookFolder.FolderPath, name));
            }
            var placeHolderSource = Path.Combine(BloomFileLocator.FactoryCollectionsDirectory, "template books", "Basic Book", "placeHolder.png");

            RobustFile.Copy(placeHolderSource, Path.Combine(_bookFolder.FolderPath, "placeHolder.png"));

            _progressSpy     = new ProgressSpy();
            _sheetFromExport =
                _exporter.ExportToFolder(dom, _bookFolder.FolderPath, _spreadsheetFolder.FolderPath, out string outputPath, _progressSpy, OverwriteOptions.Overwrite);
            _rowsFromExport = _sheetFromExport.ContentRows.ToList();
            _sheetFromFile  = InternalSpreadsheet.ReadFromFile(outputPath);
            _rowsFromFile   = _sheetFromFile.ContentRows.ToList();
        }
Exemple #3
0
 public static int Handle(SpreadsheetImportParameters options)
 {
     try
     {
         string folderPath = Directory.GetParent(options.BookPath).FullName;
         BookStorage.SaveCopyBeforeImportOverwrite(folderPath);
         var sheet    = InternalSpreadsheet.ReadFromFile(options.InputPath);
         var dom      = new HtmlDom(XmlHtmlConverter.GetXmlDomFromHtmlFile(options.BookPath, false));
         var importer = new SpreadsheetImporter(null, dom, Path.GetDirectoryName(options.InputPath), folderPath);
         if (!string.IsNullOrEmpty(options.ParamsPath))
         {
             importer.Params = SpreadsheetImportParams.FromFile(options.ParamsPath);
         }
         var messages = importer.Import(sheet);
         foreach (var message in messages)
         {
             Debug.WriteLine(message);
             Console.WriteLine(message);
         }
         // Review: A lot of other stuff happens in Book.Save() and BookStorage.SaveHtml().
         // I doubt we need any of it for current purposes, but later we might.
         XmlHtmlConverter.SaveDOMAsHtml5(dom.RawDom, options.BookPath);
         Console.WriteLine("done");
         return(0);                // all went well
     }
     catch (Exception ex)
     {
         Debug.WriteLine(ex.Message);
         Console.WriteLine(ex.Message);
         Console.WriteLine(ex.StackTrace);
         return(1);
     }
 }
Exemple #4
0
        public void ColumnsNotLanguagesNotCounted()
        {
            var sheet  = new InternalSpreadsheet();
            var offset = sheet.StandardLeadingColumns.Length;

            Assert.That(sheet.ColumnForLang("en"), Is.EqualTo(offset));
            Assert.That(sheet.ColumnForLang("es"), Is.EqualTo(offset + 1));
            Assert.That(sheet.Languages, Has.Count.EqualTo(2));
            Assert.That(sheet.Languages, Has.Member("en"));
            Assert.That(sheet.Languages, Has.Member("es"));
        }
Exemple #5
0
        public void OneTimeSetup()
        {
            _testFolder = new TemporaryFolder("SpreadsheetImporterWithBookTests");
            // We need 2 layers of temp folder because BringBookUpToDate will change the name of the book
            // folder to match an imported title.
            _bookFolder = new TemporaryFolder(_testFolder, "Book");
            var settings = new NewCollectionSettings();

            settings.Language1.Iso639Code = "en";
            settings.Language1.SetName("English", false);
            settings.SettingsFilePath = Path.Combine(_bookFolder.FolderPath, "dummy");

            var fileLocator = new BloomFileLocator(settings, new XMatterPackFinder(new string[] { }), ProjectContext.GetFactoryFileLocations(),
                                                   ProjectContext.GetFoundFileLocations(), ProjectContext.GetAfterXMatterFileLocations());
            var bookFilePath = Path.Combine(_bookFolder.FolderPath, "testBook.htm");

            if (File.Exists(bookFilePath))             // Shouldn't ever happen, but... just being careful.
            {
                RobustFile.Delete(bookFilePath);
            }
            _dom = SetupTestDom();
            // Write out our test book
            File.WriteAllText(bookFilePath, _dom.RawDom.OuterXml.ToString());
            var storage = new BookStorage(_bookFolder.FolderPath, fileLocator, new BookRenamedEvent(), settings);

            var book = new Bloom.Book.Book(new BookInfo(_bookFolder.FolderPath, true), storage, null,
                                           settings, new Bloom.Edit.PageSelection(),
                                           new PageListChangedEvent(), new BookRefreshEvent());

            // Create the regular production importer
            _importer = new SpreadsheetImporter(null, book, _bookFolder.FolderPath);

            // Set up the internal spreadsheet rows directly.
            var ss             = new InternalSpreadsheet();
            var columnForEn    = ss.AddColumnForLang("en", "English");
            var columnForImage = ss.GetColumnForTag(InternalSpreadsheet.ImageSourceColumnLabel);

            var newTitle = "My new book title";
            var titleRow = new ContentRow(ss);

            titleRow.AddCell(InternalSpreadsheet.BookTitleRowLabel);
            titleRow.SetCell(columnForEn, newTitle);

            var coverImageRow = new ContentRow(ss);

            coverImageRow.AddCell(InternalSpreadsheet.CoverImageRowLabel);
            coverImageRow.SetCell(columnForImage, Path.Combine("images", "Othello 199.jpg"));

            _importer.Import(ss);

            _resultElement = ReadResultingBookToXml(newTitle);
        }
Exemple #6
0
        public void OneTimeSetUp()
        {
            var dom = new HtmlDom(kSimpleTwoPageBook, true);

            _exporter        = new SpreadsheetExporter();
            _sheetFromExport = _exporter.Export(dom);
            _rowsFromExport  = _sheetFromExport.ContentRows.ToList();
            using (var tempFile = TempFile.WithExtension("xslx"))
            {
                _sheetFromExport.WriteToFile(tempFile.Path);
                _sheetFromFile = InternalSpreadsheet.ReadFromFile(tempFile.Path);
                _rowsFromFile  = _sheetFromFile.ContentRows.ToList();
            }
        }
        public void ColumnsNotLanguagesNotCounted()
        {
            // Setup
            var sheet  = new InternalSpreadsheet();
            var offset = sheet.StandardLeadingColumns.Length;

            sheet.AddColumnForLang("en", "English");
            sheet.AddColumnForLang("es", "Español");

            // System under test
            var langs = sheet.Languages;

            // Verification
            Assert.That(langs, Has.Count.EqualTo(2));
            Assert.That(langs, Has.Member("en"));
            Assert.That(langs, Has.Member("es"));
        }
Exemple #8
0
        public void OneTimeSetUp()
        {
            // Cases we want to test:
            // - page has too many translation groups
            //		- V1: warn, leave extras unmodified
            //		- eventual: ?
            // - page has too few translation groups (special case: none)
            //		- V1: warn, drop extra inputs
            //		- V2: insert extra copies of page (and something else if it has no TGs)
            //		- eventual: insert extra pages using template specified in sheet
            // - there are input lines for pages that don't exist (pathological, in the middle; likely, after last; test both)
            //		- V1: warn, ignore
            //		- eventual: insert extra pages using template specified in sheet
            // - there are pages that have no input lines (but later pages do)
            // - there are pages after the last input line
            //		- V1: warn, leave unchanged.
            //		- eventual: ?
            // In this test suite, the blocks on the last page and the pages run out before
            // we run out of lines. So we can't test the case of running out of lines first.
            // Another class tests that.
            _dom   = new HtmlDom(inputBook, true);
            _sheet = new InternalSpreadsheet();
            _sheet.ColumnForLang("en");
            _sheet.ColumnForLang("fr");
            _sheet.AddRow(MakeRow("1", "New message about tigers", "New message about French tigers"));
            // problem 1: input DOM has a second TG on page 1; sheet does not.
            _sheet.AddRow(MakeRow("2", "More about tigers", "More about French tigers"));
            // problem 2: input DOM has no second TG on page 2.
            _sheet.AddRow(MakeRow("2", "Still more about tigers", "Still more about French tigers"));
            _sheet.AddRow(MakeRow("2", "More and more about tigers", "More and more about French tigers"));
            // problem 3: input DOM has no page 3 at all.
            _sheet.AddRow(MakeRow("3", "Lost story about tigers", "Lost story about French tigers"));
            _sheet.AddRow(MakeRow("3", "Another lost story about tigers", "Another lost story about French tigers"));
            // problem 4: input DOM has no page 4 at all.
            _sheet.AddRow(MakeRow("4", "Yet another lost story about tigers", "Yet another lost story about French tigers"));
            _sheet.AddRow(MakeRow("5", "A good story about tigers", "A good story about French tigers"));
            _sheet.AddRow(MakeRow("5", "Another good story about tigers", "Another good story about French tigers"));
            // problem 5: an extra block on page 5
            _sheet.AddRow(MakeRow("5", "Page 5 lost story about tigers", "Page 5 lost story about French tigers"));
            // problem 6: an extra block on after the last page
            _sheet.AddRow(MakeRow("6", "Page 6 lost story about tigers", "Page 6 lost story about French tigers"));
            var importer = new SpreadsheetImporter(this._dom, _sheet);

            _messages = importer.Import();
        }
Exemple #9
0
        public void OneTimeSetUp()
        {
            var dom = new HtmlDom(dataDivBook, true);

            _spreadsheetFolder = new TemporaryFolder("SpreadsheetXmatterTests");
            var mockLangDisplayNameResolver = new Mock <ILanguageDisplayNameResolver>();

            mockLangDisplayNameResolver.Setup(x => x.GetLanguageDisplayName("en")).Returns("English");
            mockLangDisplayNameResolver.Setup(x => x.GetLanguageDisplayName("es")).Returns("Español");

            _exporter        = new SpreadsheetExporter(mockLangDisplayNameResolver.Object);
            _sheetFromExport = _exporter.ExportToFolder(dom, "fakeImagesFolderpath", _spreadsheetFolder.FolderPath,
                                                        out string outputPath, null, OverwriteOptions.Overwrite);

            _rowsFromExport = _sheetFromExport.ContentRows.ToList();
            _sheetFromFile  = InternalSpreadsheet.ReadFromFile(outputPath);
            _rowsFromFile   = _sheetFromFile.ContentRows.ToList();
        }
Exemple #10
0
        public void OneTimeSetUp()
        {
            _dom = new HtmlDom(SpreadsheetTests.kSimpleTwoPageBook, true);
            AssertThatXmlIn.Dom(_dom.RawDom).HasSpecifiedNumberOfMatchesForXpath("//div[@lang='en']/p[text()='Riding on elephants can be risky.']", 1);             // unchanged

            var exporter = new SpreadsheetExporter();

            _sheet = exporter.Export(_dom);
            var indexDe = _sheet.ColumnForLang("de");

            _sheet.Header.SetCell(indexDe, "[tpi]");
            _sheet.ContentRows.First().SetCell(_sheet.ColumnForLang("en"), "<p>This elephant is running amok.</p>");
            _sheet.ContentRows.Skip(2).First().SetCell(_sheet.ColumnForLang("fr"), "<p>Riding on French elephants can be very risky.</p>");
            var importer = new SpreadsheetImporter(this._dom, _sheet);

            InitializeImporter(importer);
            importer.Import();
        }
Exemple #11
0
        public void OneTimeSetUp()
        {
            // Cases we want to test:
            // - there are more blocks on the last page after we run out of input lines
            // - there are pages after the last input line
            //		- V1: warn, leave unchanged.
            //		- eventual: ?
            // In this test suite, lines run out before the blocks.
            _dom   = new HtmlDom(inputBook, true);
            _sheet = new InternalSpreadsheet();
            _sheet.ColumnForLang("en");
            _sheet.ColumnForLang("fr");
            _sheet.AddRow(SpreadsheetImportSyncWarnings.MakeRow("1", "New message about tigers", "New message about French tigers"));
            _sheet.AddRow(SpreadsheetImportSyncWarnings.MakeRow("2", "More about tigers", "More about French tigers"));
            // problem: there's no input corresponding to the second block on page 2, nor any of page 4.
            var importer = new SpreadsheetImporter(this._dom, _sheet);

            _messages = importer.Import();
        }
Exemple #12
0
        void SetupFor(string source)
        {
            switch (source)
            {
            case "fromExport":
                _sheet = _sheetFromExport;
                _rows  = _rowsFromExport;
                break;

            case "fromFile":
                _sheet = _sheetFromFile;
                _rows  = _rowsFromFile;
                break;

            default:
                // Whatever's going on needs to fail
                Assert.That(source, Is.Not.EqualTo(source));
                break;
            }
        }
        void SetupFor(string source)
        {
            switch (source)
            {
            case "fromExport":
                _sheet = _sheetFromExport;
                _rows  = _rowsFromExport;
                break;

            case "fromFile":
                _sheet = _sheetFromFile;
                _rows  = _rowsFromFile;
                break;

            default:
                // Whatever's going on needs to fail
                Assert.That(source, Is.Not.EqualTo(source));
                break;
            }

            _pageContentRows = _rows.Where(r => r.MetadataKey == InternalSpreadsheet.PageContentRowLabel).ToList();
        }
        public void OneTimeSetUp()
        {
            var dom = new HtmlDom(kSimpleTwoPageBook, true);
            var langCodesToLangNames = new Dictionary <string, string>();

            langCodesToLangNames.Add("en", "English");
            langCodesToLangNames.Add("fr", "French");
            langCodesToLangNames.Add("de", "German");
            var mockLangDisplayNameResolver = new Mock <ILanguageDisplayNameResolver>();

            mockLangDisplayNameResolver.Setup(x => x.GetLanguageDisplayName("en")).Returns("English");
            mockLangDisplayNameResolver.Setup(x => x.GetLanguageDisplayName("fr")).Returns("French");
            mockLangDisplayNameResolver.Setup(x => x.GetLanguageDisplayName("de")).Returns("German");
            _exporter        = new SpreadsheetExporter(mockLangDisplayNameResolver.Object);
            _sheetFromExport = _exporter.Export(dom, "fakeImagesFolderpath");
            _rowsFromExport  = _sheetFromExport.ContentRows.ToList();
            using (var tempFile = TempFile.WithExtension("xslx"))
            {
                _sheetFromExport.WriteToFile(tempFile.Path);
                _sheetFromFile = InternalSpreadsheet.ReadFromFile(tempFile.Path);
                _rowsFromFile  = _sheetFromFile.ContentRows.ToList();
            }
        }