### Question:
OSMWay extends OSMWithTags { public boolean isOpposableCycleway() { String cycleway = getTag("cycleway"); String cyclewayLeft = getTag("cycleway:left"); String cyclewayRight = getTag("cycleway:right"); return (cycleway != null && cycleway.startsWith("opposite")) || (cyclewayLeft != null && cyclewayLeft.startsWith("opposite")) || (cyclewayRight != null && cyclewayRight.startsWith("opposite")); }  void addNodeRef(OSMNodeRef nodeRef); void addNodeRef(long nodeRef); List<Long> getNodeRefs(); String toString(); boolean isBicycleDismountForced(); boolean isSteps(); boolean isRoundabout(); boolean isOneWayForwardDriving(); boolean isOneWayReverseDriving(); boolean isOneWayForwardBicycle(); boolean isOneWayReverseBicycle(); boolean isOpposableCycleway();  }### Answer:
@Test public void testIsOpposableCycleway() { OSMWay way = new OSMWay(); assertFalse(way.isOpposableCycleway()); way.addTag("cycleway", "notatagvalue"); assertFalse(way.isOpposableCycleway()); way.addTag("cycleway", "oppo"); assertFalse(way.isOpposableCycleway()); way.addTag("cycleway", "opposite"); assertTrue(way.isOpposableCycleway()); way.addTag("cycleway", "nope"); way.addTag("cycleway:left", "opposite_side"); assertTrue(way.isOpposableCycleway()); }