mirror of
https://github.com/balena-io/etcher.git
synced 2025-11-13 20:29:26 +00:00
- Replace onClick arrow functions in all components that use them for efficiency reasons: 300-500% speed-up - Sort by folders and ignore case for better UX - Remove use of `rendition.Button` in files, leading to a 10-20% performance increase when browsing files - Proper sidebar width and spacing - Recents and favorites are now filtered by existence async for a tiny performance improvement - Make Breadcrumbs and Icon pure components to stop frequent re-rendering - Initial support for array constraints - Use first constraint as initial path instead of homedir if a constraint is set - Use correct design height on modal, `calc(100vh - 20px)` - Reset scroll position when browsing a new folder - Fuse Bluebird `.map()` and `.reduce()` in `files.getAllFilesMetadataAsync`. - Use `localeCompare`'s own case-insensitive option instead of calling `.toLowerCase()` twice on `n-2` files compared. - Use 16px font sizes in sidebar and files to match design. - Disable `$locationProvider.html5Mode.rewriteLinks`, which seemed to take 50ms of the directory changing time. - Leave file extension as-is in `files.getFileMetadataSync` and the async counterpart for a very minor performance improvement. Change-Type: patch
50 lines
1.6 KiB
JavaScript
50 lines
1.6 KiB
JavaScript
/*
|
|
* Copyright 2018 resin.io
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
'use strict'
|
|
|
|
const m = require('mochainon')
|
|
const path = require('path')
|
|
const files = require('../../../lib/gui/app/models/files')
|
|
|
|
describe('Shared: Files', function () {
|
|
describe('.splitPath()', function () {
|
|
it('should handle a root directory', function () {
|
|
const { root } = path.parse(__dirname)
|
|
const dirs = files.splitPath(root)
|
|
m.chai.expect(dirs).to.deep.equal([ root ])
|
|
})
|
|
|
|
it('should handle relative paths', function () {
|
|
const dirs = files.splitPath(path.join('relative', 'dir', 'test'))
|
|
m.chai.expect(dirs).to.deep.equal([ 'relative', 'dir', 'test' ])
|
|
})
|
|
|
|
it('should handle absolute paths', function () {
|
|
let dir
|
|
if (process.platform === 'win32') {
|
|
dir = 'C:\\Users\\user\\Downloads'
|
|
const dirs = files.splitPath(dir)
|
|
m.chai.expect(dirs).to.deep.equal([ 'C:\\', 'Users', 'user', 'Downloads' ])
|
|
} else {
|
|
dir = '/Users/user/Downloads'
|
|
const dirs = files.splitPath(dir)
|
|
m.chai.expect(dirs).to.deep.equal([ '/', 'Users', 'user', 'Downloads' ])
|
|
}
|
|
})
|
|
})
|
|
})
|