/*
* Copyright (c) 2025 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.
*/
import { hilog } from '@kit.PerformanceAnalysisKit';
import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium';
import { abilityDelegatorRegistry, BY, Driver, ON } from '@kit.TestKit';
import { UIAbility, Want } from '@kit.AbilityKit';
const delegator: abilityDelegatorRegistry.AbilityDelegator = abilityDelegatorRegistry.getAbilityDelegator();
const bundleName = abilityDelegatorRegistry.getArguments().bundleName;
let want: Want;
export default function KeyEventTest() {
describe('KeyEventTest', () => {
beforeAll(async () => {
want = {
bundleName: bundleName,
abilityName: 'EntryAbility'
};
await delegator.startAbility(want);
let driver = Driver.create();
await driver.delayMs(1000);
const ability: UIAbility = await delegator.getCurrentTopAbility();
console.info('get top ability');
expect(ability.context.abilityInfo.name).assertEqual('EntryAbility');
})
beforeEach(async () => {
let driver = Driver.create();
await driver.delayMs(1000);
})
afterEach(() => {
hilog.info(0x0000, 'KeyEventTest', 'Key event test case completed');
})
afterAll(() => {
hilog.info(0x0000, 'KeyEventTest', 'All key event tests completed');
})
/**
* @tc.number KeyEvent_001
* @tc.name testButton1KeyEvent
* @tc.desc 测试Button1按键事件 - 滑动到Button1,点击获焦,按键A,验证颜色变化
*/
it('testButton1KeyEvent', 0, async (done: Function) => {
hilog.info(0x0000, 'KeyEventTest', 'testButton1KeyEvent begin');
let driver = Driver.create();
await driver.delayMs(1000);
try {
// 滑动到Button1的位置
const scroll = await driver.findComponent(ON.id('testScroll'));
await scroll.scrollSearch(ON.id('testKeyEvent'));
await driver.delayMs(500);
// 点击Button1获取焦点
const button1 = await driver.findComponent(ON.id('Button1'));
await button1.click();
await driver.delayMs(1000);
// 验证Button1获得焦点后的颜色变化(焦点状态下的颜色)
let strJson = getInspectorByKey('Button1');
let obj: ESObject = JSON.parse(strJson);
hilog.info(0x0000, 'KeyEventTest', 'Button1 focus backgroundColor: %{public}s', obj.$attrs.backgroundColor);
// 焦点状态下应该是更亮的蓝色 0xFF2E86DE
expect(obj.$attrs.backgroundColor).assertEqual('#FF2E86DE');
// 按键A,验证按键事件处理
await driver.triggerKey(2017); // KEY_A
await driver.delayMs(1000);
// 验证按键事件处理后Button1变浅红色
strJson = getInspectorByKey('Button1');
obj = JSON.parse(strJson);
hilog.info(0x0000, 'KeyEventTest', 'Button1 after key A backgroundColor: %{public}s', obj.$attrs.backgroundColor);
expect(obj.$attrs.backgroundColor).assertEqual('#FFFFEBEE');
} catch (error) {
hilog.error(0x0000, 'KeyEventTest', 'testButton1KeyEvent failed: %{public}s', error.message);
expect().assertFail();
}
hilog.info(0x0000, 'KeyEventTest', 'testButton1KeyEvent end');
done();
})
/**
* @tc.number KeyEvent_002
* @tc.name testButton2PreIME
* @tc.desc 测试Button2预输入法按键事件 - Button2获焦,测试PreIme事件类型
*/
it('testButton2PreIME', 0, async (done: Function) => {
hilog.info(0x0000, 'KeyEventTest', 'testButton2PreIME begin');
let driver = Driver.create();
await driver.delayMs(1000);
try {
// 滑动到测试区域
const scroll = await driver.findComponent(ON.id('testScroll'));
await scroll.scrollSearch(ON.id('testKeyEvent'));
await driver.delayMs(1500);
// 点击Button2获取焦点
const button2 = await driver.findComponent(ON.id('Button2'));
await button2.click();
await driver.delayMs(1000);
// 验证Button2获得焦点后的颜色变化
let strJson = getInspectorByKey('Button2');
let obj: ESObject = JSON.parse(strJson);
hilog.info(0x0000, 'KeyEventTest', 'Button2 focus backgroundColor: %{public}s', obj.$attrs.backgroundColor);
expect(obj.$attrs.backgroundColor).assertEqual('#FF2E86DE');
// 按键B测试PreIME事件
await driver.triggerKey(2018); // KEY_B
await driver.delayMs(1000);
// 验证PreIME事件处理后Button2变浅红色
strJson = getInspectorByKey('Button2');
obj = JSON.parse(strJson);
hilog.info(0x0000, 'KeyEventTest', 'Button2 after key B backgroundColor: %{public}s', obj.$attrs.backgroundColor);
expect(obj.$attrs.backgroundColor).assertEqual('#FFFFEBEE');
} catch (error) {
hilog.error(0x0000, 'KeyEventTest', 'testButton2PreIME failed: %{public}s', error.message);
expect().assertFail();
}
hilog.info(0x0000, 'KeyEventTest', 'testButton2PreIME end');
done();
})
/**
* @tc.number KeyEvent_003
* @tc.name testButton3Dispatch
* @tc.desc 测试Button3分发按键事件 - Button3获焦,测试Dispatch事件类型
*/
it('testButton3Dispatch', 0, async (done: Function) => {
hilog.info(0x0000, 'KeyEventTest', 'testButton3Dispatch begin');
let driver = Driver.create();
await driver.delayMs(1000);
try {
// 滑动到测试区域
const scroll = await driver.findComponent(ON.id('testScroll'));
await scroll.scrollSearch(ON.id('testKeyEvent'));
await driver.delayMs(500);
// 点击Button3获取焦点
const button3 = await driver.findComponent(ON.id('Button3'));
await button3.click();
await driver.delayMs(1000);
// 验证Button3获得焦点后的颜色变化
let strJson = getInspectorByKey('Button3');
let obj: ESObject = JSON.parse(strJson);
hilog.info(0x0000, 'KeyEventTest', 'Button3 focus backgroundColor: %{public}s', obj.$attrs.backgroundColor);
expect(obj.$attrs.backgroundColor).assertEqual('#FF2E86DE');
// 按键C测试Dispatch事件
await driver.triggerKey(2019); // KEY_C
await driver.delayMs(1000);
// 验证Dispatch事件处理后Button3变浅红色
strJson = getInspectorByKey('Button3');
obj = JSON.parse(strJson);
hilog.info(0x0000, 'KeyEventTest', 'Button3 after key C backgroundColor: %{public}s', obj.$attrs.backgroundColor);
expect(obj.$attrs.backgroundColor).assertEqual('#FFFFEBEE');
} catch (error) {
hilog.error(0x0000, 'KeyEventTest', 'testButton3Dispatch failed: %{public}s', error.message);
expect().assertFail();
}
hilog.info(0x0000, 'KeyEventTest', 'testButton3Dispatch end');
done();
})
/**
* @tc.number KeyEvent_004
* @tc.name testButton4EventControl
* @tc.desc 测试Button4事件控制 - Button4获焦,测试ESC、F1和A键,验证父组件颜色变化
*/
it('testButton4EventControl', 0, async (done: Function) => {
hilog.info(0x0000, 'KeyEventTest', 'testButton4EventControl begin');
let driver = Driver.create();
await driver.delayMs(1000);
try {
// 滑动到测试区域
const scroll = await driver.findComponent(ON.id('testScroll'));
await scroll.scrollSearch(ON.id('testKeyEvent'));
await driver.delayMs(500);
// 点击Button4获取焦点
const button4 = await driver.findComponent(ON.id('Button4'));
await button4.click();
await driver.delayMs(1000);
// 验证Button4获得焦点后的颜色变化
let strJson = getInspectorByKey('Button4');
let obj: ESObject = JSON.parse(strJson);
hilog.info(0x0000, 'KeyEventTest', 'Button4 focus backgroundColor: %{public}s', obj.$attrs.backgroundColor);
expect(obj.$attrs.backgroundColor).assertEqual('#FF2E86DE');
// 测试ESC键 - 应该被消费,父组件不变色
await driver.triggerKey(2070); // ESC键
await driver.delayMs(1000);
// 父组件背景色应该保持正常状态 0xFFE8F5E8
strJson = getInspectorByKey('parentColumn');
obj = JSON.parse(strJson);
hilog.info(0x0000, 'KeyEventTest', 'Button4 focus backgroundColor: %{public}s', obj.$attrs.backgroundColor);
expect(obj.$attrs.backgroundColor).assertEqual('#FF2E86DE');
hilog.info(0x0000, 'KeyEventTest', 'After ESC key - parent should not change color');
// 测试F1键 - 应该阻止传播,父组件不变色
await driver.triggerKey(2090); // F1键
await driver.delayMs(1000);
// 父组件背景色应该保持正常状态 0xFFE8F5E8
strJson = getInspectorByKey('parentColumn');
obj = JSON.parse(strJson);
hilog.info(0x0000, 'KeyEventTest', 'Button4 focus backgroundColor: %{public}s', obj.$attrs.backgroundColor);
expect(obj.$attrs.backgroundColor).assertEqual('#FF2E86DE');
hilog.info(0x0000, 'KeyEventTest', 'After F1 key - parent should not change color');
// 测试A键 - 应该正常传播,父组件变色
await driver.triggerKey(2017); // KEY_A
await driver.delayMs(1000);
strJson = getInspectorByKey('parentColumn');
obj = JSON.parse(strJson);
hilog.info(0x0000, 'KeyEventTest', 'Button4 focus backgroundColor: %{public}s', obj.$attrs.backgroundColor);
expect(obj.$attrs.backgroundColor).assertEqual('#FFFFEBEE');
hilog.info(0x0000, 'KeyEventTest', 'After A key - parent should change color');
} catch (error) {
hilog.error(0x0000, 'KeyEventTest', 'testButton4EventControl failed: %{public}s', error.message);
expect().assertFail();
}
hilog.info(0x0000, 'KeyEventTest', 'testButton4EventControl end');
done();
})
})
}