import _ from 'lodash' import React, { MouseEvent } from 'react' import { observer } from 'mobx-react' import Markdown from 'markdown-it' import Collapsible from '../collapsible/collapsible' import ErrorCodeFrame from '../errors/error-code-frame' import ErrorStack from '../errors/error-stack' import events from '../lib/events' import FlashOnClick from '../lib/flash-on-click' import { onEnterOrSpace } from '../lib/util' import Attempt from '../attempts/attempt-model' import Command from '../commands/command-model' interface DocsUrlProps { url: string | string[] } const DocsUrl = ({ url }: DocsUrlProps) => { if (!url) return null const urlArray = _.castArray(url) return (<> {_.map(urlArray, (url) => ( Learn more ))} ) } interface TestErrorProps { model: Attempt | Command onPrintToConsole?: () => void } const TestError = observer((props: TestErrorProps) => { const md = new Markdown('zero') md.enable(['backticks', 'emphasis', 'escape']) const onPrint = props.onPrintToConsole || (() => { events.emit('show:error', props.model) }) const _onPrintClick = (e: MouseEvent) => { e.stopPropagation() onPrint() } const formattedMessage = (message?: string) => { return message ? md.renderInline(message) : '' } const { err } = props.model const { codeFrame } = err if (!err.displayMessage) return null return (
{err.name}
{codeFrame && } {err.stack &&
Print to console
} contentClass='runnable-err-stack-trace' >
}
) }) export default TestError