/* * Copyright 2015 Skynav, Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY SKYNAV, INC. AND ITS CONTRIBUTORS “AS IS” AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL SKYNAV, INC. OR ITS CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ package com.skynav.cap2tt.app; import java.io.File; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; import java.util.List; import org.junit.Test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.fail; import org.w3c.dom.Document; import org.xmlunit.builder.DiffBuilder; import org.xmlunit.builder.Input; import org.xmlunit.diff.Diff; import com.skynav.ttv.util.TextReporter; import com.skynav.ttv.util.Reporter; public class ConverterTestCases { @Test public void testConversion001Mixed() throws Exception { performConversionTest("test-001-mixed.cap", 0, 0); } @Test public void testConversion002Mixed() throws Exception { performConversionTest("test-002-mixed.cap", 0, 0); } @Test public void testConversion003ScreenAttrItalics() throws Exception { performConversionTest("test-003-screen-attr-italics.cap", 0, 0); } @Test public void testConversion004SpaceBeforeNonTextAttribute() throws Exception { performConversionTest("test-004-space-before-non-text-attribute.cap", 0, 1); } @Test public void testConversion005PlacementAndAlignmentContinuation() throws Exception { performConversionTest("test-005-placement-and-alignment-continuation.cap", 0, 0); } @Test public void testConversion006RegionPositionInitialValue() throws Exception { performConversionTest("test-006-region-position-initial-value.cap", 0, 0); } @Test public void testConversion007TateChuYoko() throws Exception { performConversionTest("test-007-tate-chu-yoko.cap", 0, 0); } @Test public void testConversion008EscapedHalfWidthSpace() throws Exception { performConversionTest("test-008-escaped-half-width-space.cap", 0, 0); } @Test public void testConversion009EscapedFullWidthSpace() throws Exception { performConversionTest("test-009-escaped-full-width-space.cap", 0, 0); } @Test public void testConversion010PlacementContinuation() throws Exception { performConversionTest("test-010-placement-continuation.cap", 0, 0); } @Test public void testConversion011PlacementAndAlignmentContinuation() throws Exception { performConversionTest("test-011-placement-and-alignment-continuation.cap", 0, 0); } @Test public void testConversion012PlacementAndAlignmentRetained() throws Exception { performConversionTest("test-012-placement-and-alignment-retained.cap", 0, 0); } @Test public void testConversion013PlacementAndAlignmentDefault() throws Exception { performConversionTest("test-013-placement-and-alignment-default.cap", 0, 0); } @Test public void testConversion014SniffUTF8NoBOM() throws Exception { performConversionTest("test-014-sniff-utf8-no-bom.cap", 0, 0); } @Test public void testConversion015RubyPosition() throws Exception { performConversionTest("test-015-ruby-position.cap", 0, 0); } @Test public void testConversion016EmphasisPosition() throws Exception { performConversionTest("test-016-emphasis-position.cap", 0, 0); } @Test public void testConversion017EmphasisMixed() throws Exception { performConversionTest("test-017-emphasis-mixed.cap", 0, 0); } @Test public void testConversion018NestedDesignationsStripped() throws Exception { performConversionTest("test-018-nested-designations-stripped.cap", 0, 0); } @Test public void testConversion019SpaceInAnnotationEmphasis() throws Exception { performConversionTest("test-019-space-in-annotation-emphasis.cap", 0, 0); } @Test public void testConversion020SpaceInAnnotationIssue113() throws Exception { performConversionTest("test-020-space-in-annotation-issue-113.cap", 0, 0); } @Test public void testConversion021SpaceInAnnotationIssue112() throws Exception { performConversionTest("test-021-space-in-annotation-issue-112.cap", 0, 0); } @Test public void testConversion022MultipleSpacesIssue110() throws Exception { performConversionTest("test-022-multiple-spaces-issue-110.cap", 0, 0); } @Test public void testConversion023SpaceInAnnotationIssue133Case1() throws Exception { performConversionTest("test-023-space-in-annotation-issue-133-case-1.cap", 0, 0); } @Test public void testConversion024SpaceInAnnotationIssue133Case2() throws Exception { performConversionTest("test-024-space-in-annotation-issue-133-case-2.cap", 0, 0); } @Test public void testConversion025FalseScreenNumberIssue138Case1() throws Exception { performConversionTest("test-025-false-screen-number-issue-138-case-1.cap", 0, 0); } @Test public void testConversion026FalseScreenNumberIssue138Case2() throws Exception { performConversionTest("test-026-false-screen-number-issue-138-case-2.cap", 0, 0); } @Test public void testConversion027FalseScreenNumberIssue138Case3() throws Exception { performConversionTest("test-027-false-screen-number-issue-138-case-3.cap", 0, 0); } @Test public void testConversion028FalseAttributePrefixIssue145() throws Exception { performConversionTest("test-028-false-attribute-prefix-issue-145.cap", 0, 0); } private void performConversionTest(String resourceName, int expectedErrors, int expectedWarnings) { performConversionTest(resourceName, expectedErrors, expectedWarnings, null); } private void performConversionTest(String resourceName, int expectedErrors, int expectedWarnings, String[] additionalOptions) { URL url = getClass().getResource(resourceName); if (url == null) fail("Can't find test resource: " + resourceName + "."); String urlString = url.toString(); URI uri; try { uri = new URI(urlString); } catch (URISyntaxException e) { fail("Bad test resource syntax: " + urlString + "."); return; } List<String> args = new java.util.ArrayList<String>(); args.add("-v"); args.add("-v"); args.add("--warn-on"); args.add("all"); if (expectedErrors >= 0) { args.add("--expect-errors"); args.add(Integer.toString(expectedErrors)); } if (expectedWarnings >= 0) { args.add("--expect-warnings"); args.add(Integer.toString(expectedWarnings)); } args.add("--output-disable"); args.add("--retain-document"); maybeAddConfiguration(args, uri); if (additionalOptions != null) { args.addAll(java.util.Arrays.asList(additionalOptions)); } args.add(urlString); Converter cvt = new Converter(); Reporter reporter = new TextReporter(); Document d = cvt.convert(args, uri, reporter, (Document) null); Converter.Results r = cvt.getResults(urlString); assertEquals(d, r.getDocument()); maybeCheckDifferences(d, uri); int resultCode = r.getCode(); int resultFlags = r.getFlags(); if (resultCode == Converter.RV_SUCCESS) { if ((resultFlags & Converter.RV_FLAG_ERROR_EXPECTED_MATCH) != 0) { fail("Unexpected success with expected error(s) match."); } if ((resultFlags & Converter.RV_FLAG_WARNING_UNEXPECTED) != 0) { fail("Unexpected success with unexpected warning(s)."); } if ((resultFlags & Converter.RV_FLAG_WARNING_EXPECTED_MISMATCH) != 0) { fail("Unexpected success with expected warning(s) mismatch."); } } else if (resultCode == Converter.RV_FAIL) { if ((resultFlags & Converter.RV_FLAG_ERROR_UNEXPECTED) != 0) { fail("Unexpected failure with unexpected error(s)."); } if ((resultFlags & Converter.RV_FLAG_ERROR_EXPECTED_MISMATCH) != 0) { fail("Unexpected failure with expected error(s) mismatch."); } } else fail("Unexpected result code " + resultCode + "."); } private void maybeAddConfiguration(List<String> args, URI u) { String[] components = getComponents(u); if (hasFileScheme(components)) { File f = getConfiguration(components); if (f != null) { try { String p = f.getCanonicalPath(); args.add("--config"); args.add(p); } catch (IOException e) { } } } } private File getConfiguration(String[] components) { File f1 = new File(joinComponents(components, ".config.xml")); if (f1.exists()) return f1; File f2 = new File(joinComponents(components, "test", ".config.xml")); if (f2.exists()) return f2; return null; } private void maybeCheckDifferences(Document d, URI u) { String[] components = getComponents(u); if (hasFileScheme(components)) { File f = new File(joinComponents(components, ".expected.xml")); if (f.exists()) { checkDifferences(d, f); } } } private void checkDifferences(Document d, File f) { Diff diff = DiffBuilder .compare(Input.fromFile(f).build()) .withTest(Input.fromDocument(d).build()) .ignoreWhitespace() .build(); assertFalse(diff.toString(), diff.hasDifferences()); } private String[] getComponents(URI u) { String s = u.getScheme(); String p = u.getPath(); String n, x; int i = p.lastIndexOf('/'); if (i >= 0) { n = p.substring(i + 1); p = p.substring(0, i + 1); } else n = null; int j = n.lastIndexOf('.'); if (j >= 0) { x = n.substring(j); n = n.substring(0, j); } else { x = null; } return new String[] { s, p, n, x }; } private boolean hasFileScheme(String[] components) { return (components != null) && (components[0] != null) && components[0].equals("file"); } private String joinComponents(String[] components, String extension) { assert components != null; return joinComponents(components, components[2], extension); } private String joinComponents(String[] components, String name, String extension) { assert components != null; assert components[1] != null; assert name != null; assert extension != null; StringBuffer sb = new StringBuffer(); sb.append(components[1]); sb.append('/'); sb.append(name); sb.append(extension); return sb.toString(); } }