98 lines
2.1 KiB
JavaScript
98 lines
2.1 KiB
JavaScript
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
const html = fs.readFileSync(path.join(__dirname, '../public/index.html'), 'utf8');
|
|
|
|
// Mock HTML elements from index.html
|
|
const elements = {};
|
|
const matchIds = html.match(/id="([^"]+)"/g) || [];
|
|
matchIds.forEach(idAttr => {
|
|
const id = idAttr.split('"')[1];
|
|
elements[id] = {
|
|
id,
|
|
addEventListener: (event, cb) => {},
|
|
style: {},
|
|
classList: {
|
|
add: () => {},
|
|
remove: () => {},
|
|
contains: () => false
|
|
},
|
|
querySelectorAll: () => []
|
|
};
|
|
});
|
|
|
|
global.document = {
|
|
readyState: 'complete',
|
|
documentElement: {
|
|
setAttribute: (name, val) => {},
|
|
getAttribute: (name) => 'dark'
|
|
},
|
|
getElementById: (id) => {
|
|
if (!elements[id]) {
|
|
console.warn(`[Warning] getElementById: ID "${id}" not found in index.html!`);
|
|
return null;
|
|
}
|
|
return elements[id];
|
|
},
|
|
querySelector: (selector) => {
|
|
return {
|
|
addEventListener: () => {},
|
|
style: {},
|
|
classList: { add: () => {}, remove: () => {} }
|
|
};
|
|
},
|
|
querySelectorAll: (selector) => {
|
|
return [];
|
|
},
|
|
createElement: (tag) => {
|
|
return { style: {}, classList: { add: () => {} } };
|
|
},
|
|
body: {
|
|
appendChild: () => {}
|
|
},
|
|
addEventListener: (event, cb) => {
|
|
if (event === 'DOMContentLoaded') {
|
|
cb();
|
|
}
|
|
}
|
|
};
|
|
|
|
global.window = {
|
|
location: { href: '' },
|
|
speechSynthesis: {
|
|
getVoices: () => [],
|
|
addEventListener: () => {}
|
|
},
|
|
document: global.document
|
|
};
|
|
|
|
global.localStorage = {
|
|
getItem: () => null,
|
|
setItem: () => {},
|
|
removeItem: () => {}
|
|
};
|
|
|
|
global.marked = {
|
|
Renderer: function() {},
|
|
use: () => {}
|
|
};
|
|
|
|
global.navigator = {
|
|
clipboard: {}
|
|
};
|
|
|
|
// Mock fetch to not crash Node
|
|
global.fetch = () => new Promise((resolve) => resolve({
|
|
ok: true,
|
|
json: () => Promise.resolve({ success: true, observations: [] }),
|
|
text: () => Promise.resolve('')
|
|
}));
|
|
|
|
try {
|
|
console.log("Loading public/app.js with proper mock...");
|
|
require('../public/app.js');
|
|
console.log("Successfully ran public/app.js without throwing errors!");
|
|
} catch (err) {
|
|
console.error("FATAL ERROR running app.js:", err);
|
|
}
|