How to use removeWhitespace method in jest-extended

Best JavaScript code snippet using jest-extended

utils.js

Source:utils.js Github

copy

Full Screen

...5 function parseTableDetails(cheerioHandle, selection) {6 const tableDictionary = {};7 cheerioHandle(selection).each(function (id, elem) {8 const children = cheerioHandle(elem).children();9 const dictKey = removeWhitespace(children.eq(0).text());10 if (dictKey.indexOf('ändern') === -1 && dictKey !== '') {11 if(date_regex.test(removeWhitespace(children.eq(1).text()))){12 tableDictionary[dictKey] = moment(removeWhitespace(children.eq(1).text()),'DD.MM.YYYY').format('YYYY-MM-DD');13 } else {14 tableDictionary[dictKey] = removeWhitespace(children.eq(1).text());15 }16 }17 });18 return tableDictionary;19 }20 function parseTable(cheerioHandle, selection, keys, elementCount, offset) {21 const tableDictionary = [];22 cheerioHandle(selection).each(function (id, elem) {23 if (offset === undefined || id >= offset) {24 const eachEntry = {};25 const children = cheerioHandle(elem).children();26 for (let count = 0; count < elementCount; count++) {27 if(date_regex.test(removeWhitespace(children.eq(count).text()))){28 eachEntry[keys[count]] = moment(removeWhitespace(children.eq(count).text()),'DD.MM.YYYY').format('YYYY-MM-DD');29 } else {30 eachEntry[keys[count]] = removeWhitespace(children.eq(count).text());31 }32 }33 tableDictionary.push(eachEntry);34 }35 });36 return tableDictionary;37 }38 function parseTableRegex(cheerioHandle, selection, keys, elementCount, offset, regexObj) {39 const tableDictionary = [];40 cheerioHandle(selection).each(function (id, elem) {41 if (offset === undefined || id >= offset) {42 const eachEntry = {};43 const children = cheerioHandle(elem).children()44 for (let count = 0; count < elementCount; count++) {45 if (count.toString() in regexObj){46 if(removeWhitespace(children.eq(count).html()).length === 0){47 eachEntry[keys[count]] = "";48 }else{49 eachEntry[keys[count]] = removeWhitespace(children.eq(count).html().match(regexObj[count.toString()])[1]);50 }51 }else{52 if(date_regex.test(removeWhitespace(children.eq(count).text()))){53 eachEntry[keys[count]] = moment(removeWhitespace(children.eq(count).text()),'DD.MM.YYYY').format('YYYY-MM-DD');54 } else {55 eachEntry[keys[count]] = removeWhitespace(children.eq(count).text());56 }57 }58 }59 tableDictionary.push(eachEntry);60 }61 });62 return tableDictionary;63 }64 function parseTableAdvanced(cheerioHandle, selection, eqElement, afterEqSelection, keys, elementCount, rowoffset,columnoffset) {65 const tableDictionary = [];66 cheerioHandle(selection).eq(eqElement).find(afterEqSelection).each(function (id, elem) {67 if (rowoffset === null || id >= rowoffset) {68 const eachEntry = {};69 const children = cheerioHandle(elem).children();70 for (let count = columnoffset; count < elementCount + columnoffset; count++) {71 if(date_regex.test(removeWhitespace(children.eq(count).text()))){72 eachEntry[keys[count-columnoffset]] = moment(removeWhitespace(children.eq(count).text()),'DD.MM.YYYY').format('YYYY-MM-DD');73 } else {74 eachEntry[keys[count-columnoffset]] = removeWhitespace(children.eq(count).text());75 }76 }77 tableDictionary.push(eachEntry);78 }79 });80 return tableDictionary;81 }82 function parseTableAdvancedColumn(cheerioHandle, selection, eqElement, afterEqSelection, keys, elementCount, rowoffset, columndata) {83 const tableDictionary = {};84 let emptycolumns = 0;85 cheerioHandle(selection).eq(eqElement).find(afterEqSelection).each(function (id, elem) {86 if (rowoffset === null || id >= rowoffset) {87 const children = cheerioHandle(elem).children();88 if(removeWhitespace(children.eq(0).text()).length === 0){89 emptycolumns= emptycolumns + 1;90 }else{91 if(date_regex.test(removeWhitespace(children.eq(columndata).text()))){92 tableDictionary[keys[id -emptycolumns - rowoffset]] = moment(removeWhitespace(children.eq(columndata).text()),'DD.MM.YYYY').format('YYYY-MM-DD');93 } else {94 tableDictionary[keys[id -emptycolumns - rowoffset]] = removeWhitespace(children.eq(columndata).text());95 }96 }97 }98 });99 return tableDictionary;100 }101 function parseAvailableSeminarsTable(cheerioHandle, selection, eqElement, afterEqSelection, offset) {102 const tableDictionary = [];103 cheerioHandle(selection).eq(eqElement).find(afterEqSelection).each(function (id, elem) {104 //remove last line and start at offset105 if (id >= offset && id <= cheerioHandle(selection).eq(eqElement).find(afterEqSelection).length - 2) {106 const eachEntry = {};107 const children = cheerioHandle(elem).children();108 eachEntry.title = removeWhitespace(children.eq(0).find('b').text());109 eachEntry.lecturer = removeWhitespace(children.eq(0).find('i').text());110 eachEntry.from = moment(removeWhitespace(children.eq(1).find('b').text()),'DD.MM.YYYY').format('YYYY-MM-DD');111 eachEntry.to = moment(removeWhitespace(children.eq(2).find('b').text()),'DD.MM.YYYY').format('YYYY-MM-DD');112 eachEntry.description = removeWhitespace(children.eq(3).text());113 eachEntry.category = children.eq(4).find('img').attr('title');114 if(children.eq(5).find('a').eq(0).attr('href') !== undefined) {115 eachEntry.seminarid = parseInt(children.eq(5).find('a').eq(0).attr('href').match(/\d+$/)[0]);116 }117 tableDictionary.push(eachEntry);118 }119 });120 return tableDictionary;121 }122 function parseRegisteredSeminarsTable(cheerioHandle, selection, eqElement, afterEqSelection, rowoffset) {123 const tableDictionary = [];124 cheerioHandle(selection).eq(eqElement).find(afterEqSelection).each(function (id, elem) {125 //remove last line and start at rowoffset126 if (id >= rowoffset && id <= cheerioHandle(selection).eq(eqElement).find(afterEqSelection).length - 2 - rowoffset) {127 const eachEntry = {};128 const children = cheerioHandle(elem).children();129 const year_quarter = children.eq(1).text().split('-');130 eachEntry.year = parseInt(removeWhitespace(year_quarter[0]));131 eachEntry.quarter = parseInt(removeWhitespace(year_quarter[1]));132 const from_to = children.eq(2).find('b');133 eachEntry.from = moment(removeWhitespace(from_to.eq(0).text()),'DD.MM.YYYY').format('YYYY-MM-DD');134 eachEntry.to = moment(removeWhitespace(from_to.eq(1).text()),'DD.MM.YYYY').format('YYYY-MM-DD');135 eachEntry.title = removeWhitespace(children.eq(3).find('b').text());136 children.eq(3).find('b').remove();137 eachEntry.lecturer = removeWhitespace(children.eq(3).not('b').text());138 eachEntry.register_date = removeWhitespace(children.eq(4).text());139 eachEntry.register_approved = transformRegisterStatus(removeWhitespace(children.eq(5).text()));140 eachEntry.seminarid = parseInt(children.eq(6).find('a').eq(0).attr('href').match(/\d+$/)[0]);141 tableDictionary.push(eachEntry);142 }143 });144 return tableDictionary;145 }146 function transformRegisterStatus(status){147 return !!(status.indexOf('OK!') !== -1 && status.indexOf('Angemeldet!'));148 }149 function getSeminarQuarterID(year, quarter) {150 const year_quarter = '' + year + ' - ' + quarter;151 switch (year_quarter) {152 case '2016 - 4':153 return 95;154 break;155 case '2016 - 3':156 return 94;157 break;158 case '2016 - 2':159 return 93;160 break;161 case '2016 - 1':162 return 92;163 break;164 case '2015 - 4':165 return 88;166 break;167 case '2015 - 3':168 return 91;169 break;170 case '2015 - 2':171 return 90;172 break;173 case '2015 - 1':174 return 89;175 break;176 case '2014 - 4':177 return 87;178 break;179 case '2014 - 3':180 return 86;181 break;182 case '2014 - 2':183 return 85;184 break;185 case '2014 - 1':186 return 84;187 break;188 case '2013 - 4':189 return 82;190 break;191 case '2013 - 3':192 return 81;193 break;194 case '2013 - 2':195 return 80;196 break;197 case '2013 - 1':198 return 79;199 break;200 case '2012 - 4':201 return 78;202 break;203 case '2012 - 3':204 return 77;205 break;206 case '2012 - 2':207 return 76;208 break;209 case '2012 - 1':210 return 75;211 break;212 case '2011 - 4':213 return 74;214 break;215 case '2011 - 3':216 return 73;217 break;218 case '2011 - 2':219 return 72;220 break;221 case '2011 - 1':222 return 71;223 break;224 case '2010 - 4':225 return 70;226 break;227 case '2010 - 3':228 return 69;229 break;230 case '2010 - 2':231 return 68;232 break;233 case '2010 - 1':234 return 67;235 break;236 case '2009 - 4':237 return 66;238 break;239 case '2009 - 3':240 return 65;241 break;242 case '2009 - 2':243 return 64;244 break;245 case '2009 - 1':246 return 63;247 break;248 case '2008 - 4':249 return 62;250 break;251 case '2008 - 3':252 return 61;253 break;254 case '2008 - 2':255 return 60;256 break;257 case '2008 - 1':258 return 59;259 break;260 default:261 return null;262 break;263 }264 }265 function removeWhitespace(text) {266 return text.trim().replace(/\s\s+/g, '');267 }268 return {269 removeWhitespace,270 parseTableDetails,271 parseTable,272 parseTableRegex,273 parseAvailableSeminarsTable,274 parseRegisteredSeminarsTable,275 getSeminarQuarterID,276 parseTableAdvanced,277 parseTableAdvancedColumn278 };279})();

Full Screen

Full Screen

remove-white-space.test.js

Source:remove-white-space.test.js Github

copy

Full Screen

1const { removeWhiteSpace } = require('../private');2describe('The function removeWhiteSpace', () => {3 it('remove spaces from the end of words.', () => {4 const testData = ['a ', 'b ', 'c'];5 expect(removeWhiteSpace(testData)).toEqual(['a', 'b', 'c']);6 });7 it('removes tabs from the end of words.', () => {8 const testData = ['aba\t', 'aca', 'bcde\t\t\t\t', 'caad'];9 expect(removeWhiteSpace(testData)).toEqual(['aba', 'aca', 'bcde', 'caad']);10 });11 it('removes carriage returns from the end of words.', () => {12 const testData = ['aba\r', 'aca\r\r\r', 'bcde\r\r\r\r', 'caad'];13 expect(removeWhiteSpace(testData)).toEqual(['aba', 'aca', 'bcde', 'caad']);14 });15 it('leading white space from words.', () => {16 const testData = [' a', '\tb', '\rc'];17 expect(removeWhiteSpace(testData)).toEqual(['a', 'b', 'c']);18 });19 it('does not remove white space within words.', () => {20 const testData = ['a a', 'b\tb', 'c\rc'];21 expect(removeWhiteSpace(testData)).toEqual(['a a', 'b\tb', 'c\rc']);22 });23 it('handles null and undefined values.', () => {24 const testData = ['a a', 'b\tb', 'c\rc', null, undefined];25 expect(removeWhiteSpace(testData)).toEqual(['a a', 'b\tb', 'c\rc', null, undefined]);26 });...

Full Screen

Full Screen

removeWhitespace.test.js

Source:removeWhitespace.test.js Github

copy

Full Screen

1import removeWhitespace from './removeWhitespace';2it('removeWhitespace', () => {3 4 // no whitespace5 expect(removeWhitespace('asdf')).toBe('asdf');6 // only whitespace7 expect(removeWhitespace(' \t\t\n\r\r\r\n \t\n\n\n')).toBe('');8 // some whitespace9 expect(removeWhitespace('a \n\n\t\t\r\r r nn \t\t\n ')).toBe('arnn');10 // empty string11 expect(removeWhitespace('')).toBe('');...

Full Screen

Full Screen

Using AI Code Generation

copy

Full Screen

1const removeWhitespace = require('jest-extended').removeWhitespace;2test('removeWhitespace', () => {3 expect(removeWhitespace('')).toBe('');4 expect(removeWhitespace(' ')).toBe('');5 expect(removeWhitespace(' ')).toBe('');6 expect(removeWhitespace('a')).toBe('a');7 expect(removeWhitespace('a ')).toBe('a');8 expect(removeWhitespace(' a')).toBe('a');9 expect(removeWhitespace(' a ')).toBe('a');10 expect(removeWhitespace(' a b ')).toBe('ab');11 expect(removeWhitespace(' a b c ')).toBe('abc');12 expect(removeWhitespace(' a b c d ')).toBe('abcd');13 expect(removeWhitespace(' a b c d e ')).toBe('abcde');14 expect(removeWhitespace(' a b c d e f ')).toBe('abcdef');15 expect(removeWhitespace(' a b c d e f g ')).toBe('abcdefg');16 expect(removeWhitespace(' a b c d e f g h ')).toBe('abcdefgh');17 expect(removeWhitespace(' a b c d e f g h i ')).toBe('abcdefghi');18 expect(removeWhitespace(' a b c d e f g h i j ')).toBe('abcdefghij');19 expect(removeWhitespace(' a b c d e f g h i j k ')).toBe('abcdefghijk');20 expect(removeWhitespace(' a b c d e f g h i j k l ')).toBe('abcdefghijkl');21 expect(removeWhitespace(' a b c d e f g h i j k l m ')).toBe('abcdefghijklm');22 expect(removeWhitespace(' a b c d e f g h i j k l m n ')).toBe('abcdefghijklmn');23 expect(removeWhitespace(' a b c d e f g h i j k l m n o ')).toBe('abcdefghijklmno');24 expect(removeWhitespace(' a b c d e f g h i j k l m n o p ')).toBe('abcdefghijklmnop');25 expect(removeWhitespace(' a b c d e f g h i j k l m n o p q ')).toBe('abcdefghijklmnopq');26 expect(removeWhitespace(' a b c d e f g h i j k l m n o p q r ')).toBe('abcdefghijklmnopqr');27 expect(removeWhitespace(' a b c d e f g h i j k l m n o p q r s ')).toBe('abcdefghijklmnopqrs');28 expect(removeWhitespace('

Full Screen

Using AI Code Generation

copy

Full Screen

1const removeWhitespace = require('jest-extended').removeWhitespace;2describe('removeWhitespace', () => {3 it('should remove all whitespace from a string', () => {4 expect(removeWhitespace('foo bar')).toBe('foobar');5 expect(removeWhitespace('foo bar ')).toBe('foobar');6 expect(removeWhitespace(' foo bar ')).toBe('foobar');7 expect(removeWhitespace('foo bar')).not.toBe('foo bar');8 expect(removeWhitespace('foo bar')).not.toBe('foo');9 expect(removeWhitespace('foo bar')).not.toBe('bar');10 });11});

Full Screen

Using AI Code Generation

copy

Full Screen

1const removeWhitespace = require('jest-extended').removeWhitespace;2test('removeWhitespace', () => {3 expect(removeWhitespace(' foo bar ')).toBe('foobar');4});5const removeWhitespace = require('jest-extended').removeWhitespace;6test('removeWhitespace', () => {7 expect(removeWhitespace(' foo bar ')).toBe('foobar');8});9const removeWhitespace = require('jest-extended').removeWhitespace;10test('removeWhitespace', () => {11 expect(removeWhitespace(' foo bar ')).toBe('foobar');12});13const removeWhitespace = require('jest-extended').removeWhitespace;14test('removeWhitespace', () => {15 expect(removeWhitespace(' foo bar ')).toBe('foobar');16});17const removeWhitespace = require('jest-extended').removeWhitespace;18test('removeWhitespace', () => {19 expect(removeWhitespace(' foo bar ')).toBe('foobar');20});21const removeWhitespace = require('jest-extended').removeWhitespace;22test('removeWhitespace', () => {23 expect(removeWhitespace(' foo bar ')).toBe('foobar');24});25const removeWhitespace = require('jest-extended').removeWhitespace;26test('removeWhitespace', () => {27 expect(removeWhitespace(' foo bar ')).toBe('foobar');28});29const removeWhitespace = require('jest-extended').removeWhitespace;30test('removeWhitespace', () => {31 expect(removeWhitespace(' foo bar ')).toBe('foobar');32});33const removeWhitespace = require('jest-extended').removeWhitespace;34test('removeWhitespace', () => {35 expect(removeWhitespace(' foo bar ')).toBe('foobar');36});

Full Screen

Using AI Code Generation

copy

Full Screen

1expect('a b c').toRemoveWhitespace('abc');2expect('a b c').not.toRemoveWhitespace('a b c');3expect('a b c').not.toRemoveWhitespace('abc');4expect('a b c').not.toRemoveWhitespace('a b c');5expect('a b c').not.toRemoveWhitespace('abc');6expect('a b c').not.toRemoveWhitespace('a b c');7expect('a b c').not.toRemoveWhitespace('abc');8expect('a b c').not.toRemoveWhitespace('a b c');9expect('a b c').not.toRemoveWhitespace('abc');10expect('a b c').not.toRemoveWhitespace('a b c');11expect('a b c').not.toRemoveWhitespace('abc');12expect('a b c').not.toRemoveWhitespace('a b c');13expect('a b c').not.toRemoveWhitespace('abc');14expect('a b c').not.toRemoveWhitespace('a b c');15expect('a b c').not.toRemoveWhitespace('abc');16expect('a b c').not.toRemoveWhitespace('a b c');

Full Screen

Using AI Code Generation

copy

Full Screen

1const { removeWhitespace } = require('jest-extended');2const str = ' foo ';3console.log(removeWhitespace(str));4import { removeWhitespace } from 'jest-extended';5const str = ' foo ';6console.log(removeWhitespace(str));7import removeWhitespace from 'jest-extended/dist/lib/removeWhitespace';8const str = ' foo ';9console.log(removeWhitespace(str));10const removeWhitespace = require('jest-extended/dist/lib/removeWhitespace');11const str = ' foo ';12console.log(removeWhitespace(str));13const removeWhitespace = require('jest-extended/dist/lib/removeWhitespace').default;14const str = ' foo ';15console.log(removeWhitespace(str));16import removeWhitespace from 'jest-extended/dist/lib/removeWhitespace';17const str = ' foo ';18console.log(removeWhitespace(str));19import removeWhitespace from 'jest-extended/dist/lib/removeWhitespace';20const str = ' foo ';21console.log(removeWhitespace(str));22const removeWhitespace = require('jest-extended/dist/lib/removeWhitespace').default;23const str = ' foo ';24console.log(removeWhitespace(str));25const removeWhitespace = require('jest-extended/dist/lib/removeWhitespace').default;26const str = ' foo ';27console.log(removeWhitespace(str));28const removeWhitespace = require('jest-extended/dist/lib/removeWhitespace').default;29const str = ' foo ';30console.log(removeWhitespace(str));31const removeWhitespace = require('jest-extended/dist/lib/removeWhitespace').default;32const str = ' foo ';33console.log(removeWhitespace(str));

Full Screen

Using AI Code Generation

copy

Full Screen

1const removeWhitespace = require('jest-extended').removeWhitespace;2const removeWhitespace = require('jest-extended');3const removeWhitespace = require('jest-extended/dist/removeWhitespace');4const { removeWhitespace } = require('jest-extended');5const { removeWhitespace } = require('jest-extended/dist/removeWhitespace');6import { removeWhitespace } from 'jest-extended';7import { removeWhitespace } from 'jest-extended/dist/removeWhitespace';8import removeWhitespace from 'jest-extended';9import removeWhitespace from 'jest-extended/dist/removeWhitespace';10import removeWhitespace from 'jest-extended/dist/removeWhitespace';11import removeWhitespace from 'jest-extended/dist/removeWhitespace';12- [removeWhitespace](#removewhitespace)13 - [Parameters](#parameters)

Full Screen

Using AI Code Generation

copy

Full Screen

1const { removeWhitespace } = require('jest-extended');2const str = 'Hello World!';3const result = removeWhitespace(str);4const { removeWhitespace } = require('jest-extended');5test('removeWhitespace', () => {6 expect(removeWhitespace('Hello World!')).toBe('HelloWorld!');7 expect(removeWhitespace('Hello World!')).not.toBe('Hello World!');8});9const { removeWhitespace } = require('jest-extended');10const str = 'Hello World!';11const result = removeWhitespace(str);12const { removeWhitespace } = require('jest-extended');13test('removeWhitespace', () => {14 expect(removeWhitespace('Hello World!')).toBe('HelloWorld!');15 expect(removeWhitespace('Hello World!')).not.toBe('Hello World!');16});

Full Screen

Using AI Code Generation

copy

Full Screen

1const removeWhitespace = require('jest-extended').removeWhitespace;2const str = ' This is a string with whitespace ';3const result = removeWhitespace(str);4const removeWhitespace = require('jest-extended').removeWhitespace;5const str = ' This is a string with whitespace ';6const result = removeWhitespace(str);

Full Screen

Using AI Code Generation

copy

Full Screen

1const removeWhitespace = require('jest-extended').removeWhitespace;2const result = removeWhitespace('Hello World');3console.log(result);4removeNonAlphaNumeric() method5const removeNonAlphaNumeric = require('jest-extended').removeNonAlphaNumeric;6const result = removeNonAlphaNumeric('Hello World 123');7console.log(result);8removeNonNumeric() method9const removeNonNumeric = require('jest-extended').removeNonNumeric;10const result = removeNonNumeric('Hello World 123');11console.log(result);12removeNonPrintable() method13const removeNonPrintable = require('jest-extended').removeNonPrintable;14const result = removeNonPrintable('Hello World 123');15console.log(result);16removeNonAscii() method17const removeNonAscii = require('jest-extended').removeNonAscii;18const result = removeNonAscii('Hello World 123');19console.log(result);20removeNonWord() method21const removeNonWord = require('jest-extended').removeNonWord;22const result = removeNonWord('Hello World 123');23console.log(result);24removeHtmlTags() method25const removeHtmlTags = require('jest-extended').removeHtmlTags;26const result = removeHtmlTags('<p>Hello World</p>');27console.log(result);

Full Screen

Using AI Code Generation

copy

Full Screen

1const removeWhitespace = require('jest-extended').removeWhitespace;2const str = " foo bar ";3const result = removeWhitespace(str);4console.log(result);5Remove all whitespace from a string using replace() in JavaScript6Remove all whitespace from a string using split() in JavaScript7Remove all whitespace from a string using filter() in JavaScript8Remove all whitespace from a string using map() in JavaScript9Remove all whitespace from a string using replaceAll() in JavaScript10Remove all whitespace from a string using replace() in Python11Remove all whitespace from a string using split() in Python12Remove all whitespace from a string using filter() in Python13Remove all whitespace from a string using map() in Python14Remove all whitespace from a string using replaceAll() in Python15Remove all whitespace from a string using replace() in PHP16Remove all whitespace from a string using split() in PHP17Remove all whitespace from a string using filter() in PHP18Remove all whitespace from a string using map() in PHP19Remove all whitespace from a string using replaceAll() in PHP20Remove all whitespace from a string using replace() in C#21Remove all whitespace from a string using split() in C#22Remove all whitespace from a string using filter() in C#23Remove all whitespace from a string using map() in C#24Remove all whitespace from a string using replaceAll() in C#25Remove all whitespace from a string using replace() in Java26Remove all whitespace from a string using split() in Java27Remove all whitespace from a string using filter() in Java28Remove all whitespace from a string using map() in Java29Remove all whitespace from a string using replaceAll() in Java30Remove all whitespace from a string using replace() in C++31Remove all whitespace from a string using split() in C++32Remove all whitespace from a string using filter() in C++33Remove all whitespace from a string using map() in C++34Remove all whitespace from a string using replaceAll() in C++

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run jest-extended automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful