From 9e14b80e0716c2be71c6100cad7aa7c61ac46c6e Mon Sep 17 00:00:00 2001 From: Gil Date: Tue, 12 Jun 2018 09:36:08 -0700 Subject: Create Status objects from errno (#1374) * Add a portable interface to strerror * Add Status::FromErrno * Add strerror_test.cc to the Xcode project * Use glibc feature selection macros instead of return-type overloads * Fix tensorflow references --- .../test/firebase/firestore/util/CMakeLists.txt | 1 + .../test/firebase/firestore/util/status_test.cc | 23 +++++++++---- .../firebase/firestore/util/status_test_util.h | 32 ++++++++++++++---- .../test/firebase/firestore/util/strerror_test.cc | 39 ++++++++++++++++++++++ 4 files changed, 83 insertions(+), 12 deletions(-) create mode 100644 Firestore/core/test/firebase/firestore/util/strerror_test.cc (limited to 'Firestore/core/test') diff --git a/Firestore/core/test/firebase/firestore/util/CMakeLists.txt b/Firestore/core/test/firebase/firestore/util/CMakeLists.txt index f540d7c..0345f7c 100644 --- a/Firestore/core/test/firebase/firestore/util/CMakeLists.txt +++ b/Firestore/core/test/firebase/firestore/util/CMakeLists.txt @@ -130,6 +130,7 @@ cc_test( status_test.cc status_test_util.h statusor_test.cc + strerror_test.cc string_format_test.cc string_util_test.cc DEPENDS diff --git a/Firestore/core/test/firebase/firestore/util/status_test.cc b/Firestore/core/test/firebase/firestore/util/status_test.cc index e5cb8dc..686272b 100644 --- a/Firestore/core/test/firebase/firestore/util/status_test.cc +++ b/Firestore/core/test/firebase/firestore/util/status_test.cc @@ -16,7 +16,10 @@ #include "Firestore/core/src/firebase/firestore/util/status.h" +#include + #include "Firestore/core/test/firebase/firestore/util/status_test_util.h" +#include "gmock/gmock.h" #include "gtest/gtest.h" namespace firebase { @@ -85,23 +88,31 @@ TEST(Status, EqualsSame) { } TEST(Status, EqualsCopy) { - const Status a(FirestoreErrorCode::InvalidArgument, "Invalid"); - const Status b = a; + Status a(FirestoreErrorCode::InvalidArgument, "Invalid"); + Status b = a; ASSERT_EQ(a, b); } TEST(Status, EqualsDifferentCode) { - const Status a(FirestoreErrorCode::InvalidArgument, "message"); - const Status b(FirestoreErrorCode::Internal, "message"); + Status a(FirestoreErrorCode::InvalidArgument, "message"); + Status b(FirestoreErrorCode::Internal, "message"); ASSERT_NE(a, b); } TEST(Status, EqualsDifferentMessage) { - const Status a(FirestoreErrorCode::InvalidArgument, "message"); - const Status b(FirestoreErrorCode::InvalidArgument, "another"); + Status a(FirestoreErrorCode::InvalidArgument, "message"); + Status b(FirestoreErrorCode::InvalidArgument, "another"); ASSERT_NE(a, b); } +TEST(Status, FromErrno) { + Status a = Status::FromErrno(EEXIST, "Cannot write file"); + ASSERT_THAT( + a.ToString(), + testing::MatchesRegex( + "Already exists: Cannot write file \\(errno .*: File exists\\)")); +} + } // namespace util } // namespace firestore } // namespace firebase diff --git a/Firestore/core/test/firebase/firestore/util/status_test_util.h b/Firestore/core/test/firebase/firestore/util/status_test_util.h index 745f3aa..fcf9135 100644 --- a/Firestore/core/test/firebase/firestore/util/status_test_util.h +++ b/Firestore/core/test/firebase/firestore/util/status_test_util.h @@ -20,16 +20,36 @@ #include "Firestore/core/src/firebase/firestore/util/status.h" #include "gtest/gtest.h" -// Macros for testing the results of functions that return tensorflow::Status. -#define EXPECT_OK(statement) \ - EXPECT_EQ(::firebase::firestore::util::Status::OK(), (statement)) -#define ASSERT_OK(statement) \ - ASSERT_EQ(::firebase::firestore::util::Status::OK(), (statement)) +namespace firebase { +namespace firestore { +namespace util { + +inline testing::AssertionResult Equal(Status expected, Status actual) { + if (expected != actual) { + return testing::AssertionFailure() + << "Should have seen status " << expected.ToString() << " but got " + << actual.ToString(); + } + + return testing::AssertionSuccess(); +} + +} // namespace util +} // namespace firestore +} // namespace firebase + +// Macros for testing the results of functions that return util::Status. +#define EXPECT_OK(statement) \ + EXPECT_TRUE(::firebase::firestore::util::Equal( \ + ::firebase::firestore::util::Status::OK(), (statement))); +#define ASSERT_OK(statement) \ + ASSERT_TRUE(::firebase::firestore::util::Equal( \ + ::firebase::firestore::util::Status::OK(), (statement))); // There are no EXPECT_NOT_OK/ASSERT_NOT_OK macros since they would not // provide much value (when they fail, they would just print the OK status // which conveys no more information than EXPECT_FALSE(status.ok()); // If you want to check for particular errors, a better alternative is: -// EXPECT_EQ(..expected tensorflow::error::Code..., status.code()); +// EXPECT_EQ(..expected FirestoreErrorCode..., status.code()); #endif // FIRESTORE_CORE_TEST_FIREBASE_FIRESTORE_UTIL_STATUS_TEST_UTIL_H_ diff --git a/Firestore/core/test/firebase/firestore/util/strerror_test.cc b/Firestore/core/test/firebase/firestore/util/strerror_test.cc new file mode 100644 index 0000000..854cb08 --- /dev/null +++ b/Firestore/core/test/firebase/firestore/util/strerror_test.cc @@ -0,0 +1,39 @@ +/* + * Copyright 2018 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "Firestore/core/src/firebase/firestore/util/strerror.h" + +#include "gtest/gtest.h" + +namespace firebase { +namespace firestore { +namespace util { + +TEST(StrErrorTest, ValidErrorCode) { + errno = EAGAIN; + EXPECT_EQ(StrError(EINTR), strerror(EINTR)); + EXPECT_EQ(errno, EAGAIN); +} + +TEST(StrErrorTest, InvalidErrorCode) { + errno = EBUSY; + EXPECT_EQ(StrError(-1), "Unknown error -1"); + EXPECT_EQ(errno, EBUSY); +} + +} // namespace util +} // namespace firestore +} // namespace firebase -- cgit v1.2.3