149 lines
4.2 KiB
TypeScript
149 lines
4.2 KiB
TypeScript
/*
|
|
* Copyright The OpenTelemetry Authors
|
|
*
|
|
* 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
|
|
*
|
|
* https://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.
|
|
*/
|
|
|
|
import * as assert from 'assert';
|
|
import {
|
|
isCompatible,
|
|
_makeCompatibilityCheck,
|
|
} from '../../../src/internal/semver';
|
|
import { VERSION } from '../../../src/version';
|
|
|
|
describe('semver', function () {
|
|
it('should be compatible if versions are equal', function () {
|
|
assert.ok(isCompatible(VERSION));
|
|
});
|
|
|
|
it('returns false if own version cannot be parsed', function () {
|
|
const check = _makeCompatibilityCheck('this is not semver');
|
|
assert.ok(!check('1.0.0'));
|
|
});
|
|
|
|
it('incompatible if other version cannot be parsed', function () {
|
|
const check = _makeCompatibilityCheck('0.1.2');
|
|
assert.ok(!check('this is not semver'));
|
|
});
|
|
|
|
describe('>= 1.0.0', function () {
|
|
const globalVersion = '5.5.5';
|
|
const vers: [string, boolean][] = [
|
|
// same major/minor run should be compatible
|
|
['5.5.5', true],
|
|
['5.5.6', true],
|
|
['5.5.4', true],
|
|
|
|
// prerelease version should not be compatible
|
|
['5.5.5-rc.0', false],
|
|
|
|
// if our version has a minor version increase, we may try to call methods which don't exist on the global
|
|
['5.6.5', false],
|
|
['5.6.6', false],
|
|
['5.6.4', false],
|
|
|
|
// if the global version is ahead of us by a minor revision, it has at least the methods we know about
|
|
['5.4.5', true],
|
|
['5.4.6', true],
|
|
['5.4.4', true],
|
|
|
|
// major version mismatch is always incompatible
|
|
['6.5.5', false],
|
|
['6.5.6', false],
|
|
['6.5.4', false],
|
|
['6.6.5', false],
|
|
['6.6.6', false],
|
|
['6.6.4', false],
|
|
['6.4.5', false],
|
|
['6.4.6', false],
|
|
['6.4.4', false],
|
|
['4.5.5', false],
|
|
['4.5.6', false],
|
|
['4.5.4', false],
|
|
['4.6.5', false],
|
|
['4.6.6', false],
|
|
['4.6.4', false],
|
|
['4.4.5', false],
|
|
['4.4.6', false],
|
|
['4.4.4', false],
|
|
];
|
|
|
|
test(globalVersion, vers);
|
|
});
|
|
|
|
describe('< 1.0.0', function () {
|
|
const globalVersion = '0.5.5';
|
|
const vers: [string, boolean][] = [
|
|
// same minor/patch should be compatible
|
|
['0.5.5', true],
|
|
|
|
// prerelease version should not be compatible
|
|
['0.5.5-rc.0', false],
|
|
|
|
// if our version has a patch version increase, we may try to call methods which don't exist on the global
|
|
['0.5.6', false],
|
|
|
|
// if the global version is ahead of us by a patch revision, it has at least the methods we know about
|
|
['0.5.4', true],
|
|
|
|
// minor version mismatch is always incompatible
|
|
['0.6.5', false],
|
|
['0.6.6', false],
|
|
['0.6.4', false],
|
|
['0.4.5', false],
|
|
['0.4.6', false],
|
|
['0.4.4', false],
|
|
|
|
// major version mismatch is always incompatible
|
|
['1.5.5', false],
|
|
['1.5.6', false],
|
|
['1.5.4', false],
|
|
['1.6.5', false],
|
|
['1.6.6', false],
|
|
['1.6.4', false],
|
|
['1.4.5', false],
|
|
['1.4.6', false],
|
|
['1.4.4', false],
|
|
];
|
|
|
|
test(globalVersion, vers);
|
|
});
|
|
|
|
describe('global version is prerelease', function () {
|
|
const globalVersion = '1.0.0-rc.3';
|
|
const vers: [string, boolean][] = [
|
|
// must match exactly
|
|
['1.0.0', false],
|
|
['1.0.0-rc.2', false],
|
|
['1.0.0-rc.4', false],
|
|
|
|
['1.0.0-rc.3', true],
|
|
];
|
|
|
|
test(globalVersion, vers);
|
|
});
|
|
});
|
|
|
|
function test(globalVersion: string, vers: [string, boolean][]) {
|
|
describe(`global version is ${globalVersion}`, function () {
|
|
for (const [version, compatible] of vers) {
|
|
it(`API version ${version} ${
|
|
compatible ? 'should' : 'should not'
|
|
} be able to access global`, function () {
|
|
const check = _makeCompatibilityCheck(version);
|
|
assert.strictEqual(check(globalVersion), compatible);
|
|
});
|
|
}
|
|
});
|
|
}
|