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
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
node_modules/
.idea/
Copy link
Owner

Choose a reason for hiding this comment

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

<random-thought>
Random comment having nothing to do with this class nor even javascript: you can define a global gitignore file that applies to all repositories, which is a good place for stuff like this. I do it that way so I can omit files that my editor generates without (a) having to change every gitignore in every repo I ever touch; and (b) to prevent committing irrelevant code to repos.
</random-thought>

Copy link
Author

Choose a reason for hiding this comment

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

I didn't know you could define a global .gitignore across repositories as I mostly just write them per-project. Are you simply just keeping the configurations in a common repository or are you doing any special Github linking between projects?

Copy link
Owner

Choose a reason for hiding this comment

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

No, it's more "set it and forget it". Check out the link from my first comment. You just keep a file on your computer someplace that looks like a gitignore file and you put its location in your configuration for git (can be done from cli too).

64 changes: 64 additions & 0 deletions src/class_spec.js
Original file line number Diff line number Diff line change
@@ -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();
});
24 changes: 16 additions & 8 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -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};
41 changes: 41 additions & 0 deletions src/index_classes.js
Original file line number Diff line number Diff line change
@@ -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;
}
}
65 changes: 48 additions & 17 deletions src/spec.js
Original file line number Diff line number Diff line change
@@ -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();
});