Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
cjs_util_unittest.cpp
Go to the documentation of this file.
1
// Copyright 2017 The PDFium Authors
2
// Use of this source code is governed by a BSD-style license that can be
3
// found in the LICENSE file.
4
5
#
include
"fxjs/cjs_util.h"
6
7
#
include
<
iterator
>
8
9
#
include
"testing/gtest/include/gtest/gtest.h"
10
11
TEST
(CJS_Util,
ParseDataType
) {
12
struct
ParseDataTypeCase {
13
const
wchar_t
*
const
input_string;
14
const
CJS_Util::
DataType
expected;
15
};
16
17
// Commented out tests follow the spec but are not passing.
18
const
ParseDataTypeCase cases[] = {
19
// Not conversions
20
{L"", CJS_Util
::
DataType
::
kInvalid
},
21
{L"d", CJS_Util
::
DataType
::
kInvalid
},
22
23
// Simple cases
24
{L"%d", CJS_Util
::
DataType
::
kInt
},
25
{L"%x", CJS_Util
::
DataType
::
kInt
},
26
{L"%f", CJS_Util
::
DataType
::
kDouble
},
27
{L"%s", CJS_Util
::
DataType
::
kString
},
28
29
// nDecSep Not implemented
30
// {L"%,0d", CJS_Util::DataType::kInt},
31
// {L"%,1d", CJS_Util::DataType::kInt},
32
// {L"%,2d", CJS_Util::DataType::kInt},
33
// {L"%,3d", CJS_Util::DataType::kInt},
34
// {L"%,4d", -1},
35
// {L"%,d", -1},
36
37
// cFlags("+ 0#"") are only valid for numeric conversions.
38
{L"%+d", CJS_Util
::
DataType
::
kInt
},
39
{L"%+x", CJS_Util
::
DataType
::
kInt
},
40
{L"%+f", CJS_Util
::
DataType
::
kDouble
},
41
// {L"%+s", -1},
42
{L"% d", CJS_Util
::
DataType
::
kInt
},
43
{L"% x", CJS_Util
::
DataType
::
kInt
},
44
{L"% f", CJS_Util
::
DataType
::
kDouble
},
45
// {L"% s", -1},
46
{L"%0d", CJS_Util
::
DataType
::
kInt
},
47
{L"%0x", CJS_Util
::
DataType
::
kInt
},
48
{L"%0f", CJS_Util
::
DataType
::
kDouble
},
49
// {L"%0s", -1},
50
{L"%#d", CJS_Util
::
DataType
::
kInt
},
51
{L"%#x", CJS_Util
::
DataType
::
kInt
},
52
{L"%#f", CJS_Util
::
DataType
::
kDouble
},
53
// {L"%#s", -1},
54
55
// nWidth should work. for all conversions, can be combined with cFlags=0
56
// for numbers.
57
{L"%5d", CJS_Util
::
DataType
::
kInt
},
58
{L"%05d", CJS_Util
::
DataType
::
kInt
},
59
{L"%5x", CJS_Util
::
DataType
::
kInt
},
60
{L"%05x", CJS_Util
::
DataType
::
kInt
},
61
{L"%5f", CJS_Util
::
DataType
::
kDouble
},
62
{L"%05f", CJS_Util
::
DataType
::
kDouble
},
63
{L"%5s", CJS_Util
::
DataType
::
kString
},
64
// {L"%05s", -1},
65
66
// nPrecision should only work for float
67
// {L"%.5d", -1},
68
// {L"%.5x", -1},
69
{L"%.5f", CJS_Util
::
DataType
::
kDouble
},
70
// {L"%.5s", -1},
71
// {L"%.14d", -1},
72
// {L"%.14x", -1},
73
{L"%.14f", CJS_Util
::
DataType
::
kDouble
},
74
// {L"%.14s", -1},
75
// {L"%.f", -1},
76
77
// See https://crbug.com/740166
78
// nPrecision too large (> 260) causes crashes in Windows.
79
// Avoid this by limiting to two digits
80
{L"%.1d", CJS_Util
::
DataType
::
kInt
},
81
{L"%.10d", CJS_Util
::
DataType
::
kInt
},
82
{L"%.100d", CJS_Util
::
DataType
::
kInvalid
},
83
84
// Unexpected characters
85
{L"%ad", CJS_Util
::
DataType
::
kInvalid
},
86
{L"%bx", CJS_Util
::
DataType
::
kInvalid
},
87
// {L"%cf", CJS_Util::DataType::kInvalid},
88
// {L"%es", CJS_Util::DataType::kInvalid},
89
// {L"%gd", CJS_Util::DataType::kInvalid},
90
{L"%hx", CJS_Util
::
DataType
::
kInvalid
},
91
// {L"%if", CJS_Util::DataType::kInvalid},
92
{L"%js", CJS_Util
::
DataType
::
kInvalid
},
93
{L"%@d", CJS_Util
::
DataType
::
kInvalid
},
94
{L"%~x", CJS_Util
::
DataType
::
kInvalid
},
95
{L"%[f", CJS_Util
::
DataType
::
kInvalid
},
96
{L"%\0s", CJS_Util
::
DataType
::
kInvalid
},
97
{L"%\nd", CJS_Util
::
DataType
::
kInvalid
},
98
{L"%\rx", CJS_Util
::
DataType
::
kInvalid
},
99
// {L"%%f", CJS_Util::DataType::kInvalid},
100
// {L"% s", CJS_Util::DataType::kInvalid},
101
102
// Combine multiple valid components
103
{L"%+6d", CJS_Util
::
DataType
::
kInt
},
104
{L"% 7x", CJS_Util
::
DataType
::
kInt
},
105
{L"%#9.3f", CJS_Util
::
DataType
::
kDouble
},
106
{L"%10s", CJS_Util
::
DataType
::
kString
},
107
};
108
109
for
(size_t i = 0; i <
std
::size(cases); i++) {
110
WideString input(cases[i].input_string);
111
EXPECT_EQ(cases[i].expected, CJS_Util
::
ParseDataType
(
&input
)
)
112
<< cases[i].input_string;
113
}
114
}
TEST
TEST(CJS_Util, ParseDataType)
Definition
cjs_util_unittest.cpp:11
CJS_Util::DataType
DataType
Definition
cjs_util.h:20
CJS_Util::DataType::kString
@ kString
CJS_Util::DataType::kInt
@ kInt
CJS_Util::DataType::kDouble
@ kDouble
CJS_Util::DataType::kInvalid
@ kInvalid
CJS_Util::ParseDataType
static DataType ParseDataType(WideString *sFormat)
Definition
cjs_util.cpp:403
std
Definition
qfloat16.h:492
qtwebengine
src
3rdparty
chromium
third_party
pdfium
fxjs
cjs_util_unittest.cpp
Generated on Sat Sep 21 2024 00:59:11 for Qt by
1.12.0