(
- element: React.ReactElement,
- options?: Partial<{ withTheme: boolean }>
-): T;
diff --git a/packages/material-ui/src/test-utils/index.d.ts b/packages/material-ui/src/test-utils/index.d.ts
deleted file mode 100644
index a75c29f886728f..00000000000000
--- a/packages/material-ui/src/test-utils/index.d.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-export { default as createShallow } from './createShallow';
-export { default as createMount } from './createMount';
-export { default as createRender } from './createRender';
-export { default as findOutermostIntrinsic } from './findOutermostIntrinsic';
-export { default as getClasses } from './getClasses';
-export { default as unwrap } from './unwrap';
diff --git a/packages/material-ui/src/test-utils/testRef.js b/packages/material-ui/src/test-utils/testRef.js
deleted file mode 100644
index 1afda4b535e893..00000000000000
--- a/packages/material-ui/src/test-utils/testRef.js
+++ /dev/null
@@ -1,21 +0,0 @@
-import * as React from 'react';
-import { expect } from 'chai';
-
-function assertDOMNode(node) {
- // duck typing a DOM node
- expect(typeof node.nodeName).to.equal('string');
-}
-
-/**
- * Utility method to make assertions about the ref on an element
- * @param {React.ReactElement} element - The element should have a component wrapped
- * in withStyles as the root
- * @param {function} mount - Should be returnvalue of createMount
- * @param {function} onRef - Callback, first arg is the ref.
- * Assert that the ref is a DOM node by default
- */
-export default function testRef(element, mount, onRef = assertDOMNode) {
- const ref = React.createRef();
- const wrapper = mount({React.cloneElement(element, { ref })});
- onRef(ref.current, wrapper);
-}
diff --git a/packages/material-ui/src/test-utils/until.d.ts b/packages/material-ui/src/test-utils/until.d.ts
deleted file mode 100644
index 232340474b3465..00000000000000
--- a/packages/material-ui/src/test-utils/until.d.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-import { CommonWrapper } from 'enzyme';
-
-export default function until(
- selector: string,
- options: { context: any }
-): CommonWrapper
;
diff --git a/packages/material-ui/src/test-utils/unwrap.d.ts b/packages/material-ui/src/test-utils/unwrap.d.ts
deleted file mode 100644
index 6853e04b6b8e95..00000000000000
--- a/packages/material-ui/src/test-utils/unwrap.d.ts
+++ /dev/null
@@ -1 +0,0 @@
-export default function unwrap(element: React.ReactElement): React.ReactElement;
diff --git a/packages/material-ui/src/test-utils/unwrap.js b/packages/material-ui/src/test-utils/unwrap.js
deleted file mode 100644
index 651f0f9c1b585c..00000000000000
--- a/packages/material-ui/src/test-utils/unwrap.js
+++ /dev/null
@@ -1,3 +0,0 @@
-export default function unwrap(component) {
- return component.Naked;
-}
diff --git a/packages/material-ui/src/withMobileDialog/withMobileDialog.test.js b/packages/material-ui/src/withMobileDialog/withMobileDialog.test.js
index e2d3a5f006ebc2..e72f1368f568a1 100644
--- a/packages/material-ui/src/withMobileDialog/withMobileDialog.test.js
+++ b/packages/material-ui/src/withMobileDialog/withMobileDialog.test.js
@@ -1,6 +1,6 @@
import * as React from 'react';
import { expect } from 'chai';
-import { createShallow } from '@material-ui/core/test-utils';
+import { createShallow } from 'test/utils';
import Dialog from '../Dialog';
import withMobileDialog from './withMobileDialog';
diff --git a/packages/material-ui/src/withWidth/withWidth.test.js b/packages/material-ui/src/withWidth/withWidth.test.js
index 694d3bda6e8272..3eb06a7cfdeeab 100644
--- a/packages/material-ui/src/withWidth/withWidth.test.js
+++ b/packages/material-ui/src/withWidth/withWidth.test.js
@@ -2,7 +2,7 @@ import * as React from 'react';
import { act } from 'react-dom/test-utils';
import { expect } from 'chai';
import { stub } from 'sinon';
-import { createShallow } from '@material-ui/core/test-utils';
+import { createShallow } from 'test/utils';
import createMount from 'test/utils/createMount';
import mediaQuery from 'css-mediaquery';
import withWidth, { isWidthDown, isWidthUp } from './withWidth';
diff --git a/packages/material-ui/test/integration/TableCell.test.js b/packages/material-ui/test/integration/TableCell.test.js
index a1c473aef2e525..e230cd301e3dac 100644
--- a/packages/material-ui/test/integration/TableCell.test.js
+++ b/packages/material-ui/test/integration/TableCell.test.js
@@ -1,6 +1,6 @@
import * as React from 'react';
import { expect } from 'chai';
-import { findOutermostIntrinsic, getClasses } from '@material-ui/core/test-utils';
+import { findOutermostIntrinsic, getClasses } from 'test/utils';
import createMount from 'test/utils/createMount';
import { createClientRender } from 'test/utils/createClientRender';
import TableCell from '@material-ui/core/TableCell';
diff --git a/packages/material-ui/test/integration/TableRow.test.js b/packages/material-ui/test/integration/TableRow.test.js
index 33f57c31457daa..783c017a81e4f0 100644
--- a/packages/material-ui/test/integration/TableRow.test.js
+++ b/packages/material-ui/test/integration/TableRow.test.js
@@ -1,6 +1,6 @@
import * as React from 'react';
import { expect } from 'chai';
-import { getClasses } from '@material-ui/core/test-utils';
+import { getClasses } from 'test/utils';
import createMount from 'test/utils/createMount';
import TableFooter from '@material-ui/core/TableFooter';
import TableHead from '@material-ui/core/TableHead';
diff --git a/test/utils/createMount.js b/test/utils/createMount.js
index fcde56928f558f..33c0f6bca5c5e6 100644
--- a/test/utils/createMount.js
+++ b/test/utils/createMount.js
@@ -4,9 +4,6 @@ import * as ReactDOM from 'react-dom';
import * as PropTypes from 'prop-types';
import { mount as enzymeMount } from 'enzyme';
-// fork of `@material-ui/core/test-utils`
-// with strict isolation of DOM between tests
-
/**
* Can't just mount {node}
* because that swallows wrapper.setProps
diff --git a/packages/material-ui/src/test-utils/createShallow.js b/test/utils/createShallow.js
similarity index 61%
rename from packages/material-ui/src/test-utils/createShallow.js
rename to test/utils/createShallow.js
index 164f65502c2246..05789d93ac0ed8 100644
--- a/packages/material-ui/src/test-utils/createShallow.js
+++ b/test/utils/createShallow.js
@@ -1,7 +1,20 @@
import { shallow as enzymeShallow } from 'enzyme';
import until from './until';
-// Generate an enhanced shallow function.
+/**
+ * @typedef {object} ExtendedShallowOptions
+ * @property {typeof import('enzyme').shallow} shallow;
+ * @property {boolean} dive
+ * @property {import('enzyme').EnzymeSelector} untilSelector
+ *
+ * @typedef {import('enzyme').ShallowRendererProps & ExtendedShallowOptions} ShallowOptions
+ */
+
+/**
+ * Generate an enhanced shallow function.
+ * @param {Partial} [options1]
+ * @returns {typeof import('enzyme').shallow}
+ */
export default function createShallow(options1 = {}) {
const { shallow = enzymeShallow, dive = false, untilSelector = false, ...other1 } = options1;
diff --git a/packages/material-ui/src/test-utils/describeConformance.js b/test/utils/describeConformance.js
similarity index 90%
rename from packages/material-ui/src/test-utils/describeConformance.js
rename to test/utils/describeConformance.js
index 1b88b58a8bf36e..5838e770b12eac 100644
--- a/packages/material-ui/src/test-utils/describeConformance.js
+++ b/test/utils/describeConformance.js
@@ -1,8 +1,27 @@
+/* eslint-env mocha */
import { expect } from 'chai';
import * as React from 'react';
import ReactTestRenderer from 'react-test-renderer';
import findOutermostIntrinsic from './findOutermostIntrinsic';
-import testRef from './testRef';
+
+function assertDOMNode(node) {
+ // duck typing a DOM node
+ expect(typeof node.nodeName).to.equal('string');
+}
+
+/**
+ * Utility method to make assertions about the ref on an element
+ * @param {React.ReactElement} element - The element should have a component wrapped
+ * in withStyles as the root
+ * @param {function} mount - Should be returnvalue of createMount
+ * @param {function} onRef - Callback, first arg is the ref.
+ * Assert that the ref is a DOM node by default
+ */
+function testRef(element, mount, onRef = assertDOMNode) {
+ const ref = React.createRef();
+ const wrapper = mount({React.cloneElement(element, { ref })});
+ onRef(ref.current, wrapper);
+}
/**
* Glossary
diff --git a/packages/material-ui/src/test-utils/findOutermostIntrinsic.js b/test/utils/findOutermostIntrinsic.js
similarity index 100%
rename from packages/material-ui/src/test-utils/findOutermostIntrinsic.js
rename to test/utils/findOutermostIntrinsic.js
diff --git a/packages/material-ui/src/test-utils/findOutermostIntrinsic.test.js b/test/utils/findOutermostIntrinsic.test.js
similarity index 100%
rename from packages/material-ui/src/test-utils/findOutermostIntrinsic.test.js
rename to test/utils/findOutermostIntrinsic.test.js
diff --git a/packages/material-ui/src/test-utils/getClasses.js b/test/utils/getClasses.js
similarity index 57%
rename from packages/material-ui/src/test-utils/getClasses.js
rename to test/utils/getClasses.js
index 42b107f6bacb4c..6268173a7f77f9 100644
--- a/packages/material-ui/src/test-utils/getClasses.js
+++ b/test/utils/getClasses.js
@@ -3,7 +3,11 @@ import createShallow from './createShallow';
const shallow = createShallow();
-// Helper function to extract the classes from a styleSheet.
+/**
+ * Extracts the available classes for the `classes` prop of the given component
+ * @param {React.ReactElement} element - An element created from a Material-UI component that implements the `classes` prop.
+ * @returns {Record}
+ */
export default function getClasses(element) {
const { useStyles } = element.type;
diff --git a/packages/material-ui/src/test-utils/index.js b/test/utils/index.js
similarity index 56%
rename from packages/material-ui/src/test-utils/index.js
rename to test/utils/index.js
index 3813ca43674c0c..6c7e15d0f697bd 100644
--- a/packages/material-ui/src/test-utils/index.js
+++ b/test/utils/index.js
@@ -1,6 +1,8 @@
-export { default as createShallow } from './createShallow';
+export * from './components';
+export { default as describeConformance } from './describeConformance';
+export * from './createClientRender';
export { default as createMount } from './createMount';
-export { default as createRender } from './createRender';
+export { default as createServerRender } from './createServerRender';
+export { default as createShallow } from './createShallow';
export { default as findOutermostIntrinsic, wrapsIntrinsicElement } from './findOutermostIntrinsic';
export { default as getClasses } from './getClasses';
-export { default as unwrap } from './unwrap';
diff --git a/packages/material-ui/src/test-utils/until.js b/test/utils/until.js
similarity index 100%
rename from packages/material-ui/src/test-utils/until.js
rename to test/utils/until.js
diff --git a/packages/material-ui/src/test-utils/until.test.js b/test/utils/until.test.js
similarity index 100%
rename from packages/material-ui/src/test-utils/until.test.js
rename to test/utils/until.test.js