// Path: enforcer-api/src/main/java/org/apache/maven/enforcer/rule/api/EnforcerRuleHelper.java
// public interface EnforcerRuleHelper
//     extends ExpressionEvaluator
// {
// 
//     /**
//      * Gets the log.
//      *
//      * @return the log
//      */
//     @Nonnull
//     Log getLog ();
// 
//     /**
//      * Gets the component.
//      *
//      * @param clazz the clazz
//      *
//      * @return the component
//      *
//      * @throws ComponentLookupException the component lookup exception
//      */
//     @Nonnull
//     <T> T getComponent ( Class<T> clazz )
//         throws ComponentLookupException;
// 
//     /**
//      * Gets the component.
//      *
//      * @param componentKey the component key
//      *
//      * @return the component
//      *
//      * @throws ComponentLookupException the component lookup exception
//      */
//     @Nonnull
//     Object getComponent ( String componentKey )
//         throws ComponentLookupException;
// 
//     /**
//      * Gets the component.
//      *
//      * @param role the role
//      * @param roleHint the role hint
//      *
//      * @return the component
//      *
//      * @throws ComponentLookupException the component lookup exception
//      */
//     Object getComponent ( String role, String roleHint )
//         throws ComponentLookupException;
// 
//     /**
//      * Gets the component.
//      *
//      * @param clazz the clazz
//      * @param roleHint the role hint
//      *
//      * @return the component
//      *
//      * @throws ComponentLookupException the component lookup exception
//      */
//     <T> T getComponent ( Class<T> clazz, String roleHint )
//         throws ComponentLookupException;
//     
//     /**
//      * Gets the component map.
//      *
//      * @param role the role
//      *
//      * @return the component map
//      *
//      * @throws ComponentLookupException the component lookup exception
//      */
//     Map<String, ?> getComponentMap ( String role )
//         throws ComponentLookupException;
// 
//     /**
//      * Gets the component list.
//      *
//      * @param role the role
//      *
//      * @return the component list
//      *
//      * @throws ComponentLookupException the component lookup exception
//      */
//     List<?> getComponentList ( String role )
//         throws ComponentLookupException;
// 
//     /**
//      * Gets the container.
//      *
//      * @return the container
//      */
//     PlexusContainer getContainer();
// }


import org.codehaus.plexus.util.Os;
import org.junit.jupiter.api.Test;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.startsWith;
import static org.junit.jupiter.api.Assertions.*;
import java.util.Iterator;
import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper;
import org.apache.maven.model.profile.activation.OperatingSystemProfileActivator;
import org.apache.maven.plugin.logging.Log;
import org.apache.maven.plugin.logging.SystemStreamLog;
        assertTrue( rule.isAllowed() );

        rule.setArch( null );

        rule.setName( Os.OS_NAME );
        assertTrue( rule.isAllowed() );

        rule.setName( "somecrazyname" );
        assertFalse( rule.isAllowed() );

        rule.setName( "!somecrazyname" );
        assertTrue( rule.isAllowed() );

        rule.setName( null );

        rule.setVersion( Os.OS_VERSION );
        assertTrue( rule.isAllowed() );

        rule.setVersion( "somecrazyversion" );
        assertFalse( rule.isAllowed() );

        rule.setVersion( "!somecrazyversion" );
        assertTrue( rule.isAllowed() );
    }

    @Test
    public void testInvalidFamily()
    {
        RequireOS rule = new RequireOS();

// Path: enforcer-api/src/main/java/org/apache/maven/enforcer/rule/api/EnforcerRuleHelper.java
// public interface EnforcerRuleHelper
//     extends ExpressionEvaluator
// {
// 
//     /**
//      * Gets the log.
//      *
//      * @return the log
//      */
//     @Nonnull
//     Log getLog ();
// 
//     /**
//      * Gets the component.
//      *
//      * @param clazz the clazz
//      *
//      * @return the component
//      *
//      * @throws ComponentLookupException the component lookup exception
//      */
//     @Nonnull
//     <T> T getComponent ( Class<T> clazz )
//         throws ComponentLookupException;
// 
//     /**
//      * Gets the component.
//      *
//      * @param componentKey the component key
//      *
//      * @return the component
//      *
//      * @throws ComponentLookupException the component lookup exception
//      */
//     @Nonnull
//     Object getComponent ( String componentKey )
//         throws ComponentLookupException;
// 
//     /**
//      * Gets the component.
//      *
//      * @param role the role
//      * @param roleHint the role hint
//      *
//      * @return the component
//      *
//      * @throws ComponentLookupException the component lookup exception
//      */
//     Object getComponent ( String role, String roleHint )
//         throws ComponentLookupException;
// 
//     /**
//      * Gets the component.
//      *
//      * @param clazz the clazz
//      * @param roleHint the role hint
//      *
//      * @return the component
//      *
//      * @throws ComponentLookupException the component lookup exception
//      */
//     <T> T getComponent ( Class<T> clazz, String roleHint )
//         throws ComponentLookupException;
//     
//     /**
//      * Gets the component map.
//      *
//      * @param role the role
//      *
//      * @return the component map
//      *
//      * @throws ComponentLookupException the component lookup exception
//      */
//     Map<String, ?> getComponentMap ( String role )
//         throws ComponentLookupException;
// 
//     /**
//      * Gets the component list.
//      *
//      * @param role the role
//      *
//      * @return the component list
//      *
//      * @throws ComponentLookupException the component lookup exception
//      */
//     List<?> getComponentList ( String role )
//         throws ComponentLookupException;
// 
//     /**
//      * Gets the container.
//      *
//      * @return the container
//      */
//     PlexusContainer getContainer();
// }


// Path: enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireOS.java
import org.codehaus.plexus.util.Os;
import org.junit.jupiter.api.Test;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.startsWith;
import static org.junit.jupiter.api.Assertions.*;
import java.util.Iterator;
import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper;
import org.apache.maven.model.profile.activation.OperatingSystemProfileActivator;
import org.apache.maven.plugin.logging.Log;
import org.apache.maven.plugin.logging.SystemStreamLog;

        assertTrue( rule.isAllowed() );

        rule.setArch( null );

        rule.setName( Os.OS_NAME );
        assertTrue( rule.isAllowed() );

        rule.setName( "somecrazyname" );
        assertFalse( rule.isAllowed() );

        rule.setName( "!somecrazyname" );
        assertTrue( rule.isAllowed() );

        rule.setName( null );

        rule.setVersion( Os.OS_VERSION );
        assertTrue( rule.isAllowed() );

        rule.setVersion( "somecrazyversion" );
        assertFalse( rule.isAllowed() );

        rule.setVersion( "!somecrazyversion" );
        assertTrue( rule.isAllowed() );
    }

    @Test
    public void testInvalidFamily()
    {
        RequireOS rule = new RequireOS();

        EnforcerRuleHelper helper = EnforcerTestUtils.getHelper();