Skip to content
代码片段 群组 项目
提交 4a10ecfa 编辑于 作者: Timotej Ecimovic's avatar Timotej Ecimovic
浏览文件

Update SDK generation logic and enhance unit tests.

上级 304687be
No related branches found
No related tags found
无相关合并请求
此差异已折叠。
......@@ -40,6 +40,7 @@
"electron-builder": "^20.44.4",
"express": "^4.17.1",
"express-session": "^1.17.1",
"jest": "^26.0.1",
"node-abi": "^2.17.0",
"node-gyp": "^6.1.0",
"node-pre-gyp": "^0.14.0",
......
......@@ -23,12 +23,25 @@ import { logError } from '../util/env'
function cleanse(name) {
var ret = name.replace(/-/g, '_')
var ret = ret.replace(/ /g, '_')
var ret = ret.replace(/\//g, '_')
var ret = ret.toLowerCase()
ret = ret.replace(/ /g, '_')
ret = ret.replace(/\//g, '_')
ret = ret.replace(/\./g, '_')
ret = ret.replace(/\(/g, '')
ret = ret.replace(/\)/g, '')
ret = ret.toLowerCase()
return ret
}
function toSlcc(obj) {
var ret = '---\n'
return ret.concat(yaml.stringify(obj))
}
// Device types
function deviceTypeContribFileName(deviceType) {
return 'zcl_device_type_' + cleanse(deviceType.label) + '.zapcontrib'
}
function createDeviceTypeComponent(deviceType) {
return {
id: 'zcl_device_type_' + cleanse(deviceType.label),
......@@ -37,9 +50,49 @@ function createDeviceTypeComponent(deviceType) {
package: 'Zigbee',
category: 'Zigbee|Zigbee Cluster Library|Device Type',
quality: 'production',
root_path: 'app/zigbee/component',
config_file: [
{
path: deviceTypeContribFileName(deviceType),
directory: 'zap',
},
],
}
}
function createDeviceTypeContrib(deviceType) {
var output = Object.assign({}, deviceType)
delete output.id
return output
}
function generateSingleDeviceTypeZapContrib(ctx, deviceType) {
var fileName = path.join(
ctx.generationDir,
deviceTypeContribFileName(deviceType)
)
var output = JSON.stringify(createDeviceTypeContrib(deviceType))
if (ctx.dontWrite) return Promise.resolve()
else return fs.promises.writeFile(fileName, output)
}
function generateSingleDeviceTypeSlcc(ctx, deviceType) {
var fileName = path.join(
ctx.generationDir,
'zcl_device_type_' + cleanse(deviceType.label) + '.slcc'
)
var output = toSlcc(createDeviceTypeComponent(deviceType))
if (ctx.dontWrite) return Promise.resolve()
else return fs.promises.writeFile(fileName, output)
}
// Cluster definitions
function clusterDefContribFileName(cluster) {
return 'zcl_cluster_def_' + cleanse(cluster.label) + '.zapcontrib'
}
function createClusterDefComponent(cluster) {
return {
id: 'zcl_cluster_' + cleanse(cluster.label) + '_def',
......@@ -48,9 +101,50 @@ function createClusterDefComponent(cluster) {
package: 'Zigbee',
category: 'Zigbee|Zigbee Cluster Library|Configuration',
quality: 'production',
root_path: 'app/zigbee/component',
config_file: [
{
path: clusterDefContribFileName(cluster),
directory: 'zap',
},
],
}
}
function createClusterDefContrib(cluster) {
var clusterOut = Object.assign({}, cluster)
delete clusterOut.id
return {
cluster: clusterOut,
type: 'def',
}
}
function generateSingleClusterDefContrib(ctx, cluster) {
var fileName = path.join(
ctx.generationDir,
clusterDefContribFileName(cluster)
)
var output = JSON.stringify(createClusterDefContrib(cluster))
if (ctx.dontWrite) return Promise.resolve()
else return fs.promises.writeFile(fileName, output)
}
function generateSingleClusterDefSlcc(ctx, cluster) {
var fileName = path.join(
ctx.generationDir,
'zcl_cluster_def_' + cleanse(cluster.label) + '.slcc'
)
var output = toSlcc(createClusterDefComponent(cluster))
if (ctx.dontWrite) return Promise.resolve()
else return fs.promises.writeFile(fileName, output)
}
// Cluster implementations
function clusterImpContribFileName(cluster) {
return 'zcl_cluster_imp_' + cleanse(cluster.label) + '.zapcontrib'
}
function createClusterImpComponent(cluster) {
return {
id: 'zcl_cluster_' + cleanse(cluster.label) + '_imp',
......@@ -59,40 +153,41 @@ function createClusterImpComponent(cluster) {
package: 'Zigbee',
category: 'Zigbee|Zigbee Cluster Library|Implementation',
quality: 'production',
root_path: 'app/zigbee/component',
config_file: [
{
path: clusterImpContribFileName(cluster),
directory: 'zap',
},
],
}
}
function generateSingleDeviceType(ctx, deviceType) {
var fileName = path.join(
ctx.generationDir,
'zcl_device_type_' + cleanse(deviceType.label) + '.slcc'
)
console.log(` - ${fileName}`)
var output = yaml.stringify(createDeviceTypeComponent(deviceType))
if (ctx.dontWrite) return Promise.resolve()
else return fs.promises.writeFile(fileName, output)
function createClusterImpContrib(cluster) {
var clusterOut = Object.assign({}, cluster)
delete clusterOut.id
return {
cluster: clusterOut,
type: 'imp',
}
}
function generateSingleCluster(ctx, cluster) {
function generateSingleClusterImpContrib(ctx, cluster) {
var fileName = path.join(
ctx.generationDir,
'zcl_cluster_def_' + cleanse(cluster.label) + '.slcc'
clusterImpContribFileName(cluster)
)
console.log(` - ${fileName}`)
var output = yaml.stringify(createClusterDefComponent(cluster))
var output = JSON.stringify(createClusterImpContrib(cluster))
if (ctx.dontWrite) return Promise.resolve()
else return fs.promises.writeFile(fileName, output)
}
function generateSingleClusterImplementation(ctx, cluster) {
function generateSingleClusterImpSlcc(ctx, cluster) {
var fileName = path.join(
ctx.generationDir,
'zcl_cluster_imp_' + cleanse(cluster.label) + '.slcc'
)
console.log(` - ${fileName}`)
var output = yaml.stringify(createClusterImpComponent(cluster))
var output = toSlcc(createClusterImpComponent(cluster))
if (ctx.dontWrite) return Promise.resolve()
else return fs.promises.writeFile(fileName, output)
}
......@@ -102,7 +197,8 @@ function generateDeviceTypes(ctx) {
var promises = []
console.log(`Generating ${deviceTypeArray.length} device types`)
deviceTypeArray.forEach((element) => {
promises.push(generateSingleDeviceType(ctx, element))
promises.push(generateSingleDeviceTypeSlcc(ctx, element))
promises.push(generateSingleDeviceTypeZapContrib(ctx, element))
})
return Promise.all(promises)
})
......@@ -113,8 +209,10 @@ function generateClusters(ctx) {
var promises = []
console.log(`Generating ${clustersArray.length} clusters`)
clustersArray.forEach((element) => {
promises.push(generateSingleCluster(ctx, element))
promises.push(generateSingleClusterImplementation(ctx, element))
promises.push(generateSingleClusterDefSlcc(ctx, element))
promises.push(generateSingleClusterDefContrib(ctx, element))
promises.push(generateSingleClusterImpSlcc(ctx, element))
promises.push(generateSingleClusterImpContrib(ctx, element))
})
return Promise.all(promises)
})
......
/**
* @jest-environment node
*/
import path from 'path'
import fs from 'fs'
import { version } from '../package.json'
......@@ -11,52 +15,43 @@ import {
schemaFile,
sqliteTestFile,
appDirectory,
logError,
} from '../src-electron/util/env'
import { runSdkGeneration } from '../src-electron/sdk-gen/sdk-gen'
import { loadZcl } from '../src-electron/zcl/zcl-loader'
import { zclPropertiesFile } from '../src-electron/main-process/args'
import { selectAllClusters } from '../src-electron/db/query-zcl'
import { resolve } from 'dns'
/*
* Created Date: Friday, March 13th 2020, 7:44:12 pm
* Author: Timotej Ecimovic
*
* Copyright (c) 2020 Silicon Labs
*/
var db
describe('SDK gen tests', () => {
var db
beforeAll(() =>
initDatabase(sqliteTestFile(4))
.then((d) => loadSchema(d, schemaFile(), version))
.then((d) => loadZcl(d, zclPropertiesFile))
.then((d) => {
db = d
logInfo('DB initialized.')
})
)
beforeAll(() => {
var file = sqliteTestFile(4)
return initDatabase(file)
.then((d) => loadSchema(d, schemaFile(), version))
.then((d) => loadZcl(d, zclPropertiesFile))
.then((d) => {
db = d
logInfo('DB initialized.')
afterAll(() => {
var file = sqliteTestFile(4)
return closeDatabase(db).then(() => {
if (fs.existsSync(file)) fs.unlinkSync(file)
})
})
afterAll(() => {
var file = sqliteTestFile(4)
return closeDatabase(db).then(() => {
if (fs.existsSync(file)) fs.unlinkSync(file)
})
})
test('Cluster data existence', () => {
return selectAllClusters(db).then((data) => {
expect(data.length).toBeGreaterThan(10)
test('Cluster data existence', () => {
return selectAllClusters(db).then((data) => {
expect(data.length).toBeGreaterThan(10)
})
})
})
test('SDK generation', () => {
return runSdkGeneration({
db: db,
generationDir: path.join(appDirectory(), 'sdk-gen'),
templateDir: '',
dontWrite: false,
})
test('SDK generation', () => {
return runSdkGeneration({
db: db,
generationDir: path.join(appDirectory(), 'sdk-gen'),
templateDir: '',
dontWrite: false,
})
}, 5000)
})
0% 加载中 .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册