Commit e02a7e57 authored by Francois Gouget's avatar Francois Gouget Committed by Alexandre Julliard

oleaut32: VarParseNumFromStr() accepts trailing currency symbols.

parent 4e34e751
......@@ -1642,7 +1642,7 @@ static void test_VarParseNumFromStrEn(void)
/* With flag, but is allowed after the amount and can even be repeated! */
CONVERT("$11$$", NUMPRS_CURRENCY|NUMPRS_USE_ALL);
todo_wine EXPECT(2,NUMPRS_CURRENCY|NUMPRS_USE_ALL,NUMPRS_CURRENCY,5,0,0);
EXPECT(2,NUMPRS_CURRENCY|NUMPRS_USE_ALL,NUMPRS_CURRENCY,5,0,0);
EXPECT2(1,1);
EXPECTRGB(2,FAILDIG);
......@@ -1688,7 +1688,7 @@ static void test_VarParseNumFromStrEn(void)
/* With flag, unless explicitly allowed */
WCONVERT(wstr, NUMPRS_CURRENCY|NUMPRS_TRAILING_WHITE|NUMPRS_USE_ALL);
todo_wine EXPECT(2,NUMPRS_CURRENCY|NUMPRS_TRAILING_WHITE|NUMPRS_USE_ALL,NUMPRS_CURRENCY|NUMPRS_TRAILING_WHITE,4,0,0);
EXPECT(2,NUMPRS_CURRENCY|NUMPRS_TRAILING_WHITE|NUMPRS_USE_ALL,NUMPRS_CURRENCY|NUMPRS_TRAILING_WHITE,4,0,0);
EXPECT2(1,1);
EXPECTRGB(2,FAILDIG);
......@@ -2006,7 +2006,7 @@ static void test_VarParseNumFromStrFr(void)
/* With flag, consumes all currency signs! "E12EE" */
WCONVERT(L"\x20ac\x31\x32\x20ac\x20ac", NUMPRS_CURRENCY|NUMPRS_USE_ALL);
todo_wine EXPECT(2,NUMPRS_CURRENCY|NUMPRS_USE_ALL,NUMPRS_CURRENCY,5,0,0);
EXPECT(2,NUMPRS_CURRENCY|NUMPRS_USE_ALL,NUMPRS_CURRENCY,5,0,0);
EXPECT2(1,2);
EXPECTRGB(2,FAILDIG);
......@@ -2025,12 +2025,12 @@ static void test_VarParseNumFromStrFr(void)
if (spaces[i] == ' ' || spaces[i] == 0xa0 /* non-breaking space */)
{
/* Spaces aliased to thousands separator are never allowed! */
EXPECTFAIL;
todo_wine EXPECTFAIL;
}
else
{
/* The others behave normally */
todo_wine EXPECT(2,NUMPRS_CURRENCY|NUMPRS_TRAILING_WHITE|NUMPRS_USE_ALL,NUMPRS_CURRENCY|NUMPRS_TRAILING_WHITE,4,0,0);
EXPECT(2,NUMPRS_CURRENCY|NUMPRS_TRAILING_WHITE|NUMPRS_USE_ALL,NUMPRS_CURRENCY|NUMPRS_TRAILING_WHITE,4,0,0);
EXPECT2(1,2);
EXPECTRGB(2,FAILDIG);
}
......@@ -2039,7 +2039,7 @@ static void test_VarParseNumFromStrFr(void)
if (spaces[i] == ' ' || spaces[i] == 0xa0 /* non-breaking space */)
{
/* Spaces aliased to thousands separator are never allowed! */
todo_wine EXPECT(2,NUMPRS_CURRENCY|NUMPRS_THOUSANDS|NUMPRS_USE_ALL,NUMPRS_CURRENCY|NUMPRS_THOUSANDS,4,0,0);
todo_wine_if(i==0) EXPECT(2,NUMPRS_CURRENCY|NUMPRS_THOUSANDS|NUMPRS_USE_ALL,NUMPRS_CURRENCY|NUMPRS_THOUSANDS,4,0,0);
EXPECT2(1,2);
EXPECTRGB(2,FAILDIG);
}
......@@ -2060,7 +2060,7 @@ static void test_VarParseNumFromStrFr(void)
/* With flag and decimal flag, consumes decimal point and following digits */
WCONVERT(L"12,1\x20ac", NUMPRS_CURRENCY|NUMPRS_DECIMAL|NUMPRS_USE_ALL);
todo_wine EXPECT(3,NUMPRS_CURRENCY|NUMPRS_DECIMAL|NUMPRS_USE_ALL,NUMPRS_CURRENCY|NUMPRS_DECIMAL,5,0,-1);
EXPECT(3,NUMPRS_CURRENCY|NUMPRS_DECIMAL|NUMPRS_USE_ALL,NUMPRS_CURRENCY|NUMPRS_DECIMAL,5,0,-1);
EXPECT2(1,2);
EXPECTRGB(2,1);
EXPECTRGB(3,FAILDIG);
......@@ -2159,7 +2159,7 @@ static void test_VarParseNumFromStrMisc(void)
/* Multi-character currencies can be repeated too "zl2zlzl" */
WCONVERT(L"z\x142\x32z\x142z\x142", NUMPRS_CURRENCY|NUMPRS_USE_ALL);
todo_wine EXPECT(1,NUMPRS_CURRENCY|NUMPRS_USE_ALL,NUMPRS_CURRENCY,7,0,0);
EXPECT(1,NUMPRS_CURRENCY|NUMPRS_USE_ALL,NUMPRS_CURRENCY,7,0,0);
EXPECT2(2,FAILDIG);
lcid = MAKELCID(MAKELANGID(LANG_FRENCH,SUBLANG_FRENCH_SWISS),SORT_DEFAULT);
......
......@@ -1941,6 +1941,14 @@ HRESULT WINAPI VarParseNumFromStr(const OLECHAR *lpszStr, LCID lcid, ULONG dwFla
lpszStr++;
pNumprs->dwOutFlags |= NUMPRS_NEG;
}
else if (pNumprs->dwInFlags & NUMPRS_CURRENCY &&
*lpszStr == chars.cCurrencyLocal &&
(!chars.cCurrencyLocal2 || lpszStr[1] == chars.cCurrencyLocal2))
{
pNumprs->dwOutFlags |= NUMPRS_CURRENCY;
cchUsed += chars.cCurrencyLocal2 ? 2 : 1;
lpszStr += chars.cCurrencyLocal2 ? 2 : 1;
}
else
break;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment