import { test, describe } from 'node:test';
import { strict as assert } from 'node:assert';
describe('Tests Edge Cases Basiques', () => {
describe('JSON et Données', () => {
test('JSON malformé', () => {
const malformedJson = '{"name": "incomplete"';
try {
JSON.parse(malformedJson);
assert.fail('Should have thrown');
} catch (error) {
assert.ok(error instanceof SyntaxError);
}
});
test('Unicode et caractères spéciaux', () => {
const text = "Café 🚀 测试";
const jsonString = JSON.stringify({text});
const parsed = JSON.parse(jsonString);
assert.equal(parsed.text, text);
});
test('Références circulaires', () => {
const obj = {name: "test"};
obj.self = obj;
try {
JSON.stringify(obj);
assert.fail('Should have thrown');
} catch (error) {
assert.ok(error.message.includes('circular'));
}
});
});
describe('APIs manquantes', () => {
test('fetch manquant', () => {
const original = global.fetch;
delete global.fetch;
try {
fetch('http://test.com');
assert.fail('Should have thrown');
} catch (error) {
assert.ok(error.name === 'ReferenceError');
} finally {
global.fetch = original;
}
});
test('localStorage manquant', () => {
const original = global.localStorage;
delete global.localStorage;
try {
localStorage.setItem('test', 'value');
assert.fail('Should have thrown');
} catch (error) {
assert.ok(error.name === 'ReferenceError');
} finally {
global.localStorage = original;
}
});
});
describe('Sécurité', () => {
test('Échappement XSS', () => {
const malicious = '';
const escaped = malicious
.replace(//g, '>');
assert.equal(escaped, '<script>alert("xss")</script>');
assert.ok(!escaped.includes(''
];
for (const url of dangerousUrls) {
try {
const urlObj = new URL(url);
assert.ok(!['http:', 'https:'].includes(urlObj.protocol));
} catch (error) {
// URL invalide - acceptable
assert.ok(error instanceof TypeError);
}
}
});
});
describe('Performance', () => {
test('Grandes données', () => {
const largeArray = new Array(10000).fill('test');
assert.equal(largeArray.length, 10000);
assert.equal(largeArray[0], 'test');
});
test('Chaînes longues', () => {
const longString = 'x'.repeat(100000);
assert.equal(longString.length, 100000);
assert.equal(longString[0], 'x');
});
test('Calculs rapides', () => {
const start = Date.now();
let result = 0;
for (let i = 0; i < 10000; i++) {
result += Math.sqrt(i);
}
const end = Date.now();
assert.ok(result > 0);
assert.ok(end - start < 1000); // Moins d'1 seconde
});
});
describe('Concurrence', () => {
test('Promises parallèles', async () => {
const promises = [];
for (let i = 0; i < 5; i++) {
promises.push(
new Promise(resolve =>
setTimeout(() => resolve(i), 10)
)
);
}
const results = await Promise.all(promises);
assert.equal(results.length, 5);
assert.ok(results.includes(0));
assert.ok(results.includes(4));
});
test('Race condition simple', async () => {
let counter = 0;
const increment = async () => {
const current = counter;
await new Promise(resolve => setTimeout(resolve, 1));
counter = current + 1;
};
await Promise.all([increment(), increment()]);
assert.ok(counter >= 1 && counter <= 2);
});
});
});