Asper Header  1.0.14
The header injector extension
Loading...
Searching...
No Matches
morse.test.ts
Go to the documentation of this file.
1
15import * as assert from 'assert';
16import { MorseTranslator } from '../modules/morseCode';
17
25suite('MorseTranslator Tests', () => {
30 test('Hello converts correctly', () => {
31 const result = MorseTranslator.toMorse("HELLO");
32 assert.strictEqual(result, ".... . .-.. .-.. ---");
33 });
34
39 test('Handles two words', () => {
40 const result = MorseTranslator.toMorse("Hi bye");
41 assert.strictEqual(result, ".... .. / -... -.-- .");
42 });
43
48 test('Handles two words and an end of line', () => {
49 const result = MorseTranslator.toMorse("Hi bye\n");
50 assert.strictEqual(result, ".... .. / -... -.-- . //");
51 });
52
57 test('Handles a word and punctuation', () => {
58 const result = MorseTranslator.toMorse("Hi!");
59 assert.strictEqual(result, ".... .. -.-.--");
60 });
61
66 test('Handles spaces, words and punctuation', () => {
67 const result = MorseTranslator.toMorse("Hello world!\n");
68 assert.strictEqual(result, ".... . .-.. .-.. --- / .-- --- .-. .-.. -.. -.-.-- //");
69 });
70
71 // Extended test coverage for edge cases and validation
72
77 test('Handles empty string', () => {
78 const result = MorseTranslator.toMorse("");
79 assert.strictEqual(result, "");
80 });
81
86 test('Handles numbers correctly', () => {
87 const result = MorseTranslator.toMorse("123");
88 assert.strictEqual(result, ".---- ..--- ...--");
89 });
90
95 test('Handles all digits 0-9', () => {
96 const result = MorseTranslator.toMorse("0123456789");
97 assert.strictEqual(result, "----- .---- ..--- ...-- ....- ..... -.... --... ---.. ----.");
98 });
99
104 test('Handles punctuation marks', () => {
105 const result = MorseTranslator.toMorse(".,?'!/");
106 assert.strictEqual(result, ".-.-.- --..-- ..--.. .----. -.-.-- -..-.");
107 });
108
113 test('Case insensitive conversion', () => {
114 const upper = MorseTranslator.toMorse("HELLO");
115 const lower = MorseTranslator.toMorse("hello");
116 const mixed = MorseTranslator.toMorse("HeLLo");
117 assert.strictEqual(upper, lower);
118 assert.strictEqual(upper, mixed);
119 });
120
125 test('Handles unsupported characters gracefully', () => {
126 const result = MorseTranslator.toMorse("A@B#C$");
127 // Should include A, @, B, skip #, then C, $ (actual behavior)
128 assert.strictEqual(result, ".- .--.-. -... -.-. ...-..-");
129 });
130
135 test('Multiple spaces become single word separator', () => {
136 const result = MorseTranslator.toMorse("A B");
137 assert.strictEqual(result, ".- / / / -...");
138 });
139
144 test('Multiple newlines become double separators', () => {
145 const result = MorseTranslator.toMorse("A\n\nB");
146 assert.strictEqual(result, ".- // // -...");
147 });
148
149 // Bidirectional conversion tests
150
155 test('Bidirectional conversion - simple text', () => {
156 const original = "HELLO WORLD";
157 const morse = MorseTranslator.toMorse(original);
158 const decoded = MorseTranslator.fromMorse(morse);
159 assert.strictEqual(decoded, original);
160 });
161
166 test('Bidirectional conversion - with numbers', () => {
167 const original = "TEST 123";
168 const morse = MorseTranslator.toMorse(original);
169 const decoded = MorseTranslator.fromMorse(morse);
170 assert.strictEqual(decoded, original);
171 });
172
177 test('Bidirectional conversion - with punctuation', () => {
178 const original = "SOS! HELP.";
179 const morse = MorseTranslator.toMorse(original);
180 const decoded = MorseTranslator.fromMorse(morse);
181 assert.strictEqual(decoded, original);
182 });
183
188 test('Bidirectional conversion - with newlines', () => {
189 const original = "LINE1\nLINE2";
190 const morse = MorseTranslator.toMorse(original);
191 const decoded = MorseTranslator.fromMorse(morse);
192 assert.strictEqual(decoded, original);
193 });
194
195 // Morse to text conversion tests
196
201 test('fromMorse - simple conversion', () => {
202 const result = MorseTranslator.fromMorse(".... . .-.. .-.. ---");
203 assert.strictEqual(result, "HELLO");
204 });
205
210 test('fromMorse - with word separator', () => {
211 const result = MorseTranslator.fromMorse(".... . .-.. .-.. --- / .-- --- .-. .-.. -..");
212 assert.strictEqual(result, "HELLO WORLD");
213 });
214
219 test('fromMorse - with line separator', () => {
220 const result = MorseTranslator.fromMorse(".... . .-.. .-.. --- // .-- --- .-. .-.. -..");
221 assert.strictEqual(result, "HELLO\nWORLD");
222 });
223
228 test('fromMorse - handles invalid morse patterns', () => {
229 const result = MorseTranslator.fromMorse(".... ........ . .-.. .-.. ---");
230 // Should skip invalid pattern "........" and decode the rest
231 assert.strictEqual(result, "HELLO");
232 });
233
238 test('fromMorse - empty string', () => {
239 const result = MorseTranslator.fromMorse("");
240 assert.strictEqual(result, "");
241 });
242
243 // Performance and stress tests
244
249 test('Handles long text efficiently', () => {
250 const longText = "ABCDEFGHIJKLMNOPQRSTUVWXYZ ".repeat(100);
251 const morse = MorseTranslator.toMorse(longText);
252 const decoded = MorseTranslator.fromMorse(morse);
253 assert.strictEqual(decoded, longText.toUpperCase());
254 });
255
260 test('Handles complex mixed content', () => {
261 const complex = "Hello World! 123\nThis is a test.\nWith numbers: 456-789.";
262 const morse = MorseTranslator.toMorse(complex);
263 const decoded = MorseTranslator.fromMorse(morse);
264 assert.strictEqual(decoded, complex.toUpperCase());
265 });
266});
Static utility class for Morse code translation operations.
Definition morseCode.ts:102
import *as assert from assert
Definition morse.test.ts:15