Merge branch 'master' into fws

This commit is contained in:
fangwusheng
2026-03-28 11:04:44 +08:00
5 changed files with 1451 additions and 15 deletions
+47 -11
View File
@@ -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<GrantStatus> {
@!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<Permissions>,
requestCallback: AsyncCallback<PermissionRequestResult>): Unit {
return ()
@@ -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<String>
@!APILevel[since: "22", syscap: "SystemCapability.Security.AccessToken"]
@!APILevel[
since: "22",
syscap: "SystemCapability.Security.AccessToken"
]
public var authResults: Array<Int32>
@!APILevel[since: "22", syscap: "SystemCapability.Security.AccessToken"]
@!APILevel[
since: "22",
syscap: "SystemCapability.Security.AccessToken"
]
public var dialogShownResults = Array<Bool>()
public init() {
@@ -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
// 预期结果: 回调返回PermissionRequestResultpermissions为空数组
let atManager = AbilityAccessCtrl.createAtManager()
try {
let context = getAbilityContext()
let emptyPerms: Array<String> = Array<String>()
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
// 测试流程: 请求权限并由用户授权,验证回调结果
// 预期结果: 回调返回PermissionRequestResultauthResults包含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
// 测试流程: 请求权限并由用户拒绝,验证回调结果
// 预期结果: 回调返回PermissionRequestResultauthResults包含-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)
}
}
@@ -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<Int64>): Array<Int32> {
return Array<Int32>(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<String>(), {
_: ?BusinessException, data: ?PermissionRequestResult =>
if (let Some(result) <- data) {
result.permissions = Array<String>()
result.authResults = Array<Int32>()
@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<String>()
@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<Bool>()
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<Bool>()
@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)
}
}
}
@@ -19,4 +19,6 @@ let _ = testsuite()
func testsuite(): Unit {
registerTestSuite("Test_ability_access_ctrl", {=> Test_ability_access_ctrl()})
registerTestSuite("TestAbilityAccessCtrlLlt", {=> TestAbilityAccessCtrlLlt()})
registerTestSuite("TestPermissionRequestResultLlt", {=> TestPermissionRequestResultLlt()})
}