scss-comment-parser
Advanced tools
Comparing version 0.4.0-pre4 to 0.4.0-pre5
@@ -175,4 +175,5 @@ var CDocParser = require('cdocparser'); | ||
Parser.prototype.contextParser = scssContextParser; | ||
Parser.prototype.extractCode = extractCode; | ||
module.exports = Parser; |
{ | ||
"name": "scss-comment-parser", | ||
"version": "0.4.0-pre4", | ||
"version": "0.4.0-pre5", | ||
"description": "Parses scss comments to build documentation", | ||
@@ -19,3 +19,3 @@ "main": "index.js", | ||
"dependencies": { | ||
"cdocparser": "0.3.0-pre2" | ||
"cdocparser": "0.3.0-pre3" | ||
}, | ||
@@ -22,0 +22,0 @@ "devDependencies": { |
224
test/test.js
@@ -5,119 +5,163 @@ var fs = require('fs'); | ||
describe('ScssCommentParser', function () { | ||
var scss = fs.readFileSync(__dirname + '/fixtures/demo.scss', 'utf-8'); | ||
var getContent = function(file){ | ||
return fs.readFileSync(__dirname + '/fixtures/'+file, 'utf-8'); | ||
}; | ||
// Test Annotations | ||
var annotations = { | ||
_: { | ||
alias: { | ||
'aliasTest': 'annotationTest' | ||
} | ||
}, | ||
annotationTest: { | ||
parse: function (commentLine) { | ||
return 'Working'; | ||
} | ||
}, | ||
multiline: { | ||
parse: function (commentLine) { | ||
return commentLine; | ||
} | ||
} | ||
}; | ||
var parser = new ScssCommentParser(annotations); | ||
describe('ScssCommentParser', function () { | ||
describe('#contextParser', function () { | ||
var parser; | ||
describe('#parse', function () { | ||
it('should group comments by context type', function () { | ||
var result = parser.parse(scss); | ||
assert.equal(result.mixin.length, 1); | ||
assert.equal(result['function'].length, 3); | ||
assert.equal(result.placeholder.length, 1); | ||
assert.equal(result.variable.length, 4); | ||
assert.equal(result.unknown.length, 2); | ||
beforeEach(function(){ | ||
parser = new ScssCommentParser({}); | ||
}); | ||
it('should contain the whole code in `context.code` function and mixin', function () { | ||
var result = parser.parse(scss); | ||
assert.equal(result['function'][0].context.code, '\n $some : "code";\n'); | ||
assert.equal(result.placeholder[0].context.code, '\n $some : "code";\n'); | ||
assert.equal(result.mixin[0].context.code, '\n $some : "code}}";\n /* } */\n // }\n'); | ||
}); | ||
describe('placeholder', function(){ | ||
var expected = { | ||
type: 'placeholder', | ||
name: 'testPlaceholder', | ||
code: '\n $some : "code";\n' | ||
}; | ||
it('should allow dash in function/mixin name', function () { | ||
var result = parser.parse(scss); | ||
assert.equal(result['function'][1].context.name, 'test-dash'); | ||
}); | ||
it('should detect it', function(){ | ||
var context = parser.contextParser(getContent('placeholder.test.scss')); | ||
assert.deepEqual(context, expected); | ||
}); | ||
it('should group multiple lines after a annotation', function () { | ||
var result = parser.parse(scss); | ||
assert.equal(result['function'][0].multiline[0], '\n @test\n This is a\n multiline\n annotation'); | ||
it('should detect it with linebreaks', function(){ | ||
var context = parser.contextParser(getContent('placeholderLinebreaks.test.scss')); | ||
assert.deepEqual(context, expected); | ||
}); | ||
}); | ||
it('should join lines without annotation into description', function () { | ||
var result = parser.parse(scss); | ||
assert.equal(result.mixin.length, 1); | ||
assert.equal(result.mixin[0].description, 'Test a mixin\n'); | ||
}); | ||
describe('mixin', function(){ | ||
var expected = { | ||
type: 'mixin', | ||
name: 'name', | ||
code: '\n $some : "code";\n' | ||
}; | ||
it('should resolve a alias to the real name', function () { | ||
var result = parser.parse(scss); | ||
assert.equal(result.mixin.length, 1); | ||
assert.equal(result.mixin[0].annotationTest[0], 'Working' ); | ||
}); | ||
it('should detect it', function(){ | ||
var context = parser.contextParser(getContent('mixin.test.scss')); | ||
assert.deepEqual(context, expected); | ||
}); | ||
it('should attach correct context', function () { | ||
var result = parser.parse(scss); | ||
assert.equal(result.mixin[0].context.name, 'testMixin'); | ||
assert.equal(result['function'][0].context.name, 'testFunction'); | ||
assert.equal(result.placeholder[0].context.name , 'testPlaceholder'); | ||
assert.equal(result.variable[0].context.name, 'testVariable'); | ||
it('should detect it with linebreaks', function(){ | ||
var context = parser.contextParser(getContent('mixinLinebreaks.test.scss')); | ||
assert.deepEqual(context, expected); | ||
}); | ||
}); | ||
it('should attach the value to a variable', function () { | ||
var result = parser.parse(scss); | ||
assert.equal(result.variable[0].context.value, '"value"'); | ||
describe('function', function(){ | ||
var expected = { | ||
type: 'function', | ||
name: 'name', | ||
code: '\n $some : "code";\n' | ||
}; | ||
it('should detect it', function(){ | ||
var context = parser.contextParser(getContent('function.test.scss')); | ||
assert.deepEqual(context, expected); | ||
}); | ||
it('should detect it with linebreaks', function(){ | ||
var context = parser.contextParser(getContent('functionLinebreaks.test.scss')); | ||
assert.deepEqual(context, expected); | ||
}); | ||
}); | ||
it('should exclude the global flag', function () { | ||
var result = parser.parse(scss); | ||
assert.equal(result.variable[1].context.value, '"value"'); | ||
describe('variable', function(){ | ||
var expected = { | ||
type: 'variable', | ||
name: 'name', | ||
value: '\'value\'', | ||
scope: 'private' | ||
}; | ||
it('should detect it', function(){ | ||
var context = parser.contextParser(getContent('variable.test.scss')); | ||
assert.deepEqual(context, expected); | ||
}); | ||
it('should detect it with linebreaks', function(){ | ||
var context = parser.contextParser(getContent('variableLinebreaks.test.scss')); | ||
assert.deepEqual(context, expected); | ||
}); | ||
it('should detect it as global', function(){ | ||
var context = parser.contextParser(getContent('variableGlobal.test.scss')); | ||
assert.deepEqual(context, { | ||
type: 'variable', | ||
name: 'name', | ||
value: '\'value\'', | ||
scope: 'global' | ||
}); | ||
}); | ||
it('should detect it with multiline Value', function(){ | ||
var context = parser.contextParser(getContent('variableMultilineValue.test.scss')); | ||
assert.deepEqual(context, { | ||
type: 'variable', | ||
name: 'map', | ||
value: '(\n \"a\": \"b\",\n \"c\": \"\"\n)', | ||
scope: 'private' | ||
}); | ||
}); | ||
}); | ||
it('should allow dashes in variables', function () { | ||
var result = parser.parse(scss); | ||
assert.equal(result.variable[2].context.value, '"value"'); | ||
describe('unknown', function(){ | ||
it('should assing unknown', function(){ | ||
var context = parser.contextParser(getContent('unknown.test.scss')); | ||
assert.deepEqual(context, { | ||
type : 'unknown' | ||
}); | ||
}); | ||
}); | ||
}); | ||
it('should parse pretty printed vars', function () { | ||
var result = parser.parse(scss); | ||
assert.equal(result.variable[3].context.name, 'map'); | ||
assert.equal(result.variable[3].context.value, '(\n \"a\": \"b\",\n \"c\": \"\"\n)'); | ||
describe('#parser', function(){ | ||
var parser; | ||
beforeEach(function(){ | ||
parser = new ScssCommentParser({}); | ||
}); | ||
it('should parse multiple multiline annotations', function () { | ||
var result = parser.parse(scss); | ||
assert.equal(result['function'][2].context.name, 'testMultiline'); | ||
assert.deepEqual(result['function'][2].multiline, [ | ||
'\nThis is a\nmultiline\nannotation\n', | ||
'\nThis is a\nmultiline\nannotation' | ||
]); | ||
describe('group by type', function(){ | ||
it('should work with block comments', function(){ | ||
var result = parser.parse(getContent('groupByType.test.scss')); | ||
assert.equal(result.mixin.length, 1); | ||
assert.equal(result['function'].length, 1); | ||
assert.equal(result.placeholder.length, 1); | ||
}); | ||
it('should work with mixed comments', function(){ | ||
var result = parser.parse(getContent('groupByTypeMixedComments.test.scss')); | ||
assert.equal(result.mixin.length, 1); | ||
assert.equal(result['function'].length, 1); | ||
assert.equal(result.placeholder.length, 1); | ||
}); | ||
}); | ||
it('should include the scope of a variable', function () { | ||
var result = parser.parse(scss); | ||
assert.equal(result.variable[0].context.scope , 'private'); | ||
assert.equal(result.variable[1].context.scope , 'global'); | ||
it('should ignore lines that start with "---"', function(){ | ||
var result = parser.parse(getContent('ignoreLine.test.scss')); | ||
assert.equal(result['function'].length, 1); | ||
assert.deepEqual(result['function'][0], { | ||
description : 'Test\nTest\n', | ||
context : { | ||
type : 'function', | ||
name : 'test', | ||
code : '' | ||
} | ||
}); | ||
}); | ||
it('should warn if annotation was not found', function (done) { | ||
parser.commentParser.on('warning', function(err){ | ||
assert.equal(err + '', 'Error: Parser for annotation `unkownAnnotation` not found.'); | ||
done(); | ||
}); | ||
var result = parser.parse('/**\n *@unkownAnnotation */\n.obj{\n\n}'); | ||
}); | ||
}); | ||
describe('#extractCode', function () { | ||
var parser; | ||
beforeEach(function(){ | ||
parser = new ScssCommentParser({}); | ||
}); | ||
it('should extract a code block', function () { | ||
@@ -132,2 +176,2 @@ assert.equal(parser.extractCode('{{ test }}'), '{ test }'); | ||
}); | ||
}); | ||
}); |
12609
20
300
+ Addedcdocparser@0.3.0-pre3(transitive)
- Removedcdocparser@0.3.0-pre2(transitive)
Updatedcdocparser@0.3.0-pre3