def test_hash_same(test_case_mock, variable_reference_mock, field_mock):
    statement = fstmt.FieldStatement(
        test_case_mock, field_mock, variable_reference_mock
    )
    statement2 = fstmt.FieldStatement(
        test_case_mock, field_mock, variable_reference_mock
    )
    assert hash(statement) == hash(statement2)
示例#2
0
def test_statement_to_ast_field(
    statement_to_ast_visitor, test_case_mock, field_mock, variable_reference_mock
):
    f_stmt = field_stmt.FieldStatement(
        test_case_mock, field_mock, variable_reference_mock
    )
    statement_to_ast_visitor.visit_field_statement(f_stmt)
def test_field_statement_eq_other_type(
    test_case_mock, variable_reference_mock, field_mock
):
    statement = fstmt.FieldStatement(
        test_case_mock, field_mock, variable_reference_mock
    )
    assert not statement.__eq__(variable_reference_mock)
def test_primitive_statement_replace_ignore(field_mock):
    test_case = dtc.DefaultTestCase()
    ref = prim.IntPrimitiveStatement(test_case, 5)
    statement = fstmt.FieldStatement(test_case, field_mock, ref.return_value)
    new = prim.FloatPrimitiveStatement(test_case, 0).return_value
    old = statement.source
    statement.replace(new, new)
    assert statement.source == old
def test_mutate_no_replacements(field_mock, constructor_mock):
    config.INSTANCE.change_parameter_probability = 1.0
    test_case = dtc.DefaultTestCase()
    const = ps.ConstructorStatement(test_case, constructor_mock)
    field = fstmt.FieldStatement(test_case, field_mock, const.return_value)
    test_case.add_statement(const)
    test_case.add_statement(field)
    assert not field.mutate()
示例#6
0
def test_constructor_statement_accept(test_case_mock, variable_reference_mock,
                                      field_mock):
    statement = fstmt.FieldStatement(test_case_mock, field_mock,
                                     variable_reference_mock)
    visitor = MagicMock(sv.StatementVisitor)
    statement.accept(visitor)

    visitor.visit_field_statement.assert_called_once_with(statement)
def test_primitive_statement_replace(field_mock):
    test_case = dtc.DefaultTestCase()
    ref = prim.IntPrimitiveStatement(test_case, 5)
    test_case.add_statement(ref)
    statement = fstmt.FieldStatement(test_case, field_mock, ref.return_value)
    test_case.add_statement(statement)
    new = vri.VariableReferenceImpl(test_case, int)

    statement.replace(ref.return_value, new)
    assert statement.source == new
示例#8
0
def test_field_statement_eq_clone(field_mock):
    test_case1 = dtc.DefaultTestCase()
    test_case1.add_statement(prim.IntPrimitiveStatement(test_case1, 0))
    test_case2 = dtc.DefaultTestCase()
    test_case2.add_statement(prim.IntPrimitiveStatement(test_case2, 0))

    statement = fstmt.FieldStatement(test_case1, field_mock,
                                     test_case1.statements[0].ret_val)
    test_case1.add_statement(statement)
    clone = statement.clone(test_case2)
    test_case2.add_statement(clone)
    assert statement.__eq__(clone)
def test_mutate_success(field_mock, constructor_mock):
    config.INSTANCE.change_parameter_probability = 1.0
    test_case = dtc.DefaultTestCase()
    const = ps.ConstructorStatement(test_case, constructor_mock)
    const2 = ps.ConstructorStatement(test_case, constructor_mock)
    field = fstmt.FieldStatement(test_case, field_mock, const.return_value)
    const3 = ps.ConstructorStatement(test_case, constructor_mock)
    test_case.add_statement(const)
    test_case.add_statement(const2)
    test_case.add_statement(field)
    test_case.add_statement(const3)
    assert field.mutate()
    assert field.source == const2.return_value
示例#10
0
    def add_field(
        self,
        test_case: tc.TestCase,
        field: gao.GenericField,
        position: int = -1,
        recursion_depth: int = 0,
        callee: Optional[vr.VariableReference] = None,
    ) -> vr.VariableReference:
        """Adds a field access to a test case at a given position.

        If the position is not given, the field access will be appended to the end of
        the test case.  A given recursion depth controls how far the factory searches
        for suitable parameter values.

        Args:
            test_case: The test case
            field: The field access to add to the test case
            position: The position where to put the statement in the test case,
                defaults to the end of the test case
            recursion_depth: A recursion limit for the search of values
            callee: The callee, if it is already known.

        Returns:
            A variable reference to the field value

        Raises:
            ConstructionFailedException: if construction of an object failed
        """
        self._logger.debug("Adding field %s", field)
        if recursion_depth > config.INSTANCE.max_recursion:
            self._logger.debug("Max recursion depth reached")
            raise ConstructionFailedException("Max recursion depth reached")

        if position < 0:
            position = test_case.size()

        length = test_case.size()
        if callee is None:
            callee = self._create_or_reuse_variable(test_case,
                                                    field.owner,
                                                    position,
                                                    recursion_depth,
                                                    allow_none=False)
        assert callee, "The callee must not be None"
        position = position + test_case.size() - length
        statement = f_stmt.FieldStatement(test_case, field, callee)
        return test_case.add_statement(statement, position)
示例#11
0
def test_get_var_references(test_case_mock, variable_reference_mock, field_mock):
    statement = fstmt.FieldStatement(
        test_case_mock, field_mock, variable_reference_mock
    )
    assert statement.get_variable_references() == {variable_reference_mock}
示例#12
0
def test_field_statement_eq_same(test_case_mock, variable_reference_mock, field_mock):
    statement = fstmt.FieldStatement(
        test_case_mock, field_mock, variable_reference_mock
    )
    assert statement.__eq__(statement)
示例#13
0
def test_accessible_object(test_case_mock, variable_reference_mock, field_mock):
    stmt = fstmt.FieldStatement(test_case_mock, field_mock, variable_reference_mock)
    assert stmt.accessible_object() == field_mock
示例#14
0
def test_new_source(test_case_mock, variable_reference_mock, field_mock):
    stmt = fstmt.FieldStatement(test_case_mock, field_mock, variable_reference_mock)
    new_source = MagicMock(vr.VariableReference)
    stmt.source = new_source
    assert stmt.source == new_source
示例#15
0
def test_field_statement(test_case_mock, variable_reference_mock, field_mock):
    field_statement = fstmt.FieldStatement(
        test_case_mock, field_mock, variable_reference_mock
    )
    assert field_statement.field == field_mock
示例#16
0
def test_mutate_not(test_case_mock, field_mock, variable_reference_mock):
    config.INSTANCE.change_parameter_probability = 0.0
    statement = fstmt.FieldStatement(
        test_case_mock, field_mock, variable_reference_mock
    )
    assert not statement.mutate()