Skip to content

Commit

Permalink
refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
kosmydel committed Sep 7, 2023
1 parent 505044b commit bf422b1
Show file tree
Hide file tree
Showing 6 changed files with 99 additions and 96 deletions.
2 changes: 1 addition & 1 deletion src/components/Form.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import stylePropTypes from '../styles/stylePropTypes';
import {withNetwork} from './OnyxProvider';
import networkPropTypes from './networkPropTypes';
import Visibility from '../libs/Visibility';
import removeInvisible, {isEmpty} from '../libs/removeInvisible';
import removeInvisible from '../libs/removeInvisible';

const propTypes = {
/** A unique Onyx key identifying the form */
Expand Down
8 changes: 8 additions & 0 deletions src/libs/isEmptyString.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
function isEmptyString(str) {
// \p{C} matches all 'Other' characters
// \p{Z} matches all separators (spaces etc.)
// Source: http://www.unicode.org/reports/tr18/#General_Category_Property
return str.replace(/[\p{C}\p{Z}]/gu, '') === '';
}

export default isEmptyString;
5 changes: 0 additions & 5 deletions src/libs/removeInvisible.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,4 @@ function removeInvisible(str) {
return str.replace(/[\0-\x1F\x7F-\x9F\u200E-\u200F\u202A-\u202E\u200B\u00A0\u2060]/g, '').trim();
}

function isEmpty(str) {
return str.replace(/\p{C}/gu, '').trim() === '';
}

export {isEmpty};
export default removeInvisible;
2 changes: 1 addition & 1 deletion src/pages/workspace/WorkspaceSettingsPage.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import Avatar from '../../components/Avatar';
import Navigation from '../../libs/Navigation/Navigation';
import ROUTES from '../../ROUTES';
import withWindowDimensions, {windowDimensionsPropTypes} from '../../components/withWindowDimensions';
import {isEmpty} from '../../libs/removeInvisible';
import isEmpty from '../../libs/isEmptyString';

const propTypes = {
// The currency list constant object from Onyx
Expand Down
89 changes: 89 additions & 0 deletions tests/unit/isEmptyString.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
import _ from 'underscore';
import isEmpty from '../../src/libs/isEmptyString';
import enEmojis from '../../assets/emojis/en';

describe('libs/isEmpty', () => {
it('basic tests', () => {
expect(isEmpty('test')).toBe(false);
expect(isEmpty('test test')).toBe(false);
expect(isEmpty('test test test')).toBe(false);
expect(isEmpty(' ')).toBe(true);
});
it('trim spaces', () => {
expect(isEmpty(' test')).toBe(false);
expect(isEmpty('test ')).toBe(false);
expect(isEmpty(' test ')).toBe(false);
});
it('remove invisible characters', () => {
expect(isEmpty('\u200B')).toBe(true);
expect(isEmpty('\u200B')).toBe(true);
expect(isEmpty('\u200B ')).toBe(true);
expect(isEmpty('\u200B \u200B')).toBe(true);
expect(isEmpty('\u200B \u200B ')).toBe(true);
});
it('remove invisible characters (Cc)', () => {
expect(isEmpty('\u0000')).toBe(true);
expect(isEmpty('\u0001')).toBe(true);
expect(isEmpty('\u0009')).toBe(true);
});
it('remove invisible characters (Cf)', () => {
expect(isEmpty('\u200E')).toBe(true);
expect(isEmpty('\u200F')).toBe(true);
expect(isEmpty('\u2060')).toBe(true);
});
it('remove invisible characters (Cs)', () => {
expect(isEmpty('\uD800')).toBe(true);
expect(isEmpty('\uD801')).toBe(true);
expect(isEmpty('\uD802')).toBe(true);
});
it('remove invisible characters (Co)', () => {
expect(isEmpty('\uE000')).toBe(true);
expect(isEmpty('\uE001')).toBe(true);
expect(isEmpty('\uE002')).toBe(true);
});
it('remove invisible characters (Zl)', () => {
expect(isEmpty('\u2028')).toBe(true);
expect(isEmpty('\u2029')).toBe(true);
expect(isEmpty('\u202A')).toBe(true);
});
it('basic check emojis not removed', () => {
expect(isEmpty('😀')).toBe(false);
});
it('all emojis not removed', () => {
_.keys(enEmojis).forEach((key) => {
expect(isEmpty(key)).toBe(false);
});
});
it('remove invisible characters (editpad)', () => {
expect(isEmpty('\u0020')).toBe(true);
expect(isEmpty('\u00A0')).toBe(true);
expect(isEmpty('\u2000')).toBe(true);
expect(isEmpty('\u2001')).toBe(true);
expect(isEmpty('\u2002')).toBe(true);
expect(isEmpty('\u2003')).toBe(true);
expect(isEmpty('\u2004')).toBe(true);
expect(isEmpty('\u2005')).toBe(true);
expect(isEmpty('\u2006')).toBe(true);
expect(isEmpty('\u2007')).toBe(true);
expect(isEmpty('\u2008')).toBe(true);
expect(isEmpty('\u2009')).toBe(true);
expect(isEmpty('\u200A')).toBe(true);
expect(isEmpty('\u2028')).toBe(true);
expect(isEmpty('\u205F')).toBe(true);
expect(isEmpty('\u3000')).toBe(true);
expect(isEmpty(' ')).toBe(true);
});
it('other tests', () => {
expect(isEmpty('\u200D')).toBe(true);
expect(isEmpty('\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67\uDB40\uDC7F')).toBe(false);
expect(isEmpty('\uD83C')).toBe(true);
expect(isEmpty('\uDFF4')).toBe(true);
expect(isEmpty('\uDB40')).toBe(true);
expect(isEmpty('\uDC67')).toBe(true);
expect(isEmpty('\uDC62')).toBe(true);
expect(isEmpty('\uDC65')).toBe(true);
expect(isEmpty('\uDC6E')).toBe(true);
expect(isEmpty('\uDC67')).toBe(true);
expect(isEmpty('\uDC7F')).toBe(true);
});
});
Original file line number Diff line number Diff line change
@@ -1,10 +1,7 @@
import _ from 'underscore';
import * as removeInvisibleModule from '../../src/libs/removeInvisible';
import removeInvisible from '../../src/libs/removeInvisible';
import enEmojis from '../../assets/emojis/en';

const {isEmpty} = removeInvisibleModule;

describe('libs/removeInvisible', () => {
it('basic tests', () => {
expect(removeInvisible('test')).toBe('test');
Expand Down Expand Up @@ -92,89 +89,3 @@ describe('libs/removeInvisible', () => {
expect(removeInvisible('\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67\uDB40\uDC7F')).toBe('🏴󠁧󠁢󠁥󠁮󠁧󠁿');
});
});

describe('libs/isEmpty', () => {
it('basic tests', () => {
expect(isEmpty('test')).toBe(false);
expect(isEmpty('test test')).toBe(false);
expect(isEmpty('test test test')).toBe(false);
expect(isEmpty(' ')).toBe(true);
});
it('trim spaces', () => {
expect(isEmpty(' test')).toBe(false);
expect(isEmpty('test ')).toBe(false);
expect(isEmpty(' test ')).toBe(false);
});
it('remove invisible characters', () => {
expect(isEmpty('\u200B')).toBe(true);
expect(isEmpty('\u200B')).toBe(true);
expect(isEmpty('\u200B ')).toBe(true);
expect(isEmpty('\u200B \u200B')).toBe(true);
expect(isEmpty('\u200B \u200B ')).toBe(true);
});
it('remove invisible characters (Cc)', () => {
expect(isEmpty('\u0000')).toBe(true);
expect(isEmpty('\u0001')).toBe(true);
expect(isEmpty('\u0009')).toBe(true);
});
it('remove invisible characters (Cf)', () => {
expect(isEmpty('\u200E')).toBe(true);
expect(isEmpty('\u200F')).toBe(true);
expect(isEmpty('\u2060')).toBe(true);
});
it('remove invisible characters (Cs)', () => {
expect(isEmpty('\uD800')).toBe(true);
expect(isEmpty('\uD801')).toBe(true);
expect(isEmpty('\uD802')).toBe(true);
});
it('remove invisible characters (Co)', () => {
expect(isEmpty('\uE000')).toBe(true);
expect(isEmpty('\uE001')).toBe(true);
expect(isEmpty('\uE002')).toBe(true);
});
it('remove invisible characters (Zl)', () => {
expect(isEmpty('\u2028')).toBe(true);
expect(isEmpty('\u2029')).toBe(true);
expect(isEmpty('\u202A')).toBe(true);
});
it('basic check emojis not removed', () => {
expect(isEmpty('😀')).toBe(false);
});
it('all emojis not removed', () => {
_.keys(enEmojis).forEach((key) => {
expect(isEmpty(key)).toBe(false);
});
});
it('remove invisible characters (editpad)', () => {
expect(isEmpty('\u0020')).toBe(true);
expect(isEmpty('\u00A0')).toBe(true);
expect(isEmpty('\u2000')).toBe(true);
expect(isEmpty('\u2001')).toBe(true);
expect(isEmpty('\u2002')).toBe(true);
expect(isEmpty('\u2003')).toBe(true);
expect(isEmpty('\u2004')).toBe(true);
expect(isEmpty('\u2005')).toBe(true);
expect(isEmpty('\u2006')).toBe(true);
expect(isEmpty('\u2007')).toBe(true);
expect(isEmpty('\u2008')).toBe(true);
expect(isEmpty('\u2009')).toBe(true);
expect(isEmpty('\u200A')).toBe(true);
expect(isEmpty('\u2028')).toBe(true);
expect(isEmpty('\u205F')).toBe(true);
expect(isEmpty('\u3000')).toBe(true);
expect(isEmpty(' ')).toBe(true);
});
it('other tests', () => {
expect(isEmpty('\u200D')).toBe(true);
expect(isEmpty('\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67\uDB40\uDC7F')).toBe(false);
expect(isEmpty('\uD83C')).toBe(true);
expect(isEmpty('\uDFF4')).toBe(true);
expect(isEmpty('\uDB40')).toBe(true);
expect(isEmpty('\uDC67')).toBe(true);
expect(isEmpty('\uDC62')).toBe(true);
expect(isEmpty('\uDC65')).toBe(true);
expect(isEmpty('\uDC6E')).toBe(true);
expect(isEmpty('\uDC67')).toBe(true);
expect(isEmpty('\uDC7F')).toBe(true);
});
});

0 comments on commit bf422b1

Please sign in to comment.