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