Sha256: 1f2b9eda0b6db5552df3eb420b26f0cef42dbaa11926f197b38ac7fa8d6d7836
Contents?: true
Size: 1.96 KB
Versions: 29
Compression:
Stored size: 1.96 KB
Contents
import Cipher from './simple-cipher'; describe('Random key cipher', () => { const cipher = new Cipher(); test('has a key made of letters', () => { expect(cipher.key).toMatch(/^[a-z]+$/); }); // Here we take advantage of the fact that plaintext of "aaa..." // outputs the key. This is a critical problem with shift ciphers, some // characters will always output the key verbatim. xtest('can encode', () => { expect(cipher.encode('aaaaaaaaaa')).toEqual(cipher.key.substr(0, 10)); }); xtest('can decode', () => { expect(cipher.decode(cipher.key.substr(0, 10))).toEqual('aaaaaaaaaa'); }); xtest('is reversible', () => { const plaintext = 'abcdefghij'; expect(cipher.decode(cipher.encode(plaintext))).toEqual(plaintext); }); }); describe('Incorrect key cipher', () => { xtest('throws an error with an all caps key', () => { expect(() => { new Cipher('ABCDEF'); }).toThrow(new Error('Bad key')); }); xtest('throws an error with a numeric key', () => { expect(() => { new Cipher('12345'); }).toThrow(new Error('Bad key')); }); xtest('throws an error with an empty key', () => { expect(() => { new Cipher(''); }).toThrow(new Error('Bad key')); }); }); describe('Substitution cipher', () => { const key = 'abcdefghij'; const cipher = new Cipher(key); xtest('keeps the submitted key', () => { expect(cipher.key).toEqual(key); }); xtest('can encode', () => { expect(cipher.encode('aaaaaaaaaa')).toEqual('abcdefghij'); }); xtest('can decode', () => { expect(cipher.decode('abcdefghij')).toEqual('aaaaaaaaaa'); }); xtest('is reversible', () => { expect(cipher.decode(cipher.encode('abcdefghij'))).toEqual('abcdefghij'); }); xtest(': double shift encode', () => { expect(new Cipher('iamapandabear').encode('iamapandabear')) .toEqual('qayaeaagaciai'); }); xtest('can wrap', () => { expect(cipher.encode('zzzzzzzzzz')).toEqual('zabcdefghi'); }); });
Version data entries
29 entries across 29 versions & 1 rubygems