mirror of
https://github.com/pulsar-edit/pulsar.git
synced 2024-11-10 18:24:09 +03:00
142 lines
6.9 KiB
CoffeeScript
142 lines
6.9 KiB
CoffeeScript
Project = require 'project'
|
|
Buffer = require 'text-buffer'
|
|
EditSession = require 'edit-session'
|
|
|
|
describe "LanguageMode", ->
|
|
[editSession, buffer, languageMode] = []
|
|
|
|
afterEach ->
|
|
editSession.destroy()
|
|
|
|
describe "javascript", ->
|
|
beforeEach ->
|
|
atom.activatePackage('javascript-tmbundle', sync: true)
|
|
editSession = project.open('sample.js', autoIndent: false)
|
|
{buffer, languageMode} = editSession
|
|
|
|
describe ".toggleLineCommentsForBufferRows(start, end)", ->
|
|
it "comments/uncomments lines in the given range", ->
|
|
languageMode.toggleLineCommentsForBufferRows(4, 7)
|
|
expect(buffer.lineForRow(4)).toBe "// while(items.length > 0) {"
|
|
expect(buffer.lineForRow(5)).toBe "// current = items.shift();"
|
|
expect(buffer.lineForRow(6)).toBe "// current < pivot ? left.push(current) : right.push(current);"
|
|
expect(buffer.lineForRow(7)).toBe "// }"
|
|
|
|
languageMode.toggleLineCommentsForBufferRows(4, 5)
|
|
expect(buffer.lineForRow(4)).toBe " while(items.length > 0) {"
|
|
expect(buffer.lineForRow(5)).toBe " current = items.shift();"
|
|
expect(buffer.lineForRow(6)).toBe "// current < pivot ? left.push(current) : right.push(current);"
|
|
expect(buffer.lineForRow(7)).toBe "// }"
|
|
|
|
describe "fold suggestion", ->
|
|
describe ".doesBufferRowStartFold(bufferRow)", ->
|
|
it "returns true only when the buffer row starts a foldable region", ->
|
|
expect(languageMode.doesBufferRowStartFold(0)).toBeTruthy()
|
|
expect(languageMode.doesBufferRowStartFold(1)).toBeTruthy()
|
|
expect(languageMode.doesBufferRowStartFold(2)).toBeFalsy()
|
|
expect(languageMode.doesBufferRowStartFold(3)).toBeFalsy()
|
|
|
|
describe ".rowRangeForFoldAtBufferRow(bufferRow)", ->
|
|
it "returns the start/end rows of the foldable region starting at the given row", ->
|
|
expect(languageMode.rowRangeForFoldAtBufferRow(0)).toEqual [0, 12]
|
|
expect(languageMode.rowRangeForFoldAtBufferRow(1)).toEqual [1, 9]
|
|
expect(languageMode.rowRangeForFoldAtBufferRow(2)).toBeNull()
|
|
expect(languageMode.rowRangeForFoldAtBufferRow(4)).toEqual [4, 7]
|
|
|
|
describe "suggestedIndentForBufferRow", ->
|
|
it "returns the suggested indentation based on auto-indent/outdent rules", ->
|
|
expect(languageMode.suggestedIndentForBufferRow(0)).toBe 0
|
|
expect(languageMode.suggestedIndentForBufferRow(1)).toBe 1
|
|
expect(languageMode.suggestedIndentForBufferRow(2)).toBe 2
|
|
expect(languageMode.suggestedIndentForBufferRow(9)).toBe 1
|
|
|
|
describe "coffeescript", ->
|
|
beforeEach ->
|
|
atom.activatePackage('coffee-script-tmbundle', sync: true)
|
|
editSession = project.open('coffee.coffee', autoIndent: false)
|
|
{buffer, languageMode} = editSession
|
|
|
|
describe ".toggleLineCommentsForBufferRows(start, end)", ->
|
|
it "comments/uncomments lines in the given range", ->
|
|
languageMode.toggleLineCommentsForBufferRows(4, 7)
|
|
expect(buffer.lineForRow(4)).toBe "# pivot = items.shift()"
|
|
expect(buffer.lineForRow(5)).toBe "# left = []"
|
|
expect(buffer.lineForRow(6)).toBe "# right = []"
|
|
expect(buffer.lineForRow(7)).toBe "# "
|
|
|
|
languageMode.toggleLineCommentsForBufferRows(4, 5)
|
|
expect(buffer.lineForRow(4)).toBe " pivot = items.shift()"
|
|
expect(buffer.lineForRow(5)).toBe " left = []"
|
|
expect(buffer.lineForRow(6)).toBe "# right = []"
|
|
expect(buffer.lineForRow(7)).toBe "# "
|
|
|
|
describe "fold suggestion", ->
|
|
describe ".doesBufferRowStartFold(bufferRow)", ->
|
|
it "returns true only when the buffer row starts a foldable region", ->
|
|
expect(languageMode.doesBufferRowStartFold(0)).toBeTruthy()
|
|
expect(languageMode.doesBufferRowStartFold(1)).toBeTruthy()
|
|
expect(languageMode.doesBufferRowStartFold(2)).toBeFalsy()
|
|
expect(languageMode.doesBufferRowStartFold(3)).toBeFalsy()
|
|
expect(languageMode.doesBufferRowStartFold(19)).toBeTruthy()
|
|
|
|
describe ".rowRangeForFoldAtBufferRow(bufferRow)", ->
|
|
it "returns the start/end rows of the foldable region starting at the given row", ->
|
|
expect(languageMode.rowRangeForFoldAtBufferRow(0)).toEqual [0, 20]
|
|
expect(languageMode.rowRangeForFoldAtBufferRow(1)).toEqual [1, 17]
|
|
expect(languageMode.rowRangeForFoldAtBufferRow(2)).toBeNull()
|
|
expect(languageMode.rowRangeForFoldAtBufferRow(19)).toEqual [19, 20]
|
|
|
|
describe "css", ->
|
|
beforeEach ->
|
|
atom.activatePackage('css-tmbundle', sync: true)
|
|
editSession = project.open('css.css', autoIndent: false)
|
|
{buffer, languageMode} = editSession
|
|
|
|
describe ".toggleLineCommentsForBufferRows(start, end)", ->
|
|
it "comments/uncomments lines in the given range", ->
|
|
languageMode.toggleLineCommentsForBufferRows(0, 1)
|
|
expect(buffer.lineForRow(0)).toBe "/*body {"
|
|
expect(buffer.lineForRow(1)).toBe " font-size: 1234px;*/"
|
|
expect(buffer.lineForRow(2)).toBe " width: 110%;"
|
|
expect(buffer.lineForRow(3)).toBe " font-weight: bold !important;"
|
|
|
|
languageMode.toggleLineCommentsForBufferRows(2, 2)
|
|
expect(buffer.lineForRow(0)).toBe "/*body {"
|
|
expect(buffer.lineForRow(1)).toBe " font-size: 1234px;*/"
|
|
expect(buffer.lineForRow(2)).toBe "/* width: 110%;*/"
|
|
expect(buffer.lineForRow(3)).toBe " font-weight: bold !important;"
|
|
|
|
languageMode.toggleLineCommentsForBufferRows(0, 1)
|
|
expect(buffer.lineForRow(0)).toBe "body {"
|
|
expect(buffer.lineForRow(1)).toBe " font-size: 1234px;"
|
|
expect(buffer.lineForRow(2)).toBe "/* width: 110%;*/"
|
|
expect(buffer.lineForRow(3)).toBe " font-weight: bold !important;"
|
|
|
|
it "uncomments lines with leading whitespace", ->
|
|
buffer.change([[2, 0], [2, Infinity]], " /*width: 110%;*/")
|
|
languageMode.toggleLineCommentsForBufferRows(2, 2)
|
|
expect(buffer.lineForRow(2)).toBe " width: 110%;"
|
|
|
|
it "uncomments lines with trailing whitespace", ->
|
|
buffer.change([[2, 0], [2, Infinity]], "/*width: 110%;*/ ")
|
|
languageMode.toggleLineCommentsForBufferRows(2, 2)
|
|
expect(buffer.lineForRow(2)).toBe "width: 110%; "
|
|
|
|
it "uncomments lines with leading and trailing whitespace", ->
|
|
buffer.change([[2, 0], [2, Infinity]], " /*width: 110%;*/ ")
|
|
languageMode.toggleLineCommentsForBufferRows(2, 2)
|
|
expect(buffer.lineForRow(2)).toBe " width: 110%; "
|
|
|
|
describe "less", ->
|
|
beforeEach ->
|
|
atom.activatePackage('less-tmbundle', sync: true)
|
|
atom.activatePackage('css-tmbundle', sync: true)
|
|
editSession = project.open('sample.less', autoIndent: false)
|
|
{buffer, languageMode} = editSession
|
|
|
|
describe "when commenting lines", ->
|
|
it "only uses the `commentEnd` pattern if it comes from the same grammar as the `commentStart`", ->
|
|
languageMode.toggleLineCommentsForBufferRows(0, 0)
|
|
expect(buffer.lineForRow(0)).toBe "// @color: #4D926F;"
|
|
|