class Base {
  get sound() {
    return 'I am a ' + this.type + '.';
  }
}

class Animal extends Base {}

class Cat extends Animal {
  get type() { return 'cat'; }

  get sound() {
    return super.sound + ' MEOW!';
  }
}

assert.equal(new Cat().sound, 'I am a cat. MEOW!');

class Base {
  get sound() {
    return 'I am a ' + this.type + '.';
  }

  get name() {
    return this._name;
  }

  set name(val) {
    this._name = val;
  }
}

class Animal extends Base {}

class Cat extends Animal {
  get type() { return 'cat'; }

  get sound() {
    return super.sound + ' MEOW!';
  }

  set name(val) {
    super.name = val;
    this._name += ' Cat';
  }
}

var cat = new Cat();

assert.equal(cat.sound, 'I am a cat. MEOW!');
cat.name = 'Nyan';
assert.equal(new Cat().name, 'Nyan Cat');

Add test for failing assignment to super setter.
Add test for failing assignment to super setter.
