Testing for variables which generate wikibase values
This commit is contained in:
parent
fffd31382e
commit
75b1863c1c
@ -0,0 +1,51 @@
|
|||||||
|
package org.openrefine.wikidata.schema;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
|
||||||
|
import org.openrefine.wikidata.schema.entityvalues.ReconItemIdValue;
|
||||||
|
import org.testng.annotations.Test;
|
||||||
|
import org.wikidata.wdtk.datamodel.interfaces.ItemIdValue;
|
||||||
|
|
||||||
|
import com.google.refine.model.Cell;
|
||||||
|
import com.google.refine.model.Recon;
|
||||||
|
import com.google.refine.model.ReconCandidate;
|
||||||
|
|
||||||
|
public class WbItemVariableTest extends WbVariableTest<ItemIdValue> {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WbVariableExpr<ItemIdValue> initVariableExpr() {
|
||||||
|
return new WbItemVariable();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testReconciledCell() {
|
||||||
|
Recon recon = Recon.makeWikidataRecon(3782378L);
|
||||||
|
recon.judgment = Recon.Judgment.Matched;
|
||||||
|
recon.match = new ReconCandidate("Q123", "some item", null, 100.0);
|
||||||
|
Cell cell = new Cell("some value", recon);
|
||||||
|
evaluatesTo(new ReconItemIdValue(recon, "some value"), cell);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testNewItemCell() {
|
||||||
|
Recon recon = Recon.makeWikidataRecon(3782378L);
|
||||||
|
recon.judgment = Recon.Judgment.New;
|
||||||
|
recon.candidates = Collections.singletonList(new ReconCandidate("Q123", "some item", null, 100.0));
|
||||||
|
Cell cell = new Cell("some value", recon);
|
||||||
|
evaluatesTo(new ReconItemIdValue(recon, "some value"), cell);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testUnmatchedCell() {
|
||||||
|
Recon recon = Recon.makeWikidataRecon(3782378L);
|
||||||
|
recon.judgment = Recon.Judgment.None;
|
||||||
|
recon.candidates = Collections.singletonList(new ReconCandidate("Q123", "some item", null, 100.0));
|
||||||
|
Cell cell = new Cell("some value", recon);
|
||||||
|
isSkipped(cell);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testUnreconciledCell() {
|
||||||
|
isSkipped("some value");
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,17 @@
|
|||||||
|
package org.openrefine.wikidata.schema;
|
||||||
|
|
||||||
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
|
public class WbLanguageVariableTest extends WbVariableTest<String> {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WbVariableExpr<String> initVariableExpr() {
|
||||||
|
return new WbLanguageVariable();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testValidLanguageCode() {
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,42 @@
|
|||||||
|
package org.openrefine.wikidata.schema;
|
||||||
|
|
||||||
|
import org.testng.annotations.Test;
|
||||||
|
import org.wikidata.wdtk.datamodel.helpers.Datamodel;
|
||||||
|
import org.wikidata.wdtk.datamodel.interfaces.GlobeCoordinatesValue;
|
||||||
|
|
||||||
|
|
||||||
|
public class WbLocationVariableTest extends WbVariableTest<GlobeCoordinatesValue> {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WbVariableExpr<GlobeCoordinatesValue> initVariableExpr() {
|
||||||
|
return new WbLocationVariable();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testWithSlash() {
|
||||||
|
evaluatesTo(Datamodel.makeGlobeCoordinatesValue(1.234, 5.678,
|
||||||
|
WbLocationConstant.defaultPrecision, GlobeCoordinatesValue.GLOBE_EARTH), "1.234/5.678");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testWithComma() {
|
||||||
|
evaluatesTo(Datamodel.makeGlobeCoordinatesValue(1.234, 5.678,
|
||||||
|
WbLocationConstant.defaultPrecision, GlobeCoordinatesValue.GLOBE_EARTH), "1.234,5.678");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testWhitespace() {
|
||||||
|
evaluatesTo(Datamodel.makeGlobeCoordinatesValue(1.234, 5.678,
|
||||||
|
WbLocationConstant.defaultPrecision, GlobeCoordinatesValue.GLOBE_EARTH), " 1.234, 5.678");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testOnlyOneValue() {
|
||||||
|
isSkipped("1.2348");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testEmpty() {
|
||||||
|
isSkipped("");
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,13 @@
|
|||||||
|
package org.openrefine.wikidata.schema;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
|
||||||
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
|
public class WbStatementExprTest {
|
||||||
|
@Test
|
||||||
|
public void testCreation() {
|
||||||
|
WbItemConstant q5 = new WbItemConstant("Q5", "human");
|
||||||
|
new WbStatementExpr(q5, Collections.emptyList(), Collections.emptyList());
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,42 @@
|
|||||||
|
package org.openrefine.wikidata.schema;
|
||||||
|
|
||||||
|
import org.testng.annotations.Test;
|
||||||
|
import org.wikidata.wdtk.datamodel.helpers.Datamodel;
|
||||||
|
import org.wikidata.wdtk.datamodel.interfaces.StringValue;
|
||||||
|
|
||||||
|
public class WbStringVariableTest extends WbVariableTest<StringValue> {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WbVariableExpr<StringValue> initVariableExpr() {
|
||||||
|
return new WbStringVariable();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testEmpty() {
|
||||||
|
isSkipped("");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testSimpleString() {
|
||||||
|
evaluatesTo(Datamodel.makeStringValue("apfelstrudel"), "apfelstrudel");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* It is not up to the evaluator to clean up the strings it gets.
|
||||||
|
* This is flagged later on by scrutinizers.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testTrailingWhitespace() {
|
||||||
|
evaluatesTo(Datamodel.makeStringValue("dirty \t"), "dirty \t");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testLeadingWhitespace() {
|
||||||
|
evaluatesTo(Datamodel.makeStringValue(" dirty"), " dirty");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testDoubleWhitespace() {
|
||||||
|
evaluatesTo(Datamodel.makeStringValue("very dirty"), "very dirty");
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,95 @@
|
|||||||
|
package org.openrefine.wikidata.schema;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import org.openrefine.wikidata.qa.QAWarning;
|
||||||
|
import org.openrefine.wikidata.qa.QAWarningStore;
|
||||||
|
import org.openrefine.wikidata.schema.exceptions.SkipSchemaExpressionException;
|
||||||
|
import org.testng.Assert;
|
||||||
|
import org.testng.annotations.BeforeMethod;
|
||||||
|
import org.testng.annotations.BeforeTest;
|
||||||
|
|
||||||
|
import com.google.refine.model.Cell;
|
||||||
|
import com.google.refine.model.ModelException;
|
||||||
|
import com.google.refine.model.Project;
|
||||||
|
import com.google.refine.model.Row;
|
||||||
|
import com.google.refine.tests.RefineTest;
|
||||||
|
|
||||||
|
public abstract class WbVariableTest<T> extends RefineTest {
|
||||||
|
|
||||||
|
protected WbVariableExpr<T> variable;
|
||||||
|
protected Project project;
|
||||||
|
protected Row row;
|
||||||
|
protected ExpressionContext ctxt;
|
||||||
|
protected QAWarningStore warningStore;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This should return a variable expression, to be tested with the helpers below.
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public abstract WbVariableExpr<T> initVariableExpr();
|
||||||
|
|
||||||
|
@BeforeMethod
|
||||||
|
public void createProject() throws IOException, ModelException {
|
||||||
|
project = createCSVProject("Wikidata variable test project", "column A\nrow1");
|
||||||
|
warningStore = new QAWarningStore();
|
||||||
|
row = project.rows.get(0);
|
||||||
|
ctxt = new ExpressionContext("http://www.wikidata.org/entity/", 0,
|
||||||
|
row, project.columnModel, warningStore);
|
||||||
|
variable = initVariableExpr();
|
||||||
|
variable.setColumnName("column A");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test that a particular cell value evaluates to some object
|
||||||
|
* @param expected
|
||||||
|
* the expected evaluation of the value
|
||||||
|
* @param input
|
||||||
|
* the cell value used by the variable
|
||||||
|
*/
|
||||||
|
public void evaluatesTo(T expected, String input) {
|
||||||
|
Cell cell = new Cell(input, null);
|
||||||
|
evaluatesTo(expected, cell);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test that a particular cell evaluates to some object
|
||||||
|
* @param expected
|
||||||
|
* the expected evaluation of the value
|
||||||
|
* @param cell
|
||||||
|
* the cell used by the variable
|
||||||
|
*/
|
||||||
|
public void evaluatesTo(T expected, Cell cell) {
|
||||||
|
row.setCell(0, cell);
|
||||||
|
try {
|
||||||
|
T result = variable.evaluate(ctxt);
|
||||||
|
Assert.assertEquals(expected, result);
|
||||||
|
} catch (SkipSchemaExpressionException e) {
|
||||||
|
Assert.fail("Value was skipped by evaluator");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test that the variable rejects a particular cell value
|
||||||
|
* @param input
|
||||||
|
* the cell value to reject
|
||||||
|
*/
|
||||||
|
public void isSkipped(String input) {
|
||||||
|
Cell cell = new Cell(input, null);
|
||||||
|
isSkipped(cell);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test that a particular cell should be rejected by the variable
|
||||||
|
* @param cell
|
||||||
|
*/
|
||||||
|
protected void isSkipped(Cell cell) {
|
||||||
|
row.setCell(0, cell);
|
||||||
|
try {
|
||||||
|
variable.evaluate(ctxt);
|
||||||
|
Assert.fail("Value was not skipped by evaluator");
|
||||||
|
} catch (SkipSchemaExpressionException e) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -51,8 +51,14 @@ import com.google.refine.util.Pool;
|
|||||||
|
|
||||||
public class Recon implements HasFields, Jsonizable {
|
public class Recon implements HasFields, Jsonizable {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Freebase schema URLs kept for compatibility with legacy reconciliation results
|
||||||
|
*/
|
||||||
private static final String FREEBASE_SCHEMA_SPACE = "http://rdf.freebase.com/ns/type.object.id";
|
private static final String FREEBASE_SCHEMA_SPACE = "http://rdf.freebase.com/ns/type.object.id";
|
||||||
private static final String FREEBASE_IDENTIFIER_SPACE = "http://rdf.freebase.com/ns/type.object.mid";
|
private static final String FREEBASE_IDENTIFIER_SPACE = "http://rdf.freebase.com/ns/type.object.mid";
|
||||||
|
|
||||||
|
private static final String WIKIDATA_SCHEMA_SPACE = "http://www.wikidata.org/prop/direct/";
|
||||||
|
private static final String WIKIDATA_IDENTIFIER_SPACE = "http://www.wikidata.org/entity/";
|
||||||
|
|
||||||
static public enum Judgment {
|
static public enum Judgment {
|
||||||
None,
|
None,
|
||||||
@ -110,6 +116,7 @@ public class Recon implements HasFields, Jsonizable {
|
|||||||
public ReconCandidate match = null;
|
public ReconCandidate match = null;
|
||||||
public int matchRank = -1;
|
public int matchRank = -1;
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
static public Recon makeFreebaseRecon(long judgmentHistoryEntry) {
|
static public Recon makeFreebaseRecon(long judgmentHistoryEntry) {
|
||||||
return new Recon(
|
return new Recon(
|
||||||
judgmentHistoryEntry,
|
judgmentHistoryEntry,
|
||||||
@ -117,6 +124,13 @@ public class Recon implements HasFields, Jsonizable {
|
|||||||
FREEBASE_SCHEMA_SPACE);
|
FREEBASE_SCHEMA_SPACE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static public Recon makeWikidataRecon(long judgmentHistoryEntry) {
|
||||||
|
return new Recon(
|
||||||
|
judgmentHistoryEntry,
|
||||||
|
WIKIDATA_IDENTIFIER_SPACE,
|
||||||
|
WIKIDATA_SCHEMA_SPACE);
|
||||||
|
}
|
||||||
|
|
||||||
public Recon(long judgmentHistoryEntry, String identifierSpace, String schemaSpace) {
|
public Recon(long judgmentHistoryEntry, String identifierSpace, String schemaSpace) {
|
||||||
id = System.currentTimeMillis() * 1000000 + Math.round(Math.random() * 1000000);
|
id = System.currentTimeMillis() * 1000000 + Math.round(Math.random() * 1000000);
|
||||||
this.judgmentHistoryEntry = judgmentHistoryEntry;
|
this.judgmentHistoryEntry = judgmentHistoryEntry;
|
||||||
|
Loading…
Reference in New Issue
Block a user