1886da342Sopenharmony_ci/* 2886da342Sopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd. 3886da342Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4886da342Sopenharmony_ci * you may not use this file except in compliance with the License. 5886da342Sopenharmony_ci * You may obtain a copy of the License at 6886da342Sopenharmony_ci * 7886da342Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8886da342Sopenharmony_ci * 9886da342Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10886da342Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11886da342Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12886da342Sopenharmony_ci * See the License for the specific language governing permissions and 13886da342Sopenharmony_ci * limitations under the License. 14886da342Sopenharmony_ci */ 15886da342Sopenharmony_ci 16886da342Sopenharmony_ciexport class ArgumentMatchers { 17886da342Sopenharmony_ci ANY = "<any>"; 18886da342Sopenharmony_ci ANY_STRING = "<any String>"; 19886da342Sopenharmony_ci ANY_BOOLEAN = "<any Boolean>"; 20886da342Sopenharmony_ci ANY_NUMBER = "<any Number>"; 21886da342Sopenharmony_ci ANY_OBJECT = "<any Object>"; 22886da342Sopenharmony_ci ANY_FUNCTION = "<any Function>"; 23886da342Sopenharmony_ci MATCH_REGEXS = "<match regexs>"; 24886da342Sopenharmony_ci 25886da342Sopenharmony_ci static any() { 26886da342Sopenharmony_ci } 27886da342Sopenharmony_ci 28886da342Sopenharmony_ci static anyString() { 29886da342Sopenharmony_ci } 30886da342Sopenharmony_ci 31886da342Sopenharmony_ci static anyBoolean() { 32886da342Sopenharmony_ci } 33886da342Sopenharmony_ci 34886da342Sopenharmony_ci static anyNumber() { 35886da342Sopenharmony_ci } 36886da342Sopenharmony_ci 37886da342Sopenharmony_ci static anyObj() { 38886da342Sopenharmony_ci } 39886da342Sopenharmony_ci 40886da342Sopenharmony_ci static anyFunction() { 41886da342Sopenharmony_ci } 42886da342Sopenharmony_ci 43886da342Sopenharmony_ci static matchRegexs(regex: any) { 44886da342Sopenharmony_ci if (ArgumentMatchers.isRegExp(regex)) { 45886da342Sopenharmony_ci return regex; 46886da342Sopenharmony_ci } 47886da342Sopenharmony_ci throw Error("not a regex"); 48886da342Sopenharmony_ci } 49886da342Sopenharmony_ci 50886da342Sopenharmony_ci static isRegExp(value: string) { 51886da342Sopenharmony_ci return Object.prototype.toString.call(value) === "[object RegExp]"; 52886da342Sopenharmony_ci } 53886da342Sopenharmony_ci 54886da342Sopenharmony_ci matcheReturnKey(...args: Array<any>) { 55886da342Sopenharmony_ci let arg = args[0]; 56886da342Sopenharmony_ci let regex = args[1]; 57886da342Sopenharmony_ci let stubSetKey = args[2]; 58886da342Sopenharmony_ci 59886da342Sopenharmony_ci if (stubSetKey && stubSetKey == this.ANY) { 60886da342Sopenharmony_ci return this.ANY; 61886da342Sopenharmony_ci } 62886da342Sopenharmony_ci 63886da342Sopenharmony_ci if (typeof arg === "string" && !regex) { 64886da342Sopenharmony_ci return this.ANY_STRING; 65886da342Sopenharmony_ci } 66886da342Sopenharmony_ci 67886da342Sopenharmony_ci if (typeof arg === "boolean" && !regex) { 68886da342Sopenharmony_ci return this.ANY_BOOLEAN; 69886da342Sopenharmony_ci } 70886da342Sopenharmony_ci 71886da342Sopenharmony_ci if (typeof arg === "number" && !regex) { 72886da342Sopenharmony_ci return this.ANY_NUMBER; 73886da342Sopenharmony_ci } 74886da342Sopenharmony_ci 75886da342Sopenharmony_ci if (typeof arg === "object" && !regex) { 76886da342Sopenharmony_ci return this.ANY_OBJECT; 77886da342Sopenharmony_ci } 78886da342Sopenharmony_ci 79886da342Sopenharmony_ci if (typeof arg === "function" && !regex) { 80886da342Sopenharmony_ci return this.ANY_FUNCTION; 81886da342Sopenharmony_ci } 82886da342Sopenharmony_ci 83886da342Sopenharmony_ci if (typeof arg === "string" && regex) { 84886da342Sopenharmony_ci return regex.test(arg); 85886da342Sopenharmony_ci } 86886da342Sopenharmony_ci 87886da342Sopenharmony_ci return null; 88886da342Sopenharmony_ci } 89886da342Sopenharmony_ci 90886da342Sopenharmony_ci matcheStubKey(key: any) { 91886da342Sopenharmony_ci 92886da342Sopenharmony_ci if (key === ArgumentMatchers.any) { 93886da342Sopenharmony_ci return this.ANY; 94886da342Sopenharmony_ci } 95886da342Sopenharmony_ci 96886da342Sopenharmony_ci if (key === ArgumentMatchers.anyString) { 97886da342Sopenharmony_ci return this.ANY_STRING; 98886da342Sopenharmony_ci } 99886da342Sopenharmony_ci if (key === ArgumentMatchers.anyBoolean) { 100886da342Sopenharmony_ci return this.ANY_BOOLEAN; 101886da342Sopenharmony_ci } 102886da342Sopenharmony_ci if (key === ArgumentMatchers.anyNumber) { 103886da342Sopenharmony_ci return this.ANY_NUMBER; 104886da342Sopenharmony_ci } 105886da342Sopenharmony_ci if (key === ArgumentMatchers.anyObj) { 106886da342Sopenharmony_ci return this.ANY_OBJECT; 107886da342Sopenharmony_ci } 108886da342Sopenharmony_ci if (key === ArgumentMatchers.anyFunction) { 109886da342Sopenharmony_ci return this.ANY_FUNCTION; 110886da342Sopenharmony_ci } 111886da342Sopenharmony_ci 112886da342Sopenharmony_ci if (ArgumentMatchers.isRegExp(key)) { 113886da342Sopenharmony_ci return key; 114886da342Sopenharmony_ci } 115886da342Sopenharmony_ci 116886da342Sopenharmony_ci return null; 117886da342Sopenharmony_ci } 118886da342Sopenharmony_ci}