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;