From 67749431968402d7a70b730e04e6475e23e6a625 Mon Sep 17 00:00:00 2001 From: Chesterkxng Date: Sun, 7 Jul 2024 22:14:17 +0000 Subject: [PATCH] reverse tool (easiest) and testCases then updated index file --- src/pages/list/index.ts | 1 + src/pages/list/reverse/index.tsx | 11 ++++++++ src/pages/list/reverse/meta.ts | 13 +++++++++ .../list/reverse/reverse.service.test.ts | 28 +++++++++++++++++++ src/pages/list/reverse/service.ts | 21 ++++++++++++++ 5 files changed, 74 insertions(+) create mode 100644 src/pages/list/reverse/index.tsx create mode 100644 src/pages/list/reverse/meta.ts create mode 100644 src/pages/list/reverse/reverse.service.test.ts create mode 100644 src/pages/list/reverse/service.ts diff --git a/src/pages/list/index.ts b/src/pages/list/index.ts index 9f37390..17134e5 100644 --- a/src/pages/list/index.ts +++ b/src/pages/list/index.ts @@ -1,3 +1,4 @@ +import { tool as listReverse } from './reverse/meta'; import { tool as listFindUnique } from './find-unique/meta'; import { tool as listFindMostPopular } from './find-most-popular/meta'; import { tool as listGroup } from './group/meta'; diff --git a/src/pages/list/reverse/index.tsx b/src/pages/list/reverse/index.tsx new file mode 100644 index 0000000..e017afe --- /dev/null +++ b/src/pages/list/reverse/index.tsx @@ -0,0 +1,11 @@ +import { Box } from '@mui/material'; +import React from 'react'; +import * as Yup from 'yup'; + +const initialValues = {}; +const validationSchema = Yup.object({ + // splitSeparator: Yup.string().required('The separator is required') +}); +export default function Reverse() { + return Lorem ipsum; +} \ No newline at end of file diff --git a/src/pages/list/reverse/meta.ts b/src/pages/list/reverse/meta.ts new file mode 100644 index 0000000..1ce2ba6 --- /dev/null +++ b/src/pages/list/reverse/meta.ts @@ -0,0 +1,13 @@ +import { defineTool } from '@tools/defineTool'; +import { lazy } from 'react'; +// import image from '@assets/text.png'; + +export const tool = defineTool('list', { + name: 'Reverse', + path: 'reverse', + // image, + description: '', + shortDescription: '', + keywords: ['reverse'], + component: lazy(() => import('./index')) +}); \ No newline at end of file diff --git a/src/pages/list/reverse/reverse.service.test.ts b/src/pages/list/reverse/reverse.service.test.ts new file mode 100644 index 0000000..b2a468d --- /dev/null +++ b/src/pages/list/reverse/reverse.service.test.ts @@ -0,0 +1,28 @@ +import { expect, describe, it } from 'vitest'; +import { reverseList } from './service'; + +describe('reverseList Function', () => { + test('should reverse items split by symbol', () => { + const input = 'apple,banana,orange'; + const result = reverseList('symbol', ',', '\n', input); + expect(result).toBe('orange\nbanana\napple'); + }); + + test('should reverse items split by regex', () => { + const input = 'apple banana orange'; + const result = reverseList('regex', '\\s+', '\n', input); + expect(result).toBe('orange\nbanana\napple'); + }); + + test('should handle empty input', () => { + const input = ''; + const result = reverseList('symbol', ',', '\n', input); + expect(result).toBe(''); + }); + + test('should handle join separator', () => { + const input = 'apple,banana,orange'; + const result = reverseList('symbol', ',', ', ', input); + expect(result).toBe('orange, banana, apple'); + }); + }); \ No newline at end of file diff --git a/src/pages/list/reverse/service.ts b/src/pages/list/reverse/service.ts new file mode 100644 index 0000000..a172f53 --- /dev/null +++ b/src/pages/list/reverse/service.ts @@ -0,0 +1,21 @@ +type SplitOperatorType = 'symbol' | 'regex'; + +export function reverseList( + splitOperatorType: SplitOperatorType, + splitSeparator: string, + joinSeparator: string = '\n', + input: string, +): string { + let array: string[] = []; + switch (splitOperatorType) { + case 'symbol': + array = input.split(splitSeparator); + break; + case 'regex': + array = input.split(new RegExp(splitSeparator)).filter(item => item !== ''); + break; + } + + const reversedList = array.reverse(); + return reversedList.join(joinSeparator); +}