blob: 2cfceca75a0e5a275155b379176435f967a987ef [file] [log] [blame]
// 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 "intel-hda/utils/status_or.h"
#include <zircon/errors.h>
#include <string>
#include <zxtest/zxtest.h>
#include "fbl/alloc_checker.h"
namespace audio::intel_hda {
namespace {
TEST(StatusOr, DefaultConstructed) {
StatusOr<int> s;
EXPECT_FALSE(s.ok());
EXPECT_EQ(s.status().code(), ZX_ERR_INTERNAL);
}
TEST(StatusOr, Value) {
StatusOr<int> s{3};
EXPECT_TRUE(s.ok());
EXPECT_TRUE(s.status().ok());
EXPECT_EQ(3, s.ValueOrDie());
}
StatusOr<int> Return3() { return 3; }
TEST(StatusOr, ImplicitValueConversion) { EXPECT_EQ(Return3().ValueOrDie(), 3); }
StatusOr<int> ReturnError() { return Status{ZX_ERR_ACCESS_DENIED, "no entry"}; }
TEST(StatusOr, ImplicitStatusConversion) {
StatusOr<int> result = ReturnError();
EXPECT_EQ(result.status().code(), ZX_ERR_ACCESS_DENIED);
EXPECT_EQ(result.status().message(), "no entry");
}
TEST(StatusOr, StatusOrStatusOrIntValue) {
StatusOr<StatusOr<int>> s{3};
EXPECT_EQ(s.ValueOrDie().ValueOrDie(), 3);
}
TEST(StatusOr, StatusOrStatusOrIntError) {
StatusOr<StatusOr<int>> s{StatusOr<int>{Status(ZX_ERR_ACCESS_DENIED)}};
EXPECT_EQ(s.ValueOrDie().status().code(), ZX_ERR_ACCESS_DENIED);
}
TEST(StatusOr, UniquePtr) {
auto ptr = std::make_unique<int>(3);
StatusOr<std::unique_ptr<int>> value(std::move(ptr));
EXPECT_EQ(*value.ValueOrDie(), 3);
auto ptr2 = value.ConsumeValueOrDie();
EXPECT_EQ(*ptr2, 3);
}
TEST(StatusOr, BadAccess) {
auto bad_access = []() {
StatusOr<int> s = Status(ZX_ERR_BAD_PATH);
(void)s.ValueOrDie();
};
ASSERT_DEATH(bad_access, "Expected ValueOrDie to kill process.");
}
TEST(StatusOr, BadConsume) {
auto bad_access = []() {
StatusOr<int> s = Status(ZX_ERR_BAD_PATH);
(void)s.ConsumeValueOrDie();
};
ASSERT_DEATH(bad_access, "Expected ValueOrDie to kill process.");
}
} // namespace
} // namespace audio::intel_hda