/**
 * 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.creadur.whisker.it;

import static org.apache.creadur.whisker.it.Not.*;

public class AnyLineContainsCheck implements Check {

    final String value;

    Latch latch = Latch.UP;

    public AnyLineContainsCheck(String value) {
        super();
        this.value = value;
    }

    public void check(String line) {
        if (isNotNull(line) && not(hasPassed()) && line.contains(value)) {
            latch = latch.push();
        }
    }

    public boolean hasPassed() {
        return latch == Latch.DOWN;
    }

    public void report(Results result) {
        if (not(hasPassed())) {
           result.fail("Missing from result: " + value);
        }
    }
}
