/*
 * Copyright (c) Huawei Technologies Co., Ltd. 2025-2025. All rights reserved.
 */
#include <filesystem>
#include <iostream>
#include <memory>
#include <vector>

#include <unistd.h>

#include <gtest/gtest.h>
#include <mockcpp/GlobalMockObject.h>
#include <mockcpp/mockcpp.hpp>

#include "optimizer/analyzer/base_analyzer.h"
#include "optimizer/analyzer/cpu_bound_analyzer.h"
#include "optimizer/analyzer/io_bound_analyzer.h"
#include "optimizer/analyzer/irq_anomaly_analyzer.h"
#include "optimizer/opt_engine.h"
#include "optimizer/util/ui_manager.h"

TEST(OPTEngineTest, RUNCase1)
{
    std::vector<std::unique_ptr<BaseAnalyzer<DataStr>>> analyzers;
    analyzers.push_back(std::make_unique<CPUBoundAnalyzer>());
    analyzers.push_back(std::make_unique<IOBoundAnalyzer>());
    analyzers.push_back(std::make_unique<IRQAnomalyAnalyzer>());

    OPTEngine engine(std::move(analyzers));
    std::vector<std::string> data;
    data.push_back("123");
    std::set<size_t> orig;
    MOCKER(&UIManager::displaySuggestions).stubs().with(any()).will(returnValue(nullptr));
    MOCKER(&UIManager::getUserSelection).stubs().with(any()).will(returnValue(orig));
    engine.run(data);
}

TEST(OPTEngineTest, RUNCase2)
{
    std::vector<std::unique_ptr<BaseAnalyzer<DataStr>>> analyzers;

    OPTEngine engine(std::move(analyzers));
    std::vector<std::string> data;
    data.push_back("123");
    engine.run(data);
}