atom-beautify/spec/beautifier-php-cs-fixer-spe...

153 lines
5.0 KiB
CoffeeScript

PHPCSFixer = require "../src/beautifiers/php-cs-fixer"
Beautifier = require "../src/beautifiers/beautifier"
Executable = require "../src/beautifiers/executable"
path = require 'path'
# 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.
# Check if Windows
isWindows = process.platform is 'win32' or
process.env.OSTYPE is 'cygwin' or
process.env.OSTYPE is 'msys'
describe "PHP-CS-Fixer Beautifier", ->
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 "Beautifier::beautify", ->
beautifier = null
execSpawn = null
beforeEach ->
beautifier = new PHPCSFixer()
# console.log('new beautifier')
execSpawn = Executable.prototype.spawn
afterEach ->
Executable.prototype.spawn = execSpawn
OSSpecificSpecs = ->
text = "<?php echo \"test\"; ?>"
it "should error when beautifier's program not found", ->
expect(beautifier).not.toBe(null)
expect(beautifier instanceof Beautifier).toBe(true)
waitsForPromise shouldReject: true, ->
language = "PHP"
options = {
fixers: ""
levels: ""
}
# Mock spawn
# beautifier.spawn
Executable.prototype.spawn = (exe, args, options) ->
# console.log('spawn', exe, args, options)
er = new Error('ENOENT')
er.code = 'ENOENT'
return beautifier.Promise.reject(er)
# Beautify
p = beautifier.loadExecutables().then(() -> beautifier.beautify(text, language, options))
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, \
"Expected '#{v}' to be instance of Error")
expect(v.code).toBe("CommandNotFound", \
"Expected to be CommandNotFound")
return v
p.then(cb, cb)
return p
failWhichProgram = (failingProgram) ->
it "should error when '#{failingProgram}' not found", ->
expect(beautifier).not.toBe(null)
expect(beautifier instanceof Beautifier).toBe(true)
if not Executable.isWindows and failingProgram is "php"
# Only applicable on Windows
return
waitsForPromise shouldReject: true, ->
language = "PHP"
options = {
fixers: ""
levels: ""
}
cb = (v) ->
# console.log('cb value', v)
expect(v).not.toBe(null)
expect(v instanceof Error).toBe(true, \
"Expected '#{v}' to be instance of Error")
expect(v.code).toBe("CommandNotFound", \
"Expected to be CommandNotFound")
expect(v.file).toBe(failingProgram)
return v
# which = beautifier.which.bind(beautifier)
beautifier.which = (exe, options) ->
return beautifier.Promise.resolve(null) \
if not exe?
if exe is failingProgram
beautifier.Promise.resolve(failingProgram)
else
# which(exe, options)
# console.log('fake exe path', exe)
beautifier.Promise.resolve("/#{exe}")
# oldSpawn = beautifier.spawn.bind(beautifier)
# beautifier.spawn
Executable.prototype.spawn = (exe, args, options) ->
# console.log('spawn', exe, args, options)
if exe is failingProgram
er = new Error('ENOENT')
er.code = 'ENOENT'
return beautifier.Promise.reject(er)
else
return beautifier.Promise.resolve({
returnCode: 0,
stdout: 'stdout',
stderr: ''
})
p = beautifier.loadExecutables().then(() -> beautifier.beautify(text, language, options))
expect(p).not.toBe(null)
expect(p instanceof beautifier.Promise).toBe(true)
p.then(cb, cb)
return p
failWhichProgram('PHP')
# failWhichProgram('php-cs-fixer')
unless isWindows
describe "Mac/Linux", ->
beforeEach ->
# console.log('mac/linx')
Executable.isWindows = () -> false
do OSSpecificSpecs
describe "Windows", ->
beforeEach ->
# console.log('windows')
Executable.isWindows = () -> true
do OSSpecificSpecs