| <!DOCTYPE html> |
| <html lang="ru"> |
| <head> |
| <meta charset="UTF-8"> |
| <title>TS → Python unittest converter</title> |
| <style> |
| body { font-family: sans-serif; margin: 20px; } |
| textarea { width: 100%; height: 200px; font-family: monospace; } |
| button { margin: 10px 0; padding: 6px 12px; } |
| label { font-weight: bold; } |
| </style> |
| </head> |
| <body> |
| <label for="ts-input">TS тесты (массив массивов):</label><br> |
| <textarea id="ts-input">[ |
| ['т.д.', 'т.\u00A0д.'], |
| ['т.п.', 'т.\u00A0п.'] |
| ]</textarea> |
| <br> |
| <button id="convert">Конвертировать в Python assertEqual</button> |
| <br> |
| <label for="py-output">Python-код:</label><br> |
| <textarea id="py-output" readonly></textarea> |
|
|
| <script> |
| function pyEscape(s) { |
| return s |
| .replace(/\\/g, '\\\\') |
| .replace(/'/g, "\\'") |
| .replace(/\u00A0/g, '\\u00A0') |
| .replace(/\r/g, '\\r') |
| .replace(/\n/g, '\\n'); |
| } |
| |
| document.getElementById('convert').addEventListener('click', () => { |
| const input = document.getElementById('ts-input').value.trim(); |
| let data; |
| try { |
| |
| data = eval(input); |
| } catch (e) { |
| alert('Не смог распарсить TS-массив. Проверь синтаксис.\n\n' + e); |
| return; |
| } |
| |
| if (!Array.isArray(data)) { |
| alert('Ожидаю внешний массив.'); |
| return; |
| } |
| |
| const lines = []; |
| for (const pair of data) { |
| if (!Array.isArray(pair) || pair.length < 2) continue; |
| const src = String(pair[0]); |
| const dst = String(pair[1]); |
| |
| const srcEsc = pyEscape(src); |
| const dstEsc = pyEscape(dst); |
| |
| lines.push( |
| ` self.assertEqual(tg.execute('${srcEsc}'), '${dstEsc}')` |
| ); |
| } |
| |
| document.getElementById('py-output').value = lines.join('\n'); |
| }); |
| </script> |
| </body> |
| </html> |