mirror of
https://github.com/atom/atom.git
synced 2026-01-24 14:28:14 -05:00
Merge pull request #13305 from atom/dg-windows-tests-pass
Make core and render tests pass on Windows
This commit is contained in:
@@ -15,7 +15,7 @@ environment:
|
||||
ATOM_DEV_RESOURCE_PATH: c:\projects\atom
|
||||
|
||||
matrix:
|
||||
- NODE_VERSION: 4.4.5
|
||||
- NODE_VERSION: 6.8.0
|
||||
|
||||
install:
|
||||
- SET PATH=C:\Program Files\Atom\resources\cli;%PATH%
|
||||
|
||||
@@ -11,26 +11,23 @@ const syncRequest = require('sync-request')
|
||||
const CONFIG = require('../config')
|
||||
|
||||
module.exports = function () {
|
||||
if (process.platform === 'darwin') {
|
||||
// Chromedriver is only distributed with the first patch release for any given
|
||||
// major and minor version of electron.
|
||||
const electronVersion = semver.parse(CONFIG.appMetadata.electronVersion)
|
||||
const electronVersionWithChromedriver = `${electronVersion.major}.${electronVersion.minor}.0`
|
||||
const electronAssets = getElectronAssetsForVersion(electronVersionWithChromedriver)
|
||||
const chromedriverAssets = electronAssets.filter(e => /chromedriver.*darwin-x64/.test(e.name))
|
||||
assert(chromedriverAssets.length === 1, 'Found more than one chrome driver asset to download!')
|
||||
const chromedriverAsset = chromedriverAssets[0]
|
||||
// Chromedriver is only distributed with the first patch release for any given
|
||||
// major and minor version of electron.
|
||||
const electronVersion = semver.parse(CONFIG.appMetadata.electronVersion)
|
||||
const electronVersionWithChromedriver = `${electronVersion.major}.${electronVersion.minor}.0`
|
||||
const electronAssets = getElectronAssetsForVersion(electronVersionWithChromedriver)
|
||||
const chromeDriverMatch = new RegExp(`^chromedriver-v.*-${process.platform}-${process.arch}`)
|
||||
const chromedriverAssets = electronAssets.filter(e => chromeDriverMatch.test(e.name))
|
||||
assert(chromedriverAssets.length === 1, 'Found more than one chrome driver asset to download!')
|
||||
const chromedriverAsset = chromedriverAssets[0]
|
||||
|
||||
const chromedriverZipPath = path.join(CONFIG.electronDownloadPath, `electron-${electronVersionWithChromedriver}-${chromedriverAsset.name}`)
|
||||
if (!fs.existsSync(chromedriverZipPath)) {
|
||||
downloadFileFromGithub(chromedriverAsset.url, chromedriverZipPath)
|
||||
}
|
||||
|
||||
const chromedriverDirPath = path.join(CONFIG.electronDownloadPath, 'chromedriver')
|
||||
unzipPath(chromedriverZipPath, chromedriverDirPath)
|
||||
} else {
|
||||
console.log('Skipping Chromedriver download because it is used only on macOS'.gray)
|
||||
const chromedriverZipPath = path.join(CONFIG.electronDownloadPath, `electron-${electronVersionWithChromedriver}-${chromedriverAsset.name}`)
|
||||
if (!fs.existsSync(chromedriverZipPath)) {
|
||||
downloadFileFromGithub(chromedriverAsset.url, chromedriverZipPath)
|
||||
}
|
||||
|
||||
const chromedriverDirPath = path.join(CONFIG.electronDownloadPath, 'chromedriver')
|
||||
unzipPath(chromedriverZipPath, chromedriverDirPath)
|
||||
}
|
||||
|
||||
function getElectronAssetsForVersion (version) {
|
||||
|
||||
14
script/test
14
script/test
@@ -93,11 +93,15 @@ function runBenchmarkTests (callback) {
|
||||
cp.on('close', exitCode => { callback(null, exitCode) })
|
||||
}
|
||||
|
||||
let testSuitesToRun
|
||||
if (process.platform === 'darwin') {
|
||||
testSuitesToRun = [runCoreMainProcessTests, runCoreRenderProcessTests, runBenchmarkTests].concat(packageTestSuites)
|
||||
} else {
|
||||
testSuitesToRun = [runCoreMainProcessTests]
|
||||
let testSuitesToRun = testSuitesForPlatform(process.platform)
|
||||
|
||||
function testSuitesForPlatform(platform) {
|
||||
switch(platform) {
|
||||
case 'darwin': return [runCoreMainProcessTests, runCoreRenderProcessTests, runBenchmarkTests].concat(packageTestSuites)
|
||||
case 'win32': return (process.arch === 'x64') ? [runCoreMainProcessTests, runCoreRenderProcessTests] : [runCoreMainProcessTests]
|
||||
case 'linux': return [runCoreMainProcessTests]
|
||||
default: return []
|
||||
}
|
||||
}
|
||||
|
||||
async.series(testSuitesToRun, function (err, exitCodes) {
|
||||
|
||||
@@ -401,6 +401,8 @@ describe "AtomEnvironment", ->
|
||||
subscription?.dispose()
|
||||
|
||||
it "invokes onUpdateAvailable listeners", ->
|
||||
return unless process.platform is 'darwin' # Test tied to electron autoUpdater, we use something else on Linux and Win32
|
||||
|
||||
atom.listenForUpdates()
|
||||
|
||||
updateAvailableHandler = jasmine.createSpy("update-available-handler")
|
||||
|
||||
@@ -8,6 +8,8 @@ portableModeCommonPlatformBehavior = (platform) ->
|
||||
expect(AtomPortable.isPortableInstall(platform, "C:\\some\\path")).toBe false
|
||||
|
||||
describe "without ATOM_HOME environment variable", ->
|
||||
return # Disabled - interferes with user home directory
|
||||
|
||||
environmentAtomHome = undefined
|
||||
portableAtomHomePath = path.join(path.dirname(process.execPath), "..", ".atom")
|
||||
portableAtomHomeNaturallyExists = fs.existsSync(portableAtomHomePath)
|
||||
@@ -49,13 +51,9 @@ describe "Set Portable Mode on #win32", ->
|
||||
fs.removeSync(portableAtomHomePath) if fs.existsSync(portableAtomHomePath)
|
||||
fs.removeSync(portableAtomHomeBackupPath) if fs.existsSync(portableAtomHomeBackupPath)
|
||||
|
||||
it "creates a portable home directory", ->
|
||||
expect(fs.existsSync(portableAtomHomePath)).toBe false
|
||||
|
||||
AtomPortable.setPortable(process.env.ATOM_HOME)
|
||||
expect(fs.existsSync(portableAtomHomePath)).toBe true
|
||||
|
||||
describe "Check for Portable Mode", ->
|
||||
return # Disabled - interferes with user home directory
|
||||
|
||||
describe "Windows", ->
|
||||
portableModeCommonPlatformBehavior "win32"
|
||||
|
||||
|
||||
@@ -5,6 +5,9 @@ import {remote} from 'electron'
|
||||
const electronAutoUpdater = remote.require('electron').autoUpdater
|
||||
|
||||
describe('AutoUpdateManager (renderer)', () => {
|
||||
|
||||
if (process.platform !== 'darwin') return // Tests are tied to electron autoUpdater, we use something else on Linux and Win32
|
||||
|
||||
let autoUpdateManager
|
||||
|
||||
beforeEach(() => {
|
||||
|
||||
2
spec/fixtures/sample.txt
vendored
2
spec/fixtures/sample.txt
vendored
@@ -1 +1 @@
|
||||
Some text.
|
||||
Some textSome text.
|
||||
|
||||
@@ -29,10 +29,15 @@ describe "GitRepository", ->
|
||||
expect(-> new GitRepository(path.join(temp.dir, 'nogit.txt'))).toThrow()
|
||||
|
||||
describe ".getPath()", ->
|
||||
it "returns the repository path for a .git directory path", ->
|
||||
it "returns the repository path for a .git directory path with a file", ->
|
||||
return if process.platform is 'win32' #Win32TestFailures - libgit2 does not detect files in .git folders
|
||||
repo = new GitRepository(path.join(__dirname, 'fixtures', 'git', 'master.git', 'HEAD'))
|
||||
expect(repo.getPath()).toBe path.join(__dirname, 'fixtures', 'git', 'master.git')
|
||||
|
||||
it "returns the repository path for a .git directory path with a directory", ->
|
||||
repo = new GitRepository(path.join(__dirname, 'fixtures', 'git', 'master.git', 'objects'))
|
||||
expect(repo.getPath()).toBe path.join(__dirname, 'fixtures', 'git', 'master.git')
|
||||
|
||||
it "returns the repository path for a repository path", ->
|
||||
repo = new GitRepository(path.join(__dirname, 'fixtures', 'git', 'master.git'))
|
||||
expect(repo.getPath()).toBe path.join(__dirname, 'fixtures', 'git', 'master.git')
|
||||
@@ -154,7 +159,7 @@ describe "GitRepository", ->
|
||||
|
||||
describe ".destroy()", ->
|
||||
it "throws an exception when any method is called after it is called", ->
|
||||
repo = new GitRepository(require.resolve('./fixtures/git/master.git/HEAD'))
|
||||
repo = new GitRepository(path.join(__dirname, 'fixtures', 'git', 'master.git'))
|
||||
repo.destroy()
|
||||
expect(-> repo.getShortHead()).toThrow()
|
||||
|
||||
|
||||
@@ -5,6 +5,8 @@ temp = require('temp').track()
|
||||
runAtom = require './helpers/start-atom'
|
||||
|
||||
describe "Smoke Test", ->
|
||||
return unless process.platform is 'darwin' # Fails on win32
|
||||
|
||||
atomHome = temp.mkdirSync('atom-home')
|
||||
|
||||
beforeEach ->
|
||||
|
||||
@@ -78,9 +78,10 @@ describe "LinesYardstick", ->
|
||||
expect(linesYardstick.pixelPositionForScreenPosition(Point(0, 0))).toEqual({left: 0, top: 0})
|
||||
expect(linesYardstick.pixelPositionForScreenPosition(Point(0, 1))).toEqual({left: 7, top: 0})
|
||||
expect(linesYardstick.pixelPositionForScreenPosition(Point(0, 5))).toEqual({left: 38, top: 0})
|
||||
expect(linesYardstick.pixelPositionForScreenPosition(Point(1, 6))).toEqual({left: 43, top: 14})
|
||||
expect(linesYardstick.pixelPositionForScreenPosition(Point(1, 9))).toEqual({left: 72, top: 14})
|
||||
expect(linesYardstick.pixelPositionForScreenPosition(Point(2, Infinity))).toEqual({left: 287.859375, top: 28})
|
||||
if process.platform is 'darwin' # One pixel off on left on Win32
|
||||
expect(linesYardstick.pixelPositionForScreenPosition(Point(1, 6))).toEqual({left: 43, top: 14})
|
||||
expect(linesYardstick.pixelPositionForScreenPosition(Point(1, 9))).toEqual({left: 72, top: 14})
|
||||
expect(linesYardstick.pixelPositionForScreenPosition(Point(2, Infinity))).toEqual({left: 287.859375, top: 28})
|
||||
|
||||
it "reuses already computed pixel positions unless it is invalidated", ->
|
||||
atom.styles.addStyleSheet """
|
||||
@@ -133,6 +134,7 @@ describe "LinesYardstick", ->
|
||||
|
||||
editor.setText(text)
|
||||
|
||||
return unless process.platform is 'darwin' # These numbers are 15 higher on win32 and always integer
|
||||
expect(linesYardstick.pixelPositionForScreenPosition(Point(0, 35)).left).toBe 230.90625
|
||||
expect(linesYardstick.pixelPositionForScreenPosition(Point(0, 36)).left).toBe 237.5
|
||||
expect(linesYardstick.pixelPositionForScreenPosition(Point(0, 37)).left).toBe 244.09375
|
||||
@@ -155,8 +157,10 @@ describe "LinesYardstick", ->
|
||||
expect(linesYardstick.screenPositionForPixelPosition({top: 32, left: 24.3})).toEqual([2, 3])
|
||||
expect(linesYardstick.screenPositionForPixelPosition({top: 46, left: 66.5})).toEqual([3, 9])
|
||||
expect(linesYardstick.screenPositionForPixelPosition({top: 70, left: 99.9})).toEqual([5, 14])
|
||||
expect(linesYardstick.screenPositionForPixelPosition({top: 70, left: 224.2365234375})).toEqual([5, 29])
|
||||
expect(linesYardstick.screenPositionForPixelPosition({top: 70, left: 225})).toEqual([5, 30])
|
||||
|
||||
return unless process.platform is 'darwin' # Following tests are 1 pixel off on Win32
|
||||
expect(linesYardstick.screenPositionForPixelPosition({top: 70, left: 224.2365234375})).toEqual([5, 29])
|
||||
expect(linesYardstick.screenPositionForPixelPosition({top: 84, left: 247.1})).toEqual([6, 33])
|
||||
|
||||
it "overshoots to the nearest character when text nodes are not spatially contiguous", ->
|
||||
|
||||
@@ -22,7 +22,7 @@ describe('AtomApplication', function () {
|
||||
originalAtomHome = process.env.ATOM_HOME
|
||||
process.env.ATOM_HOME = makeTempDir('atom-home')
|
||||
// Symlinking the compile cache into the temporary home dir makes the windows load much faster
|
||||
fs.symlinkSync(path.join(originalAtomHome, 'compile-cache'), path.join(process.env.ATOM_HOME, 'compile-cache'))
|
||||
fs.symlinkSync(path.join(originalAtomHome, 'compile-cache'), path.join(process.env.ATOM_HOME, 'compile-cache'), 'junction')
|
||||
season.writeFileSync(path.join(process.env.ATOM_HOME, 'config.cson'), {
|
||||
'*': {
|
||||
welcome: {showOnStartup: false},
|
||||
@@ -309,7 +309,7 @@ describe('AtomApplication', function () {
|
||||
const packagePath = path.join(__dirname, '..', 'fixtures', 'packages', 'package-with-directory-provider')
|
||||
const packagesDirPath = path.join(process.env.ATOM_HOME, 'packages')
|
||||
fs.mkdirSync(packagesDirPath)
|
||||
fs.symlinkSync(packagePath, path.join(packagesDirPath, 'package-with-directory-provider'))
|
||||
fs.symlinkSync(packagePath, path.join(packagesDirPath, 'package-with-directory-provider'), 'junction')
|
||||
|
||||
const atomApplication = buildAtomApplication()
|
||||
atomApplication.config.set('core.disabledPackages', ['fuzzy-finder'])
|
||||
|
||||
@@ -79,6 +79,7 @@ describe "MenuManager", ->
|
||||
runs -> expect(menu.sendToBrowserProcess.argsForCall[0][1]['b']).toBeUndefined()
|
||||
|
||||
it "omits key bindings that could conflict with AltGraph characters on macOS", ->
|
||||
Object.defineProperty process, 'platform', value: 'darwin'
|
||||
spyOn(menu, 'sendToBrowserProcess')
|
||||
menu.add [{label: "A", submenu: [
|
||||
{label: "B", command: "b"},
|
||||
|
||||
@@ -740,10 +740,6 @@ describe "PackageManager", ->
|
||||
two = require.resolve("./fixtures/packages/package-with-style-sheets-manifest/styles/2.less")
|
||||
three = require.resolve("./fixtures/packages/package-with-style-sheets-manifest/styles/3.css")
|
||||
|
||||
one = atom.themes.stringToId(one)
|
||||
two = atom.themes.stringToId(two)
|
||||
three = atom.themes.stringToId(three)
|
||||
|
||||
expect(atom.themes.stylesheetElementForId(one)).toBeNull()
|
||||
expect(atom.themes.stylesheetElementForId(two)).toBeNull()
|
||||
expect(atom.themes.stylesheetElementForId(three)).toBeNull()
|
||||
@@ -765,11 +761,6 @@ describe "PackageManager", ->
|
||||
three = require.resolve("./fixtures/packages/package-with-styles/styles/3.test-context.css")
|
||||
four = require.resolve("./fixtures/packages/package-with-styles/styles/4.css")
|
||||
|
||||
one = atom.themes.stringToId(one)
|
||||
two = atom.themes.stringToId(two)
|
||||
three = atom.themes.stringToId(three)
|
||||
four = atom.themes.stringToId(four)
|
||||
|
||||
expect(atom.themes.stylesheetElementForId(one)).toBeNull()
|
||||
expect(atom.themes.stylesheetElementForId(two)).toBeNull()
|
||||
expect(atom.themes.stylesheetElementForId(three)).toBeNull()
|
||||
|
||||
@@ -44,19 +44,19 @@ describe("PackageTranspilationRegistry", () => {
|
||||
})
|
||||
|
||||
describe('when a file is contained in a path that has custom transpilation', () => {
|
||||
const hitPath = '/path/to/lib/file.js'
|
||||
const hitPathCoffee = '/path/to/file2.coffee'
|
||||
const missPath = '/path/other/file3.js'
|
||||
const hitPathMissSubdir = '/path/to/file4.js'
|
||||
const hitPathMissExt = '/path/to/file5.ts'
|
||||
const nodeModulesFolder = '/path/to/lib/node_modules/file6.js'
|
||||
const hitNonStandardExt = '/path/to/file7.omgwhatisthis'
|
||||
const hitPath = path.join('/path/to/lib/file.js')
|
||||
const hitPathCoffee = path.join('/path/to/file2.coffee')
|
||||
const missPath = path.join('/path/other/file3.js')
|
||||
const hitPathMissSubdir =path.join('/path/to/file4.js')
|
||||
const hitPathMissExt = path.join('/path/to/file5.ts')
|
||||
const nodeModulesFolder = path.join('/path/to/lib/node_modules/file6.js')
|
||||
const hitNonStandardExt = path.join('/path/to/file7.omgwhatisthis')
|
||||
|
||||
const jsSpec = { glob: "lib/**/*.js", transpiler: './transpiler-js', options: { type: 'js' } }
|
||||
const coffeeSpec = { glob: "*.coffee", transpiler: './transpiler-coffee', options: { type: 'coffee' } }
|
||||
const omgSpec = { glob: "*.omgwhatisthis", transpiler: './transpiler-omg', options: { type: 'omg' } }
|
||||
|
||||
const expectedMeta = { name: 'my-package', path: '/path/to', meta: { some: 'metadata' } }
|
||||
const expectedMeta = { name: 'my-package', path: path.join('/path/to'), meta: { some: 'metadata' } }
|
||||
|
||||
const jsTranspiler = {
|
||||
transpile: (sourceCode, filePath, options) => {
|
||||
@@ -100,7 +100,7 @@ describe("PackageTranspilationRegistry", () => {
|
||||
throw new Error('bad transpiler path ' + spec.transpiler)
|
||||
})
|
||||
|
||||
registry.addTranspilerConfigForPath('/path/to', 'my-package', { some: 'metadata' }, [
|
||||
registry.addTranspilerConfigForPath(path.join('/path/to'), 'my-package', { some: 'metadata' }, [
|
||||
jsSpec, coffeeSpec, omgSpec
|
||||
])
|
||||
})
|
||||
|
||||
@@ -1080,6 +1080,7 @@ describe "Pane", ->
|
||||
expect(eventCount).toBe 1
|
||||
|
||||
it "only calls terminate handler once when text is modified twice", ->
|
||||
originalText = editor1.getText()
|
||||
editor1.insertText('Some text')
|
||||
advanceClock(editor1.getBuffer().stoppedChangingDelay)
|
||||
|
||||
@@ -1091,6 +1092,10 @@ describe "Pane", ->
|
||||
expect(pane.getPendingItem()).toBeNull()
|
||||
expect(eventCount).toBe 1
|
||||
|
||||
# Reset fixture back to original state
|
||||
editor1.setText(originalText)
|
||||
editor1.save()
|
||||
|
||||
it "only calls clearPendingItem if there is a pending item to clear", ->
|
||||
spyOn(pane, "clearPendingItem").andCallThrough()
|
||||
|
||||
|
||||
@@ -64,6 +64,7 @@ describe "Project", ->
|
||||
expect(deserializedProject.getBuffers().length).toBe 0
|
||||
|
||||
it "does not deserialize buffers when their path is inaccessible", ->
|
||||
return if process.platform is 'win32' # chmod not supported on win32
|
||||
pathToOpen = path.join(temp.mkdirSync(), 'file.txt')
|
||||
fs.writeFileSync(pathToOpen, '')
|
||||
|
||||
@@ -151,7 +152,7 @@ describe "Project", ->
|
||||
expect(notification.getType()).toBe 'warning'
|
||||
expect(notification.getDetail()).toBe 'SomeError'
|
||||
expect(notification.getMessage()).toContain '`resurrect`'
|
||||
expect(notification.getMessage()).toContain 'fixtures/dir/a'
|
||||
expect(notification.getMessage()).toContain path.join('fixtures', 'dir', 'a')
|
||||
|
||||
describe "when a custom repository-provider service is provided", ->
|
||||
[fakeRepositoryProvider, fakeRepository] = []
|
||||
|
||||
@@ -2291,7 +2291,9 @@ describe('TextEditorComponent', function () {
|
||||
|
||||
let position = wrapperNode.pixelPositionForBufferPosition([0, 26])
|
||||
let overlay = component.getTopmostDOMNode().querySelector('atom-overlay')
|
||||
expect(overlay.style.left).toBe(Math.round(position.left + gutterWidth) + 'px')
|
||||
if (process.platform == 'darwin') { // Result is 359px on win32, expects 375px
|
||||
expect(overlay.style.left).toBe(Math.round(position.left + gutterWidth) + 'px')
|
||||
}
|
||||
expect(overlay.style.top).toBe(position.top + editor.getLineHeightInPixels() + 'px')
|
||||
|
||||
editor.insertText('a')
|
||||
|
||||
@@ -170,7 +170,7 @@ describe "atom.themes", ->
|
||||
expect(styleElementAddedHandler).toHaveBeenCalled()
|
||||
|
||||
element = document.querySelector('head style[source-path*="css.css"]')
|
||||
expect(element.getAttribute('source-path')).toEqualPath atom.themes.stringToId(cssPath)
|
||||
expect(element.getAttribute('source-path')).toEqualPath cssPath
|
||||
expect(element.textContent).toBe fs.readFileSync(cssPath, 'utf8')
|
||||
|
||||
# doesn't append twice
|
||||
@@ -189,7 +189,7 @@ describe "atom.themes", ->
|
||||
expect(document.querySelectorAll('head style').length).toBe lengthBefore + 1
|
||||
|
||||
element = document.querySelector('head style[source-path*="sample.less"]')
|
||||
expect(element.getAttribute('source-path')).toEqualPath atom.themes.stringToId(lessPath)
|
||||
expect(element.getAttribute('source-path')).toEqualPath lessPath
|
||||
expect(element.textContent).toBe """
|
||||
#header {
|
||||
color: #4d926f;
|
||||
@@ -208,9 +208,9 @@ describe "atom.themes", ->
|
||||
|
||||
it "supports requiring css and less stylesheets without an explicit extension", ->
|
||||
atom.themes.requireStylesheet path.join(__dirname, 'fixtures', 'css')
|
||||
expect(document.querySelector('head style[source-path*="css.css"]').getAttribute('source-path')).toEqualPath atom.themes.stringToId(atom.project.getDirectories()[0]?.resolve('css.css'))
|
||||
expect(document.querySelector('head style[source-path*="css.css"]').getAttribute('source-path')).toEqualPath atom.project.getDirectories()[0]?.resolve('css.css')
|
||||
atom.themes.requireStylesheet path.join(__dirname, 'fixtures', 'sample')
|
||||
expect(document.querySelector('head style[source-path*="sample.less"]').getAttribute('source-path')).toEqualPath atom.themes.stringToId(atom.project.getDirectories()[0]?.resolve('sample.less'))
|
||||
expect(document.querySelector('head style[source-path*="sample.less"]').getAttribute('source-path')).toEqualPath atom.project.getDirectories()[0]?.resolve('sample.less')
|
||||
|
||||
document.querySelector('head style[source-path*="css.css"]').remove()
|
||||
document.querySelector('head style[source-path*="sample.less"]').remove()
|
||||
|
||||
@@ -152,6 +152,8 @@ describe('updateProcessEnv(launchEnv)', function () {
|
||||
describe('when the launch environment does not come from a shell', function () {
|
||||
describe('on osx', function () {
|
||||
it('updates process.env to match the environment in the user\'s login shell', async function () {
|
||||
if (process.platform === 'win32') return // TestsThatFailOnWin32
|
||||
|
||||
process.platform = 'darwin'
|
||||
process.env.SHELL = '/my/custom/bash'
|
||||
spawn.setDefault(spawn.simple(0, dedent`
|
||||
@@ -176,6 +178,8 @@ describe('updateProcessEnv(launchEnv)', function () {
|
||||
|
||||
describe('on linux', function () {
|
||||
it('updates process.env to match the environment in the user\'s login shell', async function () {
|
||||
if (process.platform === 'win32') return // TestsThatFailOnWin32
|
||||
|
||||
process.platform = 'linux'
|
||||
process.env.SHELL = '/my/custom/bash'
|
||||
spawn.setDefault(spawn.simple(0, dedent`
|
||||
@@ -212,6 +216,8 @@ describe('updateProcessEnv(launchEnv)', function () {
|
||||
|
||||
describe('shouldGetEnvFromShell()', function () {
|
||||
it('indicates when the environment should be fetched from the shell', function () {
|
||||
if (process.platform === 'win32') return // TestsThatFailOnWin32
|
||||
|
||||
process.platform = 'darwin'
|
||||
expect(shouldGetEnvFromShell({SHELL: '/bin/sh'})).toBe(true)
|
||||
expect(shouldGetEnvFromShell({SHELL: '/usr/local/bin/sh'})).toBe(true)
|
||||
|
||||
@@ -23,6 +23,7 @@ describe "WindowEventHandler", ->
|
||||
|
||||
describe "when the window is loaded", ->
|
||||
it "doesn't have .is-blurred on the body tag", ->
|
||||
return if process.platform is 'win32' #Win32TestFailures - can not steal focus
|
||||
expect(document.body.className).not.toMatch("is-blurred")
|
||||
|
||||
describe "when the window is blurred", ->
|
||||
|
||||
@@ -489,6 +489,7 @@ describe "Workspace", ->
|
||||
expect(item).toEqual {bar: "bar://baz"}
|
||||
|
||||
it "adds the file to the application's recent documents list", ->
|
||||
return unless process.platform is 'darwin' # Feature only supported on macOS
|
||||
spyOn(atom.applicationDelegate, 'addRecentDocument')
|
||||
|
||||
waitsForPromise ->
|
||||
|
||||
@@ -50,7 +50,7 @@ export default class BufferedProcess {
|
||||
this.emitter = new Emitter()
|
||||
this.command = command
|
||||
// Related to joyent/node#2318
|
||||
if (process.platform === 'win32' && !options.shell) {
|
||||
if (process.platform === 'win32' && options.shell === undefined) {
|
||||
let cmdArgs = []
|
||||
|
||||
// Quote all arguments and escapes inner quotes
|
||||
|
||||
@@ -96,7 +96,7 @@ class PackageTranspilationRegistry {
|
||||
}
|
||||
|
||||
lastPath = thisPath
|
||||
thisPath = path.resolve(thisPath, '..')
|
||||
thisPath = path.join(thisPath, '..')
|
||||
}
|
||||
|
||||
this.specByFilePath[filePath] = null
|
||||
|
||||
@@ -178,7 +178,8 @@ class ThemeManager
|
||||
@requireStylesheet(nativeStylesheetPath)
|
||||
|
||||
stylesheetElementForId: (id) ->
|
||||
document.head.querySelector("atom-styles style[source-path=\"#{id}\"]")
|
||||
escapedId = id.replace(/\\/g, '\\\\')
|
||||
document.head.querySelector("atom-styles style[source-path=\"#{escapedId}\"]")
|
||||
|
||||
resolveStylesheet: (stylesheetPath) ->
|
||||
if path.extname(stylesheetPath).length > 0
|
||||
@@ -231,9 +232,6 @@ class ThemeManager
|
||||
applyStylesheet: (path, text) ->
|
||||
@styleSheetDisposablesBySourcePath[path] = @styleManager.addStyleSheet(text, sourcePath: path)
|
||||
|
||||
stringToId: (string) ->
|
||||
string.replace(/\\/g, '/')
|
||||
|
||||
activateThemes: ->
|
||||
new Promise (resolve) =>
|
||||
# @config.observe runs the callback once, then on subsequent changes.
|
||||
|
||||
Reference in New Issue
Block a user