Trail
        </div>
      );
    }
    ReactNoop.render(<Foo useClass={true} />);
    ReactNoop.flush();
    expect(ReactNoop.getChildren()).toEqual([div(span('Class'), 'Trail')]);
    expect(unmounted).toBe(false);
    ReactNoop.render(<Foo useFunction={true} />);
    ReactNoop.flush();
    expect(ReactNoop.getChildren()).toEqual([div(span('Function'), 'Trail')]);
    expect(unmounted).toBe(true);
    ReactNoop.render(<Foo useText={true} />);
    ReactNoop.flush();
    expect(ReactNoop.getChildren()).toEqual([div('Text', 'Trail')]);
    ReactNoop.render(<Foo />);
    ReactNoop.flush();
    expect(ReactNoop.getChildren()).toEqual([div('Trail')]);
  });
  it('can delete a child that changes type - explicit keys', function() {
    let unmounted = false;
    class ClassComponent extends React.Component {
      componentWillUnmount() {
        unmounted = true;
      }
      render() {
        return <span prop="Class" />;
      }
    }
    function FunctionalComponent(props) {