diff --git a/benchmark/demo.ts b/benchmark/demo.ts index 986dd47e1..b71093666 100644 --- a/benchmark/demo.ts +++ b/benchmark/demo.ts @@ -1,7 +1,7 @@ import * as Benchmark from 'benchmark' import Liquid from '../src/liquid' import TagToken from '../src/parser/tag-token' -import Scope from '../src/scope/scope' +import Context from '../src/context/context' const engine = new Liquid({ root: __dirname, @@ -13,8 +13,8 @@ engine.registerTag('header', { const [key, val] = token.args.split(':') this[key] = val }, - render: function (scope: Scope) { - const title = this.liquid.evalValue(this.content, scope) + render: function (ctx: Context) { + const title = this.liquid.evalValue(this.content, ctx) return `
' } as Token const html = await render.renderTemplates([new HTML(token)], scope) return expect(html).to.equal('
') diff --git a/test/unit/render/syntax.ts b/test/unit/render/syntax.ts index 486bf1869..4b894ec12 100644 --- a/test/unit/render/syntax.ts +++ b/test/unit/render/syntax.ts @@ -1,12 +1,12 @@ -import Scope from '../../../src/scope/scope' +import Context from '../../../src/context/context' import { expect } from 'chai' import { evalExp, evalValue, isTruthy } from '../../../src/render/syntax' describe('render/syntax', function () { - let scope: Scope + let ctx: Context beforeEach(function () { - scope = new Scope({ + ctx = new Context({ one: 1, two: 2, empty: '', @@ -19,30 +19,30 @@ describe('render/syntax', function () { describe('.evalValue()', function () { it('should eval boolean literal', async function () { - expect(await evalValue('true', scope)).to.equal(true) - expect(await evalValue('TrUE', scope)).to.equal(undefined) - expect(await evalValue('false', scope)).to.equal(false) + expect(await evalValue('true', ctx)).to.equal(true) + expect(await evalValue('TrUE', ctx)).to.equal(undefined) + expect(await evalValue('false', ctx)).to.equal(false) }) it('should eval number literal', async function () { - expect(await evalValue('2.3', scope)).to.equal(2.3) - expect(await evalValue('.32', scope)).to.equal(0.32) - expect(await evalValue('-23.', scope)).to.equal(-23) - expect(await evalValue('23', scope)).to.equal(23) + expect(await evalValue('2.3', ctx)).to.equal(2.3) + expect(await evalValue('.32', ctx)).to.equal(0.32) + expect(await evalValue('-23.', ctx)).to.equal(-23) + expect(await evalValue('23', ctx)).to.equal(23) }) it('should eval string literal', async function () { - expect(await evalValue('"ab\'c"', scope)).to.equal("ab'c") - expect(await evalValue("'ab\"c'", scope)).to.equal('ab"c') + expect(await evalValue('"ab\'c"', ctx)).to.equal("ab'c") + expect(await evalValue("'ab\"c'", ctx)).to.equal('ab"c') }) it('should eval nil literal', async function () { - expect(await evalValue('nil', scope)).to.be.null + expect(await evalValue('nil', ctx)).to.be.null }) it('should eval null literal', async function () { - expect(await evalValue('null', scope)).to.be.null + expect(await evalValue('null', ctx)).to.be.null }) it('should eval scope variables', async function () { - expect(await evalValue('one', scope)).to.equal(1) - expect(await evalValue('has_value?', scope)).to.equal(true) - expect(await evalValue('x', scope)).to.equal('XXX') + expect(await evalValue('one', ctx)).to.equal(1) + expect(await evalValue('has_value?', ctx)).to.equal(true) + expect(await evalValue('x', ctx)).to.equal('XXX') }) }) @@ -66,37 +66,37 @@ describe('render/syntax', function () { }) it('should eval simple expression', async function () { - expect(await evalExp('1<2', scope)).to.equal(true) - expect(await evalExp('2<=2', scope)).to.equal(true) - expect(await evalExp('one<=two', scope)).to.equal(true) - expect(await evalExp('x contains "x"', scope)).to.equal(false) - expect(await evalExp('x contains "X"', scope)).to.equal(true) - expect(await evalExp('1 contains "x"', scope)).to.equal(false) - expect(await evalExp('y contains "x"', scope)).to.equal(false) - expect(await evalExp('z contains "x"', scope)).to.equal(false) - expect(await evalExp('(1..5) contains 3', scope)).to.equal(true) - expect(await evalExp('(1..5) contains 6', scope)).to.equal(false) - expect(await evalExp('"<=" == "<="', scope)).to.equal(true) + expect(await evalExp('1<2', ctx)).to.equal(true) + expect(await evalExp('2<=2', ctx)).to.equal(true) + expect(await evalExp('one<=two', ctx)).to.equal(true) + expect(await evalExp('x contains "x"', ctx)).to.equal(false) + expect(await evalExp('x contains "X"', ctx)).to.equal(true) + expect(await evalExp('1 contains "x"', ctx)).to.equal(false) + expect(await evalExp('y contains "x"', ctx)).to.equal(false) + expect(await evalExp('z contains "x"', ctx)).to.equal(false) + expect(await evalExp('(1..5) contains 3', ctx)).to.equal(true) + expect(await evalExp('(1..5) contains 6', ctx)).to.equal(false) + expect(await evalExp('"<=" == "<="', ctx)).to.equal(true) }) describe('complex expression', function () { it('should support value or value', async function () { - expect(await evalExp('false or true', scope)).to.equal(true) + expect(await evalExp('false or true', ctx)).to.equal(true) }) it('should support < and contains', async function () { - expect(await evalExp('1<2 and x contains "x"', scope)).to.equal(false) + expect(await evalExp('1<2 and x contains "x"', ctx)).to.equal(false) }) it('should support < or contains', async function () { - expect(await evalExp('1<2 or x contains "x"', scope)).to.equal(true) + expect(await evalExp('1<2 or x contains "x"', ctx)).to.equal(true) }) it('should support value and !=', async function () { - expect(await evalExp('empty and empty != ""', scope)).to.equal(false) + expect(await evalExp('empty and empty != ""', ctx)).to.equal(false) }) }) it('should eval range expression', async function () { - expect(await evalExp('(2..4)', scope)).to.deep.equal([2, 3, 4]) - expect(await evalExp('(two..4)', scope)).to.deep.equal([2, 3, 4]) + expect(await evalExp('(2..4)', ctx)).to.deep.equal([2, 3, 4]) + expect(await evalExp('(two..4)', ctx)).to.deep.equal([2, 3, 4]) }) }) }) diff --git a/test/unit/template/filter/filter.ts b/test/unit/template/filter/filter.ts index 7293313bc..db05f5e3b 100644 --- a/test/unit/template/filter/filter.ts +++ b/test/unit/template/filter/filter.ts @@ -2,16 +2,16 @@ import * as chai from 'chai' import * as sinon from 'sinon' import * as sinonChai from 'sinon-chai' import { Filter } from '../../../../src/template/filter/filter' -import Scope from '../../../../src/scope/scope' +import Context from '../../../../src/context/context' chai.use(sinonChai) const expect = chai.expect describe('filter', function () { - let scope: Scope + let ctx: Context beforeEach(function () { Filter.clear() - scope = new Scope() + ctx = new Context() }) it('should create default filter if not registered', async function () { const result = new Filter('foo', [], false) @@ -19,28 +19,28 @@ describe('filter', function () { }) it('should render input if filter not registered', async function () { - expect(await new Filter('undefined', [], false).render('foo', scope)).to.equal('foo') + expect(await new Filter('undefined', [], false).render('foo', ctx)).to.equal('foo') }) it('should call filter impl with corrct arguments', async function () { const spy = sinon.spy() Filter.register('foo', spy) - await new Filter('foo', ['33'], false).render('foo', scope) + await new Filter('foo', ['33'], false).render('foo', ctx) expect(spy).to.have.been.calledWith('foo', 33) }) it('should render a simple filter', async function () { Filter.register('upcase', x => x.toUpperCase()) - expect(await new Filter('upcase', [], false).render('foo', scope)).to.equal('FOO') + expect(await new Filter('upcase', [], false).render('foo', ctx)).to.equal('FOO') }) it('should render filters with argument', async function () { Filter.register('add', (a, b) => a + b) - expect(await new Filter('add', ['2'], false).render(3, scope)).to.equal(5) + expect(await new Filter('add', ['2'], false).render(3, ctx)).to.equal(5) }) it('should render filters with multiple arguments', async function () { Filter.register('add', (a, b, c) => a + b + c) - expect(await new Filter('add', ['2', '"c"'], false).render(3, scope)).to.equal('5c') + expect(await new Filter('add', ['2', '"c"'], false).render(3, ctx)).to.equal('5c') }) it('should not throw when filter name illegal', function () { diff --git a/test/unit/template/output.ts b/test/unit/template/output.ts index b4dad3c28..e4c26e6a0 100644 --- a/test/unit/template/output.ts +++ b/test/unit/template/output.ts @@ -1,5 +1,5 @@ import * as chai from 'chai' -import Scope from '../../../src/scope/scope' +import Context from '../../../src/context/context' import Output from '../../../src/template/output' import OutputToken from '../../../src/parser/output-token' import { Filter } from '../../../src/template/filter/filter' @@ -12,7 +12,7 @@ describe('Output', function () { }) it('should stringify objects', async function () { - const scope = new Scope({ + const scope = new Context({ foo: { obj: { arr: ['a', 2] } } }) const output = new Output({ value: 'foo' } as OutputToken, false) @@ -20,19 +20,19 @@ describe('Output', function () { return expect(html).to.equal('[object Object]') }) it('should skip function property', async function () { - const scope = new Scope({ obj: { foo: 'foo', bar: (x: any) => x } }) + const scope = new Context({ obj: { foo: 'foo', bar: (x: any) => x } }) const output = new Output({ value: 'obj' } as OutputToken, false) const html = await output.render(scope) return expect(html).to.equal('[object Object]') }) it('should respect to .toString()', async () => { - const scope = new Scope({ obj: { toString: () => 'FOO' } }) + const scope = new Context({ obj: { toString: () => 'FOO' } }) const output = new Output({ value: 'obj' } as OutputToken, false) const str = await output.render(scope) return expect(str).to.equal('FOO') }) it('should respect to .toString()', async () => { - const scope = new Scope({ obj: { toString: () => 'FOO' } }) + const scope = new Context({ obj: { toString: () => 'FOO' } }) const output = new Output({ value: 'obj' } as OutputToken, false) const str = await output.render(scope) return expect(str).to.equal('FOO') diff --git a/test/unit/template/tag.ts b/test/unit/template/tag.ts index 4dc674b12..8d13f389b 100644 --- a/test/unit/template/tag.ts +++ b/test/unit/template/tag.ts @@ -1,6 +1,6 @@ import * as chai from 'chai' import Tag from '../../../src/template/tag/tag' -import Scope from '../../../src/scope/scope' +import Context from '../../../src/context/context' import * as sinon from 'sinon' import * as sinonChai from 'sinon-chai' import Liquid from '../../../src/liquid' @@ -11,9 +11,9 @@ const expect = chai.expect const liquid = new Liquid() describe('tag', function () { - let scope: Scope + let ctx: Context before(function () { - scope = new Scope({ + ctx = new Context({ foo: 'bar', arr: [2, 1], bar: { @@ -51,7 +51,7 @@ describe('tag', function () { value: 'foo', name: 'foo' } as TagToken - await new Tag(token, [], liquid).render(scope) + await new Tag(token, [], liquid).render(ctx) expect(spy).to.have.been.called }) @@ -70,30 +70,30 @@ describe('tag', function () { } as TagToken }) it('should call tag.render with scope', async function () { - await new Tag(token, [], liquid).render(scope) - expect(spy).to.have.been.calledWithMatch(scope) + await new Tag(token, [], liquid).render(ctx) + expect(spy).to.have.been.calledWithMatch(ctx) }) it('should resolve identifier hash', async function () { - await new Tag(token, [], liquid).render(scope) + await new Tag(token, [], liquid).render(ctx) expect(spy).to.have.been.calledWithMatch({}, { aa: 'bar' }) }) it('should accept space between key/value', async function () { - await new Tag(token, [], liquid).render(scope) + await new Tag(token, [], liquid).render(ctx) expect(spy).to.have.been.calledWithMatch({}, { bb: 2 }) }) it('should resolve number value hash', async function () { - await new Tag(token, [], liquid).render(scope) - expect(spy).to.have.been.calledWithMatch(scope, { + await new Tag(token, [], liquid).render(ctx) + expect(spy).to.have.been.calledWithMatch(ctx, { cc: 2.3 }) }) it('should resolve property access hash', async function () { - await new Tag(token, [], liquid).render(scope) - expect(spy).to.have.been.calledWithMatch(scope, { + await new Tag(token, [], liquid).render(ctx) + expect(spy).to.have.been.calledWithMatch(ctx, { dd: 'uoo' }) }) diff --git a/test/unit/template/value.ts b/test/unit/template/value.ts index 760832579..381b29173 100644 --- a/test/unit/template/value.ts +++ b/test/unit/template/value.ts @@ -1,7 +1,7 @@ import * as chai from 'chai' import * as sinonChai from 'sinon-chai' import * as sinon from 'sinon' -import Scope from '../../../src/scope/scope' +import Context from '../../../src/context/context' import { Filter } from '../../../src/template/filter/filter' import Value from '../../../src/template/value' @@ -105,7 +105,7 @@ describe('Value', function () { Filter.register('date', date) Filter.register('time', time) const tpl = new Value('foo.bar | date: "b" | time:2', false) - const scope = new Scope({ + const scope = new Context({ foo: { bar: 'bar' } }) await tpl.value(scope)