-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathunittesttools.py
120 lines (110 loc) · 3.46 KB
/
unittesttools.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
# Copyright 2018-19 Quantcast Corporation. All rights reserved.
#
# This file is part of Quantcast Apex Linter for Salesforce
#
# Licensed under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
# implied. See the License for the specific language governing
# permissions and limitations under the License.
#
import os
import pathlib
import textwrap
import unittest
from typing import Iterable, Optional, Type, Union
from . import base, match, terminfo
class PathLikeTestCase(unittest.TestCase):
"""Provide additional asserts for `PathLike` representations. `"""
@staticmethod
def _normalize_path(
path: Union[os.PathLike, str],
*,
start: Optional[Union[os.PathLike, str]],
):
if start:
path = os.path.relpath(path, start=start)
if not isinstance(path, os.PathLike):
path = pathlib.Path(path)
return path
def assertSamePath(
self,
first: os.PathLike,
second: os.PathLike,
msg: Optional[str] = None,
*,
start: Optional[os.PathLike] = None,
):
first, second = (
self._normalize_path(p, start=start) for p in (first, second)
)
self.assertEqual(first, second, msg=msg)
def assertSamePaths(
self,
first: Iterable[os.PathLike],
second: Iterable[os.PathLike],
msg: Optional[str] = None,
*,
start: Optional[os.PathLike] = None,
):
first, second = (
[self._normalize_path(p, start=start) for p in paths]
for paths in (first, second)
)
self.assertEqual(first, second, msg=msg)
class ValidatorTestCase(unittest.TestCase):
"""Provide additional asserts for `Validator`` class."""
def assertMatchFiles(
self,
*,
validator: Type[base.Validator],
paths: Iterable[pathlib.Path],
expected: Iterable[str],
msg: str = None,
term: Optional[Type[terminfo.TermInfo]] = None,
verbose: int = 0,
):
self.assertEqual(
[
str(m)
for m in match.render(
paths=paths,
term=term,
validators=(validator,),
verbose=verbose,
)
],
[textwrap.dedent(e).rstrip("\n") for e in expected],
msg=msg,
)
def assertMatchLines(
self,
*,
validator: Type[base.Validator],
contents: str,
expected: Iterable[str],
msg: str = None,
path: pathlib.Path = pathlib.Path("Foo.cls"),
suppress: bool = True,
term: Optional[Type[terminfo.TermInfo]] = None,
verbose: int = 0,
):
self.assertEqual(
[
e.render(term=term, verbose=verbose)
for e in match.lines(
contents.splitlines(),
path=path,
suppress=suppress,
validators=(validator,),
)
],
[textwrap.dedent(e).rstrip("\n") for e in expected],
msg=msg,
)