xref: /aosp_15_r20/external/bazelbuild-rules_testing/lib/private/bool_subject.bzl (revision d605057434dcabba796c020773aab68d9790ff9f)
1*d6050574SRomain Jobredeaux# Copyright 2023 The Bazel Authors. All rights reserved.
2*d6050574SRomain Jobredeaux#
3*d6050574SRomain Jobredeaux# Licensed under the Apache License, Version 2.0 (the "License");
4*d6050574SRomain Jobredeaux# you may not use this file except in compliance with the License.
5*d6050574SRomain Jobredeaux# You may obtain a copy of the License at
6*d6050574SRomain Jobredeaux#
7*d6050574SRomain Jobredeaux#     http://www.apache.org/licenses/LICENSE-2.0
8*d6050574SRomain Jobredeaux#
9*d6050574SRomain Jobredeaux# Unless required by applicable law or agreed to in writing, software
10*d6050574SRomain Jobredeaux# distributed under the License is distributed on an "AS IS" BASIS,
11*d6050574SRomain Jobredeaux# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*d6050574SRomain Jobredeaux# See the License for the specific language governing permissions and
13*d6050574SRomain Jobredeaux# limitations under the License.
14*d6050574SRomain Jobredeaux
15*d6050574SRomain Jobredeaux"""# BoolSubject"""
16*d6050574SRomain Jobredeaux
17*d6050574SRomain Jobredeauxload(":check_util.bzl", "check_not_equals", "common_subject_is_in")
18*d6050574SRomain Jobredeaux
19*d6050574SRomain Jobredeauxdef _bool_subject_new(value, meta):
20*d6050574SRomain Jobredeaux    """Creates a "BoolSubject" struct.
21*d6050574SRomain Jobredeaux
22*d6050574SRomain Jobredeaux    Method: BoolSubject.new
23*d6050574SRomain Jobredeaux
24*d6050574SRomain Jobredeaux    Args:
25*d6050574SRomain Jobredeaux        value: ([`bool`]) the value to assert against.
26*d6050574SRomain Jobredeaux        meta: ([`ExpectMeta`]) the metadata about the call chain.
27*d6050574SRomain Jobredeaux
28*d6050574SRomain Jobredeaux    Returns:
29*d6050574SRomain Jobredeaux        A [`BoolSubject`].
30*d6050574SRomain Jobredeaux    """
31*d6050574SRomain Jobredeaux    self = struct(actual = value, meta = meta)
32*d6050574SRomain Jobredeaux    public = struct(
33*d6050574SRomain Jobredeaux        # keep sorted start
34*d6050574SRomain Jobredeaux        equals = lambda *a, **k: _bool_subject_equals(self, *a, **k),
35*d6050574SRomain Jobredeaux        is_in = lambda *a, **k: common_subject_is_in(self, *a, **k),
36*d6050574SRomain Jobredeaux        not_equals = lambda *a, **k: _bool_subject_not_equals(self, *a, **k),
37*d6050574SRomain Jobredeaux        # keep sorted end
38*d6050574SRomain Jobredeaux    )
39*d6050574SRomain Jobredeaux    return public
40*d6050574SRomain Jobredeaux
41*d6050574SRomain Jobredeauxdef _bool_subject_equals(self, expected):
42*d6050574SRomain Jobredeaux    """Assert that the bool is equal to `expected`.
43*d6050574SRomain Jobredeaux
44*d6050574SRomain Jobredeaux    Method: BoolSubject.equals
45*d6050574SRomain Jobredeaux
46*d6050574SRomain Jobredeaux    Args:
47*d6050574SRomain Jobredeaux        self: implicitly added.
48*d6050574SRomain Jobredeaux        expected: ([`bool`]) the expected value.
49*d6050574SRomain Jobredeaux    """
50*d6050574SRomain Jobredeaux    if self.actual == expected:
51*d6050574SRomain Jobredeaux        return
52*d6050574SRomain Jobredeaux    self.meta.add_failure(
53*d6050574SRomain Jobredeaux        "expected: {}".format(expected),
54*d6050574SRomain Jobredeaux        "actual: {}".format(self.actual),
55*d6050574SRomain Jobredeaux    )
56*d6050574SRomain Jobredeaux
57*d6050574SRomain Jobredeauxdef _bool_subject_not_equals(self, unexpected):
58*d6050574SRomain Jobredeaux    """Assert that the bool is not equal to `unexpected`.
59*d6050574SRomain Jobredeaux
60*d6050574SRomain Jobredeaux    Method: BoolSubject.not_equals
61*d6050574SRomain Jobredeaux
62*d6050574SRomain Jobredeaux    Args:
63*d6050574SRomain Jobredeaux        self: implicitly added.
64*d6050574SRomain Jobredeaux        unexpected: ([`bool`]) the value actual cannot equal.
65*d6050574SRomain Jobredeaux    """
66*d6050574SRomain Jobredeaux    return check_not_equals(
67*d6050574SRomain Jobredeaux        actual = self.actual,
68*d6050574SRomain Jobredeaux        unexpected = unexpected,
69*d6050574SRomain Jobredeaux        meta = self.meta,
70*d6050574SRomain Jobredeaux    )
71*d6050574SRomain Jobredeaux
72*d6050574SRomain Jobredeaux# We use this name so it shows up nice in docs.
73*d6050574SRomain Jobredeaux# buildifier: disable=name-conventions
74*d6050574SRomain JobredeauxBoolSubject = struct(
75*d6050574SRomain Jobredeaux    new = _bool_subject_new,
76*d6050574SRomain Jobredeaux    equals = _bool_subject_equals,
77*d6050574SRomain Jobredeaux    not_equals = _bool_subject_not_equals,
78*d6050574SRomain Jobredeaux)
79