// Path: src/main/java/org/tap4j/util/DirectiveValues.java
// public enum DirectiveValues {
// 
//     /**
//      * Valid values.
//      */
//     SKIP("SKIP"), TODO("TODO");
// 
//     /**
//      * The text of the directive.
//      */
//     private final String textValue;
// 
//     /**
//      * Constructor with parameter.
//      *
//      * @param textValue Directive text value.
//      */
//     DirectiveValues(String textValue) {
//         this.textValue = textValue;
//     }
// 
//     /**
//      * {@inheritDoc}
//      */
//     @Override
//     public String toString() {
//         return this.textValue;
//     }
// 
//     /**
//      * Get a directive value for a given string.
//      * @param textValue String
//      * @return Directive value
//      */
//     public static DirectiveValues get(String textValue) {
//         if ("skip".equalsIgnoreCase(textValue)) {
//             return DirectiveValues.SKIP;
//         } else if ("todo".equalsIgnoreCase(textValue)) {
//             return DirectiveValues.TODO;
//         }
//         return null;
//     }
// 
// }
// 
// Path: src/main/java/org/tap4j/util/StatusValues.java
// public enum StatusValues {
// 
//     /**
//      * Valid values.
//      */
//     OK("ok"), NOT_OK("not ok");
// 
//     /**
//      * Status value.
//      */
//     private final String textValue;
// 
//     /**
//      * Constructor with parameter.
//      *
//      * @param textValue Status text value
//      */
//     StatusValues(String textValue) {
//         this.textValue = textValue;
//     }
// 
//     /**
//      * {@inheritDoc}
//      */
//     @Override
//     public String toString() {
//         return this.textValue;
//     }
// 
//     /**
//      * Get status value for a given string.
//      * @param textValue String
//      * @return Status value
//      */
//     public static StatusValues get(String textValue) {
//         if ("ok".equals(textValue)) {
//             return StatusValues.OK;
//         }
//         if ("not ok".equals(textValue)) {
//             return StatusValues.NOT_OK;
//         }
//         return null;
//     }
// 
// }


import java.util.regex.Matcher;
import org.tap4j.util.DirectiveValues;
import org.tap4j.util.StatusValues;
            String comment = m.group(4);
            BailOut bailOut = new BailOut(reason);
            addComment(bailOut, comment);
            bailOut.indentation = m.group(1).length();
            return bailOut;
        }

        m = Patterns.TEST_RESULT_PATTERN.matcher(tapLine);
        if (m.matches()) {
            String testNumberText = m.group(3);
            int testNumber = 0;
            if (testNumberText != null && !testNumberText.trim().equals("")) {
                testNumber = Integer.parseInt(testNumberText);
            }
            TestResult testResult = new TestResult(StatusValues.get(m.group(2)), testNumber);
            String comment = m.group(9);
            if (comment != null && comment.trim().length() > 0) {
                final Comment c = new Comment(comment, true);
                testResult.setComment(c);
                testResult.addComment(c);
            }
            testResult.setDescription(m.group(4));
            DirectiveValues directive = DirectiveValues.get(m.group(6));
            if (directive != null) {
                testResult.setDirective(new Directive(directive, m.group(7)));
            }
            testResult.indentation = m.group(1).length();
            return testResult;
        }

// Path: src/main/java/org/tap4j/util/DirectiveValues.java
// public enum DirectiveValues {
// 
//     /**
//      * Valid values.
//      */
//     SKIP("SKIP"), TODO("TODO");
// 
//     /**
//      * The text of the directive.
//      */
//     private final String textValue;
// 
//     /**
//      * Constructor with parameter.
//      *
//      * @param textValue Directive text value.
//      */
//     DirectiveValues(String textValue) {
//         this.textValue = textValue;
//     }
// 
//     /**
//      * {@inheritDoc}
//      */
//     @Override
//     public String toString() {
//         return this.textValue;
//     }
// 
//     /**
//      * Get a directive value for a given string.
//      * @param textValue String
//      * @return Directive value
//      */
//     public static DirectiveValues get(String textValue) {
//         if ("skip".equalsIgnoreCase(textValue)) {
//             return DirectiveValues.SKIP;
//         } else if ("todo".equalsIgnoreCase(textValue)) {
//             return DirectiveValues.TODO;
//         }
//         return null;
//     }
// 
// }
// 
// Path: src/main/java/org/tap4j/util/StatusValues.java
// public enum StatusValues {
// 
//     /**
//      * Valid values.
//      */
//     OK("ok"), NOT_OK("not ok");
// 
//     /**
//      * Status value.
//      */
//     private final String textValue;
// 
//     /**
//      * Constructor with parameter.
//      *
//      * @param textValue Status text value
//      */
//     StatusValues(String textValue) {
//         this.textValue = textValue;
//     }
// 
//     /**
//      * {@inheritDoc}
//      */
//     @Override
//     public String toString() {
//         return this.textValue;
//     }
// 
//     /**
//      * Get status value for a given string.
//      * @param textValue String
//      * @return Status value
//      */
//     public static StatusValues get(String textValue) {
//         if ("ok".equals(textValue)) {
//             return StatusValues.OK;
//         }
//         if ("not ok".equals(textValue)) {
//             return StatusValues.NOT_OK;
//         }
//         return null;
//     }
// 
// }


// Path: src/main/java/org/tap4j/model/TapElementFactory.java
import java.util.regex.Matcher;
import org.tap4j.util.DirectiveValues;
import org.tap4j.util.StatusValues;

            String comment = m.group(4);
            BailOut bailOut = new BailOut(reason);
            addComment(bailOut, comment);
            bailOut.indentation = m.group(1).length();
            return bailOut;
        }

        m = Patterns.TEST_RESULT_PATTERN.matcher(tapLine);
        if (m.matches()) {
            String testNumberText = m.group(3);
            int testNumber = 0;
            if (testNumberText != null && !testNumberText.trim().equals("")) {
                testNumber = Integer.parseInt(testNumberText);
            }
            TestResult testResult = new TestResult(StatusValues.get(m.group(2)), testNumber);
            String comment = m.group(9);
            if (comment != null && comment.trim().length() > 0) {
                final Comment c = new Comment(comment, true);
                testResult.setComment(c);
                testResult.addComment(c);
            }
            testResult.setDescription(m.group(4));
            DirectiveValues directive = DirectiveValues.get(m.group(6));
            if (directive != null) {
                testResult.setDirective(new Directive(directive, m.group(7)));
            }
            testResult.indentation = m.group(1).length();
            return testResult;
        }

        return null;