@litexa/core
Version:
Litexa, a programming language for writing Alexa skills
102 lines (86 loc) • 3.53 kB
text/coffeescript
###
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
###
{assert, expect} = require('chai')
{match, spy, stub} = require('sinon')
path = require 'path'
fs = require 'fs'
rimraf = require 'rimraf'
mkdirp = require 'mkdirp'
SourceCodeGenerator = require('@src/command-line/generators/sourceCodeGenerator')
DirectoryCreator = require('@src/command-line/generators/directoryCreator')
Test = require('@test/helpers')
describe 'SourceCodeGenerator', ->
describe '#description', ->
it 'has a class property to describe itself', ->
assert(SourceCodeGenerator.hasOwnProperty('description'), 'has a property description')
expect(SourceCodeGenerator.description).to.equal('litexa entry point')
describe 'generate', ->
options = undefined
loggerInterface = undefined
mockLanguage = undefined
beforeEach ->
options = {
root: '.'
configLanguage: 'javascript'
sourceLanguage: 'javascript'
bundlingStrategy: 'none'
projectConfig: {
name: 'test'
}
}
loggerInterface = {
log: () -> undefined
}
mockLanguage = {
code: {
files: ['main.litexa']
}
}
afterEach ->
dir = 'litexa'
if fs.existsSync(dir)
rimraf.sync(dir)
it 'returns a promise', ->
hasCodeStub = stub(SourceCodeGenerator.prototype, '_hasLitexaCode').returns(true)
sourceCodeGenerator = new SourceCodeGenerator({
options
logger: loggerInterface
projectInfoClass: Test.MockProjectInfoInterface
templateFilesHandlerClass: Test.MockFileHandlerInterface
directoryCreatorClass: Test.MockDirectoryCreatorInterface
})
assert.typeOf(sourceCodeGenerator.generate(), 'promise', 'it returns a promise')
hasCodeStub.restore()
it 'creates the directory structure', ->
hasCodeStub = stub(SourceCodeGenerator.prototype, '_hasLitexaCode').returns(true)
createSpy = spy(Test.MockDirectoryCreator.prototype, 'create')
sourceCodeGenerator = new SourceCodeGenerator({
options
logger: loggerInterface
projectInfoClass: Test.MockProjectInfoInterface
templateFilesHandlerClass: Test.MockFileHandlerInterface
directoryCreatorClass: Test.MockDirectoryCreatorInterface
})
sourceCodeGenerator.generate()
assert(createSpy.calledOnce, 'created the directory structure')
hasCodeStub.restore()
it 'synchronizes the directory if no litexa code exists', ->
hasCodeStub = stub(SourceCodeGenerator.prototype, '_hasLitexaCode').returns(false)
logSpy = spy(loggerInterface, 'log')
syncSpy = spy(Test.MockDirectoryCreator.prototype, 'sync')
sourceCodeGenerator = new SourceCodeGenerator({
options
logger: loggerInterface
projectInfoClass: Test.MockProjectInfoInterface
templateFilesHandlerClass: Test.MockFileHandlerInterface
directoryCreatorClass: Test.MockDirectoryCreatorInterface
})
sourceCodeGenerator.generate()
assert(syncSpy.calledOnce, 'created the directory structure')
assert(logSpy.calledWith(match("no code files found in litexa -> creating them")),
'informed the user it was going to create the files')
hasCodeStub.restore()