avoid as much as possible accessing logger through class instances, whenever that...
[sfa.git] / sfa / client / candidates.py
index 77eef7d..c36e199 100644 (file)
@@ -1,15 +1,64 @@
-### utility to match command-line args to names
+from __future__ import print_function
+
+# utility to match command-line args to names
+
+
 class Candidates:
-    def __init__ (self, names):
-        self.names=names
+
+    def __init__(self, names):
+        self.names = names
     # is an input string acceptable for one of the known names?
+
     @staticmethod
-    def fits (input, name):
-        return name.find(input)==0
+    def fits(input, name):
+        return name.find(input) == 0
     # returns one of the names if the input name has a unique match
     # or None otherwise
-    def only_match (self, input):
-        matches=[ name for name in self.names if Candidates.fits(input,name) ]
-        if len(matches)==1: return matches[0]
-        else: return None
 
+    def only_match(self, input):
+        if input in self.names:
+            return input
+        matches = [name for name in self.names if Candidates.fits(input, name)]
+        if len(matches) == 1:
+            return matches[0]
+        else:
+            return None
+
+# minimal test
+candidates_specs = [
+    ('create delete reset resources slices start status stop version create_gid',
+     [('ver', 'version'),
+      ('r', None),
+         ('re', None),
+         ('res', None),
+         ('rese', 'reset'),
+         ('reset', 'reset'),
+         ('reso', 'resources'),
+         ('sli', 'slices'),
+         ('st', None),
+         ('sta', None),
+         ('stop', 'stop'),
+         ('a', None),
+         ('cre', None),
+         ('create', 'create'),
+         ('create_', 'create_gid'),
+         ('create_g', 'create_gid'),
+         ('create_gi', 'create_gid'),
+         ('create_gid', 'create_gid'),
+      ])
+]
+
+
+def test_candidates():
+    for (names, tuples) in candidates_specs:
+        names = names.split()
+        for (input, expected) in tuples:
+            got = Candidates(names).only_match(input)
+            if got == expected:
+                print('.', end=' ')
+            else:
+                print('X FAIL', 'names[', names, '] input',
+                      input, 'expected', expected, 'got', got)
+
+if __name__ == '__main__':
+    test_candidates()