1# Copyright (c) 2019 Google LLC
2#
3# Licensed under the Apache License, Version 2.0 (the "License");
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at
6#
7#     http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12# See the License for the specific language governing permissions and
13# limitations under the License.
14"""Tests for the spirv test framework module."""
15
16from spirv_test_framework import get_all_test_methods, get_all_superclasses
17import unittest
18
19# Classes to be used in testing get_all_{superclasses|test_methods}()
20
21
22class Root:
23
24    def check_root(self):
25        pass
26
27
28class A(Root):
29
30    def check_a(self):
31        pass
32
33
34class B(Root):
35
36    def check_b(self):
37        pass
38
39
40class C(Root):
41
42    def check_c(self):
43        pass
44
45
46class D(Root):
47
48    def check_d(self):
49        pass
50
51
52class E(Root):
53
54    def check_e(self):
55        pass
56
57
58class H(B, C, D):
59
60    def check_h(self):
61        pass
62
63
64class I(E):
65
66    def check_i(self):
67        pass
68
69
70class O(H, I):
71
72    def check_o(self):
73        pass
74
75
76class U(A, O):
77
78    def check_u(self):
79        pass
80
81
82class X(U, A):
83
84    def check_x(self):
85        pass
86
87
88class R1:
89
90    def check_r1(self):
91        pass
92
93
94class R2:
95
96    def check_r2(self):
97        pass
98
99
100class Multi(R1, R2):
101
102    def check_multi(self):
103        pass
104
105
106class TestSpirvTestFramework(unittest.TestCase):
107    def test_get_all_superclasses(self):
108        self.assertEqual(get_all_superclasses(A), [Root])
109        self.assertEqual(get_all_superclasses(B), [Root])
110        self.assertEqual(get_all_superclasses(C), [Root])
111        self.assertEqual(get_all_superclasses(D), [Root])
112        self.assertEqual(get_all_superclasses(E), [Root])
113
114        self.assertEqual(get_all_superclasses(H), [Root, B, C, D])
115        self.assertEqual(get_all_superclasses(I), [Root, E])
116
117        self.assertEqual(get_all_superclasses(O), [Root, B, C, D, E, H, I])
118
119        self.assertEqual(get_all_superclasses(
120            U), [Root, B, C, D, E, H, I, A, O])
121        self.assertEqual(get_all_superclasses(
122            X), [Root, B, C, D, E, H, I, A, O, U])
123
124        self.assertEqual(get_all_superclasses(Multi), [R1, R2])
125
126    def test_get_all_methods(self):
127        self.assertEqual(get_all_test_methods(A), ['check_root', 'check_a'])
128        self.assertEqual(get_all_test_methods(B), ['check_root', 'check_b'])
129        self.assertEqual(get_all_test_methods(C), ['check_root', 'check_c'])
130        self.assertEqual(get_all_test_methods(D), ['check_root', 'check_d'])
131        self.assertEqual(get_all_test_methods(E), ['check_root', 'check_e'])
132
133        self.assertEqual(
134            get_all_test_methods(H),
135            ['check_root', 'check_b', 'check_c', 'check_d', 'check_h'])
136        self.assertEqual(get_all_test_methods(
137            I), ['check_root', 'check_e', 'check_i'])
138
139        self.assertEqual(
140            get_all_test_methods(O), [
141                'check_root', 'check_b', 'check_c', 'check_d', 'check_e', 'check_h',
142                'check_i', 'check_o'
143            ])
144
145        self.assertEqual(
146            get_all_test_methods(U), [
147                'check_root', 'check_b', 'check_c', 'check_d', 'check_e', 'check_h',
148                'check_i', 'check_a', 'check_o', 'check_u'
149            ])
150
151        self.assertEqual(
152            get_all_test_methods(X), [
153                'check_root', 'check_b', 'check_c', 'check_d', 'check_e', 'check_h',
154                'check_i', 'check_a', 'check_o', 'check_u', 'check_x'
155            ])
156
157        self.assertEqual(
158            get_all_test_methods(Multi), ['check_r1', 'check_r2', 'check_multi'])
159