aboutsummaryrefslogtreecommitdiff
path: root/node_modules/@ava/pretty-format/plugins
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2017-05-28 00:38:50 +0200
committerFlorian Dold <florian.dold@gmail.com>2017-05-28 00:40:43 +0200
commit7fff4499fd915bcea3fa93b1aa8b35f4fe7a6027 (patch)
tree6de9a1aebd150a23b7f8c273ec657a5d0a18fe3e /node_modules/@ava/pretty-format/plugins
parent963b7a41feb29cc4be090a2446bdfe0c1f1bcd81 (diff)
add linting (and some initial fixes)
Diffstat (limited to 'node_modules/@ava/pretty-format/plugins')
-rw-r--r--node_modules/@ava/pretty-format/plugins/ReactElement.js83
-rw-r--r--node_modules/@ava/pretty-format/plugins/ReactTestComponent.js58
2 files changed, 141 insertions, 0 deletions
diff --git a/node_modules/@ava/pretty-format/plugins/ReactElement.js b/node_modules/@ava/pretty-format/plugins/ReactElement.js
new file mode 100644
index 000000000..0acd7ea10
--- /dev/null
+++ b/node_modules/@ava/pretty-format/plugins/ReactElement.js
@@ -0,0 +1,83 @@
+'use strict';
+
+const printString = require('../printString');
+
+const reactElement = Symbol.for('react.element');
+
+function traverseChildren(opaqueChildren, cb) {
+ if (Array.isArray(opaqueChildren)) {
+ opaqueChildren.forEach(child => traverseChildren(child, cb));
+ } else if (opaqueChildren != null && opaqueChildren !== false) {
+ cb(opaqueChildren);
+ }
+}
+
+function printChildren(flatChildren, print, indent, colors, opts) {
+ return flatChildren.map(node => {
+ if (typeof node === 'object') {
+ return printElement(node, print, indent, colors, opts);
+ } else if (typeof node === 'string') {
+ return printString(colors.content.open + node + colors.content.close);
+ } else {
+ return print(node);
+ }
+ }).join(opts.edgeSpacing);
+}
+
+function printProps(props, print, indent, colors, opts) {
+ return Object.keys(props).sort().map(name => {
+ if (name === 'children') {
+ return '';
+ }
+
+ const prop = props[name];
+ let printed = print(prop);
+
+ if (typeof prop !== 'string') {
+ if (printed.indexOf('\n') !== -1) {
+ printed = '{' + opts.edgeSpacing + indent(indent(printed) + opts.edgeSpacing + '}');
+ } else {
+ printed = '{' + printed + '}';
+ }
+ }
+
+ return opts.spacing + indent(colors.prop.open + name + colors.prop.close + '=') + colors.value.open + printed + colors.value.close;
+ }).join('');
+}
+
+function printElement(element, print, indent, colors, opts) {
+ let result = colors.tag.open + '<';
+ let elementName;
+ if (typeof element.type === 'string') {
+ elementName = element.type;
+ } else if (typeof element.type === 'function') {
+ elementName = element.type.displayName || element.type.name || 'Unknown';
+ } else {
+ elementName = 'Unknown';
+ }
+ result += elementName + colors.tag.close;
+ result += printProps(element.props, print, indent, colors, opts);
+
+ const opaqueChildren = element.props.children;
+ if (opaqueChildren) {
+ let flatChildren = [];
+ traverseChildren(opaqueChildren, child => {
+ flatChildren.push(child);
+ });
+ const children = printChildren(flatChildren, print, indent, colors, opts);
+ result += colors.tag.open + '>' + colors.tag.close + opts.edgeSpacing + indent(children) + opts.edgeSpacing + colors.tag.open + '</' + elementName + '>' + colors.tag.close;
+ } else {
+ result += colors.tag.open + ' />' + colors.tag.close;
+ }
+
+ return result;
+}
+
+module.exports = {
+ test(object) {
+ return object && object.$$typeof === reactElement;
+ },
+ print(val, print, indent, opts, colors) {
+ return printElement(val, print, indent, colors, opts);
+ }
+};
diff --git a/node_modules/@ava/pretty-format/plugins/ReactTestComponent.js b/node_modules/@ava/pretty-format/plugins/ReactTestComponent.js
new file mode 100644
index 000000000..7d7c79c65
--- /dev/null
+++ b/node_modules/@ava/pretty-format/plugins/ReactTestComponent.js
@@ -0,0 +1,58 @@
+'use strict';
+
+const printString = require('../printString');
+
+const reactTestInstance = Symbol.for('react.test.json');
+
+function printChildren(children, print, indent, colors, opts) {
+ return children.map(child => printInstance(child, print, indent, colors, opts)).join(opts.edgeSpacing);
+}
+
+function printProps(props, print, indent, colors, opts) {
+ return Object.keys(props).sort().map(name => {
+ const prop = props[name];
+ let printed = print(prop);
+
+ if (typeof prop !== 'string') {
+ if (printed.indexOf('\n') !== -1) {
+ printed = '{' + opts.edgeSpacing + indent(indent(printed) + opts.edgeSpacing + '}');
+ } else {
+ printed = '{' + printed + '}';
+ }
+ }
+
+ return opts.spacing + indent(colors.prop.open + name + colors.prop.close + '=') + colors.value.open + printed + colors.value.close;
+ }).join('');
+}
+
+function printInstance(instance, print, indent, colors, opts) {
+ if (typeof instance == 'number') {
+ return print(instance);
+ } else if (typeof instance === 'string') {
+ return printString(colors.content.open + instance + colors.content.close);
+ }
+
+ let result = colors.tag.open + '<' + instance.type + colors.tag.close;
+
+ if (instance.props) {
+ result += printProps(instance.props, print, indent, colors, opts);
+ }
+
+ if (instance.children) {
+ const children = printChildren(instance.children, print, indent, colors, opts);
+ result += colors.tag.open + '>' + colors.tag.close + opts.edgeSpacing + indent(children) + opts.edgeSpacing + colors.tag.open + '</' + instance.type + '>' + colors.tag.close;
+ } else {
+ result += colors.tag.open + ' />' + colors.tag.close;
+ }
+
+ return result;
+}
+
+module.exports = {
+ test(object) {
+ return object && object.$$typeof === reactTestInstance;
+ },
+ print(val, print, indent, opts, colors) {
+ return printInstance(val, print, indent, colors, opts);
+ }
+};