package com.github.nikolavp;

/*
 * #%L
 * commander-shell
 * %%
 * Copyright (C) 2014 Nikolavp
 * %%
 * Licensed 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.
 * #L%
 */

import com.github.approval.Approval;
import com.github.approval.converters.AbstractStringConverter;
import com.github.approval.pathmappers.JunitPathMapper;
import com.github.approval.reporters.Reporters;
import org.junit.Rule;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Paths;

/**
 * @author nikola.
 */
public class AbstractTestShell {
    @Rule
    public JunitPathMapper pathMapper = new JunitPathMapper(Paths.get("src/test/resources/approvals"));

    protected Approval<ByteArrayOutputStream> approval = Approval.of(ByteArrayOutputStream.class)
            .withPathMapper(pathMapper)
            .withConveter(new AbstractStringConverter<ByteArrayOutputStream>() {
                @Override
                protected String getStringForm(ByteArrayOutputStream byteArrayOutputStream) {
                    try {
                        return byteArrayOutputStream.toString(StandardCharsets.UTF_8.toString());
                    } catch (UnsupportedEncodingException e) {
                        throw new RuntimeException("Couldn't convert output", e);
                    }
                }
            })
            .withReporter(Reporters.gvim())
            .build();

    protected InputStream toInputStream(String content) {
        return new ByteArrayInputStream(content.getBytes(StandardCharsets.UTF_8));
    }
}
