Files
website/test/crafting/graph_builder.test.coffee
T
2015-08-25 21:37:10 -07:00

143 lines
4.0 KiB
CoffeeScript

###
Crafting Guide - crafting_node.test.coffee
Copyright (c) 2015 by Redwood Labs
All rights reserved.
###
GraphBuilder = require '../../src/coffee/models/crafting/graph_builder'
ItemSlug = require '../../src/coffee/models/item_slug'
Mod = require '../../src/coffee/models/mod'
ModPack = require '../../src/coffee/models/mod_pack'
ModVersion = require '../../src/coffee/models/mod_version'
########################################################################################################################
SAMPLE_MOD_VERSION_TEXT = """
schema: 1
item: Charcoal
recipe:
input: 8 Oak Wood, Coal
pattern: .0. ... .1.
item: Crafting Table
recipe:
input: Oak Planks
pattern: .00 .00 ...
item: Coal
item: Cobblestone
item: Furnace
recipe:
input: Cobblestone
pattern: 000 0.0 000
tools: Crafting Table
item: Iron Ore
item: Iron Ingot
recipe:
input: 8 Iron Ore, Charcoal
pattern: .0. ... .1.
tools: Furnace
recipe:
input: 8 Iron Ore, Coal
pattern: .0. ... .1.
tools: Furnace
item: Iron Sword
recipe:
input: Iron Ingot, Stick
pattern: .0. .0. .1.
tools: Crafting Table
item: Lever
recipe:
input: Stick, Cobblestone
pattern: .0. .1. ...
item: Oak Planks
recipe:
input: Oak Wood
pattern: ... .0. ...
quantity: 4
item: Oak Wood
item: Stick
recipe:
input: Oak Planks
pattern: .0. .0. ...
quantity: 4
"""
builder = mod = modPack = modVersion = null
########################################################################################################################
describe 'GraphBuilder.coffee', ->
beforeEach ->
modPack = new ModPack
mod = new Mod name:'Test', slug:'test'
modPack.addMod mod
modVersion = new ModVersion modSlug:'test', version:'0.0'
modVersion.parse SAMPLE_MOD_VERSION_TEXT
mod.addModVersion modVersion
builder = new GraphBuilder modPack:modPack
describe 'expand', ->
it 'can work a few steps at a time', ->
builder.wanted.add ItemSlug.slugify 'test__iron_sword'
builder.expandGraph 9
builder.rootNode.depth.should.equal 6
builder.rootNode.size.should.equal 13
builder.complete.should.be.false
builder.expandGraph 9
builder.rootNode.depth.should.equal 8
builder.rootNode.size.should.equal 18
builder.complete.should.be.true
it 'works properly with an empty inventory', ->
builder.expandGraph 100
builder.rootNode.depth.should.equal 1
builder.rootNode.size.should.equal 1
builder.complete.should.be.true
describe 'can build a tree for', ->
runSingleItemTreeBuildingTest = (slug, depth, size)->
builder.wanted.add ItemSlug.slugify slug
builder.expandGraph 100
builder.rootNode.depth.should.equal depth
builder.rootNode.size.should.equal size
builder.complete.should.be.true
it 'a gatherable item', ->
runSingleItemTreeBuildingTest 'test__oak_wood', 2, 2
it 'a single-step item', ->
runSingleItemTreeBuildingTest 'test__crafting_table', 6, 6
it 'an item with multiple inputs', ->
runSingleItemTreeBuildingTest 'test__lever', 8, 9
it 'can make a tree for an item with multiple recipes', ->
runSingleItemTreeBuildingTest 'test__iron_ingot', 6, 11
it 'can make a tree for an item with multiple inputs and multiple recipes', ->
runSingleItemTreeBuildingTest 'test__iron_sword', 8, 18
logger.debug builder.toString()