@Test
  public void testDictionaryAccess() throws Exception {
    StandardEvaluationContext societyContext = new StandardEvaluationContext();
    societyContext.setRootObject(new IEEE());
    // Officer's Dictionary
    Inventor pupin =
        parser.parseExpression("officers['president']").getValue(societyContext, Inventor.class);
    assertNotNull(pupin);

    // evaluates to "Idvor"
    String city =
        parser
            .parseExpression("officers['president'].PlaceOfBirth.city")
            .getValue(societyContext, String.class);
    assertNotNull(city);

    // setting values
    Inventor i =
        parser.parseExpression("officers['advisors'][0]").getValue(societyContext, Inventor.class);
    assertEquals("Nikola Tesla", i.getName());

    parser
        .parseExpression("officers['advisors'][0].PlaceOfBirth.Country")
        .setValue(societyContext, "Croatia");

    Inventor i2 =
        parser
            .parseExpression("reverse[0]['advisors'][0]")
            .getValue(societyContext, Inventor.class);
    assertEquals("Nikola Tesla", i2.getName());
  }
  @Test
  public void testVariables() throws Exception {
    Inventor tesla = new Inventor("Nikola Tesla", "Serbian");
    StandardEvaluationContext context = new StandardEvaluationContext();
    context.setVariable("newName", "Mike Tesla");

    context.setRootObject(tesla);

    parser.parseExpression("foo = #newName").getValue(context);

    assertEquals("Mike Tesla", tesla.getFoo());
  }
 @Test
 public void testConstructors() throws Exception {
   StandardEvaluationContext societyContext = new StandardEvaluationContext();
   societyContext.setRootObject(new IEEE());
   Inventor einstein =
       parser
           .parseExpression(
               "new org.springframework.expression.spel.testresources.Inventor('Albert Einstein',new java.util.Date(), 'German')")
           .getValue(Inventor.class);
   assertEquals("Albert Einstein", einstein.getName());
   // create new inventor instance within add method of List
   parser
       .parseExpression(
           "Members2.add(new org.springframework.expression.spel.testresources.Inventor('Albert Einstein', 'German'))")
       .getValue(societyContext);
 }
 /**
  * Create the root context object, an Inventor instance. Non-qualified property and method
  * references will be resolved against this context object.
  *
  * @param testContext the evaluation context in which to set the root object
  */
 private static void setupRootContextObject(StandardEvaluationContext testContext) {
   GregorianCalendar c = new GregorianCalendar();
   c.set(1856, 7, 9);
   Inventor tesla = new Inventor("Nikola Tesla", c.getTime(), "Serbian");
   tesla.setPlaceOfBirth(new PlaceOfBirth("SmilJan"));
   tesla.setInventions(
       new String[] {
         "Telephone repeater",
         "Rotating magnetic field principle",
         "Polyphase alternating-current system",
         "Induction motor",
         "Alternating-current power transmission",
         "Tesla coil transformer",
         "Wireless communication",
         "Radio",
         "Fluorescent lights"
       });
   testContext.setRootObject(tesla);
 }
  static {
    GregorianCalendar c = new GregorianCalendar();
    c.set(1856, 7, 9);
    tesla = new Inventor("Nikola Tesla", c.getTime(), "Serbian");
    tesla.setPlaceOfBirth(new PlaceOfBirth("SmilJan"));
    tesla.setInventions(
        new String[] {
          "Telephone repeater",
          "Rotating magnetic field principle",
          "Polyphase alternating-current system",
          "Induction motor",
          "Alternating-current power transmission",
          "Tesla coil transformer",
          "Wireless communication",
          "Radio",
          "Fluorescent lights"
        });

    pupin = new Inventor("Pupin", c.getTime(), "Idvor");
    pupin.setPlaceOfBirth(new PlaceOfBirth("Idvor"));
  }