electron-updater
Version:
Cross platform auto-updater for electron applications
301 lines (223 loc) • 11.3 kB
JavaScript
var should = require('should')
var path = require('path') // *always* use the correct pathseps!
var helpers = require('../lib/helpers')
var AppDirectory = require('../lib/appdirectory')
var oldEnv = {}
function monkeyPatchEnvironment(xdg) {
oldEnv.HOME = process.env.HOME
process.env.HOME = path.join("/home", "awesomeuser")
oldEnv.APPDATA = process.env.APPDATA
process.env.APPDATA = path.join("C:", "Users", "awesomeuser", "AppData", "Roaming")
oldEnv.LOCALAPPDATA = process.env.LOCALAPPDATA
process.env.LOCALAPPDATA = path.join("C:", "Users", "awesomeuser", "AppData", "Local")
oldEnv.PROGRAMDATA = process.env.PROGRAMDATA
process.env.PROGRAMDATA = path.join("C:", "ProgramData")
if (xdg) {
oldEnv.XDG_DATA_HOME = process.env.XDG_DATA_HOME
process.env.XDG_DATA_HOME = path.join("/home", "awesomeuser", "xdg", "share") // I don't know what an XDG_DATA_HOME directory should look like...
oldEnv.XDG_DATA_DIRS = process.env.XDG_DATA_DIRS
xdgDataDirs = path.join("/usr", "xdg", "share") + (path.delimiter || ':') + path.join("/usr", "local", "xdg", "share")
process.env.XDG_DATA_DIRS = xdgDataDirs // I also don't know what an XDG_DATA_DIRS directory should look like...
oldEnv.XDG_CONFIG_HOME = process.env.XDG_CONFIG_HOME
process.env.XDG_CONFIG_HOME = path.join("/home", "awesomeuser", "xdg", ".config")
} else {
oldEnv.XDG_DATA_HOME = process.env.XDG_DATA_HOME
process.env.XDG_DATA_HOME = ''
oldEnv.XDG_DATA_DIRS = process.env.XDG_DATA_DIRS
process.env.XDG_DATA_DIRS = ''
oldEnv.XDG_CONFIG_HOME = process.env.XDG_CONFIG_HOME
process.env.XDG_CONFIG_HOME = ''
}
}
function unPatchEnvironment() {
process.env.HOME = oldEnv.HOME
process.env.APPDATA = oldEnv.APPDATA
process.env.LOCALAPPDATA = oldEnv.LOCALAPPDATA
process.env.XDG_DATA_HOME = oldEnv.XDG_DATA_HOME
process.env.XDG_CONFIG_HOME = oldEnv.XDG_CONFIG_HOME
}
describe('helpers.js', function() {
describe('instanceOf', function() {
it('should correctly work out if an object is a subtype of a prototype', function() {
helpers.instanceOf('sampleString', String).should.be.true
helpers.instanceOf(new String(), String).should.be.true
helpers.instanceOf({}, Object).should.be.true
helpers.instanceOf(new Object(), Object).should.be.true
helpers.instanceOf('string', Object).should.be.true // Potentially confusing behaviour
helpers.instanceOf([], Array).should.be.true
helpers.instanceOf(new Array(), Array).should.be.true
helpers.instanceOf('', Array).should.be.false
helpers.instanceOf({'hello': 'goodbye'}, String).should.be.false
})
})
describe('formatStr', function() {
it('should format strings correctly', function() {
helpers.formatStr('{0} is dead, but {1} is alive! {0} {2}', 'ASP', 'ASP.NET').should.equal('ASP is dead, but ASP.NET is alive! ASP {2}')
helpers.formatStr('{1} string does not have an index 0', 'uncalled', 'This').should.equal('This string does not have an index 0')
})
})
})
describe('appdirectory.js', function() {
describe('AppDirectory', function() {
it('should handle instantiation options object', function() {
monkeyPatchEnvironment() // needed to ensure *APPDATA vars are present
var ad = new AppDirectory({
appName: "myapp",
appAuthor: "Johz",
appVersion: "0.1.1",
useRoaming: true,
platform: "win32"
})
ad.should.containEql({appName: 'myapp'})
ad.should.containEql({appAuthor: 'Johz'})
ad.should.containEql({appVersion: '0.1.1'})
ad.should.containEql({useRoaming: true})
ad.should.containEql({_platform: "win32"})
ad.platform.should.equal("win32") // test getters here as well
unPatchEnvironment()
})
it('should handle default instantiations', function() {
var ad = new AppDirectory({
appName: "myapp",
})
ad.should.containEql({appName: 'myapp'})
ad.should.containEql({appAuthor: 'myapp'})
ad.should.containEql({appVersion: null})
ad.should.containEql({useRoaming: false})
ad.should.containEql({_platform: null})
})
it('should handle instatiation with string', function() {
var ad = new AppDirectory("myapp")
ad.should.containEql({appName: 'myapp'})
ad.should.containEql({appAuthor: 'myapp'})
ad.should.containEql({appVersion: null})
ad.should.containEql({useRoaming: false})
ad.should.containEql({_platform: null})
})
describe("#userData", function() {
it('should return the correct format string', function() {
monkeyPatchEnvironment(false) // get the correct system vars in place
var ad = new AppDirectory({
appName: "myapp",
appAuthor: "Johz",
appVersion: "0.1.1",
useRoaming: true,
platform: "win32"
})
ad.userData().should.equal(path.join("C:", "Users", "awesomeuser", "AppData", "Roaming", "Johz", "myapp", "0.1.1"))
ad = new AppDirectory({
appName: "myapp",
useRoaming: false,
platform: "win32"
})
ad.userData().should.equal(path.join("C:", "Users", "awesomeuser", "AppData", "Local", "myapp", "myapp"))
ad = new AppDirectory({
appName: "myapp",
platform: "darwin"
})
ad.userData().should.equal(path.join("/home", "awesomeuser", "Library", "Application Support", "myapp"))
ad = new AppDirectory({
appName: "myapp",
platform: "linux"
})
ad.userData().should.equal(path.join("/home", "awesomeuser", ".local", "share", "myapp"))
unPatchEnvironment()
monkeyPatchEnvironment(true) // set XDG variables
ad = new AppDirectory({
appName: "myapp",
platform: "linux"
})
ad.userData().should.equal(path.join("/home", "awesomeuser", "xdg", "share", "myapp"))
unPatchEnvironment() // return everything to how it was in case something weird's happening afterwards
})
it('should be modifiable using getters and setters', function() {
monkeyPatchEnvironment(false)
ad = new AppDirectory({
appName: "myapp",
platform: "win32"
})
ad.userData().should.equal(path.join("C:", "Users", "awesomeuser", "AppData", "Local", "myapp", "myapp"))
ad.useRoaming = true
ad.userData().should.equal(path.join("C:", "Users", "awesomeuser", "AppData", "Roaming", "myapp", "myapp"))
ad.platform = "linux"
ad.platform.should.equal("linux")
ad.userData().should.equal(path.join("/home", "awesomeuser", ".local", "share", "myapp"))
unPatchEnvironment()
})
})
describe('#siteData', function() {
it('should return the correct paths on different OSs'/*, function() {
monkeyPatchEnvironment(false) // get the correct system vars in place
var ad = new AppDirectory({
appName: "myapp",
appAuthor: "Johz",
appVersion: "0.1.1",
useRoaming: true,
platform: "win32"
})
ad.siteData().should.equal(path.join("C:", "ProgramData", "Johz", "myapp", "0.1.1"))
ad = new AppDirectory({
appName: "myapp",
useRoaming: false,
platform: "win32"
})
ad.siteData().should.equal(path.join("C:", "ProgramData", "myapp", "myapp"))
ad = new AppDirectory({
appName: "myapp",
platform: "darwin"
})
ad.siteData().should.equal(path.join("/Library", "Application Support", "myapp"))
ad = new AppDirectory({
appName: "myapp",
platform: "linux"
})
ad.siteData().should.equal(path.join("/usr", "local", "share", "myapp"))
unPatchEnvironment()
monkeyPatchEnvironment(true) // set XDG variables
ad = new AppDirectory({
appName: "myapp",
platform: "linux"
})
ad.siteData().should.equal(path.join("/usr", "xdg", "share", "myapp"))
unPatchEnvironment() // return everything to how it was in case something weird's happening afterwards
}*/)
})
describe('#userConfig', function() {
it('should return the correct paths on different OSs', function() {
monkeyPatchEnvironment(false) // get the correct system vars in place
var ad = new AppDirectory({
appName: "myapp",
appAuthor: "Johz",
appVersion: "0.1.1",
useRoaming: true,
platform: "win32"
})
ad.userConfig().should.equal(path.join("C:", "Users", "awesomeuser", "AppData", "Roaming", "Johz", "myapp", "0.1.1"))
ad = new AppDirectory({
appName: "myapp",
useRoaming: false,
platform: "win32"
})
ad.userConfig().should.equal(path.join("C:", "Users", "awesomeuser", "AppData", "Local", "myapp", "myapp"))
ad = new AppDirectory({
appName: "myapp",
platform: "darwin"
})
ad.userConfig().should.equal(path.join("/home", "awesomeuser", "Library", "Application Support", "myapp"))
ad = new AppDirectory({
appName: "myapp",
platform: "linux"
})
ad.userConfig().should.equal(path.join("/home", "awesomeuser", ".config", "myapp"))
unPatchEnvironment()
monkeyPatchEnvironment(true) // set XDG variables
ad = new AppDirectory({
appName: "myapp",
platform: "linux"
})
ad.userConfig().should.equal(path.join("/home", "awesomeuser", "xdg", ".config", "myapp"))
unPatchEnvironment() // return everything to how it was in case something weird's happening afterwards
})
})
})
})