// 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 <stdint.h>
#include <zircon/status.h>

#include <zxtest/zxtest.h>

namespace {

TEST(StatusString, AllOfEm) {
  EXPECT_STR_EQ(zx_status_get_string(ZX_OK), "ZX_OK");                                // (0)
  EXPECT_STR_EQ(zx_status_get_string(ZX_ERR_INTERNAL), "ZX_ERR_INTERNAL");            // (-1)
  EXPECT_STR_EQ(zx_status_get_string(ZX_ERR_NOT_SUPPORTED), "ZX_ERR_NOT_SUPPORTED");  // (-2)
  EXPECT_STR_EQ(zx_status_get_string(ZX_ERR_NO_RESOURCES), "ZX_ERR_NO_RESOURCES");    //  (-3)
  EXPECT_STR_EQ(zx_status_get_string(ZX_ERR_NO_MEMORY), "ZX_ERR_NO_MEMORY");          //  (-4)
  EXPECT_STR_EQ(zx_status_get_string(-5), "(UNKNOWN)");
  EXPECT_STR_EQ(zx_status_get_string(ZX_ERR_INTERNAL_INTR_RETRY),
                "ZX_ERR_INTERNAL_INTR_RETRY");  //  (-6)
  EXPECT_STR_EQ(zx_status_get_string(-7), "(UNKNOWN)");
  EXPECT_STR_EQ(zx_status_get_string(-8), "(UNKNOWN)");
  EXPECT_STR_EQ(zx_status_get_string(-9), "(UNKNOWN)");
  EXPECT_STR_EQ(zx_status_get_string(ZX_ERR_INVALID_ARGS), "ZX_ERR_INVALID_ARGS");  //  (-10)
  EXPECT_STR_EQ(zx_status_get_string(ZX_ERR_BAD_HANDLE), "ZX_ERR_BAD_HANDLE");      //  (-11)
  EXPECT_STR_EQ(zx_status_get_string(ZX_ERR_WRONG_TYPE), "ZX_ERR_WRONG_TYPE");      //  (-12)
  EXPECT_STR_EQ(zx_status_get_string(ZX_ERR_BAD_SYSCALL), "ZX_ERR_BAD_SYSCALL");    //  (-13)
  EXPECT_STR_EQ(zx_status_get_string(ZX_ERR_OUT_OF_RANGE), "ZX_ERR_OUT_OF_RANGE");  //  (-14)
  EXPECT_STR_EQ(zx_status_get_string(ZX_ERR_BUFFER_TOO_SMALL),
                "ZX_ERR_BUFFER_TOO_SMALL");  //  (-15)
  EXPECT_STR_EQ(zx_status_get_string(-16), "(UNKNOWN)");
  EXPECT_STR_EQ(zx_status_get_string(-17), "(UNKNOWN)");
  EXPECT_STR_EQ(zx_status_get_string(-18), "(UNKNOWN)");
  EXPECT_STR_EQ(zx_status_get_string(-19), "(UNKNOWN)");
  EXPECT_STR_EQ(zx_status_get_string(ZX_ERR_BAD_STATE), "ZX_ERR_BAD_STATE");            //  (-20)
  EXPECT_STR_EQ(zx_status_get_string(ZX_ERR_TIMED_OUT), "ZX_ERR_TIMED_OUT");            //  (-21)
  EXPECT_STR_EQ(zx_status_get_string(ZX_ERR_SHOULD_WAIT), "ZX_ERR_SHOULD_WAIT");        //  (-22)
  EXPECT_STR_EQ(zx_status_get_string(ZX_ERR_CANCELED), "ZX_ERR_CANCELED");              //  (-23)
  EXPECT_STR_EQ(zx_status_get_string(ZX_ERR_PEER_CLOSED), "ZX_ERR_PEER_CLOSED");        //  (-24)
  EXPECT_STR_EQ(zx_status_get_string(ZX_ERR_NOT_FOUND), "ZX_ERR_NOT_FOUND");            //  (-25)
  EXPECT_STR_EQ(zx_status_get_string(ZX_ERR_ALREADY_EXISTS), "ZX_ERR_ALREADY_EXISTS");  //  (-26)
  EXPECT_STR_EQ(zx_status_get_string(ZX_ERR_ALREADY_BOUND), "ZX_ERR_ALREADY_BOUND");    //  (-27)
  EXPECT_STR_EQ(zx_status_get_string(ZX_ERR_UNAVAILABLE), "ZX_ERR_UNAVAILABLE");        //  (-28)
  EXPECT_STR_EQ(zx_status_get_string(-29), "(UNKNOWN)");                                //  (-29)
  EXPECT_STR_EQ(zx_status_get_string(ZX_ERR_ACCESS_DENIED), "ZX_ERR_ACCESS_DENIED");    //  (-30)
  EXPECT_STR_EQ(zx_status_get_string(-31), "(UNKNOWN)");
  EXPECT_STR_EQ(zx_status_get_string(-32), "(UNKNOWN)");
  EXPECT_STR_EQ(zx_status_get_string(-33), "(UNKNOWN)");
  EXPECT_STR_EQ(zx_status_get_string(-34), "(UNKNOWN)");
  EXPECT_STR_EQ(zx_status_get_string(-35), "(UNKNOWN)");
  EXPECT_STR_EQ(zx_status_get_string(-36), "(UNKNOWN)");
  EXPECT_STR_EQ(zx_status_get_string(-37), "(UNKNOWN)");
  EXPECT_STR_EQ(zx_status_get_string(-38), "(UNKNOWN)");
  EXPECT_STR_EQ(zx_status_get_string(-39), "(UNKNOWN)");
  EXPECT_STR_EQ(zx_status_get_string(ZX_ERR_IO), "ZX_ERR_IO");                  //  (-40)
  EXPECT_STR_EQ(zx_status_get_string(ZX_ERR_IO_REFUSED), "ZX_ERR_IO_REFUSED");  //  (-41)
  EXPECT_STR_EQ(zx_status_get_string(ZX_ERR_IO_DATA_INTEGRITY),
                "ZX_ERR_IO_DATA_INTEGRITY");                                            //  (-42)
  EXPECT_STR_EQ(zx_status_get_string(ZX_ERR_IO_DATA_LOSS), "ZX_ERR_IO_DATA_LOSS");      //  (-43)
  EXPECT_STR_EQ(zx_status_get_string(ZX_ERR_IO_NOT_PRESENT), "ZX_ERR_IO_NOT_PRESENT");  //  (-44)
  EXPECT_STR_EQ(zx_status_get_string(ZX_ERR_IO_OVERRUN), "ZX_ERR_IO_OVERRUN");          //  (-45)
  EXPECT_STR_EQ(zx_status_get_string(ZX_ERR_IO_MISSED_DEADLINE),
                "ZX_ERR_IO_MISSED_DEADLINE");                                   //  (-46)
  EXPECT_STR_EQ(zx_status_get_string(ZX_ERR_IO_INVALID), "ZX_ERR_IO_INVALID");  //  (-47)
  EXPECT_STR_EQ(zx_status_get_string(-48), "(UNKNOWN)");
  EXPECT_STR_EQ(zx_status_get_string(-49), "(UNKNOWN)");
  EXPECT_STR_EQ(zx_status_get_string(ZX_ERR_BAD_PATH), "ZX_ERR_BAD_PATH");    //  (-50)
  EXPECT_STR_EQ(zx_status_get_string(ZX_ERR_NOT_DIR), "ZX_ERR_NOT_DIR");      //  (-51)
  EXPECT_STR_EQ(zx_status_get_string(ZX_ERR_NOT_FILE), "ZX_ERR_NOT_FILE");    //  (-52)
  EXPECT_STR_EQ(zx_status_get_string(ZX_ERR_FILE_BIG), "ZX_ERR_FILE_BIG");    //  (-53)
  EXPECT_STR_EQ(zx_status_get_string(ZX_ERR_NO_SPACE), "ZX_ERR_NO_SPACE");    //  (-54)
  EXPECT_STR_EQ(zx_status_get_string(ZX_ERR_NOT_EMPTY), "ZX_ERR_NOT_EMPTY");  //  (-55)
  EXPECT_STR_EQ(zx_status_get_string(-56), "(UNKNOWN)");
  EXPECT_STR_EQ(zx_status_get_string(-57), "(UNKNOWN)");
  EXPECT_STR_EQ(zx_status_get_string(-58), "(UNKNOWN)");
  EXPECT_STR_EQ(zx_status_get_string(-59), "(UNKNOWN)");
  EXPECT_STR_EQ(zx_status_get_string(ZX_ERR_STOP), "ZX_ERR_STOP");    //  (-60)
  EXPECT_STR_EQ(zx_status_get_string(ZX_ERR_NEXT), "ZX_ERR_NEXT");    //  (-61)
  EXPECT_STR_EQ(zx_status_get_string(ZX_ERR_ASYNC), "ZX_ERR_ASYNC");  //  (-62)
  EXPECT_STR_EQ(zx_status_get_string(-63), "(UNKNOWN)");
  EXPECT_STR_EQ(zx_status_get_string(-64), "(UNKNOWN)");
  EXPECT_STR_EQ(zx_status_get_string(-65), "(UNKNOWN)");
  EXPECT_STR_EQ(zx_status_get_string(-66), "(UNKNOWN)");
  EXPECT_STR_EQ(zx_status_get_string(-67), "(UNKNOWN)");
  EXPECT_STR_EQ(zx_status_get_string(-68), "(UNKNOWN)");
  EXPECT_STR_EQ(zx_status_get_string(-69), "(UNKNOWN)");
  EXPECT_STR_EQ(zx_status_get_string(ZX_ERR_PROTOCOL_NOT_SUPPORTED),
                "ZX_ERR_PROTOCOL_NOT_SUPPORTED");  //  (-70)
  EXPECT_STR_EQ(zx_status_get_string(ZX_ERR_ADDRESS_UNREACHABLE),
                "ZX_ERR_ADDRESS_UNREACHABLE");                                          //  (-71)
  EXPECT_STR_EQ(zx_status_get_string(ZX_ERR_ADDRESS_IN_USE), "ZX_ERR_ADDRESS_IN_USE");  //  (-72)
  EXPECT_STR_EQ(zx_status_get_string(ZX_ERR_NOT_CONNECTED), "ZX_ERR_NOT_CONNECTED");    //  (-73)
  EXPECT_STR_EQ(zx_status_get_string(ZX_ERR_CONNECTION_REFUSED),
                "ZX_ERR_CONNECTION_REFUSED");  //  (-74)
  EXPECT_STR_EQ(zx_status_get_string(ZX_ERR_CONNECTION_RESET),
                "ZX_ERR_CONNECTION_RESET");  //  (-75)
  EXPECT_STR_EQ(zx_status_get_string(ZX_ERR_CONNECTION_ABORTED),
                "ZX_ERR_CONNECTION_ABORTED");  //  (-76)

  // One past our current last-known should be unknown (note that all errors
  // are negative, so -1, not +1).
  ASSERT_NOT_NULL(zx_status_get_string(ZX_ERR_CONNECTION_ABORTED - 1));
  EXPECT_STR_EQ(zx_status_get_string(ZX_ERR_CONNECTION_ABORTED - 1), "(UNKNOWN)");

  EXPECT_STR_EQ(zx_status_get_string(INT32_MIN), "(UNKNOWN)");
  EXPECT_STR_EQ(zx_status_get_string(INT32_MAX), "(UNKNOWN)");
}

}  // namespace
