diff --git a/packages/kbn-eslint-import-resolver-kibana/lib/get_webpack_config.js b/packages/kbn-eslint-import-resolver-kibana/lib/get_webpack_config.js
index d4e234e3a6a2e..60a03ae8a104e 100755
--- a/packages/kbn-eslint-import-resolver-kibana/lib/get_webpack_config.js
+++ b/packages/kbn-eslint-import-resolver-kibana/lib/get_webpack_config.js
@@ -27,11 +27,7 @@ exports.getWebpackConfig = function (kibanaPath) {
       mainFields: ['browser', 'main'],
       modules: ['node_modules', resolve(kibanaPath, 'node_modules')],
       alias: {
-        // Kibana defaults https://github.com/elastic/kibana/blob/6998f074542e8c7b32955db159d15661aca253d7/src/legacy/ui/ui_bundler_env.js#L30-L36
-        ui: resolve(kibanaPath, 'src/legacy/ui/public'),
-
         // Dev defaults for test bundle https://github.com/elastic/kibana/blob/6998f074542e8c7b32955db159d15661aca253d7/src/core_plugins/tests_bundle/index.js#L73-L78
-        ng_mock$: resolve(kibanaPath, 'src/test_utils/public/ng_mock'),
         fixtures: resolve(kibanaPath, 'src/fixtures'),
         test_utils: resolve(kibanaPath, 'src/test_utils/public'),
       },
diff --git a/src/test_utils/expect_deep_equal.js b/src/test_utils/expect_deep_equal.js
deleted file mode 100644
index e3e24cbdf5dc9..0000000000000
--- a/src/test_utils/expect_deep_equal.js
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Licensed to Elasticsearch B.V. under one or more contributor
- * license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright
- * ownership. Elasticsearch B.V. licenses this file to you under
- * the Apache License, Version 2.0 (the "License"); you may
- * not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import { isEqual } from 'lodash';
-import expect from '@kbn/expect';
-
-// expect.js's `eql` method provides nice error messages but sometimes misses things
-// since it only tests loose (==) equality. This function uses lodash's `isEqual` as a
-// second sanity check since it checks for strict equality.
-export function expectDeepEqual(actual, expected) {
-  expect(actual).to.eql(expected);
-  expect(isEqual(actual, expected)).to.be(true);
-}
diff --git a/src/test_utils/public/image_comparator.js b/src/test_utils/public/image_comparator.js
deleted file mode 100644
index f31a3e9cd646d..0000000000000
--- a/src/test_utils/public/image_comparator.js
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * Licensed to Elasticsearch B.V. under one or more contributor
- * license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright
- * ownership. Elasticsearch B.V. licenses this file to you under
- * the Apache License, Version 2.0 (the "License"); you may
- * not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import pixelmatch from 'pixelmatch';
-
-/**
- * Utility to compare pixels of two images
- * Adds the snapshots and comparison to the corners of the HTML-body to help with human inspection.
- */
-export class ImageComparator {
-  constructor() {
-    this._expectCanvas = document.createElement('canvas');
-    this._expectCanvas.style.position = 'fixed';
-    this._expectCanvas.style.right = 0;
-    this._expectCanvas.style.top = 0;
-    this._expectCanvas.style.border = '1px solid green';
-    document.body.appendChild(this._expectCanvas);
-
-    this._diffCanvas = document.createElement('canvas');
-    this._diffCanvas.style.position = 'fixed';
-    this._diffCanvas.style.right = 0;
-    this._diffCanvas.style.bottom = 0;
-    this._diffCanvas.style.border = '1px solid red';
-    document.body.appendChild(this._diffCanvas);
-
-    this._actualCanvas = document.createElement('canvas');
-    this._actualCanvas.style.position = 'fixed';
-    this._actualCanvas.style.left = 0;
-    this._actualCanvas.style.bottom = 0;
-    this._actualCanvas.style.border = '1px solid yellow';
-    document.body.appendChild(this._actualCanvas);
-  }
-
-  async compareDOMContents(
-    domContentsText,
-    sourceWidth,
-    sourceHeight,
-    expectedImageSourcePng,
-    threshold
-  ) {
-    const sourceCanvas = document.createElement('canvas');
-    sourceCanvas.width = sourceWidth;
-    sourceCanvas.height = sourceHeight;
-    sourceCanvas.style.position = 'fixed';
-    sourceCanvas.style.left = 0;
-    sourceCanvas.style.top = 0;
-    sourceCanvas.style.border = '1px solid blue';
-    const sourceContext2d = sourceCanvas.getContext('2d');
-    document.body.appendChild(sourceCanvas);
-
-    const sourceData = `<svg xmlns="http://www.w3.org/2000/svg" width="${sourceWidth}" height="${sourceHeight}">
-        <foreignObject width="100%" height="100%">
-        ${domContentsText}
-        </foreignObject>
-      </svg>`;
-
-    const sourceImage = new Image();
-    return new Promise((resolve, reject) => {
-      sourceImage.onload = async () => {
-        sourceContext2d.drawImage(sourceImage, 0, 0);
-        const mismatch = await this.compareImage(sourceCanvas, expectedImageSourcePng, threshold);
-        document.body.removeChild(sourceCanvas);
-        resolve(mismatch);
-      };
-      sourceImage.onerror = (e) => {
-        reject(e.message);
-      };
-      sourceImage.src = 'data:image/svg+xml;base64,' + btoa(sourceData);
-    });
-  }
-
-  /**
-   * Do pixel-comparison of two images
-   * @param actualCanvasFromUser HTMl5 canvas
-   * @param expectedImageSourcePng Img to compare to
-   * @param threshold number between 0-1. A lower number indicates a lower tolerance for pixel-differences.
-   * @return number
-   */
-  async compareImage(actualCanvasFromUser, expectedImageSourcePng, threshold) {
-    return new Promise((resolve, reject) => {
-      window.setTimeout(() => {
-        const actualContextFromUser = actualCanvasFromUser.getContext('2d');
-        const actualImageDataFromUser = actualContextFromUser.getImageData(
-          0,
-          0,
-          actualCanvasFromUser.width,
-          actualCanvasFromUser.height
-        );
-        const actualContext = this._actualCanvas.getContext('2d');
-        this._actualCanvas.width = actualCanvasFromUser.width;
-        this._actualCanvas.height = actualCanvasFromUser.height;
-        actualContext.putImageData(actualImageDataFromUser, 0, 0);
-
-        // convert expect PNG into pixel data by drawing in new canvas element
-        this._expectCanvas.width = this._actualCanvas.width;
-        this._expectCanvas.height = this._actualCanvas.height;
-
-        const expectedImage = new Image();
-        expectedImage.onload = () => {
-          const expectCtx = this._expectCanvas.getContext('2d');
-          expectCtx.drawImage(
-            expectedImage,
-            0,
-            0,
-            this._actualCanvas.width,
-            this._actualCanvas.height
-          ); // draw reference image to size of generated image
-
-          const expectImageData = expectCtx.getImageData(
-            0,
-            0,
-            this._actualCanvas.width,
-            this._actualCanvas.height
-          );
-
-          // compare live map vs expected pixel data
-          const diffImage = expectCtx.createImageData(
-            this._actualCanvas.width,
-            this._actualCanvas.height
-          );
-          const mismatchedPixels = pixelmatch(
-            actualImageDataFromUser.data,
-            expectImageData.data,
-            diffImage.data,
-            this._actualCanvas.width,
-            this._actualCanvas.height,
-            { threshold: threshold }
-          );
-
-          const diffContext = this._diffCanvas.getContext('2d');
-          this._diffCanvas.width = this._actualCanvas.width;
-          this._diffCanvas.height = this._actualCanvas.height;
-          diffContext.putImageData(diffImage, 0, 0);
-
-          resolve(mismatchedPixels);
-        };
-
-        expectedImage.onerror = (e) => {
-          reject(e.message);
-        };
-
-        expectedImage.src = expectedImageSourcePng;
-      });
-    });
-  }
-
-  destroy() {
-    document.body.removeChild(this._expectCanvas);
-    document.body.removeChild(this._diffCanvas);
-    document.body.removeChild(this._actualCanvas);
-  }
-}
diff --git a/src/test_utils/public/mocks/intl.js b/src/test_utils/public/mocks/intl.js
deleted file mode 100644
index e75b7d71f5fa6..0000000000000
--- a/src/test_utils/public/mocks/intl.js
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Licensed to Elasticsearch B.V. under one or more contributor
- * license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright
- * ownership. Elasticsearch B.V. licenses this file to you under
- * the Apache License, Version 2.0 (the "License"); you may
- * not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-/* global jest */
-
-export const intl = {
-  formatMessage: jest.fn().mockImplementation(({ defaultMessage }) => defaultMessage),
-  formatDate: jest.fn().mockImplementation((value) => value),
-  formatTime: jest.fn().mockImplementation((value) => value),
-  formatRelative: jest.fn().mockImplementation((value) => value),
-  formatNumber: jest.fn().mockImplementation((value) => value),
-  formatPlural: jest.fn().mockImplementation((value) => value),
-  formatHTMLMessage: jest.fn().mockImplementation(({ defaultMessage }) => defaultMessage),
-  now: jest.fn().mockImplementation(() => new Date(1531834573179)),
-  textComponent: 'span',
-};
diff --git a/src/test_utils/public/ng_mock.js b/src/test_utils/public/ng_mock.js
deleted file mode 100644
index 01bab4ce0a872..0000000000000
--- a/src/test_utils/public/ng_mock.js
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Licensed to Elasticsearch B.V. under one or more contributor
- * license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright
- * ownership. Elasticsearch B.V. licenses this file to you under
- * the Apache License, Version 2.0 (the "License"); you may
- * not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import angular from 'angular';
-import 'angular-mocks';
-import 'mocha';
-
-if (angular.mocks) {
-  throw new Error(
-    "Don't require angular-mocks directly or the tests " +
-      "can't setup correctly, use the ngMock module instead."
-  );
-}
-
-export default angular.mock;
diff --git a/src/test_utils/public/simulate_keys.js b/src/test_utils/public/simulate_keys.js
deleted file mode 100644
index 460a75486169a..0000000000000
--- a/src/test_utils/public/simulate_keys.js
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * Licensed to Elasticsearch B.V. under one or more contributor
- * license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright
- * ownership. Elasticsearch B.V. licenses this file to you under
- * the Apache License, Version 2.0 (the "License"); you may
- * not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import $ from 'jquery';
-import _ from 'lodash';
-import Bluebird from 'bluebird';
-import { keyMap } from './key_map';
-const reverseKeyMap = _.mapValues(_.invert(keyMap), _.ary(_.parseInt, 1));
-
-/**
- * Simulate keyboard events in an element. This allows testing the way that
- * elements respond to keyboard input.
- *
- * # sequence style
- * keyboard events occur in a sequence, this array of events describe that sequence.
- *
- * ## event
- * an object with a type property, or a string which will be turned into a single press
- *
- * ## event types
- * ### press
- * represents a key press
- *   - `key`: the key for the button pressed
- *   - `events`: optional list of events that occur before this press completes
- *
- * ### wait
- * represents a pause in a sequence
- *   - `ms`: the number of milliseconds that the pause takes
- *
- * ### repeat
- * represents a key being repeated because it is held down. Should only exist as a
- * sub event of `press` events.
- *   - `count`: the number of times the repeat occurs
- *
- * @param  {element} $el - jQuery element where events should occur
- * @param  {[type]} sequence - an array of events
- * @async
- */
-export default function ($el, sequence) {
-  const modifierState = {
-    ctrlKey: false,
-    shiftKey: false,
-    altKey: false,
-    metaKey: false,
-  };
-
-  return doList(_.clone(sequence));
-
-  function setModifier(key, state) {
-    const name = key + 'Key';
-    if (modifierState.hasOwnProperty(name)) {
-      modifierState[name] = !!state;
-    }
-  }
-
-  function doList(list) {
-    return Bluebird.try(function () {
-      if (!list || !list.length) return;
-
-      let event = list[0];
-      if (_.isString(event)) {
-        event = { type: 'press', key: event };
-      }
-
-      switch (event.type) {
-        case 'press':
-          return Bluebird.resolve()
-            .then(_.partial(fire, 'keydown', event.key))
-            .then(_.partial(fire, 'keypress', event.key))
-            .then(_.partial(doList, event.events))
-            .then(_.partial(fire, 'keyup', event.key));
-
-        case 'wait':
-          return Bluebird.delay(event.ms);
-
-        case 'repeat':
-          return (function again(remaining) {
-            if (!remaining) return Bluebird.resolve();
-            remaining = remaining - 1;
-            return Bluebird.resolve()
-              .then(_.partial(fire, 'keydown', event.key, true))
-              .then(_.partial(fire, 'keypress', event.key, true))
-              .then(_.partial(again, remaining));
-          })(event.count);
-
-        default:
-          throw new TypeError('invalid event type "' + event.type + '"');
-      }
-    }).then(function () {
-      if (_.size(list) > 1) return doList(list.slice(1));
-    });
-  }
-
-  function fire(type, key) {
-    const keyCode = reverseKeyMap[key];
-    if (!keyCode) throw new TypeError('invalid key "' + key + '"');
-
-    if (type === 'keydown') setModifier(key, true);
-    if (type === 'keyup') setModifier(key, false);
-
-    const $target = _.isFunction($el) ? $el() : $el;
-    const $event = new $.Event(type, _.defaults({ keyCode: keyCode }, modifierState));
-    $target.trigger($event);
-  }
-}
diff --git a/src/test_utils/public/static_html_id_generator.js b/src/test_utils/public/static_html_id_generator.js
deleted file mode 100644
index 07626f6a49688..0000000000000
--- a/src/test_utils/public/static_html_id_generator.js
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Licensed to Elasticsearch B.V. under one or more contributor
- * license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright
- * ownership. Elasticsearch B.V. licenses this file to you under
- * the Apache License, Version 2.0 (the "License"); you may
- * not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-/**
- * Import this test utility in your jest test (and only there!) if you want the
- * htmlIdGenerator from EUI to generate static ids. That will be needed if you
- * want to use snapshot tests for a component, that uses the htmlIdGenerator.
- * By default every test run would result in different ids and thus not be comparable.
- * You can solve this by just importing this file. It will mock the htmlIdGenerator
- * for the test file that imported it to produce static, but therefore potentially
- * duplicate ids.
- *
- * import 'test_utils/html_id_generator';
- */
-
-/* global jest */
-jest.mock('@elastic/eui/lib/services/accessibility/html_id_generator', () => ({
-  htmlIdGenerator: (prefix = 'staticGenerator') => {
-    return (suffix = 'staticId') => `${prefix}_${suffix}`;
-  },
-}));
diff --git a/x-pack/plugins/canvas/storybook/webpack.config.js b/x-pack/plugins/canvas/storybook/webpack.config.js
index c9817de649c25..d8434bd5d9080 100644
--- a/x-pack/plugins/canvas/storybook/webpack.config.js
+++ b/x-pack/plugins/canvas/storybook/webpack.config.js
@@ -184,8 +184,6 @@ module.exports = async ({ config: storybookConfig }) => {
           __dirname,
           '../tasks/mocks/uiAbsoluteToParsedUrl'
         ),
-        ui: path.resolve(KIBANA_ROOT, 'src/legacy/ui/public'),
-        ng_mock$: path.resolve(KIBANA_ROOT, 'src/test_utils/public/ng_mock'),
       },
     },
   };