Skip to content

Commit

Permalink
Merge 060fe3f into 5d45816
Browse files Browse the repository at this point in the history
  • Loading branch information
Himenon committed Nov 1, 2018
2 parents 5d45816 + 060fe3f commit 4bb11ab
Show file tree
Hide file tree
Showing 29 changed files with 271 additions and 232 deletions.
11 changes: 11 additions & 0 deletions .prettierrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"useTabs": false,
"printWidth": 140,
"tabWidth": 2,
"singleQuote": true,
"trailingComma": "all",
"jsxBracketSameLine": false,
"parser": "typescript",
"bracketSpacing": true,
"semi": true
}
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
#### 1.1.1 (2018-11-01)

##### Other Changes

* **format:** フォーマットを掛けた (a147967c)

### 1.1.0 (2018-10-30)

##### New Features
Expand Down
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

[![Build Status](https://travis-ci.org/Himenon/js-one-shot.svg?branch=master)](https://travis-ci.org/Himenon/js-one-shot)
[![Coverage Status](https://coveralls.io/repos/github/Himenon/js-one-shot/badge.svg?branch=master)](https://coveralls.io/github/Himenon/js-one-shot?branch=master)
[![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square)](https://github.com/prettier/prettier)

## Library

Expand Down
4 changes: 3 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "js-one-shot",
"version": "1.1.0",
"version": "1.1.1",
"description": "Libraryの調査",
"main": "entry.js",
"author": "Himenon",
Expand All @@ -11,6 +11,8 @@
"express:session": "node ./lib/express-session/oneshot.js",
"lint": "tslint -c tslint.json -p tsconfig.json",
"lint:fix": "yarn run lint -- --fix",
"prettier": "prettier --write src/**/*.ts src/**/*.tsx",
"format": "run-s prettier lint:fix",
"test": "jest -c jest.config.json --detectOpenHandles",
"test:coverage": "yarn run test -- --coverage && cat ./coverage/lcov.info | npx coveralls",
"test:watch": "yarn run test -- --watchAll --verbose false",
Expand Down
3 changes: 1 addition & 2 deletions src/babel-standalone/__tests__/oneshot.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ import * as React from 'react';
import * as renderer from 'react-test-renderer';
import * as OneShot from '../oneshot';


test('parse', () => {
const codeString = OneShot.parse(`
function hello() {
Expand All @@ -12,7 +11,7 @@ test('parse', () => {
expect(codeString).not.toBeNull();
const hello = new Function(`return ${codeString}`)();
expect(hello()).toEqual('Hello World');
})
});

test('parse string that contain JSX', () => {
const codeString = OneShot.parseWithJSX('<div>Hello World</div>');
Expand Down
6 changes: 3 additions & 3 deletions src/babel-standalone/oneshot.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
// @ts-ignore
import * as transformJSX from '@babel/plugin-transform-react-jsx'
import * as transformJSX from '@babel/plugin-transform-react-jsx';
// @ts-ignore
import * as standalone from '@babel/standalone';

export const parse = (raw: string): string | null => {
return standalone.transform(raw, {}).code;
}
};

export const parseWithJSX = (raw: string): string | null => {
return standalone.transform(raw, {
plugins: [transformJSX],
}).code;
}
};
33 changes: 18 additions & 15 deletions src/event-emitter/__tests__/addEventListener.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,34 +3,34 @@ import { CustomEventEmitter, CustomPayload } from '../oneshot';
describe('独自のEventEmitterのテスト', () => {
let dispatcher: CustomEventEmitter;
beforeEach(() => {
dispatcher = new CustomEventEmitter()
dispatcher = new CustomEventEmitter();
dispatcher.removeAllListeners();
})
});

test('dispatchされることを確認する', () => {
const fn = jest.fn();
dispatcher.addListener('nya', () => {
fn();
})
});
expect(fn.mock.calls.length).toBe(0);
dispatcher.emit('nya', {});
expect(fn.mock.calls.length).toBe(1);
dispatcher.emit('nya', {});
expect(fn.mock.calls.length).toBe(2);
})
});

test('引数がある場合', () => {
const fn = jest.fn((x: number, y: number, z: number) => x + y + z);
dispatcher.addListener('add', (payload: CustomPayload['add']) => {
fn(payload.a, payload.b, payload.c)
fn(payload.a, payload.b, payload.c);
});
dispatcher.emit('add', { a: 1, b: 2, c: 3});
dispatcher.emit('add', { a: 1, b: 2, c: 3 });
expect(fn.mock.calls[0][0]).toBe(1);
expect(fn.mock.calls[0][1]).toBe(2);
expect(fn.mock.calls[0][2]).toBe(3);
expect(fn.mock.results[0].value).toBe(6);
})
});

test('特定のイベントリスナーの着脱を確認する', () => {
const fn = jest.fn(() => undefined);
// 1回目
Expand All @@ -45,25 +45,28 @@ describe('独自のEventEmitterのテスト', () => {
dispatcher.addListener('nya', fn);
dispatcher.emit('nya', {});
expect(fn.mock.calls.length).toBe(2);
})
});

test('removeできることを確認する', () => {
dispatcher.addListener('nya', () => undefined);
dispatcher.addListener('foo', (payload: {foo: string}) => undefined);
dispatcher.addListener('foo', (payload: { foo: string }) => undefined);
expect(dispatcher.eventNames()).toEqual(['nya', 'foo']);
dispatcher.removeAllListeners();
expect(dispatcher.eventNames()).toEqual([]);
})
});

test('複数回セットした場合、多重実行される', () => {
const fn = jest.fn();
dispatcher.addListener('nya', () => { fn(); })
dispatcher.addListener('nya', () => {
fn();
});
dispatcher.emit('nya', {});
expect(fn.mock.calls.length).toBe(1);

dispatcher.addListener('nya', () => { fn(); })
dispatcher.addListener('nya', () => {
fn();
});
dispatcher.emit('nya', {});
expect(fn.mock.calls.length).toBe(3);
})
});
});

40 changes: 20 additions & 20 deletions src/event-emitter/__tests__/hogeClass.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,61 +3,61 @@ import { CustomEventEmitter, CustomPayload, HogeClass } from '../oneshot';
describe('hogeClassをセットした場合の挙動', () => {
let dispatcher: CustomEventEmitter;
beforeEach(() => {
dispatcher = new CustomEventEmitter()
dispatcher = new CustomEventEmitter();
dispatcher.removeAllListeners();
})
});

test('HogeClassのセットしたときとセットしていないときの挙動を確認', () => {
const hoge = new HogeClass();
const hello = jest.fn((payload: CustomPayload['hoge']) => `hello ${payload.name}`);;
const hello = jest.fn((payload: CustomPayload['hoge']) => `hello ${payload.name}`);
expect(hello.mock.calls.length).toBe(0);
dispatcher.emit('hoge', {
name: 'first'
})
name: 'first',
});
hoge.hello = hello;
dispatcher.setHogeClassEvent(hoge);
dispatcher.emit('hoge', {
name: 'second'
})
name: 'second',
});
expect(hello.mock.calls.length).toBe(1);
expect(hello.mock.results[0].value).toBe('hello second');
})
});

test('HogeClassの状態変化', () => {
const hoge = new HogeClass();
expect(hoge.result).toBeUndefined();
dispatcher.emit('hoge', {
name: 'hogeee'
name: 'hogeee',
});
expect(hoge.result).not.toBe('Hello hogeee !');
dispatcher.addListener('hoge', hoge.hello)
dispatcher.addListener('hoge', hoge.hello);
dispatcher.emit('hoge', {
name: 'ふえええ'
name: 'ふえええ',
});
expect(hoge.result).not.toBe('Hello ふえええ !');
})
});

test('HogeClassのリセット', () => {
const hoge = new HogeClass();
const hello = jest.fn((payload: CustomPayload['hoge']) => `hello ${payload.name}`);;
const hello = jest.fn((payload: CustomPayload['hoge']) => `hello ${payload.name}`);
hoge.hello = hello;
expect((dispatcher as any ).hoge).toBeUndefined();

expect((dispatcher as any).hoge).toBeUndefined();
dispatcher.emit('hoge', { name: 'foo' });
expect(hello.mock.calls.length).toBe(0);

dispatcher.setHogeClassEvent(hoge);
expect((dispatcher as any ).hoge).toEqual(hoge);
expect((dispatcher as any ).hoge instanceof HogeClass).toBeTruthy();
expect((dispatcher as any).hoge).toEqual(hoge);
expect((dispatcher as any).hoge instanceof HogeClass).toBeTruthy();

dispatcher.emit('hoge', { name: 'foo' });
expect(hello.mock.calls.length).toBe(1);
expect(hello.mock.results[0].value).toBe('hello foo');

dispatcher.emit('reset', undefined);
expect((dispatcher as any ).hoge).toBeUndefined();
expect((dispatcher as any).hoge).toBeUndefined();
dispatcher.emit('hoge', { name: 'foo' });
expect(hello.mock.calls.length).toBe(1);
expect(hello.mock.results[1]).toBeUndefined();
})
})
});
});
22 changes: 13 additions & 9 deletions src/event-emitter/__tests__/onOneshot.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,38 +3,42 @@ import { CustomEventEmitter } from '../oneshot';
describe('独自のEventEmitterのテスト', () => {
let dispatcher: CustomEventEmitter;
beforeAll(() => {
dispatcher = new CustomEventEmitter()
dispatcher = new CustomEventEmitter();
dispatcher.removeAllListeners();
})
});

test('dispatchされることを確認する', () => {
const fn = jest.fn();
dispatcher.on('nya', () => {
fn();
})
});
expect(fn.mock.calls.length).toBe(0);
dispatcher.emit('nya', {});
expect(fn.mock.calls.length).toBe(1);
dispatcher.emit('nya', {});
expect(fn.mock.calls.length).toBe(2);
})
});

test('removeできることを確認する', () => {
dispatcher.on('nya', () => undefined);
dispatcher.on('foo', (payload: {foo: string}) => undefined);
dispatcher.on('foo', (payload: { foo: string }) => undefined);
expect(dispatcher.eventNames()).toEqual(['nya', 'foo']);
dispatcher.removeAllListeners();
expect(dispatcher.eventNames()).toEqual([]);
})
});

test('複数回セットした場合、多重実行される', () => {
const fn = jest.fn();
dispatcher.on('nya', () => { fn(); })
dispatcher.on('nya', () => {
fn();
});
dispatcher.emit('nya', {});
expect(fn.mock.calls.length).toBe(1);

dispatcher.on('nya', () => { fn(); })
dispatcher.on('nya', () => {
fn();
});
dispatcher.emit('nya', {});
expect(fn.mock.calls.length).toBe(3);
})
});
});
21 changes: 11 additions & 10 deletions src/event-emitter/oneshot.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@ import { EventEmitter } from 'events';

export class HogeClass {
public result: string | undefined;
public hello(payload: {name: string}) {
this.result = `Hello ${payload.name} !`
public hello(payload: { name: string }) {
this.result = `Hello ${payload.name} !`;
}
}

export interface CustomPayload {
hoge: {
name: string
name: string;
};
foo: {
foo: string;
Expand All @@ -23,7 +23,7 @@ export interface CustomPayload {
reset: undefined;
}

export interface CustomListener{
export interface CustomListener {
hoge: (payload: CustomPayload['hoge']) => void;
foo: (payload: CustomPayload['foo']) => void;
add: (payload: CustomPayload['add']) => void;
Expand All @@ -32,24 +32,25 @@ export interface CustomListener{
}

export class CustomEventEmitter extends EventEmitter {

private hoge: HogeClass | undefined;

public setHogeClassEvent(hoge: HogeClass) {
this.hoge = hoge;
this.addListener('hoge', (payload: CustomPayload['hoge'])=> {
if (this.hoge) { this.hoge.hello(payload) };
this.addListener('hoge', (payload: CustomPayload['hoge']) => {
if (this.hoge) {
this.hoge.hello(payload);
}
});
this.addListener('reset', () => {
this.hoge = undefined;
})
});
}

public on<K extends keyof CustomListener>(event: K, listener : CustomListener[K]): this {
public on<K extends keyof CustomListener>(event: K, listener: CustomListener[K]): this {
return super.on(event, listener);
}

public addListener<K extends keyof CustomListener>(event: K, listener : CustomListener[K]): this {
public addListener<K extends keyof CustomListener>(event: K, listener: CustomListener[K]): this {
return super.addListener(event, listener);
}

Expand Down
Loading

0 comments on commit 4bb11ab

Please sign in to comment.