feat: add weekly curriculum cover image upload and display
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
const assert = require('node:assert/strict');
|
||||
const fs = require('node:fs');
|
||||
const path = require('node:path');
|
||||
const os = require('node:os');
|
||||
const vm = require('node:vm');
|
||||
const { spawnSync } = require('node:child_process');
|
||||
const ts = require('typescript');
|
||||
const root = path.join(__dirname, '..');
|
||||
const source = fs.readFileSync(path.join(root, 'src/main/index.ts'), 'utf8');
|
||||
const ast = ts.createSourceFile('index.ts', source, ts.ScriptTarget.Latest, true);
|
||||
const ctx = { exports: {} };
|
||||
vm.runInNewContext(ts.transpileModule(fs.readFileSync(path.join(root, 'src/main/yahboomRuntime.ts'), 'utf8'), {
|
||||
compilerOptions: { module: ts.ModuleKind.CommonJS },
|
||||
}).outputText, ctx);
|
||||
Object.assign(ctx, ctx.exports);
|
||||
vm.runInNewContext(ts.transpileModule(fs.readFileSync(path.join(root, 'src/main/cameraRuntime.ts'), 'utf8'), {
|
||||
compilerOptions: { module: ts.ModuleKind.CommonJS },
|
||||
}).outputText, ctx);
|
||||
const images = [{ image: 'future-nav2-camera-test:humble-jetson_orin' },
|
||||
{ image: 'future-nav2:humble-jetson_orin' }, { image: 'slam-ros-bridge:jetson_orin' }];
|
||||
assert.deepEqual(ctx.exports.cameraRuntimeArtifacts('[lms-nav2-camera-test]nav2-camera-test_v1.0.0_ws', images), images.slice(0, 1));
|
||||
assert.deepEqual(ctx.exports.cameraRuntimeArtifacts('[lms-nav2-mkmini]nav2-mkmini_v1.0.0_ws', images), images.slice(1));
|
||||
assert.equal(ctx.exports.cameraRuntimeArtifacts('anything', undefined), undefined);
|
||||
const names = ['buildNav2DockerRunScript', 'buildNav2DockerBuildScript'];
|
||||
for (const node of ast.statements) {
|
||||
if (ts.isFunctionDeclaration(node) && names.includes(node.name?.text)) {
|
||||
vm.runInNewContext(ts.transpileModule(node.getText(ast), {}).outputText, ctx);
|
||||
}
|
||||
}
|
||||
const run = ctx.buildNav2DockerRunScript();
|
||||
const build = ctx.buildNav2DockerBuildScript();
|
||||
for (const script of [run, build]) {
|
||||
const syntax = spawnSync('bash', ['-n'], { input: script, encoding: 'utf8' });
|
||||
assert.equal(syntax.status, 0, syntax.stderr);
|
||||
}
|
||||
assert.match(run, /lms-nav2-camera-test\*\) PACKAGE=camera_test_pkg; LAUNCH=camera.launch.py/);
|
||||
assert.match(build, /lms-nav2-camera-test\*\) TARGET=camera_test_pkg/);
|
||||
assert.match(run, /--device "\$CAMERA_DEVICE:\$CAMERA_DEVICE"/);
|
||||
assert.match(run, /for capture_device in \/dev\/capture-vi-channel\*/);
|
||||
assert.match(run, /--device "\$capture_device:\$capture_device"/);
|
||||
assert.match(run, /FASTDDS_DEFAULT_PROFILES_FILE/);
|
||||
assert.match(run, /ROS_LOCALHOST_ONLY=\$ROS_LOCALHOST_ONLY_VALUE/);
|
||||
const dir = fs.mkdtempSync(path.join(os.tmpdir(), 'camera-runtime-'));
|
||||
const folder = '[lms-nav2-camera-test]nav2-camera-test_v1.0.0_ws';
|
||||
try {
|
||||
fs.mkdirSync(path.join(dir, folder, 'install'), { recursive: true });
|
||||
fs.writeFileSync(path.join(dir, folder, 'install/setup.bash'), '');
|
||||
for (const device of ['/dev/null', '/dev/video999999', '/tmp/video0']) {
|
||||
const result = spawnSync('bash', ['-s', '--', 'camera-test', dir, folder, 'camera-image', '77', 'false', `video_device:=${device}`],
|
||||
{ input: run, encoding: 'utf8' });
|
||||
assert.notEqual(result.status, 0);
|
||||
assert.match(result.stderr, /Camera device not found/);
|
||||
}
|
||||
} finally { fs.rmSync(dir, { recursive: true, force: true }); }
|
||||
console.log('Camera module routing, shell syntax, DDS settings and device validation passed.');
|
||||
Reference in New Issue
Block a user