Concordion – Returning Object


Concordion execute command can be used to get the result of a behavior in the form of object using which we can get multiple outputs of a behavior. For example, consider the following requirement βˆ’

The full name Zafrul Khan is to be broken into first name Zafrul and last name Khan.

Here we need to have a split function which accepts a user name and returns a result object having the first name and the last name as its properties so that we can use them.

If we want to write a specification for such a split function which will expect a user name and output a result object, then the following will be the specification βˆ’

<p>The full name <span concordion:execute = "#result = split(#TEXT)">Zafrul 
   Khan</span> is to be broken into first name 
   <span concordion:assertEquals = "#result.firstName">Zafrul</span> and last name 
   <span concordion:assertEquals = "#result.lastName">Khan</span>.</p>

When Concordion parses the document, it will set the value of the special variable #TEXT as the value of the current element as “Zafrul Khan” and pass it to the split function. Then it will execute the split() method with parameters as #TEXT using the execute command and set the result into the #result variable and using the result object, print the firstName and the lastName properties as the output.

Example

Let us have a working Eclipse IDE in place and follow the steps given below to create a Concordion application

StepDescription
1Create a project with the name concordion and create a package com.Adglob under the src folder in the created project.
2Add the required Concordion libraries using the Add External JARs option as explained in the Concordion – First Application chapter.
3Create Java class SystemResult under the com.Adglob package.
4Create Fixture class SystemFixture under the specs.Adglob package.
5Create Specification html System.html under the  specs.Adglob  package.
6The final step is to create the content of all the Java files and specification file and run the application as explained below.

Here is the content of Result.java file βˆ’

package com.Adglob;
public class Result {
   private String firstName;
   private String lastName;
	
   public String getFirstName() {
      return firstName;
   }
	
   public void setFirstName(String firstName) {
      this.firstName = firstName;
   }
	
   public String getLastName() {
      return lastName;
   }
	
   public void setLastName(String lastName) {
      this.lastName = lastName;
   } 
}

Here is the content of System.java file βˆ’

package com.Adglob;
public class System {
   public Result split(String userName){
      Result result = new Result();
      String[] words = userName.split(" ");
      result.setFirstName(words[0]);
      result.setLastName(words[1]);
      return result;
   }
}

Following is the content of SystemFixture.java fileβˆ’

package specs.Adglob;

import com.Adglob.Result;
import com.Adglob.System;
import org.concordion.integration.junit4.ConcordionRunner;
import org.junit.runner.RunWith;

@RunWith(ConcordionRunner.class)

public class SystemFixture {
   System system = new System();
   public Result split(String userName){
      return system.split(userName);
   }  
}

Following is the content of System.html file βˆ’

<html xmlns:concordion = "http://www.concordion.org/2007/concordion">
   <head>
      <link href = "../concordion.css" rel = "stylesheet" type = "text/css" />
   </head>

   <body>
      <h1>System Specifications</h1>
      <p>We are building specifications for our online order tracking application.</p>
      <p>Following is the requirement to split full name of a logged in user to its 
         constituents by splitting name by whitespace:</p>
			
      <div class = "example">      
         <h3>Example</h3>
         <p>The full name <span concordion:execute = "#result = split(#TEXT)">Zafrul 
            Khan</span> is to be broken into first name <span 
            concordion:assertEquals = "#result.firstName">Zafrul</span> and last name <span 
            concordion:assertEquals = "#result.lastName">Khan</span>.</p>
      </div>
		
   </body>
	
</html>

Once you are done with creating the source and specification files, let us run the application as JUnit Test. If everything is fine with your application, then it will produce the following result βˆ’

C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\concordion\specs\Adglob\System.html
Successes: 1, Failures: 0

Leave a Reply