]> source.dussan.org Git - svg.js.git/commitdiff
Merge pull request #1238 from gormster/1237-list-expose-builtin-array-methods
authorUlrich-Matthias Schäfer <ulima.ums@googlemail.com>
Sun, 3 Sep 2023 12:35:18 +0000 (14:35 +0200)
committerGitHub <noreply@github.com>
Sun, 3 Sep 2023 12:35:18 +0000 (14:35 +0200)
Allow access to original Array.prototype methods on List prefixed with $

1  2 
spec/spec/types/List.js
src/types/List.js

index a6cab094b382eccb845199784c15933d74f1bb42,21f9cb26425b80bb1b84522b3e2f05111e55bdbe..35c388645ab4b2e9509fe10e631f7452980ede60
@@@ -73,12 -71,39 +73,41 @@@ describe('List.js', () => 
        delete List.prototype.fooBar
      })
  
+     it('keeps Array prototype names prefixed with $', () => {
+       // We're picking a function that we know isn't part of core svg.js
+       // If we implement an 'unshift' function at some point, change this to something else
+       if (List.prototype.hasOwnProperty('unshift')) {
+         fail('List.unshift is already a function - change this test to use a different name!');
+         return;
+       }
+       List.extend([ 'unshift' ])
+       expect(new List().unshift).toEqual(any(Function))
+       expect(new List().$unshift).toEqual(Array.prototype.unshift)
+       // Check that it works!
+       const sourceArray = [
+         { 'unshift': () => 1 },
+         { 'unshift': () => 2 },
+         { 'unshift': () => 3 }
+       ];
+       const list = new List(sourceArray)
+       expect(list).toEqual(sourceArray)
+       expect(list.unshift(0)).toEqual([1,2,3])
+       expect(list.$unshift(0)).toEqual(4)
+       expect(list).toEqual([0].concat(sourceArray))
+       delete List.prototype.unshift;
+     });
      it('skips reserved names', () => {
        const { constructor, each, toArray } = List.prototype
 -      List.extend([ 'constructor', 'each', 'toArray' ])
 -      expect(List.prototype).toEqual(objectContaining({ constructor, each, toArray }))
 +      List.extend(['constructor', 'each', 'toArray'])
 +      expect(List.prototype).toEqual(
 +        objectContaining({ constructor, each, toArray })
 +      )
      })
  
      it('skips private methods starting with an underscore', () => {
Simple merge