text: class Base {
    static #foo = 1;
  
    static getThis() {
      return this.#foo;
    }
  
    static updateThis(val) {
      return (this.#foo = val);
    }
  
    static getClass() {
      return Base.#foo;
    }
  
    static updateClass(val) {
      return (Base.#foo = val);
    }
  }
  
  class Sub1 extends Base {
    static #foo = 2;
  
    static update(val) {
      return (this.#foo = val);
    }
  }
  
  class Sub2 extends Base {}
  
  expect(Base.getThis()).toBe(1);
  expect(Base.getClass()).toBe(1);
  expect(() => Sub1.getThis()).toThrow();
  expect(Sub1.getClass()).toBe(1);
  expect(() => Sub2.getThis()).toThrow();
  expect(Sub2.getClass()).toBe(1);
  
  expect(Sub1.update(3)).toBe(3);
  expect(Base.getThis()).toBe(1);
  expect(Base.getClass()).toBe(1);
  expect(() => Sub1.getThis()).toThrow();
  expect(Sub1.getClass()).toBe(1);
  expect(() => Sub2.getThis()).toThrow();
  expect(Sub2.getClass()).toBe(1);
  
  expect(Base.updateThis(4)).toBe(4);
  expect(Base.getThis()).toBe(4);
  expect(Base.getClass()).toBe(4);
  expect(() => Sub1.getThis()).toThrow();
  expect(Sub1.getClass()).toBe(4);
  expect(() => Sub2.getThis()).toThrow();
  expect(Sub2.getClass()).toBe(4);
  
  expect(Base.updateClass(5)).toBe(5);
  expect(Base.getThis()).toBe(5);
  expect(Base.getClass()).toBe(5);
  expect(() => Sub1.getThis()).toThrow();
  expect(Sub1.getClass()).toBe(5);
  expect(() => Sub2.getThis()).toThrow();
  expect(Sub2.getClass()).toBe(5);
  
  expect(() => Sub2.updateThis(6)).toThrow();
  expect(Sub2.updateClass(7)).toBe(7);
  expect(Base.getThis()).toBe(7);
  expect(Base.getClass()).toBe(7);
  expect(() => Sub1.getThis()).toThrow();
  expect(Sub1.getClass()).toBe(7);
  expect(() => Sub2.getThis()).toThrow();
  expect(Sub2.getClass()).toBe(7);
  