Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove tester ref from assert_tx_failed() #446

Merged
merged 1 commit into from
Nov 12, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 16 additions & 16 deletions examples/stock/test_company.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ def tester():
return tester

@pytest.fixture
def assert_tx_failed(tester, function_to_test, exception = t.TransactionFailed):
def assert_tx_failed(function_to_test, exception = t.TransactionFailed):
initial_state = tester.s.snapshot()
with pytest.raises(exception):
function_to_test()
Expand All @@ -34,60 +34,60 @@ def test_overbuy(tester):
assert tester.c.stock_available() == 0
assert tester.c.get_holding(t.a1) == (test_shares * 2)
one_stock = tester.c.get_price()
assert_tx_failed(tester, lambda: tester.c.buy_stock(sender=t.k1, value=one_stock))
assert_tx_failed(tester, lambda: tester.c.buy_stock(sender=t.k2, value=one_stock))
assert_tx_failed(lambda: tester.c.buy_stock(sender=t.k1, value=one_stock))
assert_tx_failed(lambda: tester.c.buy_stock(sender=t.k2, value=one_stock))

def test_sell_without_stock(tester):
# If you don't have any stock, you can't sell
assert_tx_failed(tester, lambda: tester.c.sell_stock(1, sender=t.k1))
assert_tx_failed(tester, lambda: tester.c.sell_stock(1, sender=t.k2))
assert_tx_failed(lambda: tester.c.sell_stock(1, sender=t.k1))
assert_tx_failed(lambda: tester.c.sell_stock(1, sender=t.k2))
# Negative stock doesn't work either
assert_tx_failed(tester, lambda: tester.c.sell_stock(-1, sender=t.k1))
assert_tx_failed(lambda: tester.c.sell_stock(-1, sender=t.k1))
# But if you do, you can!
test_shares = int(tester.c.get_total_shares())
test_value = int(test_shares * tester.c.get_price())
tester.c.buy_stock(sender=t.k1, value=test_value)
assert tester.c.get_holding(t.a1) == test_shares
tester.c.sell_stock(test_shares, sender=t.k1)
# But only until you run out
assert_tx_failed(tester, lambda: tester.c.sell_stock(1, sender=t.k1))
assert_tx_failed(lambda: tester.c.sell_stock(1, sender=t.k1))

def test_oversell(tester):
# You can't sell more than you own
test_shares = int(tester.c.get_total_shares())
test_value = int(test_shares * tester.c.get_price())
tester.c.buy_stock(sender=t.k1, value=test_value)
assert_tx_failed(tester, lambda: tester.c.sell_stock(test_shares + 1, sender=t.k1))
assert_tx_failed(lambda: tester.c.sell_stock(test_shares + 1, sender=t.k1))

def test_transfer(tester):
# If you don't have any stock, you can't transfer
assert_tx_failed(tester, lambda: tester.c.transfer_stock(t.a2, 1, sender=t.k1))
assert_tx_failed(tester, lambda: tester.c.transfer_stock(t.a1, 1, sender=t.k2))
assert_tx_failed(lambda: tester.c.transfer_stock(t.a2, 1, sender=t.k1))
assert_tx_failed(lambda: tester.c.transfer_stock(t.a1, 1, sender=t.k2))
# You can't do negative transfers to gain stock
assert_tx_failed(tester, lambda: tester.c.transfer_stock(t.a2, -1, sender=t.k1))
assert_tx_failed(lambda: tester.c.transfer_stock(t.a2, -1, sender=t.k1))
# If you transfer, you don't have the stock anymore
test_shares = int(tester.c.get_total_shares())
test_value = int(test_shares * tester.c.get_price())
tester.c.buy_stock(sender=t.k1, value=test_value)
assert tester.c.get_holding(t.a1) == test_shares
tester.c.transfer_stock(t.a2, test_shares, sender=t.k1)
assert_tx_failed(tester, lambda: tester.c.sell_stock(1, sender=t.k1))
assert_tx_failed(lambda: tester.c.sell_stock(1, sender=t.k1))
# But the other person does
tester.c.sell_stock(test_shares, sender=t.k2)

def test_paybill(tester):
# Only the company can authorize payments
assert_tx_failed(tester, lambda: tester.c.pay_bill(t.a2, 1, sender=t.k1))
assert_tx_failed(lambda: tester.c.pay_bill(t.a2, 1, sender=t.k1))
# A company can only pay someone if it has the money
assert_tx_failed(tester, lambda: tester.c.pay_bill(t.a2, 1, sender=t.k0))
assert_tx_failed(lambda: tester.c.pay_bill(t.a2, 1, sender=t.k0))
# If it has the money, it can pay someone
test_value = int(tester.c.get_total_shares() * tester.c.get_price())
tester.c.buy_stock(sender=t.k1, value=test_value)
tester.c.pay_bill(t.a2, test_value, sender=t.k0)
# Until it runs out of money
assert_tx_failed(tester, lambda: tester.c.pay_bill(t.a3, 1, sender=t.k0))
assert_tx_failed(lambda: tester.c.pay_bill(t.a3, 1, sender=t.k0))
# Then no stockholders can sell their stock either
assert_tx_failed(tester, lambda: tester.c.sell_stock(1, sender=t.k1))
assert_tx_failed(lambda: tester.c.sell_stock(1, sender=t.k1))

def test_valuation(tester):
# Valuation is number of shares held times price
Expand Down
12 changes: 6 additions & 6 deletions tests/examples/auctions/test_simple_open_auction.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ def auction_tester():

@pytest.fixture
def assert_tx_failed():
def assert_tx_failed(tester, function_to_test, exception = tester.TransactionFailed):
def assert_tx_failed(function_to_test, exception = tester.TransactionFailed):
initial_state = tester.s.snapshot()
with pytest.raises(exception):
function_to_test()
Expand All @@ -41,14 +41,14 @@ def test_initial_state(auction_tester):

def test_bid(auction_tester, assert_tx_failed):
# Bidder cannot bid 0
assert_tx_failed(auction_tester, lambda: auction_tester.c.bid(value=0, sender=auction_tester.k1))
assert_tx_failed(lambda: auction_tester.c.bid(value=0, sender=auction_tester.k1))
# Bidder can bid
auction_tester.c.bid(value=1, sender=tester.k1)
# Check that higest bidder and highest bid have changed accordingly
assert utils.remove_0x_head(auction_tester.c.get_highest_bidder()) == auction_tester.accounts[1].hex()
assert auction_tester.c.get_highest_bid() == 1
# Bidder bid cannot equal current highest bid
assert_tx_failed(auction_tester, lambda: auction_tester.c.bid(value=1, sender=auction_tester.k1))
assert_tx_failed(lambda: auction_tester.c.bid(value=1, sender=auction_tester.k1))
# Higher bid can replace current highest bid
auction_tester.c.bid(value=2, sender=tester.k2)
# Check that higest bidder and highest bid have changed accordingly
Expand All @@ -71,7 +71,7 @@ def test_bid(auction_tester, assert_tx_failed):

def test_auction_end(auction_tester, assert_tx_failed):
# Fails if auction end time has not been reached
assert_tx_failed(auction_tester, lambda: auction_tester.c.auction_end())
assert_tx_failed(lambda: auction_tester.c.auction_end())
auction_tester.c.bid(value=1 * 10**10, sender=tester.k2)
# Move block timestamp foreward to reach auction end time
auction_tester.s.head_state.timestamp += FIVE_DAYS
Expand All @@ -81,6 +81,6 @@ def test_auction_end(auction_tester, assert_tx_failed):
# Beneficiary receives the highest bid
assert balance_after_end == balance_before_end + 1 * 10 ** 10
# Bidder cannot bid after auction end time has been reached
assert_tx_failed(auction_tester, lambda: auction_tester.c.bid(value=10, sender=auction_tester.k1))
assert_tx_failed(lambda: auction_tester.c.bid(value=10, sender=auction_tester.k1))
# Auction cannot be ended twice
assert_tx_failed(auction_tester, lambda: auction_tester.c.auction_end())
assert_tx_failed(lambda: auction_tester.c.auction_end())
16 changes: 8 additions & 8 deletions tests/examples/safe_remote_purchase/test_safe_remote_purchase.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ def check_balance(tester):
def test_initial_state(srp_tester, assert_tx_failed):
assert check_balance(srp_tester) == [INIT_BAL, INIT_BAL]
#Inital deposit has to be divisible by two
assert_tx_failed(srp_tester, lambda: srp_tester.s.contract(contract_code, language = "viper", args = [], value = 1))
assert_tx_failed(lambda: srp_tester.s.contract(contract_code, language = "viper", args = [], value = 1))
#Seller puts item up for sale
srp_tester.c = tester.s.contract(contract_code, language = "viper", args = [], value=2)
#Check that the seller is set correctly
Expand All @@ -48,20 +48,20 @@ def test_initial_state(srp_tester, assert_tx_failed):
def test_abort(srp_tester, assert_tx_failed):
srp_tester.c = srp_tester.s.contract(contract_code, language = "viper", args = [], value=2)
#Only sender can trigger refund
assert_tx_failed(srp_tester, lambda: srp_tester.c.abort(sender=srp_tester.k2))
assert_tx_failed(lambda: srp_tester.c.abort(sender=srp_tester.k2))
#Refund works correctly
srp_tester.c.abort(sender=srp_tester.k0)
assert check_balance(srp_tester) == [INIT_BAL, INIT_BAL]
#Purchase in process, no refund possible
srp_tester.c = srp_tester.s.contract(contract_code, language = "viper", args = [], value=2)
srp_tester.c.purchase(value=2, sender=srp_tester.k1)
assert_tx_failed(srp_tester, lambda: srp_tester.c.abort(sender=srp_tester.k0))
assert_tx_failed(lambda: srp_tester.c.abort(sender=srp_tester.k0))

def test_purchase(srp_tester, assert_tx_failed):
srp_tester.c = srp_tester.s.contract(contract_code, language = "viper", args = [], value=2)
#Purchase for too low/high price
assert_tx_failed(srp_tester, lambda: srp_tester.c.purchase(value=1, sender=srp_tester.k1))
assert_tx_failed(srp_tester, lambda: srp_tester.c.purchase(value=3, sender=srp_tester.k1))
assert_tx_failed(lambda: srp_tester.c.purchase(value=1, sender=srp_tester.k1))
assert_tx_failed(lambda: srp_tester.c.purchase(value=3, sender=srp_tester.k1))
#Purchase for the correct price
srp_tester.c.purchase(value=2, sender=srp_tester.k1)
#Check if buyer is set correctly
Expand All @@ -71,16 +71,16 @@ def test_purchase(srp_tester, assert_tx_failed):
#Check balances, both deposits should have been deducted
assert check_balance(srp_tester) == [INIT_BAL-2, INIT_BAL-2]
#Allow nobody else to purchase
assert_tx_failed(srp_tester, lambda: srp_tester.c.purchase(value=2, sender=srp_tester.k3))
assert_tx_failed(lambda: srp_tester.c.purchase(value=2, sender=srp_tester.k3))

def test_received(srp_tester, assert_tx_failed):
srp_tester.c = srp_tester.s.contract(contract_code, language = "viper", args = [], value=2)
#Can only be called after purchase
assert_tx_failed(srp_tester, lambda: srp_tester.c.received(sender=srp_tester.k1))
assert_tx_failed(lambda: srp_tester.c.received(sender=srp_tester.k1))
#Purchase completed
srp_tester.c.purchase(value=2, sender=srp_tester.k1)
#Check that e.g. sender cannot trigger received
assert_tx_failed(srp_tester, lambda: srp_tester.c.received(sender=srp_tester.k0))
assert_tx_failed(lambda: srp_tester.c.received(sender=srp_tester.k0))
#Check if buyer can call receive
srp_tester.c.received(sender=srp_tester.k1)
#Final check if everything worked. 1 value has been transferred
Expand Down
2 changes: 0 additions & 2 deletions tests/examples/tokens/test_vipercoin.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,6 @@ def test_transfer(token_tester, assert_tx_failed):

# Negative transfer value.
assert_tx_failed(
tester=token_tester,
function_to_test=lambda: tester.c.transfer(token_tester.accounts[1], -1),
exception=ValueOutOfBounds
)
Expand Down Expand Up @@ -92,7 +91,6 @@ def test_transferFrom(token_tester, assert_tx_failed):

# Negative transfer value.
assert_tx_failed(
tester=token_tester,
function_to_test=lambda: contract.transferFrom(a0, a2, -1, sender=k1),
exception=ValueOutOfBounds
)
Expand Down
8 changes: 4 additions & 4 deletions tests/examples/wallet/test_wallet.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,13 @@ def test_approve(assert_tx_failed):
to, value, data = b'\x35' * 20, 10**16, b""
assert x.approve(0, to, value, data, [sign(0, to, value, data, k) if k else [0, 0, 0] for k in (t.k1, 0, t.k3, 0, t.k5)], value=value, sender=t.k1)
# Approve fails if only 2 signatures are given
assert_tx_failed(t, lambda: x.approve(1, to, value, data, [sign(1, to, value, data, k) if k else [0, 0, 0] for k in (t.k1, 0, 0, 0, t.k5)], value=value, sender=t.k1))
assert_tx_failed(lambda: x.approve(1, to, value, data, [sign(1, to, value, data, k) if k else [0, 0, 0] for k in (t.k1, 0, 0, 0, t.k5)], value=value, sender=t.k1))
# Approve fails if an invalid signature is given
assert_tx_failed(t, lambda: x.approve(1, to, value, data, [sign(1, to, value, data, k) if k else [0, 0, 0] for k in (t.k1, 0, t.k7, 0, t.k5)], value=value, sender=t.k1))
assert_tx_failed(lambda: x.approve(1, to, value, data, [sign(1, to, value, data, k) if k else [0, 0, 0] for k in (t.k1, 0, t.k7, 0, t.k5)], value=value, sender=t.k1))
# Approve fails if transaction number is incorrect (the first argument should be 1)
assert_tx_failed(t, lambda: x.approve(0, to, value, data, [sign(0, to, value, data, k) if k else [0, 0, 0] for k in (t.k1, 0, t.k3, 0, t.k5)], value=value, sender=t.k1))
assert_tx_failed(lambda: x.approve(0, to, value, data, [sign(0, to, value, data, k) if k else [0, 0, 0] for k in (t.k1, 0, t.k3, 0, t.k5)], value=value, sender=t.k1))
# Approve fails if not enough value is sent
assert_tx_failed(t, lambda: x.approve(1, to, value, data, [sign(1, to, value, data, k) if k else [0, 0, 0] for k in (t.k1, 0, t.k3, 0, t.k5)], value=0, sender=t.k1))
assert_tx_failed(lambda: x.approve(1, to, value, data, [sign(1, to, value, data, k) if k else [0, 0, 0] for k in (t.k1, 0, t.k3, 0, t.k5)], value=0, sender=t.k1))
assert x.approve(1, to, value, data, [sign(1, to, value, data, k) if k else [0, 0, 0] for k in (t.k1, 0, t.k3, 0, t.k5)], value=value, sender=t.k1)
print("Basic tests passed")

Expand Down
20 changes: 10 additions & 10 deletions tests/parser/features/test_external_contract_calls.py
Original file line number Diff line number Diff line change
Expand Up @@ -225,8 +225,8 @@ def _expr(x: address) -> num:

c2._stmt(c1.address)
c2._expr(c1.address)
assert_tx_failed(t, lambda: c2._stmt(c2.address))
assert_tx_failed(t, lambda: c2._expr(c2.address))
assert_tx_failed(lambda: c2._stmt(c2.address))
assert_tx_failed(lambda: c2._expr(c2.address))


def test_invalid_nonexistent_contract_call(assert_tx_failed):
Expand All @@ -248,8 +248,8 @@ def foo(x: address) -> num:
t.s = s

assert c2.foo(c1.address) == 1
assert_tx_failed(t, lambda: c2.foo(t.a1))
assert_tx_failed(t, lambda: c2.foo(t.a7))
assert_tx_failed(lambda: c2.foo(t.a1))
assert_tx_failed(lambda: c2.foo(t.a7))


def test_invalid_contract_reference_declaration(assert_tx_failed):
Expand All @@ -263,7 +263,7 @@ def __init__():
pass
"""
t.s = t.Chain()
assert_tx_failed(t, lambda: get_contract(contract), exception = StructureException)
assert_tx_failed(lambda: get_contract(contract), exception = StructureException)


def test_invalid_contract_reference_call(assert_tx_failed):
Expand All @@ -272,7 +272,7 @@ def bar(arg1: address, arg2: num) -> num:
return Foo(arg1).foo(arg2)
"""
t.s = t.Chain()
assert_tx_failed(t, lambda: get_contract(contract), exception = VariableDeclarationException)
assert_tx_failed(lambda: get_contract(contract), exception = VariableDeclarationException)


def test_invalid_contract_reference_return_type(assert_tx_failed):
Expand All @@ -284,7 +284,7 @@ def bar(arg1: address, arg2: num) -> num:
return Foo(arg1).foo(arg2)
"""
t.s = t.Chain()
assert_tx_failed(t, lambda: get_contract(contract), exception = InvalidTypeException)
assert_tx_failed(lambda: get_contract(contract), exception = InvalidTypeException)


def test_external_contracts_must_be_declared_first_1(assert_tx_failed):
Expand All @@ -296,7 +296,7 @@ class Foo():
def foo(arg2: num) -> num: pass
"""
t.s = t.Chain()
assert_tx_failed(t, lambda: get_contract(contract), exception = StructureException)
assert_tx_failed(lambda: get_contract(contract), exception = StructureException)


def test_external_contracts_must_be_declared_first_2(assert_tx_failed):
Expand All @@ -308,7 +308,7 @@ class Foo():
def foo(arg2: num) -> num: pass
"""
t.s = t.Chain()
assert_tx_failed(t, lambda: get_contract(contract), exception = StructureException)
assert_tx_failed(lambda: get_contract(contract), exception = StructureException)


def test_external_contracts_must_be_declared_first_3(assert_tx_failed):
Expand All @@ -321,4 +321,4 @@ class Foo():
def foo(arg2: num) -> num: pass
"""
t.s = t.Chain()
assert_tx_failed(t, lambda: get_contract(contract), exception = StructureException)
assert_tx_failed(lambda: get_contract(contract), exception = StructureException)
Loading