// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// This file tests the C result API (the macros declared in
// mojo/public/c/include/mojo/result.h).

#include <mojo/result.h>

#include "gtest/gtest.h"

namespace {

TEST(ResultTest, Macros) {
  EXPECT_EQ(0x12345678u, MOJO_RESULT_MAKE(static_cast<MojoResult>(0x8u),
                                          static_cast<MojoResult>(0x1234u),
                                          static_cast<MojoResult>(0x567u)));
  EXPECT_EQ(0x8u, MOJO_RESULT_GET_CODE(static_cast<MojoResult>(0x12345678u)));
  EXPECT_EQ(0x1234u,
            MOJO_RESULT_GET_SPACE(static_cast<MojoResult>(0x12345678u)));
  EXPECT_EQ(0x567u,
            MOJO_RESULT_GET_SUBCODE(static_cast<MojoResult>(0x12345678u)));

  EXPECT_EQ(0xfedcfedfu, MOJO_RESULT_MAKE(static_cast<MojoResult>(0xfu),
                                          static_cast<MojoResult>(0xfedcu),
                                          static_cast<MojoResult>(0xfedu)));
  EXPECT_EQ(0xfu, MOJO_RESULT_GET_CODE(static_cast<MojoResult>(0xfedcfedfu)));
  EXPECT_EQ(0xfedcu,
            MOJO_RESULT_GET_SPACE(static_cast<MojoResult>(0xfedcfedfu)));
  EXPECT_EQ(0xfedu,
            MOJO_RESULT_GET_SUBCODE(static_cast<MojoResult>(0xfedcfedfu)));
}

TEST(ResultTest, CompleteResultMacros) {
  EXPECT_EQ(0x0u, MOJO_RESULT_OK);
  EXPECT_EQ(0x1u, MOJO_RESULT_CANCELLED);
  EXPECT_EQ(0x2u, MOJO_RESULT_UNKNOWN);
  EXPECT_EQ(0x3u, MOJO_RESULT_INVALID_ARGUMENT);
  EXPECT_EQ(0x4u, MOJO_RESULT_DEADLINE_EXCEEDED);
  EXPECT_EQ(0x5u, MOJO_RESULT_NOT_FOUND);
  EXPECT_EQ(0x6u, MOJO_RESULT_ALREADY_EXISTS);
  EXPECT_EQ(0x7u, MOJO_RESULT_PERMISSION_DENIED);
  EXPECT_EQ(0x8u, MOJO_RESULT_RESOURCE_EXHAUSTED);
  EXPECT_EQ(0x9u, MOJO_RESULT_FAILED_PRECONDITION);
  EXPECT_EQ(0xau, MOJO_RESULT_ABORTED);
  EXPECT_EQ(0xbu, MOJO_RESULT_OUT_OF_RANGE);
  EXPECT_EQ(0xcu, MOJO_RESULT_UNIMPLEMENTED);
  EXPECT_EQ(0xdu, MOJO_RESULT_INTERNAL);
  EXPECT_EQ(0xeu, MOJO_RESULT_UNAVAILABLE);
  EXPECT_EQ(0xfu, MOJO_RESULT_DATA_LOSS);
  EXPECT_EQ(0x0019u, MOJO_RESULT_BUSY);
  EXPECT_EQ(0x001eu, MOJO_RESULT_SHOULD_WAIT);
}

}  // namespace
