Files
react-native/Libraries/LogBox/Data/__tests__/LogBoxLogParser-test.js
T
Rick Hanlon c2832f2355 Add data tests for LogBox
Summary:
Adds tests for `LogBox/Data`

Changelog: [Internal]

Reviewed By: cpojer

Differential Revision: D17965799

fbshipit-source-id: 708c62c1c886e65f4cc48f5fd22aaea3190f5512
2019-10-21 21:08:03 -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 LogBoxLogParser = require('../LogBoxLogParser').default;
describe('LogBoxLogParser', () => {
it('parses strings', () => {
expect(LogBoxLogParser({args: ['A']})).toEqual({
componentStack: [],
stack: [],
category: 'A',
message: {
content: 'A',
substitutions: [],
},
});
});
it('parses strings with arguments', () => {
expect(LogBoxLogParser({args: ['A', 'B', 'C']})).toEqual({
componentStack: [],
stack: [],
category: 'A B C',
message: {
content: 'A B C',
substitutions: [],
},
});
});
it('parses formatted strings', () => {
expect(LogBoxLogParser({args: ['%s', 'A']})).toEqual({
componentStack: [],
stack: [],
category: '\ufeff%s',
message: {
content: 'A',
substitutions: [
{
length: 1,
offset: 0,
},
],
},
});
});
it('parses formatted strings with insufficient arguments', () => {
expect(LogBoxLogParser({args: ['%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(LogBoxLogParser({args: ['%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(LogBoxLogParser({args: ['%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(
LogBoxLogParser({
args: [
'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('does not detect a component stack in the third argument', () => {
expect(
LogBoxLogParser({
args: [
'Some kind of message',
'Some other kind of message',
'\n in MyComponent (at filename.js:1)\n in MyOtherComponent (at filename2.js:1)',
],
}),
).toEqual({
componentStack: [],
stack: [],
category:
'Some kind of message Some other kind of message \n in MyComponent (at filename.js:1)\n in MyOtherComponent (at filename2.js:1)',
message: {
content:
'Some kind of message Some other kind of message \n in MyComponent (at filename.js:1)\n in MyOtherComponent (at filename2.js:1)',
substitutions: [],
},
});
});
});