Skip to content

Commit 99f494c

Browse files
ctruedenclaude
andcommitted
Test base Evaluator methods
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 5b0cc71 commit 99f494c

2 files changed

Lines changed: 95 additions & 2 deletions

File tree

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
/*
2+
* #%L
3+
* Parsington: the SciJava mathematical expression parser.
4+
* %%
5+
* Copyright (C) 2015 - 2026 Board of Regents of the University of
6+
* Wisconsin-Madison.
7+
* %%
8+
* Redistribution and use in source and binary forms, with or without
9+
* modification, are permitted provided that the following conditions are met:
10+
*
11+
* 1. Redistributions of source code must retain the above copyright notice,
12+
* this list of conditions and the following disclaimer.
13+
* 2. Redistributions in binary form must reproduce the above copyright notice,
14+
* this list of conditions and the following disclaimer in the documentation
15+
* and/or other materials provided with the distribution.
16+
*
17+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18+
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20+
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
21+
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22+
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23+
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24+
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25+
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26+
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27+
* POSSIBILITY OF SUCH DAMAGE.
28+
* #L%
29+
*/
30+
31+
package org.scijava.parsington.eval;
32+
33+
import static org.junit.jupiter.api.Assertions.assertEquals;
34+
import static org.junit.jupiter.api.Assertions.assertThrows;
35+
import static org.junit.jupiter.api.Assertions.assertTrue;
36+
37+
import java.util.HashMap;
38+
import java.util.Map;
39+
40+
import org.junit.jupiter.api.Test;
41+
import org.scijava.parsington.AbstractTest;
42+
43+
/**
44+
* Abstract base class for testing {@link Evaluator} implementations.
45+
*
46+
* @author Curtis Rueden
47+
*/
48+
public abstract class AbstractEvaluatorTest extends AbstractTest {
49+
50+
public abstract Evaluator createEvaluator();
51+
52+
/**
53+
* Tests {@link Evaluator#get(String)} and
54+
* {@link Evaluator#set(String, Object)}.
55+
*/
56+
@Test
57+
public void testGetSet() {
58+
final Evaluator e = createEvaluator();
59+
// In strict mode (the default), getting an unset variable throws.
60+
assertThrows(IllegalArgumentException.class, () -> e.get("x"));
61+
e.set("x", 42);
62+
assertEquals(42, e.get("x"));
63+
e.set("x", "hello");
64+
assertEquals("hello", e.get("x"));
65+
}
66+
67+
/** Tests {@link Evaluator#getAll()} and {@link Evaluator#setAll(Map)}. */
68+
@Test
69+
public void testGetAllSetAll() {
70+
final Evaluator e = createEvaluator();
71+
assertEquals(new HashMap<>(), e.getAll());
72+
73+
final Map<String, Object> vars = new HashMap<>();
74+
vars.put("a", 1);
75+
vars.put("b", "two");
76+
vars.put("c", 3.0);
77+
e.setAll(vars);
78+
79+
assertEquals(vars, e.getAll());
80+
81+
// Verify individual get still works after setAll.
82+
assertEquals(1, e.get("a"));
83+
assertEquals("two", e.get("b"));
84+
assertEquals(3.0, e.get("c"));
85+
86+
// Verify variables created at evaluation are accessible and correct.
87+
e.evaluate("d=a+c");
88+
assertTrue(e.getAll().containsKey("d"));
89+
final Object dVal = e.get("d");
90+
assertEquals(4.0, dVal);
91+
assertEquals(dVal, e.getAll().get("d"));
92+
}
93+
}

src/test/java/org/scijava/parsington/eval/AbstractStandardEvaluatorTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,13 +45,12 @@
4545

4646
import org.junit.jupiter.api.BeforeEach;
4747
import org.junit.jupiter.api.Test;
48-
import org.scijava.parsington.AbstractTest;
4948
import org.scijava.parsington.Operators;
5049
import org.scijava.parsington.SyntaxTree;
5150
import org.scijava.parsington.Variable;
5251

5352
/** Abstract base class for testing {@link StandardEvaluator} implementations. */
54-
public abstract class AbstractStandardEvaluatorTest extends AbstractTest {
53+
public abstract class AbstractStandardEvaluatorTest extends AbstractEvaluatorTest {
5554

5655
protected StandardEvaluator e;
5756

@@ -60,6 +59,7 @@ public void setUp() {
6059
e = createEvaluator();
6160
}
6261

62+
@Override
6363
public abstract StandardEvaluator createEvaluator();
6464

6565
/** Tests {@link Evaluator#evaluate(String)}. */

0 commit comments

Comments
 (0)