text: describe('Suite', function() {
    var env;
  
    beforeEach(function() {
      env = new jasmineUnderTest.Env();
    });
  
    afterEach(function() {
      env.cleanup_();
    });
  
    it('keeps its id', function() {
      var suite = new jasmineUnderTest.Suite({
        env: env,
        id: 456,
        description: 'I am a suite'
      });
  
      expect(suite.id).toEqual(456);
    });
  
    it('returns blank full name for top level suite', function() {
      var suite = new jasmineUnderTest.Suite({
        env: env,
        description: 'I am a suite'
      });
  
      expect(suite.getFullName()).toEqual('');
    });
  
    it('returns its full name when it has parent suites', function() {
      var parentSuite = new jasmineUnderTest.Suite({
          env: env,
          description: 'I am a parent suite',
          parentSuite: jasmine.createSpy('pretend top level suite')
        }),
        suite = new jasmineUnderTest.Suite({
          env: env,
          description: 'I am a suite',
          parentSuite: parentSuite
        });
  
      expect(suite.getFullName()).toEqual('I am a parent suite I am a suite');
    });
  
    it('adds before functions in order of needed execution', function() {
      var suite = new jasmineUnderTest.Suite({
          env: env,
          description: 'I am a suite'
        }),
        outerBefore = jasmine.createSpy('outerBeforeEach'),
        innerBefore = jasmine.createSpy('insideBeforeEach');
  
      suite.beforeEach(outerBefore);
      suite.beforeEach(innerBefore);
  
      expect(suite.beforeFns).toEqual([innerBefore, outerBefore]);
    });
  
    it('adds after functions in order of needed execution', function() {
      var suite = new jasmineUnderTest.Suite({
          env: env,
          description: 'I am a suite'
        }),
        outerAfter = jasmine.createSpy('outerAfterEach'),
        innerAfter = jasmine.createSpy('insideAfterEach');
  
      suite.afterEach(outerAfter);
      suite.afterEach(innerAfter);
  
      expect(suite.afterFns).toEqual([innerAfter, outerAfter]);
    });
  
    it('has a status of failed if any expectations have failed', function() {
      var suite = new jasmineUnderTest.Suite({
        expectationResultFactory: function() {
          return 'hi';
        }
      });
  
      suite.addExpectationResult(false);
      expect(suite.status()).toBe('failed');
    });
  
    it('retrieves a result with updated status', function() {
      var suite = new jasmineUnderTest.Suite({});
  
      expect(suite.getResult().status).toBe('passed');
    });
  
    it('retrieves a result with pending status', function() {
      var suite = new jasmineUnderTest.Suite({});
      suite.pend();
  
      expect(suite.getResult().status).toBe('pending');
    });
  
    it('throws an ExpectationFailed when receiving a failed expectation when throwOnExpectationFailure is set', function() {
      var suite = new jasmineUnderTest.Suite({
        expectationResultFactory: function(data) {
          return data;
        },
        throwOnExpectationFailure: true
      });
  
      expect(function() {
        suite.addExpectationResult(false, 'failed');
      }).toThrowError(jasmineUnderTest.errors.ExpectationFailed);
  
      expect(suite.status()).toBe('failed');
      expect(suite.result.failedExpectations).toEqual(['failed']);
    });
  
    it('does not add an additional failure when an expectation fails', function() {
      var suite = new jasmineUnderTest.Suite({});
  
      suite.onException(new jasmineUnderTest.errors.ExpectationFailed());
  
      expect(suite.getResult().failedExpectations).toEqual([]);
    });
  
    it('calls timer to compute duration', function() {
      var suite = new jasmineUnderTest.Suite({
        env: env,
        id: 456,
        description: 'I am a suite',
        timer: jasmine.createSpyObj('timer', { start: null, elapsed: 77000 })
      });
      suite.startTimer();
      suite.endTimer();
      expect(suite.getResult().duration).toEqual(77000);
    });
  
    describe('#sharedUserContext', function() {
      beforeEach(function() {
        this.suite = new jasmineUnderTest.Suite({});
      });
  
      it('returns a UserContext', function() {
        expect(this.suite.sharedUserContext().constructor).toBe(
          jasmineUnderTest.UserContext
        );
      });
    });
  });
  