+++ /dev/null
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`<Avatar /> Autoplay renders a animated avatar 1`] = `
-<div
- className="account__avatar"
- data-avatar-of="@alice"
- onMouseEnter={[Function]}
- onMouseLeave={[Function]}
- style={
- Object {
- "backgroundImage": "url(/animated/alice.gif)",
- "backgroundSize": "100px 100px",
- "height": "100px",
- "width": "100px",
- }
- }
-/>
-`;
-
-exports[`<Avatar /> Still renders a still avatar 1`] = `
-<div
- className="account__avatar"
- data-avatar-of="@alice"
- onMouseEnter={[Function]}
- onMouseLeave={[Function]}
- style={
- Object {
- "backgroundImage": "url(/static/alice.jpg)",
- "backgroundSize": "100px 100px",
- "height": "100px",
- "width": "100px",
- }
- }
-/>
-`;
+++ /dev/null
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`<AvatarOverlay renders a overlay avatar 1`] = `
-<div
- className="account__avatar-overlay"
->
- <div
- className="account__avatar-overlay-base"
- data-avatar-of="@alice"
- style={
- Object {
- "backgroundImage": "url(/static/alice.jpg)",
- }
- }
- />
- <div
- className="account__avatar-overlay-overlay"
- data-avatar-of="@eve@blackhat.lair"
- style={
- Object {
- "backgroundImage": "url(/static/eve.jpg)",
- }
- }
- />
-</div>
-`;
+++ /dev/null
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`<Button /> adds class "button-secondary" if props.secondary given 1`] = `
-<button
- className="button button-secondary"
- disabled={undefined}
- onClick={[Function]}
- style={
- Object {
- "height": "36px",
- "lineHeight": "36px",
- "padding": "0 16px",
- }
- }
-/>
-`;
-
-exports[`<Button /> renders a button element 1`] = `
-<button
- className="button"
- disabled={undefined}
- onClick={[Function]}
- style={
- Object {
- "height": "36px",
- "lineHeight": "36px",
- "padding": "0 16px",
- }
- }
-/>
-`;
-
-exports[`<Button /> renders a disabled attribute if props.disabled given 1`] = `
-<button
- className="button"
- disabled={true}
- onClick={[Function]}
- style={
- Object {
- "height": "36px",
- "lineHeight": "36px",
- "padding": "0 16px",
- }
- }
-/>
-`;
-
-exports[`<Button /> renders class="button--block" if props.block given 1`] = `
-<button
- className="button button--block"
- disabled={undefined}
- onClick={[Function]}
- style={
- Object {
- "height": "36px",
- "lineHeight": "36px",
- "padding": "0 16px",
- }
- }
-/>
-`;
-
-exports[`<Button /> renders the children 1`] = `
-<button
- className="button"
- disabled={undefined}
- onClick={[Function]}
- style={
- Object {
- "height": "36px",
- "lineHeight": "36px",
- "padding": "0 16px",
- }
- }
->
- <p>
- children
- </p>
-</button>
-`;
-
-exports[`<Button /> renders the given text 1`] = `
-<button
- className="button"
- disabled={undefined}
- onClick={[Function]}
- style={
- Object {
- "height": "36px",
- "lineHeight": "36px",
- "padding": "0 16px",
- }
- }
->
- foo
-</button>
-`;
-
-exports[`<Button /> renders the props.text instead of children 1`] = `
-<button
- className="button"
- disabled={undefined}
- onClick={[Function]}
- style={
- Object {
- "height": "36px",
- "lineHeight": "36px",
- "padding": "0 16px",
- }
- }
->
- foo
-</button>
-`;
-
-exports[`<Button /> renders title if props.title is given 1`] = `
-<button
- className="button"
- disabled={undefined}
- onClick={[Function]}
- style={
- Object {
- "height": "36px",
- "lineHeight": "36px",
- "padding": "0 16px",
- }
- }
- title="foo"
-/>
-`;
+++ /dev/null
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`<DisplayName /> renders display name + account name 1`] = `
-<span
- className="display-name"
->
- <strong
- className="display-name__html"
- dangerouslySetInnerHTML={
- Object {
- "__html": "<p>Foo</p>",
- }
- }
- />
-
- <span
- className="display-name__account"
- >
- @
- bar@baz
- </span>
-</span>
-`;
+++ /dev/null
-import React from 'react';
-import renderer from 'react-test-renderer';
-import { fromJS } from 'immutable';
-import Avatar from '../avatar';
-
-describe('<Avatar />', () => {
- const account = fromJS({
- username: 'alice',
- acct: 'alice',
- display_name: 'Alice',
- avatar: '/animated/alice.gif',
- avatar_static: '/static/alice.jpg',
- });
-
- const size = 100;
-
- describe('Autoplay', () => {
- it('renders a animated avatar', () => {
- const component = renderer.create(<Avatar account={account} animate size={size} />);
- const tree = component.toJSON();
-
- expect(tree).toMatchSnapshot();
- });
- });
-
- describe('Still', () => {
- it('renders a still avatar', () => {
- const component = renderer.create(<Avatar account={account} size={size} />);
- const tree = component.toJSON();
-
- expect(tree).toMatchSnapshot();
- });
- });
-
- // TODO add autoplay test if possible
-});
+++ /dev/null
-import React from 'react';
-import renderer from 'react-test-renderer';
-import { fromJS } from 'immutable';
-import AvatarOverlay from '../avatar_overlay';
-
-describe('<AvatarOverlay', () => {
- const account = fromJS({
- username: 'alice',
- acct: 'alice',
- display_name: 'Alice',
- avatar: '/animated/alice.gif',
- avatar_static: '/static/alice.jpg',
- });
-
- const friend = fromJS({
- username: 'eve',
- acct: 'eve@blackhat.lair',
- display_name: 'Evelyn',
- avatar: '/animated/eve.gif',
- avatar_static: '/static/eve.jpg',
- });
-
- it('renders a overlay avatar', () => {
- const component = renderer.create(<AvatarOverlay account={account} friend={friend} />);
- const tree = component.toJSON();
-
- expect(tree).toMatchSnapshot();
- });
-});
+++ /dev/null
-import { shallow } from 'enzyme';
-import React from 'react';
-import renderer from 'react-test-renderer';
-import Button from '../button';
-
-describe('<Button />', () => {
- it('renders a button element', () => {
- const component = renderer.create(<Button />);
- const tree = component.toJSON();
-
- expect(tree).toMatchSnapshot();
- });
-
- it('renders the given text', () => {
- const text = 'foo';
- const component = renderer.create(<Button text={text} />);
- const tree = component.toJSON();
-
- expect(tree).toMatchSnapshot();
- });
-
- it('handles click events using the given handler', () => {
- const handler = jest.fn();
- const button = shallow(<Button onClick={handler} />);
- button.find('button').simulate('click');
-
- expect(handler.mock.calls.length).toEqual(1);
- });
-
- it('does not handle click events if props.disabled given', () => {
- const handler = jest.fn();
- const button = shallow(<Button onClick={handler} disabled />);
- button.find('button').simulate('click');
-
- expect(handler.mock.calls.length).toEqual(0);
- });
-
- it('renders a disabled attribute if props.disabled given', () => {
- const component = renderer.create(<Button disabled />);
- const tree = component.toJSON();
-
- expect(tree).toMatchSnapshot();
- });
-
- it('renders the children', () => {
- const children = <p>children</p>;
- const component = renderer.create(<Button>{children}</Button>);
- const tree = component.toJSON();
-
- expect(tree).toMatchSnapshot();
- });
-
- it('renders the props.text instead of children', () => {
- const text = 'foo';
- const children = <p>children</p>;
- const component = renderer.create(<Button text={text}>{children}</Button>);
- const tree = component.toJSON();
-
- expect(tree).toMatchSnapshot();
- });
-
- it('renders class="button--block" if props.block given', () => {
- const component = renderer.create(<Button block />);
- const tree = component.toJSON();
-
- expect(tree).toMatchSnapshot();
- });
-
- it('adds class "button-secondary" if props.secondary given', () => {
- const component = renderer.create(<Button secondary />);
- const tree = component.toJSON();
-
- expect(tree).toMatchSnapshot();
- });
-
- it('renders title if props.title is given', () => {
- const component = renderer.create(<Button title='foo' />);
- const tree = component.toJSON();
-
- expect(tree).toMatchSnapshot();
- });
-});
+++ /dev/null
-import React from 'react';
-import renderer from 'react-test-renderer';
-import { fromJS } from 'immutable';
-import DisplayName from '../display_name';
-
-describe('<DisplayName />', () => {
- it('renders display name + account name', () => {
- const account = fromJS({
- username: 'bar',
- acct: 'bar@baz',
- display_name_html: '<p>Foo</p>',
- });
- const component = renderer.create(<DisplayName account={account} />);
- const tree = component.toJSON();
-
- expect(tree).toMatchSnapshot();
- });
-});
+++ /dev/null
-import React from 'react';
-import { mount } from 'enzyme';
-import Column from '../column';
-import ColumnHeader from '../column_header';
-
-describe('<Column />', () => {
- describe('<ColumnHeader /> click handler', () => {
- const originalRaf = global.requestAnimationFrame;
-
- beforeEach(() => {
- global.requestAnimationFrame = jest.fn();
- });
-
- afterAll(() => {
- global.requestAnimationFrame = originalRaf;
- });
-
- it('runs the scroll animation if the column contains scrollable content', () => {
- const wrapper = mount(
- <Column heading='notifications'>
- <div className='scrollable' />
- </Column>
- );
- wrapper.find(ColumnHeader).simulate('click');
- expect(global.requestAnimationFrame.mock.calls.length).toEqual(1);
- });
-
- it('does not try to scroll if there is no scrollable content', () => {
- const wrapper = mount(<Column heading='notifications' />);
- wrapper.find(ColumnHeader).simulate('click');
- expect(global.requestAnimationFrame.mock.calls.length).toEqual(0);
- });
- });
-});
+++ /dev/null
-import emojify from '..';
-
-describe('emoji', () => {
- describe('.emojify', () => {
- it('ignores unknown shortcodes', () => {
- expect(emojify(':foobarbazfake:')).toEqual(':foobarbazfake:');
- });
-
- it('ignores shortcodes inside of tags', () => {
- expect(emojify('<p data-foo=":smile:"></p>')).toEqual('<p data-foo=":smile:"></p>');
- });
-
- it('works with unclosed tags', () => {
- expect(emojify('hello>')).toEqual('hello>');
- expect(emojify('<hello')).toEqual('<hello');
- });
-
- it('works with unclosed shortcodes', () => {
- expect(emojify('smile:')).toEqual('smile:');
- expect(emojify(':smile')).toEqual(':smile');
- });
-
- it('does unicode', () => {
- expect(emojify('\uD83D\uDC69\u200D\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66')).toEqual(
- '<img draggable="false" class="emojione" alt="π©βπ©βπ¦βπ¦" title=":woman-woman-boy-boy:" src="/emoji/1f469-200d-1f469-200d-1f466-200d-1f466.svg" />');
- expect(emojify('π¨βπ©βπ§βπ§')).toEqual(
- '<img draggable="false" class="emojione" alt="π¨βπ©βπ§βπ§" title=":man-woman-girl-girl:" src="/emoji/1f468-200d-1f469-200d-1f467-200d-1f467.svg" />');
- expect(emojify('π©βπ©βπ¦')).toEqual('<img draggable="false" class="emojione" alt="π©βπ©βπ¦" title=":woman-woman-boy:" src="/emoji/1f469-200d-1f469-200d-1f466.svg" />');
- expect(emojify('\u2757')).toEqual(
- '<img draggable="false" class="emojione" alt="β" title=":exclamation:" src="/emoji/2757.svg" />');
- });
-
- it('does multiple unicode', () => {
- expect(emojify('\u2757 #\uFE0F\u20E3')).toEqual(
- '<img draggable="false" class="emojione" alt="β" title=":exclamation:" src="/emoji/2757.svg" /> <img draggable="false" class="emojione" alt="#οΈβ£" title=":hash:" src="/emoji/23-20e3.svg" />');
- expect(emojify('\u2757#\uFE0F\u20E3')).toEqual(
- '<img draggable="false" class="emojione" alt="β" title=":exclamation:" src="/emoji/2757.svg" /><img draggable="false" class="emojione" alt="#οΈβ£" title=":hash:" src="/emoji/23-20e3.svg" />');
- expect(emojify('\u2757 #\uFE0F\u20E3 \u2757')).toEqual(
- '<img draggable="false" class="emojione" alt="β" title=":exclamation:" src="/emoji/2757.svg" /> <img draggable="false" class="emojione" alt="#οΈβ£" title=":hash:" src="/emoji/23-20e3.svg" /> <img draggable="false" class="emojione" alt="β" title=":exclamation:" src="/emoji/2757.svg" />');
- expect(emojify('foo \u2757 #\uFE0F\u20E3 bar')).toEqual(
- 'foo <img draggable="false" class="emojione" alt="β" title=":exclamation:" src="/emoji/2757.svg" /> <img draggable="false" class="emojione" alt="#οΈβ£" title=":hash:" src="/emoji/23-20e3.svg" /> bar');
- });
-
- it('ignores unicode inside of tags', () => {
- expect(emojify('<p data-foo="\uD83D\uDC69\uD83D\uDC69\uD83D\uDC66"></p>')).toEqual('<p data-foo="\uD83D\uDC69\uD83D\uDC69\uD83D\uDC66"></p>');
- });
-
- it('does multiple emoji properly (issue 5188)', () => {
- expect(emojify('πππ')).toEqual('<img draggable="false" class="emojione" alt="π" title=":ok_hand:" src="/emoji/1f44c.svg" /><img draggable="false" class="emojione" alt="π" title=":rainbow:" src="/emoji/1f308.svg" /><img draggable="false" class="emojione" alt="π" title=":two_hearts:" src="/emoji/1f495.svg" />');
- expect(emojify('π π π')).toEqual('<img draggable="false" class="emojione" alt="π" title=":ok_hand:" src="/emoji/1f44c.svg" /> <img draggable="false" class="emojione" alt="π" title=":rainbow:" src="/emoji/1f308.svg" /> <img draggable="false" class="emojione" alt="π" title=":two_hearts:" src="/emoji/1f495.svg" />');
- });
-
- it('does an emoji that has no shortcode', () => {
- expect(emojify('ποΈ')).toEqual('<img draggable="false" class="emojione" alt="ποΈ" title="" src="/emoji/1f549.svg" />');
- });
-
- it('does an emoji whose filename is irregular', () => {
- expect(emojify('βοΈ')).toEqual('<img draggable="false" class="emojione" alt="βοΈ" title=":arrow_lower_left:" src="/emoji/2199.svg" />');
- });
-
- it('avoid emojifying on invisible text', () => {
- expect(emojify('<a href="http://example.com/test%F0%9F%98%84"><span class="invisible">http://</span><span class="ellipsis">example.com/te</span><span class="invisible">stπ</span></a>'))
- .toEqual('<a href="http://example.com/test%F0%9F%98%84"><span class="invisible">http://</span><span class="ellipsis">example.com/te</span><span class="invisible">stπ</span></a>');
- expect(emojify('<span class="invisible">:luigi:</span>', { ':luigi:': { static_url: 'luigi.exe' } }))
- .toEqual('<span class="invisible">:luigi:</span>');
- });
-
- it('avoid emojifying on invisible text with nested tags', () => {
- expect(emojify('<span class="invisible">π<span class="foo">bar</span>π΄</span>π'))
- .toEqual('<span class="invisible">π<span class="foo">bar</span>π΄</span><img draggable="false" class="emojione" alt="π" title=":innocent:" src="/emoji/1f607.svg" />');
- expect(emojify('<span class="invisible">π<span class="invisible">π</span>π΄</span>π'))
- .toEqual('<span class="invisible">π<span class="invisible">π</span>π΄</span><img draggable="false" class="emojione" alt="π" title=":innocent:" src="/emoji/1f607.svg" />');
- expect(emojify('<span class="invisible">π<br/>π΄</span>π'))
- .toEqual('<span class="invisible">π<br/>π΄</span><img draggable="false" class="emojione" alt="π" title=":innocent:" src="/emoji/1f607.svg" />');
- });
- });
-});
+++ /dev/null
-import { pick } from 'lodash';
-import { emojiIndex } from 'emoji-mart';
-import { search } from '../emoji_mart_search_light';
-
-const trimEmojis = emoji => pick(emoji, ['id', 'unified', 'native', 'custom']);
-
-describe('emoji_index', () => {
- it('should give same result for emoji_index_light and emoji-mart', () => {
- const expected = [
- {
- id: 'pineapple',
- unified: '1f34d',
- native: 'π',
- },
- ];
- expect(search('pineapple').map(trimEmojis)).toEqual(expected);
- expect(emojiIndex.search('pineapple').map(trimEmojis)).toEqual(expected);
- });
-
- it('orders search results correctly', () => {
- const expected = [
- {
- id: 'apple',
- unified: '1f34e',
- native: 'π',
- },
- {
- id: 'pineapple',
- unified: '1f34d',
- native: 'π',
- },
- {
- id: 'green_apple',
- unified: '1f34f',
- native: 'π',
- },
- {
- id: 'iphone',
- unified: '1f4f1',
- native: 'π±',
- },
- ];
- expect(search('apple').map(trimEmojis)).toEqual(expected);
- expect(emojiIndex.search('apple').map(trimEmojis)).toEqual(expected);
- });
-
- it('handles custom emoji', () => {
- const custom = [
- {
- id: 'mastodon',
- name: 'mastodon',
- short_names: ['mastodon'],
- text: '',
- emoticons: [],
- keywords: ['mastodon'],
- imageUrl: 'http://example.com',
- custom: true,
- },
- ];
- search('', { custom });
- emojiIndex.search('', { custom });
- const expected = [
- {
- id: 'mastodon',
- custom: true,
- },
- ];
- expect(search('masto').map(trimEmojis)).toEqual(expected);
- expect(emojiIndex.search('masto').map(trimEmojis)).toEqual(expected);
- });
-
- it('should filter only emojis we care about, exclude pineapple', () => {
- const emojisToShowFilter = unified => unified !== '1F34D';
- expect(search('apple', { emojisToShowFilter }).map((obj) => obj.id))
- .not.toContain('pineapple');
- expect(emojiIndex.search('apple', { emojisToShowFilter }).map((obj) => obj.id))
- .not.toContain('pineapple');
- });
-
- it('can include/exclude categories', () => {
- expect(search('flag', { include: ['people'] })).toEqual([]);
- expect(emojiIndex.search('flag', { include: ['people'] })).toEqual([]);
- });
-
- it('does an emoji whose unified name is irregular', () => {
- const expected = [
- {
- 'id': 'water_polo',
- 'unified': '1f93d',
- 'native': 'π€½',
- },
- {
- 'id': 'man-playing-water-polo',
- 'unified': '1f93d-200d-2642-fe0f',
- 'native': 'π€½ββοΈ',
- },
- {
- 'id': 'woman-playing-water-polo',
- 'unified': '1f93d-200d-2640-fe0f',
- 'native': 'π€½ββοΈ',
- },
- ];
- expect(search('polo').map(trimEmojis)).toEqual(expected);
- expect(emojiIndex.search('polo').map(trimEmojis)).toEqual(expected);
- });
-
- it('can search for thinking_face', () => {
- const expected = [
- {
- id: 'thinking_face',
- unified: '1f914',
- native: 'π€',
- },
- ];
- expect(search('thinking_fac').map(trimEmojis)).toEqual(expected);
- expect(emojiIndex.search('thinking_fac').map(trimEmojis)).toEqual(expected);
- });
-
- it('can search for woman-facepalming', () => {
- const expected = [
- {
- id: 'woman-facepalming',
- unified: '1f926-200d-2640-fe0f',
- native: 'π€¦ββοΈ',
- },
- ];
- expect(search('woman-facep').map(trimEmojis)).toEqual(expected);
- expect(emojiIndex.search('woman-facep').map(trimEmojis)).toEqual(expected);
- });
-});
'<rootDir>/log/',
'<rootDir>/public/',
'<rootDir>/tmp/',
+ '<rootDir>/app/javascript/themes/',
],
setupFiles: [
'raf/polyfill',