1b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// Protocol Buffers - Google's data interchange format 2b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// Copyright 2008 Google Inc. All rights reserved. 3b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// https://developers.google.com/protocol-buffers/ 4b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// 5b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// Redistribution and use in source and binary forms, with or without 6b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// modification, are permitted provided that the following conditions are 7b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// met: 8b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// 9b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// * Redistributions of source code must retain the above copyright 10b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// notice, this list of conditions and the following disclaimer. 11b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// * Redistributions in binary form must reproduce the above 12b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// copyright notice, this list of conditions and the following disclaimer 13b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// in the documentation and/or other materials provided with the 14b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// distribution. 15b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// * Neither the name of Google Inc. nor the names of its 16b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// contributors may be used to endorse or promote products derived from 17b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// this software without specific prior written permission. 18b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// 19b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer#include <google/protobuf/stubs/status.h> 31b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 32b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer#include <stdio.h> 33b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 34b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer#include <google/protobuf/testing/googletest.h> 35b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer#include <gtest/gtest.h> 36b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 37b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammernamespace google { 38b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammernamespace protobuf { 39b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammernamespace { 40b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas BerghammerTEST(Status, Empty) { 41b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer util::Status status; 42b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_EQ(util::error::OK, util::Status::OK.error_code()); 43b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_EQ("OK", util::Status::OK.ToString()); 44b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer} 45b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 46b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas BerghammerTEST(Status, GenericCodes) { 47b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_EQ(util::error::OK, util::Status::OK.error_code()); 48b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_EQ(util::error::CANCELLED, util::Status::CANCELLED.error_code()); 49b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_EQ(util::error::UNKNOWN, util::Status::UNKNOWN.error_code()); 50b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer} 51b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 52b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas BerghammerTEST(Status, ConstructorZero) { 53b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer util::Status status(util::error::OK, "msg"); 54b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_TRUE(status.ok()); 55b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_EQ("OK", status.ToString()); 56b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer} 57b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 58b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas BerghammerTEST(Status, CheckOK) { 59b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer util::Status status; 60b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer GOOGLE_CHECK_OK(status); 61b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer GOOGLE_CHECK_OK(status) << "Failed"; 62b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer GOOGLE_DCHECK_OK(status) << "Failed"; 63b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer} 64b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 65b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas BerghammerTEST(Status, ErrorMessage) { 66b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer util::Status status(util::error::INVALID_ARGUMENT, ""); 67b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_FALSE(status.ok()); 68b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_EQ("", status.error_message().ToString()); 69b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_EQ("INVALID_ARGUMENT", status.ToString()); 70b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer status = util::Status(util::error::INVALID_ARGUMENT, "msg"); 71b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_FALSE(status.ok()); 72b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_EQ("msg", status.error_message().ToString()); 73b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_EQ("INVALID_ARGUMENT:msg", status.ToString()); 74b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer status = util::Status(util::error::OK, "msg"); 75b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_TRUE(status.ok()); 76b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_EQ("", status.error_message().ToString()); 77b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_EQ("OK", status.ToString()); 78b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer} 79b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 80b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas BerghammerTEST(Status, Copy) { 81b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer util::Status a(util::error::UNKNOWN, "message"); 82b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer util::Status b(a); 83b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer ASSERT_EQ(a.ToString(), b.ToString()); 84b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer} 85b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 86b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas BerghammerTEST(Status, Assign) { 87b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer util::Status a(util::error::UNKNOWN, "message"); 88b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer util::Status b; 89b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer b = a; 90b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer ASSERT_EQ(a.ToString(), b.ToString()); 91b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer} 92b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 93b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas BerghammerTEST(Status, AssignEmpty) { 94b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer util::Status a(util::error::UNKNOWN, "message"); 95b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer util::Status b; 96b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer a = b; 97b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer ASSERT_EQ(string("OK"), a.ToString()); 98b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer ASSERT_TRUE(b.ok()); 99b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer ASSERT_TRUE(a.ok()); 100b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer} 101b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 102b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas BerghammerTEST(Status, EqualsOK) { 103b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer ASSERT_EQ(util::Status::OK, util::Status()); 104b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer} 105b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 106b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas BerghammerTEST(Status, EqualsSame) { 107b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer const util::Status a = util::Status(util::error::CANCELLED, "message"); 108b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer const util::Status b = util::Status(util::error::CANCELLED, "message"); 109b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer ASSERT_EQ(a, b); 110b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer} 111b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 112b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas BerghammerTEST(Status, EqualsCopy) { 113b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer const util::Status a = util::Status(util::error::CANCELLED, "message"); 114b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer const util::Status b = a; 115b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer ASSERT_EQ(a, b); 116b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer} 117b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 118b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas BerghammerTEST(Status, EqualsDifferentCode) { 119b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer const util::Status a = util::Status(util::error::CANCELLED, "message"); 120b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer const util::Status b = util::Status(util::error::UNKNOWN, "message"); 121b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer ASSERT_NE(a, b); 122b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer} 123b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 124b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas BerghammerTEST(Status, EqualsDifferentMessage) { 125b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer const util::Status a = util::Status(util::error::CANCELLED, "message"); 126b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer const util::Status b = util::Status(util::error::CANCELLED, "another"); 127b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer ASSERT_NE(a, b); 128b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer} 129b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer} // namespace 130b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer} // namespace protobuf 131b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer} // namespace google 132