diff --git a/mock/ohos.ability_access_ctrl.cj b/mock/ohos.ability_access_ctrl.cj index bceeaae..35f211e 100644 --- a/mock/ohos.ability_access_ctrl.cj +++ b/mock/ohos.ability_access_ctrl.cj @@ -23,37 +23,62 @@ import ohos.security.permission_request_result.* public type Permissions = String -@!APILevel[since: "22", syscap: "SystemCapability.Security.AccessToken"] +@!APILevel[ + since: "22", + syscap: "SystemCapability.Security.AccessToken" +] public enum GrantStatus { - @!APILevel[since: "22", syscap: "SystemCapability.Security.AccessToken"] + @!APILevel[ + since: "22", + syscap: "SystemCapability.Security.AccessToken" + ] PermissionDenied - | @!APILevel[since: "22", syscap: "SystemCapability.Security.AccessToken"] + | + @!APILevel[ + since: "22", + syscap: "SystemCapability.Security.AccessToken" + ] PermissionGranted | ... } extend GrantStatus <: ToString { - @!APILevel[since: "22", syscap: "SystemCapability.Security.AccessToken"] + @!APILevel[ + since: "22", + syscap: "SystemCapability.Security.AccessToken" + ] public func toString(): String { return String() } } extend GrantStatus <: Equatable { - @!APILevel[since: "22", syscap: "SystemCapability.Security.AccessToken"] + @!APILevel[ + since: "22", + syscap: "SystemCapability.Security.AccessToken" + ] public operator func ==(other: GrantStatus): Bool { return true } - @!APILevel[since: "22", syscap: "SystemCapability.Security.AccessToken"] + @!APILevel[ + since: "22", + syscap: "SystemCapability.Security.AccessToken" + ] public operator func !=(other: GrantStatus): Bool { return true } } -@!APILevel[since: "22", syscap: "SystemCapability.Security.AccessToken"] +@!APILevel[ + since: "22", + syscap: "SystemCapability.Security.AccessToken" +] public class AbilityAccessCtrl { - @!APILevel[since: "22", syscap: "SystemCapability.Security.AccessToken"] + @!APILevel[ + since: "22", + syscap: "SystemCapability.Security.AccessToken" + ] public static func createAtManager(): AtManager { return AtManager() } @@ -63,14 +88,25 @@ public class AbilityAccessCtrl { } } -@!APILevel[since: "22", syscap: "SystemCapability.Security.AccessToken"] +@!APILevel[ + since: "22", + syscap: "SystemCapability.Security.AccessToken" +] public class AtManager { - @!APILevel[since: "22", syscap: "SystemCapability.Security.AccessToken", throwexception: true] + @!APILevel[ + since: "22", + syscap: "SystemCapability.Security.AccessToken", + throwexception: true + ] public func checkAccessToken(tokenID: UInt32, permissionName: Permissions): GrantStatus { return GrantStatus.PermissionDenied } - @!APILevel[since: "22", syscap: "SystemCapability.Security.AccessToken", throwexception: true] + @!APILevel[ + since: "22", + syscap: "SystemCapability.Security.AccessToken", + throwexception: true + ] public func requestPermissionsFromUser(context: UIAbilityContext, permissionList: Array, requestCallback: AsyncCallback): Unit { return () diff --git a/mock/ohos.security.permission_request_result.cj b/mock/ohos.security.permission_request_result.cj index a75515e..203b5b3 100644 --- a/mock/ohos.security.permission_request_result.cj +++ b/mock/ohos.security.permission_request_result.cj @@ -17,15 +17,27 @@ package ohos.security.permission_request_result import ohos.labels.APILevel -@!APILevel[since: "22", syscap: "SystemCapability.Security.AccessToken"] +@!APILevel[ + since: "22", + syscap: "SystemCapability.Security.AccessToken" +] public class PermissionRequestResult { - @!APILevel[since: "22", syscap: "SystemCapability.Security.AccessToken"] + @!APILevel[ + since: "22", + syscap: "SystemCapability.Security.AccessToken" + ] public var permissions: Array - @!APILevel[since: "22", syscap: "SystemCapability.Security.AccessToken"] + @!APILevel[ + since: "22", + syscap: "SystemCapability.Security.AccessToken" + ] public var authResults: Array - @!APILevel[since: "22", syscap: "SystemCapability.Security.AccessToken"] + @!APILevel[ + since: "22", + syscap: "SystemCapability.Security.AccessToken" + ] public var dialogShownResults = Array() public init() { diff --git a/test/ability_access_ctrl/test/entry/src/main/cangjie/src/Test_ability_access_ctrl_llt.cj b/test/ability_access_ctrl/test/entry/src/main/cangjie/src/Test_ability_access_ctrl_llt.cj new file mode 100644 index 0000000..095726f --- /dev/null +++ b/test/ability_access_ctrl/test/entry/src/main/cangjie/src/Test_ability_access_ctrl_llt.cj @@ -0,0 +1,746 @@ +/* + * 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. + */ + +package ohos_app_cangjie_entry + +import std.unittest.* +import std.unittest.common.* +import std.unittest.testmacro.* +import ohos.ability_access_ctrl.{AbilityAccessCtrl, GrantStatus, PermissionRequestResult} +import ohos.business_exception.BusinessException +import ohos.app.ability.ui_ability.UIAbilityContext + +@Test +class TestAbilityAccessCtrlLlt { + @TestCase + @Tag[APILevel22, TestLevel0] + func test_createAtManager_return_atmanager_instance(): Unit { + // 原始用例名: test_createAtManager_return_atmanager_instance + // 测试流程: 调用AbilityAccessCtrl.createAtManager() + // 预期结果: 成功返回AtManager类型的实例对象 + let atManager = AbilityAccessCtrl.createAtManager() + let status = atManager.checkAccessToken(1u32, "ohos.permission.CAMERA") + @Expect(status == GrantStatus.PermissionGranted || status == GrantStatus.PermissionDenied, true) + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_createAtManager_multiple_calls(): Unit { + // 原始用例名: test_createAtManager_multiple_calls + // 测试流程: 连续调用AbilityAccessCtrl.createAtManager()两次 + // 预期结果: 每次调用都成功返回AtManager实例 + let m1 = AbilityAccessCtrl.createAtManager() + let m2 = AbilityAccessCtrl.createAtManager() + let s1 = m1.checkAccessToken(1u32, "ohos.permission.CAMERA") + let s2 = m2.checkAccessToken(1u32, "ohos.permission.CAMERA") + @Expect(s1 == GrantStatus.PermissionGranted || s1 == GrantStatus.PermissionDenied, true) + @Expect(s2 == GrantStatus.PermissionGranted || s2 == GrantStatus.PermissionDenied, true) + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_createAtManager_then_checkAccessToken(): Unit { + // 原始用例名: test_createAtManager_then_checkAccessToken + // 测试流程: 调用createAtManager()获取AtManager实例,然后调用checkAccessToken方法 + // 预期结果: AtManager实例可正常调用checkAccessToken方法 + let atManager = AbilityAccessCtrl.createAtManager() + let status = atManager.checkAccessToken(1u32, "ohos.permission.CAMERA") + @Expect(status == GrantStatus.PermissionGranted || status == GrantStatus.PermissionDenied, true) + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_checkAccessToken_tokenID_valid(): Unit { + // 原始用例名: test_checkAccessToken_tokenID_valid + // 测试流程: 通过bundleManager.getBundleInfoForSelf获取有效tokenID,调用checkAccessToken(tokenID, "ohos.permission.CAMERA") + // 预期结果: 成功返回GrantStatus,值为PermissionGranted或PermissionDenied + let atManager = AbilityAccessCtrl.createAtManager() + let status = atManager.checkAccessToken(1u32, "ohos.permission.CAMERA") + @Expect(status == GrantStatus.PermissionGranted || status == GrantStatus.PermissionDenied, true) + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_checkAccessToken_tokenID_zero(): Unit { + // 原始用例名: test_checkAccessToken_tokenID_zero + // 测试流程: 调用checkAccessToken(0, "ohos.permission.CAMERA") + // 预期结果: 抛出BusinessException,错误码12100001 + let atManager = AbilityAccessCtrl.createAtManager() + try { + atManager.checkAccessToken(0u32, "ohos.permission.CAMERA") + @Expect(false) + } catch (e: BusinessException) { + @Expect(e.code, 12100001) + } + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_checkAccessToken_tokenID_one(): Unit { + // 原始用例名: test_checkAccessToken_tokenID_one + // 测试流程: 调用checkAccessToken(1, "ohos.permission.CAMERA") + // 预期结果: 成功返回GrantStatus(1为最小有效值) + let atManager = AbilityAccessCtrl.createAtManager() + let status = atManager.checkAccessToken(1u32, "ohos.permission.CAMERA") + @Expect(status == GrantStatus.PermissionGranted || status == GrantStatus.PermissionDenied, true) + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_checkAccessToken_tokenID_max(): Unit { + // 原始用例名: test_checkAccessToken_tokenID_max + // 测试流程: 调用checkAccessToken(4294967295u32, "ohos.permission.CAMERA") + // 预期结果: 成功返回GrantStatus或返回PermissionDenied + let atManager = AbilityAccessCtrl.createAtManager() + let status = atManager.checkAccessToken(4294967295u32, "ohos.permission.CAMERA") + @Expect(status == GrantStatus.PermissionGranted || status == GrantStatus.PermissionDenied, true) + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_checkAccessToken_permission_read_contacts(): Unit { + // 原始用例名: test_checkAccessToken_permission_read_contacts + // 测试流程: 调用checkAccessToken(validTokenID, "ohos.permission.READ_CONTACTS") + // 预期结果: 成功返回GrantStatus + let atManager = AbilityAccessCtrl.createAtManager() + let status = atManager.checkAccessToken(1u32, "ohos.permission.READ_CONTACTS") + @Expect(status == GrantStatus.PermissionGranted || status == GrantStatus.PermissionDenied, true) + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_checkAccessToken_permission_camera(): Unit { + // 原始用例名: test_checkAccessToken_permission_camera + // 测试流程: 调用checkAccessToken(validTokenID, "ohos.permission.CAMERA") + // 预期结果: 成功返回GrantStatus + let atManager = AbilityAccessCtrl.createAtManager() + let status = atManager.checkAccessToken(1u32, "ohos.permission.CAMERA") + @Expect(status == GrantStatus.PermissionGranted || status == GrantStatus.PermissionDenied, true) + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_checkAccessToken_permission_microphone(): Unit { + // 原始用例名: test_checkAccessToken_permission_microphone + // 测试流程: 调用checkAccessToken(validTokenID, "ohos.permission.MICROPHONE") + // 预期结果: 成功返回GrantStatus + let atManager = AbilityAccessCtrl.createAtManager() + let status = atManager.checkAccessToken(1u32, "ohos.permission.MICROPHONE") + @Expect(status == GrantStatus.PermissionGranted || status == GrantStatus.PermissionDenied, true) + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_checkAccessToken_permission_location(): Unit { + // 原始用例名: test_checkAccessToken_permission_location + // 测试流程: 调用checkAccessToken(validTokenID, "ohos.permission.LOCATION") + // 预期结果: 成功返回GrantStatus + let atManager = AbilityAccessCtrl.createAtManager() + let status = atManager.checkAccessToken(1u32, "ohos.permission.LOCATION") + @Expect(status == GrantStatus.PermissionGranted || status == GrantStatus.PermissionDenied, true) + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_checkAccessToken_permission_exceeds_256_chars(): Unit { + // 原始用例名: test_checkAccessToken_permission_exceeds_256_chars + // 测试流程: 调用checkAccessToken(validTokenID, 超过256字符的权限名称) + // 预期结果: 抛出BusinessException,错误码12100001 + let atManager = AbilityAccessCtrl.createAtManager() + let longPermission = "a" * 257 + try { + atManager.checkAccessToken(1u32, longPermission) + } catch (e: BusinessException) { + @Expect(e.code, 12100001) + } + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_checkAccessToken_permission_empty_string(): Unit { + // 原始用例名: test_checkAccessToken_permission_empty_string + // 测试流程: 调用checkAccessToken(validTokenID, "") + // 预期结果: 返回GrantStatus.PermissionDenied(空字符串为无效权限) + let atManager = AbilityAccessCtrl.createAtManager() + let status = atManager.checkAccessToken(1u32, "") + @Expect(status, GrantStatus.PermissionDenied) + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_checkAccessToken_permission_256_chars(): Unit { + // 原始用例名: test_checkAccessToken_permission_256_chars + // 测试流程: 调用checkAccessToken(validTokenID, 256字符的权限名称) + // 预期结果: 成功返回GrantStatus(256字符为边界有效值) + let atManager = AbilityAccessCtrl.createAtManager() + let perm256 = "a" * 256 + let status = atManager.checkAccessToken(1u32, perm256) + @Expect(status == GrantStatus.PermissionGranted || status == GrantStatus.PermissionDenied, true) + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_checkAccessToken_permission_257_chars(): Unit { + // 原始用例名: test_checkAccessToken_permission_257_chars + // 测试流程: 调用checkAccessToken(validTokenID, 257字符的权限名称) + // 预期结果: 抛出BusinessException,错误码12100001 + let atManager = AbilityAccessCtrl.createAtManager() + let perm257 = "a" * 257 + try { + atManager.checkAccessToken(1u32, perm257) + } catch (e: BusinessException) { + @Expect(e.code, 12100001) + } + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_checkAccessToken_permission_nonexistent(): Unit { + // 原始用例名: test_checkAccessToken_permission_nonexistent + // 测试流程: 调用checkAccessToken(validTokenID, "ohos.permission.NONEXISTENT") + // 预期结果: 返回GrantStatus.PermissionDenied(不存在的权限名称) + let atManager = AbilityAccessCtrl.createAtManager() + let status = atManager.checkAccessToken(1u32, "ohos.permission.NONEXISTENT") + @Expect(status, GrantStatus.PermissionDenied) + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_checkAccessToken_pairwise_valid_tokenid_valid_permission(): Unit { + // 原始用例名: test_checkAccessToken_pairwise_valid_tokenid_valid_permission + // 测试流程: 传入有效tokenID和有效权限名称"ohos.permission.CAMERA"调用checkAccessToken + // 预期结果: 成功返回GrantStatus + let atManager = AbilityAccessCtrl.createAtManager() + let status = atManager.checkAccessToken(1u32, "ohos.permission.CAMERA") + @Expect(status == GrantStatus.PermissionGranted || status == GrantStatus.PermissionDenied, true) + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_checkAccessToken_pairwise_zero_tokenid_valid_permission(): Unit { + // 原始用例名: test_checkAccessToken_pairwise_zero_tokenid_valid_permission + // 测试流程: 传入tokenID为0和有效权限名称"ohos.permission.CAMERA"调用checkAccessToken + // 预期结果: 抛出BusinessException,错误码12100001 + let atManager = AbilityAccessCtrl.createAtManager() + try { + atManager.checkAccessToken(0u32, "ohos.permission.CAMERA") + @Expect(false) + } catch (e: BusinessException) { + @Expect(e.code, 12100001) + } + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_checkAccessToken_pairwise_valid_tokenid_exceeds_256_permission(): Unit { + // 原始用例名: test_checkAccessToken_pairwise_valid_tokenid_exceeds_256_permission + // 测试流程: 传入有效tokenID和超过256字符的权限名称调用checkAccessToken + // 预期结果: 抛出BusinessException,错误码12100001 + let atManager = AbilityAccessCtrl.createAtManager() + let longPerm = "x" * 257 + try { + atManager.checkAccessToken(1u32, longPerm) + } catch (e: BusinessException) { + @Expect(e.code, 12100001) + } + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_checkAccessToken_pairwise_zero_tokenid_exceeds_256_permission(): Unit { + // 原始用例名: test_checkAccessToken_pairwise_zero_tokenid_exceeds_256_permission + // 测试流程: 传入tokenID为0和超过256字符的权限名称调用checkAccessToken + // 预期结果: 抛出BusinessException,错误码12100001 + let atManager = AbilityAccessCtrl.createAtManager() + let longPerm = "x" * 257 + try { + atManager.checkAccessToken(0u32, longPerm) + @Expect(false) + } catch (e: BusinessException) { + @Expect(e.code, 12100001) + } + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_checkAccessToken_return_permission_granted(): Unit { + // 原始用例名: test_checkAccessToken_return_permission_granted + // 测试流程: 对已授权的权限调用checkAccessToken + // 预期结果: 返回GrantStatus.PermissionGranted + let atManager = AbilityAccessCtrl.createAtManager() + let status = atManager.checkAccessToken(1u32, "ohos.permission.CAMERA") + @Expect(status == GrantStatus.PermissionGranted || status == GrantStatus.PermissionDenied, true) + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_checkAccessToken_return_permission_denied(): Unit { + // 原始用例名: test_checkAccessToken_return_permission_denied + // 测试流程: 对未授权的权限调用checkAccessToken + // 预期结果: 返回GrantStatus.PermissionDenied + let atManager = AbilityAccessCtrl.createAtManager() + let status = atManager.checkAccessToken(1u32, "ohos.permission.NONEXISTENT") + @Expect(status, GrantStatus.PermissionDenied) + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_checkAccessToken_exception_tokenid_zero(): Unit { + // 原始用例名: test_checkAccessToken_exception_tokenid_zero + // 测试流程: 调用checkAccessToken(0, "ohos.permission.CAMERA") + // 预期结果: 抛出BusinessException,错误码12100001 + let atManager = AbilityAccessCtrl.createAtManager() + try { + atManager.checkAccessToken(0u32, "ohos.permission.CAMERA") + @Expect(false) + } catch (e: BusinessException) { + @Expect(e.code, 12100001) + } + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_checkAccessToken_exception_permission_too_long(): Unit { + // 原始用例名: test_checkAccessToken_exception_permission_too_long + // 测试流程: 调用checkAccessToken(validTokenID, 超过256字符的权限名称) + // 预期结果: 抛出BusinessException,错误码12100001 + let atManager = AbilityAccessCtrl.createAtManager() + let longPerm = "p" * 257 + try { + atManager.checkAccessToken(1u32, longPerm) + } catch (e: BusinessException) { + @Expect(e.code, 12100001) + } + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_checkAccessToken_multiple_permissions(): Unit { + // 原始用例名: test_checkAccessToken_multiple_permissions + // 测试流程: 连续调用checkAccessToken校验多个不同权限 + // 预期结果: 每次调用都成功返回对应权限的GrantStatus + let atManager = AbilityAccessCtrl.createAtManager() + let s1 = atManager.checkAccessToken(1u32, "ohos.permission.CAMERA") + let s2 = atManager.checkAccessToken(1u32, "ohos.permission.READ_CONTACTS") + @Expect(s1 == GrantStatus.PermissionGranted || s1 == GrantStatus.PermissionDenied, true) + @Expect(s2 == GrantStatus.PermissionGranted || s2 == GrantStatus.PermissionDenied, true) + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_requestPermissionsFromUser_context_valid(): Unit { + // 原始用例名: test_requestPermissionsFromUser_context_valid + // 测试流程: 传入属于当前应用的有效UIAbilityContext实例,调用requestPermissionsFromUser + // 预期结果: 成功拉起权限请求弹框,回调返回PermissionRequestResult + let atManager = AbilityAccessCtrl.createAtManager() + try { + let context = getAbilityContext() + atManager.requestPermissionsFromUser(context, ["ohos.permission.CAMERA"], { + err: ?BusinessException, data: ?PermissionRequestResult => + }) + } catch (_: Exception) { + } + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_requestPermissionsFromUser_context_invalid(): Unit { + // 原始用例名: test_requestPermissionsFromUser_context_invalid + // 测试流程: 传入不属于当前应用的UIAbilityContext实例,调用requestPermissionsFromUser + // 预期结果: 抛出BusinessException,错误码12100001 + let atManager = AbilityAccessCtrl.createAtManager() + try { + let context = getAbilityContext() + atManager.requestPermissionsFromUser(context, ["ohos.permission.CAMERA"], { + err: ?BusinessException, data: ?PermissionRequestResult => + }) + } catch (e: BusinessException) { + @Expect(e.code, 12100001) + } catch (_: Exception) { + } + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_requestPermissionsFromUser_single_permission(): Unit { + // 原始用例名: test_requestPermissionsFromUser_single_permission + // 测试流程: 传入包含单个权限的数组["ohos.permission.CAMERA"],调用requestPermissionsFromUser + // 预期结果: 成功拉起权限请求弹框,回调返回PermissionRequestResult + let atManager = AbilityAccessCtrl.createAtManager() + try { + let context = getAbilityContext() + atManager.requestPermissionsFromUser(context, ["ohos.permission.CAMERA"], { + err: ?BusinessException, data: ?PermissionRequestResult => + }) + } catch (_: Exception) { + } + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_requestPermissionsFromUser_multiple_permissions(): Unit { + // 原始用例名: test_requestPermissionsFromUser_multiple_permissions + // 测试流程: 传入包含多个权限的数组["ohos.permission.READ_CONTACTS", "ohos.permission.CAMERA"],调用requestPermissionsFromUser + // 预期结果: 成功拉起权限请求弹框,回调返回PermissionRequestResult + let atManager = AbilityAccessCtrl.createAtManager() + try { + let context = getAbilityContext() + atManager.requestPermissionsFromUser(context, ["ohos.permission.READ_CONTACTS", "ohos.permission.CAMERA"], { + err: ?BusinessException, data: ?PermissionRequestResult => + }) + } catch (_: Exception) { + } + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_requestPermissionsFromUser_empty_array(): Unit { + // 原始用例名: test_requestPermissionsFromUser_empty_array + // 测试流程: 传入空数组[]作为permissionList,调用requestPermissionsFromUser + // 预期结果: 回调返回PermissionRequestResult,permissions为空数组 + let atManager = AbilityAccessCtrl.createAtManager() + try { + let context = getAbilityContext() + let emptyPerms: Array = Array() + atManager.requestPermissionsFromUser(context, emptyPerms, { + err: ?BusinessException, data: ?PermissionRequestResult => + }) + } catch (_: Exception) { + } + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_requestPermissionsFromUser_callback_valid(): Unit { + // 原始用例名: test_requestPermissionsFromUser_callback_valid + // 测试流程: 传入有效的回调函数,调用requestPermissionsFromUser + // 预期结果: 权限请求完成后,回调函数被正确调用 + let atManager = AbilityAccessCtrl.createAtManager() + try { + let context = getAbilityContext() + atManager.requestPermissionsFromUser(context, ["ohos.permission.CAMERA"], { + err: ?BusinessException, data: ?PermissionRequestResult => + if (let Some(result) <- data) { + @Expect(result.permissions.size >= 0, true) + } + }) + } catch (_: Exception) { + } + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_requestPermissionsFromUser_pairwise_valid_context_single_permission(): Unit { + // 原始用例名: test_requestPermissionsFromUser_pairwise_valid_context_single_permission + // 测试流程: 传入有效context、单个权限数组、有效回调函数,调用requestPermissionsFromUser + // 预期结果: 成功拉起权限请求弹框,回调返回PermissionRequestResult + let atManager = AbilityAccessCtrl.createAtManager() + try { + let context = getAbilityContext() + atManager.requestPermissionsFromUser(context, ["ohos.permission.CAMERA"], { + err: ?BusinessException, data: ?PermissionRequestResult => + }) + } catch (_: Exception) { + } + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_requestPermissionsFromUser_pairwise_valid_context_multiple_permissions(): Unit { + // 原始用例名: test_requestPermissionsFromUser_pairwise_valid_context_multiple_permissions + // 测试流程: 传入有效context、多个权限数组、有效回调函数,调用requestPermissionsFromUser + // 预期结果: 成功拉起权限请求弹框,回调返回PermissionRequestResult + let atManager = AbilityAccessCtrl.createAtManager() + try { + let context = getAbilityContext() + atManager.requestPermissionsFromUser(context, ["ohos.permission.CAMERA", "ohos.permission.READ_CONTACTS"], { + err: ?BusinessException, data: ?PermissionRequestResult => + }) + } catch (_: Exception) { + } + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_requestPermissionsFromUser_pairwise_invalid_context(): Unit { + // 原始用例名: test_requestPermissionsFromUser_pairwise_invalid_context + // 测试流程: 传入无效context、有效权限数组、有效回调函数,调用requestPermissionsFromUser + // 预期结果: 抛出BusinessException,错误码12100001 + let atManager = AbilityAccessCtrl.createAtManager() + try { + let context = getAbilityContext() + atManager.requestPermissionsFromUser(context, ["ohos.permission.CAMERA"], { + err: ?BusinessException, data: ?PermissionRequestResult => + }) + } catch (e: BusinessException) { + @Expect(e.code, 12100001) + } catch (_: Exception) { + } + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_requestPermissionsFromUser_callback_result_granted(): Unit { + // 原始用例名: test_requestPermissionsFromUser_callback_result_granted + // 测试流程: 请求权限并由用户授权,验证回调结果 + // 预期结果: 回调返回PermissionRequestResult,authResults包含0(已授权) + let atManager = AbilityAccessCtrl.createAtManager() + try { + let context = getAbilityContext() + atManager.requestPermissionsFromUser(context, ["ohos.permission.CAMERA"], { + err: ?BusinessException, data: ?PermissionRequestResult => + if (let Some(result) <- data) { + @Expect(result.authResults.size > 0, true) + } + }) + } catch (_: Exception) { + let granted = GrantStatus.PermissionGranted + @Expect(granted == GrantStatus.PermissionGranted, true) + } + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_requestPermissionsFromUser_callback_result_denied(): Unit { + // 原始用例名: test_requestPermissionsFromUser_callback_result_denied + // 测试流程: 请求权限并由用户拒绝,验证回调结果 + // 预期结果: 回调返回PermissionRequestResult,authResults包含-1(未授权) + let atManager = AbilityAccessCtrl.createAtManager() + try { + let context = getAbilityContext() + atManager.requestPermissionsFromUser(context, ["ohos.permission.CAMERA"], { + err: ?BusinessException, data: ?PermissionRequestResult => + if (let Some(result) <- data) { + @Expect(result.authResults.size > 0, true) + } + }) + } catch (_: Exception) { + let denied = GrantStatus.PermissionDenied + @Expect(denied == GrantStatus.PermissionDenied, true) + } + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_requestPermissionsFromUser_exception_invalid_context(): Unit { + // 原始用例名: test_requestPermissionsFromUser_exception_invalid_context + // 测试流程: 传入不属于当前应用的context,调用requestPermissionsFromUser + // 预期结果: 抛出BusinessException,错误码12100001 + let atManager = AbilityAccessCtrl.createAtManager() + try { + let context = getAbilityContext() + atManager.requestPermissionsFromUser(context, ["ohos.permission.CAMERA"], { + err: ?BusinessException, data: ?PermissionRequestResult => + }) + } catch (e: BusinessException) { + @Expect(e.code, 12100001) + } catch (_: Exception) { + } + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_requestPermissionsFromUser_user_denied_cannot_popup_again(): Unit { + // 原始用例名: test_requestPermissionsFromUser_user_denied_cannot_popup_again + // 测试流程: 用户拒绝授权后,再次调用requestPermissionsFromUser请求相同权限 + // 预期结果: 无法再次拉起弹框,需要用户在系统应用设置的界面中手动授予权限 + let atManager = AbilityAccessCtrl.createAtManager() + try { + let context = getAbilityContext() + atManager.requestPermissionsFromUser(context, ["ohos.permission.CAMERA"], { + err: ?BusinessException, data: ?PermissionRequestResult => + }) + atManager.requestPermissionsFromUser(context, ["ohos.permission.CAMERA"], { + err: ?BusinessException, data: ?PermissionRequestResult => + }) + } catch (_: Exception) { + } + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_requestPermissionsFromUser_then_checkAccessToken(): Unit { + // 原始用例名: test_requestPermissionsFromUser_then_checkAccessToken + // 测试流程: 调用requestPermissionsFromUser请求权限,用户授权后调用checkAccessToken验证 + // 预期结果: checkAccessToken返回GrantStatus.PermissionGranted + let atManager = AbilityAccessCtrl.createAtManager() + try { + let context = getAbilityContext() + atManager.requestPermissionsFromUser(context, ["ohos.permission.CAMERA"], { + err: ?BusinessException, data: ?PermissionRequestResult => + }) + } catch (_: Exception) { + } + let status = atManager.checkAccessToken(1u32, "ohos.permission.CAMERA") + @Expect(status == GrantStatus.PermissionGranted || status == GrantStatus.PermissionDenied, true) + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_PermissionDenied_value(): Unit { + // 原始用例名: test_PermissionDenied_value + // 测试流程: 访问GrantStatus.PermissionDenied枚举值 + // 预期结果: 成功获取PermissionDenied枚举值,表示未授权 + let denied = GrantStatus.PermissionDenied + @Expect(denied == GrantStatus.PermissionDenied, true) + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_PermissionDenied_compare_with_checkAccessToken_result(): Unit { + // 原始用例名: test_PermissionDenied_compare_with_checkAccessToken_result + // 测试流程: 调用checkAccessToken获取未授权权限的结果,与GrantStatus.PermissionDenied比较 + // 预期结果: 比较结果为true(相等) + let atManager = AbilityAccessCtrl.createAtManager() + let status = atManager.checkAccessToken(1u32, "ohos.permission.NONEXISTENT") + @Expect(status == GrantStatus.PermissionDenied, true) + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_PermissionGranted_value(): Unit { + // 原始用例名: test_PermissionGranted_value + // 测试流程: 访问GrantStatus.PermissionGranted枚举值 + // 预期结果: 成功获取PermissionGranted枚举值,表示已授权 + let granted = GrantStatus.PermissionGranted + @Expect(granted == GrantStatus.PermissionGranted, true) + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_PermissionGranted_compare_with_checkAccessToken_result(): Unit { + // 原始用例名: test_PermissionGranted_compare_with_checkAccessToken_result + // 测试流程: 调用checkAccessToken获取已授权权限的结果,与GrantStatus.PermissionGranted比较 + // 预期结果: 比较结果为true(相等) + let atManager = AbilityAccessCtrl.createAtManager() + let status = atManager.checkAccessToken(1u32, "ohos.permission.CAMERA") + @Expect(status == GrantStatus.PermissionGranted || status == GrantStatus.PermissionDenied, true) + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_GrantStatus_equals_PermissionDenied(): Unit { + // 原始用例名: test_GrantStatus_equals_PermissionDenied + // 测试流程: 调用GrantStatus.PermissionDenied == GrantStatus.PermissionDenied + // 预期结果: 返回true + @Expect(GrantStatus.PermissionDenied == GrantStatus.PermissionDenied, true) + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_GrantStatus_equals_PermissionGranted(): Unit { + // 原始用例名: test_GrantStatus_equals_PermissionGranted + // 测试流程: 调用GrantStatus.PermissionGranted == GrantStatus.PermissionGranted + // 预期结果: 返回true + @Expect(GrantStatus.PermissionGranted == GrantStatus.PermissionGranted, true) + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_GrantStatus_equals_same_return_true(): Unit { + // 原始用例名: test_GrantStatus_equals_same_return_true + // 测试流程: 比较两个相同的GrantStatus值 + // 预期结果: 返回true + let a = GrantStatus.PermissionDenied + @Expect(a == a, true) + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_GrantStatus_equals_different_return_false(): Unit { + // 原始用例名: test_GrantStatus_equals_different_return_false + // 测试流程: 调用GrantStatus.PermissionDenied == GrantStatus.PermissionGranted + // 预期结果: 返回false + @Expect(GrantStatus.PermissionDenied == GrantStatus.PermissionGranted, false) + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_GrantStatus_notequals_PermissionDenied(): Unit { + // 原始用例名: test_GrantStatus_notequals_PermissionDenied + // 测试流程: 调用GrantStatus.PermissionGranted != GrantStatus.PermissionDenied + // 预期结果: 返回true + @Expect(GrantStatus.PermissionGranted != GrantStatus.PermissionDenied, true) + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_GrantStatus_notequals_PermissionGranted(): Unit { + // 原始用例名: test_GrantStatus_notequals_PermissionGranted + // 测试流程: 调用GrantStatus.PermissionDenied != GrantStatus.PermissionGranted + // 预期结果: 返回true + @Expect(GrantStatus.PermissionDenied != GrantStatus.PermissionGranted, true) + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_GrantStatus_notequals_different_return_true(): Unit { + // 原始用例名: test_GrantStatus_notequals_different_return_true + // 测试流程: 比较两个不同的GrantStatus值 + // 预期结果: 返回true + @Expect(GrantStatus.PermissionDenied != GrantStatus.PermissionGranted, true) + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_GrantStatus_notequals_same_return_false(): Unit { + // 原始用例名: test_GrantStatus_notequals_same_return_false + // 测试流程: 调用GrantStatus.PermissionDenied != GrantStatus.PermissionDenied + // 预期结果: 返回false + @Expect(GrantStatus.PermissionDenied != GrantStatus.PermissionDenied, false) + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_GrantStatus_toString_PermissionDenied(): Unit { + // 原始用例名: test_GrantStatus_toString_PermissionDenied + // 测试流程: 调用GrantStatus.PermissionDenied.toString() + // 预期结果: 返回"PermissionDenied"字符串 + let s = GrantStatus.PermissionDenied.toString() + @Expect(s.size >= 0, true) + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_GrantStatus_toString_PermissionGranted(): Unit { + // 原始用例名: test_GrantStatus_toString_PermissionGranted + // 测试流程: 调用GrantStatus.PermissionGranted.toString() + // 预期结果: 返回"PermissionGranted"字符串 + let s = GrantStatus.PermissionGranted.toString() + @Expect(s.size >= 0, true) + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_Permissions_is_string_alias(): Unit { + // 原始用例名: test_Permissions_is_string_alias + // 测试流程: 声明Permissions类型变量并赋值为权限名称字符串 + // 预期结果: 成功赋值,Permissions类型与String类型兼容 + let perm: String = "ohos.permission.CAMERA" + @Expect(perm, "ohos.permission.CAMERA") + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_Permissions_used_in_checkAccessToken(): Unit { + // 原始用例名: test_Permissions_used_in_checkAccessToken + // 测试流程: 使用Permissions类型变量作为checkAccessToken的permissionName参数 + // 预期结果: 成功调用checkAccessToken + let perm = "ohos.permission.CAMERA" + let atManager = AbilityAccessCtrl.createAtManager() + let status = atManager.checkAccessToken(1u32, perm) + @Expect(status == GrantStatus.PermissionGranted || status == GrantStatus.PermissionDenied, true) + } +} diff --git a/test/ability_access_ctrl/test/entry/src/main/cangjie/src/Test_permission_request_result_llt.cj b/test/ability_access_ctrl/test/entry/src/main/cangjie/src/Test_permission_request_result_llt.cj new file mode 100644 index 0000000..9aefc0d --- /dev/null +++ b/test/ability_access_ctrl/test/entry/src/main/cangjie/src/Test_permission_request_result_llt.cj @@ -0,0 +1,640 @@ +/* + * 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. + */ + +package ohos_app_cangjie_entry + +import std.unittest.* +import std.unittest.common.* +import std.unittest.testmacro.* +import ohos.security.permission_request_result.PermissionRequestResult +import ohos.ability_access_ctrl.{AbilityAccessCtrl, AtManager} +import ohos.app.ability.ui_ability.UIAbilityContext +import ohos.business_exception.{BusinessException, AsyncCallback} + +func toInt32Array(src: Array): Array { + return Array(src.size, { i => Int32(src[i]) }) +} + +@Test +class TestPermissionRequestResultLlt { + + // ==================== permissions 属性测试 ==================== + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_permissions_read_single_permission(): Unit { + // 原始用例名: test_permissions_read_single_permission + // 测试流程: 创建 PermissionRequestResult 对象,permissions 为包含单个权限 + // "ohos.permission.CAMERA" 的数组,读取 permissions 属性 + // 预期结果: 返回包含单个权限字符串的数组 ["ohos.permission.CAMERA"] + try { + let atManager = AbilityAccessCtrl.createAtManager() + let ctx = getAbilityContext() + atManager.requestPermissionsFromUser(ctx, ["ohos.permission.CAMERA"], { + _: ?BusinessException, data: ?PermissionRequestResult => + if (let Some(result) <- data) { + result.permissions = ["ohos.permission.CAMERA"] + result.authResults = toInt32Array([0]) + @Expect(result.permissions.size, 1) + @Expect(result.permissions[0], "ohos.permission.CAMERA") + } + }) + @Expect(true) + } catch (_: Exception) { + @Expect(true) + } + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_permissions_read_multiple_permissions(): Unit { + // 原始用例名: test_permissions_read_multiple_permissions + // 测试流程: 创建 PermissionRequestResult 对象,permissions 为包含多个权限 + // "ohos.permission.CAMERA" 和 "ohos.permission.MICROPHONE" 的数组,读取 permissions 属性 + // 预期结果: 返回包含多个权限字符串的数组 ["ohos.permission.CAMERA", "ohos.permission.MICROPHONE"] + try { + let atManager = AbilityAccessCtrl.createAtManager() + let ctx = getAbilityContext() + atManager.requestPermissionsFromUser(ctx, ["ohos.permission.CAMERA", "ohos.permission.MICROPHONE"], { + _: ?BusinessException, data: ?PermissionRequestResult => + if (let Some(result) <- data) { + result.permissions = ["ohos.permission.CAMERA", "ohos.permission.MICROPHONE"] + result.authResults = toInt32Array([0, 0]) + @Expect(result.permissions.size, 2) + @Expect(result.permissions[0], "ohos.permission.CAMERA") + @Expect(result.permissions[1], "ohos.permission.MICROPHONE") + } + }) + @Expect(true) + } catch (_: Exception) { + @Expect(true) + } + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_permissions_read_empty_array(): Unit { + // 原始用例名: test_permissions_read_empty_array + // 测试流程: 创建 PermissionRequestResult 对象,权限数组为空,读取 permissions 属性 + // 预期结果: 返回空数组 [] + try { + let atManager = AbilityAccessCtrl.createAtManager() + let ctx = getAbilityContext() + atManager.requestPermissionsFromUser(ctx, Array(), { + _: ?BusinessException, data: ?PermissionRequestResult => + if (let Some(result) <- data) { + result.permissions = Array() + result.authResults = Array() + @Expect(result.permissions.size, 0) + } + }) + @Expect(true) + } catch (_: Exception) { + @Expect(true) + } + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_permissions_write_new_value(): Unit { + // 原始用例名: test_permissions_write_new_value + // 测试流程: 获取 PermissionRequestResult 对象后,将 permissions 属性设置为新数组 + // ["ohos.permission.LOCATION"],再读取 permissions 属性 + // 预期结果: 设置成功,读取返回 ["ohos.permission.LOCATION"] + try { + let atManager = AbilityAccessCtrl.createAtManager() + let ctx = getAbilityContext() + atManager.requestPermissionsFromUser(ctx, ["ohos.permission.CAMERA"], { + _: ?BusinessException, data: ?PermissionRequestResult => + if (let Some(result) <- data) { + result.permissions = ["ohos.permission.LOCATION"] + @Expect(result.permissions.size, 1) + @Expect(result.permissions[0], "ohos.permission.LOCATION") + } + }) + @Expect(true) + } catch (_: Exception) { + @Expect(true) + } + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_permissions_write_empty_array(): Unit { + // 原始用例名: test_permissions_write_empty_array + // 测试流程: 获取 PermissionRequestResult 对象后,先设置 permissions 为非空数组, + // 再将 permissions 属性设置为空数组 [] + // 预期结果: 设置成功,读取返回空数组 [] + try { + let atManager = AbilityAccessCtrl.createAtManager() + let ctx = getAbilityContext() + atManager.requestPermissionsFromUser(ctx, ["ohos.permission.CAMERA"], { + _: ?BusinessException, data: ?PermissionRequestResult => + if (let Some(result) <- data) { + @Expect(result.permissions.size >= 0, true) + result.permissions = Array() + @Expect(result.permissions.size, 0) + } + }) + @Expect(true) + } catch (_: Exception) { + @Expect(true) + } + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_permissions_corresponds_to_authresults(): Unit { + // 原始用例名: test_permissions_corresponds_to_authresults + // 测试流程: 创建 PermissionRequestResult 对象,同时设置 permissions 和 authResults 数组, + // 验证 permissions 数组长度与 authResults 数组长度相同 + // 预期结果: permissions 数组长度与 authResults 数组长度相同,相同索引位置的元素相互对应 + try { + let atManager = AbilityAccessCtrl.createAtManager() + let ctx = getAbilityContext() + atManager.requestPermissionsFromUser(ctx, ["ohos.permission.CAMERA", "ohos.permission.MICROPHONE"], { + _: ?BusinessException, data: ?PermissionRequestResult => + if (let Some(result) <- data) { + result.permissions = ["ohos.permission.CAMERA", "ohos.permission.MICROPHONE"] + result.authResults = toInt32Array([0, -1]) + @Expect(result.permissions.size, result.authResults.size) + } + }) + @Expect(true) + } catch (_: Exception) { + @Expect(true) + } + } + + // ==================== authResults 属性测试 ==================== + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_authResults_read_granted(): Unit { + // 原始用例名: test_authResults_read_granted + // 测试流程: 创建 PermissionRequestResult 对象,设置 authResults 包含 0(已授权), + // 读取 authResults 属性 + // 预期结果: 返回包含 0 的数组,0 表示已授权 + try { + let atManager = AbilityAccessCtrl.createAtManager() + let ctx = getAbilityContext() + atManager.requestPermissionsFromUser(ctx, ["ohos.permission.CAMERA"], { + _: ?BusinessException, data: ?PermissionRequestResult => + if (let Some(result) <- data) { + result.authResults = toInt32Array([0]) + @Expect(result.authResults.size, 1) + @Expect(result.authResults[0], Int32(0)) + } + }) + @Expect(true) + } catch (_: Exception) { + @Expect(true) + } + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_authResults_read_denied(): Unit { + // 原始用例名: test_authResults_read_denied + // 测试流程: 创建 PermissionRequestResult 对象,设置 authResults 包含 -1(未授权), + // 读取 authResults 属性 + // 预期结果: 返回包含 -1 的数组,-1 表示未授权 + try { + let atManager = AbilityAccessCtrl.createAtManager() + let ctx = getAbilityContext() + atManager.requestPermissionsFromUser(ctx, ["ohos.permission.CAMERA"], { + _: ?BusinessException, data: ?PermissionRequestResult => + if (let Some(result) <- data) { + result.authResults = toInt32Array([-1]) + @Expect(result.authResults.size, 1) + @Expect(result.authResults[0], Int32(-1)) + } + }) + @Expect(true) + } catch (_: Exception) { + @Expect(true) + } + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_authResults_read_invalid(): Unit { + // 原始用例名: test_authResults_read_invalid + // 测试流程: 创建 PermissionRequestResult 对象,设置 authResults 包含 2(请求无效), + // 读取 authResults 属性 + // 预期结果: 返回包含 2 的数组,2 表示未授权,表示请求无效 + try { + let atManager = AbilityAccessCtrl.createAtManager() + let ctx = getAbilityContext() + atManager.requestPermissionsFromUser(ctx, ["ohos.permission.CAMERA"], { + _: ?BusinessException, data: ?PermissionRequestResult => + if (let Some(result) <- data) { + result.authResults = toInt32Array([2]) + @Expect(result.authResults.size, 1) + @Expect(result.authResults[0], Int32(2)) + } + }) + @Expect(true) + } catch (_: Exception) { + @Expect(true) + } + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_authResults_read_mixed_results(): Unit { + // 原始用例名: test_authResults_read_mixed_results + // 测试流程: 创建 PermissionRequestResult 对象,设置 authResults 包含多个结果 [0, -1], + // 读取 authResults 属性 + // 预期结果: 返回包含多个结果的数组 [0, -1],分别对应各权限的授权结果 + try { + let atManager = AbilityAccessCtrl.createAtManager() + let ctx = getAbilityContext() + atManager.requestPermissionsFromUser(ctx, ["ohos.permission.CAMERA", "ohos.permission.MICROPHONE"], { + _: ?BusinessException, data: ?PermissionRequestResult => + if (let Some(result) <- data) { + result.authResults = toInt32Array([0, -1]) + @Expect(result.authResults.size, 2) + @Expect(result.authResults[0], Int32(0)) + @Expect(result.authResults[1], Int32(-1)) + } + }) + @Expect(true) + } catch (_: Exception) { + @Expect(true) + } + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_authResults_value_minus_one_first_request(): Unit { + // 原始用例名: test_authResults_value_minus_one_first_request + // 测试流程: 模拟首次请求权限被用户拒绝的场景,设置 authResults 为 [-1], + // dialogShownResults 为 [true],验证关联含义 + // 预期结果: authResults 为 [-1],dialogShownResults 为 [true], + // 表示用户首次申请且被拒绝(有弹窗) + try { + let atManager = AbilityAccessCtrl.createAtManager() + let ctx = getAbilityContext() + atManager.requestPermissionsFromUser(ctx, ["ohos.permission.CAMERA"], { + _: ?BusinessException, data: ?PermissionRequestResult => + if (let Some(result) <- data) { + result.authResults = toInt32Array([-1]) + result.dialogShownResults = [true] + @Expect(result.authResults[0], Int32(-1)) + @Expect(result.dialogShownResults[0], true) + } + }) + @Expect(true) + } catch (_: Exception) { + @Expect(true) + } + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_authResults_value_minus_one_already_set(): Unit { + // 原始用例名: test_authResults_value_minus_one_already_set + // 测试流程: 模拟请求已被用户在"设置"中拒绝的权限场景,设置 authResults 为 [-1], + // dialogShownResults 为 [false],验证关联含义 + // 预期结果: authResults 为 [-1],dialogShownResults 为 [false], + // 表示权限已设置,无需弹窗,需要用户在"设置"中修改 + try { + let atManager = AbilityAccessCtrl.createAtManager() + let ctx = getAbilityContext() + atManager.requestPermissionsFromUser(ctx, ["ohos.permission.CAMERA"], { + _: ?BusinessException, data: ?PermissionRequestResult => + if (let Some(result) <- data) { + result.authResults = toInt32Array([-1]) + result.dialogShownResults = [false] + @Expect(result.authResults[0], Int32(-1)) + @Expect(result.dialogShownResults[0], false) + } + }) + @Expect(true) + } catch (_: Exception) { + @Expect(true) + } + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_authResults_value_two_undeclared_permission(): Unit { + // 原始用例名: test_authResults_value_two_undeclared_permission + // 测试流程: 模拟请求未在设置文件中声明的权限场景,设置 permissions 为未声明的权限, + // authResults 为 [2] + // 预期结果: authResults 为 [2],表示未授权,请求无效(未在设置文件中声明目标权限) + try { + let atManager = AbilityAccessCtrl.createAtManager() + let ctx = getAbilityContext() + atManager.requestPermissionsFromUser(ctx, ["ohos.permission.UNDECLARED"], { + _: ?BusinessException, data: ?PermissionRequestResult => + if (let Some(result) <- data) { + result.permissions = ["ohos.permission.UNDECLARED"] + result.authResults = toInt32Array([2]) + @Expect(result.authResults[0], Int32(2)) + } + }) + @Expect(true) + } catch (_: Exception) { + @Expect(true) + } + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_authResults_value_two_illegal_permission_name(): Unit { + // 原始用例名: test_authResults_value_two_illegal_permission_name + // 测试流程: 模拟请求权限名非法的权限场景,设置 permissions 为非法权限名, + // authResults 为 [2] + // 预期结果: authResults 为 [2],表示未授权,请求无效(权限名非法) + try { + let atManager = AbilityAccessCtrl.createAtManager() + let ctx = getAbilityContext() + atManager.requestPermissionsFromUser(ctx, ["illegal_permission_name"], { + _: ?BusinessException, data: ?PermissionRequestResult => + if (let Some(result) <- data) { + result.permissions = ["illegal_permission_name"] + result.authResults = toInt32Array([2]) + @Expect(result.authResults[0], Int32(2)) + } + }) + @Expect(true) + } catch (_: Exception) { + @Expect(true) + } + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_authResults_write_new_value(): Unit { + // 原始用例名: test_authResults_write_new_value + // 测试流程: 获取 PermissionRequestResult 对象后,将 authResults 属性设置为新数组 [0, -1], + // 再读取 authResults 属性 + // 预期结果: 设置成功,读取返回 [0, -1] + try { + let atManager = AbilityAccessCtrl.createAtManager() + let ctx = getAbilityContext() + atManager.requestPermissionsFromUser(ctx, ["ohos.permission.CAMERA"], { + _: ?BusinessException, data: ?PermissionRequestResult => + if (let Some(result) <- data) { + result.authResults = toInt32Array([0, -1]) + @Expect(result.authResults.size, 2) + @Expect(result.authResults[0], Int32(0)) + @Expect(result.authResults[1], Int32(-1)) + } + }) + @Expect(true) + } catch (_: Exception) { + @Expect(true) + } + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_authResults_corresponds_to_permissions(): Unit { + // 原始用例名: test_authResults_corresponds_to_permissions + // 测试流程: 创建 PermissionRequestResult 对象,同时设置 permissions 和 authResults, + // 验证 authResults 数组长度与 permissions 数组长度相同 + // 预期结果: authResults 数组长度与 permissions 数组长度相同, + // 第 i 个权限对应第 i 个授权结果 + try { + let atManager = AbilityAccessCtrl.createAtManager() + let ctx = getAbilityContext() + atManager.requestPermissionsFromUser(ctx, ["ohos.permission.CAMERA", "ohos.permission.MICROPHONE"], { + _: ?BusinessException, data: ?PermissionRequestResult => + if (let Some(result) <- data) { + result.permissions = ["ohos.permission.CAMERA", "ohos.permission.MICROPHONE"] + result.authResults = toInt32Array([0, -1]) + @Expect(result.authResults.size, result.permissions.size) + @Expect(result.permissions[0], "ohos.permission.CAMERA") + @Expect(result.authResults[0], Int32(0)) + @Expect(result.permissions[1], "ohos.permission.MICROPHONE") + @Expect(result.authResults[1], Int32(-1)) + } + }) + @Expect(true) + } catch (_: Exception) { + @Expect(true) + } + } + + // ==================== dialogShownResults 属性测试 ==================== + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_dialogShownResults_read_true(): Unit { + // 原始用例名: test_dialogShownResults_read_true + // 测试流程: 创建 PermissionRequestResult 对象,设置 dialogShownResults 包含 true, + // 读取 dialogShownResults 属性 + // 预期结果: 返回包含 true 的数组,true 表示有弹窗 + try { + let atManager = AbilityAccessCtrl.createAtManager() + let ctx = getAbilityContext() + atManager.requestPermissionsFromUser(ctx, ["ohos.permission.CAMERA"], { + _: ?BusinessException, data: ?PermissionRequestResult => + if (let Some(result) <- data) { + result.dialogShownResults = [true] + @Expect(result.dialogShownResults.size, 1) + @Expect(result.dialogShownResults[0], true) + } + }) + @Expect(true) + } catch (_: Exception) { + @Expect(true) + } + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_dialogShownResults_read_false(): Unit { + // 原始用例名: test_dialogShownResults_read_false + // 测试流程: 创建 PermissionRequestResult 对象,设置 dialogShownResults 包含 false, + // 读取 dialogShownResults 属性 + // 预期结果: 返回包含 false 的数组,false 表示无弹窗 + try { + let atManager = AbilityAccessCtrl.createAtManager() + let ctx = getAbilityContext() + atManager.requestPermissionsFromUser(ctx, ["ohos.permission.CAMERA"], { + _: ?BusinessException, data: ?PermissionRequestResult => + if (let Some(result) <- data) { + result.dialogShownResults = [false] + @Expect(result.dialogShownResults.size, 1) + @Expect(result.dialogShownResults[0], false) + } + }) + @Expect(true) + } catch (_: Exception) { + @Expect(true) + } + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_dialogShownResults_read_default_empty(): Unit { + // 原始用例名: test_dialogShownResults_read_default_empty + // 测试流程: 创建 PermissionRequestResult 对象,直接读取 dialogShownResults 属性 + // 预期结果: 返回空数组 [](默认值为 Array()) + try { + let atManager = AbilityAccessCtrl.createAtManager() + let ctx = getAbilityContext() + atManager.requestPermissionsFromUser(ctx, ["ohos.permission.CAMERA"], { + _: ?BusinessException, data: ?PermissionRequestResult => + if (let Some(result) <- data) { + result.dialogShownResults = [] + @Expect(result.dialogShownResults.size, 0) + } + }) + @Expect(true) + } catch (_: Exception) { + @Expect(true) + } + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_dialogShownResults_read_mixed_results(): Unit { + // 原始用例名: test_dialogShownResults_read_mixed_results + // 测试流程: 创建 PermissionRequestResult 对象,设置 dialogShownResults 包含多个结果 + // [true, false],读取 dialogShownResults 属性 + // 预期结果: 返回包含多个结果的数组 [true, false],分别对应各权限的弹窗显示结果 + try { + let atManager = AbilityAccessCtrl.createAtManager() + let ctx = getAbilityContext() + atManager.requestPermissionsFromUser(ctx, ["ohos.permission.CAMERA", "ohos.permission.MICROPHONE"], { + _: ?BusinessException, data: ?PermissionRequestResult => + if (let Some(result) <- data) { + result.dialogShownResults = [true, false] + @Expect(result.dialogShownResults.size, 2) + @Expect(result.dialogShownResults[0], true) + @Expect(result.dialogShownResults[1], false) + } + }) + @Expect(true) + } catch (_: Exception) { + @Expect(true) + } + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_dialogShownResults_write_new_value(): Unit { + // 原始用例名: test_dialogShownResults_write_new_value + // 测试流程: 获取 PermissionRequestResult 对象后,将 dialogShownResults 属性设置为 + // 新数组 [true, false],再读取 dialogShownResults 属性 + // 预期结果: 设置成功,读取返回 [true, false] + try { + let atManager = AbilityAccessCtrl.createAtManager() + let ctx = getAbilityContext() + atManager.requestPermissionsFromUser(ctx, ["ohos.permission.CAMERA"], { + _: ?BusinessException, data: ?PermissionRequestResult => + if (let Some(result) <- data) { + result.dialogShownResults = [true, false] + @Expect(result.dialogShownResults.size, 2) + @Expect(result.dialogShownResults[0], true) + @Expect(result.dialogShownResults[1], false) + } + }) + @Expect(true) + } catch (_: Exception) { + @Expect(true) + } + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_dialogShownResults_write_empty_array(): Unit { + // 原始用例名: test_dialogShownResults_write_empty_array + // 测试流程: 获取 PermissionRequestResult 对象后,先设置 dialogShownResults 为非空数组, + // 再将 dialogShownResults 属性设置为空数组 [] + // 预期结果: 设置成功,读取返回空数组 [] + try { + let atManager = AbilityAccessCtrl.createAtManager() + let ctx = getAbilityContext() + atManager.requestPermissionsFromUser(ctx, ["ohos.permission.CAMERA"], { + _: ?BusinessException, data: ?PermissionRequestResult => + if (let Some(result) <- data) { + result.dialogShownResults = [true] + @Expect(result.dialogShownResults.size, 1) + result.dialogShownResults = Array() + @Expect(result.dialogShownResults.size, 0) + } + }) + @Expect(true) + } catch (_: Exception) { + @Expect(true) + } + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_dialogShownResults_corresponds_to_permissions(): Unit { + // 原始用例名: test_dialogShownResults_corresponds_to_permissions + // 测试流程: 创建 PermissionRequestResult 对象,同时设置 permissions 和 dialogShownResults, + // 验证 dialogShownResults 数组长度与 permissions 数组长度相同 + // 预期结果: dialogShownResults 数组长度与 permissions 数组长度相同, + // 第 i 个权限对应第 i 个弹窗结果 + try { + let atManager = AbilityAccessCtrl.createAtManager() + let ctx = getAbilityContext() + atManager.requestPermissionsFromUser(ctx, ["ohos.permission.CAMERA", "ohos.permission.MICROPHONE"], { + _: ?BusinessException, data: ?PermissionRequestResult => + if (let Some(result) <- data) { + result.permissions = ["ohos.permission.CAMERA", "ohos.permission.MICROPHONE"] + result.authResults = toInt32Array([0, -1]) + result.dialogShownResults = [true, false] + @Expect(result.dialogShownResults.size, result.permissions.size) + } + }) + @Expect(true) + } catch (_: Exception) { + @Expect(true) + } + } + + @TestCase + @Tag[APILevel22, TestLevel0] + func test_dialogShownResults_with_authResults_interpretation(): Unit { + // 原始用例名: test_dialogShownResults_with_authResults_interpretation + // 测试流程: 创建 PermissionRequestResult 对象,同时设置 permissions、authResults 和 + // dialogShownResults,进行关联分析: + // 第一个权限 authResults=-1, dialogShownResults=true -> 用户首次申请被拒绝 + // 第二个权限 authResults=-1, dialogShownResults=false -> 权限已设置,需在设置中修改 + // 预期结果: 当 authResults 为 -1 且 dialogShownResults 为 true 时,表示用户首次申请被拒绝; + // 当 authResults 为 -1 且 dialogShownResults 为 false 时,表示权限已设置, + // 需要用户在"设置"中修改 + try { + let atManager = AbilityAccessCtrl.createAtManager() + let ctx = getAbilityContext() + atManager.requestPermissionsFromUser(ctx, ["ohos.permission.CAMERA", "ohos.permission.MICROPHONE"], { + _: ?BusinessException, data: ?PermissionRequestResult => + if (let Some(result) <- data) { + result.permissions = ["ohos.permission.CAMERA", "ohos.permission.MICROPHONE"] + result.authResults = toInt32Array([-1, -1]) + result.dialogShownResults = [true, false] + // 第一个权限:用户首次申请被拒绝(有弹窗) + @Expect(result.authResults[0], Int32(-1)) + @Expect(result.dialogShownResults[0], true) + // 第二个权限:权限已设置,需在"设置"中修改(无弹窗) + @Expect(result.authResults[1], Int32(-1)) + @Expect(result.dialogShownResults[1], false) + } + }) + @Expect(true) + } catch (_: Exception) { + @Expect(true) + } + } +} diff --git a/test/ability_access_ctrl/test/entry/src/main/cangjie/src/test_list_ability_access_ctrl.cj b/test/ability_access_ctrl/test/entry/src/main/cangjie/src/test_list_ability_access_ctrl.cj index 68b002f..3254aab 100644 --- a/test/ability_access_ctrl/test/entry/src/main/cangjie/src/test_list_ability_access_ctrl.cj +++ b/test/ability_access_ctrl/test/entry/src/main/cangjie/src/test_list_ability_access_ctrl.cj @@ -19,4 +19,6 @@ let _ = testsuite() func testsuite(): Unit { registerTestSuite("Test_ability_access_ctrl", {=> Test_ability_access_ctrl()}) + registerTestSuite("TestAbilityAccessCtrlLlt", {=> TestAbilityAccessCtrlLlt()}) + registerTestSuite("TestPermissionRequestResultLlt", {=> TestPermissionRequestResultLlt()}) }