/*
 * Copyright (c) 2021 Huawei Device Co., Ltd.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef OHOS_ACELITE_BASIC_TDD_TEST_CONSTANTS_H
#define OHOS_ACELITE_BASIC_TDD_TEST_CONSTANTS_H

#ifdef TDD_ASSERTIONS
#include <climits>
#include <gtest/gtest.h>
#else
#include <typeinfo.h>
#endif
#include "component.h"
#include "dock/screen_device_proxy.h"
#include "test_common.h"
#include "window/window.h"
#include "wrapper/js.h"

namespace OHOS {
namespace ACELite {
#ifdef TDD_ASSERTIONS
using namespace std;
using namespace testing::ext;
class BasicTddTest : public testing::Test {
#else
class BasicTddTest {
#endif
public:
    BasicTddTest();
    virtual ~BasicTddTest();
    static void SetUpTestCase(void);
    static void TearDownTestCase(void);
    void SetUp();
    void TearDown();

protected:
    JSValue RunJS(const char *bundle, const uint32_t size) const;
    JSValue CreatePage(const char *bundle, const uint32_t size);
    void DestroyPage(JSValue page);
    UIView *GetViewByRef(JSValue page, const char *ref) const;
    void ClickByRef(JSValue page, const char *ref, uint8_t sleepTicks = 50) const;
    void LongPressByRef(JSValue page, const char *ref, uint8_t sleepTicks = 200) const;
    void Click(const UIView *view, uint8_t sleepTicks = 50) const;
    void LongPress(const UIView *view, uint8_t sleepTicks = 200) const;
    void Click(int16_t x, int16_t y, uint8_t sleepTicks = 50) const;
    void LongPress(int16_t x, int16_t y, uint8_t sleepTicks = 200) const;
    void Swipe(int16_t startX, int16_t startY, int16_t endX, int16_t endY, uint8_t sleepTicks = 150) const;
    uint8_t GetChildrenSize(const UIViewGroup &grop) const;

private:
    static void *TickHandler(void *args);
    static ScreenDevice *display_;
    static Window *window_;
    static pthread_t tickThread_;
    static bool isTickTaskRunning_;
    void CallLifecycle(JSValue page, const char *lifecycle) const;

    Component *rootComponent_;
};
} // namespace ACELite
} // namespace OHOS
#endif // OHOS_ACELITE_BASIC_TDD_TEST_CONSTANTS_H