2019-07-26 13:37:59 +00:00
import { expect } from 'chai'
import { dialog , BrowserWindow } from 'electron'
import { closeAllWindows } from './window-helpers'
import { ifit } from './spec-helpers'
2016-12-01 22:15:05 +00:00
describe ( 'dialog module' , ( ) = > {
describe ( 'showOpenDialog' , ( ) = > {
2019-07-26 13:37:59 +00:00
afterEach ( closeAllWindows )
ifit ( process . platform !== 'win32' ) ( 'should not throw for valid cases' , ( ) = > {
2019-05-21 14:08:22 +00:00
expect ( ( ) = > {
dialog . showOpenDialog ( { title : 'i am title' } )
} ) . to . not . throw ( )
expect ( ( ) = > {
2019-07-26 13:37:59 +00:00
const w = new BrowserWindow ( )
2019-05-21 14:08:22 +00:00
dialog . showOpenDialog ( w , { title : 'i am title' } )
} ) . to . not . throw ( )
} )
2016-12-01 22:15:05 +00:00
it ( 'throws errors when the options are invalid' , ( ) = > {
2018-06-18 14:56:03 +00:00
expect ( ( ) = > {
2019-07-26 13:37:59 +00:00
dialog . showOpenDialog ( { properties : false as any } )
2018-06-18 14:56:03 +00:00
} ) . to . throw ( /Properties must be an array/ )
2016-12-01 22:15:05 +00:00
2018-06-18 14:56:03 +00:00
expect ( ( ) = > {
2019-07-26 13:37:59 +00:00
dialog . showOpenDialog ( { title : 300 as any } )
2018-06-18 14:56:03 +00:00
} ) . to . throw ( /Title must be a string/ )
2016-12-01 22:15:05 +00:00
2018-06-18 14:56:03 +00:00
expect ( ( ) = > {
2019-07-26 13:37:59 +00:00
dialog . showOpenDialog ( { buttonLabel : [ ] as any } )
2018-06-18 14:56:03 +00:00
} ) . to . throw ( /Button label must be a string/ )
2016-12-01 22:15:05 +00:00
2018-06-18 14:56:03 +00:00
expect ( ( ) = > {
2019-07-26 13:37:59 +00:00
dialog . showOpenDialog ( { defaultPath : { } as any } )
2018-06-18 14:56:03 +00:00
} ) . to . throw ( /Default path must be a string/ )
2017-02-09 13:23:02 +00:00
2018-06-18 14:56:03 +00:00
expect ( ( ) = > {
2019-07-26 13:37:59 +00:00
dialog . showOpenDialog ( { message : { } as any } )
2018-06-18 14:56:03 +00:00
} ) . to . throw ( /Message must be a string/ )
2016-12-01 22:15:05 +00:00
} )
} )
describe ( 'showSaveDialog' , ( ) = > {
2019-07-26 13:37:59 +00:00
afterEach ( closeAllWindows )
ifit ( process . platform !== 'win32' ) ( 'should not throw for valid cases' , ( ) = > {
2019-05-21 14:08:22 +00:00
expect ( ( ) = > {
dialog . showSaveDialog ( { title : 'i am title' } )
} ) . to . not . throw ( )
expect ( ( ) = > {
2019-07-26 13:37:59 +00:00
const w = new BrowserWindow ( )
2019-05-21 14:08:22 +00:00
dialog . showSaveDialog ( w , { title : 'i am title' } )
} ) . to . not . throw ( )
} )
2016-12-01 22:15:05 +00:00
it ( 'throws errors when the options are invalid' , ( ) = > {
2018-06-18 14:56:03 +00:00
expect ( ( ) = > {
2019-07-26 13:37:59 +00:00
dialog . showSaveDialog ( { title : 300 as any } )
2018-06-18 14:56:03 +00:00
} ) . to . throw ( /Title must be a string/ )
2016-12-01 22:15:05 +00:00
2018-06-18 14:56:03 +00:00
expect ( ( ) = > {
2019-07-26 13:37:59 +00:00
dialog . showSaveDialog ( { buttonLabel : [ ] as any } )
2018-06-18 14:56:03 +00:00
} ) . to . throw ( /Button label must be a string/ )
2016-12-01 22:15:05 +00:00
2018-06-18 14:56:03 +00:00
expect ( ( ) = > {
2019-07-26 13:37:59 +00:00
dialog . showSaveDialog ( { defaultPath : { } as any } )
2018-06-18 14:56:03 +00:00
} ) . to . throw ( /Default path must be a string/ )
2017-02-09 13:23:02 +00:00
2018-06-18 14:56:03 +00:00
expect ( ( ) = > {
2019-07-26 13:37:59 +00:00
dialog . showSaveDialog ( { message : { } as any } )
2018-06-18 14:56:03 +00:00
} ) . to . throw ( /Message must be a string/ )
2017-02-09 13:23:02 +00:00
2018-06-18 14:56:03 +00:00
expect ( ( ) = > {
2019-07-26 13:37:59 +00:00
dialog . showSaveDialog ( { nameFieldLabel : { } as any } )
2018-06-18 14:56:03 +00:00
} ) . to . throw ( /Name field label must be a string/ )
2016-12-01 22:15:05 +00:00
} )
} )
describe ( 'showMessageBox' , ( ) = > {
2019-11-01 20:37:02 +00:00
afterEach ( closeAllWindows )
2019-05-21 14:08:22 +00:00
2019-07-26 13:37:59 +00:00
// parentless message boxes are synchronous on macOS
// dangling message boxes on windows cause a DCHECK: https://cs.chromium.org/chromium/src/base/win/message_window.cc?l=68&rcl=7faa4bf236a866d007dc5672c9ce42660e67a6a6
ifit ( process . platform !== 'darwin' && process . platform !== 'win32' ) ( 'should not throw for a parentless message box' , ( ) = > {
2019-05-21 14:08:22 +00:00
expect ( ( ) = > {
2019-07-26 13:37:59 +00:00
dialog . showMessageBox ( { message : 'i am message' } )
2019-05-21 14:08:22 +00:00
} ) . to . not . throw ( )
2019-07-26 13:37:59 +00:00
} )
2019-05-21 14:08:22 +00:00
2019-07-26 13:37:59 +00:00
ifit ( process . platform !== 'win32' ) ( 'should not throw for valid cases' , ( ) = > {
2019-05-21 14:08:22 +00:00
expect ( ( ) = > {
2019-07-26 13:37:59 +00:00
const w = new BrowserWindow ( )
dialog . showMessageBox ( w , { message : 'i am message' } )
2019-05-21 14:08:22 +00:00
} ) . to . not . throw ( )
} )
2016-12-01 22:15:05 +00:00
it ( 'throws errors when the options are invalid' , ( ) = > {
2018-06-18 14:56:03 +00:00
expect ( ( ) = > {
2019-07-26 13:37:59 +00:00
dialog . showMessageBox ( undefined as any , { type : 'not-a-valid-type' , message : '' } )
2018-06-18 14:56:03 +00:00
} ) . to . throw ( /Invalid message box type/ )
2016-12-01 22:15:05 +00:00
2018-06-18 14:56:03 +00:00
expect ( ( ) = > {
2019-07-26 13:37:59 +00:00
dialog . showMessageBox ( null as any , { buttons : false as any , message : '' } )
2018-06-18 14:56:03 +00:00
} ) . to . throw ( /Buttons must be an array/ )
2016-12-01 22:15:05 +00:00
2018-06-18 14:56:03 +00:00
expect ( ( ) = > {
2019-07-26 13:37:59 +00:00
dialog . showMessageBox ( { title : 300 as any , message : '' } )
2018-06-18 14:56:03 +00:00
} ) . to . throw ( /Title must be a string/ )
2016-12-01 22:15:05 +00:00
2018-06-18 14:56:03 +00:00
expect ( ( ) = > {
2019-07-26 13:37:59 +00:00
dialog . showMessageBox ( { message : [ ] as any } )
2018-06-18 14:56:03 +00:00
} ) . to . throw ( /Message must be a string/ )
2016-12-01 22:15:05 +00:00
2018-06-18 14:56:03 +00:00
expect ( ( ) = > {
2019-07-26 13:37:59 +00:00
dialog . showMessageBox ( { detail : 3.14 as any , message : '' } )
2018-06-18 14:56:03 +00:00
} ) . to . throw ( /Detail must be a string/ )
2017-02-06 15:35:36 +00:00
2018-06-18 14:56:03 +00:00
expect ( ( ) = > {
2019-07-26 13:37:59 +00:00
dialog . showMessageBox ( { checkboxLabel : false as any , message : '' } )
2018-06-18 14:56:03 +00:00
} ) . to . throw ( /checkboxLabel must be a string/ )
2016-12-01 22:15:05 +00:00
} )
} )
describe ( 'showErrorBox' , ( ) = > {
it ( 'throws errors when the options are invalid' , ( ) = > {
2018-06-18 14:56:03 +00:00
expect ( ( ) = > {
2019-07-26 13:37:59 +00:00
( dialog . showErrorBox as any ) ( )
2018-06-18 14:56:03 +00:00
} ) . to . throw ( /Insufficient number of arguments/ )
2016-12-01 22:15:05 +00:00
2018-06-18 14:56:03 +00:00
expect ( ( ) = > {
2019-07-26 13:37:59 +00:00
dialog . showErrorBox ( 3 as any , 'four' )
2018-06-18 14:56:03 +00:00
} ) . to . throw ( /Error processing argument at index 0/ )
2016-12-01 22:15:05 +00:00
2018-06-18 14:56:03 +00:00
expect ( ( ) = > {
2019-07-26 13:37:59 +00:00
dialog . showErrorBox ( 'three' , 4 as any )
2018-06-18 14:56:03 +00:00
} ) . to . throw ( /Error processing argument at index 1/ )
2016-12-01 22:15:05 +00:00
} )
} )
2017-04-04 17:49:21 +00:00
describe ( 'showCertificateTrustDialog' , ( ) = > {
it ( 'throws errors when the options are invalid' , ( ) = > {
2018-06-18 14:56:03 +00:00
expect ( ( ) = > {
2019-07-26 13:37:59 +00:00
( dialog . showCertificateTrustDialog as any ) ( )
2018-06-18 14:56:03 +00:00
} ) . to . throw ( /options must be an object/ )
2017-04-04 17:49:21 +00:00
2018-06-18 14:56:03 +00:00
expect ( ( ) = > {
2019-07-26 13:37:59 +00:00
dialog . showCertificateTrustDialog ( { } as any )
2018-06-18 14:56:03 +00:00
} ) . to . throw ( /certificate must be an object/ )
2017-04-04 17:49:21 +00:00
2018-06-18 14:56:03 +00:00
expect ( ( ) = > {
2019-07-26 13:37:59 +00:00
dialog . showCertificateTrustDialog ( { certificate : { } as any , message : false as any } )
2018-06-18 14:56:03 +00:00
} ) . to . throw ( /message must be a string/ )
2017-04-04 17:49:21 +00:00
} )
} )
2016-12-01 22:15:05 +00:00
} )