Package com.asakusafw.testdata.generator.excel

Source Code of com.asakusafw.testdata.generator.excel.ExcelTesterRoot

/**
* Copyright 2011-2014 Asakusa Framework Team.
*
* 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.
*/
package com.asakusafw.testdata.generator.excel;

import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.nio.charset.Charset;
import java.util.Arrays;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.junit.Rule;
import org.junit.rules.TemporaryFolder;
import org.junit.rules.TestName;

import com.asakusafw.dmdl.semantics.DmdlSemantics;
import com.asakusafw.dmdl.semantics.ModelDeclaration;
import com.asakusafw.dmdl.semantics.PropertyDeclaration;
import com.asakusafw.dmdl.source.DmdlSourceResource;
import com.asakusafw.dmdl.util.AnalyzeTask;
import com.asakusafw.testdriver.excel.RuleSheetFormat;

/**
* A common test root for this package.
*/
public class ExcelTesterRoot {

    /**
     * temporary folder.
     */
    @Rule
    public TemporaryFolder folder = new TemporaryFolder();

    /**
     * Test name.
     */
    @Rule
    public TestName testName = new TestName();

    /**
     * Loads a DMDL script and returns the specified model.
     * @param dmdl DMDL script name
     * @param model model name
     * @return the specified model in the DMDL script
     * @throws IllegalArgumentException if some parameters were {@code null}
     */
    protected ModelDeclaration load(String dmdl, String model) {
        URL resource = getClass().getResource(dmdl);
        assertThat(dmdl, resource, not(nullValue()));

        DmdlSourceResource repo = new DmdlSourceResource(Arrays.asList(resource), Charset.forName("UTF-8"));
        ClassLoader loader = ExcelTesterRoot.class.getClassLoader();
        AnalyzeTask task = new AnalyzeTask(testName.getMethodName(), loader);
        try {
            DmdlSemantics results = task.process(repo);
            ModelDeclaration decl = results.findModelDeclaration(model);
            assertThat(dmdl + ":" + model, decl, not(nullValue()));
            return decl;
        } catch (IOException e) {
            throw new AssertionError(e);
        }
    }

    /**
     * Verifies data sheet.
     * @param sheet the sheet
     * @param model target model
     */
    protected void checkDataSheet(Sheet sheet, ModelDeclaration model) {
        int index = 0;
        for (PropertyDeclaration property : model.getDeclaredProperties()) {
            assertThat(cell(sheet, 0, index++), is(property.getName().identifier));
        }
    }

    /**
     * Verifies rule sheet.
     * @param sheet the sheet
     * @param model target model
     */
    protected void checkRuleSheet(Sheet sheet, ModelDeclaration model) {
        assertThat(sheet, not(nullValue()));
        for (RuleSheetFormat format : RuleSheetFormat.values()) {
            assertThat(format.name(), cell(sheet, format, 0, 0), is(format.getTitle()));
        }
        assertThat(cell(sheet, RuleSheetFormat.FORMAT, 0, 1), is(RuleSheetFormat.FORMAT_VERSION));
        assertThat(cell(sheet, RuleSheetFormat.TOTAL_CONDITION, 0, 1), not(nullValue()));
        int index = 0;
        for (PropertyDeclaration property : model.getDeclaredProperties()) {
            assertThat(cell(sheet, RuleSheetFormat.PROPERTY_NAME, index + 1, 0), is(property.getName().identifier));
            assertThat(cell(sheet, RuleSheetFormat.VALUE_CONDITION, index + 1, 0), not(nullValue()));
            assertThat(cell(sheet, RuleSheetFormat.NULLITY_CONDITION, index + 1, 0), not(nullValue()));
            index++;
        }
    }

    /**
     * Obtain the cell using {@link RuleSheetFormat}.
     * @param sheet sheet
     * @param format format
     * @param rowOffset row offset from the format
     * @param colOffset column offset from the format
     * @return cell string
     */
    protected String cell(Sheet sheet, RuleSheetFormat format, int rowOffset, int colOffset) {
        return cell(sheet, format.getRowIndex() + rowOffset, format.getColumnIndex() + colOffset);
    }

    /**
     * Obtains the cell.
     * @param sheet the sheet
     * @param rowIndex row index
     * @param columnIndex column index
     * @return cell string
     */
    protected String cell(Sheet sheet, int rowIndex, int columnIndex) {
        Row row = sheet.getRow(rowIndex);
        assertThat(row, not(nullValue()));
        Cell cell = row.getCell(columnIndex);
        if (cell == null || cell.getCellType() == Cell.CELL_TYPE_BLANK) {
            return null;
        }
        assertThat(cell.getCellType(), is(Cell.CELL_TYPE_STRING));
        return cell.getStringCellValue();
    }

    /**
     * Opens the workbook.
     * @param file the target workbook
     * @return the opened workbook
     * @throws IOException if failed
     */
    protected Workbook openWorkbook(File file) throws IOException {
        InputStream in = new FileInputStream(file);
        try {
            if (file.getName().endsWith(".xls")) {
                return new HSSFWorkbook(in);
            } else if (file.getName().endsWith(".xlsx")) {
                return new XSSFWorkbook(in);
            } else {
                throw new IOException(file.getPath());
            }
        } finally {
            in.close();
        }
    }
}
TOP

Related Classes of com.asakusafw.testdata.generator.excel.ExcelTesterRoot

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.