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
11TEST(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(CJS_Util, ParseDataType)
static DataType ParseDataType(WideString *sFormat)
Definition cjs_util.cpp:403