mirror of
https://github.com/pulsar-edit/pulsar.git
synced 2024-10-05 15:07:49 +03:00
Fix memory access error on autocomplete-html
specs
This commit is contained in:
parent
206a15a7b1
commit
413eeeaa5b
@ -1,7 +1,8 @@
|
||||
module.exports = {
|
||||
env: { jasmine: true },
|
||||
globals: {
|
||||
"waitsForPromise": true
|
||||
"waitsForPromise": true,
|
||||
"advanceClock": true
|
||||
},
|
||||
rules: {
|
||||
"node/no-unpublished-require": "off",
|
||||
|
@ -32,19 +32,21 @@ describe('HTML autocompletions', () => {
|
||||
return -1;
|
||||
}
|
||||
|
||||
beforeEach(() => {
|
||||
waitsForPromise(() => atom.packages.activatePackage('autocomplete-html'))
|
||||
waitsForPromise(() => atom.packages.activatePackage('language-html'))
|
||||
waitsForPromise(() => atom.workspace.open('test.html'))
|
||||
waitsForPromise(() => {
|
||||
let editor = atom.workspace.getActiveTextEditor()
|
||||
let languageMode = editor.getBuffer().getLanguageMode()
|
||||
return languageMode.ready
|
||||
})
|
||||
beforeEach(async () => {
|
||||
await atom.packages.activatePackage('autocomplete-html')
|
||||
await atom.packages.activatePackage('language-html')
|
||||
await atom.workspace.open('test.html')
|
||||
editor = atom.workspace.getActiveTextEditor()
|
||||
languageMode = editor.getBuffer().getLanguageMode()
|
||||
languageMode.useAsyncParsing = false
|
||||
languageMode.useAsyncIndent = false
|
||||
await languageMode.ready
|
||||
|
||||
runs(() => provider = atom.packages.getActivePackage('autocomplete-html').mainModule.getProvider())
|
||||
runs(() => editor = atom.workspace.getActiveTextEditor())
|
||||
runs(() => languageMode = editor.getBuffer().getLanguageMode())
|
||||
provider = atom.packages.getActivePackage('autocomplete-html').mainModule.getProvider()
|
||||
})
|
||||
|
||||
afterEach(async () => {
|
||||
await languageMode.atTransactionEnd()
|
||||
})
|
||||
|
||||
it('returns no completions when not at the start of a tag', async () => {
|
||||
@ -591,13 +593,8 @@ describe('HTML autocompletions', () => {
|
||||
return languageMode.atTransactionEnd()
|
||||
})
|
||||
|
||||
waitsForPromise(() => {
|
||||
return atom.packages.activatePackage('language-javascript')
|
||||
})
|
||||
|
||||
runs(() => {
|
||||
editor.setCursorBufferPosition([0, editor.getText().indexOf('""') + 1])
|
||||
expect(() => getCompletions()).not.toThrow()
|
||||
})
|
||||
await atom.packages.activatePackage('language-javascript')
|
||||
editor.setCursorBufferPosition([0, editor.getText().indexOf('""') + 1])
|
||||
expect(() => getCompletions()).not.toThrow()
|
||||
})
|
||||
})
|
||||
|
10
packages/bookmarks/spec/.eslintrc.js
Normal file
10
packages/bookmarks/spec/.eslintrc.js
Normal file
@ -0,0 +1,10 @@
|
||||
module.exports = {
|
||||
env: { jasmine: true },
|
||||
rules: {
|
||||
"semi": ["error", "never"],
|
||||
"node/no-unpublished-require": "off",
|
||||
"node/no-extraneous-require": "off",
|
||||
"no-unused-vars": "off",
|
||||
"no-empty": "off"
|
||||
}
|
||||
}
|
@ -16,7 +16,7 @@ async function languageModeReady (editor) {
|
||||
}
|
||||
}
|
||||
|
||||
fdescribe('TextEditor', () => {
|
||||
describe('TextEditor', () => {
|
||||
let buffer, editor, lineLengths, languageMode;
|
||||
|
||||
beforeEach(async () => {
|
||||
|
@ -4043,20 +4043,38 @@ class LanguageLayer {
|
||||
class NodeRangeSet {
|
||||
constructor(previous, nodes, injectionPoint) {
|
||||
this.previous = previous;
|
||||
this.nodes = nodes;
|
||||
this.newlinesBetween = injectionPoint.newlinesBetween;
|
||||
this.includeAdjacentWhitespace = injectionPoint.includeAdjacentWhitespace;
|
||||
this.includeChildren = injectionPoint.includeChildren;
|
||||
|
||||
// We shouldn't retain references to nodes here because the tree might get
|
||||
// disposed of layer. Let's compile the information we need now while we're
|
||||
// sure the tree is fresh.
|
||||
this.nodeSpecs = [];
|
||||
for (let node of nodes) {
|
||||
this.nodeSpecs.push(this.getNodeSpec(node, true));
|
||||
}
|
||||
}
|
||||
|
||||
getNodeSpec (node, getChildren) {
|
||||
let { startIndex, endIndex, startPosition, endPosition, id } = node;
|
||||
let result = { startIndex, endIndex, startPosition, endPosition, id };
|
||||
if (node.children && getChildren) {
|
||||
result.children = [];
|
||||
for (let child of node.children) {
|
||||
result.children.push(this.getNodeSpec(child, false));
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
getRanges(buffer) {
|
||||
const previousRanges = this.previous && this.previous.getRanges(buffer);
|
||||
let result = [];
|
||||
|
||||
for (const node of this.nodes) {
|
||||
for (const node of this.nodeSpecs) {
|
||||
let position = node.startPosition, index = node.startIndex;
|
||||
|
||||
if (!this.includeChildren) {
|
||||
if (node.children && !this.includeChildren) {
|
||||
// If `includeChildren` is `false`, we're effectively collecting all
|
||||
// the disjoint text nodes that are direct descendants of this node.
|
||||
for (const child of node.children) {
|
||||
|
Loading…
Reference in New Issue
Block a user