Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 16 additions & 12 deletions Conversions/TitleCaseConversion.js
Original file line number Diff line number Diff line change
@@ -1,19 +1,23 @@
/*
Problem statement and Explanation : https://www.codeproject.com/Tips/162540/Letter-Case-Conversion-Algorithms-Title-Case-Toggl
Problem statement and Explanation : https://www.codeproject.com/Tips/162540/Letter-Case-Conversion-Algorithms-Title-Case-Toggl.
[Title case](https://en.wikipedia.org/wiki/Title_case) is a style where all words are capitalized. Officially, title case
does not capitalize some words, such as very short words like "a" or "is", but for the purposes of this function, a general approach
is taken where all words are capitalized regarless of length.
*/

/**
* The TitleCaseConversion converts a string into a title case string.
* @param {String} inputString input string
* @returns {String}
* The titleCaseConversion function converts a string into a title case string.
* @param {string} inputString The input string which can have any types of letter casing.
* @returns {string} A string that is in title case.
*/
const TitleCaseConversion = (inputString) => {
const titleCaseConversion = (inputString) => {
if (inputString === '') return ''
// Extact all space seprated string.
const stringCollections = inputString.split(' ').map(word => {
let firstChar = ''
// Get a character code by the use charCodeAt method.
// Get the [ASCII](https://en.wikipedia.org/wiki/ASCII) character code by the use charCodeAt method.
const firstCharCode = word[0].charCodeAt()
// If the character code lies between 97 to 122 it means they are in the lower case so convert it.
// If the ASCII character code lies between 97 to 122 it means they are in the lowercase so convert it.
if (firstCharCode >= 97 && firstCharCode <= 122) {
// Convert the case by use of the above explanation.
firstChar += String.fromCharCode(firstCharCode - 32)
Expand All @@ -22,21 +26,21 @@ const TitleCaseConversion = (inputString) => {
firstChar += word[0]
}
const newWordChar = word.slice(1).split('').map(char => {
// Get a character code by the use charCodeAt method.
// Get the ASCII character code by the use charCodeAt method.
const presentCharCode = char.charCodeAt()
// If the character code lies between 65 to 90 it means they are in the upper case so convert it.
// If the ASCII character code lies between 65 to 90, it means they are in the uppercase so convert it.
if (presentCharCode >= 65 && presentCharCode <= 90) {
// Convert the case by use of the above explanation.
return String.fromCharCode(presentCharCode + 32)
}
// Else return the characters without any modification.
return char
})
// return the first converted character and remaining character string.
// Return the first converted character and remaining character string.
return firstChar + newWordChar.join('')
})
// convert all words in a string and return it.
// Convert all words in a string and return it.
return stringCollections.join(' ')
}

module.exports = TitleCaseConversion
export { titleCaseConversion }
51 changes: 51 additions & 0 deletions Conversions/test/TitleCaseConversion.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
import { titleCaseConversion } from '../TitleCaseConversion'

describe(('Tests for the titleCaseConversion function'), () => {
it('should return an empty string when the input is an empty string', () => {
expect(titleCaseConversion('')).toEqual('')
})

it('should return the input string when the input string is a title case string', () => {
expect(titleCaseConversion('A Proper Title Case String')).toEqual('A Proper Title Case String')
})

it('should return a title case string when input is an all-uppercase string', () => {
expect(titleCaseConversion('ALL UPPER CASE')).toEqual('All Upper Case')
})

it('should return a title case string when input is a title case string of with spaces', () => {
expect(titleCaseConversion('ALL UPPERCASE')).toEqual('All Uppercase')
})

it('should return a title case string when input is a title case string of with no spaces', () => {
expect(titleCaseConversion('ALLUPPERCASE')).toEqual('Alluppercase')
})

it('should return a title case string when input is a title case string with punctuation', () => {
expect(titleCaseConversion('All Title Case!')).toEqual('All Title Case!')
})

it('should return a title case string when input is an all-lowercase string with no spaces', () => {
expect(titleCaseConversion('lowercaseinput')).toEqual('Lowercaseinput')
})

it('should return a title case string when input is an all-lowercase string with spaces', () => {
expect(titleCaseConversion('lowercase input')).toEqual('Lowercase Input')
})

it('should return a title case string when input is an all-lowercase string with punctuation', () => {
expect(titleCaseConversion('lower, case, input.')).toEqual('Lower, Case, Input.')
})

it('should return a title case string when input is an mixed-case string', () => {
expect(titleCaseConversion('mixeD CaSe INPuT')).toEqual('Mixed Case Input')
})

it('should return a title case string when input is an mixed-case string with no spaces', () => {
expect(titleCaseConversion('mixeDCaSeINPuT')).toEqual('Mixedcaseinput')
})

it('should return a title case string when input is an mixed-case string with punctuation', () => {
expect(titleCaseConversion('mixeD, CaSe, INPuT!')).toEqual('Mixed, Case, Input!')
})
})