diff --git a/src/git.ts b/src/git.ts index 94144043cae..c1d02147202 100644 --- a/src/git.ts +++ b/src/git.ts @@ -50,6 +50,9 @@ export class Git { * * @param options Options for the commit entry. * @param options.merge Set to `true` to generate a merge message line. + * @param options.eol Choose the end of line character to use. Defaults to 'CRLF'. + * 'LF' = '\n', + * 'CRLF' = '\r\n' * * @example * faker.git.commitEntry() @@ -59,17 +62,30 @@ export class Git { * // * // copy primary system */ - commitEntry(options: { merge?: boolean } = {}): string { - // TODO @Shinigami92 2022-01-11: We may want to make it configurable to use just `\n` instead of `\r\n` - let entry = `commit ${this.commitSha()}\r\n`; + commitEntry( + options: { + merge?: boolean; + eol?: 'LF' | 'CRLF'; + } = {} + ): string { + const lines = [`commit ${this.faker.git.commitSha()}`]; if (options.merge || this.faker.datatype.number({ min: 0, max: 4 }) === 0) { - entry += `Merge: ${this.shortSha()}} ${this.shortSha()}\r\n`; + lines.push(`Merge: ${this.shortSha()} ${this.shortSha()}`); } - entry += `Author: ${this.faker.name.firstName()} ${this.faker.name.lastName()} <${this.faker.internet.email()}>\r\n`; - entry += `Date: ${this.faker.date.recent().toString()}\r\n`; - entry += `\r\n\xa0\xa0\xa0\xa0${this.commitMessage()}\r\n`; + lines.push( + `Author: ${this.faker.name.firstName()} ${this.faker.name.lastName()} <${this.faker.internet.email()}>`, + `Date: ${this.faker.date.recent().toString()}`, + '', + `\xa0\xa0\xa0\xa0${this.commitMessage()}`, + // to end with a eol char + '' + ); + + const eolOption = options.eol ?? 'CRLF'; + const eolChar = eolOption === 'CRLF' ? '\r\n' : '\n'; + const entry = lines.join(eolChar); return entry; } diff --git a/test/git.spec.ts b/test/git.spec.ts index 5da5deb5561..18451abd440 100644 --- a/test/git.spec.ts +++ b/test/git.spec.ts @@ -116,7 +116,7 @@ describe('git', () => { }); describe('commitEntry', () => { - it('should return a random commitEntry', () => { + it('should return a valid random commitEntry', () => { const commitEntry = faker.git.commitEntry(); expect(commitEntry).toBeTruthy(); @@ -141,6 +141,36 @@ describe('git', () => { expect(parts[4]).toMatch(/^\s{4}.+$/); } }); + + it('should return a random commitEntry with a default end of line charcter of "\r\n"', () => { + const commitEntry = faker.git.commitEntry(); + const parts = commitEntry.split('\r\n'); + + expect(parts.length).toBeGreaterThanOrEqual(6); + expect(parts.length).toBeLessThanOrEqual(7); + }); + + it('should return a random commitEntry with a configured end of line charcter of "\r\n" with eol = CRLF', () => { + const commitEntry = faker.git.commitEntry({ + eol: 'CRLF', + }); + const parts = commitEntry.split('\r\n'); + + expect(parts.length).toBeGreaterThanOrEqual(6); + expect(parts.length).toBeLessThanOrEqual(7); + }); + + it('should return a random commitEntry with a configured end of line charcter of "\n" with eol = LF', () => { + const commitEntry = faker.git.commitEntry({ + eol: 'LF', + }); + const parts = commitEntry.split('\n'); + + expect(parts.length).toBeGreaterThanOrEqual(6); + expect(parts.length).toBeLessThanOrEqual(7); + + expect(commitEntry).not.contains('\r\n'); + }); }); describe('commitMessage', () => {