Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(31)

Side by Side Diff: base/strings/string_number_conversions_unittest.cc

Issue 1685743006: StringToUint should output zero on negative numbers. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/strings/string_number_conversions.h" 5 #include "base/strings/string_number_conversions.h"
6 6
7 #include <errno.h> 7 #include <errno.h>
8 #include <limits.h> 8 #include <limits.h>
9 #include <stddef.h> 9 #include <stddef.h>
10 #include <stdint.h> 10 #include <stdint.h>
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
130 {"-+123", 0, false}, 130 {"-+123", 0, false},
131 {"+-123", 0, false}, 131 {"+-123", 0, false},
132 {"-", 0, false}, 132 {"-", 0, false},
133 {"-2147483649", INT_MIN, false}, 133 {"-2147483649", INT_MIN, false},
134 {"-99999999999", INT_MIN, false}, 134 {"-99999999999", INT_MIN, false},
135 {"2147483648", INT_MAX, false}, 135 {"2147483648", INT_MAX, false},
136 {"99999999999", INT_MAX, false}, 136 {"99999999999", INT_MAX, false},
137 }; 137 };
138 138
139 for (size_t i = 0; i < arraysize(cases); ++i) { 139 for (size_t i = 0; i < arraysize(cases); ++i) {
140 int output = 0; 140 int output = cases[i].output ^ 1; // Ensure StringToInt wrote something.
141 EXPECT_EQ(cases[i].success, StringToInt(cases[i].input, &output)); 141 EXPECT_EQ(cases[i].success, StringToInt(cases[i].input, &output));
142 EXPECT_EQ(cases[i].output, output); 142 EXPECT_EQ(cases[i].output, output);
143 143
144 string16 utf16_input = UTF8ToUTF16(cases[i].input); 144 string16 utf16_input = UTF8ToUTF16(cases[i].input);
145 output = 0; 145 output = cases[i].output ^ 1; // Ensure StringToInt wrote something.
146 EXPECT_EQ(cases[i].success, StringToInt(utf16_input, &output)); 146 EXPECT_EQ(cases[i].success, StringToInt(utf16_input, &output));
147 EXPECT_EQ(cases[i].output, output); 147 EXPECT_EQ(cases[i].output, output);
148 } 148 }
149 149
150 // One additional test to verify that conversion of numbers in strings with 150 // One additional test to verify that conversion of numbers in strings with
151 // embedded NUL characters. The NUL and extra data after it should be 151 // embedded NUL characters. The NUL and extra data after it should be
152 // interpreted as junk after the number. 152 // interpreted as junk after the number.
153 const char input[] = "6\06"; 153 const char input[] = "6\06";
154 std::string input_string(input, arraysize(input) - 1); 154 std::string input_string(input, arraysize(input) - 1);
155 int output; 155 int output;
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
194 {"+-123", 0, false}, 194 {"+-123", 0, false},
195 {"-", 0, false}, 195 {"-", 0, false},
196 {"-2147483649", 0, false}, 196 {"-2147483649", 0, false},
197 {"-99999999999", 0, false}, 197 {"-99999999999", 0, false},
198 {"4294967295", UINT_MAX, true}, 198 {"4294967295", UINT_MAX, true},
199 {"4294967296", UINT_MAX, false}, 199 {"4294967296", UINT_MAX, false},
200 {"99999999999", UINT_MAX, false}, 200 {"99999999999", UINT_MAX, false},
201 }; 201 };
202 202
203 for (size_t i = 0; i < arraysize(cases); ++i) { 203 for (size_t i = 0; i < arraysize(cases); ++i) {
204 unsigned output = 0; 204 unsigned output =
205 cases[i].output ^ 1; // Ensure StringToUint wrote something.
205 EXPECT_EQ(cases[i].success, StringToUint(cases[i].input, &output)); 206 EXPECT_EQ(cases[i].success, StringToUint(cases[i].input, &output));
206 EXPECT_EQ(cases[i].output, output); 207 EXPECT_EQ(cases[i].output, output);
207 208
208 string16 utf16_input = UTF8ToUTF16(cases[i].input); 209 string16 utf16_input = UTF8ToUTF16(cases[i].input);
209 output = 0; 210 output = cases[i].output ^ 1; // Ensure StringToUint wrote something.
210 EXPECT_EQ(cases[i].success, StringToUint(utf16_input, &output)); 211 EXPECT_EQ(cases[i].success, StringToUint(utf16_input, &output));
211 EXPECT_EQ(cases[i].output, output); 212 EXPECT_EQ(cases[i].output, output);
212 } 213 }
213 214
214 // One additional test to verify that conversion of numbers in strings with 215 // One additional test to verify that conversion of numbers in strings with
215 // embedded NUL characters. The NUL and extra data after it should be 216 // embedded NUL characters. The NUL and extra data after it should be
216 // interpreted as junk after the number. 217 // interpreted as junk after the number.
217 const char input[] = "6\06"; 218 const char input[] = "6\06";
218 std::string input_string(input, arraysize(input) - 1); 219 std::string input_string(input, arraysize(input) - 1);
219 unsigned output; 220 unsigned output;
(...skipping 578 matching lines...) Expand 10 before | Expand all | Expand 10 after
798 799
799 TEST(StringNumberConversionsTest, HexEncode) { 800 TEST(StringNumberConversionsTest, HexEncode) {
800 std::string hex(HexEncode(NULL, 0)); 801 std::string hex(HexEncode(NULL, 0));
801 EXPECT_EQ(hex.length(), 0U); 802 EXPECT_EQ(hex.length(), 0U);
802 unsigned char bytes[] = {0x01, 0xff, 0x02, 0xfe, 0x03, 0x80, 0x81}; 803 unsigned char bytes[] = {0x01, 0xff, 0x02, 0xfe, 0x03, 0x80, 0x81};
803 hex = HexEncode(bytes, sizeof(bytes)); 804 hex = HexEncode(bytes, sizeof(bytes));
804 EXPECT_EQ(hex.compare("01FF02FE038081"), 0); 805 EXPECT_EQ(hex.compare("01FF02FE038081"), 0);
805 } 806 }
806 807
807 } // namespace base 808 } // namespace base
OLDNEW
« base/strings/string_number_conversions.cc ('K') | « base/strings/string_number_conversions.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698