From ddd191e35dc3e0528b13db745062913f61590953 Mon Sep 17 00:00:00 2001 From: Corentin Thomasset Date: Sun, 18 Jun 2023 12:13:48 +0200 Subject: [PATCH] refactor(xml-formatter): improved unit tests --- .../xml-formatter.service.test.ts | 35 ++++++++++++------- .../xml-formatter/xml-formatter.service.ts | 27 ++++++++++++-- src/tools/xml-formatter/xml-formatter.vue | 32 ++++++++--------- 3 files changed, 61 insertions(+), 33 deletions(-) diff --git a/src/tools/xml-formatter/xml-formatter.service.test.ts b/src/tools/xml-formatter/xml-formatter.service.test.ts index a58a1d7b..2b14558c 100644 --- a/src/tools/xml-formatter/xml-formatter.service.test.ts +++ b/src/tools/xml-formatter/xml-formatter.service.test.ts @@ -1,18 +1,27 @@ import { describe, expect, it } from 'vitest'; import { formatXml } from './xml-formatter.service'; -const options = { - indentation: ' ', - collapseContent: true, - lineSeparator: '\n', -}; -const initString = 'foobar'; -const endString = ` - foo - bar -`; -describe('xml-formatter', () => { - it('Should generate same string', () => { - expect(formatXml(initString, options)).toEqual(endString); +describe('xml-formatter service', () => { + describe('formatXml', () => { + it('converts XML into a human readable format', () => { + const initString = 'foobar'; + + expect(formatXml(initString)).toMatchInlineSnapshot(` + " + + foo + + + bar + + " + `); + }); + + it('returns an empty string if the input is not valid XML', () => { + const initString = 'hello world'; + + expect(formatXml(initString)).toEqual(''); + }); }); }); diff --git a/src/tools/xml-formatter/xml-formatter.service.ts b/src/tools/xml-formatter/xml-formatter.service.ts index f1b787f8..3441f0bb 100644 --- a/src/tools/xml-formatter/xml-formatter.service.ts +++ b/src/tools/xml-formatter/xml-formatter.service.ts @@ -1,5 +1,28 @@ import xmlFormat, { type XMLFormatterOptions } from 'xml-formatter'; +import { withDefaultOnError } from '@/utils/defaults'; -export function formatXml(value: string, options?: XMLFormatterOptions): string { - return xmlFormat(value, options) || ''; +export { formatXml, isValidXML }; + +function cleanRawXml(rawXml: string): string { + return rawXml.trim(); +} + +function formatXml(rawXml: string, options?: XMLFormatterOptions): string { + return withDefaultOnError(() => xmlFormat(cleanRawXml(rawXml), options) ?? '', ''); +} + +function isValidXML(rawXml: string): boolean { + const cleanedRawXml = cleanRawXml(rawXml); + + if (cleanedRawXml === '') { + return true; + } + + try { + xmlFormat(cleanedRawXml); + return true; + } + catch (e) { + return false; + } } diff --git a/src/tools/xml-formatter/xml-formatter.vue b/src/tools/xml-formatter/xml-formatter.vue index efe0b798..768656ce 100644 --- a/src/tools/xml-formatter/xml-formatter.vue +++ b/src/tools/xml-formatter/xml-formatter.vue @@ -1,41 +1,37 @@