From 873434e938408be5c4dae5ca5964c611f76a5367 Mon Sep 17 00:00:00 2001 From: Andrew Miner Date: Wed, 25 Mar 2015 14:42:15 -0700 Subject: [PATCH] Refactoring tests and moving code to common module 1. All tests have been converted into regular command-line mocha tests (instead of running in the browser), and the deployment script has been changed to automatically fail any `--new` deployment which doesn't pass. 2. Several small class (e.g., `Logger`) have been moved into a common module, `crafting-guide-common` so that they may be shared between the client and server. --- Gruntfile.coffee | 38 +++--- package.json | 6 + scripts/deploy | 11 +- .../controllers/full_recipe_controller.coffee | 4 +- .../markdown_section_controller.coffee | 3 - .../minimal_recipe_controller.coffee | 4 +- src/coffee/logger.coffee | 98 -------------- src/coffee/main.coffee | 6 +- src/coffee/models/item.coffee | 12 +- .../command_parser_version_base.coffee | 2 +- .../mod_version_parser_v1.coffee | 2 +- src/coffee/models/recipe.coffee | 11 +- src/coffee/models/string_builder.coffee | 122 ------------------ src/coffee/test/string_builder.test.coffee | 84 ------------ src/coffee/test/test.coffee | 45 ------- src/jade/includes/_footer.jade | 4 +- src/jade/test.jade | 35 ----- .../test => test}/crafting_plan.test.coffee | 10 +- .../test => test}/event_recorder.coffee | 0 .../test => test}/inventory.test.coffee | 8 +- .../test => test}/item_slug.test.coffee | 2 +- {src/coffee/test => test}/mod.test.coffee | 2 +- .../coffee/test => test}/mod_pack.test.coffee | 10 +- .../test => test}/mod_version.test.coffee | 8 +- .../command_parser_version_base.test.coffee | 2 +- .../mod_version_parser_v1.test.coffee | 36 +++--- {src/coffee/test => test}/recipe.test.coffee | 8 +- test/test_helper.coffee | 26 ++++ 28 files changed, 128 insertions(+), 471 deletions(-) delete mode 100644 src/coffee/logger.coffee delete mode 100644 src/coffee/models/string_builder.coffee delete mode 100644 src/coffee/test/string_builder.test.coffee delete mode 100644 src/coffee/test/test.coffee delete mode 100644 src/jade/test.jade rename {src/coffee/test => test}/crafting_plan.test.coffee (92%) rename {src/coffee/test => test}/event_recorder.coffee (100%) rename {src/coffee/test => test}/inventory.test.coffee (97%) rename {src/coffee/test => test}/item_slug.test.coffee (98%) rename {src/coffee/test => test}/mod.test.coffee (95%) rename {src/coffee/test => test}/mod_pack.test.coffee (94%) rename {src/coffee/test => test}/mod_version.test.coffee (93%) rename {src/coffee/test => test}/parser_versions/command_parser_version_base.test.coffee (94%) rename {src/coffee/test => test}/parser_versions/mod_version_parser_v1.test.coffee (88%) rename {src/coffee/test => test}/recipe.test.coffee (94%) create mode 100644 test/test_helper.coffee diff --git a/Gruntfile.coffee b/Gruntfile.coffee index 688fe7cd9..af26bf594 100644 --- a/Gruntfile.coffee +++ b/Gruntfile.coffee @@ -5,6 +5,8 @@ # All rights reserved. ### +fs = require 'fs' + ######################################################################################################################## module.exports = (grunt)-> @@ -23,15 +25,6 @@ module.exports = (grunt)-> files: './dist/js/main.js': ['./src/coffee/main.coffee'] - test: - options: - transform: ['coffeeify'] - browserifyOptions: - debug: true - extensions: ['.coffee'] - files: - './dist/js/test.js': ['./src/coffee/test/test.coffee'] - markdown: options: browserifyOptions: @@ -74,9 +67,6 @@ module.exports = (grunt)-> main: files: './dist/js/main.js.map': ['./dist/js/main.js'] - test: - files: - './dist/js/test.js.map': ['./dist/js/test.js'] jade: pages: @@ -103,6 +93,18 @@ module.exports = (grunt)-> files: './src/coffee/views.js': ['./src/jade/templates/**/*.jade'] + mochaTest: + options: + bail: true + color: true + reporter: 'list' + require: [ + 'coffee-script/register' + './test/test_helper.coffee' + ] + verbose: true + src: './test/**/*.test.coffee' + rsync: static: options: @@ -151,14 +153,18 @@ module.exports = (grunt)-> sass: files: ['./src/**/*.scss'] tasks: ['sass', 'copy:styles'] - tests: - files: ['./src/**/*.coffee', './test/**/*.coffee'] - tasks: ['browserify:test'] grunt.registerTask 'default', 'build' grunt.registerTask 'build', [ 'rsync:non_html', 'copy', 'sass:build', 'jade', 'browserify', 'exorcise' ] - grunt.registerTask 'dist', ['clean', 'build', 'rsync:static', 'sass:dist', 'uglify'] + grunt.registerTask 'dist', ['test', 'clean', 'build', 'rsync:static', 'sass:dist', 'uglify'] grunt.registerTask 'clean-watch', ['clean', 'build', 'watch'] + + grunt.registerTask 'link-deps', -> + grunt.file.mkdir './node_modules' + fs.unlinkSync './node_modules/crafting-guide-common' + fs.symlinkSync '../../crafting-guide-common/', './node_modules/crafting-guide-common' + + grunt.registerTask 'test', ['mochaTest'] diff --git a/package.json b/package.json index b8579ff8a..4918607d9 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,8 @@ }, "homepage": "https://github.com/andrewminer/crafting-guide", "devDependencies": { + "chai": "^1.10.0", + "coffee-script": "^1.9.1", "coffeeify": "^1.0.0", "express": "^4.10.6", "grunt": "^0.4.5", @@ -28,8 +30,12 @@ "grunt-contrib-uglify": "^0.7.0", "grunt-contrib-watch": "^0.6.1", "grunt-exorcise": "^0.2.0", + "grunt-mocha-test": "^0.12.7", "grunt-rename": "^0.1.4", "grunt-rsync": "^0.6.2", + "mocha": "^2.2.1", + "sinon": "^1.14.1", + "sinon-chai": "^2.7.0", "underscore": "^1.7.0" }, "dependencies": { diff --git a/scripts/deploy b/scripts/deploy index 8de412e6e..7b32ece9f 100755 --- a/scripts/deploy +++ b/scripts/deploy @@ -20,10 +20,13 @@ fi if [[ "$TARGET" == "new" ]]; then find "$ROOT" -name ".DS_Store" | xargs rm - grunt clean dist - echo "Preparing to upload to S3..." - s3cmd sync -r --delete-removed --add-header="cache-control:max-age=1800" "$ROOT/" "s3://new.$SITE/" - grunt clean build + if grunt dist; then + echo "Preparing to upload to S3..." + s3cmd sync -r --delete-removed --add-header="cache-control:max-age=1800" "$ROOT/" "s3://new.$SITE/" + grunt clean build + else + echo "Aborting deployment" + fi elif [[ "$TARGET" == "promote" ]]; then aws s3 sync "s3://new.$SITE" "s3://$SITE" --delete fi diff --git a/src/coffee/controllers/full_recipe_controller.coffee b/src/coffee/controllers/full_recipe_controller.coffee index 1dae94800..83b40cdd2 100644 --- a/src/coffee/controllers/full_recipe_controller.coffee +++ b/src/coffee/controllers/full_recipe_controller.coffee @@ -7,11 +7,11 @@ All rights reserved. BaseController = require './base_controller' CraftingGridController = require './crafting_grid_controller' -{Duration} = require '../constants' ImageLoader = require './image_loader' Inventory = require '../models/inventory' InventoryTableController = require './inventory_table_controller' -StringBuilder = require '../models/string_builder' +{Duration} = require '../constants' +{StringBuilder} = require 'crafting-guide-common' ######################################################################################################################## diff --git a/src/coffee/controllers/markdown_section_controller.coffee b/src/coffee/controllers/markdown_section_controller.coffee index ffb2c9f1f..6c98ac88a 100644 --- a/src/coffee/controllers/markdown_section_controller.coffee +++ b/src/coffee/controllers/markdown_section_controller.coffee @@ -51,13 +51,10 @@ module.exports = class MarkdownSectionController extends BaseController refs = tree[1].references findLinkRefs = (node)=> - logger.debug "inspecting a #{node[0]}" if node[0] is 'link_ref' name = node[2] - logger.debug "found a link_ref for #{name}" item = @modPack.findItemByName node[2] if item? - logger.debug "found related item: #{item}" node[0] = 'link' node[1].href = Url.item itemSlug:item.slug.item, modSlug:item.slug.mod delete node[1].ref diff --git a/src/coffee/controllers/minimal_recipe_controller.coffee b/src/coffee/controllers/minimal_recipe_controller.coffee index 6bf2d5d4e..0d010a367 100644 --- a/src/coffee/controllers/minimal_recipe_controller.coffee +++ b/src/coffee/controllers/minimal_recipe_controller.coffee @@ -7,9 +7,9 @@ All rights reserved. BaseController = require './base_controller' CraftingGridController = require './crafting_grid_controller' -{Duration} = require '../constants' ImageLoader = require './image_loader' -StringBuilder = require '../models/string_builder' +{Duration} = require '../constants' +{StringBuilder} = require 'crafting-guide-common' ######################################################################################################################## diff --git a/src/coffee/logger.coffee b/src/coffee/logger.coffee deleted file mode 100644 index f54762d43..000000000 --- a/src/coffee/logger.coffee +++ /dev/null @@ -1,98 +0,0 @@ -### -Crafting Guide - logger.coffee - -Copyright (c) 2014-2015 by Redwood Labs -All rights reserved. -### - -######################################################################################################################## - -module.exports = class Logger - - @TRACE = {name:'TRACE ', value:0} - @DEBUG = {name:'DEBUG ', value:1} - @VERBOSE = {name:'VERBOSE', value:2} - @INFO = {name:'INFO ', value:3} - @WARNING = {name:'WARNING', value:4} - @ERROR = {name:'ERROR ', value:5} - @FATAL = {name:'FATAL ', value:6} - - ALL_LEVELS = [@TRACE, @DEBUG, @VERBOSE, @INFO, @WARNING, @ERROR, @FATAL] - - constructor: (options={})-> - options.level ?= Logger.FATAL - @formatText = options.format - @formatText ?= "<%= timestamp %> | <%= level %> | <%= indent %><%= message %>" - @level = @_parseLevel options - - @_format = _.template @formatText - @_indent = '' - - # Public Methods ############################################################################### - - indent: -> - @_indent += ' ' - - log: (level, message)-> - return unless level.value >= @level.value - message = message() if _.isFunction message - - entry = {timestamp:new Date(), level:level, message:message, indent:@_indent} - entry.level ?= @level - - lines = @_formatEntry entry - if entry.level.value < Logger.WARNING.value - console.log(line) for line in lines - else - console.error(line) for line in lines - - outdent: -> - @_indent = @_indent[0...@_indent.length - 4] - - # Log Methods ################################################################################## - - trace: (message)-> @log Logger.TRACE, message - - debug: (message)-> @log Logger.DEBUG, message - - verbose: (message)-> @log Logger.VERBOSE, message - - info: (message)-> @log Logger.INFO, message - - warning: (message)-> @log Logger.WARNING, message - - error: (message)-> - message = "#{message.stack}" if message.stack? - @log Logger.ERROR, message - - fatal: (message)-> @log Logger.FATAL, message - - # Private Methods ############################################################################## - - _formatEntry: (entry, lines=[])-> - message = entry.message.replace /\\n/g, '\n' - for line in message.split '\n' - result = [] - result.push @_format - timestamp: "#{entry.timestamp}" - level: entry.level.name - message: line - indent: entry.indent - lines.push result.join '' - return lines - - _parseLevel: (options)-> - return Logger.FATAL unless _(options).has 'level' - level = options.level - - if not level? - candidates = [] - else if _.isString level - candidates = (l for l in ALL_LEVELS when l.name.trim().toLowerCase() is level.trim().toLowerCase()) - else if _.isNumber level - candidates = (l for l in ALL_LEVELS when l.value is level) - else if level? - candidates = (l for l in ALL_LEVELS when l is level) - - throw new Error "invalid level: #{level}" unless candidates.length > 0 - return candidates[0] diff --git a/src/coffee/main.coffee b/src/coffee/main.coffee index 0b171f21b..1a8fa2582 100644 --- a/src/coffee/main.coffee +++ b/src/coffee/main.coffee @@ -8,10 +8,10 @@ All rights reserved. require './underscore_mixins' require './polyfill' -views = require './views' -FeedbackController = require './controllers/feedback_controller' -Logger = require './logger' CraftingGuideRouter = require './crafting_guide_router' +FeedbackController = require './controllers/feedback_controller' +views = require './views' +{Logger} = require 'crafting-guide-common' ######################################################################################################################## diff --git a/src/coffee/models/item.coffee b/src/coffee/models/item.coffee index ee0cdf387..444962f77 100644 --- a/src/coffee/models/item.coffee +++ b/src/coffee/models/item.coffee @@ -5,12 +5,12 @@ Copyright (c) 2014-2015 by Redwood Labs All rights reserved. ### -BaseModel = require './base_model' -{Event} = require '../constants' -ItemSlug = require './item_slug' -Recipe = require './recipe' -StringBuilder = require './string_builder' -{Url} = require '../constants' +BaseModel = require './base_model' +ItemSlug = require './item_slug' +Recipe = require './recipe' +{Event} = require '../constants' +{StringBuilder} = require 'crafting-guide-common' +{Url} = require '../constants' ######################################################################################################################## diff --git a/src/coffee/models/parser_versions/command_parser_version_base.coffee b/src/coffee/models/parser_versions/command_parser_version_base.coffee index f6a1efd32..14a2a6cd0 100644 --- a/src/coffee/models/parser_versions/command_parser_version_base.coffee +++ b/src/coffee/models/parser_versions/command_parser_version_base.coffee @@ -5,7 +5,7 @@ Copyright (c) 2015 by Redwood Labs All rights reserved. ### -StringBuilder = require '../../models/string_builder' +{StringBuilder} = require 'crafting-guide-common' ######################################################################################################################## diff --git a/src/coffee/models/parser_versions/mod_version_parser_v1.coffee b/src/coffee/models/parser_versions/mod_version_parser_v1.coffee index 03061b203..ef021feab 100644 --- a/src/coffee/models/parser_versions/mod_version_parser_v1.coffee +++ b/src/coffee/models/parser_versions/mod_version_parser_v1.coffee @@ -11,7 +11,7 @@ ItemSlug = require '../item_slug' ModVersion = require '../mod_version' Recipe = require '../recipe' Stack = require '../simple_stack' -StringBuilder = require '../string_builder' +{StringBuilder} = require 'crafting-guide-common' ######################################################################################################################## diff --git a/src/coffee/models/recipe.coffee b/src/coffee/models/recipe.coffee index c7dd2d19c..050871e4e 100644 --- a/src/coffee/models/recipe.coffee +++ b/src/coffee/models/recipe.coffee @@ -5,10 +5,10 @@ Copyright (c) 2014-2015 by Redwood Labs All rights reserved. ### -BaseModel = require './base_model' -{Event} = require '../constants' -Stack = require './stack' -StringBuilder = require './string_builder' +BaseModel = require './base_model' +Stack = require './stack' +{Event} = require '../constants' +{StringBuilder} = require 'crafting-guide-common' ######################################################################################################################## @@ -119,7 +119,8 @@ module.exports = class Recipe extends BaseModel actuallyProduces = not @isPassThroughFor stack.itemSlug @_produces[stack.itemSlug.qualified] = actuallyProduces - return @_produces[itemSlug.qualified] or @_produces[itemSlug.item] + result = @_produces[itemSlug.qualified] or @_produces[itemSlug.item] + return result requires: (itemSlug)-> for stack in @input diff --git a/src/coffee/models/string_builder.coffee b/src/coffee/models/string_builder.coffee deleted file mode 100644 index a1e834a73..000000000 --- a/src/coffee/models/string_builder.coffee +++ /dev/null @@ -1,122 +0,0 @@ -### -Crafting Guide - string_builder.coffee - -Copyright (c) 2015 by Redwood Labs -All rights reserved. -### - -######################################################################################################################## - -module.exports = class StringBuilder - - constructor: (options={})-> - options.indent ?= 0 - options.indentString ?= ' ' - - @context = options.context - - @_initialIndent = options.indent - @_indent = options.indent - @_indentString = options.indentString - @_pieces = [] - - # Public Methods ############################################################################### - - call: -> - args = (arg for arg in arguments) - callback = args.pop() - args.unshift this - return unless _.isFunction callback - - callback.apply null, args - - clear: -> - @_indent = @_initialIndent - @_pieces = [] - return this - - indent: -> - @_indent += 1 - return this - - line: (args...)-> - @push.apply(this, args) if args.length > 0 - @push '\n' - - loop: (list, options={})-> - options.start ?= '' - options.end ?= '' - options.indent ?= false - options.delimiter ?= ', ' - options.onEach ?= (builder, item)-> builder.push item - - @_pushText options.start - if options.indent then @indent() - - isFirst = true - for item in list - if not isFirst then @push options.delimiter - isFirst = false - options.onEach this, item - - if options.indent then @outdent() - @_pushText options.end - - return this - - onlyIf: (condition, callback=null)-> - return this unless condition - - callback ?= (builder)-> # do nothing - callback this - return this - - outdent: -> - @_indent -= 1 - return this - - push: -> - for i in [0...arguments.length] - arg = arguments[i] - - if _.isArray arg - @push.apply this, arg - else if _.isString arg - @_pushText arg - else - @_pushText "#{arg}" - - return this - - # Object Overrides ############################################################################# - - toString: -> - return @_pieces.join '' - - # Private Methods ############################################################################## - - _pushIndent: -> - for i in [0...@_indent] - @_pieces.push @_indentString - - _pushText: (text)-> - return if text.length is 0 - index = 0 - - if @_pieces.length > 0 - lastPiece = @_pieces[@_pieces.length-1] - if lastPiece[lastPiece.length-1] is '\n' - @_pushIndent() - - while true - newLineAt = text.indexOf '\n', index - break if newLineAt is -1 - - @_pieces.push text[index..newLineAt] - index = newLineAt + 1 - - break if newLineAt is text.length - 1 - @_pushIndent() - - if text.length > index - @_pieces.push text[index...text.length] diff --git a/src/coffee/test/string_builder.test.coffee b/src/coffee/test/string_builder.test.coffee deleted file mode 100644 index 6163b6dea..000000000 --- a/src/coffee/test/string_builder.test.coffee +++ /dev/null @@ -1,84 +0,0 @@ -### -Crafting Guide - string_builder.test.coffee - -Copyright (c) 2015 by Redwood Labs -All rights reserved. -### - -StringBuilder = require '../models/string_builder' - -######################################################################################################################## - -builder = null - -######################################################################################################################## - -describe 'string_builder.coffee', -> - - beforeEach -> builder = new StringBuilder - - describe 'call', -> - - it 'works with no arguments', -> - builder.call (b)-> b.push 'foo' - builder.toString().should.equal 'foo' - - it 'works with multiple arguments', -> - builder.call 'foo', 'bar', 'baz', (builder, a, b, c)-> builder.loop [a, b, c] - builder.toString().should.equal 'foo, bar, baz' - - describe 'loop', -> - - it 'can make an empty list', -> - builder.loop [], start:'[', end:']' - builder.toString().should.equal '[]' - - it 'can make a list with a single element', -> - builder.loop ['foo'], start:'[', end:']' - builder.toString().should.equal '[foo]' - - it 'can make a list with many elements', -> - builder.loop ['foo', 'bar', 'baz'], start:'[', end:']' - builder.toString().should.equal '[foo, bar, baz]' - - it 'can make a list with a custom callback', -> - builder.loop ['foo', 'bar', 'baz'], start:'[', end:']', onEach:(b, i)-> b.push "\"#{i}\"" - builder.toString().should.equal '["foo", "bar", "baz"]' - - it 'can use a custom delimiter', -> - builder.loop ['foo', 'bar', 'baz'], delimiter:'|' - builder.toString().should.equal 'foo|bar|baz' - - it 'can indent content', -> - builder.loop ['foo', 'bar', 'baz'], start:'[\n', end:'\n]', delimiter:',\n', indent:true - builder.toString().should.equal '[\n foo,\n bar,\n baz\n]' - - describe 'onlyIf', -> - - it 'calls the callback on true', -> - builder.onlyIf true, (b)-> b.push 'foo' - builder.toString().should.equal 'foo' - - describe 'push', -> - - it 'can build a simple string', -> - builder.push('foo').push(' bar').push(' baz') - builder.toString().should.equal 'foo bar baz' - - it 'can build a multi-line string', -> - builder.push('foo').push('\nbar\n').push('baz') - builder.toString().should.equal 'foo\nbar\nbaz' - - it 'can build an indented multi-line string', -> - builder - .push 'foo\n' - .indent() - .push 'bar\n' - .outdent() - .push 'baz' - - builder.toString().should.equal 'foo\n bar\nbaz' - - it 'can pick apart multiple newlines in a single chunk', -> - builder.indent().push('foo\nbar\nbaz').outdent().push('\nbif') - builder.toString().should.equal 'foo\n bar\n baz\nbif' \ No newline at end of file diff --git a/src/coffee/test/test.coffee b/src/coffee/test/test.coffee deleted file mode 100644 index c43662271..000000000 --- a/src/coffee/test/test.coffee +++ /dev/null @@ -1,45 +0,0 @@ -### -# Crafting Guide - test.coffee -# -# Copyright (c) 2014-2015 by Redwood Labs -# All rights reserved. -### - -# Test Set-up ########################################################################################################## - -chai.use require 'sinon-chai' -chai.config.includeStack = true - -if typeof(global) is 'undefined' - window.global = window - -global.assert = chai.assert -global.expect = chai.expect -global.should = chai.should() -global.util = require 'util' - -Logger = require '../logger' -global.logger = new Logger level:Logger.DEBUG - -require '../polyfill' -require '../underscore_mixins' - -# Test Registry ######################################################################################################## - -mocha.setup 'bdd' - -# tests are roughly in order of how errors should be tackled -require './string_builder.test' -require './item_slug.test' -require './inventory.test' -require './recipe.test' -require './mod_version.test' -require './mod.test' -require './mod_pack.test' -require './parser_versions/command_parser_version_base.test' -require './parser_versions/mod_version_parser_v1.test' -require './crafting_plan.test' - -mocha.checkLeaks() -mocha.globals ['LiveReload'] -mocha.run() diff --git a/src/jade/includes/_footer.jade b/src/jade/includes/_footer.jade index 64fa77f2f..175cb2599 100644 --- a/src/jade/includes/_footer.jade +++ b/src/jade/includes/_footer.jade @@ -32,5 +32,5 @@ .action iframe(src="http://ghbtns.com/github-btn.html?user=andrewminer&repo=crafting-guide&type=fork&size=large", allowtransparency="true", frameborder="0", scrolling="0", width="100", height="32") - a(href="/test.html", rel="nofollow") - .divider.bottom + + .divider.bottom diff --git a/src/jade/test.jade b/src/jade/test.jade deleted file mode 100644 index 899cdc47b..000000000 --- a/src/jade/test.jade +++ /dev/null @@ -1,35 +0,0 @@ -//- -//- Crafting Guide - test.jade -//- -//- Copyright (c) 2014-2015 by Redwood Labs -//- All rights reserved. -//- - -doctype html -html - head - title Crafting Guide Unit Tests - meta(charset="UTF-8") - link(href="/images/favicon.png", rel="icon", type="image/png") - - block styles - link(rel="stylesheet", type="text/css", href="/css/main.css") - link(rel="stylesheet", type="text/css", href="css/mocha.css") - style #mocha-stats { position: absolute; top: 12em; } - - body - block body - .view__feedback - .view__screen - - .content - include ./includes/_header.jade - .page - #mocha - include ./includes/_footer.jade - - block scripts - include ./includes/_standard_scripts.jade - script(src="/js/mocha.js") - script(src="/js/chai.js") - script(src="/js/test.js") diff --git a/src/coffee/test/crafting_plan.test.coffee b/test/crafting_plan.test.coffee similarity index 92% rename from src/coffee/test/crafting_plan.test.coffee rename to test/crafting_plan.test.coffee index b06023870..32e955332 100644 --- a/src/coffee/test/crafting_plan.test.coffee +++ b/test/crafting_plan.test.coffee @@ -5,11 +5,11 @@ Copyright (c) 2014-2015 by Redwood Labs All rights reserved. ### -CraftingPlan = require '../models/crafting_plan' -ItemSlug = require '../models/item_slug' -Mod = require '../models/mod' -ModPack = require '../models/mod_pack' -ModVersion = require '../models/mod_version' +CraftingPlan = require '../src/coffee/models/crafting_plan' +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' ######################################################################################################################## diff --git a/src/coffee/test/event_recorder.coffee b/test/event_recorder.coffee similarity index 100% rename from src/coffee/test/event_recorder.coffee rename to test/event_recorder.coffee diff --git a/src/coffee/test/inventory.test.coffee b/test/inventory.test.coffee similarity index 97% rename from src/coffee/test/inventory.test.coffee rename to test/inventory.test.coffee index aebe3980d..2e9e2b7d2 100644 --- a/src/coffee/test/inventory.test.coffee +++ b/test/inventory.test.coffee @@ -5,11 +5,11 @@ # All rights reserved. ### -{Event} = require '../constants' +{Event} = require '../src/coffee/constants' EventRecorder = require './event_recorder' -Inventory = require '../models/inventory' -Item = require '../models/item' -ItemSlug = require '../models/item_slug' +Inventory = require '../src/coffee/models/inventory' +Item = require '../src/coffee/models/item' +ItemSlug = require '../src/coffee/models/item_slug' ######################################################################################################################## diff --git a/src/coffee/test/item_slug.test.coffee b/test/item_slug.test.coffee similarity index 98% rename from src/coffee/test/item_slug.test.coffee rename to test/item_slug.test.coffee index 28b9c1492..98dd326a2 100644 --- a/src/coffee/test/item_slug.test.coffee +++ b/test/item_slug.test.coffee @@ -5,7 +5,7 @@ Copyright (c) 2015 by Redwood Labs All rights reserved. ### -ItemSlug = require '../models/item_slug' +ItemSlug = require '../src/coffee/models/item_slug' ######################################################################################################################## diff --git a/src/coffee/test/mod.test.coffee b/test/mod.test.coffee similarity index 95% rename from src/coffee/test/mod.test.coffee rename to test/mod.test.coffee index d223786a3..22162939c 100644 --- a/src/coffee/test/mod.test.coffee +++ b/test/mod.test.coffee @@ -5,7 +5,7 @@ Copyright (c) 2015 by Redwood Labs All rights reserved. ### -Mod = require '../models/mod' +Mod = require '../src/coffee/models/mod' ######################################################################################################################## diff --git a/src/coffee/test/mod_pack.test.coffee b/test/mod_pack.test.coffee similarity index 94% rename from src/coffee/test/mod_pack.test.coffee rename to test/mod_pack.test.coffee index 0abf125b0..2f4b3c264 100644 --- a/src/coffee/test/mod_pack.test.coffee +++ b/test/mod_pack.test.coffee @@ -5,11 +5,11 @@ Copyright (c) 2014-2015 by Redwood Labs All rights reserved. ### -Item = require '../models/item' -ItemSlug = require '../models/item_slug' -Mod = require '../models/mod' -ModPack = require '../models/mod_pack' -ModVersion = require '../models/mod_version' +Item = require '../src/coffee/models/item' +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' ######################################################################################################################## diff --git a/src/coffee/test/mod_version.test.coffee b/test/mod_version.test.coffee similarity index 93% rename from src/coffee/test/mod_version.test.coffee rename to test/mod_version.test.coffee index 92ecf244e..7a52b8a60 100644 --- a/src/coffee/test/mod_version.test.coffee +++ b/test/mod_version.test.coffee @@ -5,9 +5,9 @@ Copyright (c) 2014-2015 by Redwood Labs All rights reserved. ### -Item = require '../models/item' -ItemSlug = require '../models/item_slug' -ModVersion = require '../models/mod_version' +Item = require '../src/coffee/models/item' +ItemSlug = require '../src/coffee/models/item_slug' +ModVersion = require '../src/coffee/models/mod_version' ######################################################################################################################## @@ -92,5 +92,5 @@ describe 'mod_version.coffee', -> """ it 'finds all recipes which list item as output', -> - recipes = modVersion.findRecipes ItemSlug.slugify('Bucket') + recipes = modVersion.findRecipes ItemSlug.slugify('test__bucket') (r.output[0].itemSlug.item for r in recipes).sort().should.eql ['bucket', 'cake', 'cake'] diff --git a/src/coffee/test/parser_versions/command_parser_version_base.test.coffee b/test/parser_versions/command_parser_version_base.test.coffee similarity index 94% rename from src/coffee/test/parser_versions/command_parser_version_base.test.coffee rename to test/parser_versions/command_parser_version_base.test.coffee index 08d50bee5..c1c34ad6c 100644 --- a/src/coffee/test/parser_versions/command_parser_version_base.test.coffee +++ b/test/parser_versions/command_parser_version_base.test.coffee @@ -5,7 +5,7 @@ Copyright (c) 2015 by Redwood Labs All rights reserved. ### -CommandParserVersionBase = require '../../models/parser_versions/command_parser_version_base' +CommandParserVersionBase = require '../../src/coffee/models/parser_versions/command_parser_version_base' ######################################################################################################################## diff --git a/src/coffee/test/parser_versions/mod_version_parser_v1.test.coffee b/test/parser_versions/mod_version_parser_v1.test.coffee similarity index 88% rename from src/coffee/test/parser_versions/mod_version_parser_v1.test.coffee rename to test/parser_versions/mod_version_parser_v1.test.coffee index 3404be037..979bc7131 100644 --- a/src/coffee/test/parser_versions/mod_version_parser_v1.test.coffee +++ b/test/parser_versions/mod_version_parser_v1.test.coffee @@ -5,10 +5,11 @@ Copyright (c) 2015 by Redwood Labs All rights reserved. ### -CommandParserVersionBase = require '../../models/parser_versions/command_parser_version_base' -ItemSlug = require '../../models/item_slug' -ModVersion = require '../../models/mod_version' -ModVersionParserV1 = require '../../models/parser_versions/mod_version_parser_v1' +CommandParserVersionBase = require '../../src/coffee/models/parser_versions/command_parser_version_base' +ItemSlug = require '../../src/coffee/models/item_slug' +ModVersion = require '../../src/coffee/models/mod_version' +ModVersionParserV1 = require '../../src/coffee/models/parser_versions/mod_version_parser_v1' +{Logger} = require 'crafting-guide-common' ######################################################################################################################## @@ -29,7 +30,7 @@ describe 'mod_version_parser_v1.coffee', -> recipe:; input:Alpha; pattern:... .0. ...; recipe:; input:Bravo; pattern:... 0.0 ...;" modVersion = parser.parse recipes - recipes = modVersion.findRecipes ItemSlug.slugify 'charlie' + recipes = modVersion.findRecipes ItemSlug.slugify 'test__charlie' recipes[0].input[0].itemSlug.qualified.should.equal 'alpha' recipes[1].input[0].itemSlug.qualified.should.equal 'bravo' @@ -68,9 +69,10 @@ describe 'mod_version_parser_v1.coffee', -> describe 'input', -> it 'adds "input" when present', -> - modVersion = parser.parse baseText + 'recipe:; input:Alpha, Bravo, Charlie; pattern: ... 012 ...' - slugs = (s.itemSlug.item for s in modVersion.findRecipes(ItemSlug.slugify('charlie'))[0].input) - slugs.should.eql ['alpha', 'bravo', 'charlie'] + logger.doAtLevel 'DEBUG', -> + modVersion = parser.parse baseText + 'recipe:; input:Alpha, Bravo; pattern: ... 010 ...' + slugs = (s.itemSlug.item for s in modVersion.findRecipes(ItemSlug.slugify('test__charlie'))[0].input) + slugs.should.eql ['alpha', 'bravo'] it 'requires an "input" declaration', -> func = -> parser.parse baseText + 'recipe:; pattern: ... .0. ...' @@ -92,7 +94,7 @@ describe 'mod_version_parser_v1.coffee', -> it 'adds "pattern" when present', -> modVersion = parser.parse baseText + 'recipe:; input:Alpha, Bravo; pattern:... .0. .1.' - modVersion.findRecipes(ItemSlug.slugify('charlie'))[0].pattern.should.equal '... .0. .1.' + modVersion.findRecipes(ItemSlug.slugify('test__charlie'))[0].pattern.should.equal '... .0. .1.' it 'requires a "pattern" declaration', -> func = -> parser.parse baseText + 'recipe:; input:Alpha, Bravo' @@ -119,8 +121,8 @@ describe 'mod_version_parser_v1.coffee', -> expect(func).to.throw Error, 'Bravo is an input' it 'computes the input stack sizes from the pattern', -> - modVersion = parser.parse baseText + 'recipe:; input:Alpha, Bravo, Charlie; pattern:111 .0. 2.2' - recipe = modVersion.findRecipes(ItemSlug.slugify('charlie'))[0] + modVersion = parser.parse baseText + 'recipe:; input:Alpha, Bravo, Delta; pattern:111 .0. 2.2' + recipe = modVersion.findRecipes(ItemSlug.slugify('test__charlie'))[0] recipe.input[0].quantity.should.equal 1 recipe.input[1].quantity.should.equal 3 recipe.input[2].quantity.should.equal 2 @@ -136,7 +138,7 @@ describe 'mod_version_parser_v1.coffee', -> it 'adds "quantity" when present', -> modVersion = parser.parse baseText + 'quantity: 2' - modVersion.findRecipes(ItemSlug.slugify('charlie'))[0].output[0].quantity.should.equal 2 + modVersion.findRecipes(ItemSlug.slugify('test__charlie'))[0].output[0].quantity.should.equal 2 it 'does not allow a duplicate "quantity" declaration', -> func = -> parser.parse baseText + 'quantity:1; quantity:2' @@ -148,7 +150,7 @@ describe 'mod_version_parser_v1.coffee', -> it 'assumes a quantity of 1 by default', -> modVersion = parser.parse baseText - modVersion.findRecipes(ItemSlug.slugify('charlie'))[0].output[0].quantity.should.equal 1 + modVersion.findRecipes(ItemSlug.slugify('test__charlie'))[0].output[0].quantity.should.equal 1 it 'does not allow "quantity" before recipe', -> func = -> parser.parse 'item:Bravo; quantity:12; recipe:;' @@ -161,13 +163,13 @@ describe 'mod_version_parser_v1.coffee', -> it 'adds a single item as the default output', -> modVersion = parser.parse baseText - stack = modVersion.findRecipes(ItemSlug.slugify('bravo'))[0].output[0] + stack = modVersion.findRecipes(ItemSlug.slugify('test__bravo'))[0].output[0] stack.itemSlug.qualified.should.equal 'test__bravo' stack.quantity.should.equal 1 it 'can add multiple extras with quantities', -> modVersion = parser.parse baseText + 'extras:2 Delta, 4 Echo' - output = modVersion.findRecipes(ItemSlug.slugify('bravo'))[0].output + output = modVersion.findRecipes(ItemSlug.slugify('test__bravo'))[0].output output[0].itemSlug.qualified.should.equal 'test__bravo' output[0].quantity.should.equal 1 output[1].itemSlug.qualified.should.equal 'test__delta' @@ -196,11 +198,11 @@ describe 'mod_version_parser_v1.coffee', -> it 'can add a single tool', -> modVersion = parser.parse baseText + 'tools: Furnace' - modVersion.findRecipes(ItemSlug.slugify('bravo'))[0].tools[0].itemSlug.item.should.equal 'furnace' + modVersion.findRecipes(ItemSlug.slugify('test__bravo'))[0].tools[0].itemSlug.item.should.equal 'furnace' it 'can add multiple tools', -> modVersion = parser.parse baseText + 'tools: Crafting Table, Furnace' - tools = modVersion.findRecipes(ItemSlug.slugify('bravo'))[0].tools + tools = modVersion.findRecipes(ItemSlug.slugify('test__bravo'))[0].tools tools[0].itemSlug.item.should.equal 'crafting_table' tools[1].itemSlug.item.should.equal 'furnace' diff --git a/src/coffee/test/recipe.test.coffee b/test/recipe.test.coffee similarity index 94% rename from src/coffee/test/recipe.test.coffee rename to test/recipe.test.coffee index c8ed27f1b..944a33363 100644 --- a/src/coffee/test/recipe.test.coffee +++ b/test/recipe.test.coffee @@ -5,10 +5,10 @@ Copyright (c) 2015 by Redwood Labs All rights reserved. ### -Item = require '../models/item' -ItemSlug = require '../models/item_slug' -Recipe = require '../models/recipe' -Stack = require '../models/stack' +Item = require '../src/coffee/models/item' +ItemSlug = require '../src/coffee/models/item_slug' +Recipe = require '../src/coffee/models/recipe' +Stack = require '../src/coffee/models/stack' ######################################################################################################################## diff --git a/test/test_helper.coffee b/test/test_helper.coffee new file mode 100644 index 000000000..34b5d74e9 --- /dev/null +++ b/test/test_helper.coffee @@ -0,0 +1,26 @@ +### +# Crafting Guide - test.coffee +# +# Copyright (c) 2014-2015 by Redwood Labs +# All rights reserved. +### + +# Test Set-up ########################################################################################################## + +chai = require 'chai' +chai.use require 'sinon-chai' +chai.config.includeStack = true + +global._ = require 'underscore' +global.Backbone = require 'backbone' +global.assert = chai.assert +global.expect = chai.expect +global.should = chai.should() +global.util = require 'util' +global.w = require 'when' + +{Logger} = require 'crafting-guide-common' +global.logger = new Logger level:Logger.FATAL + +require '../src/coffee/polyfill' +require '../src/coffee/underscore_mixins'