// Copyright (c) 2012 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.

#ifndef PPAPI_TESTS_TEST_WEBSOCKET_H_
#define PPAPI_TESTS_TEST_WEBSOCKET_H_

#include <stdint.h>

#include <string>
#include <vector>

#include "ppapi/c/ppb_core.h"
#include "ppapi/c/ppb_var.h"
#include "ppapi/c/ppb_var_array_buffer.h"
#include "ppapi/c/ppb_websocket.h"
#include "ppapi/tests/test_case.h"

class TestWebSocket : public TestCase {
 public:
  explicit TestWebSocket(TestingInstance* instance) : TestCase(instance) {}

 private:
  // TestCase implementation.
  virtual bool Init();
  virtual void RunTests(const std::string& filter);

  std::string GetFullURL(const char* url);
  PP_Var CreateVarString(const std::string& string);
  PP_Var CreateVarBinary(const std::vector<uint8_t>& binary);
  void ReleaseVar(const PP_Var& var);
  bool AreEqualWithString(const PP_Var& var, const std::string& string);
  bool AreEqualWithBinary(const PP_Var& var,
                          const std::vector<uint8_t>& binary);

  PP_Resource Connect(const std::string& url,
                      int32_t* result,
                      const std::string& protocol);

  void Send(int32_t result, PP_Resource ws, const std::string& message);

  std::string TestIsWebSocket();
  std::string TestUninitializedPropertiesAccess();
  std::string TestInvalidConnect();
  std::string TestProtocols();
  std::string TestGetURL();
  std::string TestValidConnect();
  std::string TestInvalidClose();
  std::string TestValidClose();
  std::string TestGetProtocol();
  std::string TestTextSendReceive();
  std::string TestTextSendReceiveTwice();
  std::string TestBinarySendReceive();
  std::string TestStressedSendReceive();
  std::string TestBufferedAmount();
  std::string TestAbortCallsWithCallback();
  std::string TestAbortSendMessageCall();
  std::string TestAbortCloseCall();
  std::string TestAbortReceiveMessageCall();
  std::string TestClosedFromServerWhileSending();

  std::string TestCcInterfaces();

  std::string TestUtilityInvalidConnect();
  std::string TestUtilityProtocols();
  std::string TestUtilityGetURL();
  std::string TestUtilityValidConnect();
  std::string TestUtilityInvalidClose();
  std::string TestUtilityValidClose();
  std::string TestUtilityGetProtocol();
  std::string TestUtilityTextSendReceive();
  std::string TestUtilityBinarySendReceive();
  std::string TestUtilityBufferedAmount();

  // Keeps Pepper API interfaces. These are used by the tests that access the C
  // API directly.
  const PPB_WebSocket* websocket_interface_;
  const PPB_Var* var_interface_;
  const PPB_VarArrayBuffer* arraybuffer_interface_;
  const PPB_Core* core_interface_;
};

#endif  // PPAPI_TESTS_TEST_WEBSOCKET_H_
