--- /dev/null
+/*******************************************************************************
+* Copyright (c) 2000-2016 Ericsson Telecom AB
+*
+* XSD to TTCN-3 Translator version: CRL 113 200/5 R4C
+*
+* 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:
+* Szabo Bence Janos
+*
+*******************************************************************************/
+//
+// File: www_example_org_list_complextype_e.ttcn
+// Description:
+// References:
+// Rev:
+// Prodnr:
+// Updated: Thu Mar 24 11:50:07 2015
+// Contact: http://ttcn.ericsson.se
+//
+////////////////////////////////////////////////////////////////////////////////
+// Generated from file(s):
+// - list_complextype_e.xsd
+// /* xml version = "1.0" */
+// /* targetnamespace = "www.example.org/list/complextype/e" */
+////////////////////////////////////////////////////////////////////////////////
+// Modification header(s):
+//-----------------------------------------------------------------------------
+// Modified by:
+// Modification date:
+// Description:
+// Modification contact:
+//------------------------------------------------------------------------------
+////////////////////////////////////////////////////////////////////////////////
+
+
+module www_example_org_list_complextype {
+
+
+import from XSD all;
+
+
+type record ComplexTypeWithList
+{
+ record length(3) of XSD.Float elementWithList
+}
+with {
+ variant (elementWithList) "name as capitalized";
+ variant (elementWithList) "list";
+};
+
+
+type record length(3) of XSD.Float ElementWithList
+with {
+ variant "list";
+ variant "element";
+};
+
+
+type record ChoiceWithList
+{
+ union {
+ record length(3) of XSD.Float element1,
+ record of XSD.String element2
+ } choice
+}
+with {
+ variant (choice) "untagged";
+ variant (choice.element1) "name as capitalized";
+ variant (choice.element1) "list";
+ variant (choice.element2) "name as capitalized";
+ variant (choice.element2) "list";
+};
+
+
+type XSD.Token Ipv4 (pattern "IPV4")
+with {
+ variant "name as uncapitalized";
+};
+
+
+type XSD.Token Ipv6 (pattern "IPV6")
+with {
+ variant "name as uncapitalized";
+};
+
+
+type record A
+{
+ XSD.String b,
+ XSD.Integer c,
+ record of record {
+ XSD.Integer e optional,
+ record {
+ record length(1 .. infinity) of Ipv4 ipv4addresses,
+ record length(1 .. infinity) of Ipv6 ipv6addresses
+ } f optional,
+ XSD.String g optional
+ } d_list
+}
+with {
+ variant "name as uncapitalized";
+ variant (d_list) "untagged";
+ variant (d_list[-]) "name as 'd'";
+ variant (d_list[-].f.ipv4addresses) "list";
+ variant (d_list[-].f.ipv6addresses) "list";
+};
+
+
+}
+with {
+ encode "XML";
+ variant "namespace as 'www.example.org/list/complextype' prefix 'this'";
+ variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'";
+}
<File path="../xsd/attribute_enumeration_variant.xsd" />
<File path="../xsd/including_module.xsd" />
<File path="../xsd/included_without_namespace.xsd" />
+ <File path="../xsd/list_complextype.xsd" />
</File_Group>
<File_Group name="XmlTest_xsds" >
<File path="../XmlTest_xsds/XmlTest_boolean.xsd" />
<File path="../XmlTest_expectedTtcns/www_XmlTest_org_element_nameInheritance_e.ttcn" />
<File path="../XmlTest_expectedTtcns/www_example_org_attribute_enumeration_variant_e.ttcn" />
<File path="../XmlTest_expectedTtcns/www_example_org_including_module_e.ttcn" />
+ <File path="../XmlTest_expectedTtcns/www_example_org_list_complextype_e.ttcn" />
</File_Group>
<File_Group name="XmlTest_src" >
<File path="xmlTest_Shell.ttcn" />
}
}//tc_
+
+ testcase tc_list_complextype() runs on xmlTest_CT {
+
+ f_shellCommandWithVerdict("xsd2ttcn list_complextype.xsd","",c_shell_successWithoutWarningAndError)
+
+ if(getverdict==pass) {
+ f_compareFiles(
+ "www_example_org_list_complextype_e.ttcn","www_example_org_list_complextype.ttcn", c_numOfDiff_headerAndModuleName);
+ }
+
+ }//tc_
}//ListTest
group UnionTest {
execute(tc_list_encDec());//Passed
execute(tc_integerList());//Passed
execute(tc_list_simpletype());//Passed
+ execute(tc_list_complextype());
//===Float===
execute(tc_float_not_a_number());
--- /dev/null
+<!--
+ Copyright (c) 2000-2016 Ericsson Telecom AB
+ 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:
+ Bence Janos Szabo – initial implementation
+ -->
+<xs:schema xmlns="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="www.example.org/list/complextype"
+ xmlns:this="www.example.org/list/complextype"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ elementFormDefault="unqualified">
+
+
+<xs:complexType name="ComplexTypeWithList">
+ <xs:sequence>
+ <xs:element name="ElementWithList">
+ <xs:simpleType>
+ <xs:restriction>
+ <xs:simpleType>
+ <xs:list itemType="xs:float" />
+ </xs:simpleType>
+ <xs:minLength value="3" />
+ <xs:maxLength value="3" />
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:element>
+ </xs:sequence>
+</xs:complexType>
+
+<xs:element name="ElementWithList">
+ <xs:simpleType>
+ <xs:restriction>
+ <xs:simpleType>
+ <xs:list itemType="xs:float" />
+ </xs:simpleType>
+ <xs:minLength value="3" />
+ <xs:maxLength value="3" />
+ </xs:restriction>
+ </xs:simpleType>
+</xs:element>
+
+<xs:complexType name="ChoiceWithList">
+ <xs:choice>
+ <xs:element name="Element1">
+ <xs:simpleType>
+ <xs:restriction>
+ <xs:simpleType>
+ <xs:list itemType="xs:float" />
+ </xs:simpleType>
+ <xs:minLength value="3" />
+ <xs:maxLength value="3" />
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:element>
+ <xs:element name="Element2">
+ <xs:simpleType>
+ <xs:list itemType="xs:string" />
+ </xs:simpleType>
+ </xs:element>
+ </xs:choice>
+</xs:complexType>
+
+<xs:simpleType name="ipv4">
+ <xs:restriction base="xs:token">
+ <xs:pattern value="IPV4"/>
+ </xs:restriction>
+</xs:simpleType>
+
+<xs:simpleType name="ipv6">
+ <xs:restriction base="xs:token">
+ <xs:pattern value="IPV6"/>
+ </xs:restriction>
+</xs:simpleType>
+
+<xs:complexType name="a">
+ <xs:sequence>
+ <xs:element name="b" type="xs:string"/>
+ <xs:element name="c" type="xs:integer"/>
+ <xs:element name="d" minOccurs="0" maxOccurs="unbounded">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="e" type="xs:integer" minOccurs="0"/>
+ <xs:element name="f" minOccurs="0">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="ipv4addresses" minOccurs="0" maxOccurs="1">
+ <xs:simpleType>
+ <xs:restriction>
+ <xs:simpleType>
+ <xs:list itemType="this:ipv4"/>
+ </xs:simpleType>
+ <xs:minLength value="1"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:element>
+ <xs:element name="ipv6addresses" minOccurs="0" maxOccurs="1">
+ <xs:simpleType>
+ <xs:restriction>
+ <xs:simpleType>
+ <xs:list itemType="this:ipv6"/>
+ </xs:simpleType>
+ <xs:minLength value="1"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:element>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="g" type="xs:string" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+</xs:complexType>
+
+</xs:schema>
, fromAll(false)
, max_alt(0)
, skipback(0)
+, list(false)
, lastType()
, actualPath(empty_string)
, actfield(this)
, fromAll(other.fromAll)
, max_alt(other.max_alt)
, skipback(other.skipback)
+, list(other.list)
, lastType(other.lastType)
, actualPath(other.actualPath)
, actfield(this)
, fromAll(false)
, max_alt(0)
, skipback(0)
+, list(false)
, lastType()
, actualPath(empty_string)
, actfield(this)
, fromAll(false)
, max_alt(0)
, skipback(0)
+, list(false)
, lastType()
, actualPath(empty_string)
, actfield(this)
}
break;
case n_list:
+ if (parent != NULL && parent->basefield == this) {
+ parent->list = true;
+ parent->SimpleType::loadWithValues();
+ parent->basefield = NULL;
+ setInvisible();
+ break;
+ }
case n_length:
case n_minLength:
case n_maxLength:
if (xsdtype == n_sequence) {
skipback = skipback - 1;
}
+
+ //embedded simpletype with list in element
+ if(xsdtype == n_simpleType && list) {
+ list = false;
+ return;
+ }
+
- if ((xsdtype == n_element ||
+ if ( parent != NULL &&
+ (xsdtype == n_element ||
xsdtype == n_complexType ||
xsdtype == n_complexContent ||
xsdtype == n_all ||
xsdtype == n_attributeGroup ||
xsdtype == n_extension ||
xsdtype == n_restriction ||
- xsdtype == n_simpleType ||
+ (xsdtype == n_simpleType && !list) ||
xsdtype == n_simpleContent ||
(xsdtype == n_sequence && skipback < 0)
- )
- && parent != NULL) {
+ )) {
if (!tagNames.empty() && tagNames.back() == parser->getParentTagName()) {
if (nillable && tagNames.back() == n_element) {
parent->modifyValues();
return empty_string;
}
}
+
bool fromAll;
unsigned max_alt;
int skipback;
+ //Special use: true if an element of a complextype is restricted to a list
+ // in a simpletype
+ bool list;
TagName lastType;
Mstring actualPath;
RootType * actfield;
#endif /* COMPLEXTYPE_H_ */
+