Beispiel #1
0
  describe('title service', () => {
    var initialTitle = DOM.getTitle();
    var titleService = new Title();

    afterEach(() => { DOM.setTitle(initialTitle); });

    it('should allow reading initial title',
       () => { expect(titleService.getTitle()).toEqual(initialTitle); });

    it('should set a title on the injected document', () => {
      titleService.setTitle('test title');
      expect(DOM.getTitle()).toEqual('test title');
      expect(titleService.getTitle()).toEqual('test title');
    });

    it('should reset title to empty string if title not provided', () => {
      titleService.setTitle(null);
      expect(DOM.getTitle()).toEqual('');
    });

  });
    describe('DefaultKeyValueDiffer', function() {
      var differ;
      var m: Map<any, any>;

      beforeEach(() => {
        differ = new DefaultKeyValueDiffer();
        m = new Map();
      });

      afterEach(() => { differ = null; });

      it('should detect additions', () => {
        differ.check(m);

        m.set('a', 1);
        differ.check(m);
        expect(differ.toString())
            .toEqual(kvChangesAsString({map: ['a[null->1]'], additions: ['a[null->1]']}));

        m.set('b', 2);
        differ.check(m);
        expect(differ.toString())
            .toEqual(kvChangesAsString(
                {map: ['a', 'b[null->2]'], previous: ['a'], additions: ['b[null->2]']}));
      });

      it('should handle changing key/values correctly', () => {
        m.set(1, 10);
        m.set(2, 20);
        differ.check(m);

        m.set(2, 10);
        m.set(1, 20);
        differ.check(m);
        expect(differ.toString())
            .toEqual(kvChangesAsString({
              map: ['1[10->20]', '2[20->10]'],
              previous: ['1[10->20]', '2[20->10]'],
              changes: ['1[10->20]', '2[20->10]']
            }));
      });

      it('should expose previous and current value', () => {
        var previous, current;

        m.set(1, 10);
        differ.check(m);

        m.set(1, 20);
        differ.check(m);

        differ.forEachChangedItem((record) => {
          previous = record.previousValue;
          current = record.currentValue;
        });

        expect(previous).toEqual(10);
        expect(current).toEqual(20);
      });

      it('should do basic map watching', () => {
        differ.check(m);

        m.set('a', 'A');
        differ.check(m);
        expect(differ.toString())
            .toEqual(kvChangesAsString({map: ['a[null->A]'], additions: ['a[null->A]']}));

        m.set('b', 'B');
        differ.check(m);
        expect(differ.toString())
            .toEqual(kvChangesAsString(
                {map: ['a', 'b[null->B]'], previous: ['a'], additions: ['b[null->B]']}));

        m.set('b', 'BB');
        m.set('d', 'D');
        differ.check(m);
        expect(differ.toString())
            .toEqual(kvChangesAsString({
              map: ['a', 'b[B->BB]', 'd[null->D]'],
              previous: ['a', 'b[B->BB]'],
              additions: ['d[null->D]'],
              changes: ['b[B->BB]']
            }));

        m.delete('b');
        differ.check(m);
        expect(differ.toString())
            .toEqual(kvChangesAsString(
                {map: ['a', 'd'], previous: ['a', 'b[BB->null]', 'd'], removals: ['b[BB->null]']}));

        m.clear();
        differ.check(m);
        expect(differ.toString())
            .toEqual(kvChangesAsString(
                {previous: ['a[A->null]', 'd[D->null]'], removals: ['a[A->null]', 'd[D->null]']}));
      });

      it('should test string by value rather than by reference (DART)', () => {
        m.set('foo', 'bar');
        differ.check(m);

        var f = 'f';
        var oo = 'oo';
        var b = 'b';
        var ar = 'ar';

        m.set(f + oo, b + ar);
        differ.check(m);

        expect(differ.toString()).toEqual(kvChangesAsString({map: ['foo'], previous: ['foo']}));
      });

      it('should not see a NaN value as a change (JS)', () => {
        m.set('foo', NumberWrapper.NaN);
        differ.check(m);

        differ.check(m);
        expect(differ.toString()).toEqual(kvChangesAsString({map: ['foo'], previous: ['foo']}));
      });

      // JS specific tests (JS Objects)
      if (isJsObject({})) {
        describe('JsObject changes', () => {
          it('should support JS Object', () => {
            var f = new DefaultKeyValueDifferFactory();
            expect(f.supports({})).toBeTruthy();
            expect(f.supports("not supported")).toBeFalsy();
            expect(f.supports(0)).toBeFalsy();
            expect(f.supports(null)).toBeFalsy();
          });

          it('should do basic object watching', () => {
            let m = {};
            differ.check(m);

            m['a'] = 'A';
            differ.check(m);
            expect(differ.toString())
                .toEqual(kvChangesAsString({map: ['a[null->A]'], additions: ['a[null->A]']}));

            m['b'] = 'B';
            differ.check(m);
            expect(differ.toString())
                .toEqual(kvChangesAsString(
                    {map: ['a', 'b[null->B]'], previous: ['a'], additions: ['b[null->B]']}));

            m['b'] = 'BB';
            m['d'] = 'D';
            differ.check(m);
            expect(differ.toString())
                .toEqual(kvChangesAsString({
                  map: ['a', 'b[B->BB]', 'd[null->D]'],
                  previous: ['a', 'b[B->BB]'],
                  additions: ['d[null->D]'],
                  changes: ['b[B->BB]']
                }));

            m = {};
            m['a'] = 'A';
            m['d'] = 'D';
            differ.check(m);
            expect(differ.toString())
                .toEqual(kvChangesAsString({
                  map: ['a', 'd'],
                  previous: ['a', 'b[BB->null]', 'd'],
                  removals: ['b[BB->null]']
                }));

            m = {};
            differ.check(m);
            expect(differ.toString())
                .toEqual(kvChangesAsString({
                  previous: ['a[A->null]', 'd[D->null]'],
                  removals: ['a[A->null]', 'd[D->null]']
                }));
          });
        });

        describe('diff', () => {
          it('should return self when there is a change', () => {
            m.set('a', 'A');
            expect(differ.diff(m)).toBe(differ);
          });

          it('should return null when there is no change', () => {
            m.set('a', 'A');
            differ.diff(m);
            expect(differ.diff(m)).toEqual(null);
          });

          it('should treat null as an empty list', () => {
            m.set('a', 'A');
            differ.diff(m);
            expect(differ.diff(null).toString())
                .toEqual(kvChangesAsString({previous: ['a[A->null]'], removals: ['a[A->null]']}));
          });

          it('should throw when given an invalid collection', () => {
            expect(() => differ.diff("invalid")).toThrowErrorWith("Error trying to diff 'invalid'");
          });
        });
      }
    });