def test_no_hashability_filter(): # In from_type, we ordinarily protect users from really weird cases like # `Decimal('snan')` - a unhashable value of a hashable type - but in the # ghostwriter we instead want to present this to the user for an explicit # decision. They can pass `allow_nan=False`, fix their custom type's # hashing logic, or whatever else; simply doing nothing will usually work. source_code = ghostwriter.fuzz(hopefully_hashable) assert "@given(foo=st.sets(st.decimals()))" in source_code assert "_can_hash" not in source_code
def test_no_hashability_filter(): # In from_type, we ordinarily protect users from really weird cases like # `Decimal('snan')` - a unhashable value of a hashable type - but in the # ghostwriter we instead want to present this to the user for an explicit # decision. They can pass `allow_nan=False`, fix their custom type's # hashing logic, or whatever else; simply doing nothing will usually work. source_code = ghostwriter.fuzz(hopefully_hashable) assert "_can_hash" not in source_code test = get_test_function(source_code) with pytest.raises(TypeError, match="[Cc]annot hash a signaling NaN"): test()
def test_inference_from_defaults_and_none_booleans_reprs_not_just_and_sampled_from(): source_code = ghostwriter.fuzz(no_annotations) assert "@given(foo=st.none(), bar=st.booleans())" in source_code
def test_ghostwriter_fuzz(func, ex): source_code = ghostwriter.fuzz(func, except_=ex) get_test_function(source_code)
def test_ghostwriter_exploits_arguments_with_enum_defaults(): source_code = ghostwriter.fuzz(takes_enum) test = get_test_function(source_code) with pytest.raises(AssertionError): test()