algorithm.QRCodeWatermarkingTest.java Source code

Java tutorial

Introduction

Here is the source code for algorithm.QRCodeWatermarkingTest.java

Source

/*
 * This project has received funding from the European Unions Seventh 
 * Framework Programme for research, technological development and 
 * demonstration under grant agreement no FP7-601138 PERICLES.
 * 
 * Copyright 2015 Anna Eggers, State- and Univeristy Library Goettingen
 * 
 * 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 algorithm;

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

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.io.FileUtils;
import org.junit.Test;

import main.TestDataProvider;
import model.RestoredFile;

public class QRCodeWatermarkingTest extends AbstractAlgorithmTest {

    @Test
    public void separateFileTest() {
        try {
            File carrier = TestDataProvider.PNG_FILE;
            File payload = TestDataProvider.TXT_FILE_2;
            QRCodeWatermarking algorithm = new QRCodeWatermarking();
            // Test encapsulation:
            List<File> payloadList = new ArrayList<File>();
            payloadList.add(payload);
            // separate file encapsulation:
            algorithm.setCarrierEncapsulation(false);
            File outputFile = algorithm.encapsulate(carrier, payloadList);
            assertNotNull(outputFile);

            // Test restore - separate file encapsulation:
            List<RestoredFile> restoredFiles = algorithm.restore(outputFile);
            assertEquals(1, restoredFiles.size());
            RestoredFile restoredPayload = restoredFiles.get(0);
            assertNotNull(restoredPayload);
            assertEquals(FileUtils.checksumCRC32(payload), FileUtils.checksumCRC32(restoredPayload));

            // check restoration metadata:
            assertEquals(payload.getName(), restoredPayload.getName());
            assertEquals(algorithm, restoredPayload.algorithm);
            assertTrue(restoredPayload.checksumValid);
            assertTrue(restoredPayload.wasPayload);
            assertFalse(restoredPayload.wasCarrier);
            assertFalse(restoredPayload.relatedFiles.contains(restoredPayload));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Test
    public void onCarrierTest() {
        try {
            File carrier = TestDataProvider.PNG_FILE;
            File payload = TestDataProvider.TXT_FILE;
            QRCodeWatermarking algorithm = new QRCodeWatermarking();
            // Test if it works, if the position is not (0,0):
            algorithm.yPositionField.setText("2");
            algorithm.xPositionField.setText("2");
            // Test encapsulation:
            List<File> payloadList = new ArrayList<File>();
            payloadList.add(payload);
            // on carrier encapsulation:
            algorithm.setCarrierEncapsulation(true);
            File outputFile = algorithm.encapsulate(carrier, payloadList);
            assertNotNull(outputFile);
            // Test restore - on carrier encapsulation:
            List<RestoredFile> restoredFiles = algorithm.restore(outputFile);
            assertEquals(restoredFiles.size(), 2);
            RestoredFile restoredPayload = null;
            RestoredFile restoredCarrier = null;
            if (restoredFiles.get(0).wasPayload) {
                restoredPayload = restoredFiles.get(0);
                restoredCarrier = restoredFiles.get(1);
            } else {
                restoredPayload = restoredFiles.get(1);
                restoredCarrier = restoredFiles.get(0);
            }
            assertNotNull(restoredPayload);
            assertNotNull(restoredCarrier);
            assertEquals(FileUtils.checksumCRC32(payload), FileUtils.checksumCRC32(restoredPayload));
            // carrier is equal to qr code image:
            assertEquals(FileUtils.checksumCRC32(restoredCarrier), FileUtils.checksumCRC32(outputFile));
            // check restoration metadata:
            assertEquals(payload.getName(), restoredPayload.getName());
            assertEquals(carrier.getName(), restoredCarrier.getName());
            assertEquals(algorithm, restoredPayload.algorithm);
            assertEquals(algorithm, restoredCarrier.algorithm);
            assertTrue(restoredPayload.checksumValid);
            assertTrue(restoredPayload.wasPayload);
            assertFalse(restoredPayload.wasCarrier);
            assertTrue(restoredCarrier.wasCarrier);
            assertFalse(restoredCarrier.wasPayload);
            assertFalse(restoredPayload.relatedFiles.contains(restoredPayload));
            assertTrue(restoredPayload.relatedFiles.contains(restoredCarrier));
            assertTrue(restoredCarrier.relatedFiles.contains(restoredPayload));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}