OLD | NEW |
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 <algorithm> | 5 #include <algorithm> |
6 | 6 |
7 #include "base/basictypes.h" | 7 #include "base/basictypes.h" |
8 #include "base/string_util.h" | 8 #include "base/string_util.h" |
9 #include "net/http/http_util.h" | 9 #include "net/http/http_util.h" |
10 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
(...skipping 948 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
959 CheckCurrentNameValuePair(&parser_a, true, "beta", " b ")); | 959 CheckCurrentNameValuePair(&parser_a, true, "beta", " b ")); |
960 | 960 |
961 // advance b, no effect on a | 961 // advance b, no effect on a |
962 ASSERT_NO_FATAL_FAILURE( | 962 ASSERT_NO_FATAL_FAILURE( |
963 CheckNextNameValuePair(&parser_b, true, true, "cappa", "c;")); | 963 CheckNextNameValuePair(&parser_b, true, true, "cappa", "c;")); |
964 ASSERT_NO_FATAL_FAILURE( | 964 ASSERT_NO_FATAL_FAILURE( |
965 CheckCurrentNameValuePair(&parser_a, true, "beta", " b ")); | 965 CheckCurrentNameValuePair(&parser_a, true, "beta", " b ")); |
966 } | 966 } |
967 | 967 |
968 TEST(HttpUtilTest, NameValuePairsIteratorEmptyInput) { | 968 TEST(HttpUtilTest, NameValuePairsIteratorEmptyInput) { |
969 std::string data = ""; | 969 std::string data; |
970 HttpUtil::NameValuePairsIterator parser(data.begin(), data.end(), ';'); | 970 HttpUtil::NameValuePairsIterator parser(data.begin(), data.end(), ';'); |
971 | 971 |
972 EXPECT_TRUE(parser.valid()); | 972 EXPECT_TRUE(parser.valid()); |
973 ASSERT_NO_FATAL_FAILURE( | 973 ASSERT_NO_FATAL_FAILURE(CheckNextNameValuePair( |
974 CheckNextNameValuePair(&parser, false, true, "", "")); | 974 &parser, false, true, std::string(), std::string())); |
975 } | 975 } |
976 | 976 |
977 TEST(HttpUtilTest, NameValuePairsIterator) { | 977 TEST(HttpUtilTest, NameValuePairsIterator) { |
978 std::string data = "alpha=1; beta= 2 ;cappa =' 3; ';" | 978 std::string data = "alpha=1; beta= 2 ;cappa =' 3; ';" |
979 "delta= \" \\\"4\\\" \"; e= \" '5'\"; e=6;" | 979 "delta= \" \\\"4\\\" \"; e= \" '5'\"; e=6;" |
980 "f='\\'\\h\\e\\l\\l\\o\\ \\w\\o\\r\\l\\d\\'';" | 980 "f='\\'\\h\\e\\l\\l\\o\\ \\w\\o\\r\\l\\d\\'';" |
981 "g=''; h='hello'"; | 981 "g=''; h='hello'"; |
982 HttpUtil::NameValuePairsIterator parser(data.begin(), data.end(), ';'); | 982 HttpUtil::NameValuePairsIterator parser(data.begin(), data.end(), ';'); |
983 EXPECT_TRUE(parser.valid()); | 983 EXPECT_TRUE(parser.valid()); |
984 | 984 |
985 ASSERT_NO_FATAL_FAILURE( | 985 ASSERT_NO_FATAL_FAILURE( |
986 CheckNextNameValuePair(&parser, true, true, "alpha", "1")); | 986 CheckNextNameValuePair(&parser, true, true, "alpha", "1")); |
987 ASSERT_NO_FATAL_FAILURE( | 987 ASSERT_NO_FATAL_FAILURE( |
988 CheckNextNameValuePair(&parser, true, true, "beta", "2")); | 988 CheckNextNameValuePair(&parser, true, true, "beta", "2")); |
989 ASSERT_NO_FATAL_FAILURE( | 989 ASSERT_NO_FATAL_FAILURE( |
990 CheckNextNameValuePair(&parser, true, true, "cappa", " 3; ")); | 990 CheckNextNameValuePair(&parser, true, true, "cappa", " 3; ")); |
991 ASSERT_NO_FATAL_FAILURE( | 991 ASSERT_NO_FATAL_FAILURE( |
992 CheckNextNameValuePair(&parser, true, true, "delta", " \"4\" ")); | 992 CheckNextNameValuePair(&parser, true, true, "delta", " \"4\" ")); |
993 ASSERT_NO_FATAL_FAILURE( | 993 ASSERT_NO_FATAL_FAILURE( |
994 CheckNextNameValuePair(&parser, true, true, "e", " '5'")); | 994 CheckNextNameValuePair(&parser, true, true, "e", " '5'")); |
995 ASSERT_NO_FATAL_FAILURE( | 995 ASSERT_NO_FATAL_FAILURE( |
996 CheckNextNameValuePair(&parser, true, true, "e", "6")); | 996 CheckNextNameValuePair(&parser, true, true, "e", "6")); |
997 ASSERT_NO_FATAL_FAILURE( | 997 ASSERT_NO_FATAL_FAILURE( |
998 CheckNextNameValuePair(&parser, true, true, "f", "'hello world'")); | 998 CheckNextNameValuePair(&parser, true, true, "f", "'hello world'")); |
999 ASSERT_NO_FATAL_FAILURE( | 999 ASSERT_NO_FATAL_FAILURE( |
1000 CheckNextNameValuePair(&parser, true, true, "g", "")); | 1000 CheckNextNameValuePair(&parser, true, true, "g", std::string())); |
1001 ASSERT_NO_FATAL_FAILURE( | 1001 ASSERT_NO_FATAL_FAILURE( |
1002 CheckNextNameValuePair(&parser, true, true, "h", "hello")); | 1002 CheckNextNameValuePair(&parser, true, true, "h", "hello")); |
1003 ASSERT_NO_FATAL_FAILURE( | 1003 ASSERT_NO_FATAL_FAILURE(CheckNextNameValuePair( |
1004 CheckNextNameValuePair(&parser, false, true, "", "")); | 1004 &parser, false, true, std::string(), std::string())); |
1005 } | 1005 } |
1006 | 1006 |
1007 TEST(HttpUtilTest, NameValuePairsIteratorIllegalInputs) { | 1007 TEST(HttpUtilTest, NameValuePairsIteratorIllegalInputs) { |
1008 ASSERT_NO_FATAL_FAILURE(CheckInvalidNameValuePair("alpha=1", "; beta")); | 1008 ASSERT_NO_FATAL_FAILURE(CheckInvalidNameValuePair("alpha=1", "; beta")); |
1009 ASSERT_NO_FATAL_FAILURE(CheckInvalidNameValuePair("", "beta")); | 1009 ASSERT_NO_FATAL_FAILURE(CheckInvalidNameValuePair(std::string(), "beta")); |
1010 | 1010 |
1011 ASSERT_NO_FATAL_FAILURE(CheckInvalidNameValuePair("alpha=1", "; 'beta'=2")); | 1011 ASSERT_NO_FATAL_FAILURE(CheckInvalidNameValuePair("alpha=1", "; 'beta'=2")); |
1012 ASSERT_NO_FATAL_FAILURE(CheckInvalidNameValuePair("", "'beta'=2")); | 1012 ASSERT_NO_FATAL_FAILURE(CheckInvalidNameValuePair(std::string(), "'beta'=2")); |
1013 ASSERT_NO_FATAL_FAILURE(CheckInvalidNameValuePair("alpha=1", ";beta=")); | 1013 ASSERT_NO_FATAL_FAILURE(CheckInvalidNameValuePair("alpha=1", ";beta=")); |
1014 ASSERT_NO_FATAL_FAILURE(CheckInvalidNameValuePair("alpha=1", | 1014 ASSERT_NO_FATAL_FAILURE(CheckInvalidNameValuePair("alpha=1", |
1015 ";beta=;cappa=2")); | 1015 ";beta=;cappa=2")); |
1016 | 1016 |
1017 // According to the spec this is an error, but it doesn't seem appropriate to | 1017 // According to the spec this is an error, but it doesn't seem appropriate to |
1018 // change our behaviour to be less permissive at this time. | 1018 // change our behaviour to be less permissive at this time. |
1019 // See NameValuePairsIteratorExtraSeparators test | 1019 // See NameValuePairsIteratorExtraSeparators test |
1020 // ASSERT_NO_FATAL_FAILURE(CheckInvalidNameValuePair("alpha=1", ";; beta=2")); | 1020 // ASSERT_NO_FATAL_FAILURE(CheckInvalidNameValuePair("alpha=1", ";; beta=2")); |
1021 } | 1021 } |
1022 | 1022 |
1023 // If we are going to support extra separators against the spec, let's just make | 1023 // If we are going to support extra separators against the spec, let's just make |
1024 // sure they work rationally. | 1024 // sure they work rationally. |
1025 TEST(HttpUtilTest, NameValuePairsIteratorExtraSeparators) { | 1025 TEST(HttpUtilTest, NameValuePairsIteratorExtraSeparators) { |
1026 std::string data = " ; ;;alpha=1; ;; ; beta= 2;cappa=3;;; ; "; | 1026 std::string data = " ; ;;alpha=1; ;; ; beta= 2;cappa=3;;; ; "; |
1027 HttpUtil::NameValuePairsIterator parser(data.begin(), data.end(), ';'); | 1027 HttpUtil::NameValuePairsIterator parser(data.begin(), data.end(), ';'); |
1028 EXPECT_TRUE(parser.valid()); | 1028 EXPECT_TRUE(parser.valid()); |
1029 | 1029 |
1030 ASSERT_NO_FATAL_FAILURE( | 1030 ASSERT_NO_FATAL_FAILURE( |
1031 CheckNextNameValuePair(&parser, true, true, "alpha", "1")); | 1031 CheckNextNameValuePair(&parser, true, true, "alpha", "1")); |
1032 ASSERT_NO_FATAL_FAILURE( | 1032 ASSERT_NO_FATAL_FAILURE( |
1033 CheckNextNameValuePair(&parser, true, true, "beta", "2")); | 1033 CheckNextNameValuePair(&parser, true, true, "beta", "2")); |
1034 ASSERT_NO_FATAL_FAILURE( | 1034 ASSERT_NO_FATAL_FAILURE( |
1035 CheckNextNameValuePair(&parser, true, true, "cappa", "3")); | 1035 CheckNextNameValuePair(&parser, true, true, "cappa", "3")); |
1036 ASSERT_NO_FATAL_FAILURE( | 1036 ASSERT_NO_FATAL_FAILURE(CheckNextNameValuePair( |
1037 CheckNextNameValuePair(&parser, false, true, "", "")); | 1037 &parser, false, true, std::string(), std::string())); |
1038 } | 1038 } |
1039 | 1039 |
1040 // See comments on the implementation of NameValuePairsIterator::GetNext | 1040 // See comments on the implementation of NameValuePairsIterator::GetNext |
1041 // regarding this derogation from the spec. | 1041 // regarding this derogation from the spec. |
1042 TEST(HttpUtilTest, NameValuePairsIteratorMissingEndQuote) { | 1042 TEST(HttpUtilTest, NameValuePairsIteratorMissingEndQuote) { |
1043 std::string data = "name='value"; | 1043 std::string data = "name='value"; |
1044 HttpUtil::NameValuePairsIterator parser(data.begin(), data.end(), ';'); | 1044 HttpUtil::NameValuePairsIterator parser(data.begin(), data.end(), ';'); |
1045 EXPECT_TRUE(parser.valid()); | 1045 EXPECT_TRUE(parser.valid()); |
1046 | 1046 |
1047 ASSERT_NO_FATAL_FAILURE( | 1047 ASSERT_NO_FATAL_FAILURE( |
1048 CheckNextNameValuePair(&parser, true, true, "name", "value")); | 1048 CheckNextNameValuePair(&parser, true, true, "name", "value")); |
1049 ASSERT_NO_FATAL_FAILURE( | 1049 ASSERT_NO_FATAL_FAILURE(CheckNextNameValuePair( |
1050 CheckNextNameValuePair(&parser, false, true, "", "")); | 1050 &parser, false, true, std::string(), std::string())); |
1051 } | 1051 } |
OLD | NEW |