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}