123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- #include <config.h>
- #include <apt-pkg/error.h>
- #include <stddef.h>
- #include <string>
- #include <errno.h>
- #include <string.h>
- #include <gtest/gtest.h>
- TEST(GlobalErrorTest,BasicDiscard)
- {
- GlobalError e;
- EXPECT_TRUE(e.empty());
- EXPECT_FALSE(e.PendingError());
- EXPECT_FALSE(e.Notice("%s Notice", "A"));
- EXPECT_TRUE(e.empty());
- EXPECT_FALSE(e.empty(GlobalError::DEBUG));
- EXPECT_FALSE(e.PendingError());
- EXPECT_FALSE(e.Error("%s horrible %s %d times", "Something", "happened", 2));
- EXPECT_TRUE(e.PendingError());
- std::string text;
- EXPECT_FALSE(e.PopMessage(text));
- EXPECT_TRUE(e.PendingError());
- EXPECT_EQ("A Notice", text);
- EXPECT_TRUE(e.PopMessage(text));
- EXPECT_EQ("Something horrible happened 2 times", text);
- EXPECT_TRUE(e.empty(GlobalError::DEBUG));
- EXPECT_FALSE(e.PendingError());
- EXPECT_FALSE(e.Error("%s horrible %s %d times", "Something", "happened", 2));
- EXPECT_TRUE(e.PendingError());
- EXPECT_FALSE(e.empty(GlobalError::FATAL));
- e.Discard();
- EXPECT_TRUE(e.empty());
- EXPECT_FALSE(e.PendingError());
- }
- TEST(GlobalErrorTest,StackPushing)
- {
- GlobalError e;
- EXPECT_FALSE(e.Notice("%s Notice", "A"));
- EXPECT_FALSE(e.Error("%s horrible %s %d times", "Something", "happened", 2));
- EXPECT_TRUE(e.PendingError());
- EXPECT_FALSE(e.empty(GlobalError::NOTICE));
- e.PushToStack();
- EXPECT_TRUE(e.empty(GlobalError::NOTICE));
- EXPECT_FALSE(e.PendingError());
- EXPECT_FALSE(e.Warning("%s Warning", "A"));
- EXPECT_TRUE(e.empty(GlobalError::ERROR));
- EXPECT_FALSE(e.PendingError());
- e.RevertToStack();
- EXPECT_FALSE(e.empty(GlobalError::ERROR));
- EXPECT_TRUE(e.PendingError());
- std::string text;
- EXPECT_FALSE(e.PopMessage(text));
- EXPECT_TRUE(e.PendingError());
- EXPECT_EQ("A Notice", text);
- EXPECT_TRUE(e.PopMessage(text));
- EXPECT_EQ("Something horrible happened 2 times", text);
- EXPECT_FALSE(e.PendingError());
- EXPECT_TRUE(e.empty());
- EXPECT_FALSE(e.Notice("%s Notice", "A"));
- EXPECT_FALSE(e.Error("%s horrible %s %d times", "Something", "happened", 2));
- EXPECT_TRUE(e.PendingError());
- EXPECT_FALSE(e.empty(GlobalError::NOTICE));
- e.PushToStack();
- EXPECT_TRUE(e.empty(GlobalError::NOTICE));
- EXPECT_FALSE(e.PendingError());
- EXPECT_FALSE(e.Warning("%s Warning", "A"));
- EXPECT_TRUE(e.empty(GlobalError::ERROR));
- EXPECT_FALSE(e.PendingError());
- e.MergeWithStack();
- EXPECT_FALSE(e.empty(GlobalError::ERROR));
- EXPECT_TRUE(e.PendingError());
- EXPECT_FALSE(e.PopMessage(text));
- EXPECT_TRUE(e.PendingError());
- EXPECT_EQ("A Notice", text);
- EXPECT_TRUE(e.PopMessage(text));
- EXPECT_EQ("Something horrible happened 2 times", text);
- EXPECT_FALSE(e.PendingError());
- EXPECT_FALSE(e.empty());
- EXPECT_FALSE(e.PopMessage(text));
- EXPECT_EQ("A Warning", text);
- EXPECT_TRUE(e.empty());
- }
- TEST(GlobalErrorTest,Errno)
- {
- GlobalError e;
- std::string const textOfErrnoZero(strerror(0));
- errno = 0;
- EXPECT_FALSE(e.Errno("errno", "%s horrible %s %d times", "Something", "happened", 2));
- EXPECT_FALSE(e.empty());
- EXPECT_TRUE(e.PendingError());
- std::string text;
- EXPECT_TRUE(e.PopMessage(text));
- EXPECT_FALSE(e.PendingError());
- EXPECT_EQ(std::string("Something horrible happened 2 times - errno (0: ").append(textOfErrnoZero).append(")"), text);
- EXPECT_TRUE(e.empty());
- }
- TEST(GlobalErrorTest,LongMessage)
- {
- GlobalError e;
- std::string const textOfErrnoZero(strerror(0));
- errno = 0;
- std::string text, longText;
- for (size_t i = 0; i < 500; ++i)
- longText.append("a");
- EXPECT_FALSE(e.Error("%s horrible %s %d times", longText.c_str(), "happened", 2));
- EXPECT_TRUE(e.PopMessage(text));
- EXPECT_EQ(std::string(longText).append(" horrible happened 2 times"), text);
- EXPECT_FALSE(e.Errno("errno", "%s horrible %s %d times", longText.c_str(), "happened", 2));
- EXPECT_TRUE(e.PopMessage(text));
- EXPECT_EQ(std::string(longText).append(" horrible happened 2 times - errno (0: ").append(textOfErrnoZero).append(")"), text);
- EXPECT_FALSE(e.Error("%s horrible %s %d times", longText.c_str(), "happened", 2));
- std::ostringstream out;
- e.DumpErrors(out);
- EXPECT_EQ(std::string("E: ").append(longText).append(" horrible happened 2 times\n"), out.str());
- EXPECT_FALSE(e.Errno("errno", "%s horrible %s %d times", longText.c_str(), "happened", 2));
- std::ostringstream out2;
- e.DumpErrors(out2);
- EXPECT_EQ(std::string("E: ").append(longText).append(" horrible happened 2 times - errno (0: ").append(textOfErrnoZero).append(")\n"), out2.str());
- }
- TEST(GlobalErrorTest,UTF8Message)
- {
- GlobalError e;
- std::string text;
- EXPECT_FALSE(e.Warning("Репозиторий не обновлён и будут %d %s", 4, "test"));
- EXPECT_FALSE(e.PopMessage(text));
- EXPECT_EQ("Репозиторий не обновлён и будут 4 test", text);
- EXPECT_FALSE(e.Warning("Репозиторий не обновлён и будут %d %s", 4, "test"));
- std::ostringstream out;
- e.DumpErrors(out);
- EXPECT_EQ("W: Репозиторий не обновлён и будут 4 test\n", out.str());
- std::string longText;
- for (size_t i = 0; i < 50; ++i)
- longText.append("РезийбёбAZ");
- EXPECT_FALSE(e.Warning("%s", longText.c_str()));
- EXPECT_FALSE(e.PopMessage(text));
- EXPECT_EQ(longText, text);
- }
- TEST(GlobalErrorTest,MultiLineMessage)
- {
- GlobalError e;
- std::string text;
- EXPECT_FALSE(e.Warning("Sometimes one line isn't enough.\nYou do know what I mean, right?\r\n%s?\rGood because I don't.", "Right"));
- EXPECT_FALSE(e.PopMessage(text));
- EXPECT_EQ("Sometimes one line isn't enough.\nYou do know what I mean, right?\r\nRight?\rGood because I don't.", text);
- EXPECT_FALSE(e.Warning("Sometimes one line isn't enough.\nYou do know what I mean, right?\r\n%s?\rGood because I don't.", "Right"));
- std::ostringstream out;
- e.DumpErrors(out);
- EXPECT_EQ("W: Sometimes one line isn't enough.\n You do know what I mean, right?\n Right?\n Good because I don't.\n", out.str());
- EXPECT_FALSE(e.Warning("Sometimes one line isn't enough.\nYou do know what I mean, right?\r\n%s?\rGood because I don't.\n", "Right"));
- std::ostringstream out2;
- e.DumpErrors(out2);
- EXPECT_EQ("W: Sometimes one line isn't enough.\n You do know what I mean, right?\n Right?\n Good because I don't.\n", out2.str());
- }
|