package com.monitorjbl.xlsx;

import com.monitorjbl.xlsx.sst.BufferedStringsTable;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.openxml4j.opc.PackageAccess;
import org.junit.Test;

import java.io.File;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;

public class BufferedStringsTableTest {

  /**
   * Verifies a bug where BufferedStringsTable was only looking at the first Characters xml element
   * in a text sequence.
   */
  @Test
  public void testStringsWithMultipleXmlElements() throws Exception {
    File file = new File("src/test/resources/blank_cells.xlsx");
    File sstCache = File.createTempFile("cache", ".sst");
    sstCache.deleteOnExit();
    try (OPCPackage pkg = OPCPackage.open(file, PackageAccess.READ);
         BufferedStringsTable sst = BufferedStringsTable.getSharedStringsTable(sstCache, 1000, pkg)) {
      assertNotNull(sst);
      assertEquals("B1 is Blank --->", sst.getEntryAt(0).getT());
      assertEquals("B1 is Blank --->", sst.getItemAt(0).getString());
    }
  }

  /**
   * Verifies a bug where BufferedStringsTable was dropping text enclosed in formatting
   * instructions.
   */
  @Test
  public void testStringsWrappedInFormatting() throws Exception {
    File file = new File("src/test/resources/shared_styled_string.xlsx");
    File sstCache = File.createTempFile("cache", ".sst");
    sstCache.deleteOnExit();
    try (OPCPackage pkg = OPCPackage.open(file, PackageAccess.READ);
         BufferedStringsTable sst = BufferedStringsTable.getSharedStringsTable(sstCache, 1000, pkg)) {
      assertNotNull(sst);
      assertEquals("shared styled string", sst.getItemAt(0).getString());
    }
  }
}