+ @for (device of devices(); track device.address) {
+
+ }
+
+`;
+
+console.log('Test 1: Prosty @for z track');
+console.log('Input:', template1);
+const result1 = transformer.transform(template1);
+console.log('Output:', result1);
+console.log('Contains *ngFor:', result1.includes('*ngFor'));
+console.log('Contains ng-container:', result1.includes('ng-container'));
+
+// Test 2: @for z wywołaniem funkcji (devices())
+const template2 = `@for (item of items(); track item.id) {
+
+ @for (device of devices(); track device.address) {
+
+
{{ device.name || 'Unnamed' }}
+
{{ device.address }}
+
+ }
+
+
+`;
+console.log('\n\nTest 6: Pełny template devices component');
+console.log('Input:', template6);
+const result6 = transformer.transformAll(template6);
+console.log('Output:', result6);
+
+// Sprawdzenie czy wszystkie transformacje są poprawne
+const tests = [
+ {
+ name: 'Test 1: Simple interpolation transformed',
+ pass: result1.includes('[innerText]') && result1.includes('device.name')
+ },
+ {
+ name: 'Test 2: OR operator preserved',
+ pass: result2.includes('||') && result2.includes('Unnamed')
+ },
+ {
+ name: 'Test 3: Function call preserved',
+ pass: result3.includes('deviceCount()')
+ },
+ {
+ name: 'Test 4: Multiple interpolations',
+ pass: (result4.match(/\[innerText\]/g) || []).length === 2
+ },
+ {
+ name: 'Test 5: Attribute interpolation',
+ pass: result5.includes('data-quarc-attr-bindings') || result5.includes('[attr.title]')
+ },
+ {
+ name: 'Test 6: Full template has *ngFor',
+ pass: result6.includes('*ngFor')
+ },
+ {
+ name: 'Test 6: Full template has interpolations',
+ pass: result6.includes('[inner-text]') || result6.includes('[innerText]')
+ },
+ {
+ name: 'Test 6: No pipe errors in simple expressions',
+ pass: !result6.includes('this._pipes') || result6.includes('|')
+ }
+];
+
+console.log('\n\n=== Test Results ===');
+let passed = 0;
+let failed = 0;
+
+tests.forEach(test => {
+ const status = test.pass ? '✓ PASS' : '✗ FAIL';
+ console.log(`${status}: ${test.name}`);
+ if (test.pass) passed++;
+ else failed++;
+});
+
+console.log(`\nTotal: ${passed} passed, ${failed} failed`);
+
+// Dodatkowa diagnostyka
+console.log('\n\n=== Diagnostyka ===');
+console.log('Czy result1 zawiera this._pipes?:', result1.includes('this._pipes'));
+console.log('Czy result2 zawiera this._pipes?:', result2.includes('this._pipes'));
+console.log('Czy result3 zawiera this._pipes?:', result3.includes('this._pipes'));
+console.log('\nResult6 check:');
+console.log('Zawiera [inner-text]?:', result6.includes('[inner-text]'));
+console.log('Zawiera [innerText]?:', result6.includes('[innerText]'));
+console.log('Liczba wystąpień [inner-text]:', (result6.match(/\[inner-text\]/g) || []).length);
+console.log('Liczba wystąpień [innerText]:', (result6.match(/\[innerText\]/g) || []).length);
+
+if (failed > 0) {
+ console.error('\n❌ INTERPOLATION TRANSFORMATION TEST FAILED');
+ process.exit(1);
+} else {
+ console.log('\n✅ INTERPOLATION TRANSFORMATION TEST PASSED');
+ process.exit(0);
+}
diff --git a/tests/unit/test-pipe-with-logical-operators.ts b/tests/unit/test-pipe-with-logical-operators.ts
new file mode 100644
index 0000000..5332972
--- /dev/null
+++ b/tests/unit/test-pipe-with-logical-operators.ts
@@ -0,0 +1,88 @@
+/**
+ * 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);
+}