blob: 3df60effcb9b71a2e7b9b6a79a53c041e31c6069 [file]
/* Copyright 2004 The Apache Software Foundation
*
* 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 ValidatingXSRTests.checkin;
import org.apache.xmlbeans.impl.common.InvalidLexicalValueException;
import org.apache.xmlbeans.impl.util.XsTypeConverter;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertThrows;
/**
* Created by Cezar Andrei (cezar dot andrei at gmail dot com)
* Date: Jul 23, 2009
*/
public class TestUriValidation {
@ParameterizedTest
@ValueSource(strings = {
"http://www.ics.uci.edu/pub/ietf/uri/#Related",
"http://www.ics.uci.edu/pub/ietf/uri/?query=abc#Related",
"http://a/b/c/d;p?q",
"g:h",
"./g",
"g/",
"/g",
"//g",
"?y",
"g?y",
"#s",
"g#s",
"g?y#s",
";x",
"g;x",
"g;x?y#s",
".",
"./",
"..",
"../",
"../g",
"../..",
"../../",
"../../g",
"http:// www .ics.uci.edu /pub/ietf/uri /#Related",
"http:// www .ics.uci.edu /pub/iet%20%20f/uri /#Related",
"http:\\example.com\\examples",
"http:\\\\example.com\\\\examples",
})
void testLexAnyUriValid(String urIs) {
assertNotNull(XsTypeConverter.lexAnyURI(urIs));
}
@ParameterizedTest
@ValueSource(strings = {
// From XQTS cvshead June 2009
"http:\\\\invalid>URI\\someURI", // K2-SeqExprCast-207: Construct an xs:anyURI from an invalid string. However, in F&O 17.1.1, it is said that "For xs:anyURI, the extent to which an implementation validates the lexical form of xs:anyURI is implementation dependent.".
"http://www.example.com/file%GF.html", // K2-SeqExprCast-210: '%' is not a disallowed character and therefore it's not encoded before being considered for RFC 2396 validness.
"foo://", // K2-SeqExprCast-421: Pass an invalid anyURI.
"foo:", // K2-SeqExprCast-421-2: Pass an invalid anyURI.
"%gg", // K2-SeqExprCast-422: Pass an invalid anyURI(#2).
":/cut.jpg", // K2-SeqExprCast-423: no scheme
":/images/cut.png", // K2-SeqExprCast-424: An URI without scheme, combined with a relative directory.
":/", // K2-SeqExprCast-505: ':/' is an invalid URI, no scheme.
"http:%%", // fn-resolve-uri-4: Evaluation of resolve-uri function with an invalid URI value for second argument.
":", // fn-resolve-uri-3: Evaluation of resolve-uri function with an invalid URI value for first argument.
"###Rel",
"##",
"????###",
"###????"
})
void testLexAnyUriInvalid(String urIs) {
assertThrows(InvalidLexicalValueException.class, () -> XsTypeConverter.lexAnyURI(urIs), "URI should be invalid");
}
}