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

Unified Diff: third_party/crashpad/crashpad/util/stdlib/string_number_conversion_test.cc

Issue 1505213004: Copy Crashpad into the Chrome tree instead of importing it via DEPS (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address review comments, update README.chromium Created 5 years 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 side-by-side diff with in-line comments
Download patch
Index: third_party/crashpad/crashpad/util/stdlib/string_number_conversion_test.cc
diff --git a/third_party/crashpad/crashpad/util/stdlib/string_number_conversion_test.cc b/third_party/crashpad/crashpad/util/stdlib/string_number_conversion_test.cc
new file mode 100644
index 0000000000000000000000000000000000000000..97d3152bbae4d9d7efc35b12234a06299c846a02
--- /dev/null
+++ b/third_party/crashpad/crashpad/util/stdlib/string_number_conversion_test.cc
@@ -0,0 +1,224 @@
+// Copyright 2014 The Crashpad Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "util/stdlib/string_number_conversion.h"
+
+#include "base/basictypes.h"
+#include "gtest/gtest.h"
+
+#include <limits>
+
+namespace crashpad {
+namespace test {
+namespace {
+
+TEST(StringNumberConversion, StringToInt) {
+ const struct {
+ const char* string;
+ bool valid;
+ int value;
+ } kTestData[] = {
+ {"", false, 0},
+ {"0", true, 0},
+ {"1", true, 1},
+ {"2147483647", true, std::numeric_limits<int>::max()},
+ {"2147483648", false, 0},
+ {"4294967295", false, 0},
+ {"4294967296", false, 0},
+ {"-1", true, -1},
+ {"-2147483648", true, std::numeric_limits<int>::min()},
+ {"-2147483649", false, 0},
+ {"00", true, 0},
+ {"01", true, 1},
+ {"-01", true, -1},
+ {"+2", true, 2},
+ {"0x10", true, 16},
+ {"-0x10", true, -16},
+ {"+0x20", true, 32},
+ {"0xf", true, 15},
+ {"0xg", false, 0},
+ {"0x7fffffff", true, std::numeric_limits<int>::max()},
+ {"0x7FfFfFfF", true, std::numeric_limits<int>::max()},
+ {"0x80000000", false, 0},
+ {"0xFFFFFFFF", false, 0},
+ {"-0x7fffffff", true, -2147483647},
+ {"-0x80000000", true, std::numeric_limits<int>::min()},
+ {"-0x80000001", false, 0},
+ {"-0xffffffff", false, 0},
+ {"0x100000000", false, 0},
+ {"0xabcdef", true, 11259375},
+ {"010", true, 8},
+ {"-010", true, -8},
+ {"+020", true, 16},
+ {"07", true, 7},
+ {"08", false, 0},
+ {" 0", false, 0},
+ {"0 ", false, 0},
+ {" 0 ", false, 0},
+ {" 1", false, 0},
+ {"1 ", false, 0},
+ {" 1 ", false, 0},
+ {"a2", false, 0},
+ {"2a", false, 0},
+ {"2a2", false, 0},
+ {".0", false, 0},
+ {".1", false, 0},
+ {"-.2", false, 0},
+ {"+.3", false, 0},
+ {"1.23", false, 0},
+ {"-273.15", false, 0},
+ {"+98.6", false, 0},
+ {"1e1", false, 0},
+ {"1E1", false, 0},
+ {"0x123p4", false, 0},
+ {"infinity", false, 0},
+ {"NaN", false, 0},
+ {"-9223372036854775810", false, 0},
+ {"-9223372036854775809", false, 0},
+ {"9223372036854775808", false, 0},
+ {"9223372036854775809", false, 0},
+ {"18446744073709551615", false, 0},
+ {"18446744073709551616", false, 0},
+ };
+
+ for (size_t index = 0; index < arraysize(kTestData); ++index) {
+ int value;
+ bool valid = StringToNumber(kTestData[index].string, &value);
+ if (kTestData[index].valid) {
+ EXPECT_TRUE(valid) << "index " << index << ", string "
+ << kTestData[index].string;
+ if (valid) {
+ EXPECT_EQ(kTestData[index].value, value)
+ << "index " << index << ", string " << kTestData[index].string;
+ }
+ } else {
+ EXPECT_FALSE(valid) << "index " << index << ", string "
+ << kTestData[index].string << ", value " << value;
+ }
+ }
+
+ // Ensure that embedded NUL characters are treated as bad input. The string
+ // is split to avoid MSVC warning:
+ // "decimal digit terminates octal escape sequence".
+ const char input[] = "6\000" "6";
+ base::StringPiece input_string(input, arraysize(input) - 1);
+ int output;
+ EXPECT_FALSE(StringToNumber(input_string, &output));
+
+ // Ensure that a NUL is not required at the end of the string.
+ EXPECT_TRUE(StringToNumber(base::StringPiece("66", 1), &output));
+ EXPECT_EQ(6, output);
+}
+
+TEST(StringNumberConversion, StringToUnsignedInt) {
+ const struct {
+ const char* string;
+ bool valid;
+ unsigned int value;
+ } kTestData[] = {
+ {"", false, 0},
+ {"0", true, 0},
+ {"1", true, 1},
+ {"2147483647", true, 2147483647},
+ {"2147483648", true, 2147483648},
+ {"4294967295", true, std::numeric_limits<unsigned int>::max()},
+ {"4294967296", false, 0},
+ {"-1", false, 0},
+ {"-2147483648", false, 0},
+ {"-2147483649", false, 0},
+ {"00", true, 0},
+ {"01", true, 1},
+ {"-01", false, 0},
+ {"+2", true, 2},
+ {"0x10", true, 16},
+ {"-0x10", false, 0},
+ {"+0x20", true, 32},
+ {"0xf", true, 15},
+ {"0xg", false, 0},
+ {"0x7fffffff", true, 0x7fffffff},
+ {"0x7FfFfFfF", true, 0x7fffffff},
+ {"0x80000000", true, 0x80000000},
+ {"0xFFFFFFFF", true, 0xffffffff},
+ {"-0x7fffffff", false, 0},
+ {"-0x80000000", false, 0},
+ {"-0x80000001", false, 0},
+ {"-0xffffffff", false, 0},
+ {"0x100000000", false, 0},
+ {"0xabcdef", true, 11259375},
+ {"010", true, 8},
+ {"-010", false, 0},
+ {"+020", true, 16},
+ {"07", true, 7},
+ {"08", false, 0},
+ {" 0", false, 0},
+ {"0 ", false, 0},
+ {" 0 ", false, 0},
+ {" 1", false, 0},
+ {"1 ", false, 0},
+ {" 1 ", false, 0},
+ {"a2", false, 0},
+ {"2a", false, 0},
+ {"2a2", false, 0},
+ {".0", false, 0},
+ {".1", false, 0},
+ {"-.2", false, 0},
+ {"+.3", false, 0},
+ {"1.23", false, 0},
+ {"-273.15", false, 0},
+ {"+98.6", false, 0},
+ {"1e1", false, 0},
+ {"1E1", false, 0},
+ {"0x123p4", false, 0},
+ {"infinity", false, 0},
+ {"NaN", false, 0},
+ {"-9223372036854775810", false, 0},
+ {"-9223372036854775809", false, 0},
+ {"9223372036854775808", false, 0},
+ {"9223372036854775809", false, 0},
+ {"18446744073709551615", false, 0},
+ {"18446744073709551616", false, 0},
+ };
+
+ for (size_t index = 0; index < arraysize(kTestData); ++index) {
+ unsigned int value;
+ bool valid = StringToNumber(kTestData[index].string, &value);
+ if (kTestData[index].valid) {
+ EXPECT_TRUE(valid) << "index " << index << ", string "
+ << kTestData[index].string;
+ if (valid) {
+ EXPECT_EQ(kTestData[index].value, value)
+ << "index " << index << ", string " << kTestData[index].string;
+ }
+ } else {
+ EXPECT_FALSE(valid) << "index " << index << ", string "
+ << kTestData[index].string << ", value " << value;
+ }
+ }
+
+ // Ensure that embedded NUL characters are treated as bad input. The string
+ // is split to avoid MSVC warning:
+ // "decimal digit terminates octal escape sequence".
+ const char input[] = "6\000" "6";
+ base::StringPiece input_string(input, arraysize(input) - 1);
+ unsigned int output;
+ EXPECT_FALSE(StringToNumber(input_string, &output));
+
+ // Ensure that a NUL is not required at the end of the string.
+ EXPECT_TRUE(StringToNumber(base::StringPiece("66", 1), &output));
+ EXPECT_EQ(6u, output);
+}
+
+} // namespace
+} // namespace test
+} // namespace crashpad

Powered by Google App Engine
This is Rietveld 408576698