mirror of
https://github.com/Foundry376/Mailspring.git
synced 2025-10-06 19:26:55 +08:00
fix(specs): Fix intermittent async error and max event listener leak
An absolute ContactStore spec was causing the listener leak by re-initializing the store and not cleaning it up. Intermittent theme manager failing spec might be caused due to timing of the theme activation
This commit is contained in:
parent
ecf120729a
commit
abc4a6116e
2 changed files with 47 additions and 52 deletions
|
@ -27,16 +27,11 @@ describe "ContactStore", ->
|
||||||
ContactStore._contactCache = []
|
ContactStore._contactCache = []
|
||||||
ContactStore._fetchOffset = 0
|
ContactStore._fetchOffset = 0
|
||||||
ContactStore._accountId = null
|
ContactStore._accountId = null
|
||||||
|
ContactRankingStore.reset()
|
||||||
|
|
||||||
afterEach ->
|
afterEach ->
|
||||||
atom.testOrganizationUnit = null
|
atom.testOrganizationUnit = null
|
||||||
|
|
||||||
it "initializes the cache from the DB", ->
|
|
||||||
spyOn(DatabaseStore, "findAll").andCallFake -> Promise.resolve([])
|
|
||||||
ContactStore.constructor()
|
|
||||||
expect(ContactStore._contactCache.length).toBe 0
|
|
||||||
expect(ContactStore._fetchOffset).toBe 0
|
|
||||||
|
|
||||||
describe "when the Account updates from null to valid", ->
|
describe "when the Account updates from null to valid", ->
|
||||||
beforeEach ->
|
beforeEach ->
|
||||||
spyOn(ContactStore, "_refreshCache")
|
spyOn(ContactStore, "_refreshCache")
|
||||||
|
|
|
@ -318,66 +318,66 @@ describe "ThemeManager", ->
|
||||||
[stylesheetRemovedHandler, stylesheetAddedHandler, stylesheetsChangedHandler] = []
|
[stylesheetRemovedHandler, stylesheetAddedHandler, stylesheetsChangedHandler] = []
|
||||||
|
|
||||||
waitsForPromise ->
|
waitsForPromise ->
|
||||||
themeManager.activateThemes()
|
themeManager.activateThemes().then ->
|
||||||
|
|
||||||
runs ->
|
runs ->
|
||||||
atom.styles.onDidRemoveStyleElement styleElementRemovedHandler = jasmine.createSpy("styleElementRemovedHandler")
|
atom.styles.onDidRemoveStyleElement styleElementRemovedHandler = jasmine.createSpy("styleElementRemovedHandler")
|
||||||
atom.styles.onDidAddStyleElement styleElementAddedHandler = jasmine.createSpy("styleElementAddedHandler")
|
atom.styles.onDidAddStyleElement styleElementAddedHandler = jasmine.createSpy("styleElementAddedHandler")
|
||||||
|
|
||||||
themeManager.onDidChangeStylesheets stylesheetsChangedHandler = jasmine.createSpy("stylesheetsChangedHandler")
|
themeManager.onDidChangeStylesheets stylesheetsChangedHandler = jasmine.createSpy("stylesheetsChangedHandler")
|
||||||
themeManager.onDidRemoveStylesheet stylesheetRemovedHandler = jasmine.createSpy("stylesheetRemovedHandler")
|
themeManager.onDidRemoveStylesheet stylesheetRemovedHandler = jasmine.createSpy("stylesheetRemovedHandler")
|
||||||
themeManager.onDidAddStylesheet stylesheetAddedHandler = jasmine.createSpy("stylesheetAddedHandler")
|
themeManager.onDidAddStylesheet stylesheetAddedHandler = jasmine.createSpy("stylesheetAddedHandler")
|
||||||
spyOn(themeManager, 'loadUserStylesheet').andCallThrough()
|
spyOn(themeManager, 'loadUserStylesheet').andCallThrough()
|
||||||
|
|
||||||
expect($(document.body).css('border-style')).toBe 'dotted'
|
expect($(document.body).css('border-style')).toBe 'dotted'
|
||||||
fs.writeFileSync(userStylesheetPath, 'body {border-style: dashed}')
|
fs.writeFileSync(userStylesheetPath, 'body {border-style: dashed}')
|
||||||
|
|
||||||
waitsFor ->
|
waitsFor ->
|
||||||
themeManager.loadUserStylesheet.callCount is 1
|
themeManager.loadUserStylesheet.callCount is 1
|
||||||
|
|
||||||
runs ->
|
runs ->
|
||||||
expect($(document.body).css('border-style')).toBe 'dashed'
|
expect($(document.body).css('border-style')).toBe 'dashed'
|
||||||
|
|
||||||
expect(styleElementRemovedHandler).toHaveBeenCalled()
|
expect(styleElementRemovedHandler).toHaveBeenCalled()
|
||||||
expect(styleElementRemovedHandler.argsForCall[0][0].textContent).toContain 'dotted'
|
expect(styleElementRemovedHandler.argsForCall[0][0].textContent).toContain 'dotted'
|
||||||
expect(stylesheetRemovedHandler).toHaveBeenCalled()
|
expect(stylesheetRemovedHandler).toHaveBeenCalled()
|
||||||
|
|
||||||
match = null
|
match = null
|
||||||
for rule in stylesheetRemovedHandler.argsForCall[0][0].cssRules
|
for rule in stylesheetRemovedHandler.argsForCall[0][0].cssRules
|
||||||
match = rule if rule.selectorText is 'body'
|
match = rule if rule.selectorText is 'body'
|
||||||
expect(match.style.border).toBe 'dotted'
|
expect(match.style.border).toBe 'dotted'
|
||||||
|
|
||||||
expect(styleElementAddedHandler).toHaveBeenCalled()
|
expect(styleElementAddedHandler).toHaveBeenCalled()
|
||||||
expect(styleElementAddedHandler.argsForCall[0][0].textContent).toContain 'dashed'
|
expect(styleElementAddedHandler.argsForCall[0][0].textContent).toContain 'dashed'
|
||||||
expect(stylesheetAddedHandler).toHaveBeenCalled()
|
expect(stylesheetAddedHandler).toHaveBeenCalled()
|
||||||
match = null
|
match = null
|
||||||
for rule in stylesheetAddedHandler.argsForCall[0][0].cssRules
|
for rule in stylesheetAddedHandler.argsForCall[0][0].cssRules
|
||||||
match = rule if rule.selectorText is 'body'
|
match = rule if rule.selectorText is 'body'
|
||||||
expect(match.style.border).toBe 'dashed'
|
expect(match.style.border).toBe 'dashed'
|
||||||
|
|
||||||
expect(stylesheetsChangedHandler).toHaveBeenCalled()
|
expect(stylesheetsChangedHandler).toHaveBeenCalled()
|
||||||
|
|
||||||
styleElementRemovedHandler.reset()
|
styleElementRemovedHandler.reset()
|
||||||
stylesheetRemovedHandler.reset()
|
stylesheetRemovedHandler.reset()
|
||||||
stylesheetsChangedHandler.reset()
|
stylesheetsChangedHandler.reset()
|
||||||
fs.removeSync(userStylesheetPath)
|
fs.removeSync(userStylesheetPath)
|
||||||
|
|
||||||
waitsFor ->
|
waitsFor ->
|
||||||
themeManager.loadUserStylesheet.callCount is 2
|
themeManager.loadUserStylesheet.callCount is 2
|
||||||
|
|
||||||
runs ->
|
runs ->
|
||||||
expect(styleElementRemovedHandler).toHaveBeenCalled()
|
expect(styleElementRemovedHandler).toHaveBeenCalled()
|
||||||
expect(styleElementRemovedHandler.argsForCall[0][0].textContent).toContain 'dashed'
|
expect(styleElementRemovedHandler.argsForCall[0][0].textContent).toContain 'dashed'
|
||||||
expect(stylesheetRemovedHandler).toHaveBeenCalled()
|
expect(stylesheetRemovedHandler).toHaveBeenCalled()
|
||||||
|
|
||||||
waitsFor ->
|
waitsFor ->
|
||||||
match = null
|
match = null
|
||||||
for rule in stylesheetRemovedHandler.argsForCall[0][0].cssRules
|
for rule in stylesheetRemovedHandler.argsForCall[0][0].cssRules
|
||||||
match = rule if rule.selectorText is 'body'
|
match = rule if rule.selectorText is 'body'
|
||||||
match.style.border is 'dashed' and $(document.body).css('border-style') is 'none'
|
match.style.border is 'dashed' and $(document.body).css('border-style') is 'none'
|
||||||
|
|
||||||
runs ->
|
runs ->
|
||||||
expect(stylesheetsChangedHandler).toHaveBeenCalled()
|
expect(stylesheetsChangedHandler).toHaveBeenCalled()
|
||||||
|
|
||||||
describe "when there is an error reading the stylesheet", ->
|
describe "when there is an error reading the stylesheet", ->
|
||||||
addErrorHandler = null
|
addErrorHandler = null
|
||||||
|
|
Loading…
Add table
Reference in a new issue