diff --git a/core/XER.cc b/core/XER.cc index 0feb4905511f9930273e3adc30359e1d94ecae86..53fd47ab0269ab48836c429d2af59b71ea4800ff 100644 --- a/core/XER.cc +++ b/core/XER.cc @@ -10,6 +10,7 @@ * Baranyi, Botond * Ormandi, Matyas * Raduly, Csaba + * Szabo, Bence Janos * ******************************************************************************/ #define DEFINE_XER_STRUCT @@ -84,8 +85,10 @@ const char* verify_name(XmlReaderWrap& reader, const XERdescriptor_t& p_td, int } else { if (nsuri == 0) { // XML node has no namespace - TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_TAG, - "Missing namespace '%s'", expected_ns->ns); + if (p_td.my_module->get_ns(p_td.ns_index)->px[0] != 0) { // and module has namespace prefix + TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_TAG, + "Missing namespace '%s'", expected_ns->ns); + } } else { // and there is one, but is it the right one ? if (strcmp(nsuri, expected_ns->ns)) { diff --git a/regression_test/XML/AttributeFormDefault/AttributeFormDefaultWithNs.ttcn b/regression_test/XML/AttributeFormDefault/AttributeFormDefaultWithNs.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..87dab0a02afeefadfdccd86b89f64b592b8faa1c --- /dev/null +++ b/regression_test/XML/AttributeFormDefault/AttributeFormDefaultWithNs.ttcn @@ -0,0 +1,62 @@ +/****************************************************************************** + * 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 + * + ******************************************************************************/ +module AttributeFormDefaultWithNs { + +type component CT {}; + +type record MyType { + integer attr1, + charstring attr2, + charstring field +} +with { + variant (attr1) "attribute"; + variant (attr2) "attribute"; +} + + +external function enc_MyType(in MyType pdu) return octetstring +with { extension "prototype (convert) encode(XER:XER_EXTENDED)" } + +external function dec_MyType(in octetstring stream) return MyType +with { extension "prototype (convert) decode(XER:XER_EXTENDED)" } + +const MyType c_instance := { attr1 := 3, attr2 := "attr", field := "field"}; + +const universal charstring c_result := "<myns:MyType xmlns:myns='schema:AttributeFormDefaultWithoutNs' myns:attr1='3' myns:attr2='attr'>\n\t<myns:field>field</myns:field>\n</myns:MyType>\n\n"; + +testcase tc_test() runs on CT { + var octetstring octet_result := enc_MyType(c_instance) + var universal charstring result := oct2unichar(octet_result); + if (result != c_result) { + setverdict(fail); + } + + var MyType result_instance := dec_MyType(octet_result); + if (result_instance != c_instance) { + setverdict(fail); + } + + setverdict(pass); +} + +control { + execute(tc_test()); +} + +} with { +encode "XML"; +variant "namespace as 'schema:AttributeFormDefaultWithoutNs' prefix 'myns'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +variant "attributeFormQualified"; +variant "elementFormQualified"; +} diff --git a/regression_test/XML/AttributeFormDefault/AttributeFormDefaultWithoutNs.ttcn b/regression_test/XML/AttributeFormDefault/AttributeFormDefaultWithoutNs.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..6a4914797a47525a22a9cf26323186277ba36993 --- /dev/null +++ b/regression_test/XML/AttributeFormDefault/AttributeFormDefaultWithoutNs.ttcn @@ -0,0 +1,62 @@ +/****************************************************************************** + * 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 + * + ******************************************************************************/ +module AttributeFormDefaultWithoutNs { + +type component CT {}; + +type record MyType { + integer attr1, + charstring attr2, + charstring field +} +with { + variant (attr1) "attribute"; + variant (attr2) "attribute"; +} + + +external function enc_MyType(in MyType pdu) return octetstring +with { extension "prototype (convert) encode(XER:XER_EXTENDED)" } + +external function dec_MyType(in octetstring stream) return MyType +with { extension "prototype (convert) decode(XER:XER_EXTENDED)" } + +const MyType c_instance := { attr1 := 3, attr2 := "attr", field := "field"}; + +const universal charstring c_result := "<MyType xmlns='schema:AttributeFormDefaultWithoutNs' attr1='3' attr2='attr'>\n\t<field>field</field>\n</MyType>\n\n"; + +testcase tc_test() runs on CT { + var octetstring octet_result := enc_MyType(c_instance) + var universal charstring result := oct2unichar(octet_result); + if (result != c_result) { + setverdict(fail); + } + + var MyType result_instance := dec_MyType(octet_result); + if (result_instance != c_instance) { + setverdict(fail); + } + + setverdict(pass); +} + +control { + execute(tc_test()); +} + +} with { +encode "XML"; +variant "namespace as 'schema:AttributeFormDefaultWithoutNs'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +variant "attributeFormQualified"; +variant "elementFormQualified"; +} diff --git a/regression_test/XML/AttributeFormDefault/AttributeFormWithNs.ttcn b/regression_test/XML/AttributeFormDefault/AttributeFormWithNs.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..06d487fc765d700045dc5b535d4295ca1db51820 --- /dev/null +++ b/regression_test/XML/AttributeFormDefault/AttributeFormWithNs.ttcn @@ -0,0 +1,62 @@ +/****************************************************************************** + * 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 + * + ******************************************************************************/ +module AttributeFormWithNs { + +type component CT {}; + +type record MyType { + integer attr1, + charstring attr2, + charstring field +} +with { + variant (attr1) "attribute"; + variant (attr1) "form as qualified" + variant (attr2) "attribute"; +} + + +external function enc_MyType(in MyType pdu) return octetstring +with { extension "prototype (convert) encode(XER:XER_EXTENDED)" } + +external function dec_MyType(in octetstring stream) return MyType +with { extension "prototype (convert) decode(XER:XER_EXTENDED)" } + +const MyType c_instance := { attr1 := 3, attr2 := "attr", field := "field"}; + +const universal charstring c_result := "<myns:MyType xmlns:myns='schema:AttributeFormDefaultWithoutNs' myns:attr1='3' attr2='attr'>\n\t<myns:field>field</myns:field>\n</myns:MyType>\n\n"; + +testcase tc_test() runs on CT { + var octetstring octet_result := enc_MyType(c_instance) + var universal charstring result := oct2unichar(octet_result); + if (result != c_result) { + setverdict(fail); + } + + var MyType result_instance := dec_MyType(octet_result); + if (result_instance != c_instance) { + setverdict(fail); + } + + setverdict(pass); +} + +control { + execute(tc_test()); +} + +} with { +encode "XML"; +variant "namespace as 'schema:AttributeFormDefaultWithoutNs' prefix 'myns'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +variant "elementFormQualified"; +} diff --git a/regression_test/XML/AttributeFormDefault/AttributeFormWithoutNs.ttcn b/regression_test/XML/AttributeFormDefault/AttributeFormWithoutNs.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..972d81637c70eb71d442d26c96eebe5dbc0a38b5 --- /dev/null +++ b/regression_test/XML/AttributeFormDefault/AttributeFormWithoutNs.ttcn @@ -0,0 +1,62 @@ +/****************************************************************************** + * 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 + * + ******************************************************************************/ +module AttributeFormWithoutNs { + +type component CT {}; + +type record MyType { + integer attr1, + charstring attr2, + charstring field +} +with { + variant (attr1) "attribute"; + variant (attr1) "form as qualified" + variant (attr2) "attribute"; +} + + +external function enc_MyType(in MyType pdu) return octetstring +with { extension "prototype (convert) encode(XER:XER_EXTENDED)" } + +external function dec_MyType(in octetstring stream) return MyType +with { extension "prototype (convert) decode(XER:XER_EXTENDED)" } + +const MyType c_instance := { attr1 := 3, attr2 := "attr", field := "field"}; + +const universal charstring c_result := "<MyType xmlns='schema:AttributeFormDefaultWithoutNs' attr1='3' attr2='attr'>\n\t<field>field</field>\n</MyType>\n\n"; + +testcase tc_test() runs on CT { + var octetstring octet_result := enc_MyType(c_instance) + var universal charstring result := oct2unichar(octet_result); + if (result != c_result) { + setverdict(fail); + } + + var MyType result_instance := dec_MyType(octet_result); + if (result_instance != c_instance) { + setverdict(fail); + } + + setverdict(pass); +} + +control { + execute(tc_test()); +} + +} with { +encode "XML"; +variant "namespace as 'schema:AttributeFormDefaultWithoutNs'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +variant "elementFormQualified"; +} diff --git a/regression_test/XML/AttributeFormDefault/Makefile b/regression_test/XML/AttributeFormDefault/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..5f7883e17ab75ad587dcb5a6732996a2c75bb579 --- /dev/null +++ b/regression_test/XML/AttributeFormDefault/Makefile @@ -0,0 +1,147 @@ +############################################################################## +# 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 +# +############################################################################## +TOPDIR = ../.. +include ../../Makefile.regression + +# WARNING! This Makefile can be used with GNU make only. +# Other versions of make may report syntax errors in it. + +# +# Do NOT touch this line... +# +.PHONY: all archive check clean dep objects + +.SUFFIXES: .d + +# +# Set these variables... +# + +# Flags for the C++ preprocessor (and makedepend as well): +#CPPFLAGS += + +# Flags for dependency generation +CXXDEPFLAGS = -MM + +# Flags for the C++ compiler: +CXXFLAGS += -Wall + +# Flags for the linker: +#LDFLAGS += + +# Flags for the TTCN-3 and ASN.1 compiler: +#COMPILER_FLAGS += + +# Execution mode: (either ttcn3 or ttcn3-parallel) +TTCN3_LIB = ttcn3$(RT2_SUFFIX)$(DYNAMIC_SUFFIX) + +# +# You may change these variables. Add your files if necessary... +# + +# TTCN-3 modules of this project: +TTCN3_MODULES = AttributeFormDefaultWithoutNs.ttcn AttributeFormDefaultWithNs.ttcn AttributeFormWithoutNs.ttcn AttributeFormWithNs.ttcn + +# ASN.1 modules of this project: +ASN1_MODULES = + +# C++ source & header files generated from the TTCN-3 & ASN.1 modules of +# this project: +GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) $(ASN1_MODULES:.asn=.cc) +GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) +ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) +endif +# C/C++ Source & header files of Test Ports, external functions and +# other modules: +USER_SOURCES = +USER_HEADERS = $(USER_SOURCES:.cc=.hh) + +# Object files of this project that are needed for the executable test suite: +OBJECTS = $(GENERATED_OBJECTS) $(USER_OBJECTS) + +GENERATED_OBJECTS = $(GENERATED_SOURCES:.cc=.o) + +USER_OBJECTS = $(USER_SOURCES:.cc=.o) + +DEPFILES = $(USER_OBJECTS:.o=.d) $(GENERATED_OBJECTS:.o=.d) + +# Other files of the project (Makefile, configuration files, etc.) +# that will be added to the archived source files: +OTHER_FILES = Makefile + +# The name of the executable test suite: +TARGET = AttributeFormDefault + +# +# Rules for building the executable... +# + +all: $(TARGET) ; + +objects: $(OBJECTS) compile; + +$(TARGET): $(OBJECTS) + if $(CXX) $(LDFLAGS) -o $@ $^ \ + -L$(TTCN3_DIR)/lib -l$(TTCN3_LIB) \ + -L$(OPENSSL_DIR)/lib -lcrypto \ + -L$(XMLDIR)/lib $($(PLATFORM)_LIBS); \ + then : ; else $(TTCN3_DIR)/bin/titanver $(OBJECTS); exit 1; fi + +.cc.o .c.o: + $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) -o $@ $< + +.cc.d .c.d: + @echo Creating dependency file for '$<'; set -e; \ + $(CXX) $(CXXDEPFLAGS) $(CPPFLAGS) $(CXXFLAGS) $< \ + | sed 's/\($*\)\.o[ :]*/\1.o $@ : /g' > $@; \ + [ -s $@ ] || rm -f $@ + +$(GENERATED_SOURCES) $(GENERATED_HEADERS): compile + @if [ ! -f $@ ]; then $(RM) compile; $(MAKE) compile; fi + +compile: $(TTCN3_MODULES) $(ASN1_MODULES) + $(TTCN3_COMPILER) $(COMPILER_FLAGS) $^ - $? + touch $@ + +clean distclean: + -$(RM) $(TARGET) $(OBJECTS) $(GENERATED_HEADERS) \ + $(GENERATED_SOURCES) compile $(DEPFILES) \ + tags *.log + +dep: $(GENERATED_SOURCES) $(USER_SOURCES) ; + +ifeq ($(findstring n,$(MAKEFLAGS)),) +ifeq ($(filter clean distclean check compile archive diag,$(MAKECMDGOALS)),) +-include $(DEPFILES) +endif +endif + +diag: + $(TTCN3_COMPILER) -v 2>&1 + $(TTCN3_DIR)/bin/mctr_cli -v 2>&1 + $(CXX) -v 2>&1 + @echo TTCN3_DIR=$(TTCN3_DIR) + @echo OPENSSL_DIR=$(OPENSSL_DIR) + @echo XMLDIR=$(XMLDIR) + @echo PLATFORM=$(PLATFORM) + +# +# Add your rules here if necessary... +# + +run: $(TARGET) + ./$^ config.cfg + diff --git a/regression_test/XML/AttributeFormDefault/config.cfg b/regression_test/XML/AttributeFormDefault/config.cfg new file mode 100644 index 0000000000000000000000000000000000000000..90b264ed1220e0e65c32d3dbc313fffd31d61f37 --- /dev/null +++ b/regression_test/XML/AttributeFormDefault/config.cfg @@ -0,0 +1,16 @@ +############################################################################### +# 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: +# Szabo, Bence Janos +# +############################################################################### +[EXECUTE] +AttributeFormDefaultWithNs.control +AttributeFormDefaultWithoutNs.control +AttributeFormWithoutNs.control +AttributeFormWithNs.control \ No newline at end of file diff --git a/regression_test/XML/Makefile b/regression_test/XML/Makefile index ec0f6cc151ea6d5a1d69ba27da6d847ef9a0049d..f8187f37b9079c8f27a41f033a420b7ea7e42344 100644 --- a/regression_test/XML/Makefile +++ b/regression_test/XML/Makefile @@ -29,7 +29,7 @@ endif XDIRS := $(wildcard $(SHADOWED)) xsdConverter \ HM60295 HN15589 HQ30408 HR49727 HU13380 $(RT2_ONLY) \ -XmlWorkflow tpdValidTest AbstractBlock UseNilLong +XmlWorkflow tpdValidTest AbstractBlock UseNilLong AttributeFormDefault # List of fake targets: .PHONY: all dep clean run $(XDIRS) $(addsuffix /, $(XDIRS)) profile