0 Replies Latest reply on Jul 12, 2007 7:28 PM by dan.j.allen

    adding getAttributes() / setAttribute() to BaseSeamTest.Requ

    dan.j.allen

      I have requested that there be a way in the SeamTest to get the request-scope attributes (and also set one). http://jira.jboss.org/jira/browse/JBSEAM-1657

      Ah, and I can justify why now (car rides are always useful for these things). In the Expressions class (and perhaps JSF in general), you cannot set the value of an arbitrary value binding. The root has to resolve to some bean somewhere. However, you can place things manually into different scopes, which Seam handles when it outjects. So by setting the request scope attribute, you are emulating what would occur from an outjection of some other Seam component.

      Let me provide an example:

      This is fine:

      @Name("user")
      public class User {
       private String name;
      
       // getters and setters
      }


      ...inside test

      setValue("#{user.name}", "Mike");


      This is not fine (does nothing):

      setValue("#{madeupexpression}", "Mike")


      However, if your Seam component has a "madeupexpression" property that needs to be injected, then you need a way to make this value available in the test. You are emulating the @Out that perhaps occurred in some other part of the code.

      Here is what will work:

      @Name("someComponent")
      public class SomeComponent {
       @In
       private String madeupexpression;
      }


      ...inside test

      setAttribute("madeupexpression", "Mike") // proposed
      Component.getInstance("someComponent");
      System.out.println("You've got no errors");


      Hopefully that makes it clear why we need this. Or, perhaps someone can tell me how I am doing it all wrong. How do you prepare a value expression that would have been outjected by another component? Assume that the other component is not used in the test.

      I do know about setField(), but assume that you are not instantiating the object manually but rather using Component.getInstance("someComponent") to get it. When this call is made, all the dependencies have to be available.