| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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_util.h" | 5 #include "base/strings/string_util.h" |
| 6 | 6 |
| 7 #include <math.h> | 7 #include <math.h> |
| 8 #include <stdarg.h> | 8 #include <stdarg.h> |
| 9 | 9 |
| 10 #include <algorithm> | 10 #include <algorithm> |
| (...skipping 651 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 662 | 662 |
| 663 // Verify the lower case as well. | 663 // Verify the lower case as well. |
| 664 EXPECT_EQ(10, HexDigitToInt('a')); | 664 EXPECT_EQ(10, HexDigitToInt('a')); |
| 665 EXPECT_EQ(11, HexDigitToInt('b')); | 665 EXPECT_EQ(11, HexDigitToInt('b')); |
| 666 EXPECT_EQ(12, HexDigitToInt('c')); | 666 EXPECT_EQ(12, HexDigitToInt('c')); |
| 667 EXPECT_EQ(13, HexDigitToInt('d')); | 667 EXPECT_EQ(13, HexDigitToInt('d')); |
| 668 EXPECT_EQ(14, HexDigitToInt('e')); | 668 EXPECT_EQ(14, HexDigitToInt('e')); |
| 669 EXPECT_EQ(15, HexDigitToInt('f')); | 669 EXPECT_EQ(15, HexDigitToInt('f')); |
| 670 } | 670 } |
| 671 | 671 |
| 672 // Test for Tokenize | |
| 673 template <typename STR> | |
| 674 void TokenizeTest() { | |
| 675 std::vector<STR> r; | |
| 676 size_t size; | |
| 677 | |
| 678 size = Tokenize(STR("This is a string"), STR(" "), &r); | |
| 679 EXPECT_EQ(4U, size); | |
| 680 ASSERT_EQ(4U, r.size()); | |
| 681 EXPECT_EQ(r[0], STR("This")); | |
| 682 EXPECT_EQ(r[1], STR("is")); | |
| 683 EXPECT_EQ(r[2], STR("a")); | |
| 684 EXPECT_EQ(r[3], STR("string")); | |
| 685 r.clear(); | |
| 686 | |
| 687 size = Tokenize(STR("one,two,three"), STR(","), &r); | |
| 688 EXPECT_EQ(3U, size); | |
| 689 ASSERT_EQ(3U, r.size()); | |
| 690 EXPECT_EQ(r[0], STR("one")); | |
| 691 EXPECT_EQ(r[1], STR("two")); | |
| 692 EXPECT_EQ(r[2], STR("three")); | |
| 693 r.clear(); | |
| 694 | |
| 695 size = Tokenize(STR("one,two:three;four"), STR(",:"), &r); | |
| 696 EXPECT_EQ(3U, size); | |
| 697 ASSERT_EQ(3U, r.size()); | |
| 698 EXPECT_EQ(r[0], STR("one")); | |
| 699 EXPECT_EQ(r[1], STR("two")); | |
| 700 EXPECT_EQ(r[2], STR("three;four")); | |
| 701 r.clear(); | |
| 702 | |
| 703 size = Tokenize(STR("one,two:three;four"), STR(";,:"), &r); | |
| 704 EXPECT_EQ(4U, size); | |
| 705 ASSERT_EQ(4U, r.size()); | |
| 706 EXPECT_EQ(r[0], STR("one")); | |
| 707 EXPECT_EQ(r[1], STR("two")); | |
| 708 EXPECT_EQ(r[2], STR("three")); | |
| 709 EXPECT_EQ(r[3], STR("four")); | |
| 710 r.clear(); | |
| 711 | |
| 712 size = Tokenize(STR("one, two, three"), STR(","), &r); | |
| 713 EXPECT_EQ(3U, size); | |
| 714 ASSERT_EQ(3U, r.size()); | |
| 715 EXPECT_EQ(r[0], STR("one")); | |
| 716 EXPECT_EQ(r[1], STR(" two")); | |
| 717 EXPECT_EQ(r[2], STR(" three")); | |
| 718 r.clear(); | |
| 719 | |
| 720 size = Tokenize(STR("one, two, three, "), STR(","), &r); | |
| 721 EXPECT_EQ(4U, size); | |
| 722 ASSERT_EQ(4U, r.size()); | |
| 723 EXPECT_EQ(r[0], STR("one")); | |
| 724 EXPECT_EQ(r[1], STR(" two")); | |
| 725 EXPECT_EQ(r[2], STR(" three")); | |
| 726 EXPECT_EQ(r[3], STR(" ")); | |
| 727 r.clear(); | |
| 728 | |
| 729 size = Tokenize(STR("one, two, three,"), STR(","), &r); | |
| 730 EXPECT_EQ(3U, size); | |
| 731 ASSERT_EQ(3U, r.size()); | |
| 732 EXPECT_EQ(r[0], STR("one")); | |
| 733 EXPECT_EQ(r[1], STR(" two")); | |
| 734 EXPECT_EQ(r[2], STR(" three")); | |
| 735 r.clear(); | |
| 736 | |
| 737 size = Tokenize(STR(), STR(","), &r); | |
| 738 EXPECT_EQ(0U, size); | |
| 739 ASSERT_EQ(0U, r.size()); | |
| 740 r.clear(); | |
| 741 | |
| 742 size = Tokenize(STR(","), STR(","), &r); | |
| 743 EXPECT_EQ(0U, size); | |
| 744 ASSERT_EQ(0U, r.size()); | |
| 745 r.clear(); | |
| 746 | |
| 747 size = Tokenize(STR(",;:."), STR(".:;,"), &r); | |
| 748 EXPECT_EQ(0U, size); | |
| 749 ASSERT_EQ(0U, r.size()); | |
| 750 r.clear(); | |
| 751 | |
| 752 size = Tokenize(STR("\t\ta\t"), STR("\t"), &r); | |
| 753 EXPECT_EQ(1U, size); | |
| 754 ASSERT_EQ(1U, r.size()); | |
| 755 EXPECT_EQ(r[0], STR("a")); | |
| 756 r.clear(); | |
| 757 | |
| 758 size = Tokenize(STR("\ta\t\nb\tcc"), STR("\n"), &r); | |
| 759 EXPECT_EQ(2U, size); | |
| 760 ASSERT_EQ(2U, r.size()); | |
| 761 EXPECT_EQ(r[0], STR("\ta\t")); | |
| 762 EXPECT_EQ(r[1], STR("b\tcc")); | |
| 763 r.clear(); | |
| 764 } | |
| 765 | |
| 766 TEST(StringUtilTest, TokenizeStdString) { | |
| 767 TokenizeTest<std::string>(); | |
| 768 } | |
| 769 | |
| 770 TEST(StringUtilTest, TokenizeStringPiece) { | |
| 771 TokenizeTest<StringPiece>(); | |
| 772 } | |
| 773 | |
| 774 // Test for JoinString | |
| 775 TEST(StringUtilTest, JoinString) { | 672 TEST(StringUtilTest, JoinString) { |
| 776 std::vector<std::string> in; | |
| 777 EXPECT_EQ("", JoinString(in, ',')); | |
| 778 | |
| 779 in.push_back("a"); | |
| 780 EXPECT_EQ("a", JoinString(in, ',')); | |
| 781 | |
| 782 in.push_back("b"); | |
| 783 in.push_back("c"); | |
| 784 EXPECT_EQ("a,b,c", JoinString(in, ',')); | |
| 785 | |
| 786 in.push_back(std::string()); | |
| 787 EXPECT_EQ("a,b,c,", JoinString(in, ',')); | |
| 788 in.push_back(" "); | |
| 789 EXPECT_EQ("a|b|c|| ", JoinString(in, '|')); | |
| 790 } | |
| 791 | |
| 792 // Test for JoinString overloaded with std::string separator | |
| 793 TEST(StringUtilTest, JoinStringWithString) { | |
| 794 std::string separator(", "); | 673 std::string separator(", "); |
| 795 std::vector<std::string> parts; | 674 std::vector<std::string> parts; |
| 796 EXPECT_EQ(std::string(), JoinString(parts, separator)); | 675 EXPECT_EQ(std::string(), JoinString(parts, separator)); |
| 797 | 676 |
| 798 parts.push_back("a"); | 677 parts.push_back("a"); |
| 799 EXPECT_EQ("a", JoinString(parts, separator)); | 678 EXPECT_EQ("a", JoinString(parts, separator)); |
| 800 | 679 |
| 801 parts.push_back("b"); | 680 parts.push_back("b"); |
| 802 parts.push_back("c"); | 681 parts.push_back("c"); |
| 803 EXPECT_EQ("a, b, c", JoinString(parts, separator)); | 682 EXPECT_EQ("a, b, c", JoinString(parts, separator)); |
| 804 | 683 |
| 805 parts.push_back(std::string()); | 684 parts.push_back(std::string()); |
| 806 EXPECT_EQ("a, b, c, ", JoinString(parts, separator)); | 685 EXPECT_EQ("a, b, c, ", JoinString(parts, separator)); |
| 807 parts.push_back(" "); | 686 parts.push_back(" "); |
| 808 EXPECT_EQ("a|b|c|| ", JoinString(parts, "|")); | 687 EXPECT_EQ("a|b|c|| ", JoinString(parts, "|")); |
| 809 } | 688 } |
| 810 | 689 |
| 811 // Test for JoinString overloaded with string16 separator | 690 TEST(StringUtilTest, JoinString16) { |
| 812 TEST(StringUtilTest, JoinStringWithString16) { | |
| 813 string16 separator = ASCIIToUTF16(", "); | 691 string16 separator = ASCIIToUTF16(", "); |
| 814 std::vector<string16> parts; | 692 std::vector<string16> parts; |
| 815 EXPECT_EQ(string16(), JoinString(parts, separator)); | 693 EXPECT_EQ(string16(), JoinString(parts, separator)); |
| 816 | 694 |
| 817 parts.push_back(ASCIIToUTF16("a")); | 695 parts.push_back(ASCIIToUTF16("a")); |
| 818 EXPECT_EQ(ASCIIToUTF16("a"), JoinString(parts, separator)); | 696 EXPECT_EQ(ASCIIToUTF16("a"), JoinString(parts, separator)); |
| 819 | 697 |
| 820 parts.push_back(ASCIIToUTF16("b")); | 698 parts.push_back(ASCIIToUTF16("b")); |
| 821 parts.push_back(ASCIIToUTF16("c")); | 699 parts.push_back(ASCIIToUTF16("c")); |
| 822 EXPECT_EQ(ASCIIToUTF16("a, b, c"), JoinString(parts, separator)); | 700 EXPECT_EQ(ASCIIToUTF16("a, b, c"), JoinString(parts, separator)); |
| 823 | 701 |
| 824 parts.push_back(ASCIIToUTF16("")); | 702 parts.push_back(ASCIIToUTF16("")); |
| 825 EXPECT_EQ(ASCIIToUTF16("a, b, c, "), JoinString(parts, separator)); | 703 EXPECT_EQ(ASCIIToUTF16("a, b, c, "), JoinString(parts, separator)); |
| 826 parts.push_back(ASCIIToUTF16(" ")); | 704 parts.push_back(ASCIIToUTF16(" ")); |
| 827 EXPECT_EQ(ASCIIToUTF16("a|b|c|| "), JoinString(parts, ASCIIToUTF16("|"))); | 705 EXPECT_EQ(ASCIIToUTF16("a|b|c|| "), JoinString(parts, ASCIIToUTF16("|"))); |
| 828 } | 706 } |
| 829 | 707 |
| 830 TEST(StringUtilTest, StartsWith) { | 708 TEST(StringUtilTest, StartsWith) { |
| 831 EXPECT_TRUE(StartsWithASCII("javascript:url", "javascript", true)); | 709 EXPECT_TRUE( |
| 832 EXPECT_FALSE(StartsWithASCII("JavaScript:url", "javascript", true)); | 710 StartsWith("javascript:url", "javascript", base::CompareCase::SENSITIVE)); |
| 833 EXPECT_TRUE(StartsWithASCII("javascript:url", "javascript", false)); | 711 EXPECT_FALSE( |
| 834 EXPECT_TRUE(StartsWithASCII("JavaScript:url", "javascript", false)); | 712 StartsWith("JavaScript:url", "javascript", base::CompareCase::SENSITIVE)); |
| 835 EXPECT_FALSE(StartsWithASCII("java", "javascript", true)); | 713 EXPECT_TRUE(StartsWith("javascript:url", "javascript", |
| 836 EXPECT_FALSE(StartsWithASCII("java", "javascript", false)); | 714 base::CompareCase::INSENSITIVE_ASCII)); |
| 837 EXPECT_FALSE(StartsWithASCII(std::string(), "javascript", false)); | 715 EXPECT_TRUE(StartsWith("JavaScript:url", "javascript", |
| 838 EXPECT_FALSE(StartsWithASCII(std::string(), "javascript", true)); | 716 base::CompareCase::INSENSITIVE_ASCII)); |
| 839 EXPECT_TRUE(StartsWithASCII("java", std::string(), false)); | 717 EXPECT_FALSE(StartsWith("java", "javascript", base::CompareCase::SENSITIVE)); |
| 840 EXPECT_TRUE(StartsWithASCII("java", std::string(), true)); | 718 EXPECT_FALSE( |
| 719 StartsWith("java", "javascript", base::CompareCase::INSENSITIVE_ASCII)); |
| 720 EXPECT_FALSE(StartsWith(std::string(), "javascript", |
| 721 base::CompareCase::INSENSITIVE_ASCII)); |
| 722 EXPECT_FALSE( |
| 723 StartsWith(std::string(), "javascript", base::CompareCase::SENSITIVE)); |
| 724 EXPECT_TRUE( |
| 725 StartsWith("java", std::string(), base::CompareCase::INSENSITIVE_ASCII)); |
| 726 EXPECT_TRUE(StartsWith("java", std::string(), base::CompareCase::SENSITIVE)); |
| 841 | 727 |
| 842 EXPECT_TRUE(StartsWith(ASCIIToUTF16("javascript:url"), | 728 EXPECT_TRUE(StartsWith(ASCIIToUTF16("javascript:url"), |
| 843 ASCIIToUTF16("javascript"), true)); | 729 ASCIIToUTF16("javascript"), |
| 730 base::CompareCase::SENSITIVE)); |
| 844 EXPECT_FALSE(StartsWith(ASCIIToUTF16("JavaScript:url"), | 731 EXPECT_FALSE(StartsWith(ASCIIToUTF16("JavaScript:url"), |
| 845 ASCIIToUTF16("javascript"), true)); | 732 ASCIIToUTF16("javascript"), |
| 733 base::CompareCase::SENSITIVE)); |
| 846 EXPECT_TRUE(StartsWith(ASCIIToUTF16("javascript:url"), | 734 EXPECT_TRUE(StartsWith(ASCIIToUTF16("javascript:url"), |
| 847 ASCIIToUTF16("javascript"), false)); | 735 ASCIIToUTF16("javascript"), |
| 736 base::CompareCase::INSENSITIVE_ASCII)); |
| 848 EXPECT_TRUE(StartsWith(ASCIIToUTF16("JavaScript:url"), | 737 EXPECT_TRUE(StartsWith(ASCIIToUTF16("JavaScript:url"), |
| 849 ASCIIToUTF16("javascript"), false)); | 738 ASCIIToUTF16("javascript"), |
| 850 EXPECT_FALSE(StartsWith(ASCIIToUTF16("java"), | 739 base::CompareCase::INSENSITIVE_ASCII)); |
| 851 ASCIIToUTF16("javascript"), true)); | 740 EXPECT_FALSE(StartsWith(ASCIIToUTF16("java"), ASCIIToUTF16("javascript"), |
| 852 EXPECT_FALSE(StartsWith(ASCIIToUTF16("java"), | 741 base::CompareCase::SENSITIVE)); |
| 853 ASCIIToUTF16("javascript"), false)); | 742 EXPECT_FALSE(StartsWith(ASCIIToUTF16("java"), ASCIIToUTF16("javascript"), |
| 854 EXPECT_FALSE(StartsWith(string16(), ASCIIToUTF16("javascript"), false)); | 743 base::CompareCase::INSENSITIVE_ASCII)); |
| 855 EXPECT_FALSE(StartsWith(string16(), ASCIIToUTF16("javascript"), true)); | 744 EXPECT_FALSE(StartsWith(string16(), ASCIIToUTF16("javascript"), |
| 856 EXPECT_TRUE(StartsWith(ASCIIToUTF16("java"), string16(), false)); | 745 base::CompareCase::INSENSITIVE_ASCII)); |
| 857 EXPECT_TRUE(StartsWith(ASCIIToUTF16("java"), string16(), true)); | 746 EXPECT_FALSE(StartsWith(string16(), ASCIIToUTF16("javascript"), |
| 747 base::CompareCase::SENSITIVE)); |
| 748 EXPECT_TRUE(StartsWith(ASCIIToUTF16("java"), string16(), |
| 749 base::CompareCase::INSENSITIVE_ASCII)); |
| 750 EXPECT_TRUE(StartsWith(ASCIIToUTF16("java"), string16(), |
| 751 base::CompareCase::SENSITIVE)); |
| 858 } | 752 } |
| 859 | 753 |
| 860 TEST(StringUtilTest, EndsWith) { | 754 TEST(StringUtilTest, EndsWith) { |
| 861 EXPECT_TRUE(EndsWith(ASCIIToUTF16("Foo.plugin"), | 755 EXPECT_TRUE(EndsWith(ASCIIToUTF16("Foo.plugin"), ASCIIToUTF16(".plugin"), |
| 862 ASCIIToUTF16(".plugin"), true)); | 756 base::CompareCase::SENSITIVE)); |
| 863 EXPECT_FALSE(EndsWith(ASCIIToUTF16("Foo.Plugin"), | 757 EXPECT_FALSE(EndsWith(ASCIIToUTF16("Foo.Plugin"), ASCIIToUTF16(".plugin"), |
| 864 ASCIIToUTF16(".plugin"), true)); | 758 base::CompareCase::SENSITIVE)); |
| 865 EXPECT_TRUE(EndsWith(ASCIIToUTF16("Foo.plugin"), | 759 EXPECT_TRUE(EndsWith(ASCIIToUTF16("Foo.plugin"), ASCIIToUTF16(".plugin"), |
| 866 ASCIIToUTF16(".plugin"), false)); | 760 base::CompareCase::INSENSITIVE_ASCII)); |
| 867 EXPECT_TRUE(EndsWith(ASCIIToUTF16("Foo.Plugin"), | 761 EXPECT_TRUE(EndsWith(ASCIIToUTF16("Foo.Plugin"), ASCIIToUTF16(".plugin"), |
| 868 ASCIIToUTF16(".plugin"), false)); | 762 base::CompareCase::INSENSITIVE_ASCII)); |
| 869 EXPECT_FALSE(EndsWith(ASCIIToUTF16(".plug"), ASCIIToUTF16(".plugin"), true)); | 763 EXPECT_FALSE(EndsWith(ASCIIToUTF16(".plug"), ASCIIToUTF16(".plugin"), |
| 870 EXPECT_FALSE(EndsWith(ASCIIToUTF16(".plug"), ASCIIToUTF16(".plugin"), false)); | 764 base::CompareCase::SENSITIVE)); |
| 871 EXPECT_FALSE(EndsWith(ASCIIToUTF16("Foo.plugin Bar"), | 765 EXPECT_FALSE(EndsWith(ASCIIToUTF16(".plug"), ASCIIToUTF16(".plugin"), |
| 872 ASCIIToUTF16(".plugin"), true)); | 766 base::CompareCase::INSENSITIVE_ASCII)); |
| 873 EXPECT_FALSE(EndsWith(ASCIIToUTF16("Foo.plugin Bar"), | 767 EXPECT_FALSE(EndsWith(ASCIIToUTF16("Foo.plugin Bar"), ASCIIToUTF16(".plugin"), |
| 874 ASCIIToUTF16(".plugin"), false)); | 768 base::CompareCase::SENSITIVE)); |
| 875 EXPECT_FALSE(EndsWith(string16(), ASCIIToUTF16(".plugin"), false)); | 769 EXPECT_FALSE(EndsWith(ASCIIToUTF16("Foo.plugin Bar"), ASCIIToUTF16(".plugin"), |
| 876 EXPECT_FALSE(EndsWith(string16(), ASCIIToUTF16(".plugin"), true)); | 770 base::CompareCase::INSENSITIVE_ASCII)); |
| 877 EXPECT_TRUE(EndsWith(ASCIIToUTF16("Foo.plugin"), string16(), false)); | 771 EXPECT_FALSE(EndsWith(string16(), ASCIIToUTF16(".plugin"), |
| 878 EXPECT_TRUE(EndsWith(ASCIIToUTF16("Foo.plugin"), string16(), true)); | 772 base::CompareCase::INSENSITIVE_ASCII)); |
| 879 EXPECT_TRUE(EndsWith(ASCIIToUTF16(".plugin"), | 773 EXPECT_FALSE(EndsWith(string16(), ASCIIToUTF16(".plugin"), |
| 880 ASCIIToUTF16(".plugin"), false)); | 774 base::CompareCase::SENSITIVE)); |
| 881 EXPECT_TRUE(EndsWith(ASCIIToUTF16(".plugin"), ASCIIToUTF16(".plugin"), true)); | 775 EXPECT_TRUE(EndsWith(ASCIIToUTF16("Foo.plugin"), string16(), |
| 882 EXPECT_TRUE(EndsWith(string16(), string16(), false)); | 776 base::CompareCase::INSENSITIVE_ASCII)); |
| 883 EXPECT_TRUE(EndsWith(string16(), string16(), true)); | 777 EXPECT_TRUE(EndsWith(ASCIIToUTF16("Foo.plugin"), string16(), |
| 778 base::CompareCase::SENSITIVE)); |
| 779 EXPECT_TRUE(EndsWith(ASCIIToUTF16(".plugin"), ASCIIToUTF16(".plugin"), |
| 780 base::CompareCase::INSENSITIVE_ASCII)); |
| 781 EXPECT_TRUE(EndsWith(ASCIIToUTF16(".plugin"), ASCIIToUTF16(".plugin"), |
| 782 base::CompareCase::SENSITIVE)); |
| 783 EXPECT_TRUE( |
| 784 EndsWith(string16(), string16(), base::CompareCase::INSENSITIVE_ASCII)); |
| 785 EXPECT_TRUE(EndsWith(string16(), string16(), base::CompareCase::SENSITIVE)); |
| 884 } | 786 } |
| 885 | 787 |
| 886 TEST(StringUtilTest, GetStringFWithOffsets) { | 788 TEST(StringUtilTest, GetStringFWithOffsets) { |
| 887 std::vector<string16> subst; | 789 std::vector<string16> subst; |
| 888 subst.push_back(ASCIIToUTF16("1")); | 790 subst.push_back(ASCIIToUTF16("1")); |
| 889 subst.push_back(ASCIIToUTF16("2")); | 791 subst.push_back(ASCIIToUTF16("2")); |
| 890 std::vector<size_t> offsets; | 792 std::vector<size_t> offsets; |
| 891 | 793 |
| 892 ReplaceStringPlaceholders(ASCIIToUTF16("Hello, $1. Your number is $2."), | 794 ReplaceStringPlaceholders(ASCIIToUTF16("Hello, $1. Your number is $2."), |
| 893 subst, | 795 subst, |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 987 | 889 |
| 988 TEST(StringUtilTest, ReplaceStringPlaceholdersConsecutiveDollarSigns) { | 890 TEST(StringUtilTest, ReplaceStringPlaceholdersConsecutiveDollarSigns) { |
| 989 std::vector<std::string> subst; | 891 std::vector<std::string> subst; |
| 990 subst.push_back("a"); | 892 subst.push_back("a"); |
| 991 subst.push_back("b"); | 893 subst.push_back("b"); |
| 992 subst.push_back("c"); | 894 subst.push_back("c"); |
| 993 EXPECT_EQ(ReplaceStringPlaceholders("$$1 $$$2 $$$$3", subst, NULL), | 895 EXPECT_EQ(ReplaceStringPlaceholders("$$1 $$$2 $$$$3", subst, NULL), |
| 994 "$1 $$2 $$$3"); | 896 "$1 $$2 $$$3"); |
| 995 } | 897 } |
| 996 | 898 |
| 997 TEST(StringUtilTest, MatchPatternTest) { | |
| 998 EXPECT_TRUE(MatchPattern("www.google.com", "*.com")); | |
| 999 EXPECT_TRUE(MatchPattern("www.google.com", "*")); | |
| 1000 EXPECT_FALSE(MatchPattern("www.google.com", "www*.g*.org")); | |
| 1001 EXPECT_TRUE(MatchPattern("Hello", "H?l?o")); | |
| 1002 EXPECT_FALSE(MatchPattern("www.google.com", "http://*)")); | |
| 1003 EXPECT_FALSE(MatchPattern("www.msn.com", "*.COM")); | |
| 1004 EXPECT_TRUE(MatchPattern("Hello*1234", "He??o\\*1*")); | |
| 1005 EXPECT_FALSE(MatchPattern("", "*.*")); | |
| 1006 EXPECT_TRUE(MatchPattern("", "*")); | |
| 1007 EXPECT_TRUE(MatchPattern("", "?")); | |
| 1008 EXPECT_TRUE(MatchPattern("", "")); | |
| 1009 EXPECT_FALSE(MatchPattern("Hello", "")); | |
| 1010 EXPECT_TRUE(MatchPattern("Hello*", "Hello*")); | |
| 1011 // Stop after a certain recursion depth. | |
| 1012 EXPECT_FALSE(MatchPattern("123456789012345678", "?????????????????*")); | |
| 1013 | |
| 1014 // Test UTF8 matching. | |
| 1015 EXPECT_TRUE(MatchPattern("heart: \xe2\x99\xa0", "*\xe2\x99\xa0")); | |
| 1016 EXPECT_TRUE(MatchPattern("heart: \xe2\x99\xa0.", "heart: ?.")); | |
| 1017 EXPECT_TRUE(MatchPattern("hearts: \xe2\x99\xa0\xe2\x99\xa0", "*")); | |
| 1018 // Invalid sequences should be handled as a single invalid character. | |
| 1019 EXPECT_TRUE(MatchPattern("invalid: \xef\xbf\xbe", "invalid: ?")); | |
| 1020 // If the pattern has invalid characters, it shouldn't match anything. | |
| 1021 EXPECT_FALSE(MatchPattern("\xf4\x90\x80\x80", "\xf4\x90\x80\x80")); | |
| 1022 | |
| 1023 // Test UTF16 character matching. | |
| 1024 EXPECT_TRUE(MatchPattern(UTF8ToUTF16("www.google.com"), | |
| 1025 UTF8ToUTF16("*.com"))); | |
| 1026 EXPECT_TRUE(MatchPattern(UTF8ToUTF16("Hello*1234"), | |
| 1027 UTF8ToUTF16("He??o\\*1*"))); | |
| 1028 | |
| 1029 // This test verifies that consecutive wild cards are collapsed into 1 | |
| 1030 // wildcard (when this doesn't occur, MatchPattern reaches it's maximum | |
| 1031 // recursion depth). | |
| 1032 EXPECT_TRUE(MatchPattern(UTF8ToUTF16("Hello"), | |
| 1033 UTF8ToUTF16("He********************************o"))); | |
| 1034 } | |
| 1035 | |
| 1036 TEST(StringUtilTest, LcpyTest) { | 899 TEST(StringUtilTest, LcpyTest) { |
| 1037 // Test the normal case where we fit in our buffer. | 900 // Test the normal case where we fit in our buffer. |
| 1038 { | 901 { |
| 1039 char dst[10]; | 902 char dst[10]; |
| 1040 wchar_t wdst[10]; | 903 wchar_t wdst[10]; |
| 1041 EXPECT_EQ(7U, strlcpy(dst, "abcdefg", arraysize(dst))); | 904 EXPECT_EQ(7U, strlcpy(dst, "abcdefg", arraysize(dst))); |
| 1042 EXPECT_EQ(0, memcmp(dst, "abcdefg", 8)); | 905 EXPECT_EQ(0, memcmp(dst, "abcdefg", 8)); |
| 1043 EXPECT_EQ(7U, wcslcpy(wdst, L"abcdefg", arraysize(wdst))); | 906 EXPECT_EQ(7U, wcslcpy(wdst, L"abcdefg", arraysize(wdst))); |
| 1044 EXPECT_EQ(0, memcmp(wdst, L"abcdefg", sizeof(wchar_t) * 8)); | 907 EXPECT_EQ(0, memcmp(wdst, L"abcdefg", sizeof(wchar_t) * 8)); |
| 1045 } | 908 } |
| (...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1190 | 1053 |
| 1191 EXPECT_TRUE(ContainsOnlyChars(string16(), kWhitespaceUTF16)); | 1054 EXPECT_TRUE(ContainsOnlyChars(string16(), kWhitespaceUTF16)); |
| 1192 EXPECT_TRUE(ContainsOnlyChars(ASCIIToUTF16(" "), kWhitespaceUTF16)); | 1055 EXPECT_TRUE(ContainsOnlyChars(ASCIIToUTF16(" "), kWhitespaceUTF16)); |
| 1193 EXPECT_TRUE(ContainsOnlyChars(ASCIIToUTF16("\t"), kWhitespaceUTF16)); | 1056 EXPECT_TRUE(ContainsOnlyChars(ASCIIToUTF16("\t"), kWhitespaceUTF16)); |
| 1194 EXPECT_TRUE(ContainsOnlyChars(ASCIIToUTF16("\t \r \n "), kWhitespaceUTF16)); | 1057 EXPECT_TRUE(ContainsOnlyChars(ASCIIToUTF16("\t \r \n "), kWhitespaceUTF16)); |
| 1195 EXPECT_FALSE(ContainsOnlyChars(ASCIIToUTF16("a"), kWhitespaceUTF16)); | 1058 EXPECT_FALSE(ContainsOnlyChars(ASCIIToUTF16("a"), kWhitespaceUTF16)); |
| 1196 EXPECT_FALSE(ContainsOnlyChars(ASCIIToUTF16("\thello\r \n "), | 1059 EXPECT_FALSE(ContainsOnlyChars(ASCIIToUTF16("\thello\r \n "), |
| 1197 kWhitespaceUTF16)); | 1060 kWhitespaceUTF16)); |
| 1198 } | 1061 } |
| 1199 | 1062 |
| 1063 TEST(StringUtilTest, CompareCaseInsensitiveASCII) { |
| 1064 EXPECT_EQ(0, CompareCaseInsensitiveASCII("", "")); |
| 1065 EXPECT_EQ(0, CompareCaseInsensitiveASCII("Asdf", "aSDf")); |
| 1066 |
| 1067 // Differing lengths. |
| 1068 EXPECT_EQ(-1, CompareCaseInsensitiveASCII("Asdf", "aSDfA")); |
| 1069 EXPECT_EQ(1, CompareCaseInsensitiveASCII("AsdfA", "aSDf")); |
| 1070 |
| 1071 // Differing values. |
| 1072 EXPECT_EQ(-1, CompareCaseInsensitiveASCII("AsdfA", "aSDfb")); |
| 1073 EXPECT_EQ(1, CompareCaseInsensitiveASCII("Asdfb", "aSDfA")); |
| 1074 } |
| 1075 |
| 1076 TEST(StringUtilTest, EqualsCaseInsensitiveASCII) { |
| 1077 EXPECT_TRUE(EqualsCaseInsensitiveASCII("", "")); |
| 1078 EXPECT_TRUE(EqualsCaseInsensitiveASCII("Asdf", "aSDF")); |
| 1079 EXPECT_FALSE(EqualsCaseInsensitiveASCII("bsdf", "aSDF")); |
| 1080 EXPECT_FALSE(EqualsCaseInsensitiveASCII("Asdf", "aSDFz")); |
| 1081 } |
| 1082 |
| 1200 class WriteIntoTest : public testing::Test { | 1083 class WriteIntoTest : public testing::Test { |
| 1201 protected: | 1084 protected: |
| 1202 static void WritesCorrectly(size_t num_chars) { | 1085 static void WritesCorrectly(size_t num_chars) { |
| 1203 std::string buffer; | 1086 std::string buffer; |
| 1204 char kOriginal[] = "supercali"; | 1087 char kOriginal[] = "supercali"; |
| 1205 strncpy(WriteInto(&buffer, num_chars + 1), kOriginal, num_chars); | 1088 strncpy(WriteInto(&buffer, num_chars + 1), kOriginal, num_chars); |
| 1206 // Using std::string(buffer.c_str()) instead of |buffer| truncates the | 1089 // Using std::string(buffer.c_str()) instead of |buffer| truncates the |
| 1207 // string at the first \0. | 1090 // string at the first \0. |
| 1208 EXPECT_EQ(std::string(kOriginal, | 1091 EXPECT_EQ(std::string(kOriginal, |
| 1209 std::min(num_chars, arraysize(kOriginal) - 1)), | 1092 std::min(num_chars, arraysize(kOriginal) - 1)), |
| (...skipping 16 matching lines...) Expand all Loading... |
| 1226 const std::string live = kLive; | 1109 const std::string live = kLive; |
| 1227 std::string dead = live; | 1110 std::string dead = live; |
| 1228 strncpy(WriteInto(&dead, 5), kDead, 4); | 1111 strncpy(WriteInto(&dead, 5), kDead, 4); |
| 1229 EXPECT_EQ(kDead, dead); | 1112 EXPECT_EQ(kDead, dead); |
| 1230 EXPECT_EQ(4u, dead.size()); | 1113 EXPECT_EQ(4u, dead.size()); |
| 1231 EXPECT_EQ(kLive, live); | 1114 EXPECT_EQ(kLive, live); |
| 1232 EXPECT_EQ(4u, live.size()); | 1115 EXPECT_EQ(4u, live.size()); |
| 1233 } | 1116 } |
| 1234 | 1117 |
| 1235 } // namespace base | 1118 } // namespace base |
| OLD | NEW |