Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
84 changes: 67 additions & 17 deletions src/index.js
Original file line number Diff line number Diff line change
@@ -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 {

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you please explain what super does in the next class.

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;
}
}
72 changes: 55 additions & 17 deletions src/spec.js
Original file line number Diff line number Diff line change
@@ -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' );
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This test is failing but I don't understand why.

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is failing because you said this.SOUND in your constructor, where this refers to the "instance" of the reptile, whereas Reptile does not refer to the instance but to the constructor. Does that difference make sense?

As a first hint, if you can access it via Reptile.SOUND, how might you set it?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Gotcha! Its should be expected = reptile.SOUND

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();
});