diff --git a/.gitignore b/.gitignore index c2658d7..78f2710 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ node_modules/ +.idea/ diff --git a/src/class_spec.js b/src/class_spec.js new file mode 100644 index 0000000..de7c0e0 --- /dev/null +++ b/src/class_spec.js @@ -0,0 +1,64 @@ +/** + * Created by towershine on 12/13/16. + */ +import test from 'tape'; +import {Animal, Reptile, Primate, Human} from './index_classes'; + + +test('Test to see if a new "Animal" instance can be created', function (test) { + const animal = new Animal(); + test.ok( animal instanceof Animal, 'should create an instance of Animal'); + test.end(); +}); + +test('Test to see if the Animal type has a "speak" method', function (test) { + + const animal = new Animal(); + const expected = 'generic sound'; + const actual = animal.speak(); + + test.equal( actual, expected, 'should make a generic sound when it speaks' ); + test.end(); +}); + +test('Test to see if "Primates" and "Reptiles" can be made from "Animals"', 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' ); + + const primate = new Primate(); + + test.ok( primate instanceof Primate, 'should be an instance of Primate' ); + test.ok( primate instanceof Animal, 'should be an instance of Animal' ); + + expected = Primate.SOUND; + actual = primate.speak(); + test.equal( actual, expected, 'should make a primate sound when it speaks' ); + + test.end(); +}); + +test('Test to see if a human can be made and it can speak', 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(); +}); \ No newline at end of file diff --git a/src/index.js b/src/index.js index 5237ff4..d35435f 100644 --- a/src/index.js +++ b/src/index.js @@ -13,14 +13,22 @@ export function doubleXTimes ( x, num ) { return result; } -export function doubleEach ( arr ) { - let result = arr.map( double ); +export const doubleEach = x => x.map(double); - // const result = arr.map( x => double( x ) ); - // const result = arr.map( function ( x ) { - // return double( x ); - // }); +export function Animal(){} +Animal.SOUND = 'generic sound'; +Animal.prototype.speak = function () {return Animal.SOUND}; - return result; -} +export function Reptile(){} +Reptile.SOUND = 'Roar'; +Reptile.prototype = Object.create(Animal.prototype); +Reptile.prototype.speak = function () {return Reptile.SOUND}; + +export function Primate(){} +Primate.SOUND = 'Ooh ooh eee!'; +Primate.prototype = Object.create(Animal.prototype); +Primate.prototype.speak = function () {return Primate.SOUND}; +export function Human(){} +Human.prototype = Object.create(Primate.prototype); +Human.prototype.speak = function (message) {return message}; diff --git a/src/index_classes.js b/src/index_classes.js new file mode 100644 index 0000000..3b56de9 --- /dev/null +++ b/src/index_classes.js @@ -0,0 +1,41 @@ +export class Animal { + constructor () {} + + static SOUND = 'generic sound'; + + speak() { + return Animal.SOUND; + } +} + +export class Reptile extends Animal { + constructor () { + super(); + } + + static SOUND = 'Roar'; + + speak() { + return Reptile.SOUND; + } +} + +export class Primate extends Animal { + constructor() { + super(); + } + + static SOUND = 'Ooh Ooh Eeh!'; + speak() { + return Primate.SOUND; + } +} + +export class Human extends Primate { + constructor() { + super(); + } + speak(message) { + return message; + } +} \ No newline at end of file diff --git a/src/spec.js b/src/spec.js index 3e22930..bbe9f5b 100644 --- a/src/spec.js +++ b/src/spec.js @@ -1,30 +1,61 @@ 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.equal( actual, expected, 'should double the value' ); - - test.end(); +test('Test to see if a new "Animal" instance can be created', function (test) { + const animal = new Animal(); + test.ok( animal instanceof Animal, 'should create an instance of Animal'); + test.end(); }); -test( 'doubleXTimes', function ( test ) { - const actual = doubleXTimes( 5, 3 ); - const expected = 40; +test('Test to see if the Animal type has a "speak" method', function (test) { - test.equal( actual, expected, 'should double 5 three times' ); + const animal = new Animal(); + const expected = 'generic sound'; + const actual = animal.speak(); - 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('Test to see if "Primates" and "Reptiles" can be made from "Animals"', 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' ); + + 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('Test to see if a human can be made and it can speak', 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(); +}); \ No newline at end of file