// Copyright 2013 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.

#include "net/websockets/websocket_errors.h"

#include "net/base/net_errors.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace net {
namespace {

// Confirm that the principle classes of errors are converted correctly. We
// don't exhaustively test every error code, as it would be long, repetitive,
// and add little value.
TEST(WebSocketErrorToNetErrorTest, ResultsAreCorrect) {
  EXPECT_THAT(WebSocketErrorToNetError(kWebSocketNormalClosure), net::OK);
  EXPECT_EQ(ERR_WS_PROTOCOL_ERROR,
            WebSocketErrorToNetError(kWebSocketErrorProtocolError));
  EXPECT_EQ(ERR_MSG_TOO_BIG,
            WebSocketErrorToNetError(kWebSocketErrorMessageTooBig));
  EXPECT_EQ(ERR_CONNECTION_CLOSED,
            WebSocketErrorToNetError(kWebSocketErrorNoStatusReceived));
  EXPECT_EQ(ERR_SSL_PROTOCOL_ERROR,
            WebSocketErrorToNetError(kWebSocketErrorTlsHandshake));
}

}  // namespace
}  // namespace net
