# Path: jasper/exceptions.py
# class ExpectationException(Exception):
#     """
#     An Exception that is thrown when an expectation fails in the Expect class.
#     """
#     def __init__(self, actual, expected, operator):
#         """
#         Initialize this ExpectationException object.
# 
#         :param actual: The actual data used during the expectation.
#         :param expected: The expected data used during the expectation.
#         :param operator: The operator used during the expectation.
#         """
#         super().__init__()
#         self.actual = actual
#         self.expected = expected
#         self.operator = operator
# 
#     def __str__(self):
#         return f'FAILURE: Expected {self.actual} {self.operator} {self.expected}'


from jasper.exceptions import ExpectationException
class Expect(object):
    """
    A class for making assertions on data.
    """
    def __init__(self, actual_data):
        """
        Initialize a new Expect object.

        :param actual_data: The actual data to make assertions against.
        """
        self.actual_data = actual_data
        self.negate = False

    def not_(self):
        """
        Negate any future expectations.

        :return: This Expect object.
        """
        self.negate = True
        return self

    def to_be(self, expected_data):
        """
        Make an assertion that this objects actual data is the expected data.

        :param expected_data: The data to expect the actual data to be.
        :raise ExpectationException: If the expectation fails.
        """
        if self.negate and self.actual_data is expected_data:

# Path: jasper/exceptions.py
# class ExpectationException(Exception):
#     """
#     An Exception that is thrown when an expectation fails in the Expect class.
#     """
#     def __init__(self, actual, expected, operator):
#         """
#         Initialize this ExpectationException object.
# 
#         :param actual: The actual data used during the expectation.
#         :param expected: The expected data used during the expectation.
#         :param operator: The operator used during the expectation.
#         """
#         super().__init__()
#         self.actual = actual
#         self.expected = expected
#         self.operator = operator
# 
#     def __str__(self):
#         return f'FAILURE: Expected {self.actual} {self.operator} {self.expected}'


# Path: jasper/expect.py
from jasper.exceptions import ExpectationException

class Expect(object):
    """
    A class for making assertions on data.
    """
    def __init__(self, actual_data):
        """
        Initialize a new Expect object.

        :param actual_data: The actual data to make assertions against.
        """
        self.actual_data = actual_data
        self.negate = False

    def not_(self):
        """
        Negate any future expectations.

        :return: This Expect object.
        """
        self.negate = True
        return self

    def to_be(self, expected_data):
        """
        Make an assertion that this objects actual data is the expected data.

        :param expected_data: The data to expect the actual data to be.
        :raise ExpectationException: If the expectation fails.
        """
        if self.negate and self.actual_data is expected_data:

            raise ExpectationException(self.actual_data, expected_data, 'not_to_be')