blob: 9761f352be35055e892715534079c0de268cb02e [file] [log] [blame]
/**
* @license
* Copyright 2019 The Bazel Authors. All rights reserved.
*
* 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.
*/
const assert = require('assert')
const path = require('path')
const escapeFunction = require('../../node-patches/src/fs.cjs').escapeFunction
const isSubPath = require('../../node-patches/src/fs.cjs').isSubPath
// We don't want to bring jest into this repo so we just fake the describe and it functions here
async function describe(_, fn) {
await fn()
}
async function it(_, fn) {
await fn()
}
describe('escape function', () => {
it('isSubPath is correct', () => {
assert.ok(!isSubPath('/a/b', '/a'))
assert.ok(!isSubPath('/a/b', '/a/c/b'))
assert.ok(isSubPath('/a/b', '/a/b'))
assert.ok(isSubPath('/a/b', '/a/b/c/d'))
})
it('isEscape is correct', () => {
const roots = ['/a/b', '/a/b/g/1', '/a/b/g/a/2', '/a/b/g/a/3']
const { isEscape } = escapeFunction(roots)
assert.ok(isEscape('/a/b/l', '/a/c/boop'))
assert.ok(isEscape('/a/b', '/a/c/boop'))
assert.ok(isEscape('/a/b', '/a'))
assert.ok(!isEscape('/a/c', '/a/c/boop'))
assert.ok(!isEscape('/a/b/l', '/a/b/f'))
assert.ok(isEscape('/a/b/g/1', '/some/path'))
assert.ok(isEscape('/a/b/g/1/foo', '/some/path'))
assert.ok(isEscape('/a/b/g/h', '/some/path'))
assert.ok(isEscape('/a/b/g/h/i', '/some/path'))
assert.ok(isEscape('/a/b/g/a/2', '/some/path'))
assert.ok(isEscape('/a/b/g/a/2/foo', '/some/path'))
assert.ok(isEscape('/a/b/g/a/3', '/some/path'))
assert.ok(isEscape('/a/b/g/a/3/foo', '/some/path'))
assert.ok(isEscape('/a/b/g/a/h', '/some/path'))
assert.ok(isEscape('/a/b/g/a/h/i', '/some/path'))
assert.ok(isEscape('/a/b/g/1', '/a/b'))
assert.ok(isEscape('/a/b/g/1/foo', '/a/b'))
assert.ok(!isEscape('/a/b/g/h', '/a/b'))
assert.ok(!isEscape('/a/b/g/h/i', '/a/b'))
assert.ok(isEscape('/a/b/g/a/2', '/a/b'))
assert.ok(isEscape('/a/b/g/a/2/foo', '/a/b'))
assert.ok(isEscape('/a/b/g/a/3', '/a/b'))
assert.ok(isEscape('/a/b/g/a/3/foo', '/a/b'))
assert.ok(!isEscape('/a/b/g/a/h', '/a/b'))
assert.ok(!isEscape('/a/b/g/a/h/i', '/a/b'))
assert.ok(isEscape('/a/b/g/1', '/a/b/c'))
assert.ok(isEscape('/a/b/g/1/foo', '/a/b/c'))
assert.ok(!isEscape('/a/b/g/h', '/a/b/c'))
assert.ok(!isEscape('/a/b/g/h/i', '/a/b/c'))
assert.ok(isEscape('/a/b/g/a/2', '/a/b/c'))
assert.ok(isEscape('/a/b/g/a/2/foo', '/a/b/c'))
assert.ok(isEscape('/a/b/g/a/3', '/a/b/c'))
assert.ok(isEscape('/a/b/g/a/3/foo', '/a/b/c'))
assert.ok(!isEscape('/a/b/g/a/h', '/a/b/c'))
assert.ok(!isEscape('/a/b/g/a/h/i', '/a/b/c'))
})
it('isEscape handles relative paths', () => {
const roots = ['./a/b', './a/b/g/1', './a/b/g/a/2', './a/b/g/a/3']
const { isEscape } = escapeFunction(roots)
assert.ok(isEscape('./a/b/l', path.resolve('./a/c/boop')))
assert.ok(isEscape('./a/b', path.resolve('./a/c/boop')))
assert.ok(isEscape('./a/b', path.resolve('./a')))
assert.ok(!isEscape('./a/c', path.resolve('./a/c/boop')))
assert.ok(!isEscape('./a/b/l', path.resolve('./a/b/f')))
assert.ok(isEscape('./a/b/g/1', path.resolve('./some/path')))
assert.ok(isEscape('./a/b/g/1/foo', path.resolve('./some/path')))
assert.ok(isEscape('./a/b/g/h', path.resolve('./some/path')))
assert.ok(isEscape('./a/b/g/h/i', path.resolve('./some/path')))
assert.ok(isEscape('./a/b/g/a/2', path.resolve('./some/path')))
assert.ok(isEscape('./a/b/g/a/2/foo', path.resolve('./some/path')))
assert.ok(isEscape('./a/b/g/a/3', path.resolve('./some/path')))
assert.ok(isEscape('./a/b/g/a/3/foo', path.resolve('./some/path')))
assert.ok(isEscape('./a/b/g/a/h', path.resolve('./some/path')))
assert.ok(isEscape('./a/b/g/a/h/i', path.resolve('./some/path')))
assert.ok(isEscape('./a/b/g/1', path.resolve('./a/b')))
assert.ok(isEscape('./a/b/g/1/foo', path.resolve('./a/b')))
assert.ok(!isEscape('./a/b/g/h', path.resolve('./a/b')))
assert.ok(!isEscape('./a/b/g/h/i', path.resolve('./a/b')))
assert.ok(isEscape('./a/b/g/a/2', path.resolve('./a/b')))
assert.ok(isEscape('./a/b/g/a/2/foo', path.resolve('./a/b')))
assert.ok(isEscape('./a/b/g/a/3', path.resolve('./a/b')))
assert.ok(isEscape('./a/b/g/a/3/foo', path.resolve('./a/b')))
assert.ok(!isEscape('./a/b/g/a/h', path.resolve('./a/b')))
assert.ok(!isEscape('./a/b/g/a/h/i', path.resolve('./a/b')))
assert.ok(isEscape('./a/b/g/1', path.resolve('./a/b/c')))
assert.ok(isEscape('./a/b/g/1/foo', path.resolve('./a/b/c')))
assert.ok(!isEscape('./a/b/g/h', path.resolve('./a/b/c')))
assert.ok(!isEscape('./a/b/g/h/i', path.resolve('./a/b/c')))
assert.ok(isEscape('./a/b/g/a/2', path.resolve('./a/b/c')))
assert.ok(isEscape('./a/b/g/a/2/foo', path.resolve('./a/b/c')))
assert.ok(isEscape('./a/b/g/a/3', path.resolve('./a/b/c')))
assert.ok(isEscape('./a/b/g/a/3/foo', path.resolve('./a/b/c')))
assert.ok(!isEscape('./a/b/g/a/h', path.resolve('./a/b/c')))
assert.ok(!isEscape('./a/b/g/a/h/i', path.resolve('./a/b/c')))
})
})