60 lines
1.6 KiB
JavaScript
60 lines
1.6 KiB
JavaScript
|
import Interface from './interface.js'
|
||
|
|
||
|
/** Basic Application object to be used as a singleton.
|
||
|
Provides an interface for automatic testing and common device specific
|
||
|
feature detection.
|
||
|
*/
|
||
|
|
||
|
export class IApp extends Interface {
|
||
|
/** Build the app by registering event handlers,
|
||
|
* adding DOM elements, instanciating templates, etc...
|
||
|
*/
|
||
|
setup() { return this }
|
||
|
|
||
|
/** Run the application by starting a main loop, ...
|
||
|
*/
|
||
|
run() { return this }
|
||
|
}
|
||
|
|
||
|
export default class App extends Object {
|
||
|
/** Override this method to build your app.
|
||
|
*/
|
||
|
setup() {
|
||
|
return this
|
||
|
}
|
||
|
|
||
|
/** Start and run the application. Override this method with everything
|
||
|
that is needed to maintain your App, main loops, etc.
|
||
|
*/
|
||
|
run() {
|
||
|
return this
|
||
|
}
|
||
|
|
||
|
/** Defines all test suites. Overwrite this method to ensure that
|
||
|
all testable aspects of your App are evaluated.
|
||
|
*/
|
||
|
allTests() {
|
||
|
console.log('Overwrite App.allTests()')
|
||
|
}
|
||
|
|
||
|
/** Run all tests. Should return 'ok' and the amount of time needed to
|
||
|
run App.allTests() or a failure message with diagnostic error decription.
|
||
|
@return {array} - array with 'ok' as first element and needed time as
|
||
|
second element or "Tests failed" and an error string
|
||
|
*/
|
||
|
runTests() {
|
||
|
var start = performance.now()
|
||
|
try {
|
||
|
this.allTests()
|
||
|
var end = performance.now()
|
||
|
return ['ok', end - start]
|
||
|
}
|
||
|
catch(e) {
|
||
|
console.trace()
|
||
|
return ['Tests failed', e.message]
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
IApp.implementedBy(App)
|