@Test
 public void
     evaluatingAParsedCoalesceExpression_NullAndAStringWithQuotationMarks_RetunsQuotationMarks()
         throws Exception {
   Expression e = Coalesce.parse("null ?? \"\\\"\\\"\\\"\\\"\"");
   assertThat(e.evaluate(), is(equalTo("\\\"\\\"\\\"\\\"")));
 }
 @Test
 public void createCoalesceExpression_ObjectAndStringOperands_ReturnClassIsString() {
   Class<?> expectedClass = Object.class;
   Object left = new Object();
   Object right = "1";
   Expression e = coalesce(left, right);
   assertThat(e.getResultClass(), is(assignableTo(expectedClass)));
 }
 @Test
 public void createCoalesceExpression_NullAndObjectOperands_ReturnClassIsString() {
   Class<?> expectedClass = String.class;
   Object left = null;
   Object right = new String();
   Expression e = coalesce(left, right);
   assertThat(e.getResultClass(), is(assignableTo(expectedClass)));
 }
 @Test
 public void evaluateCoalesceExpression_NotNullOnLeft_ReturnsLeft() throws Exception {
   Expression e = coalesce(constant("1"), constant("2"));
   assertThat(e.evaluate(), is(equalTo("1")));
 }
 @Test
 public void evaluatingAParsedCoalesceExpression_AAndB_RetunsA() throws Exception {
   Expression e = Coalesce.parse("\"a\" ?? \"b\"");
   assertThat(e.evaluate(), is(equalTo("a")));
 }
 @Test
 public void createCoalesceExpression_callingToString_getsJavaLikeExpression() {
   Expression e = coalesce("a", "b");
   assertThat(e.toString(), is("\"a\" ?? \"b\""));
 }