/**
 * Copyright 2014 Jeroen Mols
 * <p/>
 * 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
 * <p/>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p/>
 * 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.jmolsmobile.landscapevideocapture.configuration;

import android.os.Bundle;
import android.support.test.runner.AndroidJUnit4;

import com.jmolsmobile.landscapevideocapture.configuration.PredefinedCaptureConfigurations.CaptureQuality;
import com.jmolsmobile.landscapevideocapture.configuration.PredefinedCaptureConfigurations.CaptureResolution;

import org.junit.Test;
import org.junit.runner.RunWith;

import static org.junit.Assert.assertEquals;

@RunWith(AndroidJUnit4.class)
public class CaptureConfigurationTest {

    @Test
    public void defaultConfiguration() throws Exception {
        final CaptureConfiguration config = new CaptureConfiguration();

        checkConfiguration(config, CaptureResolution.RES_720P.width, CaptureResolution.RES_720P.height,
                CaptureResolution.RES_720P.getBitrate(CaptureQuality.HIGH), CaptureConfiguration.NO_DURATION_LIMIT,
                CaptureConfiguration.NO_FILESIZE_LIMIT);
    }

    @Test
    public void predefinedConfiguration() throws Exception {
        final CaptureConfiguration config = new CaptureConfiguration(CaptureResolution.RES_2160P, CaptureQuality.LOW);

        checkConfiguration(config, CaptureResolution.RES_2160P.width, CaptureResolution.RES_2160P.height,
                CaptureResolution.RES_2160P.getBitrate(CaptureQuality.LOW), CaptureConfiguration.NO_DURATION_LIMIT,
                CaptureConfiguration.NO_FILESIZE_LIMIT);
    }

    @Test
    public void predefinedConfigurationWithSizeDuration() throws Exception {
        final CaptureConfiguration config = new CaptureConfiguration(CaptureResolution.RES_1080P,
                CaptureQuality.MEDIUM, 50, 10);

        checkConfiguration(config, CaptureResolution.RES_1080P.width, CaptureResolution.RES_1080P.height,
                CaptureResolution.RES_1080P.getBitrate(CaptureQuality.MEDIUM), 50 * 1000, 10 * 1024 * 1024);
    }

    @Test
    public void configurationWithHeightWidthBitrate() throws Exception {
        final CaptureConfiguration config = new CaptureConfiguration(200, 300, 5000000);

        checkConfiguration(config, 200, 300, 5000000, CaptureConfiguration.NO_DURATION_LIMIT,
                CaptureConfiguration.NO_FILESIZE_LIMIT);
    }

    @Test
    public void configurationWithHeightWidthBitrateSizeDuration() throws Exception {
        final CaptureConfiguration config = new CaptureConfiguration(200, 300, 5000000, 1, 100);

        checkConfiguration(config, 200, 300, 5000000, 1 * 1000, 100 * 1024 * 1024);
    }

    @Test
    public void captureConfigurationCanBeParcelized() throws Exception {
        CaptureConfiguration config = new CaptureConfiguration(CaptureResolution.RES_360P, CaptureQuality.MEDIUM);
        Bundle args = new Bundle();
        args.putParcelable("test", config);

        CaptureConfiguration restoredConfiguration = args.getParcelable("test");

        checkConfiguration(restoredConfiguration, config.getVideoWidth(), config.getVideoHeight(), config.getVideoBitrate(),
                config.getMaxCaptureDuration(), config.getMaxCaptureFileSize());
    }

    private void checkConfiguration(final CaptureConfiguration config, int width, int height, int bitrate,
                                    int duration, int filesize) {
        assertEquals(config.getVideoWidth(), width);
        assertEquals(config.getVideoHeight(), height);
        assertEquals(config.getVideoBitrate(), bitrate);
        assertEquals(config.getMaxCaptureDuration(), duration);
        assertEquals(config.getMaxCaptureFileSize(), filesize);
    }
}

@@ -681,22 +681,22 @@
 roid.os.
-Bundle
+Parcel
 ;%0Aimport
@@ -3303,24 +3303,25 @@
 EDIUM);%0A
+%0A
         
 Bundle a
@@ -3316,81 +3316,117 @@
     
-Bundle args = new Bundle();%0A        args.putParcelable(%22test%22, config
+Parcel parcel = Parcel.obtain();%0A        config.writeToParcel(parcel, 0);%0A        parcel.setDataPosition(0
 );%0A
-%0A
     
@@ -3478,33 +3478,60 @@
 n = 
-args.getParcelable(%22test%22
+CaptureConfiguration.CREATOR.createFromParcel(parcel
 );%0A%0A

Round trip test to convert to parcel