text: import { moduleFor, ApplicationTestCase } from 'internal-test-helpers';
  import Application from '@ember/application';
  import { Component } from 'ember-glimmer';
  import { getOwner } from 'ember-owner';
  import { assign } from '@ember/polyfills';
  import { resolve } from 'rsvp';
  
  moduleFor(
    'View Integration',
    class extends ApplicationTestCase {
      constructor() {
        document.getElementById('qunit-fixture').innerHTML = `
        <div id="one"></div>
        <div id="two"></div>
      `;
        super();
        this.runTask(() => {
          this.createSecondApplication();
        });
      }
  
      get applicationOptions() {
        return assign(super.applicationOptions, {
          rootElement: '#one',
          router: null,
        });
      }
  
      createSecondApplication(options) {
        let { applicationOptions } = this;
        let secondApplicationOptions = { rootElement: '#two' };
        let myOptions = assign(applicationOptions, secondApplicationOptions, options);
        this.secondApp = Application.create(myOptions);
        this.secondResolver = this.secondApp.__registry__.resolver;
        return this.secondApp;
      }
  
      teardown() {
        super.teardown();
  
        if (this.secondApp) {
          this.runTask(() => {
            this.secondApp.destroy();
          });
        }
      }
  
      addFactoriesToResolver(actions, resolver) {
        resolver.add(
          'component:special-button',
          Component.extend({
            actions: {
              doStuff() {
                let rootElement = getOwner(this).application.rootElement;
                actions.push(rootElement);
              },
            },
          })
        );
  
        resolver.add(
          'template:index',
          this.compile(
            `
          <h1>Node 1</h1>{{special-button}}
        `,
            {
              moduleName: 'my-app/templates/index.hbs',
            }
          )
        );
        resolver.add(
          'template:components/special-button',
          this.compile(
            `
          <button class='do-stuff' {{action 'doStuff'}}>Button</button>
        `,
            {
              moduleName: 'my-app/templates/components/special-button.hbs',
            }
          )
        );
      }
  
      [`@test booting multiple applications can properly handle events`](assert) {
        let actions = [];
        this.addFactoriesToResolver(actions, this.resolver);
        this.addFactoriesToResolver(actions, this.secondResolver);
  
        return resolve()
          .then(() => this.application.visit('/'))
          .then(() => this.secondApp.visit('/'))
          .then(() => {
            document.querySelector('#two .do-stuff').click();
            document.querySelector('#one .do-stuff').click();
  
            assert.deepEqual(actions, ['#two', '#one']);
          });
      }
    }
  );
  