File tree Expand file tree Collapse file tree 2 files changed +65
-0
lines changed
Expand file tree Collapse file tree 2 files changed +65
-0
lines changed Original file line number Diff line number Diff line change 1+ import inspect
2+ import re
3+ from typing import Set , Text , Type
4+
5+ from axelrod .player import Player
6+
7+
8+ def makes_use_of (player : Type [Player ]) -> Set [Text ]:
9+ result = set ()
10+ for method in inspect .getmembers (player , inspect .ismethod ):
11+ if method [0 ] == "__init__" :
12+ continue
13+ method_code = inspect .getsource (method [1 ])
14+ attr_string = r"self.match_attributes\[\"(\w+)\"\]"
15+ all_attrs = re .findall (attr_string , method_code )
16+ for attr in all_attrs :
17+ result .add (attr )
18+ return result
Original file line number Diff line number Diff line change 1+ """Tests for makes_use_of."""
2+
3+ import unittest
4+
5+ import axelrod as axl
6+ from axelrod .makes_use_of import makes_use_of
7+
8+
9+ class TestMakesUseOfLengthAndGamePlayer (axl .Player ):
10+ """
11+ Should have some function that uses length
12+ """
13+
14+ def first_function (self ): # pragma: no cover
15+ x = 1 + 2
16+ x * 5
17+
18+ def second_function (self ): # pragma: no cover
19+ # We put this in the second function to make sure both are checked.
20+ x = 1 + self .match_attributes ["length" ]
21+
22+ # Should only add once.
23+ y = 2 + self .match_attributes ["length" ]
24+
25+ # Should also add game.
26+ self .match_attributes ["game" ]
27+
28+
29+ class TestMakesUseOfNothingPlayer (axl .Player ):
30+ """
31+ Doesn't use match_attributes
32+ """
33+
34+ def only_function (self ): # pragma: no cover
35+ 1 + 2 + 3
36+ print ("=6" )
37+
38+
39+ class TestMakesUseOf (unittest .TestCase ):
40+ def test_makes_use_of_length_and_game (self ):
41+ self .assertEqual (
42+ makes_use_of (TestMakesUseOfLengthAndGamePlayer ()),
43+ {"length" , "game" },
44+ )
45+
46+ def test_makes_use_of_empty (self ):
47+ self .assertEqual (makes_use_of (TestMakesUseOfNothingPlayer ()), set ())
You can’t perform that action at this time.
0 commit comments