143 lines
4.0 KiB
CoffeeScript
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.only '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()
|