From 76074feedbe2e5d0bc16d4b979ecde595e47f7ff Mon Sep 17 00:00:00 2001 From: li-yaoyao777 Date: Mon, 4 Dec 2023 16:01:56 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9Esensor=E4=B8=8A=E6=8A=A5?= =?UTF-8?q?=E9=A2=91=E7=8E=87napi&=E6=B5=8B=E8=AF=95=E7=94=A8=E4=BE=8B?= =?UTF-8?q?=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: li-yaoyao777 --- frameworks/js/napi/src/sensor_js.cpp | 33 +- test/unittest/interfaces/js/BUILD.gn | 1 + .../interfaces/js/sensor_frequency/BUILD.gn | 21 + .../js/sensor_frequency/ExampleJsunit.test.js | 408 ++++++++++++++++++ .../js/sensor_frequency/config.json | 85 ++++ 5 files changed, 545 insertions(+), 3 deletions(-) create mode 100644 test/unittest/interfaces/js/sensor_frequency/BUILD.gn create mode 100644 test/unittest/interfaces/js/sensor_frequency/ExampleJsunit.test.js create mode 100644 test/unittest/interfaces/js/sensor_frequency/config.json diff --git a/frameworks/js/napi/src/sensor_js.cpp b/frameworks/js/napi/src/sensor_js.cpp index 56094931..5b55d98e 100644 --- a/frameworks/js/napi/src/sensor_js.cpp +++ b/frameworks/js/napi/src/sensor_js.cpp @@ -317,6 +317,34 @@ static void UpdateCallbackInfos(napi_env env, int32_t sensorTypeId, napi_value c g_onCallbackInfos[sensorTypeId] = callbackInfos; } +static bool GetInterval(napi_env env, napi_value value, int64_t &interval) +{ + napi_value napiInterval = GetNamedProperty(env, value, "interval"); + if (IsMatchType(env, napiInterval, napi_number)) { + if (!GetNativeInt64(env, napiInterval, interval)) { + SEN_HILOGE("GetNativeInt64 failed"); + return false; + } + } else if (IsMatchType(env, napiInterval, napi_string)) { + std::string mode; + if (!GetStringValue(env, napiInterval, mode)) { + SEN_HILOGE("GetStringValue failed"); + return false; + } + auto iter = g_samplingPeriod.find(mode); + if (iter == g_samplingPeriod.end()) { + SEN_HILOGE("Find interval mode failed"); + return false; + } + interval = iter->second; + SEN_HILOGI("%{public}s", mode.c_str()); + } else { + SEN_HILOGE("Interval failed"); + return false; + } + return true; +} + static napi_value On(napi_env env, napi_callback_info info) { CALL_LOG_ENTER; @@ -339,9 +367,8 @@ static napi_value On(napi_env env, napi_callback_info info) } int64_t interval = REPORTING_INTERVAL; if (argc >= 3 && IsMatchType(env, args[2], napi_object)) { - napi_value value = GetNamedProperty(env, args[2], "interval"); - if (IsMatchType(env, value, napi_number)) { - GetNativeInt64(env, value, interval); + if (!GetInterval(env, args[2], interval)) { + SEN_HILOGW("Get interval failed"); } } SEN_HILOGD("Interval is %{public}" PRId64, interval); diff --git a/test/unittest/interfaces/js/BUILD.gn b/test/unittest/interfaces/js/BUILD.gn index a5adb590..e11c1dac 100755 --- a/test/unittest/interfaces/js/BUILD.gn +++ b/test/unittest/interfaces/js/BUILD.gn @@ -21,5 +21,6 @@ group("unittest") { "pedometer_detection:PedometerDetectionJsTest", "sar:SarJsTest", "sensor:SensorJsTest", + "sensor_frequency:SensorFrequencyJsTest", ] } diff --git a/test/unittest/interfaces/js/sensor_frequency/BUILD.gn b/test/unittest/interfaces/js/sensor_frequency/BUILD.gn new file mode 100644 index 00000000..5df3235f --- /dev/null +++ b/test/unittest/interfaces/js/sensor_frequency/BUILD.gn @@ -0,0 +1,21 @@ +# Copyright (C) 2023 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") + +module_output_path = "sensor/interfaces/js" +ohos_js_unittest("SensorFrequencyJsTest") { + module_out_path = module_output_path + hap_profile = "./config.json" + certificate_profile = "../signature/openharmony_core.p7b" +} diff --git a/test/unittest/interfaces/js/sensor_frequency/ExampleJsunit.test.js b/test/unittest/interfaces/js/sensor_frequency/ExampleJsunit.test.js new file mode 100644 index 00000000..2c63a581 --- /dev/null +++ b/test/unittest/interfaces/js/sensor_frequency/ExampleJsunit.test.js @@ -0,0 +1,408 @@ +/* + * Copyright (C) 2023 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import sensor from '@ohos.sensor' + +import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from 'deccjsunit/index' + +const PERMISSION_DENIED_CODE = 201 +const PARAMETER_ERROR_CODE = 401 +const PARAMETER_ERROR_MSG = 'The parameter invalid.' +const PERMISSION_DENIED_MSG = 'Permission denied.' + +describe("SensorFrequencyJsTest", function () { + function callback(data) { + console.info('callback' + JSON.stringify(data)); + expect(typeof(data.x)).assertEqual('number'); + expect(typeof(data.y)).assertEqual('number'); + expect(typeof(data.z)).assertEqual('number'); + } + + function callback2(data) { + console.info('callback2' + JSON.stringify(data)); + expect(typeof(data.alpha)).assertEqual('number'); + expect(typeof(data.beta)).assertEqual('number'); + expect(typeof(data.gamma)).assertEqual('number'); + } + + beforeAll(async function() { + /* + * @tc.setup: setup invoked before all testcases + */ + console.info('beforeAll called') + }) + + afterAll(function() { + /* + * @tc.teardown: teardown invoked after all testcases + */ + console.info('afterAll called') + }) + + beforeEach(function() { + /* + * @tc.setup: setup invoked before each testcases + */ + console.info('beforeEach called') + }) + + afterEach(function() { + /* + * @tc.teardown: teardown invoked after each testcases + */ + console.info('afterEach called') + }) + + /* + * @tc.name:SensorFrequencyJsTest_001 + * @tc.desc:verify app info is not null + * @tc.size: MediumTest + * @tc.type: Function + * @tc.level: Level 1 + * @tc.require: Issue Number + * @tc.number:SensorFrequencyJsTest_001 + */ + it("SensorFrequencyJsTest_001", 0, async function (done) { + console.info('----------------------SensorFrequencyJsTest_001---------------------------'); + try { + sensor.getSingleSensor(sensor.SensorId.ACCELEROMETER, (err, data) => { + if (err) { + console.error('getSingleSensor fail, errCode:' + err.code + ' ,msg:' + err.message); + expect(false).assertTrue(); + done(); + } + try { + sensor.on(sensor.SensorId.ACCELEROMETER, callback, {'interval': 'game'}); + setTimeout(() => { + sensor.off(sensor.SensorId.ACCELEROMETER); + done(); + }, 500); + } catch (err) { + console.error('On fail, errCode:' + err.code + ' ,msg:' + err.message); + expect(false).assertTrue(); + done(); + } + }); + } catch (err) { + console.error('Sensor is not support'); + expect(err.code).assertEqual(PARAMETER_ERROR_CODE); + expect(err.message).assertEqual(PARAMETER_ERROR_MSG); + done(); + } + }) + + /* + * @tc.name:SensorFrequencyJsTest_002 + * @tc.desc:verify app info is not null + * @tc.size: MediumTest + * @tc.type: Function + * @tc.level: Level 1 + * @tc.require: Issue Number + * @tc.number:SensorFrequencyJsTest_002 + */ + it("SensorFrequencyJsTest_002", 0, async function (done) { + console.info('----------------------SensorFrequencyJsTest_002---------------------------'); + try { + sensor.getSingleSensor(sensor.SensorId.ACCELEROMETER, (err, data) => { + if (err) { + console.error('getSingleSensor fail, errCode:' + err.code + ' ,msg:' + err.message); + expect(false).assertTrue(); + done(); + } + try { + sensor.on(sensor.SensorId.ACCELEROMETER, callback, {'interval': 'ui'}); + setTimeout(() => { + sensor.off(sensor.SensorId.ACCELEROMETER); + done(); + }, 500); + } catch (err) { + console.error('On fail, errCode:' + err.code + ' ,msg:' + err.message); + expect(false).assertTrue(); + done(); + } + }); + } catch (err) { + console.error('Sensor is not support'); + expect(err.code).assertEqual(PARAMETER_ERROR_CODE); + expect(err.message).assertEqual(PARAMETER_ERROR_MSG); + done(); + } + }) + + /* + * @tc.name:SensorFrequencyJsTest_003 + * @tc.desc:verify app info is not null + * @tc.size: MediumTest + * @tc.type: Function + * @tc.level: Level 1 + * @tc.require: Issue Number + * @tc.number:SensorFrequencyJsTest_003 + */ + it("SensorFrequencyJsTest_003", 0, async function (done) { + console.info('----------------------SensorFrequencyJsTest_003---------------------------'); + try { + sensor.getSingleSensor(sensor.SensorId.ACCELEROMETER, (err, data) => { + if (err) { + console.error('getSingleSensor fail, errCode:' + err.code + ' ,msg:' + err.message); + expect(false).assertTrue(); + done(); + } + try { + sensor.on(sensor.SensorId.ACCELEROMETER, callback, {'interval': 'normal'}); + setTimeout(() => { + sensor.off(sensor.SensorId.ACCELEROMETER); + done(); + }, 500); + } catch (err) { + console.error('On fail, errCode:' + err.code + ' ,msg:' + err.message); + expect(false).assertTrue(); + done(); + } + }); + } catch (err) { + console.error('Sensor is not support'); + expect(err.code).assertEqual(PARAMETER_ERROR_CODE); + expect(err.message).assertEqual(PARAMETER_ERROR_MSG); + done(); + } + }) + + /* + * @tc.name:SensorFrequencyJsTest_004 + * @tc.desc:verify app info is not null + * @tc.size: MediumTest + * @tc.type: Function + * @tc.level: Level 1 + * @tc.require: Issue Number + * @tc.number:SensorFrequencyJsTest_004 + */ + it("SensorFrequencyJsTest_004", 0, async function (done) { + console.info('----------------------SensorFrequencyJsTest_004---------------------------'); + try { + sensor.getSingleSensor(sensor.SensorId.GYROSCOPE, (err, data) => { + if (err) { + console.error('getSingleSensor fail, errCode:' + err.code + ' ,msg:' + err.message); + expect(false).assertTrue(); + done(); + } + try { + sensor.on(sensor.SensorId.GYROSCOPE, callback, {'interval': 'game'}); + setTimeout(() => { + sensor.off(sensor.SensorId.GYROSCOPE); + done(); + }, 500); + } catch (err) { + console.error('On fail, errCode:' + err.code + ' ,msg:' + err.message); + expect(false).assertTrue(); + done(); + } + }); + } catch (err) { + console.error('Sensor is not support'); + expect(err.code).assertEqual(PARAMETER_ERROR_CODE); + expect(err.message).assertEqual(PARAMETER_ERROR_MSG); + done(); + } + }) + + /* + * @tc.name:SensorFrequencyJsTest_005 + * @tc.desc:verify app info is not null + * @tc.size: MediumTest + * @tc.type: Function + * @tc.level: Level 1 + * @tc.require: Issue Number + * @tc.number:SensorFrequencyJsTest_005 + */ + it("SensorFrequencyJsTest_005", 0, async function (done) { + console.info('----------------------SensorFrequencyJsTest_005---------------------------'); + try { + sensor.getSingleSensor(sensor.SensorId.GYROSCOPE, (err, data) => { + if (err) { + console.error('getSingleSensor fail, errCode:' + err.code + ' ,msg:' + err.message); + expect(false).assertTrue(); + done(); + } + try { + sensor.on(sensor.SensorId.GYROSCOPE, callback, {'interval': 'ui'}); + setTimeout(() => { + sensor.off(sensor.SensorId.GYROSCOPE); + done(); + }, 500); + } catch (err) { + console.error('On fail, errCode:' + err.code + ' ,msg:' + err.message); + expect(false).assertTrue(); + done(); + } + }); + } catch (err) { + console.error('Sensor is not support'); + expect(err.code).assertEqual(PARAMETER_ERROR_CODE); + expect(err.message).assertEqual(PARAMETER_ERROR_MSG); + done(); + } + }) + + /* + * @tc.name:SensorFrequencyJsTest_006 + * @tc.desc:verify app info is not null + * @tc.size: MediumTest + * @tc.type: Function + * @tc.level: Level 1 + * @tc.require: Issue Number + * @tc.number:SensorFrequencyJsTest_006 + */ + it("SensorFrequencyJsTest_006", 0, async function (done) { + console.info('----------------------SensorFrequencyJsTest_006---------------------------'); + try { + sensor.getSingleSensor(sensor.SensorId.GYROSCOPE, (err, data) => { + if (err) { + console.error('getSingleSensor fail, errCode:' + err.code + ' ,msg:' + err.message); + expect(false).assertTrue(); + done(); + } + try { + sensor.on(sensor.SensorId.GYROSCOPE, callback, {'interval': 'normal'}); + setTimeout(() => { + sensor.off(sensor.SensorId.GYROSCOPE); + done(); + }, 500); + } catch (err) { + console.error('On fail, errCode:' + err.code + ' ,msg:' + err.message); + expect(false).assertTrue(); + done(); + } + }); + } catch (err) { + console.error('Sensor is not support'); + expect(err.code).assertEqual(PARAMETER_ERROR_CODE); + expect(err.message).assertEqual(PARAMETER_ERROR_MSG); + done(); + } + }) + + /* + * @tc.name:SensorFrequencyJsTest_007 + * @tc.desc:verify app info is not null + * @tc.size: MediumTest + * @tc.type: Function + * @tc.level: Level 1 + * @tc.require: Issue Number + * @tc.number:SensorFrequencyJsTest_007 + */ + it("SensorFrequencyJsTest_007", 0, async function (done) { + console.info('----------------------SensorFrequencyJsTest_007---------------------------'); + try { + sensor.getSingleSensor(sensor.SensorId.ORIENTATION, (err, data) => { + if (err) { + console.error('getSingleSensor fail, errCode:' + err.code + ' ,msg:' + err.message); + expect(false).assertTrue(); + done(); + } + try { + sensor.on(sensor.SensorId.ORIENTATION, callback2, {'interval': 'game'}); + setTimeout(() => { + sensor.off(sensor.SensorId.ORIENTATION); + done(); + }, 500); + } catch (err) { + console.error('On fail, errCode:' + err.code + ' ,msg:' + err.message); + expect(false).assertTrue(); + done(); + } + }); + } catch (err) { + console.error('Sensor is not support'); + expect(err.code).assertEqual(PARAMETER_ERROR_CODE); + expect(err.message).assertEqual(PARAMETER_ERROR_MSG); + done(); + } + }) + + /* + * @tc.name:SensorFrequencyJsTest_008 + * @tc.desc:verify app info is not null + * @tc.size: MediumTest + * @tc.type: Function + * @tc.level: Level 1 + * @tc.require: Issue Number + * @tc.number:SensorFrequencyJsTest_008 + */ + it("SensorFrequencyJsTest_008", 0, async function (done) { + console.info('----------------------SensorFrequencyJsTest_008---------------------------'); + try { + sensor.getSingleSensor(sensor.SensorId.ORIENTATION, (err, data) => { + if (err) { + console.error('getSingleSensor fail, errCode:' + err.code + ' ,msg:' + err.message); + expect(false).assertTrue(); + done(); + } + try { + sensor.on(sensor.SensorId.ORIENTATION, callback2, {'interval': 'ui'}); + setTimeout(() => { + sensor.off(sensor.SensorId.ORIENTATION); + done(); + }, 500); + } catch (err) { + console.error('On fail, errCode:' + err.code + ' ,msg:' + err.message); + expect(false).assertTrue(); + done(); + } + }); + } catch (err) { + console.error('Sensor is not support'); + expect(err.code).assertEqual(PARAMETER_ERROR_CODE); + expect(err.message).assertEqual(PARAMETER_ERROR_MSG); + done(); + } + }) + + /* + * @tc.name:SensorFrequencyJsTest_009 + * @tc.desc:verify app info is not null + * @tc.size: MediumTest + * @tc.type: Function + * @tc.level: Level 1 + * @tc.require: Issue Number + * @tc.number:SensorFrequencyJsTest_009 + */ + it("SensorFrequencyJsTest_009", 0, async function (done) { + console.info('----------------------SensorFrequencyJsTest_009---------------------------'); + try { + sensor.getSingleSensor(sensor.SensorId.ORIENTATION, (err, data) => { + if (err) { + console.error('getSingleSensor fail, errCode:' + err.code + ' ,msg:' + err.message); + expect(false).assertTrue(); + done(); + } + try { + sensor.on(sensor.SensorId.ORIENTATION, callback2, {'interval': 'normal'}); + setTimeout(() => { + sensor.off(sensor.SensorId.ORIENTATION); + done(); + }, 500); + } catch (err) { + console.error('On fail, errCode:' + err.code + ' ,msg:' + err.message); + expect(false).assertTrue(); + done(); + } + }); + } catch (err) { + console.error('Sensor is not support'); + expect(err.code).assertEqual(PARAMETER_ERROR_CODE); + expect(err.message).assertEqual(PARAMETER_ERROR_MSG); + done(); + } + }) +}) \ No newline at end of file diff --git a/test/unittest/interfaces/js/sensor_frequency/config.json b/test/unittest/interfaces/js/sensor_frequency/config.json new file mode 100644 index 00000000..a3f87348 --- /dev/null +++ b/test/unittest/interfaces/js/sensor_frequency/config.json @@ -0,0 +1,85 @@ +{ + "app": { + "bundleName": "com.example.myapplication", + "vendor": "example", + "version": { + "code": 1, + "name": "1.0" + }, + "apiVersion": { + "compatible": 4, + "target": 5 + } + }, + "deviceConfig": {}, + "module": { + "reqPermissions": [ + { + "name": "ohos.permission.ACCELEROMETER", + "reason": "need user ohos.permission.ACCELEROMETER", + "usedScene": { + "ability": [ + ".MainAbility" + ], + "when": "inuse" + } + }, + { + "name": "ohos.permission.GYROSCOPE", + "reason": "need user ohos.permission.GYROSCOPE", + "usedScene": { + "ability": [ + ".MainAbility" + ], + "when": "inuse" + } + } + ], + "package": "com.example.myapplication", + "name": ".myapplication", + "deviceType": [ + "default", + "tablet", + "2in1" + ], + "distro": { + "deliveryWithInstall": true, + "moduleName": "entry", + "moduleType": "entry" + }, + "abilities": [ + { + "visible": true, + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home" + ] + } + ], + "name": "com.example.myapplication.MainAbility", + "icon": "$media:icon", + "description": "$string:mainability_description", + "label": "PedometerDetectionJsTest", + "type": "page", + "launchType": "standard" + } + ], + "js": [ + { + "pages": [ + "pages/index/index" + ], + "name": "default", + "window": { + "designWidth": 720, + "autoDesignWidth": false + } + } + ] + } + } + \ No newline at end of file -- Gitee