diff --git a/src/pages/string/index.ts b/src/pages/string/index.ts index bc988ea..ea2d978 100644 --- a/src/pages/string/index.ts +++ b/src/pages/string/index.ts @@ -1,3 +1,4 @@ +import { tool as stringRandomizeCase } from './randomize-case/meta'; import { tool as stringUppercase } from './uppercase/meta'; import { tool as stringExtractSubstring } from './extract-substring/meta'; import { tool as stringCreatePalindrome } from './create-palindrome/meta'; diff --git a/src/pages/string/randomize-case/index.tsx b/src/pages/string/randomize-case/index.tsx new file mode 100644 index 0000000..fbb7733 --- /dev/null +++ b/src/pages/string/randomize-case/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 RandomizeCase() { + return Lorem ipsum; +} \ No newline at end of file diff --git a/src/pages/string/randomize-case/meta.ts b/src/pages/string/randomize-case/meta.ts new file mode 100644 index 0000000..be2da07 --- /dev/null +++ b/src/pages/string/randomize-case/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('string', { + name: 'Randomize case', + path: 'randomize-case', + // image, + description: '', + shortDescription: '', + keywords: ['randomize', 'case'], + component: lazy(() => import('./index')) +}); \ No newline at end of file diff --git a/src/pages/string/randomize-case/randomize-case.service.test.ts b/src/pages/string/randomize-case/randomize-case.service.test.ts new file mode 100644 index 0000000..7e44a7a --- /dev/null +++ b/src/pages/string/randomize-case/randomize-case.service.test.ts @@ -0,0 +1,48 @@ +import { expect, describe, it } from 'vitest'; +import { randomizeCase } from './service'; + +describe('randomizeCase', () => { + it('should randomize the case of each character in the string', () => { + const input = 'hello world'; + const result = randomizeCase(input); + + // Ensure the output length is the same + expect(result).toHaveLength(input.length); + + // Ensure each character in the input string appears in the result + for (let i = 0; i < input.length; i++) { + const inputChar = input[i]; + const resultChar = result[i]; + + if (/[a-zA-Z]/.test(inputChar)) { + expect([inputChar.toLowerCase(), inputChar.toUpperCase()]).toContain(resultChar); + } else { + expect(inputChar).toBe(resultChar); + } + } + }); + + it('should handle an empty string', () => { + const input = ''; + const result = randomizeCase(input); + expect(result).toBe(''); + }); + + it('should handle a string with numbers and symbols', () => { + const input = '123 hello! @world'; + const result = randomizeCase(input); + + // Ensure the output length is the same + expect(result).toHaveLength(input.length); + + // Ensure numbers and symbols remain unchanged + for (let i = 0; i < input.length; i++) { + const inputChar = input[i]; + const resultChar = result[i]; + + if (!/[a-zA-Z]/.test(inputChar)) { + expect(inputChar).toBe(resultChar); + } + } + }); +}); \ No newline at end of file diff --git a/src/pages/string/randomize-case/service.ts b/src/pages/string/randomize-case/service.ts new file mode 100644 index 0000000..a6f6860 --- /dev/null +++ b/src/pages/string/randomize-case/service.ts @@ -0,0 +1,6 @@ +export function randomizeCase(input: string): string { + return input + .split('') + .map(char => (Math.random() < 0.5 ? char.toLowerCase() : char.toUpperCase())) + .join(''); +} \ No newline at end of file