/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.apache.oozie.action.hadoop;

import org.junit.Test;

import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

public class TestHeapModifiersPattern {

    @Test
    public void whenMatchingParameterIsGivenValueIsExtracted() {
        assertTrue("matching parameter value should be found",
                JavaActionExecutor.HEAP_MODIFIERS_PATTERN.matcher("-Xms1G").matches());

        assertTrue("matching parameter value should be found",
                JavaActionExecutor.HEAP_MODIFIERS_PATTERN.matcher("-Xmx1G").matches());

        assertTrue("matching parameter value should be found",
                JavaActionExecutor.HEAP_MODIFIERS_PATTERN.matcher("-ms1G").matches());

        assertTrue("matching parameter value should be found",
                JavaActionExecutor.HEAP_MODIFIERS_PATTERN.matcher("-mx1G").matches());

        assertTrue("matching parameter value should be found",
                JavaActionExecutor.HEAP_MODIFIERS_PATTERN.matcher("-Xms1G").matches());

        assertTrue("matching parameter value should be found",
                JavaActionExecutor.HEAP_MODIFIERS_PATTERN.matcher("-Xms1G").matches());

        assertTrue("matching parameter value should be found",
                JavaActionExecutor.HEAP_MODIFIERS_PATTERN.matcher("-Xms1G -Xmx:123K -XX:+UnlockExperimentalVMOptions").matches());

        assertFalse("not matching parameter value should not be extracted",
                JavaActionExecutor.HEAP_MODIFIERS_PATTERN.matcher("-XX:+UnlockExperimentalVMOptions").matches());
    }
}