From 357b7c096af81d7650ddc0d948f05e975d69d593 Mon Sep 17 00:00:00 2001 From: Joel Thoms Date: Wed, 19 Sep 2018 23:19:40 -0700 Subject: [PATCH 1/2] add coveralls badge --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 87350b0..918483f 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# MojiScript ![project:experimental](https://img.shields.io/badge/project-experimental-orange.svg) [![build status](https://travis-ci.org/joelnet/MojiScript.svg?branch=master)](https://travis-ci.org/joelnet/MojiScript) +# MojiScript ![project:experimental](https://img.shields.io/badge/project-experimental-orange.svg) [![build status](https://travis-ci.org/joelnet/MojiScript.svg?branch=master)](https://travis-ci.org/joelnet/MojiScript) [![Coverage Status](https://coveralls.io/repos/github/joelnet/MojiScript/badge.svg?branch=master)](https://coveralls.io/github/joelnet/MojiScript?branch=master) MojiScript is an Async First, experimental, opinionated, and functional language designed to have 100% compatibility with EcmaScript. This will allow full access to JavaScript modules (NPM) and all tooling already available to JavaScript. This means that MojiScript language features can run in any JavaScript application and vice-versa. From 66096e76bee261b31713e8f87483657a0894b678 Mon Sep 17 00:00:00 2001 From: Joel Thoms Date: Thu, 20 Sep 2018 00:17:31 -0700 Subject: [PATCH 2/2] add unit tests --- combinators/__tests__/I.test.js | 9 +++++++++ combinators/__tests__/K.test.js | 9 +++++++++ combinators/__tests__/S.test.js | 11 +++++++++++ combinators/__tests__/W.test.js | 10 ++++++++++ console/__tests__/error.test.js | 19 ++++++++++++++++++ console/__tests__/log.test.js | 19 ++++++++++++++++++ console/__tests__/logF.test..js | 21 ++++++++++++++++++++ core/__tests__/after.test.js | 32 +++++++++++++++++++++++++++++++ core/__tests__/unless.test.js | 19 ++++++++++++++++++ core/__tests__/when.test.js | 19 ++++++++++++++++++ string/__tests__/append.test.js | 21 ++++++++++++++++++++ string/__tests__/prepend.test.js | 21 ++++++++++++++++++++ string/__tests__/replace.test.js | 9 +++++++++ string/__tests__/template.test.js | 7 +++++++ threading/fork.js | 6 ------ 15 files changed, 226 insertions(+), 6 deletions(-) create mode 100644 combinators/__tests__/I.test.js create mode 100644 combinators/__tests__/K.test.js create mode 100644 combinators/__tests__/S.test.js create mode 100644 combinators/__tests__/W.test.js create mode 100644 console/__tests__/error.test.js create mode 100644 console/__tests__/log.test.js create mode 100644 console/__tests__/logF.test..js create mode 100644 core/__tests__/after.test.js create mode 100644 core/__tests__/unless.test.js create mode 100644 core/__tests__/when.test.js create mode 100644 string/__tests__/append.test.js create mode 100644 string/__tests__/prepend.test.js create mode 100644 string/__tests__/replace.test.js delete mode 100644 threading/fork.js diff --git a/combinators/__tests__/I.test.js b/combinators/__tests__/I.test.js new file mode 100644 index 0000000..2d22302 --- /dev/null +++ b/combinators/__tests__/I.test.js @@ -0,0 +1,9 @@ +const I = require('../I') + +describe('combinators/I', () => { + test('returns value', () => { + const expected = 888 + const actual = I (expected) + expect(actual).toBe(expected) + }) +}) diff --git a/combinators/__tests__/K.test.js b/combinators/__tests__/K.test.js new file mode 100644 index 0000000..399a759 --- /dev/null +++ b/combinators/__tests__/K.test.js @@ -0,0 +1,9 @@ +const K = require('../K') + +describe('combinators/K', () => { + test('returns value', () => { + const expected = 888 + const actual = K (expected) (666) + expect(actual).toBe(expected) + }) +}) diff --git a/combinators/__tests__/S.test.js b/combinators/__tests__/S.test.js new file mode 100644 index 0000000..45f677e --- /dev/null +++ b/combinators/__tests__/S.test.js @@ -0,0 +1,11 @@ +const S = require('../S') + +describe('combinators/S', () => { + test('returns value', () => { + const expected = 30 + const f = a => b => a + b + const g = a => a * 2 + const actual = S (f) (g) (10) + expect(actual).toBe(expected) + }) +}) diff --git a/combinators/__tests__/W.test.js b/combinators/__tests__/W.test.js new file mode 100644 index 0000000..25c390b --- /dev/null +++ b/combinators/__tests__/W.test.js @@ -0,0 +1,10 @@ +const W = require('../W') + +describe('combinators/W', () => { + test('returns value', () => { + const expected = 888 + const f = a => b => a + b + const actual = W (f) (444) + expect(actual).toBe(expected) + }) +}) diff --git a/console/__tests__/error.test.js b/console/__tests__/error.test.js new file mode 100644 index 0000000..153ad44 --- /dev/null +++ b/console/__tests__/error.test.js @@ -0,0 +1,19 @@ +const error = require('../error') + +describe('console/error', () => { + beforeEach(() => jest.spyOn(global.console, 'error').mockImplementation(() => {})) + afterEach(() => global.console.error.mockReset()) + + test('calls console.error', () => { + const expected = 888 + error (expected) + const actual = global.console.error.mock.calls[0][0] + expect(actual).toBe(expected) + }) + + test('returns original value', () => { + const expected = 888 + const actual = error (expected) + expect(actual).toBe(expected) + }) +}) diff --git a/console/__tests__/log.test.js b/console/__tests__/log.test.js new file mode 100644 index 0000000..4af1277 --- /dev/null +++ b/console/__tests__/log.test.js @@ -0,0 +1,19 @@ +const log = require('../log') + +describe('console/log', () => { + beforeEach(() => jest.spyOn(global.console, 'log').mockImplementation(() => {})) + afterEach(() => global.console.log.mockReset()) + + test('calls console.log', () => { + const expected = 888 + log (expected) + const actual = global.console.log.mock.calls[0][0] + expect(actual).toBe(expected) + }) + + test('returns original value', () => { + const expected = 888 + const actual = log (expected) + expect(actual).toBe(expected) + }) +}) diff --git a/console/__tests__/logF.test..js b/console/__tests__/logF.test..js new file mode 100644 index 0000000..c9a041d --- /dev/null +++ b/console/__tests__/logF.test..js @@ -0,0 +1,21 @@ +const logF = require('../logF') + +describe('console/logF', () => { + beforeEach(() => jest.spyOn(global.console, 'log').mockImplementation(() => {})) + afterEach(() => global.console.log.mockReset()) + + const double = x => x * 2 + + test('calls console.log', () => { + const expected = 888 + logF (double) (444) + const actual = global.console.log.mock.calls[0][0] + expect(actual).toBe(expected) + }) + + test('returns original value', () => { + const expected = 888 + const actual = logF (double) (expected) + expect(actual).toBe(expected) + }) +}) diff --git a/core/__tests__/after.test.js b/core/__tests__/after.test.js new file mode 100644 index 0000000..d66cd79 --- /dev/null +++ b/core/__tests__/after.test.js @@ -0,0 +1,32 @@ +const after = require('../after') + +describe('core/after', () => { + test('value sent to f', async () => { + expect.assertions(1) + const expected = 888 + const f = jest.fn() + const g = jest.fn() + await after (f) (g) (expected) + const actual = f.mock.calls[0][0] + expect(actual).toBe(expected) + }) + + test('value sent to g', async () => { + expect.assertions(1) + const expected = 888 + const f = jest.fn() + const g = jest.fn() + await after (f) (g) (expected) + const actual = g.mock.calls[0][0] + expect(actual).toBe(expected) + }) + + test('returns g(x)', async () => { + expect.assertions(1) + const expected = 888 + const f = jest.fn() + const g = x => x * 2 + const actual = after (f) (g) (444) + expect(actual).resolves.toBe(expected) + }) +}) diff --git a/core/__tests__/unless.test.js b/core/__tests__/unless.test.js new file mode 100644 index 0000000..15231ee --- /dev/null +++ b/core/__tests__/unless.test.js @@ -0,0 +1,19 @@ +const unless = require('../unless') + +describe('core/unless', () => { + const isOdd = num => num % 2 !== 0 + const isEven = num => num % 2 === 0 + const double = num => num * 2 + + test('match calls function', () => { + const expected = 888 + const actual = unless (isOdd) (double) (444) + expect(actual).toBe(expected) + }) + + test('no match returns value', () => { + const expected = 888 + const actual = unless (isEven) (double) (expected) + expect(actual).toBe(expected) + }) +}) diff --git a/core/__tests__/when.test.js b/core/__tests__/when.test.js new file mode 100644 index 0000000..25dd4cc --- /dev/null +++ b/core/__tests__/when.test.js @@ -0,0 +1,19 @@ +const when = require('../when') + +describe('core/when', () => { + const isOdd = num => num % 2 !== 0 + const isEven = num => num % 2 === 0 + const double = num => num * 2 + + test('match calls function', () => { + const expected = 888 + const actual = when (isEven) (double) (444) + expect(actual).toBe(expected) + }) + + test('no match returns value', () => { + const expected = 888 + const actual = when (isOdd) (double) (expected) + expect(actual).toBe(expected) + }) +}) diff --git a/string/__tests__/append.test.js b/string/__tests__/append.test.js new file mode 100644 index 0000000..a428d01 --- /dev/null +++ b/string/__tests__/append.test.js @@ -0,0 +1,21 @@ +const append = require('../append') + +describe('string/append', () => { + test('appends strings', () => { + const expected = 'AB' + const actual = append ('B') ('A') + expect(actual).toBe(expected) + }) + + test('appends null as empty string', () => { + const expected = 'A' + const actual = append ('') ('A') + expect(actual).toBe(expected) + }) + + test('appends to null as empty string', () => { + const expected = 'B' + const actual = append ('B') ('') + expect(actual).toBe(expected) + }) +}) diff --git a/string/__tests__/prepend.test.js b/string/__tests__/prepend.test.js new file mode 100644 index 0000000..cb1a039 --- /dev/null +++ b/string/__tests__/prepend.test.js @@ -0,0 +1,21 @@ +const prepend = require('../prepend') + +describe('string/prepend', () => { + test('prepend strings', () => { + const expected = 'AB' + const actual = prepend ('A') ('B') + expect(actual).toBe(expected) + }) + + test('prepend null as empty string', () => { + const expected = 'B' + const actual = prepend ('') ('B') + expect(actual).toBe(expected) + }) + + test('prepend to null as empty string', () => { + const expected = 'A' + const actual = prepend ('A') ('') + expect(actual).toBe(expected) + }) +}) diff --git a/string/__tests__/replace.test.js b/string/__tests__/replace.test.js new file mode 100644 index 0000000..7660f33 --- /dev/null +++ b/string/__tests__/replace.test.js @@ -0,0 +1,9 @@ +const replace = require('../replace') + +describe('string/replace', () => { + test('replaces string', () => { + const expected = 'ABC' + const actual = replace ('replace') ('B') ('AreplaceC') + expect(actual).toBe(expected) + }) +}) diff --git a/string/__tests__/template.test.js b/string/__tests__/template.test.js index 65b7cf1..17cfcec 100644 --- a/string/__tests__/template.test.js +++ b/string/__tests__/template.test.js @@ -6,6 +6,13 @@ describe('string/template', () => { { foo: 'Sunshine' } ] + test('no args template', () => { + const expected = '!' + const func = $`${0}!` + const actual = func() + expect(actual).toBe(expected) + }) + test('simple template', () => { const expected = 'YAY!' const func = $`${0}${1}${0}!` diff --git a/threading/fork.js b/threading/fork.js deleted file mode 100644 index 3ca4312..0000000 --- a/threading/fork.js +++ /dev/null @@ -1,6 +0,0 @@ -const fork = forks => value => - Promise.all ( - [ value ].concat (forks.map (f => f (value))) - ) - -module.exports = fork