Skip to content

Commit 9d95e18

Browse files
authored
Merge pull request #102 from lognaturel/add-intersects-simple
Add intersects handler
2 parents 2a95c8a + 9d60fb2 commit 9d95e18

6 files changed

Lines changed: 133 additions & 50 deletions

File tree

src/org/opendatakit/validate/FormValidator.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -493,6 +493,30 @@ public Object eval(Object[] args, EvaluationContext ec) {
493493
return args[0];
494494
}});
495495

496+
fd.getEvaluationContext().addFunctionHandler(new IFunctionHandler() {
497+
498+
public String getName() {
499+
return "intersects";
500+
}
501+
502+
public List<Class[]> getPrototypes() {
503+
return new ArrayList<>();
504+
}
505+
506+
public boolean rawArgs() {
507+
return true;
508+
}
509+
510+
public boolean realTime() {
511+
return false;
512+
}
513+
514+
public Object eval(Object[] args, EvaluationContext ec) {
515+
// stub for validation
516+
return true;
517+
}
518+
});
519+
496520
// check for runtime errors
497521
fd.initialize(true, new InstanceInitializationFactory());
498522

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package org.opendatakit.validate;
2+
3+
import org.junit.Test;
4+
5+
import java.net.URISyntaxException;
6+
import java.nio.file.Path;
7+
8+
import static org.hamcrest.MatcherAssert.assertThat;
9+
import static org.hamcrest.Matchers.containsString;
10+
import static org.hamcrest.Matchers.isEmptyString;
11+
12+
public class CollectFunctionHandlerTest {
13+
14+
@Test
15+
public void acceptsIntersects() throws URISyntaxException {
16+
final Path path = TestUtils.getPathOf("intersects_function.xml");
17+
final FormValidator validator = new FormValidator();
18+
19+
Output output = Output.runAndGet(() -> validator.validate(path.toString()));
20+
assertThat(output.getErr(), isEmptyString());
21+
assertThat(output.getStd(), containsString("Xform is valid"));
22+
}
23+
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package org.opendatakit.validate;
2+
3+
import java.io.ByteArrayOutputStream;
4+
import java.io.PrintStream;
5+
6+
public class Output {
7+
private final String std;
8+
private final String err;
9+
10+
Output(String std, String err) {
11+
this.std = std;
12+
this.err = err;
13+
}
14+
15+
static Output runAndGet(Runnable runnable) {
16+
PrintStream outBackup = System.out;
17+
ByteArrayOutputStream stdBaos = new ByteArrayOutputStream();
18+
PrintStream stdPs = new PrintStream(stdBaos);
19+
System.setOut(stdPs);
20+
21+
PrintStream errBackup = System.err;
22+
ByteArrayOutputStream errBaos = new ByteArrayOutputStream();
23+
PrintStream errPs = new PrintStream(errBaos);
24+
System.setErr(errPs);
25+
26+
runnable.run();
27+
28+
stdPs.flush();
29+
String std = stdBaos.toString();
30+
System.setOut(outBackup);
31+
System.out.print(std);
32+
33+
errPs.flush();
34+
String err = errBaos.toString();
35+
System.setErr(errBackup);
36+
System.err.print(err);
37+
38+
return new Output(std, err);
39+
}
40+
41+
public String getStd() {
42+
return std;
43+
}
44+
45+
public String getErr() {
46+
return err;
47+
}
48+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package org.opendatakit.validate;
2+
3+
import java.net.URISyntaxException;
4+
import java.nio.file.Path;
5+
import java.nio.file.Paths;
6+
7+
public class TestUtils {
8+
public static Path getPathOf(String filename) throws URISyntaxException {
9+
return Paths.get(ValidateExternalSecondaryInstancesTest.class.getResource(filename.startsWith("/") ? filename : "/" + filename).toURI());
10+
}
11+
}

src/test/java/org/opendatakit/validate/ValidateExternalSecondaryInstancesTest.java

Lines changed: 7 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,10 @@
33
import static org.hamcrest.MatcherAssert.assertThat;
44
import static org.hamcrest.Matchers.containsString;
55
import static org.hamcrest.Matchers.isEmptyString;
6+
import static org.opendatakit.validate.TestUtils.getPathOf;
67

7-
import java.io.ByteArrayOutputStream;
8-
import java.io.PrintStream;
98
import java.net.URISyntaxException;
109
import java.nio.file.Path;
11-
import java.nio.file.Paths;
1210
import org.junit.Test;
1311

1412
public class ValidateExternalSecondaryInstancesTest {
@@ -18,8 +16,8 @@ public void supportsXlsformsDefaultValueAndLabelRefs_inItemsets_usingXMLExternal
1816
final FormValidator validator = new FormValidator();
1917

2018
Output output = Output.runAndGet(() -> validator.validate(path.toString()));
21-
assertThat(output.err, isEmptyString());
22-
assertThat(output.std, containsString("Xform is valid"));
19+
assertThat(output.getErr(), isEmptyString());
20+
assertThat(output.getStd(), containsString("Xform is valid"));
2321
}
2422

2523
@Test
@@ -28,8 +26,8 @@ public void supportsXlsformsDefaultValueAndLabelRefs_inItemsets_usingCsvSecondar
2826
final FormValidator validator = new FormValidator();
2927

3028
Output output = Output.runAndGet(() -> validator.validate(path.toString()));
31-
assertThat(output.err, isEmptyString());
32-
assertThat(output.std, containsString("Xform is valid"));
29+
assertThat(output.getErr(), isEmptyString());
30+
assertThat(output.getStd(), containsString("Xform is valid"));
3331
}
3432

3533
@Test
@@ -38,48 +36,7 @@ public void supportsCustomValueAndLabelRefs_inItemsets_usingExternalSecondaryIns
3836
final FormValidator validator = new FormValidator();
3937

4038
Output output = Output.runAndGet(() -> validator.validate(path.toString()));
41-
assertThat(output.err, isEmptyString());
42-
assertThat(output.std, containsString("Xform is valid"));
39+
assertThat(output.getErr(), isEmptyString());
40+
assertThat(output.getStd(), containsString("Xform is valid"));
4341
}
44-
45-
private Path getPathOf(String filename) throws URISyntaxException {
46-
return Paths.get(ValidateExternalSecondaryInstancesTest.class.getResource(filename.startsWith("/") ? filename : "/" + filename).toURI());
47-
}
48-
49-
static class Output {
50-
private final String std;
51-
private final String err;
52-
53-
Output(String std, String err) {
54-
this.std = std;
55-
this.err = err;
56-
}
57-
58-
static Output runAndGet(Runnable runnable) {
59-
PrintStream outBackup = System.out;
60-
ByteArrayOutputStream stdBaos = new ByteArrayOutputStream();
61-
PrintStream stdPs = new PrintStream(stdBaos);
62-
System.setOut(stdPs);
63-
64-
PrintStream errBackup = System.err;
65-
ByteArrayOutputStream errBaos = new ByteArrayOutputStream();
66-
PrintStream errPs = new PrintStream(errBaos);
67-
System.setErr(errPs);
68-
69-
runnable.run();
70-
71-
stdPs.flush();
72-
String std = stdBaos.toString();
73-
System.setOut(outBackup);
74-
System.out.print(std);
75-
76-
errPs.flush();
77-
String err = errBaos.toString();
78-
System.setErr(errBackup);
79-
System.err.print(err);
80-
81-
return new Output(std, err);
82-
}
83-
}
84-
8542
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?xml version="1.0"?>
2+
<h:html xmlns="http://www.w3.org/2002/xforms" xmlns:odk="http://www.opendatakit.org/xforms"
3+
xmlns:jr="http://openrosa.org/javarosa" xmlns:h="http://www.w3.org/1999/xhtml"
4+
xmlns:orx="http://openrosa.org/xforms">
5+
<h:head>
6+
<h:title>Form with intersects</h:title>
7+
<model>
8+
<instance>
9+
<data id="intersects">
10+
<q1/>
11+
<calc/>
12+
</data>
13+
</instance>
14+
<bind nodeset="/data/calc" calculate="if(intersects(/data/q1), 'y', 'n')" type="string"/>
15+
</model>
16+
</h:head>
17+
<h:body>
18+
<input ref="/data/q1"/>
19+
</h:body>
20+
</h:html>

0 commit comments

Comments
 (0)