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_ci 16886da342Sopenharmony_ciclass 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() { 44886da342Sopenharmony_ci let regex = arguments[0]; 45886da342Sopenharmony_ci if (ArgumentMatchers.isRegExp(regex)) { 46886da342Sopenharmony_ci return regex; 47886da342Sopenharmony_ci } 48886da342Sopenharmony_ci throw Error('not a regex'); 49886da342Sopenharmony_ci } 50886da342Sopenharmony_ci 51886da342Sopenharmony_ci static isRegExp(value) { 52886da342Sopenharmony_ci return Object.prototype.toString.call(value) === '[object RegExp]'; 53886da342Sopenharmony_ci } 54886da342Sopenharmony_ci 55886da342Sopenharmony_ci matcheReturnKey() { 56886da342Sopenharmony_ci let arg = arguments[0]; 57886da342Sopenharmony_ci let regex = arguments[1]; 58886da342Sopenharmony_ci let stubSetKey = arguments[2]; 59886da342Sopenharmony_ci 60886da342Sopenharmony_ci if (stubSetKey && stubSetKey == this.ANY) { 61886da342Sopenharmony_ci return this.ANY; 62886da342Sopenharmony_ci } 63886da342Sopenharmony_ci 64886da342Sopenharmony_ci if (typeof arg === 'string' && !regex) { 65886da342Sopenharmony_ci return this.ANY_STRING; 66886da342Sopenharmony_ci } 67886da342Sopenharmony_ci 68886da342Sopenharmony_ci if (typeof arg === 'boolean' && !regex) { 69886da342Sopenharmony_ci return this.ANY_BOOLEAN; 70886da342Sopenharmony_ci } 71886da342Sopenharmony_ci 72886da342Sopenharmony_ci if (typeof arg === 'number' && !regex) { 73886da342Sopenharmony_ci return this.ANY_NUMBER; 74886da342Sopenharmony_ci } 75886da342Sopenharmony_ci 76886da342Sopenharmony_ci if (typeof arg === 'object' && !regex) { 77886da342Sopenharmony_ci return this.ANY_OBJECT; 78886da342Sopenharmony_ci } 79886da342Sopenharmony_ci 80886da342Sopenharmony_ci if (typeof arg === 'function' && !regex) { 81886da342Sopenharmony_ci return this.ANY_FUNCTION; 82886da342Sopenharmony_ci } 83886da342Sopenharmony_ci 84886da342Sopenharmony_ci if (typeof arg === 'string' && regex) { 85886da342Sopenharmony_ci return regex.test(arg); 86886da342Sopenharmony_ci } 87886da342Sopenharmony_ci 88886da342Sopenharmony_ci return null; 89886da342Sopenharmony_ci } 90886da342Sopenharmony_ci 91886da342Sopenharmony_ci matcheStubKey() { 92886da342Sopenharmony_ci let key = arguments[0]; 93886da342Sopenharmony_ci 94886da342Sopenharmony_ci if (key === ArgumentMatchers.any) { 95886da342Sopenharmony_ci return this.ANY; 96886da342Sopenharmony_ci } 97886da342Sopenharmony_ci 98886da342Sopenharmony_ci if (key === ArgumentMatchers.anyString) { 99886da342Sopenharmony_ci return this.ANY_STRING; 100886da342Sopenharmony_ci } 101886da342Sopenharmony_ci if (key === ArgumentMatchers.anyBoolean) { 102886da342Sopenharmony_ci return this.ANY_BOOLEAN; 103886da342Sopenharmony_ci } 104886da342Sopenharmony_ci if (key === ArgumentMatchers.anyNumber) { 105886da342Sopenharmony_ci return this.ANY_NUMBER; 106886da342Sopenharmony_ci } 107886da342Sopenharmony_ci if (key === ArgumentMatchers.anyObj) { 108886da342Sopenharmony_ci return this.ANY_OBJECT; 109886da342Sopenharmony_ci } 110886da342Sopenharmony_ci if (key === ArgumentMatchers.anyFunction) { 111886da342Sopenharmony_ci return this.ANY_FUNCTION; 112886da342Sopenharmony_ci } 113886da342Sopenharmony_ci 114886da342Sopenharmony_ci if (ArgumentMatchers.isRegExp(key)) { 115886da342Sopenharmony_ci return key; 116886da342Sopenharmony_ci } 117886da342Sopenharmony_ci 118886da342Sopenharmony_ci return null; 119886da342Sopenharmony_ci } 120886da342Sopenharmony_ci} 121886da342Sopenharmony_ci 122886da342Sopenharmony_ciexport default ArgumentMatchers;