1
2
3
4
5 package com.tomgibara.pronto.state;
6
7 import java.util.Arrays;
8 import java.util.HashSet;
9 import java.util.LinkedList;
10 import java.util.List;
11 import java.util.Set;
12 import java.util.regex.Matcher;
13 import java.util.regex.Pattern;
14
15 import com.tomgibara.pronto.state.impl.StateTransitionImpl;
16 import com.tomgibara.pronto.util.Objects;
17
18 public class TestUtil {
19
20 private static Pattern pattern = Pattern.compile("([^-]*)(\\-\\>|\\-(\\d+)\\-\\>)([^-]*)");
21
22 static StateGraph<String, Integer> makeGraph(String str) {
23 StateGraphEditor<String, Integer> editor = StateFactory.getInstance().<String, Integer> emptyStateGraph()
24 .newEditor();
25 Set<Object> set = mixedSet(str);
26 for (Object object : set) {
27 if (object instanceof String) editor.addState((String) object);
28 else if (object instanceof StateTransition) editor.addTransition((StateTransition<String, Integer>) object);
29 else throw new IllegalArgumentException(Objects.toString(object));
30 }
31 return editor.getGraph();
32 }
33
34 static StateTransition<String, Integer> transition(String str) {
35 Matcher matcher = pattern.matcher(str);
36 if (!matcher.matches()) throw new IllegalArgumentException(str);
37 final String from = matcher.group(1);
38 final Integer i = matcher.group(3) == null ? 0 : new Integer(matcher.group(3));
39 final String to = matcher.group(4);
40 return new StateTransitionImpl<String, Integer>(from, i, to);
41 }
42
43 static Set<StateTransition<String, Integer>> transitionSet(String str) {
44 HashSet<StateTransition<String, Integer>> set = new HashSet<StateTransition<String, Integer>>();
45 if (str.length() > 0) {
46 String[] strings = str.split("\\s*;\\s*");
47 for (String string : strings) {
48 set.add(transition(string));
49 }
50 }
51 return set;
52 }
53
54 static Set<Object> mixedSet(String str) {
55 HashSet<Object> set = new HashSet<Object>();
56 if (str.length() > 0) {
57 String[] strings = str.split("\\s*;\\s*");
58 for (String string : strings) {
59 Object object;
60 try {
61 object = transition(string);
62 } catch (IllegalArgumentException e) {
63 object = string;
64 }
65 set.add(object);
66 }
67 }
68 return set;
69 }
70
71 static List<StateTransition<String, Integer>> transitionList(String str) {
72 LinkedList<StateTransition<String, Integer>> list = new LinkedList<StateTransition<String, Integer>>();
73 if (str.length() > 0) {
74 String[] strings = str.split("\\s*;\\s*");
75 for (String string : strings) {
76 list.add(transition(string));
77 }
78 }
79 return list;
80 }
81
82 static Set<String> stateSet(String str) {
83 String[] strings = str.split("\\s*;\\s*");
84 HashSet<String> set = new HashSet<String>();
85 set.addAll(Arrays.asList(strings));
86 return set;
87 }
88
89 static Set<Integer> labelSet(String str) {
90 String[] strings = str.split("\\s*;\\s*");
91 HashSet<Integer> set = new HashSet<Integer>();
92 for (String string : strings)
93 set.add(new Integer(string));
94 return set;
95 }
96
97 static StateEngine<String, Integer, Object> makeEngine(StateGraph<String, Integer> graph, StateActivator<String, Integer, Object> activator) {
98 return StateFactory.getInstance().<String, Integer, Object>newEngine(graph, activator);
99 }
100
101 }