atom-beautify/spec/beautify-languages-spec.coffee

139 lines
5.8 KiB
CoffeeScript

Beautify = require '../lib/beautify'
beautifier = require "../lib/language-options"
languages = beautifier.languages
defaultLanguageOptions = beautifier.defaultLanguageOptions
fs = require "fs"
path = require "path"
options = require "../lib/options"
# 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.
describe "BeautifyLanguages", ->
optionsDir = path.resolve(__dirname, "../examples")
# Activate all of the languages
allLanguages = [
"c", "coffee-script", "css", "html",
"java", "javascript", "json", "less",
"mustache", "objective-c", "perl", "php",
"python", "ruby", "sass", "sql",
"typescript", "xml", "csharp", "gfm"
]
beforeEach ->
for lang in allLanguages
do (lang) ->
waitsForPromise ->
atom.packages.activatePackage("language-#{lang}")
###
Directory structure:
- examples
- config1
- lang1
- original
- 1 - test.ext
- expected
- 1 - test.ext
- lang2
- config2
###
# All Configurations
configs = fs.readdirSync(optionsDir)
for config in configs
do (config) ->
# Generate the path to where all of the languages are
langsDir = path.resolve(optionsDir, config)
optionStats = fs.lstatSync(langsDir)
# Confirm that this path is a directory
if optionStats.isDirectory()
# Create testing group for configuration
describe "when using configuration '#{config}'", ->
# All Languages for configuration
langNames = fs.readdirSync(langsDir)
for lang in langNames
do (lang) ->
# Generate the path to where al of the tests are
testsDir = path.resolve(langsDir, lang)
langStats = fs.lstatSync(testsDir)
# Confirm that this path is a directory
if langStats.isDirectory()
# Original
originalDir = path.resolve(testsDir, "original")
if not fs.existsSync(originalDir)
console.warn("Directory for test originals/inputs not found." +
" Making it at #{originalDir}.")
fs.mkdirSync(originalDir)
# Expected
expectedDir = path.resolve(testsDir, "expected")
if not fs.existsSync(expectedDir)
console.warn("Directory for test expected/results not found." +
"Making it at #{expectedDir}.")
fs.mkdirSync(expectedDir)
# Language group tests
describe "when beautifying language '#{lang}'", ->
# All tests for language
testNames = fs.readdirSync(originalDir)
for testFileName in testNames
do (testFileName) ->
ext = path.extname(testFileName)
testName = path.basename(testFileName, ext)
# If prefixed with underscore (_) then this is a hidden test
if testFileName[0] is '_'
# Do not show this test
return
# Confirm this is a test
it "#{testName} #{testFileName}", ->
# Generate paths to test files
originalTestPath = path.resolve(originalDir, testFileName)
expectedTestPath = path.resolve(expectedDir, testFileName)
# Get contents of original test file
originalContents = fs.readFileSync(originalTestPath)?.toString()
# Check if there is a matching expected test resut
if not fs.existsSync(expectedTestPath)
throw new Error("No matching expected test result found for '#{testName}' " +
"at '#{expectedTestPath}'.")
# err = fs.writeFileSync(expectedTestPath, originalContents)
# throw err if err
# Get contents of expected test file
expectedContents = fs.readFileSync(expectedTestPath)?.toString()
# expect(expectedContents).not.toEqual originalContents
# expect(atom.grammars.getGrammars()).toEqual []
grammar = atom.grammars.selectGrammar(originalTestPath, originalContents)
# expect(grammar).toEqual("test")
grammarName = grammar.name
# Get the options
allOptions = options.getOptionsForPath(originalTestPath)
beautifyCompleted = false
completionFun = (text) ->
if text instanceof Error
return beautifyCompleted = text # text == Error
expect(typeof text).toEqual "string"
if text isnt expectedContents
console.warn(allOptions, text, expectedContents)
expect(text).toEqual expectedContents
beautifyCompleted = true
runs ->
try
beautifier.beautify originalContents, grammarName, allOptions, completionFun
catch e
beautifyCompleted = e
waitsFor(->
if beautifyCompleted instanceof Error
throw beautifyCompleted
else
return beautifyCompleted
, "Waiting for beautification to complete", 5000)