1886da342Sopenharmony_ci/* 2886da342Sopenharmony_ci * Copyright (c) 2022-2024 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_ciexport class ArgumentMatchers { 16886da342Sopenharmony_ci constructor() { 17886da342Sopenharmony_ci this.ANY = '<any>'; 18886da342Sopenharmony_ci this.ANY_STRING = '<any String>'; 19886da342Sopenharmony_ci this.ANY_BOOLEAN = '<any Boolean>'; 20886da342Sopenharmony_ci this.ANY_NUMBER = '<any Number>'; 21886da342Sopenharmony_ci this.ANY_OBJECT = '<any Object>'; 22886da342Sopenharmony_ci this.ANY_FUNCTION = '<any Function>'; 23886da342Sopenharmony_ci this.MATCH_REGEXS = '<match regexs>'; 24886da342Sopenharmony_ci } 25886da342Sopenharmony_ci static any() { 26886da342Sopenharmony_ci } 27886da342Sopenharmony_ci static anyString() { 28886da342Sopenharmony_ci } 29886da342Sopenharmony_ci static anyBoolean() { 30886da342Sopenharmony_ci } 31886da342Sopenharmony_ci static anyNumber() { 32886da342Sopenharmony_ci } 33886da342Sopenharmony_ci static anyObj() { 34886da342Sopenharmony_ci } 35886da342Sopenharmony_ci static anyFunction() { 36886da342Sopenharmony_ci } 37886da342Sopenharmony_ci static matchRegexs(regex) { 38886da342Sopenharmony_ci if (ArgumentMatchers.isRegExp(regex)) { 39886da342Sopenharmony_ci return regex; 40886da342Sopenharmony_ci } 41886da342Sopenharmony_ci throw Error('not a regex'); 42886da342Sopenharmony_ci } 43886da342Sopenharmony_ci static isRegExp(value) { 44886da342Sopenharmony_ci return Object.prototype.toString.call(value) === '[object RegExp]'; 45886da342Sopenharmony_ci } 46886da342Sopenharmony_ci matcheReturnKey(...args) { 47886da342Sopenharmony_ci let arg = args[0]; 48886da342Sopenharmony_ci let regex = args[1]; 49886da342Sopenharmony_ci let stubSetKey = args[2]; 50886da342Sopenharmony_ci if (stubSetKey && stubSetKey == this.ANY) { 51886da342Sopenharmony_ci return this.ANY; 52886da342Sopenharmony_ci } 53886da342Sopenharmony_ci 54886da342Sopenharmony_ci if (typeof arg === 'string' && !regex) { 55886da342Sopenharmony_ci return this.ANY_STRING; 56886da342Sopenharmony_ci } 57886da342Sopenharmony_ci 58886da342Sopenharmony_ci if (typeof arg === 'boolean' && !regex) { 59886da342Sopenharmony_ci return this.ANY_BOOLEAN; 60886da342Sopenharmony_ci } 61886da342Sopenharmony_ci 62886da342Sopenharmony_ci if (typeof arg === 'number' && !regex) { 63886da342Sopenharmony_ci return this.ANY_NUMBER; 64886da342Sopenharmony_ci } 65886da342Sopenharmony_ci 66886da342Sopenharmony_ci if (typeof arg === 'object' && !regex) { 67886da342Sopenharmony_ci return this.ANY_OBJECT; 68886da342Sopenharmony_ci } 69886da342Sopenharmony_ci 70886da342Sopenharmony_ci if (typeof arg === 'function' && !regex) { 71886da342Sopenharmony_ci return this.ANY_FUNCTION; 72886da342Sopenharmony_ci } 73886da342Sopenharmony_ci 74886da342Sopenharmony_ci if (typeof arg === 'string' && regex) { 75886da342Sopenharmony_ci return regex.test(arg); 76886da342Sopenharmony_ci } 77886da342Sopenharmony_ci return null; 78886da342Sopenharmony_ci } 79886da342Sopenharmony_ci matcheStubKey(key) { 80886da342Sopenharmony_ci if (key === ArgumentMatchers.any) { 81886da342Sopenharmony_ci return this.ANY; 82886da342Sopenharmony_ci } 83886da342Sopenharmony_ci if (key === ArgumentMatchers.anyString) { 84886da342Sopenharmony_ci return this.ANY_STRING; 85886da342Sopenharmony_ci } 86886da342Sopenharmony_ci if (key === ArgumentMatchers.anyBoolean) { 87886da342Sopenharmony_ci return this.ANY_BOOLEAN; 88886da342Sopenharmony_ci } 89886da342Sopenharmony_ci if (key === ArgumentMatchers.anyNumber) { 90886da342Sopenharmony_ci return this.ANY_NUMBER; 91886da342Sopenharmony_ci } 92886da342Sopenharmony_ci if (key === ArgumentMatchers.anyObj) { 93886da342Sopenharmony_ci return this.ANY_OBJECT; 94886da342Sopenharmony_ci } 95886da342Sopenharmony_ci if (key === ArgumentMatchers.anyFunction) { 96886da342Sopenharmony_ci return this.ANY_FUNCTION; 97886da342Sopenharmony_ci } 98886da342Sopenharmony_ci if (ArgumentMatchers.isRegExp(key)) { 99886da342Sopenharmony_ci return key; 100886da342Sopenharmony_ci } 101886da342Sopenharmony_ci return null; 102886da342Sopenharmony_ci } 103886da342Sopenharmony_ci} 104