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

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

Issue 2733473002: Added regression test for base::JoinString given a null StringPiece. (Closed)
Patch Set: Created 3 years, 9 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 #include <stddef.h> 9 #include <stddef.h>
10 #include <stdint.h> 10 #include <stdint.h>
(...skipping 658 matching lines...) Expand 10 before | Expand all | Expand 10 after
669 EXPECT_EQ(13, HexDigitToInt('d')); 669 EXPECT_EQ(13, HexDigitToInt('d'));
670 EXPECT_EQ(14, HexDigitToInt('e')); 670 EXPECT_EQ(14, HexDigitToInt('e'));
671 EXPECT_EQ(15, HexDigitToInt('f')); 671 EXPECT_EQ(15, HexDigitToInt('f'));
672 } 672 }
673 673
674 TEST(StringUtilTest, JoinString) { 674 TEST(StringUtilTest, JoinString) {
675 std::string separator(", "); 675 std::string separator(", ");
676 std::vector<std::string> parts; 676 std::vector<std::string> parts;
677 EXPECT_EQ(std::string(), JoinString(parts, separator)); 677 EXPECT_EQ(std::string(), JoinString(parts, separator));
678 678
679 parts.push_back(std::string());
680 EXPECT_EQ(std::string(), JoinString(parts, separator));
681 parts.clear();
682
679 parts.push_back("a"); 683 parts.push_back("a");
680 EXPECT_EQ("a", JoinString(parts, separator)); 684 EXPECT_EQ("a", JoinString(parts, separator));
681 685
682 parts.push_back("b"); 686 parts.push_back("b");
683 parts.push_back("c"); 687 parts.push_back("c");
684 EXPECT_EQ("a, b, c", JoinString(parts, separator)); 688 EXPECT_EQ("a, b, c", JoinString(parts, separator));
685 689
686 parts.push_back(std::string()); 690 parts.push_back(std::string());
687 EXPECT_EQ("a, b, c, ", JoinString(parts, separator)); 691 EXPECT_EQ("a, b, c, ", JoinString(parts, separator));
688 parts.push_back(" "); 692 parts.push_back(" ");
689 EXPECT_EQ("a|b|c|| ", JoinString(parts, "|")); 693 EXPECT_EQ("a|b|c|| ", JoinString(parts, "|"));
690 } 694 }
691 695
692 TEST(StringUtilTest, JoinString16) { 696 TEST(StringUtilTest, JoinString16) {
693 string16 separator = ASCIIToUTF16(", "); 697 string16 separator = ASCIIToUTF16(", ");
694 std::vector<string16> parts; 698 std::vector<string16> parts;
695 EXPECT_EQ(string16(), JoinString(parts, separator)); 699 EXPECT_EQ(string16(), JoinString(parts, separator));
696 700
701 parts.push_back(string16());
702 EXPECT_EQ(string16(), JoinString(parts, separator));
703 parts.clear();
704
697 parts.push_back(ASCIIToUTF16("a")); 705 parts.push_back(ASCIIToUTF16("a"));
698 EXPECT_EQ(ASCIIToUTF16("a"), JoinString(parts, separator)); 706 EXPECT_EQ(ASCIIToUTF16("a"), JoinString(parts, separator));
699 707
700 parts.push_back(ASCIIToUTF16("b")); 708 parts.push_back(ASCIIToUTF16("b"));
701 parts.push_back(ASCIIToUTF16("c")); 709 parts.push_back(ASCIIToUTF16("c"));
702 EXPECT_EQ(ASCIIToUTF16("a, b, c"), JoinString(parts, separator)); 710 EXPECT_EQ(ASCIIToUTF16("a, b, c"), JoinString(parts, separator));
703 711
704 parts.push_back(ASCIIToUTF16("")); 712 parts.push_back(ASCIIToUTF16(""));
705 EXPECT_EQ(ASCIIToUTF16("a, b, c, "), JoinString(parts, separator)); 713 EXPECT_EQ(ASCIIToUTF16("a, b, c, "), JoinString(parts, separator));
706 parts.push_back(ASCIIToUTF16(" ")); 714 parts.push_back(ASCIIToUTF16(" "));
707 EXPECT_EQ(ASCIIToUTF16("a|b|c|| "), JoinString(parts, ASCIIToUTF16("|"))); 715 EXPECT_EQ(ASCIIToUTF16("a|b|c|| "), JoinString(parts, ASCIIToUTF16("|")));
708 } 716 }
709 717
710 TEST(StringUtilTest, JoinStringPiece) { 718 TEST(StringUtilTest, JoinStringPiece) {
711 std::string separator(", "); 719 std::string separator(", ");
712 std::vector<base::StringPiece> parts; 720 std::vector<StringPiece> parts;
713 EXPECT_EQ(base::StringPiece(), JoinString(parts, separator)); 721 EXPECT_EQ(std::string(), JoinString(parts, separator));
722
723 // Test empty first part (https://crbug.com/698073).
724 parts.push_back(StringPiece());
725 EXPECT_EQ(std::string(), JoinString(parts, separator));
726 parts.clear();
714 727
715 parts.push_back("a"); 728 parts.push_back("a");
716 EXPECT_EQ("a", JoinString(parts, separator)); 729 EXPECT_EQ("a", JoinString(parts, separator));
717 730
718 parts.push_back("b"); 731 parts.push_back("b");
719 parts.push_back("c"); 732 parts.push_back("c");
720 EXPECT_EQ("a, b, c", JoinString(parts, separator)); 733 EXPECT_EQ("a, b, c", JoinString(parts, separator));
721 734
722 parts.push_back(base::StringPiece()); 735 parts.push_back(StringPiece());
723 EXPECT_EQ("a, b, c, ", JoinString(parts, separator)); 736 EXPECT_EQ("a, b, c, ", JoinString(parts, separator));
724 parts.push_back(" "); 737 parts.push_back(" ");
725 EXPECT_EQ("a|b|c|| ", JoinString(parts, "|")); 738 EXPECT_EQ("a|b|c|| ", JoinString(parts, "|"));
726 } 739 }
727 740
728 TEST(StringUtilTest, JoinStringPiece16) { 741 TEST(StringUtilTest, JoinStringPiece16) {
729 string16 separator = ASCIIToUTF16(", "); 742 string16 separator = ASCIIToUTF16(", ");
730 std::vector<base::StringPiece16> parts; 743 std::vector<StringPiece16> parts;
731 EXPECT_EQ(base::StringPiece16(), JoinString(parts, separator)); 744 EXPECT_EQ(string16(), JoinString(parts, separator));
745
746 // Test empty first part (https://crbug.com/698073).
747 parts.push_back(StringPiece16());
748 EXPECT_EQ(string16(), JoinString(parts, separator));
749 parts.clear();
732 750
733 const string16 kA = ASCIIToUTF16("a"); 751 const string16 kA = ASCIIToUTF16("a");
734 parts.push_back(kA); 752 parts.push_back(kA);
735 EXPECT_EQ(ASCIIToUTF16("a"), JoinString(parts, separator)); 753 EXPECT_EQ(ASCIIToUTF16("a"), JoinString(parts, separator));
736 754
737 const string16 kB = ASCIIToUTF16("b"); 755 const string16 kB = ASCIIToUTF16("b");
738 parts.push_back(kB); 756 parts.push_back(kB);
739 const string16 kC = ASCIIToUTF16("c"); 757 const string16 kC = ASCIIToUTF16("c");
740 parts.push_back(kC); 758 parts.push_back(kC);
741 EXPECT_EQ(ASCIIToUTF16("a, b, c"), JoinString(parts, separator)); 759 EXPECT_EQ(ASCIIToUTF16("a, b, c"), JoinString(parts, separator));
742 760
743 parts.push_back(base::StringPiece16()); 761 parts.push_back(StringPiece16());
744 EXPECT_EQ(ASCIIToUTF16("a, b, c, "), JoinString(parts, separator)); 762 EXPECT_EQ(ASCIIToUTF16("a, b, c, "), JoinString(parts, separator));
745 const string16 kSpace = ASCIIToUTF16(" "); 763 const string16 kSpace = ASCIIToUTF16(" ");
746 parts.push_back(kSpace); 764 parts.push_back(kSpace);
747 EXPECT_EQ(ASCIIToUTF16("a|b|c|| "), JoinString(parts, ASCIIToUTF16("|"))); 765 EXPECT_EQ(ASCIIToUTF16("a|b|c|| "), JoinString(parts, ASCIIToUTF16("|")));
748 } 766 }
749 767
750 TEST(StringUtilTest, JoinStringInitializerList) { 768 TEST(StringUtilTest, JoinStringInitializerList) {
751 std::string separator(", "); 769 std::string separator(", ");
752 EXPECT_EQ(base::StringPiece(), JoinString({}, separator)); 770 EXPECT_EQ(std::string(), JoinString({}, separator));
771
772 // Test empty first part (https://crbug.com/698073).
773 EXPECT_EQ(std::string(), JoinString({StringPiece()}, separator));
753 774
754 // With const char*s. 775 // With const char*s.
755 EXPECT_EQ("a", JoinString({"a"}, separator)); 776 EXPECT_EQ("a", JoinString({"a"}, separator));
756 EXPECT_EQ("a, b, c", JoinString({"a", "b", "c"}, separator)); 777 EXPECT_EQ("a, b, c", JoinString({"a", "b", "c"}, separator));
757 EXPECT_EQ("a, b, c, ", JoinString({"a", "b", "c", ""}, separator)); 778 EXPECT_EQ("a, b, c, ", JoinString({"a", "b", "c", StringPiece()}, separator));
758 EXPECT_EQ("a|b|c|| ", JoinString({"a", "b", "c", "", " "}, "|")); 779 EXPECT_EQ("a|b|c|| ", JoinString({"a", "b", "c", StringPiece(), " "}, "|"));
759 780
760 // With std::strings. 781 // With std::strings.
761 const std::string kA = "a"; 782 const std::string kA = "a";
762 const std::string kB = "b"; 783 const std::string kB = "b";
763 EXPECT_EQ("a, b", JoinString({kA, kB}, separator)); 784 EXPECT_EQ("a, b", JoinString({kA, kB}, separator));
764 785
765 // With StringPieces. 786 // With StringPieces.
766 const StringPiece kPieceA = kA; 787 const StringPiece kPieceA = kA;
767 const StringPiece kPieceB = kB; 788 const StringPiece kPieceB = kB;
768 EXPECT_EQ("a, b", JoinString({kPieceA, kPieceB}, separator)); 789 EXPECT_EQ("a, b", JoinString({kPieceA, kPieceB}, separator));
769 } 790 }
770 791
771 TEST(StringUtilTest, JoinStringInitializerList16) { 792 TEST(StringUtilTest, JoinStringInitializerList16) {
772 string16 separator = ASCIIToUTF16(", "); 793 string16 separator = ASCIIToUTF16(", ");
773 EXPECT_EQ(base::StringPiece16(), JoinString({}, separator)); 794 EXPECT_EQ(string16(), JoinString({}, separator));
795
796 // Test empty first part (https://crbug.com/698073).
797 EXPECT_EQ(string16(), JoinString({StringPiece16()}, separator));
774 798
775 // With string16s. 799 // With string16s.
776 const string16 kA = ASCIIToUTF16("a"); 800 const string16 kA = ASCIIToUTF16("a");
777 EXPECT_EQ(ASCIIToUTF16("a"), JoinString({kA}, separator)); 801 EXPECT_EQ(ASCIIToUTF16("a"), JoinString({kA}, separator));
778 802
779 const string16 kB = ASCIIToUTF16("b"); 803 const string16 kB = ASCIIToUTF16("b");
780 const string16 kC = ASCIIToUTF16("c"); 804 const string16 kC = ASCIIToUTF16("c");
781 EXPECT_EQ(ASCIIToUTF16("a, b, c"), JoinString({kA, kB, kC}, separator)); 805 EXPECT_EQ(ASCIIToUTF16("a, b, c"), JoinString({kA, kB, kC}, separator));
782 806
783 const string16 kEmpty = ASCIIToUTF16("");
784 EXPECT_EQ(ASCIIToUTF16("a, b, c, "), 807 EXPECT_EQ(ASCIIToUTF16("a, b, c, "),
785 JoinString({kA, kB, kC, kEmpty}, separator)); 808 JoinString({kA, kB, kC, StringPiece16()}, separator));
dcheng 2017/03/03 09:11:08 This doesn't seem quite equivalent, though I'm OK
Matt Giuca 2017/03/06 02:39:57 It's not equivalent; I deliberately changed it to
786 const string16 kSpace = ASCIIToUTF16(" "); 809 const string16 kSpace = ASCIIToUTF16(" ");
787 EXPECT_EQ(ASCIIToUTF16("a|b|c|| "), 810 EXPECT_EQ(
788 JoinString({kA, kB, kC, kEmpty, kSpace}, ASCIIToUTF16("|"))); 811 ASCIIToUTF16("a|b|c|| "),
812 JoinString({kA, kB, kC, StringPiece16(), kSpace}, ASCIIToUTF16("|")));
789 813
790 // With StringPiece16s. 814 // With StringPiece16s.
791 const StringPiece16 kPieceA = kA; 815 const StringPiece16 kPieceA = kA;
792 const StringPiece16 kPieceB = kB; 816 const StringPiece16 kPieceB = kB;
793 EXPECT_EQ(ASCIIToUTF16("a, b"), JoinString({kPieceA, kPieceB}, separator)); 817 EXPECT_EQ(ASCIIToUTF16("a, b"), JoinString({kPieceA, kPieceB}, separator));
794 } 818 }
795 819
796 TEST(StringUtilTest, StartsWith) { 820 TEST(StringUtilTest, StartsWith) {
797 EXPECT_TRUE(StartsWith("javascript:url", "javascript", 821 EXPECT_TRUE(StartsWith("javascript:url", "javascript",
798 base::CompareCase::SENSITIVE)); 822 base::CompareCase::SENSITIVE));
(...skipping 408 matching lines...) Expand 10 before | Expand all | Expand 10 after
1207 const std::string live = kLive; 1231 const std::string live = kLive;
1208 std::string dead = live; 1232 std::string dead = live;
1209 strncpy(WriteInto(&dead, 5), kDead, 4); 1233 strncpy(WriteInto(&dead, 5), kDead, 4);
1210 EXPECT_EQ(kDead, dead); 1234 EXPECT_EQ(kDead, dead);
1211 EXPECT_EQ(4u, dead.size()); 1235 EXPECT_EQ(4u, dead.size());
1212 EXPECT_EQ(kLive, live); 1236 EXPECT_EQ(kLive, live);
1213 EXPECT_EQ(4u, live.size()); 1237 EXPECT_EQ(4u, live.size());
1214 } 1238 }
1215 1239
1216 } // namespace base 1240 } // namespace base
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698