Skip to content

Commit

Permalink
Add test for old helpers
Browse files Browse the repository at this point in the history
  • Loading branch information
nicolo-ribaudo committed Feb 6, 2024
1 parent aa8f794 commit 9e97ce6
Show file tree
Hide file tree
Showing 6 changed files with 247 additions and 5 deletions.
13 changes: 11 additions & 2 deletions packages/babel-helper-create-class-features-plugin/src/fields.ts
Expand Up @@ -32,8 +32,17 @@ type PrivateNamesMap = PrivateNamesMapGeneric<PrivateNameMetadata>;

if (!process.env.BABEL_8_BREAKING) {
// eslint-disable-next-line no-var
var newHelpers = (file: File) =>
file.availableHelper("classPrivateFieldGet2");
var newHelpers = (file: File) => {
if (!process.env.IS_PUBLISH) {
const { comments } = file.ast;
// This is needed for the test in
// babel-plugin-transform-class-properties/test/fixtures/regression/old-helpers
if (comments?.some(c => c.value.includes("@force-old-private-helpers"))) {
return false;
}
}
return file.availableHelper("classPrivateFieldGet2");
};
}

export function buildPrivateNamesMap(props: PropPath[], file: File) {
Expand Down
10 changes: 7 additions & 3 deletions packages/babel-helper-fixtures/src/index.ts
Expand Up @@ -49,6 +49,7 @@ export interface Test {
export interface TaskOptions extends InputOptions {
BABEL_8_BREAKING?: boolean;
DO_NOT_SET_SOURCE_TYPE?: boolean;
SKIP_ON_PUBLISH?: boolean;
externalHelpers?: boolean;
ignoreOutput?: boolean;
minNodeVersion?: string;
Expand Down Expand Up @@ -191,9 +192,11 @@ function pushTask(
return;
}

const shouldIgnore = process.env.BABEL_8_BREAKING
? taskOpts.BABEL_8_BREAKING === false
: taskOpts.BABEL_8_BREAKING === true;
const shouldIgnore =
(process.env.BABEL_8_BREAKING
? taskOpts.BABEL_8_BREAKING === false
: taskOpts.BABEL_8_BREAKING === true) ||
(process.env.IS_PUBLISH ? taskOpts.SKIP_ON_PUBLISH : false);

if (shouldIgnore) return;

Expand Down Expand Up @@ -253,6 +256,7 @@ function pushTask(

delete taskOpts.BABEL_8_BREAKING;
delete taskOpts.DO_NOT_SET_SOURCE_TYPE;
delete taskOpts.SKIP_ON_PUBLISH;

// If there's node requirement, check it before pushing task
if (taskOpts.minNodeVersion) {
Expand Down
@@ -0,0 +1,68 @@
// @force-old-private-helpers

let s_s, s_gs, i_s, i_gs;

class A {
static #s_f = 0;
static #s_m() { return 1 }
static get #s_g() { return 2 }
static set #s_s(v) { s_s = v }
static get #s_gs() { return 3 }
static set #s_gs(v) { s_gs = v }

#i_f = 4;
#i_m() { return 5 }
get #i_g() { return 6 }
set #i_s(v) { i_s = v }
get #i_gs() { return 7 }
set #i_gs(v) { i_gs = v }

static read() {
expect(A.#s_f).toBe(0);
expect(A.#s_m()).toBe(1);
expect(A.#s_g).toBe(2);
// expect(() => A.#s_s).toThrow(TypeError); -- This was never implemented properly
expect(A.#s_gs).toBe(3);

const a = new A();
expect(a.#i_f).toBe(4);
expect(a.#i_m()).toBe(5);
expect(a.#i_g).toBe(6);
expect(() => a.#i_s).toThrow(TypeError);
expect(a.#i_gs).toBe(7);
}

static write() {
A.#s_f = 8; expect(A.#s_f).toBe(8);
expect(() => A.#s_m = 0).toThrow(TypeError); expect(A.#s_m()).toBe(1);
expect(() => A.#s_g = 0).toThrow(TypeError); expect(A.#s_g).toBe(2);
A.#s_s = 9; expect(s_s).toBe(9);
A.#s_gs = 10; expect(s_gs).toBe(10);

const a = new A();
a.#i_f = 11; expect(a.#i_f).toBe(11);
expect(() => a.#i_m = 0).toThrow(TypeError); expect(a.#i_m()).toBe(5);
expect(() => a.#i_g = 0).toThrow(TypeError); expect(a.#i_g).toBe(6);
a.#i_s = 12; expect(i_s).toBe(12);
a.#i_gs = 13; expect(i_gs).toBe(13);
}

static write_destructuring() {
[A.#s_f] = [14]; expect(A.#s_f).toBe(14);
expect(() => [A.#s_m] = [0]).toThrow(TypeError); expect(A.#s_m()).toBe(1);
expect(() => [A.#s_g] = [0]).toThrow(TypeError); expect(A.#s_g).toBe(2);
[A.#s_s] = [15]; expect(s_s).toBe(15);
[A.#s_gs] = [16]; expect(s_gs).toBe(16);

const a = new A();
[a.#i_f] = [17]; expect(a.#i_f).toBe(17);
expect(() => [a.#i_m] = [0]).toThrow(TypeError); expect(a.#i_m()).toBe(5);
expect(() => [a.#i_g] = [0]).toThrow(TypeError); expect(a.#i_g).toBe(6);
[a.#i_s] = [18]; expect(i_s).toBe(18);
[a.#i_gs] = [19]; expect(i_gs).toBe(19);
}
}

A.read();
A.write();
A.write_destructuring();
@@ -0,0 +1,62 @@
// @force-old-private-helpers

class A {
static #s_f = 0;
static #s_m() {}
static get #s_g() {}
static set #s_s(v) {}
static get #s_gs() {}
static set #s_gs(v) {}

#i_f = 0;
#i_m() {}
get #i_g() {}
set #i_s(v) {}
get #i_gs() {}
set #i_gs(v) {}

static read() {
A.#s_f;
A.#s_m;
A.#s_g;
A.#s_s;
A.#s_gs;

const a = new A();
a.#i_f;
a.#i_m;
a.#i_g;
a.#i_s;
a.#i_gs;
}

static write() {
A.#s_f = 1;
A.#s_m = 2;
A.#s_g = 3;
A.#s_s = 4;
A.#s_gs = 5;

const a = new A();
a.#i_f = 6;
a.#i_m = 7;
a.#i_g = 8;
a.#i_s = 9;
a.#i_gs = 10;
}

static write_destructuring() {
[A.#s_f] = [1];
[A.#s_m] = [2];
[A.#s_g] = [3];
[A.#s_s] = [4];
[A.#s_gs] = [5];

const a = new A();
[a.#i_f] = [6];
[a.#i_m] = [7];
[a.#i_g] = [8];
[a.#i_s] = [9];
[a.#i_gs] = [10];
}
}
@@ -0,0 +1,6 @@
{
"BABEL_8_BREAKING": false,
"SKIP_ON_PUBLISH": true,
"plugins": ["transform-class-properties", "transform-private-methods"],
"minNodeVersion": "16.0.0"
}
@@ -0,0 +1,93 @@
var _i_f = /*#__PURE__*/new WeakMap();
var _i_m = /*#__PURE__*/new WeakSet();
var _i_g = /*#__PURE__*/new WeakMap();
var _i_s = /*#__PURE__*/new WeakMap();
var _i_gs = /*#__PURE__*/new WeakMap();
// @force-old-private-helpers

class A {
constructor() {
babelHelpers.classPrivateFieldInitSpec(this, _i_gs, {
get: _get_i_gs,
set: _set_i_gs
});
babelHelpers.classPrivateFieldInitSpec(this, _i_s, {
get: void 0,
set: _set_i_s
});
babelHelpers.classPrivateFieldInitSpec(this, _i_g, {
get: _get_i_g,
set: void 0
});
babelHelpers.classPrivateMethodInitSpec(this, _i_m);
babelHelpers.classPrivateFieldInitSpec(this, _i_f, {
writable: true,
value: 0
});
}
static read() {
babelHelpers.classStaticPrivateFieldSpecGet(A, A, _s_f);
babelHelpers.classStaticPrivateMethodGet(A, A, _s_m);
babelHelpers.classStaticPrivateFieldSpecGet(A, A, _s_g);
babelHelpers.classStaticPrivateFieldSpecGet(A, A, _s_s);
babelHelpers.classStaticPrivateFieldSpecGet(A, A, _s_gs);
const a = new A();
babelHelpers.classPrivateFieldGet(a, _i_f);
babelHelpers.classPrivateMethodGet(a, _i_m, _i_m2);
babelHelpers.classPrivateFieldGet(a, _i_g);
a, babelHelpers.writeOnlyError("#i_s");
babelHelpers.classPrivateFieldGet(a, _i_gs);
}
static write() {
babelHelpers.classStaticPrivateFieldSpecSet(A, A, _s_f, 1);
babelHelpers.classStaticPrivateMethodSet(A, A, _s_m, 2);
babelHelpers.classStaticPrivateFieldSpecSet(A, A, _s_g, 3);
babelHelpers.classStaticPrivateFieldSpecSet(A, A, _s_s, 4);
babelHelpers.classStaticPrivateFieldSpecSet(A, A, _s_gs, 5);
const a = new A();
babelHelpers.classPrivateFieldSet(a, _i_f, 6);
a, 7, babelHelpers.readOnlyError("#i_m");
a, 8, babelHelpers.readOnlyError("#i_g");
babelHelpers.classPrivateFieldSet(a, _i_s, 9);
babelHelpers.classPrivateFieldSet(a, _i_gs, 10);
}
static write_destructuring() {
[babelHelpers.classStaticPrivateFieldDestructureSet(A, A, _s_f).value] = [1];
[babelHelpers.classStaticPrivateFieldDestructureSet(A, A, _s_m).value] = [2];
[babelHelpers.classStaticPrivateFieldDestructureSet(A, A, _s_g).value] = [3];
[babelHelpers.classStaticPrivateFieldDestructureSet(A, A, _s_s).value] = [4];
[babelHelpers.classStaticPrivateFieldDestructureSet(A, A, _s_gs).value] = [5];
const a = new A();
[babelHelpers.classPrivateFieldDestructureSet(a, _i_f).value] = [6];
[babelHelpers.classPrivateFieldDestructureSet(a, _i_m).value] = [7];
[babelHelpers.classPrivateFieldDestructureSet(a, _i_g).value] = [8];
[babelHelpers.classPrivateFieldDestructureSet(a, _i_s).value] = [9];
[babelHelpers.classPrivateFieldDestructureSet(a, _i_gs).value] = [10];
}
}
function _s_m() {}
function _get_s_g() {}
function _set_s_s(v) {}
function _get_s_gs() {}
function _set_s_gs(v) {}
function _i_m2() {}
function _get_i_g() {}
function _set_i_s(v) {}
function _get_i_gs() {}
function _set_i_gs(v) {}
var _s_gs = {
get: _get_s_gs,
set: _set_s_gs
};
var _s_s = {
get: void 0,
set: _set_s_s
};
var _s_g = {
get: _get_s_g,
set: void 0
};
var _s_f = {
writable: true,
value: 0
};

0 comments on commit 9e97ce6

Please sign in to comment.