diff --git a/src/index.js b/src/index.js index 5237ff4..97e29e9 100644 --- a/src/index.js +++ b/src/index.js @@ -1,26 +1,76 @@ -export function double ( x ) { - return x * 2; +// export function Animal () { +// +// } +// +// Animal.prototype.speak = function() { +// return 'generic sound'; +// } +// +// +// export function Reptile() { +// this.SOUND = 'reptile sound'; +// } +// +// export function Primate() { +// this.SOUND = 'primate sound'; +// } +// +// Reptile.prototype = Object.create(Animal.prototype) +// +// Reptile.prototype.speak = function () { +// return this.SOUND; +// }; +// +// +// Primate.prototype = Object.create(Animal.prototype) +// +// Primate.prototype.speak = function () { +// return this.SOUND; +// } +// +// export function Human() {} +// +// Human.prototype = Object.create(Primate.prototype) +// +// Human.prototype.speak = function (word) { +// return word +// } + +// IN ES6 +export class Animal { + constructor() {}; + + speak() { + return 'generic sound'; + } } -export function doubleXTimes ( x, num ) { - let result = x; +export class Reptile extends Animal { - for ( let i = 1; i <= num; i++ ) { - // result = result * 2; - result = double( result ); - } + constructor() { + super(); + this.SOUND = 'reptile sound' + }; - return result; -} -export function doubleEach ( arr ) { - let result = arr.map( double ); + speak() { + return this.SOUND; + } +} - // const result = arr.map( x => double( x ) ); - // const result = arr.map( function ( x ) { - // return double( x ); - // }); +export class Primate extends Animal { + constructor() { + super(); + this.SOUND = 'primate sound' + }; - return result; + speak() { + return this.SOUND; + } } +export class Human extends Primate { + speak(words) { + return words; + } +} diff --git a/src/spec.js b/src/spec.js index 3e22930..960ba82 100644 --- a/src/spec.js +++ b/src/spec.js @@ -1,30 +1,68 @@ import test from 'tape'; -import { double, doubleXTimes, doubleEach } from './index'; +import {Animal, Reptile, Primate, Human} from './index'; -test( 'double fn', function ( test ) { - const actual = double( 5 ); - const expected = 10; +test('instance', function (test) { + const animal = new Animal(); + test.ok( animal instanceof Animal, 'should create an instance of Animal' ); - test.equal( actual, expected, 'should double the value' ); - - test.end(); + test.end(); }); -test( 'doubleXTimes', function ( test ) { - const actual = doubleXTimes( 5, 3 ); - const expected = 40; +test('sound', function (test) { - test.equal( actual, expected, 'should double 5 three times' ); + const animal = new Animal(); + const expected = 'generic sound'; + const actual = animal.speak('generic sound'); - test.end(); + test.equal( actual, expected, 'should make a generic sound when it speaks' ); + test.end(); }); -test( 'doubleEach', function ( test ) { - const actual = doubleEach([ 0, 1, 2 ]); - const expected = [ 0, 2, 4 ]; +test('reptile', function (test) { + + let actual, expected; + + const reptile = new Reptile(); + + test.ok( reptile instanceof Reptile, 'should be an instance of Reptile' ); + test.ok( reptile instanceof Animal, 'should be an instance of Animal' ); + + expected = reptile.SOUND; + actual = reptile.speak(); + test.equal( actual, expected, 'should make a reptile sound when it speaks' ); + test.end(); +}) + +test('primate', function (test) { + + let actual, expected; + + const primate = new Primate(); - test.deepEqual( actual, expected, 'should double each in the array' ); + test.ok( primate instanceof Primate, 'should be an instance of Primate' ); + test.ok( primate instanceof Animal, 'should be an instance of Animal' ); - test.end(); + expected = primate.SOUND; + actual = primate.speak(); + test.equal( actual, expected, 'should make a primate sound when it speaks' ); + + test.end(); }); +test('human', function (test) { + + let actual, expected; + + const human = new Human(); + + test.ok( human instanceof Human, 'should be an instance of Human' ); + test.ok( human instanceof Primate, 'should be an instance of Primate' ); + test.ok( human instanceof Animal, 'should be an instance of Animal' ); + + const message = 'hello'; + expected = message; + actual = human.speak(message); + test.equal( actual, expected, 'should speak what it is asked to speak' ); + + test.end(); +});