This commit is contained in:
Corey Johnson & Nathan Sobo
2012-10-26 12:27:28 -06:00
9 changed files with 7 additions and 7 deletions

View File

@@ -1 +1 @@
module.exports = require 'outline-view/outline-view'
module.exports = require 'outline-view/src/outline-view'

View File

@@ -0,0 +1,83 @@
RootView = require 'root-view'
OutlineView = require 'outline-view'
TagGenerator = require 'outline-view/src/tag-generator'
describe "OutlineView", ->
[rootView, outlineView] = []
beforeEach ->
rootView = new RootView(require.resolve('fixtures'))
rootView.activateExtension(OutlineView)
outlineView = OutlineView.instance
rootView.attachToDom()
afterEach ->
rootView.deactivate()
it "displays all JavaScript functions with line numbers", ->
tags = []
waitsForPromise ->
tags = []
path = require.resolve('fixtures/sample.js')
callback = (tag) ->
tags.push tag
generator = new TagGenerator(path, callback)
generator.generate()
runs ->
rootView.open('sample.js')
expect(rootView.getActiveEditor().getCursorBufferPosition()).toEqual [0,0]
expect(rootView.find('.outline-view')).not.toExist()
outlineView.setArray(tags)
outlineView.attach()
expect(rootView.find('.outline-view')).toExist()
expect(outlineView.list.children('li').length).toBe 2
expect(outlineView.list.children('li:first').find('.function-name')).toHaveText 'quicksort'
expect(outlineView.list.children('li:first').find('.function-line')).toHaveText 'Line 1'
expect(outlineView.list.children('li:last').find('.function-name')).toHaveText 'quicksort.sort'
expect(outlineView.list.children('li:last').find('.function-line')).toHaveText 'Line 2'
it "moves the cursor to the selected function", ->
tags = []
waitsForPromise ->
tags = []
path = require.resolve('fixtures/sample.js')
callback = (tag) ->
tags.push tag
generator = new TagGenerator(path, callback)
generator.generate()
runs ->
rootView.open('sample.js')
expect(rootView.getActiveEditor().getCursorBufferPosition()).toEqual [0,0]
expect(rootView.find('.outline-view')).not.toExist()
outlineView.setArray(tags)
outlineView.attach()
expect(rootView.find('.outline-view')).toExist()
outlineView.confirmed(tags[1])
expect(rootView.getActiveEditor().getCursorBufferPosition()).toEqual [1,0]
describe "TagGenerator", ->
it "generates tags for all JavaScript functions", ->
waitsForPromise ->
tags = []
path = require.resolve('fixtures/sample.js')
callback = (tag) ->
tags.push tag
generator = new TagGenerator(path, callback)
generator.generate().done ->
expect(tags.length).toBe 2
expect(tags[0].name).toBe "quicksort"
expect(tags[0].position.row).toBe 0
expect(tags[1].name).toBe "quicksort.sort"
expect(tags[1].position.row).toBe 1
it "generates no tags for text file", ->
waitsForPromise ->
tags = []
path = require.resolve('fixtures/sample.txt')
callback = (tag) ->
tags.push tag
generator = new TagGenerator(path, callback)
generator.generate().done ->
expect(tags.length).toBe 0

View File

@@ -1,14 +1,14 @@
{View, $$} = require 'space-pen'
SelectList = require 'select-list'
Editor = require 'editor'
TagGenerator = require 'outline-view/tag-generator'
TagGenerator = require 'outline-view/src/tag-generator'
module.exports =
class OutlineView extends SelectList
@activate: (rootView) ->
requireStylesheet 'select-list.css'
requireStylesheet 'outline-view/outline-view.css'
requireStylesheet 'outline-view/src/outline-view.css'
@instance = new OutlineView(rootView)
rootView.command 'outline-view:toggle', => @instance.toggle()

View File

@@ -43,5 +43,5 @@ class TagGenerator
for line in lines
tag = @parseTagLine(line)
@callback(tag) if tag
command = "ctags --fields=+KS -nf - #{@path}"
command = "#{require.resolve('ctags')} --fields=+KS -nf - #{@path}"
ChildProcess.exec(command, options)