').nodes)).toContain([
        // TODO(ayazhafiz): The expression parser includes an extra whitespace on a expressions
        // with trailing whitespace in a pipe. Look into fixing this.
        'prop', new AbsoluteSourceSpan(7, 12)
      ]);
    });
  });
  it('should provide absolute offsets of a property read', () => {
    expect(humanizeExpressionSource(parse('
{{prop}}
').nodes)).toContain([
      'prop', new AbsoluteSourceSpan(7, 11)
    ]);
  });
  describe('property write', () => {
    it('should provide absolute offsets of a property write', () => {
      expect(humanizeExpressionSource(parse('
').nodes)).toContain([
        'prop = 0', new AbsoluteSourceSpan(14, 22)
      ]);
    });
    it('should provide absolute offsets of expressions in a property write', () => {
      expect(humanizeExpressionSource(parse('
').nodes)).toContain([
        '0', new AbsoluteSourceSpan(21, 22)
      ]);
    });
  });
  describe('"not" prefix', () => {
    it('should provide absolute offsets of a "not" prefix', () => {
      expect(humanizeExpressionSource(parse('
{{!prop}}
').nodes)).toContain([
        '!prop', new AbsoluteSourceSpan(7, 12)
      ]);
    });
    it('should provide absolute offsets of expressions in a "not" prefix', () => {
      expect(humanizeExpressionSource(parse('
{{!prop}}
').nodes)).toContain([
        'prop', new AbsoluteSourceSpan(8, 12)
      ]);
    });
  });
  describe('safe method call', () => {
    it('should provide absolute offsets of a safe method call', () => {
      expect(humanizeExpressionSource(parse('
{{prop?.safe()}}
').nodes)).toContain([
        'prop?.safe()', new AbsoluteSourceSpan(7, 19)
      ]);
    });
    it('should provide absolute offsets of expressions in safe method call', () => {
      expect(humanizeExpressionSource(parse('
{{prop?.safe()}}
').nodes)).toContain([
        'prop', new AbsoluteSourceSpan(7, 11)
      ]);
    });
  });
  describe('safe property read', () => {
    it('should provide absolute offsets of a safe property read', () => {
      expect(humanizeExpressionSource(parse('
{{prop?.safe}}
').nodes)).toContain([
        'prop?.safe', new AbsoluteSourceSpan(7, 17)
      ]);
    });
    it('should provide absolute offsets of expressions in safe property read', () => {
      expect(humanizeExpressionSource(parse('
{{prop?.safe}}
').nodes)).toContain([
        'prop', new AbsoluteSourceSpan(7, 11)
      ]);
    });
  });
  it('should provide absolute offsets of a quote', () => {
    expect(humanizeExpressionSource(parse('
').nodes)).toContain([
      'a:b', new AbsoluteSourceSpan(13, 16)
    ]);
  });
});