| // Copyright 2019 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "src/developer/debug/zxdb/common/err_or.h" |
| |
| #include <gtest/gtest.h> |
| |
| namespace zxdb { |
| |
| // This mostly tests that things compile. There is also a set of errors that assert which might |
| // be nice to death test but we don't do those. |
| |
| TEST(ErrOr, Basic) { |
| ErrOr<int> err_or_int = 5; |
| EXPECT_FALSE(err_or_int.has_error()); |
| EXPECT_TRUE(err_or_int.ok()); |
| EXPECT_TRUE(err_or_int); |
| |
| EXPECT_EQ(5, err_or_int.value()); |
| EXPECT_EQ(5, err_or_int.value()); // Above getter should not have mutated. |
| EXPECT_EQ(5, err_or_int.value_or_empty()); |
| EXPECT_EQ(Err(), err_or_int.err_or_empty()); |
| |
| // Error case. |
| err_or_int = Err("bad"); |
| EXPECT_TRUE(err_or_int.has_error()); |
| EXPECT_FALSE(err_or_int.ok()); |
| EXPECT_FALSE(err_or_int); |
| |
| EXPECT_EQ("bad", err_or_int.err().msg()); |
| EXPECT_EQ(0, err_or_int.value_or_empty()); |
| |
| // Owning a more complex object. |
| ErrOr<std::unique_ptr<int>> err_or_ptr = std::make_unique<int>(6); |
| EXPECT_FALSE(err_or_ptr.has_error()); |
| EXPECT_TRUE(err_or_ptr.ok()); |
| |
| // Test moving out. |
| auto ptr = err_or_ptr.take_value_or_empty(); |
| EXPECT_EQ(6, *ptr); |
| EXPECT_FALSE(err_or_ptr.value().get()); |
| } |
| |
| } // namespace zxdb |