UNPKG

@wix/design-system

Version:

@wix/design-system

1,859 lines 79 kB
"use strict";

var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _react = _interopRequireDefault(require("react"));
var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
var _SearchUni = require("../Search.uni.driver");
var _Search = require("../Search");
var _testUtils = require("../../utils/test-utils");
var _unit = require("../../utils/test-utils/unit");
var _react2 = require("@testing-library/react");
var _InputSt = require("../../Input/Input.st.css");
var _jsxFileName = "/home/builduser/work/57e038ea7326c1ec/packages/wix-design-system/dist/cjs/Search/test/Search.spec.jsx";
function _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }
function _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }
describe('Search', function () {
  describe('[async]', function () {
    runTests((0, _unit.createRendererWithUniDriver)(_SearchUni.searchUniDriverFactory));
  });
  function runTests(render) {
    var _this = this;
    var REGEXP_SPECIAL_CHARS = '^$\\.*+?)(][}{|';
    var options = ['The quick', 'brown', 'fox', 'jumps over', 'the lazy', 'dog', REGEXP_SPECIAL_CHARS].map(function (value, index) {
      return {
        id: index,
        value: value
      };
    });
    var createDriver = function createDriver(jsx) {
      return render(jsx).driver;
    };
    afterEach(_unit.cleanup);
    describe('backgroundColor prop', function () {
      it('should pass the background color down to the input', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee() {
        var _render, container, inputRoot;
        return _regenerator().w(function (_context) {
          while (1) switch (_context.n) {
            case 0:
              _render = render(/*#__PURE__*/_react["default"].createElement(_Search.Search, {
                options: options,
                backgroundColor: "green",
                __self: _this,
                __source: {
                  fileName: _jsxFileName,
                  lineNumber: 39,
                  columnNumber: 11
                }
              })), container = _render.container;
              inputRoot = container.querySelector('[data-input-root]');
              expect(inputRoot.style.getPropertyValue(_InputSt.vars['input-background'])).toBe('green');
            case 1:
              return _context.a(2);
          }
        }, _callee);
      })));
    });
    describe('Controlled', function () {
      var ControlledSearch = (0, _testUtils.makeControlled)(_Search.Search);
      var ControlledSearchOnBlur = function ControlledSearchOnBlur(_ref2) {
        var valueOnBlur = _ref2.valueOnBlur;
        var _React$useState = _react["default"].useState('fox'),
          _React$useState2 = (0, _slicedToArray2["default"])(_React$useState, 2),
          value = _React$useState2[0],
          setValue = _React$useState2[1];
        return /*#__PURE__*/_react["default"].createElement(_Search.Search, {
          expandable: true,
          value: value,
          onBlur: function onBlur() {
            return setValue(valueOnBlur);
          },
          __self: _this,
          __source: {
            fileName: _jsxFileName,
            lineNumber: 57,
            columnNumber: 11
          }
        });
      };
      it('should show search options if initial value passed and down-key pressed', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee2() {
        var driver, _t, _t2;
        return _regenerator().w(function (_context2) {
          while (1) switch (_context2.n) {
            case 0:
              driver = createDriver(/*#__PURE__*/_react["default"].createElement(ControlledSearch, {
                value: "the",
                options: options,
                __self: _this,
                __source: {
                  fileName: _jsxFileName,
                  lineNumber: 67,
                  columnNumber: 11
                }
              }));
              _t = expect;
              _context2.n = 1;
              return driver.dropdownLayoutDriver.isShown();
            case 1:
              _t(_context2.v).toBe(false);
              _context2.n = 2;
              return driver.driver.pressKey('ArrowDown');
            case 2:
              _t2 = expect;
              _context2.n = 3;
              return driver.dropdownLayoutDriver.isShown();
            case 3:
              _t2(_context2.v).toBe(true);
            case 4:
              return _context2.a(2);
          }
        }, _callee2);
      })));
      it('should not show search options when focusing empty input', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee3() {
        var driver, _t3, _t4;
        return _regenerator().w(function (_context3) {
          while (1) switch (_context3.n) {
            case 0:
              driver = createDriver(/*#__PURE__*/_react["default"].createElement(ControlledSearch, {
                options: options,
                __self: _this,
                __source: {
                  fileName: _jsxFileName,
                  lineNumber: 76,
                  columnNumber: 37
                }
              }));
              _t3 = expect;
              _context3.n = 1;
              return driver.dropdownLayoutDriver.isShown();
            case 1:
              _t3(_context3.v).toBe(false);
              _context3.n = 2;
              return driver.inputDriver.focus();
            case 2:
              _t4 = expect;
              _context3.n = 3;
              return driver.dropdownLayoutDriver.isShown();
            case 3:
              _t4(_context3.v).toBe(false);
            case 4:
              return _context3.a(2);
          }
        }, _callee3);
      })));
      it('should show search options when focusing empty input with showOptionsIfEmptyInput', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee4() {
        var driver, _t5, _t6;
        return _regenerator().w(function (_context4) {
          while (1) switch (_context4.n) {
            case 0:
              driver = createDriver(/*#__PURE__*/_react["default"].createElement(ControlledSearch, {
                options: options,
                showOptionsIfEmptyInput: true,
                __self: _this,
                __source: {
                  fileName: _jsxFileName,
                  lineNumber: 85,
                  columnNumber: 11
                }
              }));
              _t5 = expect;
              _context4.n = 1;
              return driver.dropdownLayoutDriver.isShown();
            case 1:
              _t5(_context4.v).toBe(false);
              _context4.n = 2;
              return driver.inputDriver.click();
            case 2:
              _t6 = expect;
              _context4.n = 3;
              return driver.dropdownLayoutDriver.isShown();
            case 3:
              _t6(_context4.v).toBe(true);
            case 4:
              return _context4.a(2);
          }
        }, _callee4);
      })));
      it('should filter search options if initial input value passed and input focused', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee5() {
        var driver, _t7;
        return _regenerator().w(function (_context5) {
          while (1) switch (_context5.n) {
            case 0:
              driver = createDriver(/*#__PURE__*/_react["default"].createElement(ControlledSearch, {
                options: options,
                value: "fox",
                __self: _this,
                __source: {
                  fileName: _jsxFileName,
                  lineNumber: 96,
                  columnNumber: 11
                }
              }));
              _context5.n = 1;
              return driver.inputDriver.focus();
            case 1:
              _t7 = expect;
              _context5.n = 2;
              return driver.dropdownLayoutDriver.optionsLength();
            case 2:
              _t7(_context5.v).toBe(1);
            case 3:
              return _context5.a(2);
          }
        }, _callee5);
      })));
      it('should not treat spaces around search text as part of query', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee6() {
        var driver, _t8;
        return _regenerator().w(function (_context6) {
          while (1) switch (_context6.n) {
            case 0:
              driver = createDriver(/*#__PURE__*/_react["default"].createElement(ControlledSearch, {
                options: options,
                value: "  fox  ",
                __self: _this,
                __source: {
                  fileName: _jsxFileName,
                  lineNumber: 105,
                  columnNumber: 11
                }
              }));
              _context6.n = 1;
              return driver.inputDriver.focus();
            case 1:
              _t8 = expect;
              _context6.n = 2;
              return driver.dropdownLayoutDriver.optionsLength();
            case 2:
              _t8(_context6.v).toBe(1);
            case 3:
              return _context6.a(2);
          }
        }, _callee6);
      })));
      it('should render required elements of Search box', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee7() {
        var driver, _t9, _t0, _t1;
        return _regenerator().w(function (_context7) {
          while (1) switch (_context7.n) {
            case 0:
              driver = createDriver(/*#__PURE__*/_react["default"].createElement(ControlledSearch, {
                options: options,
                __self: _this,
                __source: {
                  fileName: _jsxFileName,
                  lineNumber: 113,
                  columnNumber: 37
                }
              }));
              _t9 = expect;
              _context7.n = 1;
              return driver.inputDriver.hasPrefix();
            case 1:
              _t9(_context7.v).toBe(true);
              _t0 = expect;
              _context7.n = 2;
              return driver.inputDriver.getPlaceholder();
            case 2:
              _t0(_context7.v).toBe('Search');
              _t1 = expect;
              _context7.n = 3;
              return driver.inputDriver.hasMenuArrow();
            case 3:
              _t1(_context7.v).toBe(false);
            case 4:
              return _context7.a(2);
          }
        }, _callee7);
      })));
      it('should not render clear text button if clearButton=false', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee8() {
        var driver, _t10;
        return _regenerator().w(function (_context8) {
          while (1) switch (_context8.n) {
            case 0:
              driver = createDriver(/*#__PURE__*/_react["default"].createElement(ControlledSearch, {
                options: options,
                clearButton: false,
                value: "fox",
                __self: _this,
                __source: {
                  fileName: _jsxFileName,
                  lineNumber: 122,
                  columnNumber: 11
                }
              }));
              _t10 = expect;
              _context8.n = 1;
              return driver.inputDriver.hasClearButton();
            case 1:
              _t10(_context8.v).toBe(false);
            case 2:
              return _context8.a(2);
          }
        }, _callee8);
      })));
      it('should render clear text button if input is not empty', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee9() {
        var driver, _t11;
        return _regenerator().w(function (_context9) {
          while (1) switch (_context9.n) {
            case 0:
              driver = createDriver(/*#__PURE__*/_react["default"].createElement(ControlledSearch, {
                options: options,
                value: "fox",
                __self: _this,
                __source: {
                  fileName: _jsxFileName,
                  lineNumber: 134,
                  columnNumber: 11
                }
              }));
              _t11 = expect;
              _context9.n = 1;
              return driver.inputDriver.hasClearButton();
            case 1:
              _t11(_context9.v).toBe(true);
            case 2:
              return _context9.a(2);
          }
        }, _callee9);
      })));
      it('should remain focused on Search component after clear button click', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee0() {
        var driver, _t12;
        return _regenerator().w(function (_context0) {
          while (1) switch (_context0.n) {
            case 0:
              driver = createDriver(/*#__PURE__*/_react["default"].createElement(ControlledSearch, {
                options: options,
                value: "fox",
                __self: _this,
                __source: {
                  fileName: _jsxFileName,
                  lineNumber: 142,
                  columnNumber: 11
                }
              }));
              _context0.n = 1;
              return driver.inputDriver.clickClear();
            case 1:
              _t12 = expect;
              _context0.n = 2;
              return driver.inputDriver.isFocus();
            case 2:
              _t12(_context0.v).toBe(true);
            case 3:
              return _context0.a(2);
          }
        }, _callee0);
      })));

      //TODO: missing implementation
      it.skip('should collapse search options after clear button click', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee1() {
        var driver, _t13;
        return _regenerator().w(function (_context1) {
          while (1) switch (_context1.n) {
            case 0:
              driver = createDriver(/*#__PURE__*/_react["default"].createElement(ControlledSearch, {
                options: options,
                value: "fox",
                __self: _this,
                __source: {
                  fileName: _jsxFileName,
                  lineNumber: 152,
                  columnNumber: 11
                }
              }));
              _context1.n = 1;
              return driver.inputDriver.clickClear();
            case 1:
              _t13 = expect;
              _context1.n = 2;
              return driver.dropdownLayoutDriver.isShown();
            case 2:
              _t13(_context1.v).toBe(false);
            case 3:
              return _context1.a(2);
          }
        }, _callee1);
      })));
      it('should do search when text was entered', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee10() {
        var driver, _t14, _t15, _t16;
        return _regenerator().w(function (_context10) {
          while (1) switch (_context10.n) {
            case 0:
              driver = createDriver(/*#__PURE__*/_react["default"].createElement(ControlledSearch, {
                options: options,
                __self: _this,
                __source: {
                  fileName: _jsxFileName,
                  lineNumber: 160,
                  columnNumber: 37
                }
              }));
              _context10.n = 1;
              return driver.inputDriver.focus();
            case 1:
              _context10.n = 2;
              return driver.inputDriver.enterText('fox');
            case 2:
              _t14 = expect;
              _context10.n = 3;
              return driver.dropdownLayoutDriver.optionsLength();
            case 3:
              _t14(_context10.v).toBe(1);
              _context10.n = 4;
              return driver.inputDriver.clearText();
            case 4:
              _context10.n = 5;
              return driver.inputDriver.enterText('the');
            case 5:
              _t15 = expect;
              _context10.n = 6;
              return driver.dropdownLayoutDriver.optionsLength();
            case 6:
              _t15(_context10.v).toBe(2);
              _context10.n = 7;
              return driver.inputDriver.clearText();
            case 7:
              _context10.n = 8;
              return driver.inputDriver.enterText('');
            case 8:
              _t16 = expect;
              _context10.n = 9;
              return driver.dropdownLayoutDriver.optionsLength();
            case 9:
              _t16(_context10.v).toBe(options.length);
            case 10:
              return _context10.a(2);
          }
        }, _callee10);
      })));
      it('should treat regex characters as text', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee11() {
        var driver, _t17;
        return _regenerator().w(function (_context11) {
          while (1) switch (_context11.n) {
            case 0:
              driver = createDriver(/*#__PURE__*/_react["default"].createElement(ControlledSearch, {
                options: options,
                __self: _this,
                __source: {
                  fileName: _jsxFileName,
                  lineNumber: 176,
                  columnNumber: 37
                }
              }));
              _context11.n = 1;
              return driver.inputDriver.focus();
            case 1:
              _context11.n = 2;
              return driver.inputDriver.enterText(REGEXP_SPECIAL_CHARS);
            case 2:
              _t17 = expect;
              _context11.n = 3;
              return driver.dropdownLayoutDriver.optionsLength();
            case 3:
              _t17(_context11.v).toBe(1);
            case 4:
              return _context11.a(2);
          }
        }, _callee11);
      })));
      it('should show no results if nothing was found in options', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee12() {
        var driver, _t18;
        return _regenerator().w(function (_context12) {
          while (1) switch (_context12.n) {
            case 0:
              driver = createDriver(/*#__PURE__*/_react["default"].createElement(ControlledSearch, {
                options: options,
                __self: _this,
                __source: {
                  fileName: _jsxFileName,
                  lineNumber: 184,
                  columnNumber: 37
                }
              }));
              _context12.n = 1;
              return driver.inputDriver.focus();
            case 1:
              _context12.n = 2;
              return driver.inputDriver.enterText('option nowhere to be found');
            case 2:
              _t18 = expect;
              _context12.n = 3;
              return driver.dropdownLayoutDriver.optionsLength();
            case 3:
              _t18(_context12.v).toBe(0);
            case 4:
              return _context12.a(2);
          }
        }, _callee12);
      })));

      // TODO: enhance Input component
      it.skip('should focus search input if click on magnifying glass', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee13() {
        var driver, _t19, _t20;
        return _regenerator().w(function (_context13) {
          while (1) switch (_context13.n) {
            case 0:
              driver = createDriver(/*#__PURE__*/_react["default"].createElement(ControlledSearch, {
                options: options,
                value: "fox",
                __self: _this,
                __source: {
                  fileName: _jsxFileName,
                  lineNumber: 194,
                  columnNumber: 11
                }
              }));
              _t19 = expect;
              _context13.n = 1;
              return driver.inputDriver.hasPrefix();
            case 1:
              _t19(_context13.v).toBe(true);
              _t20 = expect;
              _context13.n = 2;
              return driver.inputDriver.isFocus();
            case 2:
              _t20(_context13.v).toBe(true);
            case 3:
              return _context13.a(2);
          }
        }, _callee13);
      })));
      it('should allow filtering options by predicate', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee14() {
        var nodeOptions, predicate, driver, _t21;
        return _regenerator().w(function (_context14) {
          while (1) switch (_context14.n) {
            case 0:
              nodeOptions = [{
                id: 1,
                value: /*#__PURE__*/_react["default"].createElement("div", {
                  __self: _this,
                  __source: {
                    fileName: _jsxFileName,
                    lineNumber: 204,
                    columnNumber: 27
                  }
                }, "Found me"),
                keywords: ['Found']
              }, {
                id: 2,
                value: /*#__PURE__*/_react["default"].createElement("div", {
                  __self: _this,
                  __source: {
                    fileName: _jsxFileName,
                    lineNumber: 205,
                    columnNumber: 27
                  }
                }, "Filtered me"),
                keywords: ['Filtered']
              }];
              predicate = vi.fn(function (option) {
                return option.keywords.includes('Found');
              });
              driver = createDriver(/*#__PURE__*/_react["default"].createElement(ControlledSearch, {
                options: nodeOptions,
                predicate: predicate,
                __self: _this,
                __source: {
                  fileName: _jsxFileName,
                  lineNumber: 211,
                  columnNumber: 11
                }
              }));
              _context14.n = 1;
              return driver.inputDriver.enterText('Some text value');
            case 1:
              expect(predicate).toHaveBeenCalled();
              _t21 = expect;
              _context14.n = 2;
              return driver.dropdownLayoutDriver.optionsLength();
            case 2:
              _t21(_context14.v).toBe(1);
            case 3:
              return _context14.a(2);
          }
        }, _callee14);
      })));
      it('should highlight the matched options text', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee15() {
        var driver, _t22;
        return _regenerator().w(function (_context15) {
          while (1) switch (_context15.n) {
            case 0:
              driver = createDriver(/*#__PURE__*/_react["default"].createElement(ControlledSearch, {
                value: "the",
                options: options,
                __self: _this,
                __source: {
                  fileName: _jsxFileName,
                  lineNumber: 220,
                  columnNumber: 11
                }
              }));
              _t22 = expect;
              _context15.n = 1;
              return driver.dropdownLayoutDriver.optionContentAt(0);
            case 1:
              _t22(_context15.v).toContain('The');
            case 2:
              return _context15.a(2);
          }
        }, _callee15);
      })));
      it('should collapse when out of focus if value in onBlur() is set to empty', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee16() {
        var _createDriver, driver, inputDriver, _t23, _t24;
        return _regenerator().w(function (_context16) {
          while (1) switch (_context16.n) {
            case 0:
              _createDriver = createDriver(/*#__PURE__*/_react["default"].createElement(ControlledSearchOnBlur, {
                valueOnBlur: "",
                __self: _this,
                __source: {
                  fileName: _jsxFileName,
                  lineNumber: 230,
                  columnNumber: 11
                }
              })), driver = _createDriver.driver, inputDriver = _createDriver.inputDriver;
              _context16.n = 1;
              return inputDriver.click();
            case 1:
              _context16.n = 2;
              return inputDriver.enterText('fox');
            case 2:
              _context16.n = 3;
              return inputDriver.blur();
            case 3:
              _t23 = expect;
              _context16.n = 4;
              return inputDriver.getText();
            case 4:
              _t23(_context16.v).toEqual('');
              _t24 = expect;
              _context16.n = 5;
              return driver.isCollapsed();
            case 5:
              _t24(_context16.v).toBe(true);
            case 6:
              return _context16.a(2);
          }
        }, _callee16);
      })));
      it('should not collapse when out of focus if value is set to custom in onBlur()', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee17() {
        var _createDriver2, driver, inputDriver, _t25, _t26;
        return _regenerator().w(function (_context17) {
          while (1) switch (_context17.n) {
            case 0:
              _createDriver2 = createDriver(/*#__PURE__*/_react["default"].createElement(ControlledSearchOnBlur, {
                valueOnBlur: "wix",
                __self: _this,
                __source: {
                  fileName: _jsxFileName,
                  lineNumber: 241,
                  columnNumber: 11
                }
              })), driver = _createDriver2.driver, inputDriver = _createDriver2.inputDriver;
              _context17.n = 1;
              return inputDriver.click();
            case 1:
              _context17.n = 2;
              return inputDriver.enterText('');
            case 2:
              _context17.n = 3;
              return inputDriver.blur();
            case 3:
              _t25 = expect;
              _context17.n = 4;
              return inputDriver.getText();
            case 4:
              _t25(_context17.v).toEqual('wix');
              _t26 = expect;
              _context17.n = 5;
              return driver.isCollapsed();
            case 5:
              _t26(_context17.v).toBe(false);
            case 6:
              return _context17.a(2);
          }
        }, _callee17);
      })));
      it('should not collapse when clicked onClear() if value is set to custom in onBlur()', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee18() {
        var _createDriver3, driver, inputDriver, _t27, _t28;
        return _regenerator().w(function (_context18) {
          while (1) switch (_context18.n) {
            case 0:
              _createDriver3 = createDriver(/*#__PURE__*/_react["default"].createElement(ControlledSearchOnBlur, {
                valueOnBlur: "wix",
                __self: _this,
                __source: {
                  fileName: _jsxFileName,
                  lineNumber: 252,
                  columnNumber: 11
                }
              })), driver = _createDriver3.driver, inputDriver = _createDriver3.inputDriver;
              _context18.n = 1;
              return inputDriver.clickClear();
            case 1:
              _t27 = expect;
              _context18.n = 2;
              return inputDriver.getText();
            case 2:
              _t27(_context18.v).toEqual('fox');
              _t28 = expect;
              _context18.n = 3;
              return driver.isCollapsed();
            case 3:
              _t28(_context18.v).toBe(false);
            case 4:
              return _context18.a(2);
          }
        }, _callee18);
      })));
      it('should show empty state node when no options are available', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee19() {
        var driver;
        return _regenerator().w(function (_context19) {
          while (1) switch (_context19.n) {
            case 0:
              driver = createDriver(/*#__PURE__*/_react["default"].createElement(ControlledSearch, {
                options: [],
                value: "fox",
                renderEmptyState: function renderEmptyState(value) {
                  return /*#__PURE__*/_react["default"].createElement("div", {
                    __self: _this,
                    __source: {
                      fileName: _jsxFileName,
                      lineNumber: 265,
                      columnNumber: 40
                    }
                  }, "No results for ", value);
                },
                __self: _this,
                __source: {
                  fileName: _jsxFileName,
                  lineNumber: 262,
                  columnNumber: 11
                }
              }));
              _context19.n = 1;
              return driver.inputDriver.click();
            case 1:
              expect(_unit.screen.getByText('No results for fox')).toBeTruthy();
            case 2:
              return _context19.a(2);
          }
        }, _callee19);
      })));
      it('should NOT show empty state node when options are available', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee20() {
        var driver;
        return _regenerator().w(function (_context20) {
          while (1) switch (_context20.n) {
            case 0:
              driver = createDriver(/*#__PURE__*/_react["default"].createElement(ControlledSearch, {
                options: [{
                  id: 1,
                  value: 'fox'
                }, {
                  id: 2,
                  value: 'dog'
                }],
                value: "fox",
                renderEmptyState: function renderEmptyState(value) {
                  return /*#__PURE__*/_react["default"].createElement("div", {
                    __self: _this,
                    __source: {
                      fileName: _jsxFileName,
                      lineNumber: 280,
                      columnNumber: 40
                    }
                  }, "No results for ", value);
                },
                __self: _this,
                __source: {
                  fileName: _jsxFileName,
                  lineNumber: 274,
                  columnNumber: 11
                }
              }));
              _context20.n = 1;
              return driver.inputDriver.click();
            case 1:
              expect(_unit.screen.queryByText('No results for fox')).toBeFalsy();
            case 2:
              return _context20.a(2);
          }
        }, _callee20);
      })));
      describe('Clearing input', function () {
        it('should NOT trigger onChange on clearing', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee21() {
          var onChange, _createDriver4, inputDriver;
          return _regenerator().w(function (_context21) {
            while (1) switch (_context21.n) {
              case 0:
                onChange = vi.fn();
                _createDriver4 = createDriver(/*#__PURE__*/_react["default"].createElement(_Search.Search, {
                  value: "fox",
                  onChange: onChange,
                  clearButton: true,
                  __self: _this,
                  __source: {
                    fileName: _jsxFileName,
                    lineNumber: 291,
                    columnNumber: 13
                  }
                })), inputDriver = _createDriver4.inputDriver;
                expect(onChange).toHaveBeenCalledTimes(0);
                _context21.n = 1;
                return inputDriver.clickClear();
              case 1:
                expect(onChange).toHaveBeenCalledTimes(0);
              case 2:
                return _context21.a(2);
            }
          }, _callee21);
        })));
        it('should trigger onClear on clearing', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee22() {
          var onClear, _createDriver5, inputDriver;
          return _regenerator().w(function (_context22) {
            while (1) switch (_context22.n) {
              case 0:
                onClear = vi.fn();
                _createDriver5 = createDriver(/*#__PURE__*/_react["default"].createElement(_Search.Search, {
                  options: options,
                  value: "fox",
                  onChange: function onChange() {},
                  clearButton: true,
                  onClear: onClear,
                  __self: _this,
                  __source: {
                    fileName: _jsxFileName,
                    lineNumber: 301,
                    columnNumber: 13
                  }
                })), inputDriver = _createDriver5.inputDriver;
                expect(onClear).toHaveBeenCalledTimes(0);
                _context22.n = 1;
                return inputDriver.clickClear();
              case 1:
                expect(onClear).toHaveBeenCalledTimes(1);
                expect(onClear.mock.calls[0][0]).toBeTruthy();
              case 2:
                return _context22.a(2);
            }
          }, _callee22);
        })));
      });
    });
    describe('Uncontrolled', function () {
      it('should filter search options if initial defaultValue value passed and input focused', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee23() {
        var _createDriver6, inputDriver, dropdownLayoutDriver, _t29;
        return _regenerator().w(function (_context23) {
          while (1) switch (_context23.n) {
            case 0:
              _createDriver6 = createDriver(/*#__PURE__*/_react["default"].createElement(_Search.Search, {
                options: options,
                defaultValue: "fox",
                __self: _this,
                __source: {
                  fileName: _jsxFileName,
                  lineNumber: 320,
                  columnNumber: 11
                }
              })), inputDriver = _createDriver6.inputDriver, dropdownLayoutDriver = _createDriver6.dropdownLayoutDriver;
              _context23.n = 1;
              return inputDriver.focus();
            case 1:
              _t29 = expect;
              _context23.n = 2;
              return dropdownLayoutDriver.optionsLength();
            case 2:
              _t29(_context23.v).toBe(1);
            case 3:
              return _context23.a(2);
          }
        }, _callee23);
      })));
      describe('Clearing input', function () {
        it('should trigger onClear on clearing', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee24() {
          var onClear, _createDriver7, inputDriver;
          return _regenerator().w(function (_context24) {
            while (1) switch (_context24.n) {
              case 0:
                onClear = vi.fn();
                _createDriver7 = createDriver(/*#__PURE__*/_react["default"].createElement(_Search.Search, {
                  defaultValue: "fox",
                  options: options,
                  onClear: onClear,
                  __self: _this,
                  __source: {
                    fileName: _jsxFileName,
                    lineNumber: 331,
                    columnNumber: 13
                  }
                })), inputDriver = _createDriver7.inputDriver;
                expect(onClear).toHaveBeenCalledTimes(0);
                _context24.n = 1;
                return inputDriver.clickClear();
              case 1:
                expect(onClear).toHaveBeenCalledTimes(1);
                expect(onClear.mock.calls[0][0]).toBeTruthy();
              case 2:
                return _context24.a(2);
            }
          }, _callee24);
        })));
        it('should clear input after clear button click', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee25() {
          var _createDriver8, inputDriver, _t30, _t31;
          return _regenerator().w(function (_context25) {
            while (1) switch (_context25.n) {
              case 0:
                _createDriver8 = createDriver(/*#__PURE__*/_react["default"].createElement(_Search.Search, {
                  defaultValue: "fox",
                  options: options,
                  __self: _this,
                  __source: {
                    fileName: _jsxFileName,
                    lineNumber: 341,
                    columnNumber: 13
                  }
                })), inputDriver = _createDriver8.inputDriver;
                _context25.n = 1;
                return inputDriver.enterText('h');
              case 1:
                _t30 = expect;
                _context25.n = 2;
                return inputDriver.getText();
              case 2:
                _t30(_context25.v).toEqual('h');
                _context25.n = 3;
                return inputDriver.clickClear();
              case 3:
                _t31 = expect;
                _context25.n = 4;
                return inputDriver.getText();
              case 4:
                _t31(_context25.v).toEqual('');
              case 5:
                return _context25.a(2);
            }
          }, _callee25);
        })));
      });
    });
    describe('Expandable', function () {
      it('should start as collapsed element by default when expandable=true', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee26() {
        var _createDriver9, driver, _t32, _t33;
        return _regenerator().w(function (_context26) {
          while (1) switch (_context26.n) {
            case 0:
              _createDriver9 = createDriver(/*#__PURE__*/_react["default"].createElement(_Search.Search, {
                options: options,
                expandable: true,
                __self: _this,
                __source: {
                  fileName: _jsxFileName,
                  lineNumber: 354,
                  columnNumber: 11
                }
              })), driver = _createDriver9.driver;
              _t32 = expect;
              _context26.n = 1;
              return driver.isExpandable();
            case 1:
              _t32(_context26.v).toBe(true);
              _t33 = expect;
              _context26.n = 2;
              return driver.isCollapsed();
            case 2:
              _t33(_context26.v).toBe(true);
            case 3:
              return _context26.a(2);
          }
        }, _callee26);
      })));
      it('should extend the search input when clicked', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee27() {
        var _createDriver0, driver, inputDriver, _t34, _t35;
        return _regenerator().w(function (_context27) {
          while (1) switch (_context27.n) {
            case 0:
              _createDriver0 = createDriver(/*#__PURE__*/_react["default"].createElement(_Search.Search, {
                options: options,
                expandable: true,
                __self: _this,
                __source: {
                  fileName: _jsxFileName,
                  lineNumber: 363,
                  columnNumber: 11
                }
              })), driver = _createDriver0.driver, inputDriver = _createDriver0.inputDriver;
              _t34 = expect;
              _context27.n = 1;
              return driver.isCollapsed();
            case 1:
              _t34(_context27.v).toBe(true);
              _context27.n = 2;
              return inputDriver.click();
            case 2:
              _t35 = expect;
              _context27.n = 3;
              return driver.isCollapsed();
            case 3:
              _t35(_context27.v).toBe(false);
            case 4:
              return _context27.a(2);
          }
        }, _callee27);
      })));
      it('should be focused on the input after expanding the search component', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee28() {
        var _createDriver1, inputDriver, _t36, _t37;
        return _regenerator().w(function (_context28) {
          while (1) switch (_context28.n) {
            case 0:
              _createDriver1 = createDriver(/*#__PURE__*/_react["default"].createElement(_Search.Search, {
                options: options,
                expandable: true,
                __self: _this,
                __source: {
                  fileName: _jsxFileName,
                  lineNumber: 373,
                  columnNumber: 11
                }
              })), inputDriver = _createDriver1.inputDriver;
              _t36 = expect;
              _context28.n = 1;
              return inputDriver.isFocus();
            case 1:
              _t36(_context28.v).toBe(false);
              _context28.n = 2;
              return inputDriver.click();
            case 2:
              _t37 = expect;
              _context28.n = 3;
              return inputDriver.isFocus();
            case 3:
              _t37(_context28.v).toBe(true);
            case 4:
              return _context28.a(2);
          }
        }, _callee28);
      })));
      it('should not collapse the input if the input has value and blurred', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee29() {
        var _createDriver10, inputDriver, driver, _t38;
        return _regenerator().w(function (_context29) {
          while (1) switch (_context29.n) {
            case 0:
              _createDriver10 = createDriver(/*#__PURE__*/_react["default"].createElement(_Search.Search, {
                options: options,
                expandable: true,
                __self: _this,
                __source: {
                  fileName: _jsxFileName,
                  lineNumber: 383,
                  columnNumber: 11
                }
              })), inputDriver = _createDriver10.inputDriver, driver = _createDriver10.driver;
              _context29.n = 1;
              return inputDriver.click();
            case 1:
              _context29.n = 2;
              return inputDriver.enterText('wix');
            case 2:
              _context29.n = 3;
              return inputDriver.blur();
            case 3:
              _t38 = expect;
              _context29.n = 4;
              return driver.isCollapsed();
            case 4:
              _t38(_context29.v).toBe(false);
            case 5:
              return _context29.a(2);
          }
        }, _callee29);
      })));
      it('should collapse the input if the input has no value and blurred', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee30() {
        var _createDriver11, inputDriver, driver, _t39;
        return _regenerator().w(function (_context30) {
          while (1) switch (_context30.n) {
            case 0:
              _createDriver11 = createDriver(/*#__PURE__*/_react["default"].createElement(_Search.Search, {
                options: options,
                expandable: true,
                __self: _this,
                __source: {
                  fileName: _jsxFileName,
                  lineNumber: 394,
                  columnNumber: 11
                }
              })), inputDriver = _createDriver11.inputDriver, driver = _createDriver11.driver;
              _context30.n = 1;
              return inputDriver.click();
            case 1:
              _context30.n = 2;
              return inputDriver.blur();
            case 2:
              _t39 = expect;
              _context30.n = 3;
              return driver.isCollapsed();
            case 3:
              _t39(_context30.v).toBe(true);
            case 4:
              return _context30.a(2);
          }
        }, _callee30);
      })));
      it('should have non-collapsed input when expandable=true and the input has initial value', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee31() {
        var _createDriver12, driver, _t40, _t41;
        return _regenerator().w(function (_context31) {
          while (1) switch (_context31.n) {
            case 0:
              _createDriver12 = createDriver(/*#__PURE__*/_react["default"].createElement(_Search.Search, {
                options: options,
                expandable: true,
                defaultValue: "Test",
                __self: _this,
                __source: {
                  fileName: _jsxFileName,
                  lineNumber: 404,
                  columnNumber: 11
                }
              })), driver = _createDriver12.driver;
              _t40 = expect;
              _context31.n = 1;
              return driver.isExpandable();
            case 1:
              _t40(_context31.v).toBe(true);
              _t41 = expect;
              _context31.n = 2;
              return driver.isCollapsed();
            case 2:
              _t41(_context31.v).toBe(false);
            case 3:
              return _context31.a(2);
          }
        }, _callee31);
      })));
      it('should not be collapsed by default', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee32() {
        var _createDriver13, driver, inputDriver, _t42, _t43, _t44;
        return _regenerator().w(function (_context32) {
          while (1) switch (_context32.n) {
            case 0:
              _createDriver13 = createDriver(/*#__PURE__*/_react["default"].createElement(_Search.Search, {
                options: options,
                __self: _this,
                __source: {
                  fileName: _jsxFileName,
                  lineNumber: 413,
                  columnNumber: 11
                }
              })), driver = _createDriver13.driver, inputDriver = _createDriver13.inputDriver;
              _t42 = expect;
              _context32.n = 1;
              return driver.isExpandable();
            case 1:
              _t42(_context32.v).toBe(false);
              _t43 = expect;
              _context32.n = 2;
              return driver.isCollapsed();
            case 2:
              _t43(_context32.v).toBe(false);
              _context32.n = 3;
              return inputDriver.click();
            case 3:
              _t44 = expect;
              _context32.n = 4;
              return driver.isCollapsed();
            case 4:
              _t44(_context32.v).toBe(false);
            case 5:
              return _context32.a(2);
          }
        }, _callee32);
      })));
      it('should not be collapsed when specified with autoFocus', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee33() {
        var _createDriver14, driver, _t45, _t46;
        return _regenerator().w(function (_context33) {
          while (1) switch (_context33.n) {
            case 0:
              _createDriver14 = createDriver(/*#__PURE__*/_react["default"].createElement(_Search.Search, {
                expandable: true,
                autoFocus: true,
                options: options,
                __self: _this,
                __source: {
                  fileName: _jsxFileName,
                  lineNumber: 423,
                  columnNumber: 11
                }
              })), driver = _createDriver14.driver;
              _t45 = expect;
              _context33.n = 1;
              return driver.isExpandable();
            case 1:
              _t45(_context33.v).toBe(true);
              _t46 = expect;
              _context33.n = 2;
              return driver.isCollapsed();
            case 2:
              _t46(_context33.v).toBe(false);
            case 3:
              return _context33.a(2);
          }
        }, _callee33);
      })));
    });
    describe('debounced', function () {
      beforeEach(function () {
        vi.useFakeTimers();
      });
      afterEach(function () {
        vi.useRealTimers();
      });
      it('should debounce onChange callback if debounceMs prop is provided', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee37() {
        var onChangeSpy, driver;
        return _regenerator().w(function (_context37) {
          while (1) switch (_context37.n) {
            case 0:
              onChangeSpy = vi.fn();
              driver = createDriver(/*#__PURE__*/_react["default"].createElement(_Search.Search, {
                onChange: onChangeSpy,
                debounceMs: 100,
                __self: _this,
                __source: {
                  fileName: _jsxFileName,
                  lineNumber: 443,
                  columnNumber: 11
                }
              }));
              _context37.n = 1;
              return driver.inputDriver.enterText('f');
            case 1:
              _context37.n = 2;
              return (0, _unit.act)(/*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee34() {
                return _regenerator().w(function (_context34) {
                  while (1) switch (_context34.n) {
                    case 0:
                      return _context34.a(2, vi.advanceTimersByTime(99));
                  }
                }, _callee34);
              })));
            case 2:
              expect(onChangeSpy).not.toHaveBeenCalled();
              _context37.n = 3;
              return driver.inputDriver.enterText('fo');
            case 3:
              _context37.n = 4;
              return (0, _unit.act)(/*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee35() {
                return _regenerator().w(function (_context35) {
                  while (1) switch (_context35.n) {
                    case 0:
                      return _context35.a(2, vi.advanceTimersByTime(99));
                  }
                }, _callee35);
              })));
            case 4:
              expect(onChangeSpy).not.toHaveBeenCalled();
              _context37.n = 5;
              return driver.inputDriver.enterText('foo');
            case 5:
              _context37.n = 6;
              return (0, _unit.act)(/*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee36() {
                return _regenerator().w(function (_context36) {
                  while (1) switch (_context36.n) {
                    case 0:
                      return _context36.a(2, vi.advanceTimersByTime(100));
                  }
                }, _callee36);
              })));
            case 6:
              expect(onChangeSpy).toHaveBeenCalledTimes(1);
              expect(onChangeSpy.mock.calls[0][0].target.value).toBe('foo');
            case 7:
              return _context37.a(2);
          }
        }, _callee37);
      })));
      it('should not debounce onChange callback if debounceMs prop is not provided', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee40() {
        var onChangeSpy, driver;
        return _regenerator().w(function (_context40) {
          while (1) switch (_context40.n) {
            case 0:
              onChangeSpy = vi.fn();
              driver = createDriver(/*#__PURE__*/_react["default"].createElement(_Search.Search, {
                onChange: onChangeSpy,
                __self: _this,
                __source: {
                  fileName: _jsxFileName,
                  lineNumber: 465,
                  columnNumber: 37
                }
              }));
              _context40.n = 1;
              return driver.inputDriver.enterText('f');
            case 1:
              expect(onChangeSpy).toHaveBeenCalledTimes(1);
              expect(onChangeSpy.mock.calls[0][0].target.value).toBe('f');
              _context40.n = 2;
              return driver.inputDriver.enterText('fo');
            case 2:
              _context40.n = 3;
              return (0, _unit.act)(/*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee38() {
                return _regenerator().w(function (_context38) {
                  while (1) switch (_context38.n) {
                    case 0:
                      return _context38.a(2, vi.advanceTimersByTime(99));
                  }
                }, _callee38);
              })));
            case 3:
              expect(onChangeSpy).toHaveBeenCalledTimes(2);
              expect(onChangeSpy.mock.calls[1][0].target.value).toBe('fo');
              _context40.n = 4;
              return driver.inputDriver.enterText('foo');
            case 4:
              _context40.n = 5;
              return (0, _unit.act)(/*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee39() {
                return _regenerator().w(function (_context39) {
                  while (1) switch (_context39.n) {
                    case 0:
                      return _context39.a(2, vi.advanceTimersByTime(100));
                  }
                }, _callee39);
              })));
            case 5:
              expect(onChangeSpy).toHaveBeenCalledTimes(3);
              expect(onChangeSpy.mock.calls[2][0].target.value).toBe('foo');
            case 6:
              return _context40.a(2);
          }
        }, _callee40);
      })));

      // TODO - missing implementation close dropdown on clear button press.
      it.skip('dropdown should not open until debounce finishes', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee42() {
        var onChangeSpy, driver, _t47, _t48;
        return _regenerator().w(function (_context42) {
          while (1) switch (_context42.n) {
            case 0:
              onChangeSpy = vi.fn();
              driver = createDriver(/*#__PURE__*/_react["default"].createElement(_Search.Search, {
                options: options,
                onChange: onChangeSpy,
                debounceMs: 100,
                __self: _this,
                __source: {
                  fileName: _jsxFileName,
                  lineNumber: 489,
                  columnNumber: 11
                }
              }));
              _context42.n = 1;
              return driver.inputDriver.enterText('z');
            case 1:
              _t47 = expect;
              _context42.n = 2;
              return driver.dropdownLayoutDriver.isShown();
            case 2:
              _t47(_context42.v).toBe(false);
              _context42.n = 3;
              return (0, _unit.act)(/*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee41() {
                return _regenerator().w(function (_context41) {
                  while (1) switch (_context41.n) {
                    case 0:
                      vi.advanceTimersByTime(100);
                    case 1:
                      return _context41.a(2);
                  }
                }, _callee41);
              })));
            case 3:
              _t48 = expect;
              _context42.n = 4;
              return driver.dropdownLayoutDriver.isShown();
            case 4:
              _t48(_context42.v).toBe(true);
            case 5:
              return _context42.a(2);
          }
        }, _callee42);
      })));
    });
    describe('status attribute', function () {
      it('should have no status', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee43() {
        var _createDriver15, inputDriver, _t49;
        return _regenerator().w(function (_context43) {
          while (1) switch (_context43.n) {
            case 0:
              _createDriver15 = createDriver(/*#__PURE__*/_react["default"].createElement(_Search.Search, {
                __self: _this,
                __source: {
                  fileName: _jsxFileName,
                  lineNumber: 504,
                  columnNumber: 46
                }
              })), inputDriver = _createDriver15.inputDriver;
              _t49 = expect;
              _context43.n = 1;
              return inputDriver.hasStatus('error');
            case 1:
              _t49(_context43.v).toBe(false);
            case 2:
              return _context43.a(2);
          }
        }, _callee43);
      })));
      it.each([{
        status: 'error'
      }, {
        status: 'warning'
      }, {
        status: 'loading'
      }])('should display status when %p', /*#__PURE__*/function () {
        var _ref45 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee44(test) {
          var _createDriver16, inputDriver, _t50;
          return _regenerator().w(function (_context44) {
            while (1) switch (_context44.n) {
              case 0:
                _createDriver16 = createDriver(/*#__PURE__*/_react["default"].createElement(_Search.Search, (0, _extends2["default"])({}, test, {
                  __self: _this,
                  __source: {
                    fileName: _jsxFileName,
                    lineNumber: 514,
                    columnNumber: 46
                  }
                }))), inputDriver = _createDriver16.inputDriver;
                _t50 = expect;
                _context44.n = 1;
                return inputDriver.hasStatus(test.status);
              case 1:
                _t50(_context44.v).toBe(true);
              case 2:
                return _context44.a(2);
            }
          }, _callee44);
        }));
        return function (_x) {
          return _ref45.apply(this, arguments);
        };
      }());
      it.each([{
        status: 'error',
        statusMessage: 'Error Message'
      }, {
        status: 'warning',
        statusMessage: 'Warning Message'
      }, {
        status: 'loading',
        statusMessage: 'Loading Message'
      }])('should display status with message when %p', /*#__PURE__*/function () {
        var _ref46 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee45(test) {
          var _createDriver17, inputDriver, _t51, _t52;
          return _regenerator().w(function (_context45) {
            while (1) switch (_context45.n) {
              case 0:
                _createDriver17 = createDriver(/*#__PURE__*/_react["default"].createElement(_Search.Search, (0, _extends2["default"])({}, test, {
                  __self: _this,
                  __source: {
                    fileName: _jsxFileName,
                    lineNumber: 524,
                    columnNumber: 46
                  }
                }))), inputDriver = _createDriver17.inputDriver;
                _t51 = expect;
                _context45.n = 1;
                return inputDriver.hasStatus(test.status);
              case 1:
                _t51(_context45.v).toBe(true);
                _t52 = expect;
                _context45.n = 2;
                return inputDriver.getStatusMessage();
              case 2:
                _t52(_context45.v).toBe(test.statusMessage);
              case 3:
                return _context45.a(2);
            }
          }, _callee45);
        }));
        return function (_x2) {
          return _ref46.apply(this, arguments);
        };
      }());
      it('should call onEnterPressed', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee46() {
        var onEnterPressed, _createDriver18, inputDriver;
        return _regenerator().w(function (_context46) {
          while (1) switch (_context46.n) {
            case 0:
              onEnterPressed = vi.fn();
              _createDriver18 = createDriver(/*#__PURE__*/_react["default"].createElement(_Search.Search, {
                onEnterPressed: onEnterPressed,
                __self: _this,
                __source: {
                  fileName: _jsxFileName,
                  lineNumber: 533,
                  columnNumber: 11
                }
              })), inputDriver = _createDriver18.inputDriver;
              expect(onEnterPressed).not.toHaveBeenCalled();

              // Driver
              _context46.n = 1;
              return inputDriver.keyDown({
                key: 'Enter',
                keyCode: 13
              });
            case 1:
              _context46.n = 2;
              return inputDriver.keyDown('Enter');
            case 2:
              expect(onEnterPressed).toHaveBeenCalled();
            case 3:
              return _context46.a(2);
          }
        }, _callee46);
      })));
    });
    describe('onChange', function () {
      it('should update onChange callback', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee47() {
        var onChange1, onChange2, _render2, driver, rerender;
        return _regenerator().w(function (_context47) {
          while (1) switch (_context47.n) {
            case 0:
              onChange1 = vi.fn();
              onChange2 = vi.fn();
              _render2 = render(/*#__PURE__*/_react["default"].createElement(_Search.Search, {
                onChange: onChange1,
                __self: _this,
                __source: {
                  fileName: _jsxFileName,
                  lineNumber: 551,
                  columnNumber: 45
                }
              })), driver = _render2.driver, rerender = _render2.rerender; // Expect to call onChange
              expect(onChange1).toHaveBeenCalledTimes(0);
              _context47.n = 1;
              return driver.inputDriver.enterText('yay');
            case 1:
              expect(onChange1).toHaveBeenCalledTimes(1);
              rerender(/*#__PURE__*/_react["default"].createElement(_Search.Search, {
                onChange: onChange2,
                __self: _this,
                __source: {
                  fileName: _jsxFileName,
                  lineNumber: 558,
                  columnNumber: 18
                }
              }));

              // Expect to update and call the new onChange
              expect(onChange2).toHaveBeenCalledTimes(0);
              _context47.n = 2;
              return driver.inputDriver.enterText('yay-yay');
            case 2:
              expect(onChange2).toHaveBeenCalledTimes(1);
            case 3:
              return _context47.a(2);
          }
        }, _callee47);
      })));
    });
    describe('Public methods', function () {
      describe('Search.focus', function () {
        it('should focus the input', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee49() {
          var ref, _render3, driver, _t53;
          return _regenerator().w(function (_context49) {
            while (1) switch (_context49.n) {
              case 0:
                ref = /*#__PURE__*/_react["default"].createRef();
                _render3 = render(/*#__PURE__*/_react["default"].createElement(_Search.Search, {
                  ref: ref,
                  __self: _this,
                  __source: {
                    fileName: _jsxFileName,
                    lineNumber: 571,
                    columnNumber: 37
                  }
                })), driver = _render3.driver;
                _context49.n = 1;
                return (0, _unit.act)(/*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee48() {
                  return _regenerator().w(function (_context48) {
                    while (1) switch (_context48.n) {
                      case 0:
                        ref.current.focus();
                      case 1:
                        return _context48.a(2);
                    }
                  }, _callee48);
                })));
              case 1:
                _t53 = expect;
                _context49.n = 2;
                return driver.inputDriver.isFocusedStyle();
              case 2:
                _t53(_context49.v).toBe(true);
              case 3:
                return _context49.a(2);
            }
          }, _callee49);
        })));
      });
      describe('Search.blur', function () {
        it('should blur the input', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee52() {
          var ref, _render4, driver, _t54, _t55;
          return _regenerator().w(function (_context52) {
            while (1) switch (_context52.n) {
              case 0:
                ref = /*#__PURE__*/_react["default"].createRef();
                _render4 = render(/*#__PURE__*/_react["default"].createElement(_Search.Search, {
                  ref: ref,
                  __self: _this,
                  __source: {
                    fileName: _jsxFileName,
                    lineNumber: 584,
                    columnNumber: 37
                  }
                })), driver = _render4.driver;
                _context52.n = 1;
                return (0, _unit.act)(/*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee50() {
                  return _regenerator().w(function (_context50) {
                    while (1) switch (_context50.n) {
                      case 0:
                        ref.current.focus();
                      case 1:
                        return _context50.a(2);
                    }
                  }, _callee50);
                })));
              case 1:
                _t54 = expect;
                _context52.n = 2;
                return driver.inputDriver.isFocusedStyle();
              case 2:
                _t54(_context52.v).toBe(true);
                _context52.n = 3;
                return (0, _unit.act)(/*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee51() {
                  return _regenerator().w(function (_context51) {
                    while (1) switch (_context51.n) {
                      case 0:
                        ref.current.blur();
                      case 1:
                        return _context51.a(2);
                    }
                  }, _callee51);
                })));
              case 3:
                _t55 = expect;
                _context52.n = 4;
                return driver.inputDriver.isFocusedStyle();
              case 4:
                _t55(_context52.v).toBe(false);
              case 5:
                return _context52.a(2);
            }
          }, _callee52);
        })));
      });
      describe('Search.clear', function () {
        it('should trigger onClear', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee54() {
          var onClear, ref;
          return _regenerator().w(function (_context54) {
            while (1) switch (_context54.n) {
              case 0:
                onClear = vi.fn();
                ref = /*#__PURE__*/_react["default"].createRef();
                render(/*#__PURE__*/_react["default"].createElement(_Search.Search, {
                  ref: ref,
                  onClear: onClear,
                  __self: _this,
                  __source: {
                    fileName: _jsxFileName,
                    lineNumber: 600,
                    columnNumber: 18
                  }
                }));
                _context54.n = 1;
                return (0, _unit.act)(/*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee53() {
                  return _regenerator().w(function (_context53) {
                    while (1) switch (_context53.n) {
                      case 0:
                        ref.current.clear();
                      case 1:
                        return _context53.a(2);
                    }
                  }, _callee53);
                })));
              case 1:
                expect(onClear).toHaveBeenCalledTimes(1);
              case 2:
                return _context54.a(2);
            }
          }, _callee54);
        })));
        it('should clear input', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee56() {
          var ref, _render5, driver, _t56, _t57;
          return _regenerator().w(function (_context56) {
            while (1) switch (_context56.n) {
              case 0:
                ref = /*#__PURE__*/_react["default"].createRef();
                _render5 = render(/*#__PURE__*/_react["default"].createElement(_Search.Search, {
                  ref: ref,
                  defaultValue: "fox",
                  __self: _this,
                  __source: {
                    fileName: _jsxFileName,
                    lineNumber: 609,
                    columnNumber: 37
                  }
                })), driver = _render5.driver;
                _t56 = expect;
                _context56.n = 1;
                return driver.inputDriver.getText();
              case 1:
                _t56(_context56.v).toEqual('fox');
                _context56.n = 2;
                return (0, _unit.act)(/*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee55() {
                  return _regenerator().w(function (_context55) {
                    while (1) switch (_context55.n) {
                      case 0:
                        ref.current.clear();
                      case 1:
                        return _context55.a(2);
                    }
                  }, _callee55);
                })));
              case 2:
                _t57 = expect;
                _context56.n = 3;
                return driver.inputDriver.getText();
              case 3:
                _t57(_context56.v).toEqual('');
              case 4:
                return _context56.a(2);
            }
          }, _callee56);
        })));
        it('clears input on clear button Space key press', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee57() {
          var driver, _t58, _t59;
          return _regenerator().w(function (_context57) {
            while (1) switch (_context57.n) {
              case 0:
                driver = createDriver(/*#__PURE__*/_react["default"].createElement(_Search.Search, {
                  defaultValue: "fox",
                  __self: _this,
                  __source: {
                    fileName: _jsxFileName,
                    lineNumber: 618,
                    columnNumber: 39
                  }
                }));
                _t58 = expect;
                _context57.n = 1;
                return driver.inputDriver.getText();
              case 1:
                _t58(_context57.v).toEqual('fox');
                _context57.n = 2;
                return driver.inputDriver.focus();
              case 2:
                _context57.n = 3;
                return _userEvent["default"].tab();
              case 3:
                _context57.n = 4;
                return _userEvent["default"].keyboard('[Space]');
              case 4:
                _t59 = expect;
                _context57.n = 5;
                return driver.inputDriver.getText();
              case 5:
                _t59(_context57.v).toEqual('');
              case 6:
                return _context57.a(2);
            }
          }, _callee57);
        })));
        it('clears input on clear button Enter key press', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee58() {
          var driver, _t60, _t61;
          return _regenerator().w(function (_context58) {
            while (1) switch (_context58.n) {
              case 0:
                driver = createDriver(/*#__PURE__*/_react["default"].createElement(_Search.Search, {
                  defaultValue: "fox",
                  __self: _this,
                  __source: {
                    fileName: _jsxFileName,
                    lineNumber: 628,
                    columnNumber: 39
                  }
                }));
                _t60 = expect;
                _context58.n = 1;
                return driver.inputDriver.getText();
              case 1:
                _t60(_context58.v).toEqual('fox');
                _context58.n = 2;
                return driver.inputDriver.focus();
              case 2:
                _context58.n = 3;
                return _userEvent["default"].tab();
              case 3:
                _context58.n = 4;
                return _userEvent["default"].keyboard('[Enter]');
              case 4:
                _t61 = expect;
                _context58.n = 5;
                return driver.inputDriver.getText();
              case 5:
                _t61(_context58.v).toEqual('');
              case 6:
                return _context58.a(2);
            }
          }, _callee58);
        })));
      });
    });
    describe('transition callbacks', function () {
      it('should call onExpandStart and onExpandEnd when expanding', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator().m(function _callee59() {
        var onExpandTransitionStart, onExpandTransitionEnd, driver, contentElement;
        return _regenerator().w(function (_context59) {
          while (1) switch (_context59.n) {
            case 0:
              onExpandTransitionStart = vi.fn();
              onExpandTransitionEnd = vi.fn();
              driver = createDriver(/*#__PURE__*/_react["default"].createElement(_Search.Search, {
                expandable: true,
                onExpandTransitionStart: onExpandTransitionStart,
                onExpandTransitionEnd: onExpandTransitionEnd,
                __self: _this,
                __source: {
                  fileName: _jsxFileName,
                  lineNumber: 645,
                  columnNumber: 11
                }
              }));
              _context59.n = 1;
              return driver.getContentElement();
            case 1:
              contentElement = _context59.v;
              _context59.n = 2;
              return driver.inputDriver.click();
            case 2:
              _react2.fireEvent.transitionStart(contentElement);
              expect(onExpandTransitionStart).toHaveBeenCalledTimes(1);
              expect(onExpandTransitionStart).toHaveBeenCalledWith(false);
              _react2.fireEvent.transitionEnd(contentElement);
              expect(onExpandTransitionEnd).toHaveBeenCalledTimes(1);
              expect(onExpandTransitionEnd).toHaveBeenCalledWith(false);
              onExpandTransitionStart.mockClear();
              onExpandTransitionEnd.mockClear();
              _context59.n = 3;
              return driver.inputDriver.blur();
            case 3:
              _react2.fireEvent.transitionStart(contentElement);
              expect(onExpandTransitionStart).toHaveBeenCalledTimes(1);
              expect(onExpandTransitionStart).toHaveBeenCalledWith(true);
              _react2.fireEvent.transitionEnd(contentElement);
              expect(onExpandTransitionEnd).toHaveBeenCalledTimes(1);
              expect(onExpandTransitionEnd).toHaveBeenCalledWith(true);
            case 4:
              return _context59.a(2);
          }
        }, _callee59);
      })));
    });
  }
});