Establishes the foundational structure, core Excel functionality, and tooling. - Implements base components for cells, ranges, columns, and rows. - Integrates a custom calculation engine with a wide range of Excel functions. - Adds comprehensive support for styling, conditional formatting, data validation, comments, pictures, and charts. - Configures build setup, project metadata (NuGet), and developer guidelines. - Includes editor and Git attributes for consistent code style and line endings.
763 lines
28 KiB
C#
763 lines
28 KiB
C#
using ClosedXML.Excel;
|
|
using NUnit.Framework;
|
|
using System;
|
|
using System.IO;
|
|
using System.Linq;
|
|
|
|
namespace ClosedXML_Tests
|
|
{
|
|
/// <summary>
|
|
/// This is a test class for XLRichStringTests and is intended
|
|
/// to contain all XLRichStringTests Unit Tests
|
|
/// </summary>
|
|
[TestFixture]
|
|
public class XLRichStringTests
|
|
{
|
|
[Test]
|
|
public void AccessRichTextTest1()
|
|
{
|
|
IXLWorksheet ws = new XLWorkbook().Worksheets.Add("Sheet1");
|
|
IXLCell cell = ws.Cell(1, 1);
|
|
cell.RichText.AddText("12");
|
|
cell.DataType = XLDataType.Number;
|
|
|
|
Assert.AreEqual(12.0, cell.GetDouble());
|
|
|
|
IXLRichText richText = cell.RichText;
|
|
|
|
Assert.AreEqual("12", richText.ToString());
|
|
|
|
richText.AddText("34");
|
|
|
|
Assert.AreEqual("1234", cell.GetString());
|
|
|
|
Assert.AreEqual(XLDataType.Number, cell.DataType);
|
|
|
|
Assert.AreEqual(1234.0, cell.GetDouble());
|
|
}
|
|
|
|
/// <summary>
|
|
/// A test for AddText
|
|
/// </summary>
|
|
[Test]
|
|
public void AddTextTest1()
|
|
{
|
|
IXLWorksheet ws = new XLWorkbook().Worksheets.Add("Sheet1");
|
|
IXLCell cell = ws.Cell(1, 1);
|
|
IXLRichText richString = cell.RichText;
|
|
|
|
string text = "Hello";
|
|
richString.AddText(text).SetBold().SetFontColor(XLColor.Red);
|
|
|
|
Assert.AreEqual(cell.GetString(), text);
|
|
Assert.AreEqual(cell.RichText.First().Bold, true);
|
|
Assert.AreEqual(cell.RichText.First().FontColor, XLColor.Red);
|
|
|
|
Assert.AreEqual(1, richString.Count);
|
|
|
|
richString.AddText("World");
|
|
Assert.AreEqual(richString.First().Text, text, "Item in collection is not the same as the one returned");
|
|
}
|
|
|
|
[Test]
|
|
public void AddTextTest2()
|
|
{
|
|
IXLWorksheet ws = new XLWorkbook().Worksheets.Add("Sheet1");
|
|
IXLCell cell = ws.Cell(1, 1);
|
|
Int32 number = 123;
|
|
|
|
cell.SetValue(number).Style
|
|
.Font.SetBold()
|
|
.Font.SetFontColor(XLColor.Red);
|
|
|
|
string text = number.ToString();
|
|
|
|
Assert.AreEqual(cell.RichText.ToString(), text);
|
|
Assert.AreEqual(cell.RichText.First().Bold, true);
|
|
Assert.AreEqual(cell.RichText.First().FontColor, XLColor.Red);
|
|
|
|
Assert.AreEqual(1, cell.RichText.Count);
|
|
|
|
cell.RichText.AddText("World");
|
|
Assert.AreEqual(cell.RichText.First().Text, text, "Item in collection is not the same as the one returned");
|
|
}
|
|
|
|
[Test]
|
|
public void AddTextTest3()
|
|
{
|
|
IXLWorksheet ws = new XLWorkbook().Worksheets.Add("Sheet1");
|
|
IXLCell cell = ws.Cell(1, 1);
|
|
Int32 number = 123;
|
|
cell.Value = number;
|
|
cell.Style
|
|
.Font.SetBold()
|
|
.Font.SetFontColor(XLColor.Red);
|
|
|
|
string text = number.ToString();
|
|
|
|
Assert.AreEqual(cell.RichText.ToString(), text);
|
|
Assert.AreEqual(cell.RichText.First().Bold, true);
|
|
Assert.AreEqual(cell.RichText.First().FontColor, XLColor.Red);
|
|
|
|
Assert.AreEqual(1, cell.RichText.Count);
|
|
|
|
cell.RichText.AddText("World");
|
|
Assert.AreEqual(cell.RichText.First().Text, text, "Item in collection is not the same as the one returned");
|
|
}
|
|
|
|
/// <summary>
|
|
/// A test for Clear
|
|
/// </summary>
|
|
[Test]
|
|
public void ClearTest()
|
|
{
|
|
IXLWorksheet ws = new XLWorkbook().Worksheets.Add("Sheet1");
|
|
IXLRichText richString = ws.Cell(1, 1).RichText;
|
|
|
|
richString.AddText("Hello");
|
|
richString.AddText(" ");
|
|
richString.AddText("World!");
|
|
|
|
richString.ClearText();
|
|
String expected = String.Empty;
|
|
String actual = richString.ToString();
|
|
Assert.AreEqual(expected, actual);
|
|
|
|
Assert.AreEqual(0, richString.Count);
|
|
}
|
|
|
|
[Test]
|
|
public void CountTest()
|
|
{
|
|
IXLWorksheet ws = new XLWorkbook().Worksheets.Add("Sheet1");
|
|
IXLRichText richString = ws.Cell(1, 1).RichText;
|
|
|
|
richString.AddText("Hello");
|
|
richString.AddText(" ");
|
|
richString.AddText("World!");
|
|
|
|
Assert.AreEqual(3, richString.Count);
|
|
}
|
|
|
|
[Test]
|
|
public void HasRichTextTest1()
|
|
{
|
|
IXLWorksheet ws = new XLWorkbook().Worksheets.Add("Sheet1");
|
|
IXLCell cell = ws.Cell(1, 1);
|
|
cell.RichText.AddText("123");
|
|
|
|
Assert.AreEqual(true, cell.HasRichText);
|
|
|
|
cell.DataType = XLDataType.Text;
|
|
|
|
Assert.AreEqual(true, cell.HasRichText);
|
|
|
|
cell.DataType = XLDataType.Number;
|
|
|
|
Assert.AreEqual(false, cell.HasRichText);
|
|
|
|
cell.RichText.AddText("123");
|
|
|
|
Assert.AreEqual(true, cell.HasRichText);
|
|
|
|
cell.Value = 123;
|
|
|
|
Assert.AreEqual(false, cell.HasRichText);
|
|
|
|
cell.RichText.AddText("123");
|
|
|
|
Assert.AreEqual(true, cell.HasRichText);
|
|
|
|
cell.SetValue("123");
|
|
|
|
Assert.AreEqual(false, cell.HasRichText);
|
|
}
|
|
|
|
/// <summary>
|
|
/// A test for Characters
|
|
/// </summary>
|
|
[Test]
|
|
public void Substring_All_From_OneString()
|
|
{
|
|
IXLWorksheet ws = new XLWorkbook().Worksheets.Add("Sheet1");
|
|
IXLRichText richString = ws.Cell(1, 1).RichText;
|
|
|
|
richString.AddText("Hello");
|
|
|
|
IXLFormattedText<IXLRichText> actual = richString.Substring(0);
|
|
|
|
Assert.AreEqual(richString.First(), actual.First());
|
|
|
|
Assert.AreEqual(1, actual.Count);
|
|
|
|
actual.First().SetBold();
|
|
|
|
Assert.AreEqual(true, ws.Cell(1, 1).RichText.First().Bold);
|
|
}
|
|
|
|
[Test]
|
|
public void Substring_All_From_ThreeStrings()
|
|
{
|
|
IXLWorksheet ws = new XLWorkbook().Worksheets.Add("Sheet1");
|
|
IXLRichText richString = ws.Cell(1, 1).RichText;
|
|
|
|
richString.AddText("Good Morning");
|
|
richString.AddText(" my ");
|
|
richString.AddText("neighbors!");
|
|
|
|
IXLFormattedText<IXLRichText> actual = richString.Substring(0);
|
|
|
|
Assert.AreEqual(richString.ElementAt(0), actual.ElementAt(0));
|
|
Assert.AreEqual(richString.ElementAt(1), actual.ElementAt(1));
|
|
Assert.AreEqual(richString.ElementAt(2), actual.ElementAt(2));
|
|
|
|
Assert.AreEqual(3, actual.Count);
|
|
Assert.AreEqual(3, richString.Count);
|
|
|
|
actual.First().SetBold();
|
|
|
|
Assert.AreEqual(true, ws.Cell(1, 1).RichText.First().Bold);
|
|
Assert.AreEqual(false, ws.Cell(1, 1).RichText.ElementAt(1).Bold);
|
|
Assert.AreEqual(false, ws.Cell(1, 1).RichText.Last().Bold);
|
|
}
|
|
|
|
[Test]
|
|
public void Substring_From_OneString_End()
|
|
{
|
|
IXLWorksheet ws = new XLWorkbook().Worksheets.Add("Sheet1");
|
|
IXLRichText richString = ws.Cell(1, 1).RichText;
|
|
|
|
richString.AddText("Hello");
|
|
|
|
IXLFormattedText<IXLRichText> actual = richString.Substring(2);
|
|
|
|
Assert.AreEqual(1, actual.Count); // substring was in one piece
|
|
|
|
Assert.AreEqual(2, richString.Count); // The text was split because of the substring
|
|
|
|
Assert.AreEqual("llo", actual.First().Text);
|
|
|
|
Assert.AreEqual("He", richString.First().Text);
|
|
Assert.AreEqual("llo", richString.Last().Text);
|
|
|
|
actual.First().SetBold();
|
|
|
|
Assert.AreEqual(false, ws.Cell(1, 1).RichText.First().Bold);
|
|
Assert.AreEqual(true, ws.Cell(1, 1).RichText.Last().Bold);
|
|
|
|
richString.Last().SetItalic();
|
|
|
|
Assert.AreEqual(false, ws.Cell(1, 1).RichText.First().Italic);
|
|
Assert.AreEqual(true, ws.Cell(1, 1).RichText.Last().Italic);
|
|
|
|
Assert.AreEqual(true, actual.First().Italic);
|
|
|
|
richString.SetFontSize(20);
|
|
|
|
Assert.AreEqual(20, ws.Cell(1, 1).RichText.First().FontSize);
|
|
Assert.AreEqual(20, ws.Cell(1, 1).RichText.Last().FontSize);
|
|
|
|
Assert.AreEqual(20, actual.First().FontSize);
|
|
}
|
|
|
|
[Test]
|
|
public void Substring_From_OneString_Middle()
|
|
{
|
|
IXLWorksheet ws = new XLWorkbook().Worksheets.Add("Sheet1");
|
|
IXLRichText richString = ws.Cell(1, 1).RichText;
|
|
|
|
richString.AddText("Hello");
|
|
|
|
IXLFormattedText<IXLRichText> actual = richString.Substring(2, 2);
|
|
|
|
Assert.AreEqual(1, actual.Count); // substring was in one piece
|
|
|
|
Assert.AreEqual(3, richString.Count); // The text was split because of the substring
|
|
|
|
Assert.AreEqual("ll", actual.First().Text);
|
|
|
|
Assert.AreEqual("He", richString.First().Text);
|
|
Assert.AreEqual("ll", richString.ElementAt(1).Text);
|
|
Assert.AreEqual("o", richString.Last().Text);
|
|
|
|
actual.First().SetBold();
|
|
|
|
Assert.AreEqual(false, ws.Cell(1, 1).RichText.First().Bold);
|
|
Assert.AreEqual(true, ws.Cell(1, 1).RichText.ElementAt(1).Bold);
|
|
Assert.AreEqual(false, ws.Cell(1, 1).RichText.Last().Bold);
|
|
|
|
richString.Last().SetItalic();
|
|
|
|
Assert.AreEqual(false, ws.Cell(1, 1).RichText.First().Italic);
|
|
Assert.AreEqual(false, ws.Cell(1, 1).RichText.ElementAt(1).Italic);
|
|
Assert.AreEqual(true, ws.Cell(1, 1).RichText.Last().Italic);
|
|
|
|
Assert.AreEqual(false, actual.First().Italic);
|
|
|
|
richString.SetFontSize(20);
|
|
|
|
Assert.AreEqual(20, ws.Cell(1, 1).RichText.First().FontSize);
|
|
Assert.AreEqual(20, ws.Cell(1, 1).RichText.ElementAt(1).FontSize);
|
|
Assert.AreEqual(20, ws.Cell(1, 1).RichText.Last().FontSize);
|
|
|
|
Assert.AreEqual(20, actual.First().FontSize);
|
|
}
|
|
|
|
[Test]
|
|
public void Substring_From_OneString_Start()
|
|
{
|
|
IXLWorksheet ws = new XLWorkbook().Worksheets.Add("Sheet1");
|
|
IXLRichText richString = ws.Cell(1, 1).RichText;
|
|
|
|
richString.AddText("Hello");
|
|
|
|
IXLFormattedText<IXLRichText> actual = richString.Substring(0, 2);
|
|
|
|
Assert.AreEqual(1, actual.Count); // substring was in one piece
|
|
|
|
Assert.AreEqual(2, richString.Count); // The text was split because of the substring
|
|
|
|
Assert.AreEqual("He", actual.First().Text);
|
|
|
|
Assert.AreEqual("He", richString.First().Text);
|
|
Assert.AreEqual("llo", richString.Last().Text);
|
|
|
|
actual.First().SetBold();
|
|
|
|
Assert.AreEqual(true, ws.Cell(1, 1).RichText.First().Bold);
|
|
Assert.AreEqual(false, ws.Cell(1, 1).RichText.Last().Bold);
|
|
|
|
richString.Last().SetItalic();
|
|
|
|
Assert.AreEqual(false, ws.Cell(1, 1).RichText.First().Italic);
|
|
Assert.AreEqual(true, ws.Cell(1, 1).RichText.Last().Italic);
|
|
|
|
Assert.AreEqual(false, actual.First().Italic);
|
|
|
|
richString.SetFontSize(20);
|
|
|
|
Assert.AreEqual(20, ws.Cell(1, 1).RichText.First().FontSize);
|
|
Assert.AreEqual(20, ws.Cell(1, 1).RichText.Last().FontSize);
|
|
|
|
Assert.AreEqual(20, actual.First().FontSize);
|
|
}
|
|
|
|
[Test]
|
|
public void Substring_From_ThreeStrings_End1()
|
|
{
|
|
IXLWorksheet ws = new XLWorkbook().Worksheets.Add("Sheet1");
|
|
IXLRichText richString = ws.Cell(1, 1).RichText;
|
|
|
|
richString.AddText("Good Morning");
|
|
richString.AddText(" my ");
|
|
richString.AddText("neighbors!");
|
|
|
|
IXLFormattedText<IXLRichText> actual = richString.Substring(21);
|
|
|
|
Assert.AreEqual(1, actual.Count); // substring was in one piece
|
|
|
|
Assert.AreEqual(4, richString.Count); // The text was split because of the substring
|
|
|
|
Assert.AreEqual("bors!", actual.First().Text);
|
|
|
|
Assert.AreEqual("Good Morning", richString.ElementAt(0).Text);
|
|
Assert.AreEqual(" my ", richString.ElementAt(1).Text);
|
|
Assert.AreEqual("neigh", richString.ElementAt(2).Text);
|
|
Assert.AreEqual("bors!", richString.ElementAt(3).Text);
|
|
|
|
actual.First().SetBold();
|
|
|
|
Assert.AreEqual(false, ws.Cell(1, 1).RichText.ElementAt(0).Bold);
|
|
Assert.AreEqual(false, ws.Cell(1, 1).RichText.ElementAt(1).Bold);
|
|
Assert.AreEqual(false, ws.Cell(1, 1).RichText.ElementAt(2).Bold);
|
|
Assert.AreEqual(true, ws.Cell(1, 1).RichText.ElementAt(3).Bold);
|
|
|
|
richString.Last().SetItalic();
|
|
|
|
Assert.AreEqual(false, ws.Cell(1, 1).RichText.ElementAt(0).Italic);
|
|
Assert.AreEqual(false, ws.Cell(1, 1).RichText.ElementAt(1).Italic);
|
|
Assert.AreEqual(false, ws.Cell(1, 1).RichText.ElementAt(2).Italic);
|
|
Assert.AreEqual(true, ws.Cell(1, 1).RichText.ElementAt(3).Italic);
|
|
|
|
Assert.AreEqual(true, actual.First().Italic);
|
|
|
|
richString.SetFontSize(20);
|
|
|
|
Assert.AreEqual(20, ws.Cell(1, 1).RichText.ElementAt(0).FontSize);
|
|
Assert.AreEqual(20, ws.Cell(1, 1).RichText.ElementAt(1).FontSize);
|
|
Assert.AreEqual(20, ws.Cell(1, 1).RichText.ElementAt(2).FontSize);
|
|
Assert.AreEqual(20, ws.Cell(1, 1).RichText.ElementAt(3).FontSize);
|
|
|
|
Assert.AreEqual(20, actual.First().FontSize);
|
|
}
|
|
|
|
[Test]
|
|
public void Substring_From_ThreeStrings_End2()
|
|
{
|
|
IXLWorksheet ws = new XLWorkbook().Worksheets.Add("Sheet1");
|
|
IXLRichText richString = ws.Cell(1, 1).RichText;
|
|
|
|
richString.AddText("Good Morning");
|
|
richString.AddText(" my ");
|
|
richString.AddText("neighbors!");
|
|
|
|
IXLFormattedText<IXLRichText> actual = richString.Substring(13);
|
|
|
|
Assert.AreEqual(2, actual.Count);
|
|
|
|
Assert.AreEqual(4, richString.Count); // The text was split because of the substring
|
|
|
|
Assert.AreEqual("my ", actual.ElementAt(0).Text);
|
|
Assert.AreEqual("neighbors!", actual.ElementAt(1).Text);
|
|
|
|
Assert.AreEqual("Good Morning", richString.ElementAt(0).Text);
|
|
Assert.AreEqual(" ", richString.ElementAt(1).Text);
|
|
Assert.AreEqual("my ", richString.ElementAt(2).Text);
|
|
Assert.AreEqual("neighbors!", richString.ElementAt(3).Text);
|
|
|
|
actual.ElementAt(1).SetBold();
|
|
|
|
Assert.AreEqual(false, ws.Cell(1, 1).RichText.ElementAt(0).Bold);
|
|
Assert.AreEqual(false, ws.Cell(1, 1).RichText.ElementAt(1).Bold);
|
|
Assert.AreEqual(false, ws.Cell(1, 1).RichText.ElementAt(2).Bold);
|
|
Assert.AreEqual(true, ws.Cell(1, 1).RichText.ElementAt(3).Bold);
|
|
|
|
richString.Last().SetItalic();
|
|
|
|
Assert.AreEqual(false, ws.Cell(1, 1).RichText.ElementAt(0).Italic);
|
|
Assert.AreEqual(false, ws.Cell(1, 1).RichText.ElementAt(1).Italic);
|
|
Assert.AreEqual(false, ws.Cell(1, 1).RichText.ElementAt(2).Italic);
|
|
Assert.AreEqual(true, ws.Cell(1, 1).RichText.ElementAt(3).Italic);
|
|
|
|
Assert.AreEqual(false, actual.ElementAt(0).Italic);
|
|
Assert.AreEqual(true, actual.ElementAt(1).Italic);
|
|
|
|
richString.SetFontSize(20);
|
|
|
|
Assert.AreEqual(20, ws.Cell(1, 1).RichText.ElementAt(0).FontSize);
|
|
Assert.AreEqual(20, ws.Cell(1, 1).RichText.ElementAt(1).FontSize);
|
|
Assert.AreEqual(20, ws.Cell(1, 1).RichText.ElementAt(2).FontSize);
|
|
Assert.AreEqual(20, ws.Cell(1, 1).RichText.ElementAt(3).FontSize);
|
|
|
|
Assert.AreEqual(20, actual.ElementAt(0).FontSize);
|
|
Assert.AreEqual(20, actual.ElementAt(1).FontSize);
|
|
}
|
|
|
|
[Test]
|
|
public void Substring_From_ThreeStrings_Mid1()
|
|
{
|
|
IXLWorksheet ws = new XLWorkbook().Worksheets.Add("Sheet1");
|
|
IXLRichText richString = ws.Cell(1, 1).RichText;
|
|
|
|
richString.AddText("Good Morning");
|
|
richString.AddText(" my ");
|
|
richString.AddText("neighbors!");
|
|
|
|
IXLFormattedText<IXLRichText> actual = richString.Substring(5, 10);
|
|
|
|
Assert.AreEqual(2, actual.Count);
|
|
|
|
Assert.AreEqual(5, richString.Count); // The text was split because of the substring
|
|
|
|
Assert.AreEqual("Morning", actual.ElementAt(0).Text);
|
|
Assert.AreEqual(" my", actual.ElementAt(1).Text);
|
|
|
|
Assert.AreEqual("Good ", richString.ElementAt(0).Text);
|
|
Assert.AreEqual("Morning", richString.ElementAt(1).Text);
|
|
Assert.AreEqual(" my", richString.ElementAt(2).Text);
|
|
Assert.AreEqual(" ", richString.ElementAt(3).Text);
|
|
Assert.AreEqual("neighbors!", richString.ElementAt(4).Text);
|
|
}
|
|
|
|
[Test]
|
|
public void Substring_From_ThreeStrings_Mid2()
|
|
{
|
|
IXLWorksheet ws = new XLWorkbook().Worksheets.Add("Sheet1");
|
|
IXLRichText richString = ws.Cell(1, 1).RichText;
|
|
|
|
richString.AddText("Good Morning");
|
|
richString.AddText(" my ");
|
|
richString.AddText("neighbors!");
|
|
|
|
IXLFormattedText<IXLRichText> actual = richString.Substring(5, 15);
|
|
|
|
Assert.AreEqual(3, actual.Count);
|
|
|
|
Assert.AreEqual(5, richString.Count); // The text was split because of the substring
|
|
|
|
Assert.AreEqual("Morning", actual.ElementAt(0).Text);
|
|
Assert.AreEqual(" my ", actual.ElementAt(1).Text);
|
|
Assert.AreEqual("neig", actual.ElementAt(2).Text);
|
|
|
|
Assert.AreEqual("Good ", richString.ElementAt(0).Text);
|
|
Assert.AreEqual("Morning", richString.ElementAt(1).Text);
|
|
Assert.AreEqual(" my ", richString.ElementAt(2).Text);
|
|
Assert.AreEqual("neig", richString.ElementAt(3).Text);
|
|
Assert.AreEqual("hbors!", richString.ElementAt(4).Text);
|
|
}
|
|
|
|
[Test]
|
|
public void Substring_From_ThreeStrings_Start1()
|
|
{
|
|
IXLWorksheet ws = new XLWorkbook().Worksheets.Add("Sheet1");
|
|
IXLRichText richString = ws.Cell(1, 1).RichText;
|
|
|
|
richString.AddText("Good Morning");
|
|
richString.AddText(" my ");
|
|
richString.AddText("neighbors!");
|
|
|
|
IXLFormattedText<IXLRichText> actual = richString.Substring(0, 4);
|
|
|
|
Assert.AreEqual(1, actual.Count); // substring was in one piece
|
|
|
|
Assert.AreEqual(4, richString.Count); // The text was split because of the substring
|
|
|
|
Assert.AreEqual("Good", actual.First().Text);
|
|
|
|
Assert.AreEqual("Good", richString.ElementAt(0).Text);
|
|
Assert.AreEqual(" Morning", richString.ElementAt(1).Text);
|
|
Assert.AreEqual(" my ", richString.ElementAt(2).Text);
|
|
Assert.AreEqual("neighbors!", richString.ElementAt(3).Text);
|
|
|
|
actual.First().SetBold();
|
|
|
|
Assert.AreEqual(true, ws.Cell(1, 1).RichText.ElementAt(0).Bold);
|
|
Assert.AreEqual(false, ws.Cell(1, 1).RichText.ElementAt(1).Bold);
|
|
Assert.AreEqual(false, ws.Cell(1, 1).RichText.ElementAt(2).Bold);
|
|
Assert.AreEqual(false, ws.Cell(1, 1).RichText.ElementAt(3).Bold);
|
|
|
|
richString.First().SetItalic();
|
|
|
|
Assert.AreEqual(true, ws.Cell(1, 1).RichText.ElementAt(0).Italic);
|
|
Assert.AreEqual(false, ws.Cell(1, 1).RichText.ElementAt(1).Italic);
|
|
Assert.AreEqual(false, ws.Cell(1, 1).RichText.ElementAt(2).Italic);
|
|
Assert.AreEqual(false, ws.Cell(1, 1).RichText.ElementAt(3).Italic);
|
|
|
|
Assert.AreEqual(true, actual.First().Italic);
|
|
|
|
richString.SetFontSize(20);
|
|
|
|
Assert.AreEqual(20, ws.Cell(1, 1).RichText.ElementAt(0).FontSize);
|
|
Assert.AreEqual(20, ws.Cell(1, 1).RichText.ElementAt(1).FontSize);
|
|
Assert.AreEqual(20, ws.Cell(1, 1).RichText.ElementAt(2).FontSize);
|
|
Assert.AreEqual(20, ws.Cell(1, 1).RichText.ElementAt(3).FontSize);
|
|
|
|
Assert.AreEqual(20, actual.First().FontSize);
|
|
}
|
|
|
|
[Test]
|
|
public void Substring_From_ThreeStrings_Start2()
|
|
{
|
|
IXLWorksheet ws = new XLWorkbook().Worksheets.Add("Sheet1");
|
|
IXLRichText richString = ws.Cell(1, 1).RichText;
|
|
|
|
richString.AddText("Good Morning");
|
|
richString.AddText(" my ");
|
|
richString.AddText("neighbors!");
|
|
|
|
IXLFormattedText<IXLRichText> actual = richString.Substring(0, 15);
|
|
|
|
Assert.AreEqual(2, actual.Count);
|
|
|
|
Assert.AreEqual(4, richString.Count); // The text was split because of the substring
|
|
|
|
Assert.AreEqual("Good Morning", actual.ElementAt(0).Text);
|
|
Assert.AreEqual(" my", actual.ElementAt(1).Text);
|
|
|
|
Assert.AreEqual("Good Morning", richString.ElementAt(0).Text);
|
|
Assert.AreEqual(" my", richString.ElementAt(1).Text);
|
|
Assert.AreEqual(" ", richString.ElementAt(2).Text);
|
|
Assert.AreEqual("neighbors!", richString.ElementAt(3).Text);
|
|
|
|
actual.ElementAt(1).SetBold();
|
|
|
|
Assert.AreEqual(false, ws.Cell(1, 1).RichText.ElementAt(0).Bold);
|
|
Assert.AreEqual(true, ws.Cell(1, 1).RichText.ElementAt(1).Bold);
|
|
Assert.AreEqual(false, ws.Cell(1, 1).RichText.ElementAt(2).Bold);
|
|
Assert.AreEqual(false, ws.Cell(1, 1).RichText.ElementAt(3).Bold);
|
|
|
|
richString.First().SetItalic();
|
|
|
|
Assert.AreEqual(true, ws.Cell(1, 1).RichText.ElementAt(0).Italic);
|
|
Assert.AreEqual(false, ws.Cell(1, 1).RichText.ElementAt(1).Italic);
|
|
Assert.AreEqual(false, ws.Cell(1, 1).RichText.ElementAt(2).Italic);
|
|
Assert.AreEqual(false, ws.Cell(1, 1).RichText.ElementAt(3).Italic);
|
|
|
|
Assert.AreEqual(true, actual.ElementAt(0).Italic);
|
|
Assert.AreEqual(false, actual.ElementAt(1).Italic);
|
|
|
|
richString.SetFontSize(20);
|
|
|
|
Assert.AreEqual(20, ws.Cell(1, 1).RichText.ElementAt(0).FontSize);
|
|
Assert.AreEqual(20, ws.Cell(1, 1).RichText.ElementAt(1).FontSize);
|
|
Assert.AreEqual(20, ws.Cell(1, 1).RichText.ElementAt(2).FontSize);
|
|
Assert.AreEqual(20, ws.Cell(1, 1).RichText.ElementAt(3).FontSize);
|
|
|
|
Assert.AreEqual(20, actual.ElementAt(0).FontSize);
|
|
Assert.AreEqual(20, actual.ElementAt(1).FontSize);
|
|
}
|
|
|
|
[Test]
|
|
public void Substring_IndexOutsideRange1()
|
|
{
|
|
IXLWorksheet ws = new XLWorkbook().Worksheets.Add("Sheet1");
|
|
IXLRichText richString = ws.Cell(1, 1).RichText;
|
|
|
|
richString.AddText("Hello");
|
|
|
|
Assert.That(() => richString.Substring(50), Throws.TypeOf<IndexOutOfRangeException>());
|
|
}
|
|
|
|
[Test]
|
|
public void Substring_IndexOutsideRange2()
|
|
{
|
|
IXLWorksheet ws = new XLWorkbook().Worksheets.Add("Sheet1");
|
|
IXLRichText richString = ws.Cell(1, 1).RichText;
|
|
|
|
richString.AddText("Hello");
|
|
richString.AddText("World");
|
|
|
|
Assert.That(() => richString.Substring(50), Throws.TypeOf<IndexOutOfRangeException>());
|
|
}
|
|
|
|
[Test]
|
|
public void Substring_IndexOutsideRange3()
|
|
{
|
|
IXLWorksheet ws = new XLWorkbook().Worksheets.Add("Sheet1");
|
|
IXLRichText richString = ws.Cell(1, 1).RichText;
|
|
|
|
richString.AddText("Hello");
|
|
|
|
Assert.That(() => richString.Substring(1, 10), Throws.TypeOf<IndexOutOfRangeException>());
|
|
}
|
|
|
|
[Test]
|
|
public void Substring_IndexOutsideRange4()
|
|
{
|
|
IXLWorksheet ws = new XLWorkbook().Worksheets.Add("Sheet1");
|
|
IXLRichText richString = ws.Cell(1, 1).RichText;
|
|
|
|
richString.AddText("Hello");
|
|
richString.AddText("World");
|
|
|
|
Assert.That(() => richString.Substring(5, 20), Throws.TypeOf<IndexOutOfRangeException>());
|
|
}
|
|
|
|
/// <summary>
|
|
/// A test for ToString
|
|
/// </summary>
|
|
[Test]
|
|
public void ToStringTest()
|
|
{
|
|
IXLWorksheet ws = new XLWorkbook().Worksheets.Add("Sheet1");
|
|
IXLRichText richString = ws.Cell(1, 1).RichText;
|
|
|
|
richString.AddText("Hello");
|
|
richString.AddText(" ");
|
|
richString.AddText("World");
|
|
string expected = "Hello World";
|
|
string actual = richString.ToString();
|
|
Assert.AreEqual(expected, actual);
|
|
|
|
richString.AddText("!");
|
|
expected = "Hello World!";
|
|
actual = richString.ToString();
|
|
Assert.AreEqual(expected, actual);
|
|
|
|
richString.ClearText();
|
|
expected = String.Empty;
|
|
actual = richString.ToString();
|
|
Assert.AreEqual(expected, actual);
|
|
}
|
|
|
|
[Test(Description = "See #1361")]
|
|
public void CanClearInlinedRichText()
|
|
{
|
|
using (var outputStream = new MemoryStream())
|
|
{
|
|
using (var inputStream = TestHelper.GetStreamFromResource(TestHelper.GetResourcePath(@"Other\InlinedRichText\ChangeRichText\inputfile.xlsx")))
|
|
using (var workbook = new XLWorkbook(inputStream))
|
|
{
|
|
workbook.Worksheets.First().Cell("A1").Value = "";
|
|
workbook.SaveAs(outputStream);
|
|
}
|
|
|
|
using (var wb = new XLWorkbook(outputStream))
|
|
{
|
|
Assert.AreEqual("", wb.Worksheets.First().Cell("A1").Value);
|
|
}
|
|
}
|
|
}
|
|
|
|
[Test]
|
|
public void CanChangeInlinedRichText()
|
|
{
|
|
void testRichText(IXLRichText richText)
|
|
{
|
|
Assert.IsNotNull(richText);
|
|
Assert.IsTrue(richText.Any());
|
|
Assert.AreEqual("3", richText.ElementAt(2).Text);
|
|
Assert.AreEqual(XLColor.Red, richText.ElementAt(2).FontColor);
|
|
}
|
|
|
|
using (var outputStream = new MemoryStream())
|
|
{
|
|
using (var inputStream = TestHelper.GetStreamFromResource(TestHelper.GetResourcePath(@"Other\InlinedRichText\ChangeRichText\inputfile.xlsx")))
|
|
using (var workbook = new XLWorkbook(inputStream))
|
|
{
|
|
var richText = workbook.Worksheets.First().Cell("A1").RichText;
|
|
testRichText(richText);
|
|
richText.AddText(" - changed");
|
|
workbook.SaveAs(outputStream);
|
|
}
|
|
|
|
using (var wb = new XLWorkbook(outputStream))
|
|
{
|
|
var cell = wb.Worksheets.First().Cell("A1");
|
|
Assert.IsFalse(cell.ShareString);
|
|
Assert.IsTrue(cell.HasRichText);
|
|
var rt = cell.RichText;
|
|
Assert.AreEqual("Year (range: 3 yrs) - changed", rt.ToString());
|
|
testRichText(rt);
|
|
}
|
|
}
|
|
}
|
|
|
|
[Test]
|
|
public void ClearInlineRichTextWhenRelevant()
|
|
{
|
|
using (var ms = new MemoryStream())
|
|
{
|
|
TestHelper.CreateAndCompare(() =>
|
|
{
|
|
using (var wb = new XLWorkbook())
|
|
{
|
|
var ws = wb.AddWorksheet();
|
|
var cell = ws.FirstCell();
|
|
|
|
cell.RichText.AddText("Bold").SetBold().AddText(" and red").SetBold().SetFontColor(XLColor.Red);
|
|
cell.ShareString = false;
|
|
|
|
//wb.SaveAs(ms);
|
|
wb.SaveAs(ms);
|
|
}
|
|
ms.Seek(0, SeekOrigin.Begin);
|
|
|
|
var wb2 = new XLWorkbook(ms);
|
|
{
|
|
var ws = wb2.Worksheets.First();
|
|
var cell = ws.FirstCell();
|
|
|
|
cell.FormulaA1 = "=1 + 2";
|
|
wb2.SaveAs(ms);
|
|
}
|
|
|
|
ms.Seek(0, SeekOrigin.Begin);
|
|
|
|
return wb2;
|
|
}, @"Other\InlinedRichText\ChangeRichTextToFormula\output.xlsx");
|
|
}
|
|
}
|
|
}
|
|
}
|