123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- const test = require('tape')
- const helpers = require('./helpers')
-
- const AST = require('../src/ast')
- const OsloError = require('../src/osloError')
-
- test('list function', t => {
- t.plan(1)
-
- const tree = helpers.evaluate('(list 1 2 3)')
- t.deepEqual(
- tree[0],
- new AST.List({
- elements: [
- new AST.Number({ value: 1, line: 1 }),
- new AST.Number({ value: 2, line: 1 }),
- new AST.Number({ value: 3, line: 1 }),
- ],
- }),
- )
- })
-
- test('length function', t => {
- t.plan(1)
-
- const tree = helpers.evaluate('(length (list 1 2 3))')
- t.deepEqual(tree[0], new AST.Number({ value: 3 }))
- })
-
- test('map', t => {
- t.plan(1)
- const tree = helpers.evaluate(`
- (define my-map
- (lambda (f xs)
- (if (= (length xs) 0)
- (list)
- (cons
- (f (first xs))
- (my-map f (rest xs))))))
-
- (my-map (lambda (x) (+ x 1)) (list 1 2 3))
- `)
- t.deepEqual(
- tree[0],
- new AST.List({
- elements: [
- new AST.Number({ value: 2 }),
- new AST.Number({ value: 3 }),
- new AST.Number({ value: 4 }),
- ],
- }),
- )
- })
-
- test('div', t => {
- t.plan(1)
- const tree = helpers.evaluate('(div :class "hello" "world")')
- t.deepEqual(
- tree[0],
- new AST.HTMLElement({
- name: 'div',
- attributes: [
- new AST.Attribute({
- name: 'class',
- value: new AST.String({ value: 'hello' }),
- })
- ],
- contents: [ new AST.String({ value: 'world' }) ],
- selfClosing: false,
- })
- )
- })
-
- test('nested elements', t => {
- t.plan(1)
- const tree = helpers.evaluate('(div :class "hello" (div :class "world"))')
- t.deepEqual(
- tree[0],
- new AST.HTMLElement({
- name: 'div',
- attributes: [
- new AST.Attribute({
- name: 'class',
- value: new AST.String({ value: 'hello' }),
- }),
- ],
- contents: [
- new AST.HTMLElement({
- name: 'div',
- attributes: [
- new AST.Attribute({
- name: 'class',
- value: new AST.String({ value: 'world' }),
- })
- ],
- contents: [],
- selfClosing: false,
- })
- ],
- selfClosing: false,
- })
- )
- })
-
- test('self closing tag', t => {
- t.plan(1)
- const tree = helpers.evaluate('(img)')
- t.deepEqual(
- tree[0],
- new AST.HTMLElement({
- name: 'img',
- attributes: [],
- contents: [],
- selfClosing: true,
- })
- )
- })
|