You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

42 lines
2.1 KiB

import fs from 'fs';
import path from 'path';
import assert from 'assert';
import { createRequire } from 'module';
const require = createRequire(import.meta.url);
require('../content/selectors.js');
const parser = require('../content/parser.js');
const OPEN = '<div class="ds-markdown">';
const CLOSE = '</div>';
function loadFixture(name) {
const html = fs.readFileSync(path.join(process.cwd(), 'test/fixtures', name), 'utf8');
const a = html.indexOf(OPEN);
const b = html.lastIndexOf(CLOSE);
const inner = (a >= 0 && b > a) ? html.slice(a + OPEN.length, b) : '';
const text = inner.split('<').join('').split('>').join('').trim();
const node = { nodeType: 1, className: 'ds-markdown', childNodes: [{ nodeType: 3, nodeValue: text }] };
return { querySelectorAll: function (sel) { return sel === '.ds-markdown' ? [node] : []; } };
}
const tests = [];
function t(name, fn) { tests.push({ name: name, fn: fn }); }
t('dsh count', function () { assert.equal(parser.parseChatText(loadFixture('reply_dsh.html')).calls.length, 1); });
t('dsh tool', function () { assert.equal(parser.parseChatText(loadFixture('reply_dsh.html')).calls[0].tool, 'dsh_read'); });
t('dsh path', function () { assert.equal(parser.parseChatText(loadFixture('reply_dsh.html')).calls[0].args.path, 'a.txt'); });
t('b64 count', function () { assert.equal(parser.parseChatText(loadFixture('reply_b64.html')).calls.length, 1); });
t('b64 tool', function () { assert.equal(parser.parseChatText(loadFixture('reply_b64.html')).calls[0].tool, 'dsh_read'); });
t('file path', function () { assert.equal(parser.parseChatText(loadFixture('reply_file.html')).calls[0].args.path, 't.txt'); });
t('file content', function () { assert.ok(parser.parseChatText(loadFixture('reply_file.html')).calls[0].args.content.indexOf('line one') >= 0); });
t('broken no throw', function () {
const r = parser.parseChatText(loadFixture('reply_broken.html'));
assert.equal(r.calls.length, 0);
});
let pass = 0, fail = 0;
for (const x of tests) {
try { x.fn(); console.log('ok ' + x.name); pass++; }
catch (e) { console.log('FAIL ' + x.name + ' ' + e.message); fail++; }
}
console.log(pass + '/' + (pass + fail));
process.exit(fail > 0 ? 1 : 0);