summaryrefslogtreecommitdiffstats
path: root/sc/qa
diff options
context:
space:
mode:
authorKohei Yoshida <kyoshida@novell.com>2011-02-17 01:00:04 -0500
committerKohei Yoshida <kyoshida@novell.com>2011-02-17 01:00:04 -0500
commite9b4a11be7d01fb10ce58ed3a9bbe91b996045d8 (patch)
treebe6d4984dd7ea4c35b8ae3cbac7892bed9fe83b7 /sc/qa
parentCreate an ScDocShell instance, and take the ScDocument instance from it. (diff)
downloadcore-e9b4a11be7d01fb10ce58ed3a9bbe91b996045d8.tar.gz
core-e9b4a11be7d01fb10ce58ed3a9bbe91b996045d8.zip
Added unit test for built-in cell functions.
For now, I only test for function categories and their order in each category. But in the future I might test for argument types as well.
Diffstat (limited to 'sc/qa')
-rw-r--r--sc/qa/unit/ucalc.cxx369
1 files changed, 365 insertions, 4 deletions
diff --git a/sc/qa/unit/ucalc.cxx b/sc/qa/unit/ucalc.cxx
index 3df147723f76..725ea734af81 100644
--- a/sc/qa/unit/ucalc.cxx
+++ b/sc/qa/unit/ucalc.cxx
@@ -63,12 +63,16 @@
#include "stringutil.hxx"
#include "scmatrix.hxx"
#include "drwlayer.hxx"
+
#include "docsh.hxx"
+#include "funcdesc.hxx"
#include "dpshttab.hxx"
#include "dpobject.hxx"
#include "dpsave.hxx"
+#include "formula/IFunctionDescription.hxx"
+
#include <svx/svdograf.hxx>
#include <svx/svdpage.hxx>
@@ -220,6 +224,12 @@ public:
void testDataPilot();
void testSheetCopy();
+ /**
+ * Test built-in cell functions to make sure their categories and order
+ * are correct.
+ */
+ void testFunctionLists();
+
void testGraphicsInGroup();
CPPUNIT_TEST_SUITE(Test);
@@ -231,12 +241,13 @@ public:
CPPUNIT_TEST(testDataPilot);
CPPUNIT_TEST(testSheetCopy);
CPPUNIT_TEST(testGraphicsInGroup);
+ CPPUNIT_TEST(testFunctionLists);
CPPUNIT_TEST_SUITE_END();
private:
uno::Reference< uno::XComponentContext > m_xContext;
ScDocument *m_pDoc;
- ScDocShellRef m_pDocShellRef;
+ ScDocShellRef m_pDocShell;
};
Test::Test()
@@ -259,13 +270,13 @@ Test::Test()
void Test::setUp()
{
- m_pDocShellRef = new ScDocShell;
- m_pDoc = m_pDocShellRef->GetDocument();
+ m_pDocShell = new ScDocShell;
+ m_pDoc = m_pDocShell->GetDocument();
}
void Test::tearDown()
{
- m_pDocShellRef.Clear();
+ m_pDocShell.Clear();
}
Test::~Test()
@@ -740,6 +751,356 @@ void Test::testSheetCopy()
m_pDoc->DeleteTab(0);
}
+void Test::testFunctionLists()
+{
+ const char* aDataBase[] = {
+ "DAVERAGE",
+ "DCOUNT",
+ "DCOUNTA",
+ "DGET",
+ "DMAX",
+ "DMIN",
+ "DPRODUCT",
+ "DSTDEV",
+ "DSTDEVP",
+ "DSUM",
+ "DVAR",
+ "DVARP",
+ 0
+ };
+
+ const char* aDateTime[] = {
+ "DATE",
+ "DATEVALUE",
+ "DAY",
+ "DAYS",
+ "DAYS360",
+ "EASTERSUNDAY",
+ "HOUR",
+ "MINUTE",
+ "MONTH",
+ "NOW",
+ "SECOND",
+ "TIME",
+ "TIMEVALUE",
+ "TODAY",
+ "WEEKDAY",
+ "WEEKNUM",
+ "YEAR",
+ 0
+ };
+
+ const char* aFinancial[] = {
+ "CUMIPMT",
+ "CUMPRINC",
+ "DB",
+ "DDB",
+ "DURATION",
+ "EFFECTIVE",
+ "FV",
+ "IPMT",
+ "IRR",
+ "ISPMT",
+ "MIRR",
+ "NOMINAL",
+ "NPER",
+ "NPV",
+ "PMT",
+ "PPMT",
+ "PV",
+ "RATE",
+ "RRI",
+ "SLN",
+ "SYD",
+ "VDB",
+ 0
+ };
+
+ const char* aInformation[] = {
+ "CELL",
+ "CURRENT",
+ "FORMULA",
+ "INFO",
+ "ISBLANK",
+ "ISERR",
+ "ISERROR",
+ "ISFORMULA",
+ "ISLOGICAL",
+ "ISNA",
+ "ISNONTEXT",
+ "ISNUMBER",
+ "ISREF",
+ "ISTEXT",
+ "N",
+ "NA",
+ "TYPE",
+ 0
+ };
+
+ const char* aLogical[] = {
+ "AND",
+ "FALSE",
+ "IF",
+ "NOT",
+ "OR",
+ "TRUE",
+ 0
+ };
+
+ const char* aMathematical[] = {
+ "ABS",
+ "ACOS",
+ "ACOSH",
+ "ACOT",
+ "ACOTH",
+ "ASIN",
+ "ASINH",
+ "ATAN",
+ "ATAN2",
+ "ATANH",
+ "CEILING",
+ "COMBIN",
+ "COMBINA",
+ "CONVERT",
+ "COS",
+ "COSH",
+ "COT",
+ "COTH",
+ "COUNTBLANK",
+ "COUNTIF",
+ "DEGREES",
+ "EUROCONVERT",
+ "EVEN",
+ "EXP",
+ "FACT",
+ "FLOOR",
+ "GCD",
+ "INT",
+ "ISEVEN",
+ "ISODD",
+ "LCM",
+ "LN",
+ "LOG",
+ "LOG10",
+ "MOD",
+ "ODD",
+ "PI",
+ "POWER",
+ "PRODUCT",
+ "RADIANS",
+ "RAND",
+ "ROUND",
+ "ROUNDDOWN",
+ "ROUNDUP",
+ "SIGN",
+ "SIN",
+ "SINH",
+ "SQRT",
+ "SUBTOTAL",
+ "SUM",
+ "SUMIF",
+ "SUMSQ",
+ "TAN",
+ "TANH",
+ "TRUNC",
+ 0
+ };
+
+ const char* aArray[] = {
+ "FREQUENCY",
+ "GROWTH",
+ "LINEST",
+ "LOGEST",
+ "MDETERM",
+ "MINVERSE",
+ "MMULT",
+ "MUNIT",
+ "SUMPRODUCT",
+ "SUMX2MY2",
+ "SUMX2PY2",
+ "SUMXMY2",
+ "TRANSPOSE",
+ "TREND",
+ 0
+ };
+
+ const char* aStatistical[] = {
+ "AVEDEV",
+ "AVERAGE",
+ "AVERAGEA",
+ "B",
+ "BETADIST",
+ "BETAINV",
+ "BINOMDIST",
+ "CHIDIST",
+ "CHIINV",
+ "CHISQDIST",
+ "CHISQINV",
+ "CHITEST",
+ "CONFIDENCE",
+ "CORREL",
+ "COUNT",
+ "COUNTA",
+ "COVAR",
+ "CRITBINOM",
+ "DEVSQ",
+ "EXPONDIST",
+ "FDIST",
+ "FINV",
+ "FISHER",
+ "FISHERINV",
+ "FORECAST",
+ "FTEST",
+ "GAMMA",
+ "GAMMADIST",
+ "GAMMAINV",
+ "GAMMALN",
+ "GAUSS",
+ "GEOMEAN",
+ "HARMEAN",
+ "HYPGEOMDIST",
+ "INTERCEPT",
+ "KURT",
+ "LARGE",
+ "LOGINV",
+ "LOGNORMDIST",
+ "MAX",
+ "MAXA",
+ "MEDIAN",
+ "MIN",
+ "MINA",
+ "MODE",
+ "NEGBINOMDIST",
+ "NORMDIST",
+ "NORMINV",
+ "NORMSDIST",
+ "NORMSINV",
+ "PEARSON",
+ "PERCENTILE",
+ "PERCENTRANK",
+ "PERMUT",
+ "PERMUTATIONA",
+ "PHI",
+ "POISSON",
+ "PROB",
+ "QUARTILE",
+ "RANK",
+ "RSQ",
+ "SKEW",
+ "SLOPE",
+ "SMALL",
+ "STANDARDIZE",
+ "STDEV",
+ "STDEVA",
+ "STDEVP",
+ "STDEVPA",
+ "STEYX",
+ "TDIST",
+ "TINV",
+ "TRIMMEAN",
+ "TTEST",
+ "VAR",
+ "VARA",
+ "VARP",
+ "VARPA",
+ "WEIBULL",
+ "ZTEST",
+ 0
+ };
+
+ const char* aSpreadsheet[] = {
+ "ADDRESS",
+ "AREAS",
+ "CHOOSE",
+ "COLUMN",
+ "COLUMNS",
+ "DDE",
+ "ERRORTYPE",
+ "GETPIVOTDATA",
+ "HLOOKUP",
+ "HYPERLINK",
+ "INDEX",
+ "INDIRECT",
+ "LOOKUP",
+ "MATCH",
+ "OFFSET",
+ "ROW",
+ "ROWS",
+ "SHEET",
+ "SHEETS",
+ "STYLE",
+ "VLOOKUP",
+ 0
+ };
+
+ const char* aText[] = {
+ "ARABIC",
+ "ASC",
+ "BAHTTEXT",
+ "BASE",
+ "CHAR",
+ "CLEAN",
+ "CODE",
+ "CONCATENATE",
+ "DECIMAL",
+ "DOLLAR",
+ "EXACT",
+ "FIND",
+ "FIXED",
+ "JIS",
+ "LEFT",
+ "LEN",
+ "LOWER",
+ "MID",
+ "PROPER",
+ "REPLACE",
+ "REPT",
+ "RIGHT",
+ "ROMAN",
+ "SEARCH",
+ "SUBSTITUTE",
+ "T",
+ "TEXT",
+ "TRIM",
+ "UNICHAR",
+ "UNICODE",
+ "UPPER",
+ "VALUE",
+ 0
+ };
+
+ struct {
+ const char* Category; const char** Functions;
+ } aTests[] = {
+ { "Database", aDataBase },
+ { "Date&Time", aDateTime },
+ { "Financial", aFinancial },
+ { "Information", aInformation },
+ { "Logical", aLogical },
+ { "Mathematical", aMathematical },
+ { "Array", aArray },
+ { "Statistical", aStatistical },
+ { "Spreadsheet", aSpreadsheet },
+ { "Text", aText },
+ { "Add-in", 0 },
+ { 0, 0 }
+ };
+
+ ScFunctionMgr* pFuncMgr = ScGlobal::GetStarCalcFunctionMgr();
+ sal_uInt32 n = pFuncMgr->getCount();
+ for (sal_uInt32 i = 0; i < n; ++i)
+ {
+ const formula::IFunctionCategory* pCat = pFuncMgr->getCategory(i);
+ CPPUNIT_ASSERT_MESSAGE("Unexpected category name", pCat->getName().equalsAscii(aTests[i].Category));
+ sal_uInt32 nFuncCount = pCat->getCount();
+ for (sal_uInt32 j = 0; j < nFuncCount; ++j)
+ {
+ const formula::IFunctionDescription* pFunc = pCat->getFunction(j);
+ CPPUNIT_ASSERT_MESSAGE("Unexpected function name", pFunc->getFunctionName().equalsAscii(aTests[i].Functions[j]));
+ }
+ }
+}
+
void Test::testGraphicsInGroup()
{
OUString aTabName(RTL_CONSTASCII_USTRINGPARAM("TestTab"));