Sha256: e66d0b94d2989f3069384e7abebf4eedca152e5d4028792eb716b54180901421

Contents?: true

Size: 1.94 KB

Versions: 207

Compression:

Stored size: 1.94 KB

Contents

import Cipher from './simple-cipher';

describe('Random key cipher',  () => {
  const cipher = new Cipher();

  it('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.
  xit('can encode', () => {
    expect(cipher.encode('aaaaaaaaaa')).toEqual(cipher.key.substr(0, 10));
  });

  xit('can decode', () => {
    expect(cipher.decode(cipher.key.substr(0, 10))).toEqual('aaaaaaaaaa');
  });

  xit('is reversible', () => {
    const plaintext = 'abcdefghij';
    expect(cipher.decode(cipher.encode(plaintext))).toEqual(plaintext);
  });
});

describe('Incorrect key cipher', () => {
  xit('throws an error with an all caps key', () => {
    expect( () => {
      new Cipher('ABCDEF');
    }).toThrow(new Error('Bad key'));
  });

  xit('throws an error with a numeric key', () => {
    expect( () => {
      new Cipher('12345');
    }).toThrow(new Error('Bad key'));
  });

  xit('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);

  xit('keeps the submitted key', () => {
    expect(cipher.key).toEqual(key);
  });

  xit('can encode', () => {
    expect(cipher.encode('aaaaaaaaaa')).toEqual('abcdefghij');
  });

  xit('can decode', () => {
    expect(cipher.decode('abcdefghij')).toEqual('aaaaaaaaaa');
  });

  xit('is reversible', () => {
    expect(cipher.decode(cipher.encode('abcdefghij'))).toEqual('abcdefghij');
  });

  xit(': double shift encode', () => {
    expect(new Cipher('iamapandabear').encode('iamapandabear'))
      .toEqual('qayaeaagaciai');
  });

  xit('can wrap', () => {
    expect(cipher.encode('zzzzzzzzzz')).toEqual('zabcdefghi');
  });
});

Version data entries

207 entries across 207 versions & 1 rubygems

Version Path
trackler-2.1.0.53 tracks/ecmascript/exercises/simple-cipher/simple-cipher.spec.js
trackler-2.1.0.52 tracks/ecmascript/exercises/simple-cipher/simple-cipher.spec.js
trackler-2.1.0.51 tracks/ecmascript/exercises/simple-cipher/simple-cipher.spec.js
trackler-2.1.0.50 tracks/ecmascript/exercises/simple-cipher/simple-cipher.spec.js
trackler-2.1.0.49 tracks/ecmascript/exercises/simple-cipher/simple-cipher.spec.js
trackler-2.1.0.48 tracks/ecmascript/exercises/simple-cipher/simple-cipher.spec.js
trackler-2.1.0.47 tracks/ecmascript/exercises/simple-cipher/simple-cipher.spec.js
trackler-2.1.0.46 tracks/ecmascript/exercises/simple-cipher/simple-cipher.spec.js
trackler-2.1.0.45 tracks/ecmascript/exercises/simple-cipher/simple-cipher.spec.js
trackler-2.1.0.44 tracks/ecmascript/exercises/simple-cipher/simple-cipher.spec.js
trackler-2.1.0.43 tracks/ecmascript/exercises/simple-cipher/simple-cipher.spec.js
trackler-2.1.0.42 tracks/ecmascript/exercises/simple-cipher/simple-cipher.spec.js
trackler-2.1.0.41 tracks/ecmascript/exercises/simple-cipher/simple-cipher.spec.js
trackler-2.1.0.40 tracks/ecmascript/exercises/simple-cipher/simple-cipher.spec.js
trackler-2.1.0.39 tracks/ecmascript/exercises/simple-cipher/simple-cipher.spec.js
trackler-2.1.0.38 tracks/ecmascript/exercises/simple-cipher/simple-cipher.spec.js
trackler-2.1.0.37 tracks/ecmascript/exercises/simple-cipher/simple-cipher.spec.js
trackler-2.1.0.36 tracks/ecmascript/exercises/simple-cipher/simple-cipher.spec.js
trackler-2.1.0.34 tracks/ecmascript/exercises/simple-cipher/simple-cipher.spec.js
trackler-2.1.0.33 tracks/ecmascript/exercises/simple-cipher/simple-cipher.spec.js