@ondoher/enigma 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/enigma/Encoder.js +102 -0
- package/lib/enigma/Enigma.js +246 -0
- package/lib/enigma/EntryDisc.js +36 -0
- package/lib/enigma/Inventory.js +115 -0
- package/lib/enigma/PlugBoard.js +74 -0
- package/lib/enigma/Reflector.js +51 -0
- package/lib/enigma/Rotor.js +170 -0
- package/lib/enigma/consts.js +1 -0
- package/lib/enigma/index.js +7 -0
- package/lib/enigma/standardInventory.js +95 -0
- package/lib/enigma/tests/EnigmaData.js +236 -0
- package/lib/enigma/tests/EnigmaSpec.js +123 -0
- package/lib/enigma/tests/PlugBoardData.js +4 -0
- package/lib/enigma/tests/PlugBoardSpec.js +46 -0
- package/lib/enigma/tests/RotorData.js +13 -0
- package/lib/enigma/tests/RotorSpec.js +263 -0
- package/lib/generator/Generator.js +452 -0
- package/lib/generator/hamlet.js +1675 -0
- package/lib/generator/index.js +1 -0
- package/lib/index.js +2 -0
- package/package.json +16 -0
- package/spec/helpers/consoleReporter.js +11 -0
- package/spec/support/jasmine.json +14 -0
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
import Rotor from "../Rotor.js";
|
|
2
|
+
import { rotorData } from './RotorData.js';
|
|
3
|
+
|
|
4
|
+
describe('Rotor Test Cases', function() {
|
|
5
|
+
var rotor;
|
|
6
|
+
|
|
7
|
+
describe('Constructor', function() {
|
|
8
|
+
it('creates the reverse map table', function() {
|
|
9
|
+
rotor = new Rotor('test-rotor', {
|
|
10
|
+
alphabet: rotorData.createData.alphabet,
|
|
11
|
+
map: rotorData.createData.map,
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
expect(rotor.leftMap).toEqual(rotorData.createData.reverseMap)
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
it('sets the length to the map length', function() {
|
|
18
|
+
rotor = new Rotor('test-rotor', {
|
|
19
|
+
alphabet: rotorData.createData.alphabet,
|
|
20
|
+
map: rotorData.createData.map,
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
expect(rotor.length).toEqual(rotorData.createData.map.length)
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
it('remembers multiple turnovers', function() {
|
|
27
|
+
rotor = new Rotor('test-rotor', {
|
|
28
|
+
map: rotorData.createData.map,
|
|
29
|
+
turnovers: rotorData.createData.turnovers,
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
expect(rotor.turnovers).toEqual(rotorData.createData.turnoversMap);
|
|
33
|
+
})
|
|
34
|
+
})
|
|
35
|
+
|
|
36
|
+
describe('Rotation', function() {
|
|
37
|
+
beforeEach(function() {
|
|
38
|
+
rotor = new Rotor('test-rotor', {
|
|
39
|
+
map: rotorData.I.map,
|
|
40
|
+
turnovers: rotorData.I.turnovers
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
describe('startPositon', function() {
|
|
45
|
+
it('no Rotation', function() {
|
|
46
|
+
rotor.setStartPosition('A');
|
|
47
|
+
expect(rotor.offset).toBe(0)
|
|
48
|
+
})
|
|
49
|
+
|
|
50
|
+
it('one step', function() {
|
|
51
|
+
rotor.setStartPosition('B');
|
|
52
|
+
expect(rotor.offset).toBe(1)
|
|
53
|
+
})
|
|
54
|
+
|
|
55
|
+
it('length steps', function() {
|
|
56
|
+
rotor.setStartPosition('Z');
|
|
57
|
+
expect(rotor.offset).toBe(25)
|
|
58
|
+
})
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
describe('ring setting', function() {
|
|
62
|
+
it ('one', function() {
|
|
63
|
+
rotor.ringOffset = 1;
|
|
64
|
+
rotor.setStartPosition('B');
|
|
65
|
+
expect(rotor.offset).toBe(0)
|
|
66
|
+
})
|
|
67
|
+
|
|
68
|
+
it ('wrap', function() {
|
|
69
|
+
rotor.ringOffset = 1;
|
|
70
|
+
rotor.setStartPosition('Z');
|
|
71
|
+
expect(rotor.offset).toBe(24);
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
describe('step', function() {
|
|
76
|
+
it ('adjusts offset', function() {
|
|
77
|
+
rotor.step();
|
|
78
|
+
expect(rotor.offset).toBe(1);
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
it('wraps', function() {
|
|
82
|
+
rotor.setStartPosition('Z');
|
|
83
|
+
rotor.step();
|
|
84
|
+
expect(rotor.offset).toBe(0);
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
it('handles double step', function() {
|
|
88
|
+
rotor.setStartPosition('Q');
|
|
89
|
+
var result = rotor.willTurnover();
|
|
90
|
+
expect(result).toBe(true);
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
it('handles turnover', function() {
|
|
94
|
+
rotor.setStartPosition('Q');
|
|
95
|
+
var result = rotor.step();
|
|
96
|
+
expect(result).toBe(true);
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
describe('ringSettings', function() {
|
|
101
|
+
it('adjusts offset', function() {
|
|
102
|
+
rotor.ringOffset = 10;
|
|
103
|
+
rotor.setStartPosition('P');
|
|
104
|
+
expect(rotor.offset).toBe(5)
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
it('wraps', function() {
|
|
108
|
+
rotor.ringOffset = 1;
|
|
109
|
+
rotor.setStartPosition('P');
|
|
110
|
+
expect(rotor.offset).toBe(14)
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
it('handles double step', function() {
|
|
114
|
+
rotor.ringOffset = 1;
|
|
115
|
+
rotor.setStartPosition('Q');
|
|
116
|
+
var result = rotor.willTurnover();
|
|
117
|
+
expect(result).toBe(true);
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
it('handles turnover', function() {
|
|
121
|
+
rotor.ringOffset = 1;
|
|
122
|
+
rotor.setStartPosition('Q');
|
|
123
|
+
var result = rotor.step();
|
|
124
|
+
expect(result).toBe(true);
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
})
|
|
128
|
+
|
|
129
|
+
describe('Encoding', function() {
|
|
130
|
+
beforeEach(function() {
|
|
131
|
+
rotor = new Rotor('test-rotor', {
|
|
132
|
+
map: rotorData.I.map,
|
|
133
|
+
turnovers: rotorData.I.turnovers
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
describe('encode to the right', function() {
|
|
138
|
+
it('rotation 0', function() {
|
|
139
|
+
var result = rotor.encode('right', 0);
|
|
140
|
+
expect(result).toBe(4);
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
it('25 steps', function() {
|
|
144
|
+
rotor.offset = 24;
|
|
145
|
+
var result = rotor.encode('right', 0);
|
|
146
|
+
expect(result).toBe(4);
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
it('1 step', function() {
|
|
150
|
+
rotor.step();
|
|
151
|
+
var result = rotor.encode('right', 0)
|
|
152
|
+
expect(result).toBe(9);
|
|
153
|
+
})
|
|
154
|
+
|
|
155
|
+
it('ring setting 1, rotation 0', function() {
|
|
156
|
+
rotor.ringOffset = 1;
|
|
157
|
+
rotor.setStartPosition('A');
|
|
158
|
+
var result = rotor.encode('right', 0)
|
|
159
|
+
expect(result).toBe(10);
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
it('ring setting 1, 1 step', function() {
|
|
163
|
+
rotor.ringOffset = 1;
|
|
164
|
+
rotor.setStartPosition('B');
|
|
165
|
+
var result = rotor.encode('right', 0)
|
|
166
|
+
expect(result).toBe(4);
|
|
167
|
+
});
|
|
168
|
+
|
|
169
|
+
it('ring setting 1, 25 steps', function() {
|
|
170
|
+
rotor.ringOffset = 1;
|
|
171
|
+
rotor.setStartPosition('Y');
|
|
172
|
+
var result = rotor.encode('right', 0)
|
|
173
|
+
expect(result).toBe(20);
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
it('ring setting 25, rotation 0', function() {
|
|
177
|
+
rotor.ringOffset = 25;
|
|
178
|
+
rotor.setStartPosition('A');
|
|
179
|
+
var result = rotor.encode('right', 0)
|
|
180
|
+
expect(result).toBe(9);
|
|
181
|
+
});
|
|
182
|
+
|
|
183
|
+
it('ring setting 25, 1 step', function() {
|
|
184
|
+
rotor.ringOffset = 25;
|
|
185
|
+
rotor.setStartPosition('B');
|
|
186
|
+
var result = rotor.encode('right', 0)
|
|
187
|
+
expect(result).toBe(10);
|
|
188
|
+
});
|
|
189
|
+
|
|
190
|
+
it('ring setting 25, 25 steps', function() {
|
|
191
|
+
rotor.ringOffset = 25;
|
|
192
|
+
rotor.setStartPosition('Y');
|
|
193
|
+
var result = rotor.encode('right', 0)
|
|
194
|
+
expect(result).toBe(10);
|
|
195
|
+
});
|
|
196
|
+
})
|
|
197
|
+
describe('encode to the left', function() {
|
|
198
|
+
it('rotation 0', function() {
|
|
199
|
+
var result = rotor.encode('left', 0);
|
|
200
|
+
expect(result).toBe(20);
|
|
201
|
+
});
|
|
202
|
+
|
|
203
|
+
it('25 steps', function() {
|
|
204
|
+
rotor.offset = 24;
|
|
205
|
+
var result = rotor.encode('left', 0);
|
|
206
|
+
expect(result).toBe(16);
|
|
207
|
+
});
|
|
208
|
+
|
|
209
|
+
it('1 step', function() {
|
|
210
|
+
rotor.step();
|
|
211
|
+
var result = rotor.encode('left', 0)
|
|
212
|
+
expect(result).toBe(21);
|
|
213
|
+
})
|
|
214
|
+
|
|
215
|
+
it('ring setting 1, rotation 0', function() {
|
|
216
|
+
rotor.ringOffset = 1;
|
|
217
|
+
rotor.setStartPosition('A');
|
|
218
|
+
var result = rotor.encode('left', 0)
|
|
219
|
+
expect(result).toBe(10);
|
|
220
|
+
});
|
|
221
|
+
|
|
222
|
+
it('ring setting 1, 1 step', function() {
|
|
223
|
+
rotor.ringOffset = 1;
|
|
224
|
+
rotor.setStartPosition('B');
|
|
225
|
+
var result = rotor.encode('left', 0)
|
|
226
|
+
expect(result).toBe(20);
|
|
227
|
+
});
|
|
228
|
+
|
|
229
|
+
it('ring setting 1, 25 steps', function() {
|
|
230
|
+
rotor.ringOffset = 1;
|
|
231
|
+
rotor.setStartPosition('Y');
|
|
232
|
+
var result = rotor.encode('left', 0)
|
|
233
|
+
expect(result).toBe(19);
|
|
234
|
+
});
|
|
235
|
+
|
|
236
|
+
it('ring setting 25, rotation 0', function() {
|
|
237
|
+
rotor.ringOffset = 25;
|
|
238
|
+
rotor.setStartPosition('A');
|
|
239
|
+
var result = rotor.encode('left', 0)
|
|
240
|
+
expect(result).toBe(21);
|
|
241
|
+
});
|
|
242
|
+
|
|
243
|
+
it('ring setting 25, 1 step', function() {
|
|
244
|
+
rotor.ringOffset = 25;
|
|
245
|
+
rotor.setStartPosition('B');
|
|
246
|
+
var result = rotor.encode('left', 0)
|
|
247
|
+
expect(result).toBe(22);
|
|
248
|
+
});
|
|
249
|
+
|
|
250
|
+
it('ring setting 25, 25 steps', function() {
|
|
251
|
+
rotor.ringOffset = 25;
|
|
252
|
+
rotor.setStartPosition('Y');
|
|
253
|
+
var result = rotor.encode('left', 0)
|
|
254
|
+
expect(result).toBe(10);
|
|
255
|
+
});
|
|
256
|
+
})
|
|
257
|
+
|
|
258
|
+
})
|
|
259
|
+
});
|
|
260
|
+
|
|
261
|
+
// 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2
|
|
262
|
+
// 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
|
|
263
|
+
// A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
|