import { describe, it, expect } from "@normalized:N&&&@ohos/hypium/index&1.0.25";
import { HarmonyWebViewPool } from "@normalized:N&&&tencentqianwebview/src/main/ets/internal/prewarm/HarmonyWebViewPool&1.0.0";
/**
 * 鸿蒙离屏复用池状态单测（对齐 Android WebViewPoolRenderProcessGoneTest 的作废维度）。
 *
 * 覆盖 fix：`invalidate()`（预热态/归还态作废并销毁）与 `unpoolBorrowed()`（借出态崩溃只脱池、
 * 不销毁活节点）在各池状态下的安全性与幂等性。
 *
 * 说明：真实建池需 `UIContext` + `BuilderNode`（单测环境不可用），故这里只覆盖
 * 「无实例池」的状态机路径——这也正是 `invalidate()` 作废后应达到的终态：
 * `obtain` 返回 null（→ 容器自建），`isInUse` 为 false，可重复调用不崩溃。
 * 真实建池/借出/崩溃的端到端行为由真机 case 文档覆盖。
 */
export default function harmonyWebViewPoolTest() {
    describe('HarmonyWebViewPool', () => {
        it('invalidate_onEmptyPool_isSafe', 0, () => {
            // 空池作废不崩溃，终态：无实例、未借出
            HarmonyWebViewPool.release();
            HarmonyWebViewPool.invalidate();
            expect(HarmonyWebViewPool.isInUse()).assertFalse();
            expect(HarmonyWebViewPool.obtain(false, '') === null).assertTrue();
        });
        it('invalidate_isIdempotent', 0, () => {
            // 重复作废幂等，不崩溃
            HarmonyWebViewPool.release();
            HarmonyWebViewPool.invalidate();
            HarmonyWebViewPool.invalidate();
            expect(HarmonyWebViewPool.obtain(false, '') === null).assertTrue();
        });
        it('invalidate_clearsPool_obtainReturnsNull', 0, () => {
            // 作废后 obtain 恒返回 null（→ 容器自建），杜绝僵尸实例复用
            HarmonyWebViewPool.release();
            HarmonyWebViewPool.invalidate();
            // 任意 UA 配置组合都拿不到实例（池已空）
            expect(HarmonyWebViewPool.obtain(true, '') === null).assertTrue();
            expect(HarmonyWebViewPool.obtain(false, 'x') === null).assertTrue();
        });
        it('unpoolBorrowed_onEmptyPool_isSafe', 0, () => {
            // 空池脱池不崩溃，终态：未借出、obtain 返回 null
            HarmonyWebViewPool.release();
            HarmonyWebViewPool.unpoolBorrowed();
            expect(HarmonyWebViewPool.isInUse()).assertFalse();
            expect(HarmonyWebViewPool.obtain(false, '') === null).assertTrue();
        });
        it('unpoolBorrowed_isIdempotent', 0, () => {
            // 重复脱池幂等，不崩溃
            HarmonyWebViewPool.release();
            HarmonyWebViewPool.unpoolBorrowed();
            HarmonyWebViewPool.unpoolBorrowed();
            expect(HarmonyWebViewPool.obtain(false, '') === null).assertTrue();
        });
        it('unpoolBorrowed_clearsPool_obtainReturnsNull', 0, () => {
            // 脱池后 obtain 恒返回 null（→ 新 open 自建），杜绝崩溃后的僵尸实例被复用
            HarmonyWebViewPool.release();
            HarmonyWebViewPool.unpoolBorrowed();
            expect(HarmonyWebViewPool.obtain(true, '') === null).assertTrue();
            expect(HarmonyWebViewPool.obtain(false, 'x') === null).assertTrue();
        });
        it('setEnabledFalse_releasesPool', 0, () => {
            // 禁用池会 release，obtain 恒 null
            HarmonyWebViewPool.setEnabled(false);
            expect(HarmonyWebViewPool.obtain(false, '') === null).assertTrue();
            // 复位，避免影响其它用例
            HarmonyWebViewPool.setEnabled(true);
        });
    });
}
