// Path: java2word/src/main/java/word/utils/TestUtils.java
// public class TestUtils {
// 
// 	public static int regexCount(String text, String regex){
// 		if(text == null || regex == null){
// 			throw new IllegalArgumentException("Can't be null.");
// 		}
// 		Pattern pattern = Pattern.compile(regex);
// 		Matcher matcher = pattern.matcher(text);
// 		
// 		int total = 0;
// 		while (matcher.find()) {
// 			total ++;
//         }
// 		
// 		return total;
// 	}
// 	
// 	public static void createLocalDoc(String myDoc) {
// 	    createLocalDocument(myDoc, "Java2word_allInOne.doc");
// 	}
// 	
// 	public static void createLocalDoc(String myDoc, String fileName) {
// 	    if("".equals(fileName) || fileName == null) {
// 	        fileName = "Java2word_allInOne.doc";
// 	    }
// 	    createLocalDocument(myDoc, fileName);
// 	}
// 	
//     public static void createLocalDocument(String myDoc, String fileName) {
//         //Property prop = new Property("");
//         Properties prop = new Properties();
//         String tmpDocs = "";
//         try {            
//             prop.load(new FileInputStream("build.properties"));
//         } catch (IOException e) {
//             e.printStackTrace();
//         }
//         tmpDocs = (String) prop.get("tmp.docs.dir");
//         
//         //System.out.println(tmpDocs);
//         //"/home/leonardo/Desktop/Java2word_allInOne.doc"
//         
//         File fileObj = new File(tmpDocs + "/" + fileName);
// 
//         PrintWriter writer = null;
//         try {
//             writer = new PrintWriter(fileObj);
//         } catch (FileNotFoundException e) {
//             e.printStackTrace();
//         }
//         String myWord = myDoc;
// 
//         writer.println(myWord);
//         writer.close();
//     }
// 	
// }
// 
// Path: java2word/src/main/java/word/w2004/elements/AbstractHeading.java
// public abstract class AbstractHeading<E> implements IElement,  IFluentElementStylable<E>{
// 
//     /**
//      * this is actual heading1, heading2 or heading3.
//      */
//     private String headingType;
//     private String value; //value/text for the Heading
// 
//     protected AbstractHeading(String headingType, String value){
//         this.headingType = headingType;
//         this.value = value;
//     }
// 
//     private String template =
//         "\n<w:p wsp:rsidR=\"004429ED\" wsp:rsidRDefault=\"00000000\" wsp:rsidP=\"004429ED\">"
//         +"\n	<w:pPr>"
//         +"\n		<w:pStyle w:val=\"{heading}\" />"
//         +"\n		{styleAlign}"
//         +"\n	</w:pPr>"
//         +"\n	<w:r>"
//         +"\n		{styleText}"
//         +"\n		<w:t>{value}</w:t>"
//         +"\n	</w:r>"
//         +"\n</w:p>";
// 
//     private HeadingStyle style = new HeadingStyle();
// 
//     @Override
//     public String getContent() {
//         if("".equals(this.value)){
//             return "";
//         }
// 
//         //For convention, it should be the last thing before returning the xml content.
//         String txt = style.getNewContentWithStyle(getTemplate());
// 
//         return txt.replace("{value}", this.value);
//     }
// 
// 
//     // #### Getters and setters ####
//     public String getTemplate() {
//         return this.template.replace("{heading}", this.headingType);
//     }
// 
//     //Implements the stylable and the heading classes reuse it
//     @Override
//     @SuppressWarnings("unchecked")
//     public E withStyle() {
//         this.style.setElement(this); //, Heading1.class
//         return (E) this.style;
//     }
// 
// }


import junit.framework.Assert;
import org.junit.Test;
import word.utils.TestUtils;
import word.w2004.elements.AbstractHeading;
package word.w2004;




public class AbstractHeadingTest extends Assert{

	//### TODO: I won't test the method applyStyle because I will pull this off to another class in order to reuse this for all other "stylable" class. 
	
	//anonymous implementation - this is the way I leaned how to test abstract classes. 
	@SuppressWarnings("rawtypes")
// Path: java2word/src/main/java/word/utils/TestUtils.java
// public class TestUtils {
// 
// 	public static int regexCount(String text, String regex){
// 		if(text == null || regex == null){
// 			throw new IllegalArgumentException("Can't be null.");
// 		}
// 		Pattern pattern = Pattern.compile(regex);
// 		Matcher matcher = pattern.matcher(text);
// 		
// 		int total = 0;
// 		while (matcher.find()) {
// 			total ++;
//         }
// 		
// 		return total;
// 	}
// 	
// 	public static void createLocalDoc(String myDoc) {
// 	    createLocalDocument(myDoc, "Java2word_allInOne.doc");
// 	}
// 	
// 	public static void createLocalDoc(String myDoc, String fileName) {
// 	    if("".equals(fileName) || fileName == null) {
// 	        fileName = "Java2word_allInOne.doc";
// 	    }
// 	    createLocalDocument(myDoc, fileName);
// 	}
// 	
//     public static void createLocalDocument(String myDoc, String fileName) {
//         //Property prop = new Property("");
//         Properties prop = new Properties();
//         String tmpDocs = "";
//         try {            
//             prop.load(new FileInputStream("build.properties"));
//         } catch (IOException e) {
//             e.printStackTrace();
//         }
//         tmpDocs = (String) prop.get("tmp.docs.dir");
//         
//         //System.out.println(tmpDocs);
//         //"/home/leonardo/Desktop/Java2word_allInOne.doc"
//         
//         File fileObj = new File(tmpDocs + "/" + fileName);
// 
//         PrintWriter writer = null;
//         try {
//             writer = new PrintWriter(fileObj);
//         } catch (FileNotFoundException e) {
//             e.printStackTrace();
//         }
//         String myWord = myDoc;
// 
//         writer.println(myWord);
//         writer.close();
//     }
// 	
// }
// 
// Path: java2word/src/main/java/word/w2004/elements/AbstractHeading.java
// public abstract class AbstractHeading<E> implements IElement,  IFluentElementStylable<E>{
// 
//     /**
//      * this is actual heading1, heading2 or heading3.
//      */
//     private String headingType;
//     private String value; //value/text for the Heading
// 
//     protected AbstractHeading(String headingType, String value){
//         this.headingType = headingType;
//         this.value = value;
//     }
// 
//     private String template =
//         "\n<w:p wsp:rsidR=\"004429ED\" wsp:rsidRDefault=\"00000000\" wsp:rsidP=\"004429ED\">"
//         +"\n	<w:pPr>"
//         +"\n		<w:pStyle w:val=\"{heading}\" />"
//         +"\n		{styleAlign}"
//         +"\n	</w:pPr>"
//         +"\n	<w:r>"
//         +"\n		{styleText}"
//         +"\n		<w:t>{value}</w:t>"
//         +"\n	</w:r>"
//         +"\n</w:p>";
// 
//     private HeadingStyle style = new HeadingStyle();
// 
//     @Override
//     public String getContent() {
//         if("".equals(this.value)){
//             return "";
//         }
// 
//         //For convention, it should be the last thing before returning the xml content.
//         String txt = style.getNewContentWithStyle(getTemplate());
// 
//         return txt.replace("{value}", this.value);
//     }
// 
// 
//     // #### Getters and setters ####
//     public String getTemplate() {
//         return this.template.replace("{heading}", this.headingType);
//     }
// 
//     //Implements the stylable and the heading classes reuse it
//     @Override
//     @SuppressWarnings("unchecked")
//     public E withStyle() {
//         this.style.setElement(this); //, Heading1.class
//         return (E) this.style;
//     }
// 
// }


// Path: java2word/src/test/java/word/w2004/AbstractHeadingTest.java
import junit.framework.Assert;
import org.junit.Test;
import word.utils.TestUtils;
import word.w2004.elements.AbstractHeading;

package word.w2004;




public class AbstractHeadingTest extends Assert{

	//### TODO: I won't test the method applyStyle because I will pull this off to another class in order to reuse this for all other "stylable" class. 
	
	//anonymous implementation - this is the way I leaned how to test abstract classes. 
	@SuppressWarnings("rawtypes")
    AbstractHeading heading1 = new AbstractHeading("Heading1", "h111") {