net.pms.dlna.DLNAMediaSubtitleTest.java Source code

Java tutorial

Introduction

Here is the source code for net.pms.dlna.DLNAMediaSubtitleTest.java

Source

/*
 * PS3 Media Server, for streaming any medias to your PS3.
 * Copyright (C) 2012  I. Sokolov
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; version 2
 * of the License only.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 */
package net.pms.dlna;

import org.apache.commons.io.FileUtils;
import org.junit.Before;
import org.junit.Test;
import org.slf4j.LoggerFactory;

import ch.qos.logback.classic.LoggerContext;

import java.io.File;
import java.io.FileNotFoundException;

import static net.pms.formats.v2.SubtitleType.*;
import static org.fest.assertions.Assertions.assertThat;
import static org.mozilla.universalchardet.Constants.*;

public class DLNAMediaSubtitleTest {
    private final Class<?> CLASS = DLNAMediaSubtitleTest.class;

    /**
     * Set up testing conditions before running the tests.
     */
    @Before
    public final void setUp() {
        // Silence all log messages from the PMS code that is being tested
        LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory();
        context.reset();
    }

    @Test
    public void testDefaultSubtitleType() {
        DLNAMediaSubtitle dlnaMediaSubtitle = new DLNAMediaSubtitle();
        assertThat(dlnaMediaSubtitle.getType()).isEqualTo(UNKNOWN);
    }

    @Test(expected = IllegalArgumentException.class)
    public void testSetType_withNullSubtitleType() {
        DLNAMediaSubtitle dlnaMediaSubtitle = new DLNAMediaSubtitle();
        dlnaMediaSubtitle.setType(null);
    }

    @Test(expected = FileNotFoundException.class)
    public void testSetExternalFile_noFile() throws Exception {
        DLNAMediaSubtitle dlnaMediaSubtitle = new DLNAMediaSubtitle();
        dlnaMediaSubtitle.setExternalFile(new File("no-such-file.xyz"));
    }

    @Test
    public void testSetExternalFile_UTF() throws Exception {
        File file_utf8 = FileUtils.toFile(CLASS.getResource("../util/russian-utf8-without-bom.srt"));
        DLNAMediaSubtitle sub1 = new DLNAMediaSubtitle();
        sub1.setExternalFile(file_utf8);
        assertThat(sub1.getExternalFileCharacterSet()).isEqualTo(CHARSET_UTF_8);
        assertThat(sub1.isExternalFileUtf8()).isTrue();
        assertThat(sub1.isExternalFileUtf16()).isFalse();
        assertThat(sub1.isExternalFileUtf()).isTrue();

        File file_utf8_2 = FileUtils.toFile(CLASS.getResource("../util/russian-utf8-with-bom.srt"));
        DLNAMediaSubtitle sub2 = new DLNAMediaSubtitle();
        sub2.setExternalFile(file_utf8_2);
        assertThat(sub2.getExternalFileCharacterSet()).isEqualTo(CHARSET_UTF_8);
        assertThat(sub2.isExternalFileUtf8()).isTrue();
        assertThat(sub2.isExternalFileUtf16()).isFalse();
        assertThat(sub2.isExternalFileUtf()).isTrue();

        File file_utf16_le = FileUtils.toFile(CLASS.getResource("../util/russian-utf16-le.srt"));
        DLNAMediaSubtitle sub3 = new DLNAMediaSubtitle();
        sub3.setExternalFile(file_utf16_le);
        assertThat(sub3.getExternalFileCharacterSet()).isEqualTo(CHARSET_UTF_16LE);
        assertThat(sub3.isExternalFileUtf8()).isFalse();
        assertThat(sub3.isExternalFileUtf16()).isTrue();
        assertThat(sub3.isExternalFileUtf()).isTrue();

        File file_utf16_be = FileUtils.toFile(CLASS.getResource("../util/russian-utf16-be.srt"));
        DLNAMediaSubtitle sub4 = new DLNAMediaSubtitle();
        sub4.setExternalFile(file_utf16_be);
        assertThat(sub4.getExternalFileCharacterSet()).isEqualTo(CHARSET_UTF_16BE);
        assertThat(sub4.isExternalFileUtf8()).isFalse();
        assertThat(sub4.isExternalFileUtf16()).isTrue();
        assertThat(sub4.isExternalFileUtf()).isTrue();

        File file_utf32_le = FileUtils.toFile(CLASS.getResource("../util/russian-utf32-le.srt"));
        DLNAMediaSubtitle sub5 = new DLNAMediaSubtitle();
        sub5.setExternalFile(file_utf32_le);
        assertThat(sub5.getExternalFileCharacterSet()).isEqualTo(CHARSET_UTF_32LE);
        assertThat(sub5.isExternalFileUtf8()).isFalse();
        assertThat(sub5.isExternalFileUtf16()).isFalse();
        assertThat(sub5.isExternalFileUtf()).isTrue();

        File file_utf32_be = FileUtils.toFile(CLASS.getResource("../util/russian-utf32-be.srt"));
        DLNAMediaSubtitle sub6 = new DLNAMediaSubtitle();
        sub6.setExternalFile(file_utf32_be);
        assertThat(sub6.getExternalFileCharacterSet()).isEqualTo(CHARSET_UTF_32BE);
        assertThat(sub6.isExternalFileUtf8()).isFalse();
        assertThat(sub6.isExternalFileUtf16()).isFalse();
        assertThat(sub6.isExternalFileUtf()).isTrue();

        File file_utf8_3 = FileUtils.toFile(CLASS.getResource("../util/english-utf8-with-bom.srt"));
        DLNAMediaSubtitle sub7 = new DLNAMediaSubtitle();
        sub7.setExternalFile(file_utf8_3);
        assertThat(sub7.getExternalFileCharacterSet()).isEqualTo(CHARSET_UTF_8);
        assertThat(sub7.isExternalFileUtf8()).isTrue();
        assertThat(sub7.isExternalFileUtf16()).isFalse();
        assertThat(sub7.isExternalFileUtf()).isTrue();
    }

    @Test
    public void testSetExternalFile_charset() throws Exception {
        File file_big5 = FileUtils.toFile(CLASS.getResource("../util/chinese-big5.srt"));
        DLNAMediaSubtitle sub1 = new DLNAMediaSubtitle();
        sub1.setExternalFile(file_big5);
        assertThat(sub1.getExternalFileCharacterSet()).isEqualTo(CHARSET_BIG5);
        assertThat(sub1.isExternalFileUtf8()).isFalse();
        assertThat(sub1.isExternalFileUtf16()).isFalse();
        assertThat(sub1.isExternalFileUtf()).isFalse();

        File file_gb18030 = FileUtils.toFile(CLASS.getResource("../util/chinese-gb18030.srt"));
        DLNAMediaSubtitle sub2 = new DLNAMediaSubtitle();
        sub2.setExternalFile(file_gb18030);
        assertThat(sub2.getExternalFileCharacterSet()).isEqualTo(CHARSET_GB18030);
        assertThat(sub2.isExternalFileUtf8()).isFalse();
        assertThat(sub2.isExternalFileUtf16()).isFalse();
        assertThat(sub2.isExternalFileUtf()).isFalse();

        File file_cp1251 = FileUtils.toFile(CLASS.getResource("../util/russian-cp1251.srt"));
        DLNAMediaSubtitle sub3 = new DLNAMediaSubtitle();
        sub3.setExternalFile(file_cp1251);
        assertThat(sub3.getExternalFileCharacterSet()).isEqualTo(CHARSET_WINDOWS_1251);
        assertThat(sub3.isExternalFileUtf8()).isFalse();
        assertThat(sub3.isExternalFileUtf16()).isFalse();
        assertThat(sub3.isExternalFileUtf()).isFalse();

        File file_ibm866 = FileUtils.toFile(CLASS.getResource("../util/russian-ibm866.srt"));
        DLNAMediaSubtitle sub4 = new DLNAMediaSubtitle();
        sub4.setExternalFile(file_ibm866);
        assertThat(sub4.getExternalFileCharacterSet()).isEqualTo(CHARSET_IBM866);
        assertThat(sub4.isExternalFileUtf8()).isFalse();
        assertThat(sub4.isExternalFileUtf16()).isFalse();
        assertThat(sub4.isExternalFileUtf()).isFalse();

        File file_koi8_r = FileUtils.toFile(CLASS.getResource("../util/russian-koi8-r.srt"));
        DLNAMediaSubtitle sub5 = new DLNAMediaSubtitle();
        sub5.setExternalFile(file_koi8_r);
        assertThat(sub5.getExternalFileCharacterSet()).isEqualTo(CHARSET_KOI8_R);
        assertThat(sub5.isExternalFileUtf8()).isFalse();
        assertThat(sub5.isExternalFileUtf16()).isFalse();
        assertThat(sub5.isExternalFileUtf()).isFalse();
    }

    @Test
    public void testSetExternalFile_bitmapSubs() throws Exception {
        File file_cp1251 = FileUtils.toFile(CLASS.getResource("../util/russian-cp1251.srt"));

        DLNAMediaSubtitle sub1 = new DLNAMediaSubtitle();
        sub1.setType(VOBSUB);
        sub1.setExternalFile(file_cp1251);
        assertThat(sub1.getExternalFileCharacterSet()).isNull();

        DLNAMediaSubtitle sub2 = new DLNAMediaSubtitle();
        sub2.setType(BMP);
        sub2.setExternalFile(file_cp1251);
        assertThat(sub2.getExternalFileCharacterSet()).isNull();

        DLNAMediaSubtitle sub3 = new DLNAMediaSubtitle();
        sub3.setType(DIVX);
        sub3.setExternalFile(file_cp1251);
        assertThat(sub3.getExternalFileCharacterSet()).isNull();

        DLNAMediaSubtitle sub4 = new DLNAMediaSubtitle();
        sub4.setType(PGS);
        sub4.setExternalFile(file_cp1251);
        assertThat(sub4.getExternalFileCharacterSet()).isNull();
    }

    @Test
    public void testSetExternalFile_textSubs() throws Exception {
        File file_cp1251 = FileUtils.toFile(CLASS.getResource("../util/russian-cp1251.srt"));

        DLNAMediaSubtitle sub1 = new DLNAMediaSubtitle();
        sub1.setType(SUBRIP);
        sub1.setExternalFile(file_cp1251);
        assertThat(sub1.getExternalFileCharacterSet()).isEqualTo(CHARSET_WINDOWS_1251);

        DLNAMediaSubtitle sub2 = new DLNAMediaSubtitle();
        sub2.setType(ASS);
        sub2.setExternalFile(file_cp1251);
        assertThat(sub2.getExternalFileCharacterSet()).isEqualTo(CHARSET_WINDOWS_1251);
    }

    @Test
    public void testIsEmbedded() throws Exception {
        File file_cp1251 = FileUtils.toFile(CLASS.getResource("../util/russian-cp1251.srt"));
        DLNAMediaSubtitle sub1 = new DLNAMediaSubtitle();
        sub1.setType(SUBRIP);
        sub1.setExternalFile(file_cp1251);
        assertThat(sub1.isEmbedded()).isFalse();
        assertThat(sub1.isExternal()).isTrue();

        DLNAMediaSubtitle sub2 = new DLNAMediaSubtitle();
        sub2.setType(SUBRIP);
        assertThat(sub2.isEmbedded()).isTrue();
        assertThat(sub2.isExternal()).isFalse();
    }
}