real-deal-deck-of-cards
Version:
141 lines (127 loc) • 4.68 kB
JavaScript
let assert = require('assert');
let rdDoC = require('../index');
describe('cards', function() {
describe('#suits', function() {
it('there should be 4 suits', function() {
assert.equal(rdDoC.suits.length, 4);
})
})
describe('#cards', function() {
it('there should be 13 types of cards', function() {
assert.equal(rdDoC.cardTypes.length, 13);
})
})
});
describe('deck', function() {
describe('#createDeck()', function() {
let deck = rdDoC.createDeck();
it('shuffle should randomize the cards', function() {
let decksAreDifferent = false;
let originalDeck = deck.allCards.slice(0);
deck.shuffle();
let newDeck = deck.allCards;
for (let i = 1; i < originalDeck.length; i++) {
let aCard = originalDeck[i];
let bCard = newDeck[i];
if (!aCard.isSameAs(bCard)) {
decksAreDifferent = true;
}
}
assert.equal(decksAreDifferent, true);
});
it('should return 52 cards', function() {
assert.equal(deck.allCards.length, 52);
});
it('should have 13 spades', function() {
let spades = [];
for (let i = 0; i < deck.allCards.length; i++) {
let card = deck.allCards[i];
if (card.suit === rdDoC.suits[0]) {
spades.push(card);
}
}
assert.equal(spades.length, rdDoC.cardTypes.length);
});
it('should have 13 hearts', function() {
let hearts = [];
for (let i = 0; i < deck.allCards.length; i++) {
let card = deck.allCards[i];
if (card.suit === rdDoC.suits[1]) {
hearts.push(card);
}
}
assert.equal(hearts.length, rdDoC.cardTypes.length);
});
it('should have 13 diamonds', function() {
let diamonds = [];
for (let i = 0; i < deck.allCards.length; i++) {
let card = deck.allCards[i];
if (card.suit === rdDoC.suits[2]) {
diamonds.push(card);
}
}
assert.equal(diamonds.length, rdDoC.cardTypes.length);
});
it('should have 13 clubs', function() {
let clubs = [];
for (let i = 0; i < deck.allCards.length; i++) {
let card = deck.allCards[i];
if (card.suit === rdDoC.suits[3]) {
clubs.push(card);
}
}
assert.equal(clubs.length, rdDoC.cardTypes.length);
});
});
describe('#nextCard()', function() {
it('should provide 52 different cards', function() {
let testPasses = true;
let prevCards = [];
let deck = rdDoC.createDeck();
Loop1:
for (let i = 0; i < 52; i++) {
let nextCard = deck.nextCard();
for (let j = 0; j < prevCards.length; j++) {
let prevCard = prevCards[j];
if (nextCard.isSameAs(prevCard)) {
testPasses = false;
break Loop1;
}
}
prevCards.push(nextCard);
}
assert.equal(testPasses, true);
});
});
});
describe('Card', function() {
it('same cards', function() {
let a = new rdDoC.Card(rdDoC.suits[0], 'Ace', 1, 14);
let b = new rdDoC.Card(rdDoC.suits[0], 'Ace', 1, 14);
assert(a.isSameAs(b));
});
it('same suit', function() {
let a = new rdDoC.Card(rdDoC.suits[0], 'Two', 2, 2);
let b = new rdDoC.Card(rdDoC.suits[0], 'Three', 3, 3);
assert(a.isSameSuit(b));
});
it('different suit', function() {
let a = new rdDoC.Card(rdDoC.suits[0], 'Two', 2, 2);
let b = new rdDoC.Card(rdDoC.suits[1], 'Three', 3, 3);
assert(!a.isSameSuit(b));
});
it('same name', function() {
let a = new rdDoC.Card(rdDoC.suits[0], 'King', 10, 13);
let b = new rdDoC.Card(rdDoC.suits[1], 'King', 10, 13);
assert(a.isSameName(b));
});
it('different name', function() {
let a = new rdDoC.Card(rdDoC.suits[2], 'Two', 2, 2);
let b = new rdDoC.Card(rdDoC.suits[3], 'Three', 3, 3);
assert(!a.isSameName(b));
});
it('can create a card', function() {
let c = new rdDoC.Card(rdDoC.suits[0], 'Ace');
assert.equal(c.value, 1);
});
});