Several large refactorings

* Refactor location of all data files to include a subdirectory
  for the mod version
* Update the BaseModel class to allow models to load themselves from
  any text file (whether JSON or CG)
* Refactor ModPack & ModVersion to move the laoding functionality in
  one into the other (and use the new stuff in BaseModel)
* Move the parser versions into a new subdirectory which allows for
  future additional parsers
This commit is contained in:
Andrew Miner
2015-01-16 20:26:54 -08:00
parent c14997ef90
commit 5f57622cf3
954 changed files with 284 additions and 1239 deletions
@@ -1,13 +1,13 @@
###
Crafting Guide - mod_version_parsers/v1.test.coffee
Crafting Guide - mod_version_parser_v1.test.coffee
Copyright (c) 2014-2015 by Redwood Labs
All rights reserved.
###
Item = require '../../src/scripts/models/item'
ModVersion = require '../../src/scripts/models/mod_version'
V1 = require '../../src/scripts/models/mod_version_parsers/v1'
Item = require '../../src/scripts/models/item'
ModVersion = require '../../src/scripts/models/mod_version'
ModVersionParserV1 = require '../../src/scripts/models/parser_versions/mod_version_parser_v1'
########################################################################################################################
@@ -15,11 +15,11 @@ modVersion = parser = null
########################################################################################################################
describe "ModParserVersion.V1", ->
describe "ModVersionParserV1", ->
beforeEach ->
parser = new V1
modVersion = parser.modVersion = new ModVersion name:'Test', version:'0.0'
modVersion = new ModVersion name:'Test', version:'0.0'
parser = new ModVersionParserV1 modVersion:modVersion
describe '_parseModVersion', ->
@@ -33,24 +33,24 @@ describe "ModParserVersion.V1", ->
it 'can parse an empty modVersion', ->
data =
name: 'Empty'
version: '1.0'
name: 'Test'
version: '0.0'
recipes: []
modVersion = parser._parseModVersion data
modVersion.name.should.equal 'Empty'
modVersion.version.should.equal '1.0'
modVersion.name.should.equal 'Test'
modVersion.version.should.equal '0.0'
it 'can parse a non-empty mod version', ->
data =
name: 'Minecraft'
version: '1.7.10'
name: 'Test'
version: '0.0'
recipes: [
{ input:'Sugar Cane', output:'Sugar' }
{ input:[[3, 'Wool'], [3, 'Planks']], tools:'Crafting Table', output:'Bed' }
]
modVersion = parser._parseModVersion data
modVersion.name.should.equal 'Minecraft'
modVersion.version.should.equal '1.7.10'
modVersion.name.should.equal 'Test'
modVersion.version.should.equal '0.0'
slugs = (slug for slug, item of modVersion.items).sort()
slugs.should.eql ['bed', 'sugar']
@@ -5,21 +5,24 @@ Copyright (c) 2015 by Redwood Labs
All rights reserved.
###
V2 = require '../../src/scripts/models/mod_version_parsers/v2'
ModVersion = require '../../src/scripts/models/mod_version'
ModVersionParserV2 = require '../../src/scripts/models/parser_versions/mod_version_parser_v2'
########################################################################################################################
baseText = parser = null
baseText = modVersion = parser = null
########################################################################################################################
describe 'ModVersionParser.V2', ->
describe 'ModVersionParserV2', ->
beforeEach -> parser = new V2
beforeEach ->
modVersion = new ModVersion name:'Test', version:'0.0'
parser = new ModVersionParserV2 modVersion:modVersion
describe 'Item', ->
beforeEach -> baseText = 'name:Alpha Bravo; version:1; '
beforeEach -> baseText = 'name:Test; version:0.0; '
it 'allows multiple recipes', ->
recipes = "item: Charlie;
@@ -61,27 +64,27 @@ describe 'ModVersionParser.V2', ->
describe 'ModVersion', ->
it 'allows declarations in any order', ->
modVersion = parser.parse 'item: Alpha; version:1; name:Bravo Charlie'
modVersion.name.should.equal 'Bravo Charlie'
modVersion.version.should.equal '1'
modVersion = parser.parse 'item: Alpha; version:0.0; name:Test'
modVersion.name.should.equal 'Test'
modVersion.version.should.equal '0.0'
modVersion.items.alpha.name.should.equal 'Alpha'
it 'does not allow duplicate item declarations', ->
func = -> parser.parse 'version:1; name:Alpha Bravo; item:Charlie; item:Charlie'
func = -> parser.parse 'version:0.0; name:Test; item:Charlie; item:Charlie'
expect(func).to.throw Error, 'duplicate item for Charlie'
it 'allows multiple items', ->
modVersion = parser.parse 'name:Alpha; version:1; item:Bravo; item:Charlie'
modVersion = parser.parse 'name:Test; version:0.0; item:Bravo; item:Charlie'
_.keys(modVersion.items).sort().should.eql ['bravo', 'charlie']
describe 'name', ->
it 'adds "name" when present', ->
modVersion = parser.parse 'name:Alpha Bravo; version:1'
modVersion.name.should.equal 'Alpha Bravo'
modVersion = parser.parse 'name:Test; version:0.0'
modVersion.name.should.equal 'Test'
it 'does not allow a duplicate "name" declaration', ->
func = -> parser.parse 'name:Alpha Bravo; version:1; name:Charlie'
func = -> parser.parse 'name:Test; version:0.0; name:Charlie'
expect(func).to.throw Error, 'duplicate declaration of "name"'
it 'requires a "name" declaration', ->
@@ -91,21 +94,21 @@ describe 'ModVersionParser.V2', ->
describe 'version', ->
it 'adds "version" when present', ->
modVersion = parser.parse 'name:Alpha Bravo; version:1'
modVersion.version.should.equal '1'
modVersion = parser.parse 'name:Test; version:0.0'
modVersion.version.should.equal '0.0'
it 'does not allow a duplicate "version" declaration', ->
func = -> parser.parse 'name:Alpha Bravo; version:1; item:Charlie; version:2'
func = -> parser.parse 'name:Test; version:0.0; item:Charlie; version:2'
expect(func).to.throw Error, 'duplicate declaration of "version"'
it 'requires a "version" declaration', ->
func = -> parser.parse 'name:Alpha Bravo; item:Charlie'
func = -> parser.parse 'name:Test; item:Charlie'
expect(func).to.throw Error, 'the "version" declaration is required'
describe 'description', ->
it 'adds "description" when present', ->
modVersion = parser.parse 'name:Alpha; version:1; description:Charlie Delta'
modVersion = parser.parse 'name:Test; version:0.0; description:Charlie Delta'
modVersion.description.should.equal 'Charlie Delta'
it 'does not allow a duplicate "description" declaration', ->
@@ -114,7 +117,7 @@ describe 'ModVersionParser.V2', ->
describe 'Recipe', ->
beforeEach -> baseText = 'name:Alpha Bravo; version:1; item: Charlie; '
beforeEach -> baseText = 'name:Test; version:0.0; item: Charlie; '
describe 'input', ->
@@ -183,7 +186,7 @@ describe 'ModVersionParser.V2', ->
describe 'quantity', ->
beforeEach ->
baseText = 'name:Alpha Bravo; version:1; item: Charlie; recipe:; input:Alpha; pattern:...0.0...; '
baseText = 'name:Test; version:0.0; item: Charlie; recipe:; input:Alpha; pattern:...0.0...; '
it 'adds "quantity" when present', ->
modVersion = parser.parse baseText + 'quantity: 2'
@@ -208,7 +211,7 @@ describe 'ModVersionParser.V2', ->
describe 'output', ->
beforeEach ->
baseText = 'name:Alpha; version:1; item:Bravo; recipe:; input:Charlie; pattern:... .0. ...; '
baseText = 'name:Test; version:0.0; item:Bravo; recipe:; input:Charlie; pattern:... .0. ...; '
it 'adds a single item as the default output', ->
modVersion = parser.parse baseText
@@ -241,7 +244,7 @@ describe 'ModVersionParser.V2', ->
describe 'tools', ->
beforeEach ->
baseText = 'name:Alpha; version:1; item:Bravo; recipe:; input:Charlie; pattern:... .0. ...; '
baseText = 'name:Test; version:0.0; item:Bravo; recipe:; input:Charlie; pattern:... .0. ...; '
it 'can add a single tool', ->
modVersion = parser.parse baseText + 'tools: Furnace'
+2 -2
View File
@@ -32,8 +32,8 @@ require './inventory.test'
require './inventory_parser.test'
require './mod_pack.test'
require './mod_version.test'
require './mod_version_parsers/v1.test'
require './mod_version_parsers/v2.test'
require './parser_versions/mod_version_parser_v1.test'
require './parser_versions/mod_version_parser_v2.test'
require './string_builder.test'
mocha.checkLeaks()