import {render} from 'sentry-test/reactTestingLibrary'; import ExceptionMechanism from 'sentry/components/events/interfaces/crashContent/exception/mechanism'; describe('ExceptionMechanism', () => { describe('basic attributes', () => { it('should render the exception mechanism', () => { const mechanism = {type: 'generic'}; const wrapper = render(); expect(wrapper.container).toSnapshot(); }); it('should render a help_link icon', () => { const mechanism = {type: 'generic', help_link: 'https://example.org/help'}; const wrapper = render(); expect(wrapper.container).toSnapshot(); }); it('should render a description hovercard', () => { const mechanism = {type: 'generic', description: 'Nothing to see here.'}; const wrapper = render(); expect(wrapper.container).toSnapshot(); }); it('should add the help_link to the description hovercard', () => { const mechanism = { type: 'generic', description: 'Nothing to see here.', help_link: 'https://example.org/help', }; const wrapper = render(); expect(wrapper.container).toSnapshot(); }); it('should not add the help_link if not starts with http(s)', () => { const mechanism = { type: 'generic', description: 'Nothing to see here.', help_link: 'example.org/help', }; const wrapper = render(); expect(wrapper.container).toSnapshot(); }); it('should render the handled pill', () => { const mechanism = {type: 'generic', handled: false}; const wrapper = render(); expect(wrapper.container).toSnapshot(); }); }); describe('errno meta', () => { it('should render the errno number', () => { const mechanism = {type: 'generic', meta: {errno: {number: 7}}}; const wrapper = render(); expect(wrapper.container).toSnapshot(); }); it('should prefer the errno name if present', () => { const mechanism = {type: 'generic', meta: {errno: {number: 7, name: 'E2BIG'}}}; const wrapper = render(); expect(wrapper.container).toSnapshot(); }); }); describe('mach_exception meta', () => { it('should render the mach exception number', () => { const mechanism = { type: 'generic', meta: {mach_exception: {exception: 1, subcode: 8, code: 1}}, }; const wrapper = render(); expect(wrapper.container).toSnapshot(); }); it('should prefer the exception name if present', () => { const mechanism = { type: 'generic', meta: { mach_exception: {exception: 1, subcode: 8, code: 1, name: 'EXC_BAD_ACCESS'}, }, }; const wrapper = render(); expect(wrapper.container).toSnapshot(); }); }); describe('signal meta', () => { it('should render the signal number', () => { const mechanism = {type: 'generic', meta: {signal: {number: 11}}}; const wrapper = render(); expect(wrapper.container).toSnapshot(); }); it('should add the signal code if present', () => { const mechanism = {type: 'generic', meta: {signal: {number: 11, code: 0}}}; const wrapper = render(); expect(wrapper.container).toSnapshot(); }); it('should prefer signal and code names if present', () => { const mechanism = { type: 'generic', meta: {signal: {number: 11, code: 0, name: 'SIGSEGV', code_name: 'SEGV_NOOP'}}, }; const wrapper = render(); expect(wrapper.container).toSnapshot(); }); }); describe('additional data', () => { it('should render all fields in the data object', () => { const mechanism = {type: 'generic', data: {relevant_address: '0x1'}}; const wrapper = render(); expect(wrapper.container).toSnapshot(); }); it('should skip object-like values', () => { const mechanism = { type: 'generic', data: { a: {x: 11}, b: [4, 2], c: new Date(), }, }; const wrapper = render(); expect(wrapper.container).toSnapshot(); }); }); });