blob: 489ae1962aadae8e86b31179d81857253b1efe25 [file] [log] [blame]
/***************************************************************************
Copyright (c) Microsoft Corporation 2012-2015.
This code is licensed using the Microsoft Public License (Ms-PL). The text of the license can be found here:
http://www.microsoft.com/resources/sharedsource/licensingbasics/publiclicense.mspx
Published at http://OpenXmlDeveloper.org
Resource Center and Documentation: http://openxmldeveloper.org/wiki/w/wiki/powertools-for-open-xml.aspx
Developer: Eric White
Blog: http://www.ericwhite.com
Twitter: @EricWhiteDev
Email: eric@ericwhite.com
***************************************************************************/
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
using DocumentFormat.OpenXml.Packaging;
using OpenXmlPowerTools;
using Xunit;
#if !ELIDE_XUNIT_TESTS
namespace OxPt
{
public class CfTests
{
[Theory]
[InlineData("General", "0", "0", null)]
[InlineData("0", "1.1000000000000001", "1", null)]
[InlineData("0", "10.1", "10", null)]
[InlineData("0", "100.1", "100", null)]
[InlineData("0", "100000000.09999999", "100000000", null)]
[InlineData("0.00", "1.1000000000000001", "1.10", null)]
[InlineData("0.00", "10.1", "10.10", null)]
[InlineData("0.00", "100000000.09999999", "100000000.10", null)]
[InlineData("#,##0", "1.1000000000000001", "1", null)]
[InlineData("#,##0", "10.1", "10", null)]
[InlineData("#,##0", "100000000.09999999", "100,000,000", null)]
[InlineData("#,##0", "1000000000.1", "1,000,000,000", null)]
[InlineData("#,##0.00", "1.1000000000000001", "1.10", null)]
[InlineData("#,##0.00", "10.1", "10.10", null)]
[InlineData("#,##0.00", "1000.1", "1,000.10", null)]
[InlineData("#,##0.00", "100000000.09999999", "100,000,000.10", null)]
[InlineData("0%", "0.01", "1%", null)]
[InlineData("0%", "0.25", "25%", null)]
[InlineData("0%", "1", "100%", null)]
[InlineData("0%", "2", "200%", null)]
[InlineData("0%", "0.1", "10%", null)]
[InlineData("0.00%", "0.01", "1.00%", null)]
[InlineData("0.00%", "0.25", "25.00%", null)]
[InlineData("0.00%", "1", "100.00%", null)]
[InlineData("0.00%", "2", "200.00%", null)]
[InlineData("0.00%", "0.1", "10.00%", null)]
[InlineData("0.00%", "0.1025", "10.25%", null)]
[InlineData("0.00E+00", "0.01", "1.00E-02", null)]
[InlineData("0.00E+00", "0.25", "2.50E-01", null)]
[InlineData("0.00E+00", "1", "1.00E+00", null)]
[InlineData("0.00E+00", "100", "1.00E+02", null)]
[InlineData("0.00E+00", "1000", "1.00E+03", null)]
[InlineData("0.00E+00", "10000.1", "1.00E+04", null)]
[InlineData("0.00E+00", "100000.5", "1.00E+05", null)]
[InlineData("0.00E+00", "0.1", "1.00E-01", null)]
[InlineData("# ?/?", "0.125", "0.13", null)]
[InlineData("# ?/?", "0.25", "0.25", null)]
[InlineData("# ??/??", "0.125", "0.13", null)]
[InlineData("# ??/??", "0.25", "0.25", null)]
[InlineData("mm-dd-yy", "42344", "12-06-15", null)]
[InlineData("d-mmm-yy", "42344", "6-Dec-15", null)]
[InlineData("d-mmm", "42344", "6-Dec", null)]
[InlineData("mmm-yy", "42344", "Dec-15", null)]
[InlineData("h:mm AM/PM", "42344.295138888891", "7:05 AM", null)]
[InlineData("h:mm:ss AM/PM", "42344.295405092591", "7:05:23 AM", null)]
[InlineData("h:mm", "42344.295405092591", "7:05", null)]
[InlineData("h:mm:ss", "42344.295405092591", "7:05:23", null)]
[InlineData("m/d/yy h:mm", "42344.295405092591", "12/6/15 7:05", null)]
[InlineData("#,##0 ;(#,##0)", "100", "100", null)]
[InlineData("#,##0 ;(#,##0)", "-100", "(100)", null)]
[InlineData("#,##0 ;[Red](#,##0)", "100", "100", null)]
[InlineData("#,##0 ;[Red](#,##0)", "-100", "(100)", "Red")]
[InlineData("#,##0.00;(#,##0.00)", "100.00", "100.00", null)]
[InlineData("#,##0.00;(#,##0.00)", "-100.00", "(100.00)", null)]
[InlineData("#,##0.00;[Red](#,##0.00)", "100.00", "100.00", null)]
[InlineData("#,##0.00;[Red](#,##0.00)", "-100.00", "(100.00)", "Red")]
[InlineData("mm:ss", "42344.295405092591", "05:23", null)]
[InlineData("[h]:mm:ss", "42344.295405092591", "1016263:05:23", null)]
[InlineData("mm:ss.0", "42344.295445092591", "05:26:456", null)]
[InlineData("##0.0E+0", "100.0", "100.0E+0", null)]
[InlineData("##0.0E+0", "543.210", "543.2E+0", null)]
public void CF001(string formatCode, string value, string expected, string expectedColor)
{
string color;
string r = SmlCellFormatter.FormatCell(formatCode, value, out color);
Assert.Equal(expected, r);
Assert.Equal(expectedColor, color);
}
[Theory]
[InlineData("SH151-Custom-Cell-Format-Currency.xlsx", "Sheet1", "A1:A1", "$123.45", null)]
[InlineData("SH151-Custom-Cell-Format-Currency.xlsx", "Sheet1", "A2:A2", "-$123.45", null)]
[InlineData("SH151-Custom-Cell-Format-Currency.xlsx", "Sheet1", "A3:A3", "$0.00", null)]
[InlineData("SH151-Custom-Cell-Format-Currency.xlsx", "Sheet1", "B1:B1", "$ 123.45", null)]
[InlineData("SH151-Custom-Cell-Format-Currency.xlsx", "Sheet1", "B2:B2", "$ (123.45)", null)]
[InlineData("SH151-Custom-Cell-Format-Currency.xlsx", "Sheet1", "B3:B3", "$ -", null)]
[InlineData("SH151-Custom-Cell-Format-Currency.xlsx", "Sheet1", "C1:C1", "£ 123.45", null)]
[InlineData("SH151-Custom-Cell-Format-Currency.xlsx", "Sheet1", "C2:C2", "-£ 123.45", null)]
[InlineData("SH151-Custom-Cell-Format-Currency.xlsx", "Sheet1", "C3:C3", "£ -", null)]
[InlineData("SH151-Custom-Cell-Format-Currency.xlsx", "Sheet1", "D1:D1", "€ 123.45", null)]
[InlineData("SH151-Custom-Cell-Format-Currency.xlsx", "Sheet1", "D2:D2", "€ (123.45)", null)]
[InlineData("SH151-Custom-Cell-Format-Currency.xlsx", "Sheet1", "D3:D3", "€ -", null)]
[InlineData("SH151-Custom-Cell-Format-Currency.xlsx", "Sheet1", "E1:E1", "¥ 123.45", null)]
[InlineData("SH151-Custom-Cell-Format-Currency.xlsx", "Sheet1", "E2:E2", "¥ -123.45", null)]
[InlineData("SH151-Custom-Cell-Format-Currency.xlsx", "Sheet1", "E3:E3", "¥ -", null)]
[InlineData("SH151-Custom-Cell-Format-Currency.xlsx", "Sheet1", "F1:F1", "CHF 123.45", null)]
[InlineData("SH151-Custom-Cell-Format-Currency.xlsx", "Sheet1", "F2:F2", "CHF -123.45", null)]
[InlineData("SH151-Custom-Cell-Format-Currency.xlsx", "Sheet1", "F3:F3", "CHF -", null)]
[InlineData("SH151-Custom-Cell-Format-Currency.xlsx", "Sheet1", "G1:G1", "₩ 123.45", null)]
[InlineData("SH151-Custom-Cell-Format-Currency.xlsx", "Sheet1", "G2:G2", "-₩ 123.45", null)]
[InlineData("SH151-Custom-Cell-Format-Currency.xlsx", "Sheet1", "G3:G3", "₩ -", null)]
[InlineData("SH151-Custom-Cell-Format-Currency.xlsx", "Sheet1", "H1:H1", "£ 123.45", null)]
[InlineData("SH151-Custom-Cell-Format-Currency.xlsx", "Sheet1", "H2:H2", "-£ 123.45", "Red")]
[InlineData("SH151-Custom-Cell-Format-Currency.xlsx", "Sheet1", "H3:H3", "£ -", null)]
[InlineData("SH152-Custom-Cell-Format.xlsx", "Sheet1", "A1:A1", "1,234,567.0000", null)]
[InlineData("SH152-Custom-Cell-Format.xlsx", "Sheet1", "B1:B1", "This is the value: abc", null)]
[InlineData("SH201-Cell-C1-Without-R-Attr.xlsx", "Sheet1", "C1:C1", "3", null)]
[InlineData("SH202-Cell-C1-D1-Without-R-Attr.xlsx", "Sheet1", "C1:C1", "3", null)]
[InlineData("SH203-Cell-C1-D1-E1-Without-R-Attr.xlsx", "Sheet1", "C1:C1", "3", null)]
[InlineData("SH204-Cell-A1-B1-C1-Without-R-Attr.xlsx", "Sheet1", "A1:A1", "1", null)]
public void CF002(string name, string sheetName, string range, string expected, string expectedColor)
{
FileInfo sourceXlsx = new FileInfo(Path.Combine(TestUtil.SourceDir.FullName, name));
var sourceCopiedToDestXlsx = new FileInfo(Path.Combine(TestUtil.TempDir.FullName, sourceXlsx.Name.Replace(".xlsx", "-1-Source.xlsx")));
if (!sourceCopiedToDestXlsx.Exists)
File.Copy(sourceXlsx.FullName, sourceCopiedToDestXlsx.FullName);
var dataTemplateFileNameSuffix = string.Format("-2-Generated-XmlData-{0}.xml", range.Replace(":", ""));
var dataXmlFi = new FileInfo(Path.Combine(TestUtil.TempDir.FullName, sourceXlsx.Name.Replace(".xlsx", dataTemplateFileNameSuffix)));
using (SpreadsheetDocument sDoc = SpreadsheetDocument.Open(sourceXlsx.FullName, true))
{
var rangeXml = SmlDataRetriever.RetrieveRange(sDoc, sheetName, range);
string displayValue = (string)rangeXml.Descendants("DisplayValue").FirstOrDefault();
string displayColor = (string)rangeXml.Descendants("DisplayColor").FirstOrDefault();
Assert.Equal(expected, displayValue);
Assert.Equal(expectedColor, displayColor);
}
}
}
}
#endif