2015-06-06 10:36:47 -06:00
Beautifiers = require " ../src/beautifiers "
beautifiers = new Beautifiers ( )
Beautifier = require " ../src/beautifiers/beautifier "
2016-03-03 17:06:23 -07:00
Languages = require ( ' ../src/languages/ ' )
_ = require ( ' lodash ' )
2014-03-04 00:07:45 -07:00
# Use the command `window:run-package-specs` (cmd-alt-ctrl-p) to run specs.
#
# To run a specific `it` or `describe` block add an `f` to the front (e.g. `fit`
# or `fdescribe`). Remove the `f` to unfocus the block.
2015-06-11 19:07:56 -06:00
# Check if Windows
isWindows = process . platform is ' win32 ' or
process . env . OSTYPE is ' cygwin ' or
process . env . OSTYPE is ' msys '
2015-06-06 10:36:47 -06:00
describe " Atom-Beautify " , ->
2014-03-04 00:07:45 -07:00
2015-06-11 18:59:00 -06:00
beforeEach ->
# Activate package
waitsForPromise ->
activationPromise = atom . packages . activatePackage ( ' atom-beautify ' )
# Force activate package
pack = atom . packages . getLoadedPackage ( " atom-beautify " )
pack . activateNow ( )
# Change logger level
# atom.config.set('atom-beautify._loggerLevel', 'verbose')
# Return promise
return activationPromise
describe " Beautifiers " , ->
2016-03-29 22:28:48 -06:00
beautifier = null
2015-06-11 18:59:00 -06:00
2016-03-29 22:28:48 -06:00
beforeEach ->
beautifier = new Beautifier ( )
2015-06-11 18:59:00 -06:00
2016-03-29 22:28:48 -06:00
describe " Beautifier::run " , ->
2015-06-11 18:59:00 -06:00
it " should error when beautifier ' s program not found " , ->
expect ( beautifier ) . not . toBe ( null )
expect ( beautifier instanceof Beautifier ) . toBe ( true )
# waitsForRuns = (fn, message, timeout) ->
# isCompleted = false
# completed = ->
# console.log('completed')
# isCompleted = true
# runs ->
# console.log('runs')
# fn(completed)
# waitsFor(->
# console.log('waitsFor', isCompleted)
# isCompleted
# , message, timeout)
#
# waitsForRuns((cb) ->
# console.log('waitsForRuns', cb)
# setTimeout(cb, 2000)
# , "Waiting for beautification to complete", 5000)
waitsForPromise shouldReject: true , ->
p = beautifier . run ( " program " , [ ] )
expect ( p ) . not . toBe ( null )
expect ( p instanceof beautifier . Promise ) . toBe ( true )
cb = (v) ->
# console.log(v)
expect ( v ) . not . toBe ( null )
expect ( v instanceof Error ) . toBe ( true )
expect ( v . code ) . toBe ( " CommandNotFound " )
expect ( v . description ) . toBe ( undefined , \
' Error should not have a description. ' )
return v
p . then ( cb , cb )
return p
it " should error with help description \
2015-06-11 14:37:23 -06:00
when beautifier ' s program not found " , ->
2015-06-11 18:59:00 -06:00
expect ( beautifier ) . not . toBe ( null )
expect ( beautifier instanceof Beautifier ) . toBe ( true )
waitsForPromise shouldReject: true , ->
help = {
link: " http://test.com "
program: " test-program "
pathOption: " Lang - Test Program Path "
}
p = beautifier . run ( " program " , [ ] , help: help )
expect ( p ) . not . toBe ( null )
expect ( p instanceof beautifier . Promise ) . toBe ( true )
cb = (v) ->
# console.log(v)
expect ( v ) . not . toBe ( null )
expect ( v instanceof Error ) . toBe ( true )
expect ( v . code ) . toBe ( " CommandNotFound " )
expect ( v . description ) . not . toBe ( null )
expect ( v . description . indexOf ( help . link ) ) . not . toBe ( - 1 )
expect ( v . description . indexOf ( help . program ) ) . not . toBe ( - 1 )
expect ( v . description
. indexOf ( help . pathOption ) ) . not . toBe ( - 1 , \
" Error should have a description. " )
return v
p . then ( cb , cb )
return p
it " should error with Windows-specific help description \
2015-06-11 14:37:23 -06:00
when beautifier ' s program not found " , ->
2015-06-11 18:59:00 -06:00
expect ( beautifier ) . not . toBe ( null )
expect ( beautifier instanceof Beautifier ) . toBe ( true )
waitsForPromise shouldReject: true , ->
help = {
link: " http://test.com "
program: " test-program "
pathOption: " Lang - Test Program Path "
}
# Force to be Windows
beautifier.isWindows = true
terminal = ' CMD prompt '
whichCmd = " where.exe "
# Process
p = beautifier . run ( " program " , [ ] , help: help )
expect ( p ) . not . toBe ( null )
expect ( p instanceof beautifier . Promise ) . toBe ( true )
cb = (v) ->
# console.log(v)
expect ( v ) . not . toBe ( null )
expect ( v instanceof Error ) . toBe ( true )
expect ( v . code ) . toBe ( " CommandNotFound " )
expect ( v . description ) . not . toBe ( null )
expect ( v . description . indexOf ( help . link ) ) . not . toBe ( - 1 )
expect ( v . description . indexOf ( help . program ) ) . not . toBe ( - 1 )
expect ( v . description
. indexOf ( help . pathOption ) ) . not . toBe ( - 1 , \
" Error should have a description. " )
expect ( v . description
. indexOf ( terminal ) ) . not . toBe ( - 1 , \
" Error should have a description including \
2015-06-11 14:37:23 -06:00
' # {terminal} ' in message . " )
2015-06-11 18:59:00 -06:00
expect ( v . description
. indexOf ( whichCmd ) ) . not . toBe ( - 1 , \
" Error should have a description including \
2015-06-11 14:37:23 -06:00
' # {whichCmd} ' in message . " )
2015-06-11 18:59:00 -06:00
return v
p . then ( cb , cb )
return p
2015-06-11 14:37:23 -06:00
2015-06-11 19:07:56 -06:00
unless isWindows
it " should error with Mac/Linux-specific help description \
when beautifier ' s program not found " , ->
expect ( beautifier ) . not . toBe ( null )
expect ( beautifier instanceof Beautifier ) . toBe ( true )
waitsForPromise shouldReject: true , ->
help = {
link: " http://test.com "
program: " test-program "
pathOption: " Lang - Test Program Path "
}
# Force to be Mac/Linux (not Windows)
beautifier.isWindows = false
terminal = " Terminal "
whichCmd = " which "
# Process
p = beautifier . run ( " program " , [ ] , help: help )
expect ( p ) . not . toBe ( null )
expect ( p instanceof beautifier . Promise ) . toBe ( true )
cb = (v) ->
# console.log(v)
expect ( v ) . not . toBe ( null )
expect ( v instanceof Error ) . toBe ( true )
expect ( v . code ) . toBe ( " CommandNotFound " )
expect ( v . description ) . not . toBe ( null )
expect ( v . description . indexOf ( help . link ) ) . not . toBe ( - 1 )
expect ( v . description . indexOf ( help . program ) ) . not . toBe ( - 1 )
expect ( v . description
. indexOf ( terminal ) ) . not . toBe ( - 1 , \
" Error should have a description including \
' # {terminal} ' in message . " )
expect ( v . description
. indexOf ( whichCmd ) ) . not . toBe ( - 1 , \
" Error should have a description including \
' # {whichCmd} ' in message . " )
return v
p . then ( cb , cb )
return p
2016-03-03 17:06:23 -07:00
2016-03-29 22:28:48 -06:00
describe " Options " , ->
editor = null
beautifier = null
workspaceElement = atom . views . getView ( atom . workspace )
beforeEach ->
beautifier = new Beautifiers ( )
waitsForPromise ->
atom . workspace . open ( ) . then (e) ->
editor = e
expect ( editor . getText ( ) ) . toEqual ( " " )
beautifyEditor = (callback) ->
isComplete = false
beforeText = null
delay = 500
runs ->
beforeText = editor . getText ( )
atom . commands . dispatch workspaceElement , " atom-beautify:beautify-editor "
setTimeout ( ->
isComplete = true
, delay )
waitsFor ->
isComplete
runs ->
afterText = editor . getText ( )
expect ( typeof beforeText ) . toBe ( ' string ' )
expect ( typeof afterText ) . toBe ( ' string ' )
return callback ( beforeText , afterText )
describe " JavaScript " , ->
beforeEach ->
waitsForPromise ->
packName = ' language-javascript '
atom . packages . activatePackage ( packName )
runs ->
# Setup Editor
code = " var hello= ' world ' ;function(){console.log( ' hello ' +hello)} "
editor . setText ( code )
# console.log(atom.grammars.grammarsByScopeName)
grammar = atom . grammars . selectGrammar ( ' source.js ' )
expect ( grammar . name ) . toBe ( ' JavaScript ' )
editor . setGrammar ( grammar )
expect ( editor . getGrammar ( ) . name ) . toBe ( ' JavaScript ' )
# See https://discuss.atom.io/t/solved-settimeout-not-working-firing-in-specs-tests/11427/17
jasmine . unspy ( window , ' setTimeout ' )
afterEach ->
atom . packages . deactivatePackages ( )
atom . packages . unloadPackages ( )
describe " .jsbeautifyrc " , ->
describe " Package settings " , ->
getOptions = (callback) ->
options = null
waitsForPromise ->
console . log ( ' beautifier ' , beautifier . getOptionsForPath , beautifier )
allOptions = beautifier . getOptionsForPath ( null , null )
# Resolve options with promises
return Promise . all ( allOptions )
. then ( (allOptions) ->
options = allOptions
)
runs ->
callback ( options )
it " should change indent_size to 1 " , ->
atom . config . set ( ' atom-beautify.js.indent_size ' , 1 )
getOptions (allOptions) ->
expect ( typeof allOptions ) . toBe ( ' object ' )
configOptions = allOptions [ 1 ]
expect ( typeof configOptions ) . toBe ( ' object ' )
expect ( configOptions . js . indent_size ) . toBe ( 1 )
beautifyEditor (beforeText, afterText) ->
# console.log(beforeText, afterText, editor)
expect ( afterText ) . toBe ( """ var hello = ' world ' ;
function ( ) {
console . log ( ' hello ' + hello )
} """ )
it " should change indent_size to 10 " , ->
atom . config . set ( ' atom-beautify.js.indent_size ' , 10 )
getOptions (allOptions) ->
expect ( typeof allOptions ) . toBe ( ' object ' )
configOptions = allOptions [ 1 ]
expect ( typeof configOptions ) . toBe ( ' object ' )
expect ( configOptions . js . indent_size ) . toBe ( 10 )
beautifyEditor (beforeText, afterText) ->
# console.log(beforeText, afterText, editor)
expect ( afterText ) . toBe ( """ var hello = ' world ' ;
function ( ) {
console . log ( ' hello ' + hello )
} """ )
2016-03-03 17:06:23 -07:00
describe " Languages " , ->
languages = null
beforeEach ->
languages = new Languages ( )
describe " Languages::namespace " , ->
it " should verify that multiple languages do not share the same namespace " , ->
namespaceGroups = _ . groupBy ( languages . languages , " namespace " )
namespacePairs = _ . toPairs ( namespaceGroups )
namespaceOverlap = _ . filter ( namespacePairs , ([namespace, group]) -> group . length > 1 )
console . log ( ' namespaces ' , namespaceGroups , namespacePairs , namespaceOverlap )
expect ( namespaceOverlap . length ) . toBe ( 0 , \
" Language namespaces are overlapping. \n \
Namespaces are unique: only one language for each namespace . \ n " +
_ . map ( namespaceOverlap , ([namespace, group]) -> " - ' #{ namespace } ' : Check languages #{ _ . map ( group , ' name ' ) . join ( ' , ' ) } for using namespace ' #{ namespace } ' . " ) . join ( ' \n ' )
)