Files
react-native/Libraries/LogBox/Data/__tests__/LogBoxLogParser-test.js
T
Rick Hanlon cc056907cf Clean up API for LogBoxLogParser
Summary:
This diff cleans up two functions from:

```
LogBoxLogData.add({args: ['A']});
LogBoxLogParser({args: ['A']});
```

to:

```
LogBoxLogData.add(['A']);
LogBoxLogParser.parseLog(['A']);
```

Changelog: [Internal]

Reviewed By: cpojer

Differential Revision: D18056462

fbshipit-source-id: be6108069fc24b1f25d1382ad31c314183c793f8
2019-10-22 14:13:20 -07:00

161 lines
3.8 KiB
JavaScript

/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @emails oncall+react_native
* @format
* @flow strict-local
*/
'use strict';
jest.mock('../../../Core/Devtools/parseErrorStack', () => {
return {__esModule: true, default: jest.fn(() => [])};
});
const parseLogBoxLog = require('../parseLogBoxLog').default;
describe('parseLogBoxLog', () => {
it('parses strings', () => {
expect(parseLogBoxLog(['A'])).toEqual({
componentStack: [],
stack: [],
category: 'A',
message: {
content: 'A',
substitutions: [],
},
});
});
it('parses strings with arguments', () => {
expect(parseLogBoxLog(['A', 'B', 'C'])).toEqual({
componentStack: [],
stack: [],
category: 'A B C',
message: {
content: 'A B C',
substitutions: [],
},
});
});
it('parses formatted strings', () => {
expect(parseLogBoxLog(['%s', 'A'])).toEqual({
componentStack: [],
stack: [],
category: '\ufeff%s',
message: {
content: 'A',
substitutions: [
{
length: 1,
offset: 0,
},
],
},
});
});
it('parses formatted strings with insufficient arguments', () => {
expect(parseLogBoxLog(['%s %s', 'A'])).toEqual({
componentStack: [],
stack: [],
category: '\ufeff%s %s',
message: {
content: 'A %s',
substitutions: [
{
length: 1,
offset: 0,
},
{
length: 2,
offset: 2,
},
],
},
});
});
it('parses formatted strings with excess arguments', () => {
expect(parseLogBoxLog(['%s', 'A', 'B'])).toEqual({
componentStack: [],
stack: [],
category: '\ufeff%s B',
message: {
content: 'A B',
substitutions: [
{
length: 1,
offset: 0,
},
],
},
});
});
it('treats "%s" in arguments as literals', () => {
expect(parseLogBoxLog(['%s', '%s', 'A'])).toEqual({
componentStack: [],
stack: [],
category: '\ufeff%s A',
message: {
content: '%s A',
substitutions: [
{
length: 2,
offset: 0,
},
],
},
});
});
it('detects a component stack in the second argument', () => {
expect(
parseLogBoxLog([
'Some kind of message',
'\n in MyComponent (at filename.js:1)\n in MyOtherComponent (at filename2.js:1)',
]),
).toEqual({
componentStack: [
{component: 'MyComponent', location: 'filename.js:1'},
{component: 'MyOtherComponent', location: 'filename2.js:1'},
],
stack: [],
category: 'Some kind of message',
message: {
content: 'Some kind of message',
substitutions: [],
},
});
});
it('detects a component stack in the nth argument', () => {
expect(
parseLogBoxLog([
'Some kind of message',
'Some other kind of message',
'\n in MyComponent (at filename.js:1)\n in MyOtherComponent (at filename2.js:1)',
'Some third kind of message',
]),
).toEqual({
componentStack: [
{component: 'MyComponent', location: 'filename.js:1'},
{component: 'MyOtherComponent', location: 'filename2.js:1'},
],
stack: [],
category:
'Some kind of message Some other kind of message Some third kind of message',
message: {
content:
'Some kind of message Some other kind of message Some third kind of message',
substitutions: [],
},
});
});
});