quarc/tests/unit/test-pipe-with-logical-oper...

89 lines
3.3 KiB
TypeScript

/**
* Test aby upewnić się, że operatory logiczne (||, &&) nie są mylone z pipe separator |
*/
import { TemplateTransformer } from '../../cli/processors/template/template-transformer';
console.log('\n=== Test: Pipe vs Logical Operators ===\n');
const transformer = new TemplateTransformer();
// Test 1: Operator || nie powinien być traktowany jako pipe
const test1 = `{{ value || 'default' }}`;
console.log('Test 1: Operator ||');
console.log('Input:', test1);
const result1 = transformer.transformInterpolation(test1);
console.log('Output:', result1);
const pass1 = !result1.includes('this._pipes') && result1.includes('||');
console.log('Pass:', pass1);
// Test 2: Operator && nie powinien być traktowany jako pipe
const test2 = `{{ condition && value }}`;
console.log('\nTest 2: Operator &&');
console.log('Input:', test2);
const result2 = transformer.transformInterpolation(test2);
console.log('Output:', result2);
const pass2 = !result2.includes('this._pipes') && result2.includes('&&');
console.log('Pass:', pass2);
// Test 3: Prawdziwy pipe powinien być transformowany
const test3 = `{{ value | uppercase }}`;
console.log('\nTest 3: Prawdziwy pipe');
console.log('Input:', test3);
const result3 = transformer.transformInterpolation(test3);
console.log('Output:', result3);
const pass3 = result3.includes('this._pipes') && result3.includes('uppercase');
console.log('Pass:', pass3);
// Test 4: Pipe z argumentami
const test4 = `{{ value | slice:0:10 }}`;
console.log('\nTest 4: Pipe z argumentami');
console.log('Input:', test4);
const result4 = transformer.transformInterpolation(test4);
console.log('Output:', result4);
const pass4 = result4.includes('this._pipes') && result4.includes('slice');
console.log('Pass:', pass4);
// Test 5: Kombinacja || i pipe
const test5 = `{{ (value || 'default') | uppercase }}`;
console.log('\nTest 5: Kombinacja || i pipe');
console.log('Input:', test5);
const result5 = transformer.transformInterpolation(test5);
console.log('Output:', result5);
const pass5 = result5.includes('this._pipes') && result5.includes('||') && result5.includes('uppercase');
console.log('Pass:', pass5);
// Test 6: Wielokrotne ||
const test6 = `{{ value1 || value2 || 'default' }}`;
console.log('\nTest 6: Wielokrotne ||');
console.log('Input:', test6);
const result6 = transformer.transformInterpolation(test6);
console.log('Output:', result6);
const pass6 = !result6.includes('this._pipes') && (result6.match(/\|\|/g) || []).length === 2;
console.log('Pass:', pass6);
// Test 7: Łańcuch pipes
const test7 = `{{ value | lowercase | slice:0:5 }}`;
console.log('\nTest 7: Łańcuch pipes');
console.log('Input:', test7);
const result7 = transformer.transformInterpolation(test7);
console.log('Output:', result7);
const pass7 = result7.includes('lowercase') && result7.includes('slice');
console.log('Pass:', pass7);
const allTests = [pass1, pass2, pass3, pass4, pass5, pass6, pass7];
const passed = allTests.filter(p => p).length;
const failed = allTests.length - passed;
console.log('\n=== Summary ===');
console.log(`Passed: ${passed}/${allTests.length}`);
console.log(`Failed: ${failed}/${allTests.length}`);
if (failed > 0) {
console.error('\n❌ PIPE VS LOGICAL OPERATORS TEST FAILED');
process.exit(1);
} else {
console.log('\n✅ PIPE VS LOGICAL OPERATORS TEST PASSED');
process.exit(0);
}