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

Version Path
trackler-2.2.1.22 tracks/ecmascript/exercises/simple-cipher/simple-cipher.spec.js
trackler-2.2.1.21 tracks/ecmascript/exercises/simple-cipher/simple-cipher.spec.js
trackler-2.2.1.20 tracks/ecmascript/exercises/simple-cipher/simple-cipher.spec.js
trackler-2.2.1.19 tracks/ecmascript/exercises/simple-cipher/simple-cipher.spec.js
trackler-2.2.1.18 tracks/ecmascript/exercises/simple-cipher/simple-cipher.spec.js
trackler-2.2.1.17 tracks/ecmascript/exercises/simple-cipher/simple-cipher.spec.js
trackler-2.2.1.16 tracks/ecmascript/exercises/simple-cipher/simple-cipher.spec.js
trackler-2.2.1.15 tracks/ecmascript/exercises/simple-cipher/simple-cipher.spec.js
trackler-2.2.1.14 tracks/ecmascript/exercises/simple-cipher/simple-cipher.spec.js
trackler-2.2.1.13 tracks/ecmascript/exercises/simple-cipher/simple-cipher.spec.js
trackler-2.2.1.12 tracks/ecmascript/exercises/simple-cipher/simple-cipher.spec.js
trackler-2.2.1.11 tracks/ecmascript/exercises/simple-cipher/simple-cipher.spec.js
trackler-2.2.1.10 tracks/ecmascript/exercises/simple-cipher/simple-cipher.spec.js
trackler-2.2.1.9 tracks/ecmascript/exercises/simple-cipher/simple-cipher.spec.js
trackler-2.2.1.8 tracks/ecmascript/exercises/simple-cipher/simple-cipher.spec.js
trackler-2.2.1.7 tracks/ecmascript/exercises/simple-cipher/simple-cipher.spec.js
trackler-2.2.1.6 tracks/ecmascript/exercises/simple-cipher/simple-cipher.spec.js
trackler-2.2.1.5 tracks/ecmascript/exercises/simple-cipher/simple-cipher.spec.js
trackler-2.2.1.4 tracks/ecmascript/exercises/simple-cipher/simple-cipher.spec.js
trackler-2.2.1.3 tracks/ecmascript/exercises/simple-cipher/simple-cipher.spec.js