!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("@angular/cdk/testing"),require("@angular/material/form-field/testing/control"),require("@angular/material/core/testing")):"function"==typeof define&&define.amd?define("@angular/material/select/testing",["exports","@angular/cdk/testing","@angular/material/form-field/testing/control","@angular/material/core/testing"],e):e(((t=t||self).ng=t.ng||{},t.ng.material=t.ng.material||{},t.ng.material.select=t.ng.material.select||{},t.ng.material.select.testing={}),t.ng.cdk.testing,t.ng.material.formField.testing.control,t.ng.material.core.testing)}(this,(function(t,e,n,r){"use strict";
/*! *****************************************************************************
    Copyright (c) Microsoft Corporation.

    Permission to use, copy, modify, and/or distribute this software for any
    purpose with or without fee is hereby granted.

    THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
    REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
    AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
    INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
    LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
    OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
    PERFORMANCE OF THIS SOFTWARE.
    ***************************************************************************** */var o=function(t,e){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])})(t,e)};function i(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}function s(t,e,n,r){return new(n||(n=Promise))((function(o,i){function s(t){try{a(r.next(t))}catch(t){i(t)}}function c(t){try{a(r.throw(t))}catch(t){i(t)}}function a(t){t.done?o(t.value):function e(t){return t instanceof n?t:new n((function(e){e(t)}))}(t.value).then(s,c)}a((r=r.apply(t,e||[])).next())}))}function c(t,e){var n,r,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:c(0),throw:c(1),return:c(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function c(i){return function(c){return function a(i){if(n)throw new TypeError("Generator is already executing.");for(;s;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return s.label++,{value:i[1],done:!1};case 5:s.label++,r=i[1],i=[0];continue;case 7:i=s.ops.pop(),s.trys.pop();continue;default:if(!((o=(o=s.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){s=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){s.label=i[1];break}if(6===i[0]&&s.label<o[1]){s.label=o[1],o=i;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(i);break}o[2]&&s.ops.pop(),s.trys.pop();continue}i=e.call(t,s)}catch(t){i=[6,t],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,c])}}}function a(t,e){var n="function"==typeof Symbol&&t[Symbol.iterator];if(!n)return t;var r,o,i=n.call(t),s=[];try{for(;(void 0===e||e-- >0)&&!(r=i.next()).done;)s.push(r.value)}catch(t){o={error:t}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return s}function u(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(a(arguments[e]));return t}var l=function(t){function n(){var e=t.apply(this,u(arguments))||this;return e._documentRootLocator=e.documentRootLocatorFactory(),e._backdrop=e._documentRootLocator.locatorFor(".cdk-overlay-backdrop"),e}return i(n,t),n.prototype.isDisabled=function(){return s(this,void 0,void 0,(function(){return c(this,(function(t){switch(t.label){case 0:return[4,this.host()];case 1:return[2,t.sent().hasClass(this._prefix+"-select-disabled")]}}))}))},n.prototype.isValid=function(){return s(this,void 0,void 0,(function(){return c(this,(function(t){switch(t.label){case 0:return[4,this.host()];case 1:return[4,t.sent().hasClass("ng-invalid")];case 2:return[2,!t.sent()]}}))}))},n.prototype.isRequired=function(){return s(this,void 0,void 0,(function(){return c(this,(function(t){switch(t.label){case 0:return[4,this.host()];case 1:return[2,t.sent().hasClass(this._prefix+"-select-required")]}}))}))},n.prototype.isEmpty=function(){return s(this,void 0,void 0,(function(){return c(this,(function(t){switch(t.label){case 0:return[4,this.host()];case 1:return[2,t.sent().hasClass(this._prefix+"-select-empty")]}}))}))},n.prototype.isMultiple=function(){return s(this,void 0,void 0,(function(){return c(this,(function(t){switch(t.label){case 0:return[4,this.host()];case 1:return[2,t.sent().hasClass(this._prefix+"-select-multiple")]}}))}))},n.prototype.getValueText=function(){return s(this,void 0,void 0,(function(){return c(this,(function(t){switch(t.label){case 0:return[4,this.locatorFor("."+this._prefix+"-select-value")()];case 1:return[2,t.sent().text()]}}))}))},n.prototype.focus=function(){return s(this,void 0,void 0,(function(){return c(this,(function(t){switch(t.label){case 0:return[4,this.host()];case 1:return[2,t.sent().focus()]}}))}))},n.prototype.blur=function(){return s(this,void 0,void 0,(function(){return c(this,(function(t){switch(t.label){case 0:return[4,this.host()];case 1:return[2,t.sent().blur()]}}))}))},n.prototype.isFocused=function(){return s(this,void 0,void 0,(function(){return c(this,(function(t){switch(t.label){case 0:return[4,this.host()];case 1:return[2,t.sent().isFocused()]}}))}))},n.prototype.getOptions=function(t){return s(this,void 0,void 0,(function(){var e,n,r,o,i,s,a,u;return c(this,(function(c){switch(c.label){case 0:return n=(e=this._documentRootLocator).locatorForAll,o=(r=this._optionClass).with,s=(i=Object).assign,a=[Object.assign({},t||{})],u={},[4,this._getPanelSelector()];case 1:return[2,n.apply(e,[o.apply(r,[s.apply(i,a.concat([(u.ancestor=c.sent(),u)]))])])()]}}))}))},n.prototype.getOptionGroups=function(t){return s(this,void 0,void 0,(function(){var e,n,r,o,i,s,a,u;return c(this,(function(c){switch(c.label){case 0:return n=(e=this._documentRootLocator).locatorForAll,o=(r=this._optionGroupClass).with,s=(i=Object).assign,a=[Object.assign({},t||{})],u={},[4,this._getPanelSelector()];case 1:return[2,n.apply(e,[o.apply(r,[s.apply(i,a.concat([(u.ancestor=c.sent(),u)]))])])()]}}))}))},n.prototype.isOpen=function(){return s(this,void 0,void 0,(function(){var t,e;return c(this,(function(n){switch(n.label){case 0:return e=(t=this._documentRootLocator).locatorForOptional,[4,this._getPanelSelector()];case 1:return[4,e.apply(t,[n.sent()])()];case 2:return[2,!!n.sent()]}}))}))},n.prototype.open=function(){return s(this,void 0,void 0,(function(){return c(this,(function(t){switch(t.label){case 0:return[4,this.isOpen()];case 1:return t.sent()?[3,3]:[4,this.locatorFor("."+this._prefix+"-select-trigger")()];case 2:return[2,t.sent().click()];case 3:return[2]}}))}))},n.prototype.clickOptions=function(t){return s(this,void 0,void 0,(function(){var n,r,o,i=this;return c(this,(function(s){switch(s.label){case 0:return[4,this.open()];case 1:return s.sent(),[4,e.parallel((function(){return[i.isMultiple(),i.getOptions(t)]}))];case 2:if(n=a.apply(void 0,[s.sent(),2]),r=n[0],0===(o=n[1]).length)throw Error("Select does not have options matching the specified filter");return r?[4,e.parallel((function(){return o.map((function(t){return t.click()}))}))]:[3,4];case 3:return s.sent(),[3,6];case 4:return[4,o[0].click()];case 5:s.sent(),s.label=6;case 6:return[2]}}))}))},n.prototype.close=function(){return s(this,void 0,void 0,(function(){return c(this,(function(t){switch(t.label){case 0:return[4,this.isOpen()];case 1:return t.sent()?[4,this._backdrop()]:[3,3];case 2:return[2,t.sent().click()];case 3:return[2]}}))}))},n.prototype._getPanelSelector=function(){return s(this,void 0,void 0,(function(){return c(this,(function(t){switch(t.label){case 0:return[4,this.host()];case 1:return[4,t.sent().getAttribute("id")];case 2:return[2,"#"+t.sent()+"-panel"]}}))}))},n}(n.MatFormFieldControlHarness),f=function(t){function n(){var e=t.apply(this,u(arguments))||this;return e._prefix="mat",e._optionClass=r.MatOptionHarness,e._optionGroupClass=r.MatOptgroupHarness,e}return i(n,t),n.with=function(t){return void 0===t&&(t={}),new e.HarnessPredicate(n,t)},n}(l);f.hostSelector=".mat-select",
/**
     * @license
     * Copyright Google LLC All Rights Reserved.
     *
     * Use of this source code is governed by an MIT-style license that can be
     * found in the LICENSE file at https://angular.io/license
     */
/**
     * @license
     * Copyright Google LLC All Rights Reserved.
     *
     * Use of this source code is governed by an MIT-style license that can be
     * found in the LICENSE file at https://angular.io/license
     */
t.MatSelectHarness=f,t._MatSelectHarnessBase=l,Object.defineProperty(t,"__esModule",{value:!0})}));