Skip to content

Commit 7721738

Browse files
committed
Use static list of keywords when RSL is not connected
1 parent 8e27bf4 commit 7721738

File tree

3 files changed

+105
-6
lines changed

3 files changed

+105
-6
lines changed

pom.xml

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,25 @@
232232
</execution>
233233
</executions>
234234
</plugin>
235+
<plugin>
236+
<groupId>org.codehaus.mojo</groupId>
237+
<artifactId>exec-maven-plugin</artifactId>
238+
<version>1.1.1</version>
239+
<executions>
240+
<execution>
241+
<phase>compile</phase>
242+
<goals>
243+
<goal>java</goal>
244+
</goals>
245+
<configuration>
246+
<mainClass>org.robotframework.remoteswinglibrary.build.SwingLibraryKeywords</mainClass>
247+
<arguments>
248+
<argument>target/classes/swinglibrary.py</argument>
249+
</arguments>
250+
</configuration>
251+
</execution>
252+
</executions>
253+
</plugin>
235254
</plugins>
236255
<resources>
237256
<resource>
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package org.robotframework.remoteswinglibrary.build;
2+
3+
import org.robotframework.javalib.library.AnnotationLibrary;
4+
5+
import java.io.BufferedWriter;
6+
import java.io.File;
7+
import java.io.FileWriter;
8+
import java.util.Arrays;
9+
10+
/**
11+
* Created by wojtek on 16/05/16.
12+
*/
13+
public class SwingLibraryKeywords {
14+
private final AnnotationLibrary annotationLibrary = new AnnotationLibrary(
15+
"org/robotframework/swing/keyword/**/*.class");
16+
17+
public static void main(String[] args) {
18+
SwingLibraryKeywords swingLibraryKeywords = new SwingLibraryKeywords();
19+
swingLibraryKeywords.Genarate(args[0]);
20+
}
21+
22+
public void Genarate(String target) {
23+
try {
24+
System.out.println("Generating keywords list...");
25+
26+
String[] keywords = annotationLibrary.getKeywordNames();
27+
Arrays.sort(keywords);
28+
File outFile = new File(target);
29+
System.out.println("target: " + outFile.getCanonicalPath());
30+
31+
BufferedWriter writer = new BufferedWriter(new FileWriter(outFile));
32+
writer.write("'''\nThis file is generated automatically and should not be edited.\n'''\n");
33+
34+
writer.write("keywords = [");
35+
for (int i = 0; i < keywords.length; i++)
36+
writer.write("'" + keywords[i] + "', ");
37+
writer.write("]\n");
38+
39+
writer.write("keyword_arguments = {");
40+
for (int i = 0; i < keywords.length; i++) {
41+
writer.write("'" + keywords[i] + "': ");
42+
String[] args = annotationLibrary.getKeywordArguments(keywords[i]);
43+
writer.write("[");
44+
for (int j = 0; j < args.length; j++)
45+
writer.write("'" + args[j] + "', ");
46+
writer.write("],\n");
47+
}
48+
writer.write("}\n");
49+
50+
writer.write("keyword_documentation = {");
51+
for (int i = 0; i < keywords.length; i++) {
52+
writer.write("'" + keywords[i] + "': ");
53+
String docs = annotationLibrary.getKeywordDocumentation(keywords[i]);
54+
docs = docs.replace("\n", "\\n");
55+
docs = docs.replace("'", "\\n");
56+
writer.write("'" + docs + "',\n");
57+
}
58+
writer.write("}\n");
59+
writer.close();
60+
61+
System.out.println("Keyword list written successfully");
62+
63+
}
64+
catch (Exception e) {
65+
e.printStackTrace();
66+
}
67+
68+
}
69+
}

src/main/python/RemoteSwingLibrary.py

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@
2020
import threading
2121
import time
2222
import traceback
23+
24+
import swinglibrary
25+
2326
IS_PYTHON3 = sys.version_info[0] >= 3
2427
if IS_PYTHON3:
2528
import socketserver as SocketServer
@@ -534,19 +537,22 @@ def get_keyword_names(self):
534537
# to do it we find minimal n which satisfies ((n)*(n-1))/2 >= TIMEOUT
535538
# solution is ceil(sqrt(TIMEOUT*2*4+1)/2+0.5)
536539
attempts = int(math.ceil(math.sqrt(RemoteSwingLibrary.TIMEOUT*2*4+1)/2+0.5))
540+
overrided_keywords = ['startApplication',
541+
'launchApplication',
542+
'startApplicationInSeparateThread']
537543
if self.current:
538544
return RemoteSwingLibrary.KEYWORDS + [kw for
539545
kw in self.current.get_keyword_names(attempts=attempts)
540-
if kw not in ['startApplication',
541-
'launchApplication',
542-
'startApplicationInSeparateThread']]
543-
return RemoteSwingLibrary.KEYWORDS
546+
if kw not in overrided_keywords]
547+
return RemoteSwingLibrary.KEYWORDS + [kw for kw in swinglibrary.keywords
548+
if kw not in overrided_keywords]
544549

545550
def get_keyword_arguments(self, name):
546551
if name in RemoteSwingLibrary.KEYWORDS:
547552
return self._get_args(name)
548553
if self.current:
549554
return self.current.get_keyword_arguments(name)
555+
return swinglibrary.keyword_arguments[name]
550556

551557
def _get_args(self, method_name):
552558
spec = inspect.getargspec(getattr(self, method_name))
@@ -565,9 +571,14 @@ def get_keyword_documentation(self, name):
565571
return RemoteSwingLibrary.__doc__
566572
if name in RemoteSwingLibrary.KEYWORDS or name == '__init__':
567573
return getattr(self, name).__doc__
568-
return self.current.get_keyword_documentation(name)
574+
if self.current:
575+
return self.current.get_keyword_documentation(name)
576+
return swinglibrary.keyword_documentation[name]
569577

570578
def run_keyword(self, name, arguments, kwargs):
571579
if name in RemoteSwingLibrary.KEYWORDS:
572580
return getattr(self, name)(*arguments, **kwargs)
573-
return self.current.run_keyword(name, arguments, kwargs)
581+
if self.current:
582+
return self.current.run_keyword(name, arguments, kwargs)
583+
if name in swinglibrary.keywords:
584+
raise Exception("To use this keyword you need to connect to application first.")

0 commit comments

Comments
 (0)