blob: 5c8191600a43a888daa9f4b769113339a54bc7f8 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009 Cloudsmith Inc. and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Cloudsmith Inc. - initial API and implementation
*******************************************************************************/
package org.eclipse.equinox.p2.tests.omniVersion;
import junit.framework.TestCase;
import org.eclipse.equinox.internal.provisional.p2.core.Version;
/**
* Tests format(d) and explicit delimiter chars and strings.
*/
public class FormatDTest extends TestCase {
/**
* Definition of default set of delimiters
*/
private static char[] s_delim = { //
0x20, // ' '
0x21, // !
0x22, // #
0x23, // "
0x24, // '$'
0x25, // '%'
0x26, // '&'
0x27, // '
0x28, // '('
0x29, // ')'
0x2a, // '*'
0x2b, // '+'
0x2c, // '�'
0x2d, // '-'
0x2e, //'.'
0x2f, // '/'
0x3a, // ':'
0x3b, // ';'
0x3c, // '<'
0x3d, // '='
0x3e, // '>'
0x3f, // '?'
0x40, // @ <--- TODO: Debatable - is @ a delimiter of part of a string?
0x5b, // [
0x5c, // \
0x5d, // }
0x5e, // ^
0x5f, // _
0x7b, // {
0x7c, // |
0x7d, // }
0x7e, // ~
};
public void testNumericWithDefaultSet() {
Version v = null;
String formatString = "format(ndn):";
Integer one = Integer.valueOf(1);
Integer two = Integer.valueOf(2);
for (int i = 0; i < s_delim.length; i++) {
StringBuffer buf = new StringBuffer();
buf.append(formatString);
buf.append("1");
buf.append(s_delim[i]);
buf.append("2");
v = Version.parseVersion(buf.toString());
assertNotNull(v);
assertEquals(one, v.getSegment(0));
assertEquals(two, v.getSegment(1));
}
}
public void testStringWithDefaultSet() {
Version v = null;
String formatString = "format(sds):";
String one = "abc";
String two = "def";
for (int i = 0; i < s_delim.length; i++) {
StringBuffer buf = new StringBuffer();
buf.append(formatString);
buf.append(one);
buf.append(s_delim[i]);
buf.append(two);
v = Version.parseVersion(buf.toString());
assertNotNull(v);
assertEquals(one, v.getSegment(0));
assertEquals(two, v.getSegment(1));
}
}
public void testAccepted() {
Version v = Version.parseVersion("format((d=[A-Z];n){3}):A1B22C333");
assertNotNull(v);
assertEquals(Integer.valueOf(1), v.getSegment(0));
assertEquals(Integer.valueOf(22), v.getSegment(1));
assertEquals(Integer.valueOf(333), v.getSegment(2));
assertNotNull(v = Version.parseVersion("format((d=[ABZ];S=[^ABZ];){3}):Aa1Bb22Zc333"));
assertEquals("a1", v.getSegment(0));
assertEquals("b22", v.getSegment(1));
assertEquals("c333", v.getSegment(2));
assertNotNull(v = Version.parseVersion("format((d=[A-Za-z];+n)+):Aa1Bb22Zc333"));
assertEquals(Integer.valueOf(1), v.getSegment(0));
assertEquals(Integer.valueOf(22), v.getSegment(1));
assertEquals(Integer.valueOf(333), v.getSegment(2));
// note that \\ below results in one \ because of java String parsing
assertNotNull(v = Version.parseVersion("format((d=[\\\\[\\]];n)+):[1\\22]333"));
assertEquals(Integer.valueOf(1), v.getSegment(0));
assertEquals(Integer.valueOf(22), v.getSegment(1));
assertEquals(Integer.valueOf(333), v.getSegment(2));
}
public void testRejected() {
Version v = null;
assertNotNull(v = Version.parseVersion("format((d=[^.:];S=[a-z0-9];){3}):/a1;b22=c333"));
assertEquals("a1", v.getSegment(0));
assertEquals("b22", v.getSegment(1));
assertEquals("c333", v.getSegment(2));
}
public void testExplicit() {
Version v = null;
assertNotNull(v = Version.parseVersion("format('epoch='n';''major='n';''minor='n';'):epoch=1;major=22;minor=333;"));
assertEquals(Integer.valueOf(1), v.getSegment(0));
assertEquals(Integer.valueOf(22), v.getSegment(1));
assertEquals(Integer.valueOf(333), v.getSegment(2));
assertNotNull(v = Version.parseVersion("format('epoch='S=[^.];d'major='S=[^.];d'minor='S):epoch=a1ma.major=b22mi.minor=c333"));
assertEquals("a1ma", v.getSegment(0));
assertEquals("b22mi", v.getSegment(1));
assertEquals("c333", v.getSegment(2));
}
public void testCounted() {
// repeated d, char count d, and counted d are equal
Version v1 = Version.parseVersion("format(dddn):///1");
Version v2 = Version.parseVersion("format(d{3}n):///1");
assertNotNull(v1);
assertNotNull(v2);
Integer one = Integer.valueOf(1);
assertEquals(one, v1.getSegment(0));
assertEquals(one, v2.getSegment(0));
}
public void testIllegalCharCount() {
try {
Version.parseVersion("format(d={3};n):///1");
fail("Uncaught error: char count can not be used with 'd'");
} catch (IllegalArgumentException e) {
assertTrue(true);
}
}
public void testIllegalAsPad() {
try {
Version.parseVersion("format(nd=pm;n):1.0");
fail();
} catch (IllegalArgumentException e) {
assertTrue(true);
}
}
public void testIllegalWithDefault() {
try {
Version.parseVersion("format(nd='a';n):1.0");
fail("Uncaught error: 'd' can not have a default value");
} catch (IllegalArgumentException e) {
assertTrue(true);
}
}
/**
* Ignore of d is illegal as d is already ignored.
*/
public void testIllegalIgnore() {
try {
Version.parseVersion("format(nd=!;n):1.0");
fail();
} catch (IllegalArgumentException e) {
assertTrue(true);
}
}
}