mirror of
https://github.com/atom/atom.git
synced 2026-01-23 13:58:08 -05:00
Prompt to save when unloading if editor is in conflict
This commit is contained in:
@@ -5324,37 +5324,6 @@ describe "TextEditor", ->
|
||||
[[6, 3], [6, 4]],
|
||||
])
|
||||
|
||||
describe ".shouldPromptToSave()", ->
|
||||
it "returns true when buffer changed", ->
|
||||
jasmine.unspy(editor, 'shouldPromptToSave')
|
||||
expect(editor.shouldPromptToSave()).toBeFalsy()
|
||||
buffer.setText('changed')
|
||||
expect(editor.shouldPromptToSave()).toBeTruthy()
|
||||
|
||||
it "returns false when an edit session's buffer is in use by more than one session", ->
|
||||
jasmine.unspy(editor, 'shouldPromptToSave')
|
||||
buffer.setText('changed')
|
||||
|
||||
editor2 = null
|
||||
waitsForPromise ->
|
||||
atom.workspace.getActivePane().splitRight()
|
||||
atom.workspace.open('sample.js', autoIndent: false).then (o) -> editor2 = o
|
||||
|
||||
runs ->
|
||||
expect(editor.shouldPromptToSave()).toBeFalsy()
|
||||
editor2.destroy()
|
||||
expect(editor.shouldPromptToSave()).toBeTruthy()
|
||||
|
||||
it "returns false when close of a window requested and edit session opened inside project", ->
|
||||
jasmine.unspy(editor, 'shouldPromptToSave')
|
||||
buffer.setText('changed')
|
||||
expect(editor.shouldPromptToSave(windowCloseRequested: true, projectHasPaths: true)).toBeFalsy()
|
||||
|
||||
it "returns true when close of a window requested and edit session opened without project", ->
|
||||
jasmine.unspy(editor, 'shouldPromptToSave')
|
||||
buffer.setText('changed')
|
||||
expect(editor.shouldPromptToSave(windowCloseRequested: true, projectHasPaths: false)).toBeTruthy()
|
||||
|
||||
describe "when the editor contains surrogate pair characters", ->
|
||||
it "correctly backspaces over them", ->
|
||||
editor.setText('\uD835\uDF97\uD835\uDF97\uD835\uDF97')
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
const fs = require('fs')
|
||||
const temp = require('temp').track()
|
||||
const {Point, Range} = require('text-buffer')
|
||||
const {it, fit, ffit, fffit, beforeEach, afterEach} = require('./async-spec-helpers')
|
||||
|
||||
@@ -8,6 +10,54 @@ describe('TextEditor', () => {
|
||||
editor.destroy()
|
||||
})
|
||||
|
||||
describe('.shouldPromptToSave()', () => {
|
||||
beforeEach(async () => {
|
||||
editor = await atom.workspace.open('sample.js')
|
||||
jasmine.unspy(editor, 'shouldPromptToSave')
|
||||
})
|
||||
|
||||
it('returns true when buffer has unsaved changes', () => {
|
||||
expect(editor.shouldPromptToSave()).toBeFalsy()
|
||||
editor.setText('changed')
|
||||
expect(editor.shouldPromptToSave()).toBeTruthy()
|
||||
})
|
||||
|
||||
it("returns false when an editor's buffer is in use by more than one buffer", async () => {
|
||||
editor.setText('changed')
|
||||
|
||||
atom.workspace.getActivePane().splitRight()
|
||||
const editor2 = await atom.workspace.open('sample.js', {autoIndent: false})
|
||||
expect(editor.shouldPromptToSave()).toBeFalsy()
|
||||
|
||||
editor2.destroy()
|
||||
expect(editor.shouldPromptToSave()).toBeTruthy()
|
||||
})
|
||||
|
||||
it('returns true when the window is closing if the file has changed on disk', async () => {
|
||||
jasmine.useRealClock()
|
||||
|
||||
editor.setText('initial stuff')
|
||||
await editor.saveAs(temp.openSync('test-file').path)
|
||||
|
||||
editor.setText('other stuff')
|
||||
fs.writeFileSync(editor.getPath(), 'new stuff')
|
||||
expect(editor.shouldPromptToSave({windowCloseRequested: true, projectHasPaths: true})).toBeFalsy()
|
||||
|
||||
await new Promise(resolve => editor.onDidConflict(resolve))
|
||||
expect(editor.shouldPromptToSave({windowCloseRequested: true, projectHasPaths: true})).toBeTruthy()
|
||||
})
|
||||
|
||||
it('returns false when the window is closing and the project has one or more directory paths', () => {
|
||||
editor.setText('changed')
|
||||
expect(editor.shouldPromptToSave({windowCloseRequested: true, projectHasPaths: true})).toBeFalsy()
|
||||
})
|
||||
|
||||
it('returns false when the window is closing and the project has no directory paths', () => {
|
||||
editor.setText('changed')
|
||||
expect(editor.shouldPromptToSave({windowCloseRequested: true, projectHasPaths: false})).toBeTruthy()
|
||||
})
|
||||
})
|
||||
|
||||
describe('folding', () => {
|
||||
beforeEach(async () => {
|
||||
await atom.packages.activatePackage('language-javascript')
|
||||
|
||||
@@ -961,7 +961,7 @@ class TextEditor extends Model
|
||||
# this editor.
|
||||
shouldPromptToSave: ({windowCloseRequested, projectHasPaths}={}) ->
|
||||
if windowCloseRequested and projectHasPaths and atom.stateStore.isConnected()
|
||||
false
|
||||
@buffer.isInConflict()
|
||||
else
|
||||
@isModified() and not @buffer.hasMultipleEditors()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user