diff --git a/src/builtin/filters/array.ts b/src/builtin/filters/array.ts index 05749cb5e..6033b7ce4 100644 --- a/src/builtin/filters/array.ts +++ b/src/builtin/filters/array.ts @@ -6,7 +6,7 @@ export default { 'last': (v: T[]): T => last(v), 'first': (v: T[]): T => v[0], 'map': (arr: {[key: string]: T1}[], arg: string): T1[] => arr.map(v => v[arg]), - 'reverse': (v: any[]) => v.reverse(), + 'reverse': (v: any[]) => [...v].reverse(), 'sort': (v: T[], arg: (lhs: T, rhs: T) => number) => v.sort(arg), 'size': (v: string | any[]) => v.length, 'concat': (v: T1[], arg: T2[] | T2): Array => Array.prototype.concat.call(v, arg), diff --git a/test/integration/builtin/filters/array.ts b/test/integration/builtin/filters/array.ts index cc10f8c14..c2a5b0831 100644 --- a/test/integration/builtin/filters/array.ts +++ b/test/integration/builtin/filters/array.ts @@ -1,6 +1,12 @@ import { test } from '../../../stub/render' +import Liquid from '../../../../src/liquid' +import {expect} from 'chai' describe('filters/array', function () { + let liquid: Liquid + beforeEach(function () { + liquid = new Liquid() + }) describe('join', function () { it('should support join', function () { const src = '{% assign beatles = "John, Paul, George, Ringo" | split: ", " %}' + @@ -21,9 +27,17 @@ describe('filters/array', function () { it('should support map', function () { return test('{{posts | map: "category"}}', 'foo,bar') }) - it('should support reverse', function () { - return test('{{ "Ground control to Major Tom." | split: "" | reverse | join: "" }}', - '.moT rojaM ot lortnoc dnuorG') + describe('reverse', function () { + it('should support reverse', async function () { + const html = await liquid.parseAndRender('{{ "Ground control to Major Tom." | split: "" | reverse | join: "" }}') + expect(html).to.equal('.moT rojaM ot lortnoc dnuorG') + }) + it('should be pure', async function () { + const scope = {arr: ['a', 'b', 'c']} + await liquid.parseAndRender('{{ arr | reverse | join: "" }}', scope) + const html = await liquid.parseAndRender('{{ arr | join: "" }}', scope) + expect(html).to.equal('abc') + }) }) describe('size', function () { it('should return string length',