From 3abe9331b564f65690bdf2ebe001271a7011b0e2 Mon Sep 17 00:00:00 2001 From: erititan <elemer.lelik@ericsson.com> Date: Fri, 13 Nov 2015 11:58:22 +0100 Subject: [PATCH] Sync with 5.4.0 --- .gitignore | 5 +- JNI/Makefile | 2 +- JNI/jnimw.cc | 2 +- JNI/jnimw.h | 2 +- JNI/jninativelib.cc | 2 +- ...eclipse_titan_executor_jni_JNIMiddleWare.h | 2 +- Makefile | 2 +- Makefile.cfg | 85 +- Makefile.genrules | 6 +- README.linux | 29 +- common/CharCoding.hh | 2 +- common/JSON_Tokenizer.cc | 55 + common/JSON_Tokenizer.hh | 16 + common/Makefile | 2 +- common/ModuleVersion.cc | 2 +- common/ModuleVersion.hh | 2 +- common/NetworkHandler.cc | 2 +- common/NetworkHandler.hh | 2 +- common/Path2.cc | 2 +- common/Path2.hh | 2 +- common/Quadruple.cc | 2 +- common/Quadruple.hh | 2 +- common/cfg_process_utils.hh | 2 +- common/config_preproc.cc | 2 +- common/config_preproc.h | 2 +- common/config_preproc_la.l | 15 +- common/config_preproc_p.y | 2 +- common/dbgnew.hh | 2 +- common/hostid.c | 2 +- common/license.c | 2 +- common/license.h | 2 +- common/memory.c | 6 +- common/memory.h | 2 +- common/new.cc | 2 +- common/path.c | 2 +- common/path.h | 2 +- common/pattern.hh | 10 +- common/pattern_la.l | 2 +- common/pattern_p.y | 17 +- common/pattern_uni.y | 2 +- common/platform.h | 2 +- common/static_check.h | 2 +- common/ttcn3float.hh | 9 +- common/usage_stats.cc | 2 +- common/usage_stats.hh | 2 +- common/userinfo.c | 2 +- common/userinfo.h | 2 +- common/version.h | 6 +- common/version.py | 2 +- common/version_internal.h | 4 +- compiler2/AST.cc | 25 +- compiler2/AST.hh | 2 +- compiler2/Code.cc | 6 +- compiler2/Code.hh | 2 +- compiler2/CodeGenHelper.cc | 3 +- compiler2/CodeGenHelper.hh | 2 +- compiler2/CompField.cc | 2 +- compiler2/CompField.hh | 2 +- compiler2/CompType.cc | 2 +- compiler2/CompType.hh | 2 +- compiler2/CompilerError.cc | 2 +- compiler2/CompilerError.hh | 2 +- compiler2/Constraint.cc | 2 +- compiler2/Constraint.hh | 2 +- compiler2/EnumItem.cc | 17 +- compiler2/EnumItem.hh | 4 +- compiler2/Identifier.cc | 2 +- compiler2/Identifier.hh | 2 +- compiler2/Int.cc | 2 +- compiler2/Int.hh | 2 +- compiler2/Makefile | 2 +- compiler2/PredefFunc.cc | 2 +- compiler2/PredefFunc.hh | 2 +- compiler2/ProjectGenHelper.cc | 14 +- compiler2/ProjectGenHelper.hh | 4 +- compiler2/Real.cc | 2 +- compiler2/Real.hh | 2 +- compiler2/Setting.cc | 2 +- compiler2/Setting.hh | 2 +- compiler2/SigParam.cc | 2 +- compiler2/SigParam.hh | 2 +- compiler2/Stopwatch.cc | 2 +- compiler2/Stopwatch.hh | 2 +- compiler2/Type.cc | 122 +- compiler2/Type.hh | 4 +- compiler2/TypeCompat.cc | 2 +- compiler2/TypeCompat.hh | 2 +- compiler2/Type_chk.cc | 19 +- compiler2/Type_codegen.cc | 227 +- compiler2/Typestuff.cc | 2 +- compiler2/Typestuff.hh | 2 +- compiler2/Value.cc | 230 +- compiler2/Value.hh | 16 +- compiler2/Valuestuff.cc | 2 +- compiler2/Valuestuff.hh | 2 +- compiler2/XerAttributes.cc | 2 +- compiler2/XerAttributes.hh | 2 +- compiler2/asn1/AST_asn1.cc | 2 +- compiler2/asn1/AST_asn1.hh | 2 +- compiler2/asn1/Block.cc | 2 +- compiler2/asn1/Block.hh | 2 +- compiler2/asn1/Makefile | 2 +- compiler2/asn1/OCSV.cc | 2 +- compiler2/asn1/OCSV.hh | 2 +- compiler2/asn1/Object.cc | 2 +- compiler2/asn1/Object.hh | 2 +- compiler2/asn1/Object0.hh | 2 +- compiler2/asn1/Ref.cc | 2 +- compiler2/asn1/Ref.hh | 2 +- compiler2/asn1/TableConstraint.cc | 2 +- compiler2/asn1/TableConstraint.hh | 2 +- compiler2/asn1/Tag.cc | 2 +- compiler2/asn1/Tag.hh | 2 +- compiler2/asn1/TokenBuf.cc | 2 +- compiler2/asn1/TokenBuf.hh | 2 +- compiler2/asn1/Type_parse.cc | 2 +- compiler2/asn1/asn1.hh | 2 +- compiler2/asn1/asn1_preparser.h | 2 +- compiler2/asn1/asn1_preparser.l | 2 +- compiler2/asn1/asn1la.l | 4 +- compiler2/asn1/asn1p.y | 2 +- compiler2/asn1/asn1p_old.h | 2 +- compiler2/compiler.1 | 20 +- compiler2/datatypes.h | 15 +- compiler2/encdec.c | 2 +- compiler2/encdec.h | 2 +- compiler2/enum.c | 181 +- compiler2/enum.h | 2 +- compiler2/error.h | 2 +- compiler2/functionref.c | 70 +- compiler2/functionref.h | 2 +- compiler2/main.cc | 23 +- compiler2/main.hh | 5 +- compiler2/makefile.c | 148 +- compiler2/map.hh | 2 +- compiler2/record.c | 558 +++- compiler2/record.h | 2 +- compiler2/record_of.c | 317 +- compiler2/record_of.h | 2 +- compiler2/stack.hh | 2 +- compiler2/string.cc | 2 +- compiler2/string.hh | 2 +- compiler2/subtype.cc | 266 +- compiler2/subtype.hh | 43 +- compiler2/subtypestuff.cc | 2 +- compiler2/subtypestuff.hh | 2 +- compiler2/tcov.xsd | 2 +- compiler2/tcov.xsl | 2 +- compiler2/tcov2lcov.cc | 2 +- compiler2/tcov2lcov.hh | 2 +- compiler2/titanver | 2 +- compiler2/ttcn3/AST_ttcn3.cc | 68 +- compiler2/ttcn3/AST_ttcn3.hh | 8 +- compiler2/ttcn3/ArrayDimensions.cc | 2 +- compiler2/ttcn3/ArrayDimensions.hh | 2 +- compiler2/ttcn3/Attributes.cc | 12 +- compiler2/ttcn3/Attributes.hh | 2 +- compiler2/ttcn3/BerAST.cc | 2 +- compiler2/ttcn3/BerAST.hh | 2 +- compiler2/ttcn3/ILT.cc | 2 +- compiler2/ttcn3/ILT.hh | 2 +- compiler2/ttcn3/JsonAST.cc | 32 +- compiler2/ttcn3/JsonAST.hh | 17 +- compiler2/ttcn3/Makefile | 2 +- compiler2/ttcn3/PatternString.cc | 52 +- compiler2/ttcn3/PatternString.hh | 5 +- compiler2/ttcn3/RawAST.cc | 10 +- compiler2/ttcn3/RawAST.hh | 3 +- compiler2/ttcn3/Statement.cc | 144 +- compiler2/ttcn3/Statement.hh | 14 +- compiler2/ttcn3/Templatestuff.cc | 20 +- compiler2/ttcn3/Templatestuff.hh | 8 +- compiler2/ttcn3/TextAST.cc | 2 +- compiler2/ttcn3/TextAST.hh | 2 +- compiler2/ttcn3/Ttcn2Json.cc | 12 + compiler2/ttcn3/Ttcn2Json.hh | 8 + compiler2/ttcn3/TtcnTemplate.cc | 806 ++++- compiler2/ttcn3/TtcnTemplate.hh | 16 +- compiler2/ttcn3/Ttcnstuff.cc | 2 +- compiler2/ttcn3/Ttcnstuff.hh | 2 +- compiler2/ttcn3/charstring_la.l | 6 +- compiler2/ttcn3/coding_attrib_la.l | 2 +- compiler2/ttcn3/coding_attrib_p.y | 2 +- compiler2/ttcn3/compiler.c | 2 +- compiler2/ttcn3/compiler.h | 3 +- compiler2/ttcn3/compiler.l | 7 +- compiler2/ttcn3/compiler.y | 47 +- compiler2/ttcn3/comptype_attrib_la.l | 2 +- compiler2/ttcn3/port.c | 58 +- compiler2/ttcn3/port.h | 2 +- compiler2/ttcn3/pstring_la.l | 38 +- compiler2/ttcn3/rawAST.l | 19 +- compiler2/ttcn3/rawAST.y | 37 +- compiler2/ttcn3/rawASTspec.h | 2 +- compiler2/ttcn3/signature.c | 69 +- compiler2/ttcn3/signature.h | 2 +- compiler2/ttcn3/ttcn3_preparser.h | 2 +- compiler2/ttcn3/ttcn3_preparser.l | 2 +- compiler2/ttcn3_makefilegen.1 | 30 +- compiler2/union.c | 270 +- compiler2/union.h | 2 +- compiler2/ustring.cc | 57 +- compiler2/ustring.hh | 5 +- compiler2/vector.hh | 2 +- compiler2/xpather.cc | 96 +- compiler2/xpather.h | 11 +- core/.gitignore | 2 + core/ASN_Any.cc | 2 +- core/ASN_Any.hh | 2 +- core/ASN_CharacterString.cc | 896 ++++-- core/ASN_CharacterString.hh | 66 +- core/ASN_EmbeddedPDV.cc | 896 ++++-- core/ASN_EmbeddedPDV.hh | 66 +- core/ASN_External.cc | 833 +++-- core/ASN_External.hh | 68 +- core/ASN_Null.cc | 109 +- core/ASN_Null.hh | 22 +- core/Addfunc.cc | 2 +- core/Addfunc.hh | 2 +- core/Array.cc | 2 +- core/Array.hh | 235 +- core/BER.cc | 2 +- core/BER.hh | 2 +- core/Basetype.cc | 24 +- core/Basetype.hh | 17 +- core/Bitstring.cc | 183 +- core/Bitstring.hh | 19 +- core/Boolean.cc | 113 +- core/Boolean.hh | 20 +- core/Charstring.cc | 187 +- core/Charstring.hh | 25 +- core/Communication.cc | 2 +- core/Communication.hh | 2 +- core/Component.cc | 128 +- core/Component.hh | 20 +- core/Default.cc | 112 +- core/Default.hh | 22 +- core/Encdec.cc | 7 +- core/Encdec.hh | 2 +- core/Error.cc | 13 +- core/Error.hh | 2 +- core/Event_Handler.hh | 2 +- core/Fd_And_Timeout_User.hh | 2 +- core/Float.cc | 210 +- core/Float.hh | 27 +- core/Hexstring.cc | 189 +- core/Hexstring.hh | 19 +- core/ILoggerPlugin.hh | 2 +- core/Integer.cc | 594 +++- core/Integer.hh | 20 +- core/JSON.cc | 2 +- core/JSON.hh | 40 +- core/LegacyLogger.cc | 2 +- core/LegacyLogger.hh | 2 +- core/Logger.cc | 2 +- core/Logger.hh | 2 +- core/LoggerPlugin.cc | 2 +- core/LoggerPlugin.hh | 2 +- core/LoggerPluginManager.cc | 2 +- core/LoggerPluginManager.hh | 2 +- core/LoggerPlugin_dynamic.cc | 2 +- core/LoggerPlugin_static.cc | 2 +- core/LoggingBits.cc | 2 +- core/LoggingBits.hh | 2 +- core/LoggingParam.hh | 2 +- core/Makefile | 46 +- core/Message_types.hh | 2 +- core/Module_list.cc | 61 +- core/Module_list.hh | 7 +- core/Objid.cc | 113 +- core/Objid.hh | 20 +- core/Octetstring.cc | 182 +- core/Octetstring.hh | 18 +- core/Optional.hh | 26 +- core/Parallel_main.cc | 9 +- core/Param_Types.cc | 217 +- core/Param_Types.hh | 139 +- core/Parameters.h | 2 +- core/Port.cc | 2 +- core/Port.hh | 2 +- core/ProfMerge_main.cc | 231 ++ core/Profiler.cc | 1463 +-------- core/Profiler.hh | 89 +- core/ProfilerTools.cc | 1412 +++++++++ core/ProfilerTools.hh | 163 + core/RAW.cc | 2 +- core/RAW.hh | 4 +- core/RInt.cc | 2 +- core/RInt.hh | 2 +- core/Runtime.cc | 7 +- core/Runtime.hh | 4 +- core/Single_main.cc | 2 +- core/Snapshot.cc | 2 +- core/Snapshot.hh | 2 +- core/String_struct.hh | 2 +- core/Struct_of.cc | 81 +- core/Struct_of.hh | 17 +- core/TCov.cc | 2 +- core/TCov.hh | 2 +- core/TEXT.cc | 2 +- core/TEXT.hh | 2 +- core/TTCN3.hh | 2 +- core/Template.cc | 602 +++- core/Template.hh | 83 +- core/Textbuf.cc | 79 +- core/Textbuf.hh | 2 +- core/Timer.cc | 2 +- core/Timer.hh | 2 +- core/TitanLoggerApi.xsd | 2 +- core/TitanLoggerControl.ttcn | 2 +- core/TitanLoggerControlImpl.cc | 2 +- core/Types.h | 2 +- core/Universal_charstring.cc | 241 +- core/Universal_charstring.hh | 24 +- core/VIRAG.asn | 2 +- core/Vector.hh | 18 +- core/Verdicttype.cc | 113 +- core/Verdicttype.hh | 20 +- core/XER.cc | 2 +- core/XER.hh | 2 +- core/XmlReader.cc | 2 +- core/XmlReader.hh | 2 +- core/config_process.l | 118 +- core/config_process.y | 366 +-- core/gccversion.c | 2 +- core/license_gen.c | 2 +- core/simplify.pl | 2 +- core/ttcn3_profmerge.1 | 98 + core2/Basetype2.cc | 481 ++- core2/Makefile | 2 +- doc/parallelarch/Makefile | 2 +- doc/parallelarch/state_mach_conn_endpoint.dot | 2 +- doc/parallelarch/state_mach_conn_mc.dot | 2 +- doc/parallelarch/state_mach_hc_mc.dot | 2 +- doc/parallelarch/state_mach_mapping_mc.dot | 2 +- doc/parallelarch/state_mach_mc.dot | 2 +- doc/parallelarch/state_mach_ptc_mc.dot | 2 +- etc/Makefile | 2 +- etc/TXDSample.xml | 2 +- etc/autotest/freshbuild.sh | 2 +- etc/autotest/mountall.sh | 2 +- etc/autotest/product_handler.py | 2 +- etc/autotest/titan_builder.py | 2 +- etc/autotest/titan_builder.sh | 2 +- etc/autotest/titan_builder_cfg.py | 2 +- etc/autotest/titan_publisher.py | 2 +- etc/howto/pqb_stats_howto.txt | 2 +- etc/howto/titan_release_howto.txt | 2 +- etc/scripts/cfg_msg_maker.py | 2 +- etc/scripts/stacklogger.pl | 2 +- etc/scripts/tpd_graph_xml2dot.py | 2 +- etc/scripts/ttcn3_archive.pl | 2 +- etc/solaris/build.sh | 2 +- etc/solaris/get.sh | 2 +- etc/solaris/path.sh | 2 +- etc/solaris/titan.sh | 2 +- etc/xsd/Junit.xsd | 2 +- etc/xsd/TPD.xsd | 10 +- .../BER_EncDec/BER_EncDec_TD.fast_script | 2 +- function_test/BER_EncDec/BER_EncDec_TD.script | 2 +- function_test/BER_EncDec/Makefile | 8 +- function_test/BER_EncDec/Temp.cfg | 2 +- .../Config_Parser/Logging_1_TD.script | 88 +- .../Config_Parser/OrderedInclude.script | 2 +- .../PreprocessingCfgFiles_TD.script | 18 +- function_test/Config_Parser/begin_script.sh | 2 +- function_test/Config_Parser/end_script.sh | 2 +- function_test/Config_Parser/extfunc.cc | 2 +- function_test/Makefile | 2 +- function_test/RAW_EncDec/Makefile | 8 +- .../RAW_EncDec/RAW_EncDec_TD.fast_script | 2 +- function_test/RAW_EncDec/RAW_EncDec_TD.script | 2 +- function_test/RAW_EncDec/Temp.cfg | 2 +- function_test/README.txt | 2 +- .../Semantic_Analyser/ASN_SA_1_TD.script | 2 +- .../ASN_SA_asn1adhoc_TD.script | 2 +- .../Semantic_Analyser/Makefile.semantic | 4 +- .../Semantic_Analyser/SA_6_TD.script | 2 +- .../Semantic_Analyser/TTCN3_SA_10_TD.script | 2 +- .../Semantic_Analyser/TTCN3_SA_11_TD.script | 2 +- .../Semantic_Analyser/TTCN3_SA_13_TD.script | 2 +- .../Semantic_Analyser/TTCN3_SA_1_TD.script | 2 +- .../Semantic_Analyser/TTCN3_SA_3_TD.script | 2 +- .../Semantic_Analyser/TTCN3_SA_4_TD.script | 2 +- .../Semantic_Analyser/TTCN3_SA_5_TD.script | 2 +- .../Semantic_Analyser/TTCN3_SA_6_TD.script | 6 +- .../Semantic_Analyser/TTCN3_SA_7_TD.script | 2 +- .../Semantic_Analyser/TTCN3_SA_9_TD.script | 2 +- .../TTCN3_SA_ttcn3adhoc_TD.script | 2 +- function_test/Semantic_Analyser/cw.pl | 2 +- .../Semantic_Analyser/defpars/HQ30279A.ttcn | 2 +- .../Semantic_Analyser/defpars/Makefile | 2 +- .../defpars/bende_fn_SE.ttcn | 2 +- .../Semantic_Analyser/defpars/bende_t_SE.ttcn | 2 +- .../Semantic_Analyser/encode/Makefile | 2 +- .../Semantic_Analyser/encode/encode_SE.ttcn | 2 +- .../Semantic_Analyser/float/Makefile | 2 +- .../Semantic_Analyser/float/subtype_OK.ttcn | 2 +- .../Semantic_Analyser/float/subtype_SE.ttcn | 2 +- function_test/Semantic_Analyser/harness.pl | 2 +- .../import_of_iports/A_CYCLIC.ttcn | 2 +- .../import_of_iports/A_SE.ttcn | 2 +- .../import_of_iports/B_APR_SE.ttcn | 2 +- .../import_of_iports/B_APU_SE.ttcn | 2 +- .../import_of_iports/B_CEFR_SE.ttcn | 2 +- .../import_of_iports/B_CYCLIC.ttcn | 2 +- .../import_of_iports/B_SE.ttcn | 2 +- .../import_of_iports/C_BPR_SE.ttcn | 2 +- .../import_of_iports/C_BPU_SE.ttcn | 2 +- .../import_of_iports/C_CYCLIC.ttcn | 2 +- .../import_of_iports/C_FR_SE.ttcn | 2 +- .../import_of_iports/C_SE.ttcn | 2 +- .../import_of_iports/D_CPR_SE.ttcn | 2 +- .../import_of_iports/D_CPU_SE.ttcn | 2 +- .../import_of_iports/D_FR_SE.ttcn | 2 +- .../import_of_iports/D_SE.ttcn | 2 +- .../import_of_iports/E_DPR_SE.ttcn | 2 +- .../import_of_iports/E_DPU_SE.ttcn | 2 +- .../import_of_iports/E_FR_SE.ttcn | 2 +- .../import_of_iports/E_SE.ttcn | 2 +- .../import_of_iports/Makefile | 2 +- .../Semantic_Analyser/options/quitter3.ttcn | 2 +- .../Semantic_Analyser/options/quitter3Q1.ttcn | 2 +- .../options/quitter3Q1S.ttcn | 2 +- .../Semantic_Analyser/options/quitter3Q2.ttcn | 2 +- .../options/quitter3Q2S.ttcn | 2 +- .../Semantic_Analyser/options/quitter3S.ttcn | 2 +- .../Semantic_Analyser/param/Makefile | 2 +- .../Semantic_Analyser/param/param_SE.ttcn | 2 +- .../template_restrictions/.gitignore | 2 + .../template_restrictions/Makefile | 8 + .../template_restrictions/TempRes_SE.ttcn | 56 + .../Semantic_Analyser/template_restrictions/t | 9 + .../ver/CRL_111_222_3_R2D_OK.ttcn | 2 +- .../ver/CRL_111_222_R2D_OK.ttcn | 2 +- function_test/Semantic_Analyser/ver/Makefile | 2 +- .../Semantic_Analyser/ver/R2D2_SE.ttcn | 2 +- .../Semantic_Analyser/ver/R2D_SE.ttcn | 2 +- .../Semantic_Analyser/ver/c3p0_SE.ttcn | 2 +- .../Semantic_Analyser/ver/dup_ver_SE.ttcn | 2 +- .../Semantic_Analyser/ver/high_titan_SE.ttcn | 6 +- .../Semantic_Analyser/ver/importer_SE.ttcn | 2 +- .../Semantic_Analyser/ver/new_ver_SE.ttcn | 2 +- .../Semantic_Analyser/ver/notimported_SE.ttcn | 2 +- .../Semantic_Analyser/ver/noversion_SE.ttcn | 2 +- .../Semantic_Analyser/ver/unreleased_SE.ttcn | 2 +- .../Semantic_Analyser/ver/ver_OK.ttcn | 2 +- .../Semantic_Analyser/ver/ver_highest_OK.ttcn | 2 +- .../ver/ver_newstyle_OK.ttcn | 2 +- .../ver/ver_newstyle_per1_template_OK.ttcn | 2 +- .../ver/ver_newstyle_template_OK.ttcn | 2 +- function_test/Semantic_Analyser/xer/Makefile | 2 +- .../xer/aa_not_in_record_SE.ttcn | 2 +- .../xer/aa_not_string_SE.ttcn | 2 +- .../Semantic_Analyser/xer/aa_twice_SE.ttcn | 2 +- .../Semantic_Analyser/xer/aa_untagged_SE.ttcn | 2 +- .../Semantic_Analyser/xer/ae_clash_SE.ttcn | 2 +- .../xer/ae_wrong_type_SE.ttcn | 2 +- .../xer/atr_not_on_record_SE.ttcn | 2 +- .../xer/atr_untagged_SE.ttcn | 2 +- .../Semantic_Analyser/xer/attribs_OK.ttcn | 2 +- .../Semantic_Analyser/xer/b64_clash_SE.ttcn | 2 +- .../xer/b64_wrong_type_SE.ttcn | 2 +- .../Semantic_Analyser/xer/bogus_SE.ttcn | 2 +- .../Semantic_Analyser/xer/decimal_SE.ttcn | 2 +- .../Semantic_Analyser/xer/dfe_charenc_OK.ttcn | 2 +- .../Semantic_Analyser/xer/dfe_clash_SE.ttcn | 2 +- .../Semantic_Analyser/xer/dfe_int_OK.ttcn | 2 +- .../Semantic_Analyser/xer/disorder_SE.ttcn | 2 +- .../Semantic_Analyser/xer/dup_text_SE.ttcn | 2 +- .../Semantic_Analyser/xer/dupenum_SE.ttcn | 2 +- .../xer/emb_first_opt_SE.ttcn | 2 +- .../xer/emb_first_untag_SE.ttcn | 2 +- .../xer/emb_not_record_SE.ttcn | 2 +- .../Semantic_Analyser/xer/emb_untag_SE.ttcn | 2 +- .../xer/emb_wrong_first_SE.ttcn | 2 +- .../Semantic_Analyser/xer/encdec_OK.ttcn | 2 +- .../Semantic_Analyser/xer/ifq_SE.ttcn | 2 +- .../Semantic_Analyser/xer/list_clash_SE.ttcn | 2 +- .../xer/list_not_recof_SE.ttcn | 2 +- .../Semantic_Analyser/xer/namedup1_SE.ttcn | 2 +- .../Semantic_Analyser/xer/namedup2_SE.ttcn | 2 +- .../Semantic_Analyser/xer/no_text_all_SE.ttcn | 2 +- .../xer/ns_empty_prefix_dup_OK.ttcn | 2 +- .../xer/ns_prefix_dup_OK.ttcn | 2 +- .../Semantic_Analyser/xer/ns_xml_SE.ttcn | 2 +- .../Semantic_Analyser/xer/qname_SE.ttcn | 2 +- .../Semantic_Analyser/xer/qname_attr_OK.ttcn | 2 +- .../Semantic_Analyser/xer/recur_SE.ttcn | 2 +- .../Semantic_Analyser/xer/soapy.ttcn | 2 +- .../xer/text_clash_use_number_SE.ttcn | 2 +- .../xer/text_no_enum_SE.ttcn | 2 +- .../xer/text_over_text_SE.ttcn | 2 +- .../Semantic_Analyser/xer/untag2_SE.ttcn | 2 +- .../xer/untagged_charenc_OK.ttcn | 2 +- .../xer/untagged_charenc_another_SE.ttcn | 2 +- .../xer/untagged_charenc_optional_SE.ttcn | 2 +- .../xer/untagged_noncharenc_SE.ttcn | 2 +- .../xer/untagged_parent_not_record_SE.ttcn | 2 +- .../xer/untagged_parent_untagged_SE.ttcn | 2 +- .../xer/uo_attribonly_SE.ttcn | 2 +- .../Semantic_Analyser/xer/uo_no_recof_SE.ttcn | 2 +- .../xer/usenil_clash_SE.ttcn | 2 +- .../xer/usenil_comp_clash_SE.ttcn | 2 +- .../xer/usenil_no_controlns_SE.ttcn | 2 +- .../xer/usenil_no_optional_SE.ttcn | 2 +- .../xer/usenil_not_attr_SE.ttcn | 2 +- .../xer/usenil_not_record_SE.ttcn | 2 +- .../xer/usetype_clash_SE.ttcn | 2 +- .../xer/usetype_not_union_SE.ttcn | 2 +- .../xer/usetype_with_untagged_SE.ttcn | 2 +- .../xer/usetype_with_usetype_SE.ttcn | 2 +- .../xer/useunion_not_union_SE.ttcn | 2 +- .../xer/useunion_with_non_charenc_SE.ttcn | 2 +- .../xer/useunion_with_useunion_SE.ttcn | 2 +- function_test/Text_EncDec/Makefile | 8 +- .../Text_EncDec/TEXT_1_TD.fast_script | 2 +- function_test/Text_EncDec/TEXT_1_TD.script | 2 +- function_test/Text_EncDec/Temp.cfg | 2 +- function_test/Tools/SAtester.pl | 2 +- function_test/XER_EncDec/Makefile | 8 +- function_test/XER_EncDec/Temp.cfg | 2 +- function_test/XER_EncDec/XER_EncDec_TD.script | 2 +- .../doc/TTCN3_Executor_TestReport.doc | Bin 1106432 -> 1143296 bytes hello/Makefile | 4 +- hello/MyExample.cfg | 3 +- hello/MyExample.ttcn | 3 +- hello/PCOType.cc | 2 +- hello/PCOType.hh | 2 +- hello/hello_world.ttcn | 79 + help/Makefile | 2 +- help/chm_refact.sh | 2 +- help/info/BNF.html | 2 +- help/info/action.html | 2 +- help/info/activate.html | 2 +- help/info/address.html | 2 +- help/info/alive.html | 2 +- help/info/all.html | 2 +- help/info/alt.html | 2 +- help/info/altstep.html | 2 +- help/info/and.html | 2 +- help/info/and4b.html | 2 +- help/info/any.html | 2 +- help/info/anytype.html | 4 +- help/info/apply.html | 71 + help/info/bit2hex.html | 4 +- help/info/bit2int.html | 2 +- help/info/bit2oct.html | 2 +- help/info/bit2str.html | 2 +- help/info/bitstring.html | 2 +- help/info/boolean.html | 2 +- help/info/break.html | 2 +- help/info/call.html | 2 +- help/info/case.html | 2 +- help/info/catch.html | 2 +- help/info/char.html | 2 +- help/info/char2int.html | 2 +- help/info/char2oct.html | 2 +- help/info/charstring.html | 2 +- help/info/check.html | 2 +- help/info/clear.html | 2 +- help/info/complement.html | 2 +- help/info/component.html | 2 +- help/info/connect.html | 2 +- help/info/const.html | 2 +- help/info/continue.html | 2 +- help/info/control.html | 2 +- help/info/create.html | 2 +- help/info/deactivate.html | 2 +- help/info/decode_base64.html | 2 +- help/info/decvalue.html | 2 +- help/info/default.html | 4 +- help/info/derefers.html | 72 + help/info/disconnect.html | 4 +- help/info/display.html | 2 +- help/info/do.html | 2 +- help/info/done.html | 2 +- help/info/else.html | 2 +- help/info/encode.html | 2 +- help/info/encode_base64.html | 2 +- help/info/encvalue.html | 2 +- help/info/enumerated.html | 2 +- help/info/error.html | 2 +- help/info/except.html | 2 +- help/info/exception.html | 2 +- help/info/execute.html | 2 +- help/info/extension.html | 2 +- help/info/external.html | 2 +- help/info/fail.html | 2 +- help/info/false.html | 2 +- help/info/float.html | 2 +- help/info/float2int.html | 2 +- help/info/float2str.html | 2 +- help/info/for.html | 2 +- help/info/friend.html | 2 +- help/info/from.html | 2 +- help/info/function.html | 2 +- help/info/get_stringencoding.html | 2 +- help/info/getcall.html | 2 +- help/info/getreply.html | 2 +- help/info/getverdict.html | 2 +- help/info/goto.html | 2 +- help/info/group.html | 2 +- help/info/hex2bit.html | 2 +- help/info/hex2int.html | 2 +- help/info/hex2oct.html | 2 +- help/info/hex2str.html | 2 +- help/info/hexstring.html | 2 +- help/info/if.html | 2 +- help/info/ifpresent.html | 2 +- help/info/import.html | 2 +- help/info/in.html | 2 +- help/info/inconc.html | 2 +- help/info/infinity.html | 2 +- help/info/inout.html | 2 +- help/info/int2bit.html | 2 +- help/info/int2char.html | 59 +- help/info/int2enum.html | 91 + help/info/int2float.html | 19 +- help/info/int2hex.html | 2 +- help/info/int2oct.html | 2 +- help/info/int2str.html | 2 +- help/info/int2unichar.html | 2 +- help/info/integer.html | 2 +- help/info/interleave.html | 2 +- help/info/isbound.html | 2 +- help/info/ischosen.html | 2 +- help/info/ispresent.html | 2 +- help/info/isvalue.html | 2 +- help/info/kill.html | 2 +- help/info/killed.html | 2 +- help/info/label.html | 2 +- help/info/language.html | 2 +- help/info/length.html | 2 +- help/info/lengthof.html | 2 +- help/info/log.html | 4 +- help/info/log2str.html | 67 + help/info/map.html | 2 +- help/info/match.html | 2 +- help/info/message.html | 2 +- help/info/mixed.html | 2 +- help/info/mod.html | 2 +- help/info/modifies.html | 2 +- help/info/module.html | 2 +- help/info/modulepar.html | 2 +- help/info/mtc.html | 2 +- help/info/noblock.html | 2 +- help/info/none.html | 2 +- help/info/not.html | 2 +- help/info/not4b.html | 2 +- help/info/nowait.html | 2 +- help/info/null.html | 2 +- help/info/objid.html | 2 +- help/info/oct2bit.html | 2 +- help/info/oct2char.html | 2 +- help/info/oct2hex.html | 2 +- help/info/oct2int.html | 2 +- help/info/oct2str.html | 2 +- help/info/oct2unichar.html | 2 +- help/info/octetstring.html | 2 +- help/info/of.html | 2 +- help/info/omit.html | 2 +- help/info/on.html | 2 +- help/info/operators.html | 2 +- help/info/optional.html | 2 +- help/info/or.html | 2 +- help/info/or4b.html | 2 +- help/info/out.html | 2 +- help/info/override.html | 2 +- help/info/param.html | 2 +- help/info/pass.html | 2 +- help/info/pattern.html | 2 +- help/info/permutation.html | 2 +- help/info/port.html | 2 +- help/info/private.html | 2 +- help/info/procedure.html | 2 +- help/info/profiler.html | 2 +- help/info/public.html | 2 +- help/info/raise.html | 2 +- help/info/read.html | 2 +- help/info/receive.html | 2 +- help/info/record.html | 2 +- help/info/recursive.html | 4 +- help/info/refers.html | 68 + help/info/regexp.html | 4 +- help/info/rem.html | 2 +- help/info/remove_bom.html | 2 +- help/info/repeat.html | 2 +- help/info/replace.html | 2 +- help/info/reply.html | 2 +- help/info/return.html | 2 +- help/info/rnd.html | 2 +- help/info/running.html | 2 +- help/info/runs.html | 2 +- help/info/select.html | 2 +- help/info/self.html | 2 +- help/info/send.html | 2 +- help/info/sender.html | 2 +- help/info/set.html | 2 +- help/info/setverdict.html | 2 +- help/info/signature.html | 2 +- help/info/sizeof.html | 2 +- help/info/start.html | 2 +- help/info/stop.html | 2 +- help/info/str2bit.html | 2 +- help/info/str2float.html | 2 +- help/info/str2hex.html | 2 +- help/info/str2int.html | 2 +- help/info/str2oct.html | 2 +- help/info/subset.html | 27 +- help/info/substr.html | 2 +- help/info/superset.html | 27 +- help/info/system.html | 2 +- help/info/template.html | 2 +- help/info/testcase.html | 2 +- help/info/testcasename.html | 2 +- help/info/timeout.html | 2 +- help/info/timer.html | 2 +- help/info/to.html | 2 +- help/info/trigger.html | 2 +- help/info/true.html | 2 +- help/info/type.html | 223 +- help/info/unichar2char.html | 2 +- help/info/unichar2int.html | 2 +- help/info/unichar2oct.html | 2 +- help/info/union.html | 2 +- help/info/universal.html | 2 +- help/info/unmap.html | 2 +- help/info/value.html | 2 +- help/info/valueof.html | 2 +- help/info/var.html | 2 +- help/info/variant.html | 2 +- help/info/verdicttype.html | 2 +- help/info/while.html | 2 +- help/info/with.html | 2 +- help/info/xor.html | 2 +- help/info/xor4b.html | 2 +- help/titan.hhc | 2 +- help/titan.hhp | 2 +- help/titan_index.html | 30 +- help/titan_main.html | 10 +- help/ttcn3_help | 2 +- langviz/Grammar.cc | 2 +- langviz/Grammar.hh | 2 +- langviz/Graph.cc | 2 +- langviz/Graph.hh | 2 +- langviz/Iterator.cc | 2 +- langviz/Iterator.hh | 2 +- langviz/Makefile | 2 +- langviz/Node.cc | 2 +- langviz/Node.hh | 2 +- langviz/Rule.cc | 2 +- langviz/Rule.hh | 2 +- langviz/Symbol.cc | 2 +- langviz/Symbol.hh | 2 +- langviz/bison_la.l | 2 +- langviz/bison_p.y | 2 +- langviz/error.c | 2 +- langviz/error.h | 2 +- langviz/main.cc | 2 +- license/Makefile | 2 +- license/Makefile_renew_license | 2 +- license/license.dat | 2 +- license/license_gen.c | 2 +- license/renew_license.c | 2 +- license/renew_license.html | 2 +- loggerplugins/JUnitLogger/JUnitLogger.cc | 2 +- loggerplugins/JUnitLogger/JUnitLogger.hh | 2 +- loggerplugins/JUnitLogger/Makefile | 2 +- loggerplugins/JUnitLogger2/JUnitLogger2.cc | 2 +- loggerplugins/JUnitLogger2/JUnitLogger2.hh | 2 +- loggerplugins/JUnitLogger2/Makefile | 2 +- loggerplugins/Makefile | 2 +- loggerplugins/TSTLogger/Makefile | 2 +- loggerplugins/TSTLogger/TSTLogger.cc | 2 +- loggerplugins/TSTLogger/TSTLogger.hh | 2 +- makefiles/Makefile.personal.bangjohansen | 2 +- makefiles/Makefile.personal.cygwin15 | 2 +- makefiles/Makefile.personal.ehubuux110 | 2 +- makefiles/Makefile.personal.elx1pjld12-hz | 2 + ...le.personal.esekilxxen1843.rnd.ericsson.se | 2 +- makefiles/Makefile.personal.esekits1024 | 2 +- makefiles/Makefile.personal.esekits1080 | 2 +- makefiles/Makefile.personal.esekits3013 | 2 +- makefiles/Makefile.personal.esekiux5120 | 2 +- makefiles/Makefile.personal.tcclab1 | 2 +- makefiles/Makefile.personal.tcclab2 | 4 +- makefiles/Makefile.personal.tcclab3 | 2 +- makefiles/Makefile.personal.tcclab4 | 2 +- makefiles/Makefile.personal.tcclab5 | 2 +- makefiles/Makefile.personal.tcclab6 | 2 +- mctr2/Makefile | 2 +- mctr2/cli/Cli.cc | 6 +- mctr2/cli/Cli.h | 4 +- mctr2/cli/Makefile | 2 +- mctr2/cli/config_read.l | 27 +- mctr2/cli/config_read.y | 156 +- mctr2/editline/Makefile | 2 +- mctr2/mctr/MainController.cc | 4 +- mctr2/mctr/MainController.h | 4 +- mctr2/mctr/Makefile | 2 +- mctr2/mctr/MctrError.cc | 2 +- mctr2/mctr/UserInterface.cc | 4 +- mctr2/mctr/UserInterface.h | 4 +- mctr2/mctr/config_data.cc | 2 +- mctr2/mctr/config_data.h | 2 +- mctr2/mctr/main.cc | 4 +- mctr2/mctr/ttcn3_start | 2 +- parser/Makefile | 2 +- parser/parser.l | 2 +- parser/parser.y | 4 +- regression_test/ASN1/Makefile | 2 +- regression_test/ASN1/Test303/Makefile | 2 +- regression_test/ASN1/Test303/Test303A.asn | 2 +- regression_test/ASN1/Test303/Test303T.ttcn | 2 +- regression_test/ASN1/Test303/config.cfg | 2 +- regression_test/ASN1/Test307/Makefile | 2 +- regression_test/ASN1/Test307/Test307A.asn | 2 +- regression_test/ASN1/Test307/Test307T.ttcn | 2 +- regression_test/ASN1/Test308/Makefile | 2 +- regression_test/ASN1/Test308/Test308A.asn | 2 +- regression_test/ASN1/Test308/Test308T.ttcn | 2 +- regression_test/ASN1/Test309/Makefile | 2 +- regression_test/ASN1/Test309/Test309A.asn | 2 +- regression_test/ASN1/Test309/Test309T.ttcn | 2 +- regression_test/ASN1/Test310/Makefile | 2 +- regression_test/ASN1/Test310/Test310A.asn | 2 +- regression_test/ASN1/Test310/Test310T.ttcn | 2 +- regression_test/ASN1/Test330/Makefile | 2 +- regression_test/ASN1/Test330/Test330A.asn | 2 +- regression_test/ASN1/Test330/Test330T.ttcn | 2 +- regression_test/ASN1/Test332/Makefile | 2 +- regression_test/ASN1/Test332/Test332A.asn | 2 +- regression_test/ASN1/Test332/Test332T.ttcn | 2 +- regression_test/ASN1/Test338/Makefile | 2 +- regression_test/ASN1/Test338/Test338A.asn | 2 +- regression_test/ASN1/Test338/Test338T.ttcn | 2 +- regression_test/ASN1/Test340/Makefile | 2 +- regression_test/ASN1/Test340/Test340A.asn | 2 +- regression_test/ASN1/Test340/Test340T.ttcn | 2 +- regression_test/ASN1/Test342/Makefile | 2 +- regression_test/ASN1/Test342/Test342A.asn | 2 +- regression_test/ASN1/Test342/Test342T.ttcn | 2 +- regression_test/ASN1/Test344/Makefile | 2 +- regression_test/ASN1/Test344/Test344A.asn | 2 +- regression_test/ASN1/Test344/Test344T.ttcn | 2 +- regression_test/ASN1/Test346/Makefile | 2 +- regression_test/ASN1/Test346/Test346A.asn | 2 +- regression_test/ASN1/Test346/Test346T.ttcn | 2 +- regression_test/ASN1/Test348/Makefile | 2 +- regression_test/ASN1/Test348/Test348A.asn | 2 +- regression_test/ASN1/Test348/Test348T.ttcn | 2 +- regression_test/ASN1/Test350/Makefile | 2 +- regression_test/ASN1/Test350/Test350A.asn | 2 +- regression_test/ASN1/Test350/Test350T.ttcn | 2 +- regression_test/ASN1/Test350/config.cfg | 2 +- regression_test/ASN1/Test352/Makefile | 2 +- regression_test/ASN1/Test352/Test352A.asn | 2 +- regression_test/ASN1/Test352/Test352T.ttcn | 2 +- regression_test/ASN1/Test352/config.cfg | 2 +- regression_test/ASN1/Test354/Makefile | 2 +- regression_test/ASN1/Test354/Test354A.asn | 2 +- regression_test/ASN1/Test354/Test354T.ttcn | 2 +- regression_test/ASN1/Test354/config.cfg | 2 +- regression_test/ASN1/Test356/Makefile | 2 +- regression_test/ASN1/Test356/Test356A.asn | 2 +- regression_test/ASN1/Test356/Test356T.ttcn | 2 +- regression_test/ASN1/Test356/config.cfg | 2 +- regression_test/ASN1/Test358/Makefile | 2 +- regression_test/ASN1/Test358/Test358A.asn | 2 +- regression_test/ASN1/Test358/Test358T.ttcn | 2 +- regression_test/ASN1/Test358/config.cfg | 2 +- regression_test/ASN1/Test360/Makefile | 2 +- regression_test/ASN1/Test360/Test360A.asn | 2 +- regression_test/ASN1/Test360/Test360T.ttcn | 2 +- regression_test/ASN1/Test360/config.cfg | 2 +- regression_test/ASN1/Test38/Makefile | 2 +- regression_test/ASN1/Test38/Test38A.asn | 2 +- regression_test/ASN1/Test38/Test38B.asn | 2 +- regression_test/ASN1/codeGeneration2/Makefile | 2 +- .../ASN1/codeGeneration2/Test46.asn | 2 +- .../ASN1/codeGeneration2/Test48.asn | 2 +- .../ASN1/codeGeneration2/Test49.asn | 2 +- .../ASN1/codeGeneration2/Test51.asn | 2 +- .../ASN1/codeGeneration2/Test52.asn | 2 +- .../ASN1/codeGeneration2/Test53.asn | 2 +- .../ASN1/codeGeneration2/Test54.asn | 2 +- .../ASN1/codeGeneration2/Test55.asn | 2 +- .../ASN1/codeGeneration2/Test56.asn | 2 +- .../ASN1/codeGeneration2/Test57.asn | 2 +- .../ASN1/codeGeneration2/Test60.asn | 2 +- .../ASN1/codeGeneration2/Test61.asn | 2 +- .../ASN1/codeGeneration2/Test62.asn | 2 +- .../ASN1/codeGeneration2/Test63.asn | 2 +- .../ASN1/codeGeneration2/Test64.asn | 2 +- .../ASN1/codeGeneration2/Test65.asn | 2 +- .../ASN1/codeGeneration2/Test66.asn | 2 +- .../ASN1/codeGeneration2/Test68.asn | 2 +- .../ASN1/codeGeneration2/Test71.asn | 2 +- .../ASN1/codeGeneration2/Test74.asn | 2 +- .../ASN1/codeGeneration2/Test75.asn | 2 +- .../ASN1/codeGeneration2/Test76.asn | 2 +- .../ASN1/codeGeneration2/Test77.asn | 2 +- .../ASN1/codeGeneration2/Test78.asn | 2 +- .../ASN1/codeGeneration2/Test80.asn | 2 +- .../ASN1/codeGeneration2/Test81.asn | 2 +- .../ASN1/codeGeneration2/Test83.asn | 2 +- .../ASN1/codeGeneration2/Test86.asn | 2 +- .../ASN1/codeGeneration2/Test87.asn | 2 +- regression_test/ASN1/enum1/Makefile | 2 +- regression_test/ASN1/enum1/Test23.asn | 2 +- regression_test/ASN1/enum2/Makefile | 2 +- regression_test/ASN1/enum2/Test25.asn | 2 +- regression_test/ASN1/errorMessages/Makefile | 2 +- regression_test/ASN1/errorMessages/Test11.asn | 2 +- regression_test/ASN1/errorMessages/Test12.asn | 2 +- regression_test/ASN1/errorMessages/Test13.asn | 2 +- regression_test/ASN1/errorMessages/Test14.asn | 2 +- regression_test/ASN1/errorMessages/Test15.asn | 2 +- regression_test/ASN1/errorMessages/Test16.asn | 2 +- regression_test/ASN1/errorMessages/Test17.asn | 2 +- regression_test/ASN1/errorMessages/Test18.asn | 2 +- .../ASN1/errorMessages/Test19_1.asn | 2 +- .../ASN1/errorMessages/Test19_2.asn | 2 +- regression_test/ASN1/errorMessages/Test20.asn | 2 +- regression_test/ASN1/errorMessages/Test21.asn | 2 +- regression_test/ASN1/errorMessages/Test22.asn | 2 +- regression_test/ASN1/errorMessages/Test24.asn | 2 +- regression_test/ASN1/errorMessages/Test26.asn | 2 +- regression_test/ASN1/errorMessages/Test28.asn | 2 +- regression_test/ASN1/errorMessages/Test32.asn | 2 +- regression_test/ASN1/errorMessages/Test33.asn | 2 +- regression_test/ASN1/errorMessages/Test34.asn | 2 +- regression_test/ASN1/errorMessages/Test39.asn | 2 +- regression_test/ASN1/errorMessages/Test40.asn | 2 +- regression_test/ASN1/errorMessages/Test41.asn | 2 +- regression_test/ASN1/errorMessages/Test42.asn | 2 +- regression_test/ASN1/errorMessages/Test43.asn | 2 +- regression_test/ASN1/errorMessages/Test44.asn | 2 +- regression_test/ASN1/errorMessages/Test45.asn | 2 +- regression_test/ASN1/errorMessages/Test47.asn | 2 +- regression_test/ASN1/errorMessages/Test50.asn | 2 +- regression_test/ASN1/errorMessages/Test67.asn | 2 +- regression_test/ASN1/errorMessages/Test69.asn | 2 +- regression_test/ASN1/errorMessages/Test70.asn | 2 +- regression_test/ASN1/errorMessages/Test72.asn | 2 +- regression_test/ASN1/errorMessages/Test73.asn | 2 +- regression_test/ASN1/errorMessages/Test79.asn | 2 +- regression_test/ASN1/errorMessages/Test82.asn | 2 +- regression_test/ASN1/errorMessages/Test84.asn | 2 +- regression_test/ASN1/errorMessages/Test85.asn | 2 +- regression_test/ASN1/errorMessages2/Makefile | 2 +- .../ASN1/errorMessages2/Test10.asn | 2 +- regression_test/ASN1/hyphen/Makefile | 2 +- regression_test/ASN1/hyphen/Test284.asn | 2 +- regression_test/ASN1/keyword/Makefile | 2 +- regression_test/ASN1/keyword/Test283.asn | 2 +- regression_test/ASN1/keyword/Test283T.ttcn | 2 +- regression_test/ASN1/parse/Makefile | 2 +- regression_test/ASN1/parse/Test1.asn | 2 +- .../ASN1/parse/Test1_known_errors.asn | 2 +- regression_test/ASN1/parse/Test2.asn | 2 +- .../ASN1/parse/Test2_known_errors.asn | 2 +- regression_test/ASN1/parse/Test3.asn | 2 +- .../ASN1/parse/Test3_known_errors.asn | 2 +- regression_test/ASN1/parse/Test4.asn | 2 +- .../ASN1/parse/Test4_known_errors.asn | 2 +- regression_test/ASN1/transformations/Makefile | 2 +- .../ASN1/transformations/Test289A.asn | 2 +- .../ASN1/transformations/Test289B.asn | 2 +- .../ASN1/transformations/Test5A.asn | 2 +- .../ASN1/transformations/Test5B.asn | 2 +- .../ASN1/transformations/Test6A.asn | 2 +- .../ASN1/transformations/Test6B.asn | 2 +- .../ASN1/transformations/Test7A.asn | 2 +- .../ASN1/transformations/Test7B.asn | 2 +- .../ASN1/transformations/Test8A.asn | 2 +- .../ASN1/transformations/Test8B.asn | 2 +- .../ASN1/transformations/Test9A.asn | 2 +- .../ASN1/transformations/Test9B.asn | 2 +- regression_test/BER/Makefile | 2 +- regression_test/BER/MyPort1.cc | 2 +- regression_test/BER/MyPort1.hh | 2 +- regression_test/BER/MyPort2.cc | 2 +- regression_test/BER/MyPort2.hh | 2 +- regression_test/BER/Regr.cfg | 2 +- regression_test/BER/Regr.ttcn | 8 +- regression_test/BER/Regr1.asn | 2 +- regression_test/BER/Regr2.asn | 2 +- regression_test/BER_x682/Makefile | 2 +- regression_test/BER_x682/MyPort1.cc | 2 +- regression_test/BER_x682/MyPort1.hh | 2 +- regression_test/BER_x682/MyPort2.cc | 2 +- regression_test/BER_x682/MyPort2.hh | 2 +- regression_test/BER_x682/X.cfg | 2 +- regression_test/BER_x682/X.ttcn | 2 +- regression_test/BER_x682/X682.asn | 2 +- regression_test/BER_x682_wa/Makefile | 2 +- regression_test/BER_x682_wa/MyPort1.cc | 2 +- regression_test/BER_x682_wa/MyPort1.hh | 2 +- regression_test/BER_x682_wa/MyPort2.cc | 2 +- regression_test/BER_x682_wa/MyPort2.hh | 2 +- regression_test/BER_x682_wa/X.cfg | 2 +- regression_test/BER_x682_wa/X.ttcn | 2 +- regression_test/BER_x682_wa/x682.asn | 2 +- regression_test/CRTR00015758/Makefile | 2 +- regression_test/CRTR00015758/config.cfg | 2 +- regression_test/CRTR00015758/no.ttcn | 2 +- regression_test/CRTR00015758/run.cfg | 2 +- regression_test/CRTR00015758/trouble.cfg | 2 +- regression_test/ERC/Makefile | 2 +- regression_test/ERC/base.cfg | 2 +- regression_test/ERC/config.cfg | 2 +- regression_test/ERC/erc.ttcn | 3 +- regression_test/ERC/included1.cfg | 2 +- regression_test/ERC/included2.cfg | 2 +- regression_test/ERC/subdir/subdir_config.cfg | 2 +- regression_test/HQ16404/HQ16404.ttcn | 2 +- regression_test/HQ16404/Makefile | 2 +- regression_test/HQ16404/config.cfg | 2 +- regression_test/Makefile | 4 +- regression_test/Makefile.regression | 3 +- .../RAW/Examples/DTAP_RAW_Samples.ttcn | 2 +- .../RAW/Examples/DTAP_typedefs.ttcn | 2 +- regression_test/RAW/Examples/Makefile | 2 +- regression_test/RAW/Examples/RAW_Test.ttcn | 2 +- regression_test/RAW/Examples/RAWtest.cfg | 2 +- .../RAW/Examples/SCCP_RAW_Samples.ttcn | 2 +- .../RAW/Examples/SCCP_typedefs.ttcn | 2 +- .../RAW/Examples/general_typedefs.ttcn | 2 +- .../RAW/HN25015/General_Types.ttcn | 2 +- regression_test/RAW/HN25015/HN25015.ttcn | 2 +- regression_test/RAW/HN25015/Makefile | 2 +- regression_test/RAW/HN25015/SGsAP_Types.ttcn | 2 +- regression_test/RAW/HN25015/config.cfg | 2 +- regression_test/RAW/HQ26535/GTPv2_Types.ttcn | 2 +- .../RAW/HQ26535/General_Types.ttcn | 2 +- regression_test/RAW/HQ26535/Makefile | 2 +- regression_test/RAW/HQ26535/gtpctest.ttcn | 2 +- regression_test/RAW/HQ49956/Makefile | 2 +- regression_test/RAW/HQ49956/Module.ttcn | 2 +- regression_test/RAW/HQ49956/Test.ttcn | 2 +- .../RAW/HS16977/HS16977_Constants.ttcn | 2 +- regression_test/RAW/HS16977/HS16977_Test.ttcn | 2 +- .../RAW/HS16977/HS16977_Types.ttcn | 2 +- regression_test/RAW/HS16977/Makefile | 2 +- regression_test/RAW/HS16977/config.cfg | 2 +- regression_test/RAW/IntX/IntX.ttcn | 372 +++ regression_test/RAW/IntX/Makefile | 135 + regression_test/RAW/IntX/config.cfg | 14 + regression_test/RAW/Makefile | 2 +- .../XML/EXER-whitepaper/AnyAttributes.ttcnpp | 2 +- .../XML/EXER-whitepaper/AnyElement.ttcnpp | 2 +- .../EXER-whitepaper/AnyElementOptional.ttcnpp | 2 +- .../AnyElementOptional2.ttcnpp | 2 +- .../XML/EXER-whitepaper/Attribute.ttcnpp | 4 +- .../EXER-whitepaper/DefaultForEmpty.ttcnpp | 2 +- .../XML/EXER-whitepaper/EmbedValues.ttcnpp | 2 +- .../XML/EXER-whitepaper/List.ttcnpp | 2 +- regression_test/XML/EXER-whitepaper/Makefile | 2 +- .../XML/EXER-whitepaper/Name.ttcnpp | 2 +- .../XML/EXER-whitepaper/Namespaces.ttcnpp | 2 +- .../XML/EXER-whitepaper/NamespacesDup.ttcnpp | 2 +- .../XML/EXER-whitepaper/Order.ttcnpp | 2 +- .../XML/EXER-whitepaper/Qname.ttcnpp | 2 +- .../XML/EXER-whitepaper/Text.ttcnpp | 2 +- .../XML/EXER-whitepaper/Untagged.ttcnpp | 2 +- .../XML/EXER-whitepaper/Untagged1.ttcnpp | 2 +- .../XML/EXER-whitepaper/UseNil.ttcnpp | 2 +- .../XML/EXER-whitepaper/UseNilSimple.ttcnpp | 2 +- .../XML/EXER-whitepaper/UseNumber.ttcnpp | 2 +- .../XML/EXER-whitepaper/UseOrder.ttcnpp | 2 +- .../XML/EXER-whitepaper/UseType.ttcnpp | 2 +- .../XML/EXER-whitepaper/UseUnion.ttcnpp | 2 +- .../XML/EXER-whitepaper/Whitespace.ttcnpp | 2 +- .../XML/EXER-whitepaper/config.cfg | 2 +- regression_test/XML/HM60295/Importer.xsd | 2 +- regression_test/XML/HM60295/Makefile | 2 +- regression_test/XML/HM60295/Schema1.xsd | 2 +- regression_test/XML/HM60295/Schema2.xsd | 2 +- regression_test/XML/HM60295/config.cfg | 2 +- regression_test/XML/HM60295/tester.ttcn | 2 +- regression_test/XML/HN15589/A.xsd | 2 +- regression_test/XML/HN15589/B.xsd | 2 +- regression_test/XML/HN15589/HN15589.ttcnpp | 2 +- regression_test/XML/HN15589/Makefile | 2 +- regression_test/XML/HN15589/config.cfg | 2 +- .../XML/HN15589/flipflop-check.xsd | 2 +- regression_test/XML/HN15589/log2xml.pl | 2 +- regression_test/XML/HN15589/xsd/XTDL.xsd | 2 +- .../XML/HN15589/xsd/XTDP-Message.xsd | 2 +- regression_test/XML/HN15589/xtdl.ttcn | 2 +- regression_test/XML/HN15589/xtdp.cfg | 2 +- regression_test/XML/HN15589/xtdp.ttcn | 2 +- regression_test/XML/HQ30408/HQ30408.ttcn | 2 +- regression_test/XML/HQ30408/Makefile | 2 +- regression_test/XML/HR49727/HR49727.ttcn | 2 +- regression_test/XML/HR49727/Makefile | 2 +- .../XML/HR49727/UsefulTtcn3Types.ttcn | 2 +- regression_test/XML/HR49727/XSD.ttcn | 2 +- regression_test/XML/HR49727/config.cfg | 2 +- .../http_jabber_org_protocol_pubsub.ttcn | 2 +- ...http_jabber_org_protocol_pubsub_event.ttcn | 2 +- .../XML/HR49727/jabber_x_data.ttcn | 2 +- regression_test/XML/HU13380/HU13380.ttcn | 64 + regression_test/XML/HU13380/Makefile | 138 + regression_test/XML/HU13380/config.cfg | 12 + regression_test/XML/Makefile | 4 +- regression_test/XML/NegativeTest/Makefile | 2 +- regression_test/XML/NegativeTest/ReadXml.ttcn | 2 +- .../XML/NegativeTest/ReadXmlImpl.cc | 2 +- .../XML/NegativeTest/exer_rec.ttcn | 2 +- .../XML/NegativeTest/exer_rec_of.ttcn | 2 +- .../XML/NegativeTest/exer_uni.ttcn | 2 +- regression_test/XML/NegativeTest/indent.pl | 2 +- regression_test/XML/NegativeTest/rec.ttcn | 2 +- regression_test/XML/NegativeTest/rec_of.ttcn | 2 +- regression_test/XML/NegativeTest/run.cfg | 2 +- regression_test/XML/NegativeTest/runner.ttcn | 2 +- regression_test/XML/NegativeTest/uni.ttcn | 2 +- regression_test/XML/TTCNandXML/AnnexB1.ttcn | 2 +- .../XML/TTCNandXML/AnnexB1Template.ttcnpp | 2 +- regression_test/XML/TTCNandXML/AnnexB2.ttcn | 2 +- .../XML/TTCNandXML/AnnexB2Template.ttcnpp | 2 +- regression_test/XML/TTCNandXML/AnnexB3.ttcn | 2 +- .../XML/TTCNandXML/AnnexB3Template.ttcnpp | 2 +- regression_test/XML/TTCNandXML/AnnexB4.ttcn | 2 +- .../XML/TTCNandXML/AnnexB4Template.ttcnpp | 2 +- .../XML/TTCNandXML/AnyStuff.ttcnpp | 2 +- .../XML/TTCNandXML/AttribPath.ttcn | 2 +- .../XML/TTCNandXML/AttribPathTest.ttcnpp | 2 +- .../XML/TTCNandXML/AttributesTest.ttcnpp | 2 +- .../XML/TTCNandXML/Base64Test.ttcnpp | 2 +- .../XML/TTCNandXML/DFEAttribTest.ttcnpp | 2 +- regression_test/XML/TTCNandXML/DFETest.ttcnpp | 2 +- regression_test/XML/TTCNandXML/E0.ttcn | 2 +- .../XML/TTCNandXML/EmbedValues.ttcnpp | 2 +- .../XML/TTCNandXML/EnumTest.ttcnpp | 2 +- regression_test/XML/TTCNandXML/Flatten.cc | 2 +- regression_test/XML/TTCNandXML/Flattener.ttcn | 2 +- regression_test/XML/TTCNandXML/Makefile | 2 +- regression_test/XML/TTCNandXML/Marx.ttcnpp | 2 +- .../XML/TTCNandXML/NamespaceDef.ttcn | 2 +- .../XML/TTCNandXML/NamespaceTest.ttcnpp | 2 +- .../XML/TTCNandXML/Regressions.ttcnpp | 2 +- regression_test/XML/TTCNandXML/UTF8.ttcn | 2 +- .../XML/TTCNandXML/WhitespaceTest.ttcnpp | 2 +- regression_test/XML/TTCNandXML/X693amd1.ttcn | 2 +- .../XML/TTCNandXML/X693amd1Test.ttcnpp | 2 +- .../XML/TTCNandXML/XSDAttributes.ttcn | 2 +- regression_test/XML/TTCNandXML/config.cfg | 2 +- regression_test/XML/XER/AsnValues.asn | 2 +- regression_test/XML/XER/Asntypes.asn | 2 +- regression_test/XML/XER/EmptyUnion.asn | 2 +- regression_test/XML/XER/Flatten.cc | 2 +- regression_test/XML/XER/Makefile | 2 +- regression_test/XML/XER/ObjectClass.asn | 2 +- .../XML/XER/ObjectClassWithSyntax.asn | 2 +- regression_test/XML/XER/SetValues.asn | 2 +- regression_test/XML/XER/Sets.asn | 2 +- regression_test/XML/XER/Txerasntypes.ttcnpp | 2 +- regression_test/XML/XER/Txerbinstr.ttcnpp | 2 +- regression_test/XML/XER/Txerboolean.ttcnpp | 2 +- regression_test/XML/XER/Txerenum.ttcnpp | 2 +- regression_test/XML/XER/Txerfloat.ttcnpp | 2 +- regression_test/XML/XER/Txerint.ttcnpp | 2 +- regression_test/XML/XER/Txernested.ttcnpp | 2 +- regression_test/XML/XER/Txerobjclass.ttcnpp | 2 +- regression_test/XML/XER/Txersets.ttcnpp | 2 +- regression_test/XML/XER/Txerstring.ttcnpp | 2 +- regression_test/XML/XER/checkit.pl | 2 +- regression_test/XML/XER/config.cfg | 2 +- regression_test/XML/XER/junk.ttcn3 | 2 +- regression_test/XML/XMLqualif/Makefile | 2 +- regression_test/XML/XMLqualif/POtest.ttcnpp | 2 +- regression_test/XML/XMLqualif/config.cfg | 2 +- regression_test/XML/XMLqualif/globall.xsd | 2 +- regression_test/XML/XMLqualif/po_qual.xsd | 2 +- regression_test/XML/XMLqualif/po_qual_atr.xsd | 2 +- .../XML/XMLqualif/po_qual_both.xsd | 2 +- .../XML/XMLqualif/po_qual_default.xml | 2 +- .../XML/XMLqualif/po_qual_explicit.xml | 2 +- regression_test/XML/XMLqualif/po_unqual.xml | 2 +- regression_test/XML/XMLqualif/po_unqual.xsd | 2 +- regression_test/XML/XmlWorkflow/Makefile | 2 +- .../PIPEasp_CNL113334/demo/PIPE.cfg | 2 +- .../demo/PIPEasp_Templates.ttcn | 2 +- .../PIPEasp_CNL113334/demo/PipeTest.prj | 2 +- .../PIPEasp_CNL113334/demo/PipeTest.ttcn | 2 +- .../PIPEasp_CNL113334/demo/ShellNotice.sh | 2 +- .../demo/ShellQuestionString.sh | 2 +- .../demo/ShellQuestionYesNo.sh | 2 +- .../PIPEasp_CNL113334/src/PIPEasp_PT.cc | 2 +- .../PIPEasp_CNL113334/src/PIPEasp_PT.hh | 2 +- .../src/PIPEasp_PortType.ttcn | 2 +- .../PIPEasp_CNL113334/src/PIPEasp_Types.ttcn | 2 +- .../PIPEasp_CNL113334/test/Makefile | 2 +- .../PIPEasp_CNL113334/test/PIPEasp_PT.cc | 2 +- .../PIPEasp_CNL113334/test/PIPEasp_PT.hh | 2 +- .../test/PIPEasp_PortType.ttcn | 2 +- .../PIPEasp_CNL113334/test/PIPEasp_Types.ttcn | 2 +- .../XML/XmlWorkflow/Tgc/IsTypes.xsd | 2 +- regression_test/XML/XmlWorkflow/Tgc/Tgc.ttcn | 2 +- regression_test/XML/XmlWorkflow/Tgc/Tgc.xsd | 2 +- .../XML/XmlWorkflow/Tgc/UsefulTtcn3Types.ttcn | 2 +- .../XML/XmlWorkflow/Tgc/XMLSchema.xsd | 2 +- regression_test/XML/XmlWorkflow/Tgc/XSD.ttcn | 2 +- regression_test/XML/XmlWorkflow/Tgc/confd.xsd | 2 +- .../Tgc/tail_f_com_ns_confd_1_0.ttcn | 2 +- ...sson_com_is_isco_IsTypes_R4L06_R4AF11.ttcn | 2 +- ..._ericsson_com_is_isco_Tgc_R6A48_R6H01.ttcn | 2 +- .../Tgc/www_w3_org_XML_1998_namespace.ttcn | 2 +- regression_test/XML/XmlWorkflow/Tgc/xml.xsd | 2 +- .../XmlTest_expectedTtcns/MyTypes_e.ttcn | 72 + .../NoTargetNamespace.ttcn | 58 + .../XmlTest_imsike_e.ttcn | 2 +- .../attribute_in_extension_e.ttcn | 72 + ...le_org_complex_restriction_with_use_e.ttcn | 117 + .../http_www_example_org_name_conv2_e.ttcn | 47 + .../http_www_example_org_name_conv3_e.ttcn | 47 + ..._org_nillable_in_nillable_extension_e.ttcn | 92 + ...http_www_example_org_seq_embeds_seq_e.ttcn | 80 + ...http_www_example_org_ttcn_wildcards_e.ttcn | 12 + .../http_www_example_org_wildcards_e.ttcn | 118 + .../imported_module_1_e.ttcn | 53 + .../imported_module_e.ttcn | 53 + .../module_typename_conversion_e.ttcn | 75 + .../name_conversion_extension_attrib_e.ttcn | 81 + .../nillable_annotations_e.ttcn | 75 + ..._ietf_params_xml_ns_conference_info_e.ttcn | 40 +- .../www_XmlTest_org_annotation_c_e.ttcn | 3 +- .../www_XmlTest_org_annotation_t_e.ttcn | 2 +- .../www_XmlTest_org_boolean_e.ttcn | 8 + .../www_XmlTest_org_complex_all_e.ttcn | 20 +- .../www_XmlTest_org_complex_include2_e.ttcn | 2 +- ...mlTest_org_element_recordOfElements_e.ttcn | 2 +- .../www_XmlTest_org_list_e.ttcn | 2 + .../www_XmlTest_org_string_e.ttcn | 2 +- .../www_XmlTest_org_union_e.ttcn | 10 + .../www_example_org_all_e.ttcn | 175 ++ .../www_example_org_anyattr_in_complex_e.ttcn | 63 + .../www_example_org_anyattrib_single_e.ttcn | 132 + .../www_example_org_attr_ext_rest_e.ttcn | 220 ++ .../www_example_org_attrib_enum_e.ttcn | 59 + .../www_example_org_attrib_order_a_e.ttcn | 115 + .../www_example_org_attrib_order_b_e.ttcn | 53 + ...www_example_org_attribgroup_ingroup_e.ttcn | 68 + ...ample_org_boolean_variant_commented_e.ttcn | 131 + .../www_example_org_comment_placement_e.ttcn | 95 + .../www_example_org_complex_nillable_e.ttcn | 146 + ..._example_org_decimal_fractiondigits_e.ttcn | 69 + ..._dont_generate_element_substitution_e.ttcn | 98 + .../www_example_org_enum_field_names_e.ttcn | 61 + ..._example_org_enumeration_remove_dup_e.ttcn | 123 + ...example_org_enumeration_restriction_e.ttcn | 157 + .../www_example_org_fixed_value_e.ttcn | 161 + ...e_org_generate_element_substitution_e.ttcn | 102 + .../www_example_org_id_attrib_e.ttcn | 50 + .../www_example_org_import_prefix_e.ttcn | 81 + .../www_example_org_imported2_e.ttcn | 69 + .../www_example_org_imported_e.ttcn | 59 + .../www_example_org_list_simpletype_e.ttcn | 117 + .../www_example_org_long_extension_e.ttcn | 149 + .../www_example_org_name_conv_http_e.ttcn | 47 + .../www_example_org_namespaceas_e.ttcn | 92 + .../www_example_org_nillable_fixed_e.ttcn | 102 + .../www_example_org_no_ns_connector_e.ttcn | 68 + ...rg_not_a_number_minex_inf_maxex_inf_e.ttcn | 73 + ...xample_org_qualified_element_attrib_e.ttcn | 78 + ...w_example_org_regex_square_brackets_e.ttcn | 65 + .../www_example_org_self_recursion_e.ttcn | 66 + ...ple_org_seq_enumeration_restriction_e.ttcn | 77 + ...www_example_org_seq_group_reference_e.ttcn | 81 + .../www_example_org_simpletype_base_e.ttcn | 58 + .../www_example_org_simpletype_ref_e.ttcn | 86 + ...xample_org_simpletype_restrict_comp_e.ttcn | 70 + ..._substitutiongroup_abstract_block_1_e.ttcn | 134 + ..._substitutiongroup_abstract_block_2_e.ttcn | 134 + ...tutiongroup_complex_without_element_e.ttcn | 127 + .../www_example_org_substitutiongroup_e.ttcn | 132 + ...rg_substitutiongroup_long_extension_e.ttcn | 152 + ..._example_org_substitutiongroup_main_e.ttcn | 78 + ...w_example_org_substitutiongroup_ref_e.ttcn | 57 + ...le_org_type_attributegroup_nillable_e.ttcn | 94 + ..._example_org_type_conversion_follow_e.ttcn | 99 + .../www_example_org_unnamed_union_e.ttcn | 69 + ...mple_org_unqualified_element_attrib_e.ttcn | 76 + .../www_example_org_xml_in_annotation_e.ttcn | 63 + .../XmlTest_protocolXSDs/CAI3G/Bulk.xsd | 2 +- .../CAI3G/GenericCai3gType.xsd | 2 +- .../CAI3G/Provisioning.xsd | 2 +- .../XmlTest_protocolXSDs/CCAPI/CCAPI.xsd | 2 +- .../XmlTest_protocolXSDs/HSS/avg.xsd | 2 +- .../HSS/cai3g1.2_provisioning.xsd | 2 +- .../XmlTest_protocolXSDs/HSS/eps.xsd | 2 +- .../XmlTest_protocolXSDs/HSS/hssla_types.xsd | 2 +- .../JMdict/jmdict-good.xsd | 2 +- .../MGW/IntegratedSite.xsd | 2 +- .../MGW/IntegratedSite_HK84933.xsd | 2 +- .../XmlTest_protocolXSDs/MGW/IsTypes.xsd | 2 +- .../XmlTest_protocolXSDs/MGW/MainSwitch.xsd | 2 +- .../XmlTest_protocolXSDs/MGW/Mgw_R9B27.xsd | 2 +- .../XmlTest_protocolXSDs/MGW/Misc.xsd | 2 +- .../XmlTest_protocolXSDs/MGW/XMLSchema.xsd | 2 +- .../XmlTest_protocolXSDs/MGW/confd.xsd | 2 +- .../XmlTest_protocolXSDs/MGW/xml.xsd | 2 +- .../XmlTest_protocolXSDs/PAP/PAP.xsd | 2 +- .../XmlTest_protocolXSDs/PIDF/pidf.xsd | 2 +- .../XmlTest_protocolXSDs/PIDF/rlmi.xsd | 2 +- .../XmlTest_protocolXSDs/PIDF/testschema.xsd | 2 +- .../XmlTest_protocolXSDs/PIDF/xml_PIDF.xsd | 2 +- .../ParlayX/parlayx_common_types_2_0.xsd | 2 +- ..._payment_amount_charging_interface_2_0.xsd | 2 +- ..._reserve_amount_charging_interface_2_0.xsd | 2 +- ..._reserve_volume_charging_interface_2_0.xsd | 2 +- .../ParlayX/parlayx_payment_types_2_0.xsd | 2 +- ..._payment_volume_charging_interface_2_0.xsd | 2 +- .../XmlTest_protocolXSDs/RLP/RLP_SVC.xsd | 2 +- .../RLXML/RLXML_small.xsd | 2 +- .../XmlTest_protocolXSDs/RLXML/rlxml.xml | 2 +- .../XmlTest_protocolXSDs/SIP/SIP.xsd | 2 +- .../ShData/ShDataType.xsd | 2 +- .../XmlTest_protocolXSDs/XML_RPC/XML_RPC.xsd | 2 +- .../XmlTest_xsds/ETSI_CR5852_union.xsd | 2 +- .../XmlTest_xsds/UsefulTtcn3Types.ttcn | 2 +- .../XML/XmlWorkflow/XmlTest_xsds/XSD.ttcn | 2 +- .../XmlTest_xsds/XmlTest_annotation.xsd | 2 +- .../XmlTest_xsds/XmlTest_annotation1.xsd | 2 +- .../XmlTest_xsds/XmlTest_annotation2.xsd | 2 +- .../XmlTest_xsds/XmlTest_boolean.xsd | 2 +- .../XmlTest_boolean_withTypeAndBase.xsd | 2 +- .../XmlTest_xsds/XmlTest_complex1.xsd | 2 +- .../XmlTest_xsds/XmlTest_complex2.xsd | 2 +- .../XmlTest_xsds/XmlTest_complex_all.xsd | 2 +- .../XmlTest_xsds/XmlTest_complex_any.xsd | 2 +- .../XmlTest_xsds/XmlTest_complex_choice.xsd | 2 +- .../XmlTest_complex_extension.xsd | 2 +- .../XmlTest_xsds/XmlTest_complex_import_A.xsd | 2 +- .../XmlTest_complex_import_AB.xsd | 2 +- .../XmlTest_xsds/XmlTest_complex_import_B.xsd | 2 +- .../XmlTest_complex_import_neg1.xsd | 2 +- .../XmlTest_complex_import_pos.xsd | 2 +- ...Test_complex_import_withSchemaLocation.xsd | 2 +- .../XmlTest_xsds/XmlTest_complex_include.xsd | 2 +- .../XmlTest_xsds/XmlTest_complex_include1.xsd | 2 +- .../XmlTest_xsds/XmlTest_complex_include2.xsd | 4 +- .../XmlTest_complex_minOccursMaxOccurs.xsd | 2 +- .../XmlTest_xsds/XmlTest_complex_mixed.xsd | 2 +- .../XmlTest_complex_restriction.xsd | 2 +- .../XmlTest_complex_restriction_neg1.xsd | 2 +- .../XmlTest_complex_restriction_neg2.xsd | 2 +- .../XmlTest_complex_simpleContent.xsd | 2 +- .../XmlTest_xsds/XmlTest_complex_unique.xsd | 16 +- .../XmlTest_xsds/XmlTest_decimal.xsd | 2 +- .../XmlTest_xsds/XmlTest_decimal_withEnum.xsd | 2 +- .../XmlTest_decimal_withLength.xsd | 2 +- .../XmlTest_decimal_withMinMaxExclusive.xsd | 2 +- .../XmlTest_decimal_withMinMaxInclusive.xsd | 2 +- .../XmlTest_xsds/XmlTest_element_abstract.xsd | 2 +- .../XmlTest_xsds/XmlTest_element_anyType.xsd | 2 +- .../XmlTest_element_nameInheritance.xsd | 2 +- .../XmlTest_element_recordOfElements.xsd | 2 +- .../XmlTest_element_recordOfElements3.xsd | 2 +- .../XmlTest_element_recordOfElements4.xsd | 2 +- .../XmlTest_element_recordOfElements5.xsd | 2 +- .../XmlTest_xsds/XmlTest_imsike.xsd | 6 +- .../XmlTest_xsds/XmlTest_integer.xsd | 2 +- .../XmlTest_xsds/XmlTest_integer_empty1.xsd | 2 +- .../XmlTest_xsds/XmlTest_integer_withEnum.xsd | 2 +- .../XmlTest_integer_withLength.xsd | 2 +- .../XmlTest_integer_withMaxExcl.xsd | 2 +- .../XmlTest_integer_withMaxIncl.xsd | 2 +- .../XmlTest_integer_withMinExcl.xsd | 2 +- .../XmlTest_integer_withMinIncl.xsd | 2 +- .../XmlWorkflow/XmlTest_xsds/XmlTest_list.xsd | 2 +- .../XmlTest_xsds/XmlTest_list_integer.xsd | 2 +- .../XmlTest_xsds/XmlTest_simple_enum.xsd | 2 +- .../XmlTest_xsds/XmlTest_string.xsd | 2 +- .../XmlTest_string_withEmptyLength.xsd | 2 +- .../XmlTest_string_withEmptyMax.xsd | 2 +- .../XmlTest_string_withEmptyMin.xsd | 2 +- .../XmlTest_xsds/XmlTest_string_withEnum.xsd | 2 +- .../XmlTest_string_withFaultyMinMax.xsd | 2 +- .../XmlTest_string_withFixedLength.xsd | 2 +- .../XmlTest_string_withFloatLength.xsd | 2 +- .../XmlTest_string_withMinLength.xsd | 2 +- .../XmlTest_string_withNegativeLength.xsd | 2 +- .../XmlTest_string_withNegativeMax.xsd | 2 +- .../XmlTest_string_withNegativeMin.xsd | 2 +- .../XmlTest_string_withOverDefinition.xsd | 2 +- .../XmlTest_string_withPosLength.xsd | 2 +- .../XmlTest_string_withPosMax.xsd | 2 +- .../XmlTest_string_withTypeAndBase.xsd | 2 +- .../XmlTest_string_withWhitespace.xsd | 2 +- .../XmlWorkflow/XmlTest_xsds/XmlTest_time.xsd | 2 +- .../XmlTest_xsds/XmlTest_time_withEnum.xsd | 2 +- .../XmlTest_xsds/XmlTest_union.xsd | 2 +- .../XmlTest_xsds/XmlTest_union2.xsd | 2 +- .../XmlTest_xsds/XmlTest_version.xsd | 2 +- .../XML/XmlWorkflow/XmlTest_xsds/empty.xsd | 2 +- .../XmlTest_xsds/noTargetNamespace.xsd | 2 +- .../XML/XmlWorkflow/XmlTest_xsds/po.xsd | 2 +- regression_test/XML/XmlWorkflow/bin/prj2mk.pl | 2 +- .../XML/XmlWorkflow/bin2/prj2mk.pl | 2 +- .../XML/XmlWorkflow/src/UsefulTtcn3Types.ttcn | 2 +- regression_test/XML/XmlWorkflow/src/XSD.ttcn | 2 +- .../XML/XmlWorkflow/src/XmlTest.cfg | 2 +- .../XmlWorkflow/src/XmlTest_protocolXsds.cfg | 2 +- .../XML/XmlWorkflow/src/xmlTest.prj | 128 +- .../src/xmlTest_Functions_complex.ttcn | 2 +- .../src/xmlTest_Functions_complex1.ttcn | 2 +- .../src/xmlTest_Functions_complex2.ttcn | 2 +- .../src/xmlTest_Functions_element.ttcn | 32 +- .../src/xmlTest_Functions_list.ttcn | 2 +- .../src/xmlTest_Functions_string.ttcn | 2 +- .../XML/XmlWorkflow/src/xmlTest_Shell.ttcn | 3 +- .../XmlWorkflow/src/xmlTest_Testcases.ttcn | 779 ++++- .../XML/XmlWorkflow/src/xmlTest_encDec.ttcn | 2 +- .../src/xmlTest_protocolXsd_Testcases.ttcn | 2 +- .../XmlWorkflow/src/xmlTest_protocolXsds.prj | 2 +- .../XML/XmlWorkflow/xsd/HQ73011.xsd | 2 +- .../XML/XmlWorkflow/xsd/PDUexample.xsd | 2 +- regression_test/XML/XmlWorkflow/xsd/all.xsd | 108 +- .../XML/XmlWorkflow/xsd/any_anyAttribute.xsd | 15 +- .../XmlWorkflow/xsd/anyattr_in_complex.xsd | 21 + .../XML/XmlWorkflow/xsd/anyattrib_single.xsd | 77 + .../XmlWorkflow/xsd/anyattribute_optional.xsd | 33 + .../XML/XmlWorkflow/xsd/attrib_enum.xsd | 18 + .../XML/XmlWorkflow/xsd/attrib_order_a.xsd | 40 + .../XML/XmlWorkflow/xsd/attrib_order_b.xsd | 20 + .../XML/XmlWorkflow/xsd/attrib_order_c.xsd | 9 + .../xsd/attrib_restriction_extension.xsd | 137 + .../XmlWorkflow/xsd/attribgroup_ingroup.xsd | 23 + .../XML/XmlWorkflow/xsd/attributeGroup.xsd | 2 +- .../xsd/attribute_in_extension.xsd | 26 + .../XML/XmlWorkflow/xsd/attribute_use.xsd | 2 +- .../XmlWorkflow/xsd/attribute_use_noTNS.xsd | 2 +- .../xsd/attributegroup_nillable.xsd | 33 + .../xsd/boolean_variant_commented.xsd | 55 + .../XML/XmlWorkflow/xsd/comment_placement.xsd | 93 + .../XML/XmlWorkflow/xsd/complexTypes.xsd | 2 +- .../XML/XmlWorkflow/xsd/complex_nillable.xsd | 65 + .../xsd/complex_restriction_with_use.xsd | 71 + .../xsd/complex_self_recursion.xsd | 26 + .../xsd/decimal_fractiondigits.xsd | 33 + .../dont_generate_element_substitution.xsd | 41 + .../XmlWorkflow/xsd/element_in_all_minmax.xsd | 19 + .../XmlWorkflow/xsd/element_in_all_mixed.xsd | 23 + .../XML/XmlWorkflow/xsd/elements.xsd | 2 +- .../XML/XmlWorkflow/xsd/enum_field_names.xsd | 11 + .../xsd/enumeration_remove_dup.xsd | 79 + .../xsd/enumeration_restriction.xsd | 128 + .../xsd/enumeration_restriction2.xsd | 51 + .../xsd/extending_complex_types.xsd | 2 +- .../XML/XmlWorkflow/xsd/fixed_value.xsd | 23 + .../xsd/generate_element_substitution.xsd | 41 + .../XML/XmlWorkflow/xsd/group_all.xsd | 2 +- .../XML/XmlWorkflow/xsd/groups.xsd | 2 +- .../XML/XmlWorkflow/xsd/id_attrib.xsd | 10 + .../XmlWorkflow/xsd/import_prefix_name.xsd | 22 + .../XML/XmlWorkflow/xsd/imported2.xsd | 21 + .../XML/XmlWorkflow/xsd/imported_module.xsd | 7 + .../XML/XmlWorkflow/xsd/imported_module_.xsd | 6 + .../XmlWorkflow/xsd/imported_prefix_name.xsd | 27 + .../XML/XmlWorkflow/xsd/include1dir1a.xsd | 2 +- .../XML/XmlWorkflow/xsd/include1dir1b.xsd | 2 +- .../XML/XmlWorkflow/xsd/include1dir2a.xsd | 2 +- .../XML/XmlWorkflow/xsd/include1dir2b.xsd | 2 +- .../XML/XmlWorkflow/xsd/includeCircular1a.xsd | 2 +- .../XML/XmlWorkflow/xsd/includeCircular1b.xsd | 2 +- .../XML/XmlWorkflow/xsd/includeCircular2a.xsd | 2 +- .../XML/XmlWorkflow/xsd/includeCircular2b.xsd | 2 +- .../XML/XmlWorkflow/xsd/includeCircular3a.xsd | 2 +- .../XML/XmlWorkflow/xsd/includeCircular3b.xsd | 2 +- .../XML/XmlWorkflow/xsd/includeCircular4a.xsd | 2 +- .../XML/XmlWorkflow/xsd/includeCircular4b.xsd | 2 +- regression_test/XML/XmlWorkflow/xsd/list.xsd | 2 +- .../XML/XmlWorkflow/xsd/list_invalid.xsd | 2 +- .../XML/XmlWorkflow/xsd/list_simpletype.xsd | 90 + .../XML/XmlWorkflow/xsd/long_extension.xsd | 76 + .../XML/XmlWorkflow/xsd/minBound_maxBound.xsd | 2 +- .../XmlWorkflow/xsd/minOccurs_maxOccurs.xsd | 2 +- .../xsd/module_typename_conversion.xsd | 19 + .../xsd/module_typename_conversion_1.xsd | 18 + .../xsd/name_clash_element-attribute.xsd | 2 +- ...ame_clash_element-attribute_noNsPrefix.xsd | 2 +- .../xsd/name_conv_non_alphanumeric.xsd | 5 + .../xsd/name_conv_remove_seq_of_low_line.xsd | 5 + .../XML/XmlWorkflow/xsd/name_conv_with_z.xsd | 5 + .../xsd/name_conversion_extension_attrib.xsd | 34 + .../XML/XmlWorkflow/xsd/namespaceas.xsd | 61 + .../XmlWorkflow/xsd/nillable_annotations.xsd | 28 + .../XML/XmlWorkflow/xsd/nillable_fixed.xsd | 31 + .../xsd/nillable_in_nillable_extension.xsd | 36 + .../XML/XmlWorkflow/xsd/no_ns_connector.xsd | 14 + .../xsd/not_a_number_minex_inf_maxex_-inf.xsd | 65 + .../xsd/qualified_element_attrib.xsd | 29 + .../XML/XmlWorkflow/xsd/ranges_float.xsd | 2 +- .../XML/XmlWorkflow/xsd/ranges_integer.xsd | 2 +- .../XmlWorkflow/xsd/regex_square_brackets.xsd | 24 + .../xsd/restricting_complex_types.xsd | 2 +- .../XML/XmlWorkflow/xsd/schema.xsd | 2 +- .../XmlWorkflow/xsd/seq_group_reference.xsd | 31 + .../xsd/sequence_embeds_sequence.xsd | 28 + .../XML/XmlWorkflow/xsd/simpletype_base.xsd | 15 + .../XML/XmlWorkflow/xsd/simpletype_ref.xsd | 65 + .../xsd/simpletype_restrict_comp.xsd | 50 + .../XML/XmlWorkflow/xsd/substitutiongroup.xsd | 44 + .../substitutiongroup_abstract_block_1.xsd | 44 + .../substitutiongroup_abstract_block_2.xsd | 44 + ...stitutiongroup_complex_without_element.xsd | 54 + .../xsd/substitutiongroup_long_extension.xsd | 66 + .../xsd/substitutiongroup_main.xsd | 17 + .../XmlWorkflow/xsd/substitutiongroup_neg.xsd | 29 + .../XmlWorkflow/xsd/substitutiongroup_ref.xsd | 12 + .../xsd/type_conversion_follow.xsd | 41 + regression_test/XML/XmlWorkflow/xsd/union.xsd | 2 +- .../xsd/unqualified_element_attrib.xsd | 29 + .../XML/XmlWorkflow/xsd/xml_in_annotation.xsd | 22 + regression_test/XML/macros.ttcnin | 2 +- regression_test/XML/tpdValidTest/Makefile | 2 +- .../tpdTest/Abstract_Socket_CNL113384.tpd | 85 + .../tpdTest/AoC_v1.1.2_CNL113653.tpd | 43 + .../tpdValidTest/tpdTest/BFCP_CNL113751.tpd | 63 + .../tpdTest/BICC_ANSI_CNL113397.tpd | 62 + .../tpdTest/BICC_Q.1902.1_CNL113359.tpd | 62 + .../tpdTest/BICC_TTC_CNL113416.tpd | 62 + .../tpdTest/BSSGP_v10.6.0_CNL113750.tpd | 57 + .../tpdTest/BSSGP_v9.4.0_CNL113720.tpd | 57 + .../tpdTest/BSSMAP_v11.2.0_CNL113761.tpd | 59 + .../tpdTest/BSSMAP_v8.6.0_CNL113655.tpd | 59 + .../tpdTest/CAP_v2_v6.4.0_CNL113483.tpd | 70 + .../tpdTest/CAP_v4.7.0_CNL113425.tpd | 101 + .../tpdTest/CAP_v4_v7.2.0_CNL113572.tpd | 110 + .../tpdTest/CAP_v4_v7.6.0_CNL113721.tpd | 116 + .../tpdTest/CCAPI_MINSAT_60_CNL113601.tpd | 439 +++ .../tpdTest/CDR_v9.12.0_CNL113757.tpd | 70 + .../tpdTest/CDR_v9.5.0_CNL113712.tpd | 71 + .../tpdTest/CDR_v9.5.0_SGSN_CNL113728.tpd | 70 + .../tpdTest/CIP_CS4.0_CNL113535.tpd | 64 + .../tpdTest/CIP_Orga_Italy_CNL113701.tpd | 65 + .../tpdValidTest/tpdTest/DHCP_CNL113461.tpd | 61 + .../tpdValidTest/tpdTest/DHCPv6_CNL113763.tpd | 47 + .../tpdValidTest/tpdTest/DNS_CNL113429.tpd | 42 + .../tpdTest/DSS1_ETSI_CNL113435.tpd | 77 + .../tpdValidTest/tpdTest/EAP_CNL113722.tpd | 68 + .../tpdTest/ECMS_CORBAmsg_CNL113687.tpd | 100 + .../tpdTest/EPTF_Applib_BICC_CNL113711.tpd | 61 + .../tpdTest/EPTF_Applib_BSSMAP_CNL113608.tpd | 53 + .../tpdTest/EPTF_Applib_CAI3G_CNL113566.tpd | 63 + .../tpdTest/EPTF_Applib_CAP_CNL113662.tpd | 54 + .../EPTF_Applib_CAP_Common_CNL113662.tpd | 53 + .../tpdTest/EPTF_Applib_CAP_v2_CNL113662.tpd | 45 + .../tpdTest/EPTF_Applib_CAP_v3_CNL113662.tpd | 46 + .../tpdTest/EPTF_Applib_CAP_v4_CNL113662.tpd | 45 + .../EPTF_Applib_CAP_v4_v760_CNL113662.tpd | 45 + .../tpdTest/EPTF_Applib_CIP_All_CNL113666.tpd | 41 + .../tpdTest/EPTF_Applib_CIP_CNL113666.tpd | 51 + .../EPTF_Applib_CIP_Orga_CNL113666.tpd | 45 + .../tpdTest/EPTF_Applib_DNS_CNL113597.tpd | 118 + .../tpdTest/EPTF_Applib_DSS1_CNL113748.tpd | 63 + .../EPTF_Applib_Diameter_CNL113521.tpd | 93 + .../EPTF_Applib_EricssonRTC_CNL113683.tpd | 53 + .../tpdTest/EPTF_Applib_H248_CNL113523.tpd | 95 + .../tpdTest/EPTF_Applib_HTTP_CNL113618.tpd | 108 + .../tpdTest/EPTF_Applib_INAP_CNL113596.tpd | 52 + .../tpdTest/EPTF_Applib_ISUP_CNL113681.tpd | 63 + .../tpdTest/EPTF_Applib_IUA_CNL113747.tpd | 67 + .../tpdTest/EPTF_Applib_LANL2_CNL113698.tpd | 101 + .../tpdTest/EPTF_Applib_LNP_CNL113714.tpd | 61 + .../tpdTest/EPTF_Applib_MAP_CNL113595.tpd | 57 + .../tpdTest/EPTF_Applib_MLSim_CNL113568.tpd | 54 + .../tpdTest/EPTF_Applib_MSRP_CNL113564.tpd | 57 + .../EPTF_Applib_MobileL3_CNL113609.tpd | 49 + .../tpdTest/EPTF_Applib_RANAP_CNL113647.tpd | 49 + .../tpdTest/EPTF_Applib_SDP_CNL113744.tpd | 94 + .../tpdTest/EPTF_Applib_SGsAP_CNL113723.tpd | 135 + .../tpdTest/EPTF_Applib_SIP_CNL113522.tpd | 87 + .../tpdTest/EPTF_Applib_SOAP_CNL113620.tpd | 98 + .../tpdTest/EPTF_Applib_SRVCC_CNL113741.tpd | 81 + .../tpdTest/EPTF_Applib_STUN_CNL113645.tpd | 119 + .../EPTF_Applib_UPloadCP_CNL113634.tpd | 61 + .../EPTF_Applib_UserPlane_CNL113724.tpd | 60 + .../tpdTest/EPTF_Applib_VXML_CNL113565.tpd | 121 + .../tpdTest/EPTF_Applib_XCAP_CNL113534.tpd | 146 + .../tpdValidTest/tpdTest/EPTF_CLL_Base.tpd | 35 + .../tpdValidTest/tpdTest/EPTF_CLL_Buffer.tpd | 35 + .../XML/tpdValidTest/tpdTest/EPTF_CLL_CLI.tpd | 39 + .../tpdTest/EPTF_CLL_CentralScheduling.tpd | 43 + .../EPTF_CLL_CentralSchedulingUIHandler.tpd | 39 + .../tpdValidTest/tpdTest/EPTF_CLL_Common.tpd | 57 + .../tpdTest/EPTF_CLL_DataSource.tpd | 41 + .../tpdTest/EPTF_CLL_ExecCtrl.tpd | 56 + .../tpdTest/EPTF_CLL_ExecCtrl_UI.tpd | 47 + .../XML/tpdValidTest/tpdTest/EPTF_CLL_FBQ.tpd | 35 + .../tpdTest/EPTF_CLL_GUIViewer.tpd | 47 + .../tpdValidTest/tpdTest/EPTF_CLL_HashMap.tpd | 43 + .../tpdTest/EPTF_CLL_HostAdmin.tpd | 46 + .../tpdTest/EPTF_CLL_HostAdmin_UI.tpd | 41 + .../tpdValidTest/tpdTest/EPTF_CLL_ILog.tpd | 39 + .../tpdTest/EPTF_CLL_ILogBase.tpd | 38 + .../tpdTest/EPTF_CLL_ILogString.tpd | 35 + .../tpdTest/EPTF_CLL_LGenBase.tpd | 82 + .../tpdTest/EPTF_CLL_LGenBase_UI.tpd | 35 + .../tpdTest/EPTF_CLL_LoadRegulator.tpd | 38 + .../tpdTest/EPTF_CLL_LoadRegulatorUI.tpd | 38 + .../tpdValidTest/tpdTest/EPTF_CLL_Logging.tpd | 35 + .../tpdTest/EPTF_CLL_Logging_Client.tpd | 35 + .../tpdTest/EPTF_CLL_Logging_Server.tpd | 39 + .../tpdTest/EPTF_CLL_Logging_UI.tpd | 42 + .../tpdValidTest/tpdTest/EPTF_CLL_NQueue.tpd | 36 + .../tpdTest/EPTF_CLL_NameService.tpd | 37 + .../tpdTest/EPTF_CLL_PTCDeployment.tpd | 37 + .../tpdTest/EPTF_CLL_RandomNArray.tpd | 34 + .../tpdTest/EPTF_CLL_RedBlackTree.tpd | 43 + .../tpdTest/EPTF_CLL_Rendezvous.tpd | 40 + .../tpdTest/EPTF_CLL_RingBuffer.tpd | 34 + .../tpdTest/EPTF_CLL_Scheduler.tpd | 38 + .../tpdTest/EPTF_CLL_Semaphore.tpd | 36 + .../tpdTest/EPTF_CLL_StatCapture.tpd | 42 + .../tpdTest/EPTF_CLL_StatCaptureControl.tpd | 37 + .../tpdTest/EPTF_CLL_StatCaptureUI.tpd | 40 + .../tpdTest/EPTF_CLL_StatHandler.tpd | 46 + .../tpdTest/EPTF_CLL_StatHandler_UI.tpd | 41 + .../tpdTest/EPTF_CLL_StatManager.tpd | 40 + .../tpdTest/EPTF_CLL_StatMeasure.tpd | 39 + .../tpdTest/EPTF_CLL_StatReplay.tpd | 42 + .../tpdTest/EPTF_CLL_TimeProfileEditor.tpd | 40 + .../tpdTest/EPTF_CLL_Transport.tpd | 37 + .../tpdTest/EPTF_CLL_TransportRouting.tpd | 34 + .../EPTF_CLL_Transport_CommPortIPL4.tpd | 36 + .../tpdTest/EPTF_CLL_Transport_Common.tpd | 34 + .../tpdTest/EPTF_CLL_Transport_IPL2.tpd | 52 + .../tpdTest/EPTF_CLL_Transport_IPL4.tpd | 43 + ...PTF_CLL_Transport_MessageBufferManager.tpd | 37 + .../tpdTest/EPTF_CLL_UIHandler.tpd | 103 + .../tpdTest/EPTF_CLL_Variable.tpd | 41 + .../tpdTest/EPTF_CLL_Variable_UI.tpd | 39 + .../EPTF_CommonTransport_M3_CNL113682.tpd | 95 + .../EPTF_CommonTransport_SCCP_CNL113610.tpd | 58 + .../EPTF_CommonTransport_TCAP_CNL113592.tpd | 66 + .../tpdTest/EPTF_FreeBusyQueue_demo.tpd | 42 + .../XML/tpdValidTest/tpdTest/EPTF_GenApp.tpd | 72 + .../tpdValidTest/tpdTest/EPTF_GenApp_AC.tpd | 33 + .../tpdValidTest/tpdTest/EPTF_GenApp_AIR.tpd | 35 + .../tpdValidTest/tpdTest/EPTF_GenApp_ASDP.tpd | 39 + .../tpdTest/EPTF_GenApp_ATandT.tpd | 76 + .../tpdTest/EPTF_GenApp_BCS_AC.tpd | 52 + .../tpdTest/EPTF_GenApp_BCS_SSP.tpd | 42 + .../tpdTest/EPTF_GenApp_BCS_WCE.tpd | 97 + .../tpdTest/EPTF_GenApp_CAI3G.tpd | 34 + .../tpdTest/EPTF_GenApp_CAPv2.tpd | 38 + .../tpdTest/EPTF_GenApp_CAPv3.tpd | 38 + .../tpdTest/EPTF_GenApp_CAPv4.tpd | 39 + .../tpdValidTest/tpdTest/EPTF_GenApp_CCMP.tpd | 38 + .../tpdValidTest/tpdTest/EPTF_GenApp_CIP.tpd | 36 + .../tpdTest/EPTF_GenApp_CIP_Orga.tpd | 36 + .../tpdValidTest/tpdTest/EPTF_GenApp_CLF.tpd | 45 + .../tpdTest/EPTF_GenApp_CLFv2.tpd | 38 + .../tpdValidTest/tpdTest/EPTF_GenApp_CNS.tpd | 41 + .../tpdValidTest/tpdTest/EPTF_GenApp_CSCF.tpd | 45 + .../tpdTest/EPTF_GenApp_CSCFclient.tpd | 48 + .../tpdTest/EPTF_GenApp_Common.tpd | 92 + .../tpdTest/EPTF_GenApp_DIAMETER.tpd | 38 + .../tpdValidTest/tpdTest/EPTF_GenApp_DNS.tpd | 38 + .../tpdValidTest/tpdTest/EPTF_GenApp_DSC.tpd | 42 + .../tpdValidTest/tpdTest/EPTF_GenApp_EDB.tpd | 79 + .../tpdTest/EPTF_GenApp_EDB_CLI.tpd | 82 + .../tpdValidTest/tpdTest/EPTF_GenApp_EPC.tpd | 46 + .../tpdValidTest/tpdTest/EPTF_GenApp_ETM.tpd | 408 +++ .../tpdTest/EPTF_GenApp_ETM_CAPv2.tpd | 58 + .../tpdTest/EPTF_GenApp_ETM_CAPv3.tpd | 67 + .../tpdTest/EPTF_GenApp_ETM_CAPv4.tpd | 67 + .../tpdTest/EPTF_GenApp_ETM_CAPv4_v760.tpd | 67 + .../tpdTest/EPTF_GenApp_ETM_CCA.tpd | 55 + .../tpdTest/EPTF_GenApp_ETM_CSCF.tpd | 44 + .../tpdTest/EPTF_GenApp_ETM_DCC.tpd | 47 + .../tpdTest/EPTF_GenApp_ETM_ECC.tpd | 49 + .../tpdTest/EPTF_GenApp_ETM_HomeZone.tpd | 47 + .../tpdTest/EPTF_GenApp_ETM_LTE_INAP.tpd | 55 + .../tpdTest/EPTF_GenApp_ETM_MCC.tpd | 57 + .../tpdTest/EPTF_GenApp_ETM_NP.tpd | 45 + .../tpdTest/EPTF_GenApp_ETM_NP21.tpd | 51 + .../tpdTest/EPTF_GenApp_ETM_SNA.tpd | 41 + .../tpdTest/EPTF_GenApp_ETM_SNA2.tpd | 48 + .../tpdValidTest/tpdTest/EPTF_GenApp_H248.tpd | 41 + .../tpdValidTest/tpdTest/EPTF_GenApp_HLR.tpd | 45 + .../tpdTest/EPTF_GenApp_HLRsim.tpd | 43 + .../tpdValidTest/tpdTest/EPTF_GenApp_HTTP.tpd | 38 + .../tpdValidTest/tpdTest/EPTF_GenApp_INAP.tpd | 38 + .../tpdValidTest/tpdTest/EPTF_GenApp_ISUP.tpd | 36 + .../tpdValidTest/tpdTest/EPTF_GenApp_LDAP.tpd | 73 + .../tpdValidTest/tpdTest/EPTF_GenApp_LNP.tpd | 37 + .../tpdValidTest/tpdTest/EPTF_GenApp_LRF.tpd | 39 + .../tpdValidTest/tpdTest/EPTF_GenApp_LTE.tpd | 56 + .../tpdTest/EPTF_GenApp_MABEZ.tpd | 45 + .../tpdValidTest/tpdTest/EPTF_GenApp_MAP.tpd | 35 + .../tpdValidTest/tpdTest/EPTF_GenApp_MGW.tpd | 45 + .../tpdTest/EPTF_GenApp_MMESim.tpd | 43 + .../tpdTest/EPTF_GenApp_MMsim.tpd | 42 + .../tpdValidTest/tpdTest/EPTF_GenApp_MRFC.tpd | 44 + .../tpdValidTest/tpdTest/EPTF_GenApp_MSS.tpd | 49 + .../tpdValidTest/tpdTest/EPTF_GenApp_MTAS.tpd | 84 + .../tpdTest/EPTF_GenApp_MTAS_noSS7.tpd | 79 + .../tpdValidTest/tpdTest/EPTF_GenApp_MWI.tpd | 45 + .../tpdTest/EPTF_GenApp_MWIAS.tpd | 45 + .../tpdValidTest/tpdTest/EPTF_GenApp_Meta.tpd | 74 + .../tpdValidTest/tpdTest/EPTF_GenApp_NACF.tpd | 40 + .../tpdValidTest/tpdTest/EPTF_GenApp_NASS.tpd | 53 + .../tpdTest/EPTF_GenApp_Netconf.tpd | 39 + .../tpdValidTest/tpdTest/EPTF_GenApp_OCF.tpd | 45 + .../tpdTest/EPTF_GenApp_PCRFsim.tpd | 44 + .../tpdValidTest/tpdTest/EPTF_GenApp_PGM.tpd | 373 +++ .../tpdTest/EPTF_GenApp_PGM_HTTP.tpd | 36 + .../tpdTest/EPTF_GenApp_PGM_SIP.tpd | 37 + .../tpdTest/EPTF_GenApp_ParlayX.tpd | 36 + .../tpdValidTest/tpdTest/EPTF_GenApp_RACF.tpd | 40 + .../tpdValidTest/tpdTest/EPTF_GenApp_SCP.tpd | 37 + .../tpdValidTest/tpdTest/EPTF_GenApp_SIP.tpd | 34 + .../tpdValidTest/tpdTest/EPTF_GenApp_SNA.tpd | 37 + .../tpdValidTest/tpdTest/EPTF_GenApp_SOAP.tpd | 36 + .../tpdValidTest/tpdTest/EPTF_GenApp_UAAF.tpd | 38 + .../tpdValidTest/tpdTest/EPTF_GenApp_USSD.tpd | 35 + .../tpdTest/EPTF_GenApp_UserPlane.tpd | 42 + .../tpdValidTest/tpdTest/EPTF_GenApp_VMS.tpd | 44 + .../tpdValidTest/tpdTest/EPTF_GenApp_VXML.tpd | 36 + .../tpdTest/EPTF_GenApp_WCE_HTTP_Client.tpd | 36 + .../tpdValidTest/tpdTest/EPTF_GenApp_XCAP.tpd | 37 + .../tpdValidTest/tpdTest/EPTF_ILog_demo.tpd | 45 + .../tpdTest/EricssonRTC_CNL113414.tpd | 67 + .../Ericsson_INAP_CS1plus_CNL113356.tpd | 66 + .../tpdTest/Ericsson_MAP_v2_CNL113725.tpd | 51 + .../tpdTest/GCP_31r1_CNL113364.tpd | 69 + .../tpdTest/GTP_v9.11.0_CNL113765.tpd | 70 + .../tpdTest/GTPv2_Sv_v10.5.0_CNL113740.tpd | 50 + .../tpdTest/GTPv2_Sv_v11.4.0_CNL113777.tpd | 73 + .../tpdTest/GTPv2_Sv_v9.1.0_CNL113703.tpd | 64 + .../tpdTest/GTPv2_Sv_v9.7.0_CNL113730.tpd | 62 + .../tpdTest/GTPv2_Sv_v9.8.0_CNL113737.tpd | 62 + .../tpdTest/GTPv2_v11.x.0_CNL113753.tpd | 60 + .../tpdTest/GiGnREPLAYasp_CNL113604.tpd | 69 + .../tpdTest/H225.0_v0298_CNL113354.tpd | 193 ++ .../tpdTest/H245_v6_CNL113587.tpd | 185 ++ .../tpdTest/H248_v2_CNL113424.tpd | 75 + .../tpdTest/HTTPmsg_CNL113312.tpd | 64 + .../tpdValidTest/tpdTest/IMSA2_CNL113693.tpd | 59 + .../tpdTest/IOS_HRPD_CLN113752.tpd | 47 + .../tpdValidTest/tpdTest/IPL4_EIN_SCTP.tpd | 254 ++ .../tpdTest/IPL4asp_CNL113531.tpd | 147 + .../tpdTest/IPL4asp_CNL113531_Interface.tpd | 51 + .../XML/tpdValidTest/tpdTest/IP_CNL113418.tpd | 64 + .../tpdTest/IP_Daemon_Dynamic_CNL113739.tpd | 82 + .../IP_Daemon_Dynamic_CNL113739_demo.tpd | 39 + .../tpdTest/ISUP_ANSI_CNL113411.tpd | 62 + .../tpdTest/ISUP_Q.762_CNL113365.tpd | 62 + .../tpdTest/ISUP_Q.762_TCOM_CNL113762.tpd | 52 + .../tpdTest/ISUP_for_Japan_CNL113727.tpd | 62 + .../tpdValidTest/tpdTest/IUA_CNL113439.tpd | 47 + .../tpdTest/JSON_v07_2006_CNL113676.tpd | 47 + .../XML/tpdValidTest/tpdTest/JUnit.tpd | 33 + .../tpdTest/LANL2asp_CNL113519.tpd | 70 + .../LDAPasp_RFC4511_CNL113513_Functions.tpd | 56 + .../LDAPasp_RFC4511_CNL113513_TestPort.tpd | 62 + .../tpdTest/LNP_ANSI_CNL113715.tpd | 67 + .../tpdTest/LOADMEASasp_CNL113585.tpd | 75 + .../tpdValidTest/tpdTest/M2PA_CNL113558.tpd | 47 + .../tpdTest/M3AP_v9.4.0_CNL113735.tpd | 320 ++ .../tpdTest/M3UA_SCTP_Daemon_CNL113487.tpd | 55 + .../tpdTest/MAP_ANSI_v2.0_CNL113673.tpd | 61 + .../tpdTest/MAP_ANSI_v2.0_CNL113673_demo.tpd | 62 + .../tpdTest/MAP_Current_CNL113745_1.tpd | 182 ++ .../tpdTest/MAP_Current_CNL113745_1_HLR.tpd | 194 ++ .../tpdTest/MAP_Current_CNL113745_1_v123.tpd | 56 + .../MAP_Current_CNL113745_1_v123_HLR.tpd | 49 + .../tpdTest/MAP_v10.4.0_CNL113736.tpd | 86 + .../tpdTest/MAP_v10.6.0_CNL113764.tpd | 74 + .../tpdValidTest/tpdTest/MAP_v1_CNL113431.tpd | 57 + .../tpdValidTest/tpdTest/MAP_v2_CNL113432.tpd | 57 + .../tpdTest/MAP_v6.11.0_CNL113500.tpd | 96 + .../tpdTest/MAP_v6.3.0_CNL113366.tpd | 88 + .../tpdTest/MAP_v7.12.0_CNL113635.tpd | 192 ++ .../tpdTest/MAP_v7.12.0_CNL113635_v123.tpd | 55 + .../tpdTest/MAP_v7.8.0_CNL113569.tpd | 85 + .../tpdTest/MAP_v9.3.0_CNL113710.tpd | 85 + .../tpdValidTest/tpdTest/MIME_CNL113352.tpd | 46 + .../tpdTest/MLSIMPLUSasp_CNL113749.tpd | 56 + .../tpdTest/MLSIMasp_CNL113538.tpd | 121 + .../tpdValidTest/tpdTest/MMLasp_CNL113490.tpd | 95 + .../tpdValidTest/tpdTest/MSRP_CNL113467.tpd | 84 + .../tpdTest/MTP3asp_CNL113337.tpd | 89 + .../tpdTest/MTP3asp_EIN_CNL113421.tpd | 78 + .../tpdTest/MobileL3_v10.5.0_CNL113758.tpd | 73 + .../tpdTest/MobileL3_v9.5.0_CNL113719.tpd | 72 + .../tpdTest/NAS_EPS_v10.6.1_CNL113746.tpd | 59 + .../tpdTest/NAS_EPS_v9.7.0_CNL113729.tpd | 58 + .../tpdValidTest/tpdTest/PIM_CNL113733.tpd | 60 + .../tpdTest/PIPEasp_CNL113334.tpd | 70 + .../tpdTest/PMIP_v10.5.0_CNL113759.tpd | 60 + .../tpdTest/PMIP_v8.5.0_CNL113704.tpd | 59 + .../tpdTest/ParlayX_CNL113540.tpd | 264 ++ .../tpdTest/ProtocolModules_Common.tpd | 36 + .../tpdTest/RANAP_v10.4.0_CNL113742.tpd | 302 ++ .../tpdTest/RANAP_v9.5.0_CNL113718.tpd | 226 ++ ...RANAP_v9.5.0_CNL113718_demo_RNC_to_RNC.tpd | 174 ++ .../tpdValidTest/tpdTest/ROSE_CNL113369.tpd | 52 + .../tpdValidTest/tpdTest/RTP_CNL113392.tpd | 50 + .../tpdValidTest/tpdTest/RTSP_CNL113588.tpd | 57 + .../tpdTest/S1AP_v10.6.0_CNL113756.tpd | 211 ++ .../tpdTest/S1AP_v8.7.0_CNL113672.tpd | 321 ++ .../tpdTest/S1AP_v9.4.0_CNL113717.tpd | 246 ++ .../tpdTest/S1AP_v9.7.0_CNL113732.tpd | 222 ++ .../tpdTest/SBC_AP_v10.0.0_CNL113734.tpd | 238 ++ .../tpdTest/SBC_AP_v9.3.0_CNL113731.tpd | 238 ++ .../tpdValidTest/tpdTest/SCCP_CNL113341.tpd | 87 + .../tpdTest/SCCPasp_CNL113348.tpd | 148 + .../tpdTest/SCTP_Daemon_CNL113477.tpd | 62 + .../tpdTest/SCTP_Daemon_Dynamic_CNL113630.tpd | 65 + .../tpdTest/SCTPasp_CNL113469.tpd | 98 + .../tpdValidTest/tpdTest/SDP_CNL113353.tpd | 81 + .../tpdTest/SGsAP_v9.0.0_CNL113684.tpd | 59 + .../tpdValidTest/tpdTest/SIPmsg_CNL113319.tpd | 85 + .../tpdValidTest/tpdTest/SNMP_CNL113774.tpd | 71 + .../tpdTest/SNMPmsg_CNL113344.tpd | 63 + .../tpdValidTest/tpdTest/SQLasp_CNL113760.tpd | 53 + .../tpdValidTest/tpdTest/SRTP_CNL113769.tpd | 53 + .../tpdTest/SS7Common_CNL113755.tpd | 66 + .../tpdTest/SSHCLIENTasp_CNL113484.tpd | 61 + .../tpdTest/STDINOUTmsg_CNL113642.tpd | 50 + .../tpdValidTest/tpdTest/STUN_CNL113644.tpd | 46 + .../tpdValidTest/tpdTest/SUA_CNL113478.tpd | 60 + .../tpdTest/SUA_Daemon_CNL113743.tpd | 63 + .../tpdValidTest/tpdTest/SUAasp_CNL113516.tpd | 67 + .../tpdTest/SUNRPCasp_CNL113493.tpd | 47 + .../tpdTest/Socket_API_CNL113686.tpd | 58 + ...scriptionHistoryProtocol_1.0_CNL113584.tpd | 460 +++ .../tpdValidTest/tpdTest/TCAP_CNL113342.tpd | 61 + .../tpdTest/TCAPasp_CNL113349.tpd | 99 + .../TCCUsefulFunctions_CNL113472_Common.tpd | 62 + .../TCCUsefulFunctions_CNL113472_IPsec.tpd | 93 + ...TCCUsefulFunctions_CNL113472_Interface.tpd | 46 + .../TCCUsefulFunctions_CNL113472_Maths.tpd | 48 + .../TCCUsefulFunctions_CNL113472_Regexp.tpd | 48 + .../TCCUsefulFunctions_CNL113472_Security.tpd | 53 + .../TCCUsefulFunctions_CNL113472_TitanSim.tpd | 51 + .../TCCUsefulFunctions_CNL113472_XPath.tpd | 56 + .../tpdValidTest/tpdTest/TCP_CNL113675.tpd | 44 + .../tpdValidTest/tpdTest/TCPasp_CNL113347.tpd | 59 + .../tpdTest/TELNET_Daemon_CNL113667.tpd | 61 + .../tpdTest/TELNETasp_CNL113320.tpd | 65 + .../tpdTest/Tariffing_v8.0.0_CNL113654.tpd | 45 + .../tpdTest/TitanSim_evolution_files.tpd | 124 + .../tpdTest/Trigger_HSS4.2_CNL113583.tpd | 518 +++ .../tpdValidTest/tpdTest/UDP_CNL113420.tpd | 58 + .../tpdValidTest/tpdTest/UDPasp_CNL113346.tpd | 57 + .../tpdTest/UPloadCP_CNL113633.tpd | 64 + .../tpdTest/XML_RPC_CNL113488.tpd | 388 +++ .../tpdValidTest/tpdTest/XSDASN_CNL113474.tpd | 144 + .../tpdValidTest/tpdTest/XTDP_CNL113663.tpd | 43 + .../tpdTest/XTDPasp_CNL113494.tpd | 64 + .../XML/tpdValidTest/tpdValidTest.sh | 4 +- .../XML/xsdConverter/Examples/Example1.xsd | 2 +- .../XML/xsdConverter/Examples/Example2.xsd | 2 +- .../XML/xsdConverter/Examples/Example3.xsd | 2 +- .../XML/xsdConverter/Examples/Example4.xsd | 2 +- .../XML/xsdConverter/Examples/Examples.ttcn | 2 +- .../XML/xsdConverter/Examples/Makefile | 2 +- .../xsdConverter/Examples/chapter_5_1_1.xsd | 2 +- .../xsdConverter/Examples/chapter_5_1_2.xsd | 2 +- .../xsdConverter/Examples/chapter_5_1_3.xsd | 2 +- .../xsdConverter/Examples/chapter_5_1_4.xsd | 2 +- .../xsdConverter/Examples/chapter_5_1_5.xsd | 2 +- .../xsdConverter/Examples/chapter_5_1_6.xsd | 2 +- .../xsdConverter/Examples/chapter_5_2_1.xsd | 2 +- .../xsdConverter/Examples/chapter_5_2_2.xsd | 2 +- .../xsdConverter/Examples/chapter_5_2_3.xsd | 2 +- .../XML/xsdConverter/Examples/chapter_6.xsd | 2 +- .../XML/xsdConverter/Examples/chapter_7_1.xsd | 2 +- .../XML/xsdConverter/Examples/chapter_7_3.xsd | 2 +- .../XML/xsdConverter/Examples/chapter_7_4.xsd | 2 +- .../XML/xsdConverter/Examples/chapter_7_5.xsd | 2 +- .../XML/xsdConverter/Examples/chapter_7_6.xsd | 2 +- .../XML/xsdConverter/Examples/chapter_7_7.xsd | 2 +- .../XML/xsdConverter/Examples/chapter_7_8.xsd | 2 +- .../XML/xsdConverter/Examples/chapter_7_9.xsd | 2 +- .../XML/xsdConverter/Examples/config.cfg | 2 +- .../XML/xsdConverter/HN21072/HN21072Test.ttcn | 2 +- .../XML/xsdConverter/HN21072/Makefile | 2 +- .../XML/xsdConverter/HN21072/W3-WSDL-chop.xsd | 2 +- .../XML/xsdConverter/HN21072/log2xml.pl | 2 +- .../XML/xsdConverter/HN65402/Makefile | 2 +- .../XML/xsdConverter/HN65402/jellystone.ttcn | 2 +- .../XML/xsdConverter/HN65402/jellystone.xsd | 2 +- .../XML/xsdConverter/HO12250/HO12250.xsd | 2 +- .../XML/xsdConverter/HO12250/Makefile | 2 +- .../XML/xsdConverter/HO16426/Makefile | 2 +- .../XML/xsdConverter/HO16426/diversion.ttcn | 2 +- .../XML/xsdConverter/HO16426/diversion.xsd | 2 +- .../XML/xsdConverter/HO18151/HO18151.ttcn | 2 +- .../XML/xsdConverter/HO18151/HO18151.xsd | 2 +- .../XML/xsdConverter/HO18151/Makefile | 2 +- .../XML/xsdConverter/HO21968/HO21968.ttcn | 2 +- .../xsdConverter/HO21968/HO21968noprefix.xsd | 2 +- .../xsdConverter/HO21968/HO21968prefix.xsd | 2 +- .../XML/xsdConverter/HO21968/Makefile | 2 +- .../XML/xsdConverter/HQ48576/HQ48576Test.ttcn | 2 +- .../XML/xsdConverter/HQ48576/Makefile | 2 +- .../XML/xsdConverter/HQ48576/hlrla_types.xsd | 2 +- regression_test/XML/xsdConverter/Makefile | 2 +- .../XML/xsdConverter/Makefile.converter | 2 +- .../acceptance_test/Fibonacci/Fibonacci.cfg | 2 +- .../acceptance_test/Fibonacci/Fibonacci.ttcn | 2 +- .../acceptance_test/Fibonacci/Makefile | 2 +- .../acceptance_test/chinese/Makefile | 2 +- .../acceptance_test/chinese/chinese.ttcn | 2 +- .../acceptance_test/comptest/Makefile | 2 +- .../acceptance_test/comptest/comptest.ttcn | 2 +- .../acceptance_test/testerlanc/Makefile | 2 +- .../testerlanc/testerlanc.ttcn | 2 +- regression_test/all_from/Makefile | 2 +- regression_test/all_from/all_from.ttcn | 2 +- .../all_from/all_from_complement.ttcn | 2 +- .../all_from/all_from_permutation.ttcn | 2 +- .../all_from/all_from_subrefs.ttcn | 284 ++ regression_test/all_from/all_from_subset.ttcn | 2 +- .../all_from/all_from_superset.ttcn | 2 +- regression_test/all_from/all_from_var.ttcn | 2 +- .../all_from/all_from_with_functions.ttcn | 2 +- regression_test/all_from/everything.ttcn | 2 +- regression_test/all_from/f_ext.cc | 2 +- regression_test/all_from/f_ext.hh | 2 +- regression_test/all_from/functions.ttcn | 2 +- .../all_from/imported_templates.ttcn | 2 +- regression_test/all_from/sapc.ttcn | 2 +- regression_test/all_from/types.ttcn | 2 +- regression_test/anytype/AnyUser.ttcnpp | 2 +- regression_test/anytype/AnytypeTest.ttcnpp | 2 +- regression_test/anytype/Makefile | 2 +- regression_test/anytype/Supplier.asn | 2 +- regression_test/anytype/config.cfg | 2 +- regression_test/anytype/noany.ttcn | 2 +- regression_test/anytype/smallany.ttcn | 2 +- regression_test/anytypeOper/Makefile | 2 +- regression_test/anytypeOper/TanytypeOper.ttcn | 2 +- .../anytypeOper/TanytypeWrapOper.ttcn | 2 +- regression_test/anytypeOper/config.cfg | 2 +- regression_test/arrayOper/Makefile | 2 +- regression_test/arrayOper/TarrayOper.ttcn | 2 +- regression_test/arrayOper/config.cfg | 2 +- regression_test/assignmentNotation/Makefile | 2 +- .../TassignmentNotation.asn | 2 +- .../TassignmentNotation.cfg | 2 +- .../TassignmentNotation.ttcn | 2 +- .../TassignmentNotation_First.cfg | 2 +- .../TassignmentNotation_Second.cfg | 2 +- .../TassignmentNotation_Third.cfg | 2 +- regression_test/basicStatem/Makefile | 2 +- regression_test/basicStatem/TbasicStatem.ttcn | 2 +- regression_test/basicStatem/config.cfg | 2 +- regression_test/bitstrOper/Makefile | 2 +- regression_test/bitstrOper/TbitstrOper.ttcn | 3 +- regression_test/bitstrOper/config.cfg | 2 +- regression_test/boolOper/Makefile | 2 +- regression_test/boolOper/TboolOper.ttcn | 2 +- regression_test/boolOper/config.cfg | 2 +- regression_test/cfgFile/Makefile | 2 +- regression_test/cfgFile/define/Makefile | 2 +- .../cfgFile/define/macro_reference/Makefile | 11 +- .../macro_reference/TSTM_macro_test_main.cfg | 2 +- .../TSTM_macro_test_testcases.ttcn | 2 +- .../cfgFile/define/structured/Makefile | 11 +- .../cfgFile/define/structured/structured.cfg | 2 +- .../cfgFile/define/structured/structured.ttcn | 2 +- .../cfgFile/module_parameters/Makefile | 4 +- .../module_parameters/assignment/Makefile | 11 +- .../assignment/assignment.cfg | 4 +- .../assignment/assignment.ttcn | 2 +- .../cfgFile/module_parameters/concat/Makefile | 11 +- .../module_parameters/concat/concat.cfg | 2 +- .../module_parameters/concat/concat.ttcn | 2 +- .../module_parameters/references/Makefile | 53 + .../references/references.cfg | 175 ++ .../references/references.ttcn | 701 +++++ .../cfgFile/ordered_include/Makefile | 11 +- .../ordered_include/config_sub2/oi2_sub.cfg | 2 +- .../configs_sub/oi1_subfolder1.cfg | 2 +- .../cfgFile/ordered_include/oi.ttcn | 2 +- .../cfgFile/ordered_include/oi1.cfg | 2 +- .../cfgFile/ordered_include/oi1_after1.cfg | 2 +- .../cfgFile/ordered_include/oi1_after2.cfg | 2 +- .../cfgFile/ordered_include/oi1_after3.cfg | 2 +- .../cfgFile/ordered_include/oi1_before1.cfg | 2 +- .../cfgFile/ordered_include/oi1_before2.cfg | 2 +- .../ordered_include/oi1_before_include.cfg | 2 +- .../cfgFile/ordered_include/oi2.cfg | 2 +- .../cfgFile/ordered_include/oi22.cfg | 2 +- .../cfgFile/ordered_include/oi23.cfg | 2 +- .../cfgFile/ordered_include/oi2_nomacro.cfg | 2 +- .../cfgFile/ordered_include/oi_after1.cfg | 2 +- .../cfgFile/ordered_include/oi_after2.cfg | 2 +- .../ordered_include/oi_after_list1.cfg | 2 +- .../ordered_include/oi_after_list2.cfg | 2 +- .../cfgFile/ordered_include/oi_before1.cfg | 2 +- .../cfgFile/ordered_include/oi_before2.cfg | 2 +- .../cfgFile/ordered_include/oi_before3.cfg | 2 +- .../cfgFile/ordered_include/oi_before4.cfg | 2 +- .../cfgFile/ordered_include/oi_before5.cfg | 2 +- .../oi_include_interference.cfg | 2 +- .../ordered_include/oi_include_mix.cfg | 2 +- .../cfgFile/ordered_include/oi_last1.cfg | 2 +- .../cfgFile/ordered_include/oi_last2.cfg | 2 +- .../cfgFile/ordered_include/oi_last3.cfg | 2 +- .../cfgFile/ordered_include/oi_subfolder1.cfg | 2 +- .../cfgFile/testport_parameters/Makefile | 11 +- .../cfgFile/testport_parameters/PCOType.cc | 2 +- .../cfgFile/testport_parameters/PCOType.hh | 2 +- .../testport_parameters/array_index.cfg | 2 +- .../testport_parameters/array_index.ttcn | 2 +- regression_test/cfg_list_concat/Makefile | 2 +- regression_test/cfg_list_concat/concat.prj | 2 +- regression_test/cfg_list_concat/concat.ttcn | 2 +- .../cfg_list_concat/everything.cfg | 2 +- regression_test/cfg_list_concat/sub1.cfg | 2 +- regression_test/cfg_list_concat/sub2.cfg | 2 +- regression_test/charOper/Makefile | 2 +- regression_test/charOper/TcharOper.ttcn | 2 +- regression_test/charOper/config.cfg | 2 +- regression_test/charstrOper/Makefile | 2 +- regression_test/charstrOper/TcharstrOper.ttcn | 2 +- regression_test/charstrOper/config.cfg | 2 +- regression_test/commMessage/HS41022.ttcn | 2 +- .../commMessage/ImplMsgEncData.asn | 2 +- regression_test/commMessage/Makefile | 2 +- regression_test/commMessage/TcommMessage.ttcn | 2 +- regression_test/commMessage/config.cfg | 2 +- .../commMessage/config_parallel.cfg | 2 +- regression_test/commProcedure/ExtProcPort.cc | 2 +- regression_test/commProcedure/ExtProcPort.hh | 2 +- regression_test/commProcedure/Makefile | 2 +- regression_test/commProcedure/PortAddress.cc | 2 +- regression_test/commProcedure/PortAddress.hh | 2 +- regression_test/commProcedure/ProcPort.ttcn | 54 +- regression_test/compileonly/Makefile | 4 +- .../compileonly/assignmentNotation/Makefile | 2 +- .../TassignmentNotation.ttcn | 2 +- .../compileonly/attribQualif/Makefile | 2 +- .../attribQualif/TattribQualif.ttcn | 2 +- .../compileonly/centralstorage/Makefile | 2 +- .../centralstorage/base_asn/Base_asn.asn | 2 +- .../base_mixed/Base_mixed_asn.asn | 2 +- .../base_mixed/base_mixed_PT.cc | 2 +- .../base_mixed/base_mixed_PT.hh | 2 +- .../base_mixed/base_mixed_ttcn.ttcn | 2 +- .../base_mixed/base_mixed_ttcnpp.ttcnpp | 2 +- .../centralstorage/base_ttcn/base_PT.cc | 2 +- .../centralstorage/base_ttcn/base_PT.hh | 2 +- .../centralstorage/base_ttcn/base_ttcn.ttcnpp | 2 +- .../extended_ttcn/extended_ttcn.ttcn | 2 +- .../extended_ttcn/extended_ttcnpp.ttcnpp | 2 +- .../separate_project/separate_PT.cc | 2 +- .../separate_project/separate_PT.hh | 2 +- .../separate_project/separate_ttcn.ttcn | 2 +- .../separate_project/separate_ttcnpp.ttcnpp | 2 +- .../centralstorage/separate_user/config.cfg | 2 +- .../separate_user/separate_user.ttcn | 2 +- .../user_all_bases/user_all_bases.ttcn | 2 +- .../centralstorage/user_ttcn/fake.ttcnpp | 2 +- .../centralstorage/user_ttcn/user_ttcn.ttcn | 2 +- .../compileonly/circularImport/A.asn | 2 +- .../compileonly/circularImport/B.asn | 2 +- .../compileonly/circularImport/Makefile | 2 +- .../compileonly/compareImported/A.ttcn | 2 +- .../compileonly/compareImported/B.ttcn | 2 +- .../compileonly/compareImported/C.ttcn | 2 +- .../compileonly/compareImported/Makefile | 2 +- .../compileonly/compoundif/Makefile | 2 +- .../compileonly/compoundif/Tcompoundif.ttcn | 2 +- .../dynamicTemplate/DynamicTemplate.ttcn | 2 +- .../compileonly/dynamicTemplate/Makefile | 2 +- .../compileonly/dynamicTemplate/external.cc | 2 +- regression_test/compileonly/isbound/Makefile | 2 +- .../compileonly/isbound/bad_SE.ttcn | 2 +- .../compileonly/isbound/bogus_SY.ttcn | 2 +- .../isbound/isbound_component_OK.ttcn | 2 +- .../compileonly/isbound/isbound_port_SE.ttcn | 2 +- .../isbound/isbound_testcase_SE.ttcn | 2 +- .../compileonly/isbound/one_OK.ttcn | 2 +- .../COMMON/ProtocolModules_Common.tpd | 2 +- .../mfgen-tpd/COMMON/src/General_Types.ttcn | 2 +- .../COMMON/src/MobileDomainDefinitions.asn | 2 +- .../mfgen-tpd/HP79745/Hello000/Hello000.tpd | 2 +- .../HP79745/Hello000/src/MyExample0.ttcn | 2 +- .../mfgen-tpd/HP79745/Hello123/Hello123.tpd | 2 +- .../HP79745/Hello123/src/MyExample1.ttcn | 2 +- .../mfgen-tpd/HP79745/HelloTpd/HelloTpd.tpd | 2 +- .../HP79745/HelloTpd/src/MyExample.ttcn | 2 +- .../compileonly/mfgen-tpd/HP79745/Makefile | 2 +- .../compileonly/mfgen-tpd/HQ56829/Makefile | 2 +- .../compileonly/mfgen-tpd/HQ56834/Makefile | 2 +- .../compileonly/mfgen-tpd/HQ56834/counter.tpd | 2 +- .../mfgen-tpd/HQ56834/src/counter.ttcn | 2 +- .../compileonly/mfgen-tpd/HQ56848/Makefile | 2 +- .../compileonly/mfgen-tpd/HQ56848/counter.tpd | 2 +- .../mfgen-tpd/HQ56848/src/counter.ttcn | 2 +- .../compileonly/mfgen-tpd/HQ60308/counter.tpd | 2 +- .../mfgen-tpd/HQ60308/src/counter.ttcn | 2 +- .../compileonly/mfgen-tpd/HR30356/Makefile | 2 +- .../mfgen-tpd/HR30356/client/client.tpd | 2 +- .../mfgen-tpd/HR30356/client/src/client.ttcn | 2 +- .../HR30356/controller/controller.tpd | 2 +- .../HR30356/controller/src/controller.ttcn | 2 +- .../mfgen-tpd/HR30356/server/server.tpd | 2 +- .../mfgen-tpd/HR30356/server/src/server.ttcn | 2 +- .../HR30356/testport/src/testport.ttcn | 2 +- .../mfgen-tpd/HR30356/testport/testport.tpd | 2 +- .../mfgen-tpd/HR30365/Hello000/Hello000.tpd | 2 +- .../HR30365/Hello000/src/MyExample0.ttcn | 2 +- .../mfgen-tpd/HR30365/Hello123/Hello123.tpd | 2 +- .../HR30365/Hello123/src/MyExample1.ttcn | 2 +- .../mfgen-tpd/HR30365/HelloTpd/HelloTpd.tpd | 2 +- .../HR30365/HelloTpd/src/MyExample.ttcn | 2 +- .../compileonly/mfgen-tpd/HR30365/Makefile | 2 +- .../compileonly/mfgen-tpd/Makefile | 2 +- .../NAS_EPS_v9.7.0_CNL113729.tpd | 2 +- .../src/NAS_EPS_v970.ttcn | 2 +- .../test/NAS_EPS_Test.cfg | 2 +- .../test/NAS_EPS_Test.ttcn | 2 +- .../test/NAS_EPS_v9.7.0_CNL113729_test.tpd | 2 +- .../buildconfig_param/HelloTpd/HelloTpd.tpd | 2 +- .../HelloTpd/src/MyExample.cfg | 2 +- .../HelloTpd/src/MyExample.ttcn | 2 +- .../buildconfig_param/HelloTpd/src/PCOType.cc | 2 +- .../buildconfig_param/HelloTpd/src/PCOType.hh | 2 +- .../mfgen-tpd/buildconfig_param/Makefile | 2 +- .../consumer-ref-supplier-Default.tpd | 2 +- .../mfgen-tpd/consumer/creator.ttcn | 2 +- .../mfgen-tpd/consumer/src/consumer.ttcn | 2 +- .../mfgen-tpd/consumer/src/userfun.cc | 2 +- .../mfgen-tpd/dependency_check/Makefile | 2 +- .../dependency_check/client/client.tpd | 2 +- .../dependency_check/client/src/client.ttcn | 2 +- .../controller/controller.tpd | 2 +- .../controller/src/controller.ttcn | 2 +- .../dependency_check/server/server.tpd | 2 +- .../dependency_check/server/src/server.ttcn | 2 +- .../testport/src/testport.ttcn | 2 +- .../dependency_check/testport/testport.tpd | 2 +- .../mfgen-tpd/flagTest/Hello000/Hello000.tpd | 2 +- .../flagTest/Hello000/src/MyExample0.ttcn | 2 +- .../mfgen-tpd/flagTest/Hello123/Hello123.tpd | 2 +- .../flagTest/Hello123/src/MyExample1.ttcn | 2 +- .../mfgen-tpd/flagTest/HelloTpd/HelloTpd.tpd | 2 +- .../flagTest/HelloTpd/src/MyExample.ttcn | 2 +- .../flagTest/HelloTpd2/HelloTpd2.tpd | 2 +- .../flagTest/HelloTpd2/src/MyExample2.ttcn | 2 +- .../compileonly/mfgen-tpd/flagTest/Makefile | 2 +- .../compileonly/mfgen-tpd/handmade.ttcn | 2 +- .../HelloTpd/HelloTpd.tpd | 2 +- .../HelloTpd/src/MyExample.cfg | 2 +- .../HelloTpd/src/MyExample.ttcn | 2 +- .../HelloTpd/src/PCOType.cc | 2 +- .../HelloTpd/src/PCOType.hh | 2 +- .../invalid_buildconfig_param/Makefile | 2 +- .../Hello000/Hello000.tpd | 2 +- .../Hello000/src/MyExample0.cfg | 2 +- .../Hello000/src/MyExample0.ttcn | 2 +- .../Hello000/src/PCOType0.cc | 2 +- .../Hello000/src/PCOType0.hh | 2 +- .../Hello123/Hello123.tpd | 2 +- .../Hello123/src/MyExample1.cfg | 2 +- .../Hello123/src/MyExample1.ttcn | 2 +- .../Hello123/src/PCOType1.cc | 2 +- .../Hello123/src/PCOType1.hh | 2 +- .../HelloTpd/HelloTpd.tpd | 2 +- .../HelloTpd/src/MyExample.cfg | 2 +- .../HelloTpd/src/MyExample.ttcn | 2 +- .../HelloTpd/src/PCOType.cc | 2 +- .../HelloTpd/src/PCOType.hh | 2 +- .../invalid_buildconfig_tpd/Makefile | 2 +- .../mfgen-tpd/library/HelloTpd/HelloTpd.tpd | 2 +- .../library/HelloTpd/src/MyExample.cfg | 2 +- .../library/HelloTpd/src/MyExample.ttcn | 2 +- .../mfgen-tpd/library/HelloTpd/src/PCOType.cc | 2 +- .../mfgen-tpd/library/HelloTpd/src/PCOType.hh | 2 +- .../mfgen-tpd/library/HelloTpd2/HelloTpd.tpd | 2 +- .../compileonly/mfgen-tpd/library/Makefile | 2 +- .../compileonly/mfgen-tpd/library/a.ttcn | 2 +- .../compileonly/mfgen-tpd/library/b.ttcn | 2 +- .../library/central_storage/central.ttcn | 2 +- .../compileonly/mfgen-tpd/outsider.ttcn | 2 +- .../compileonly/mfgen-tpd/runner.pl | 2 +- .../mfgen-tpd/subplier/src/subway.ttcn | 2 +- .../mfgen-tpd/subplier/subplier.tpd | 2 +- .../mfgen-tpd/supplier/src/supplier.ttcn | 2 +- .../mfgen-tpd/supplier/src/supplier2.ttcn | 2 +- .../mfgen-tpd/supplier/supplier24.tpd | 2 +- .../namedActualParameters/Makefile | 2 +- .../TnamedActualParameters.ttcn | 2 +- regression_test/compileonly/openType/Makefile | 2 +- regression_test/compileonly/openType/X.asn | 2 +- .../openTypeNames/IO_based_message.asn | 86 + .../compileonly/openTypeNames/Makefile | 42 + .../openTypeNames/Open_type_use.ttcn | 212 ++ .../optionalAssignCompare/Makefile | 2 +- .../ToptionalAssignCompare.ttcn | 2 +- .../compileonly/portConstructor/Makefile | 2 +- .../compileonly/portConstructor/x.ttcn | 2 +- .../styleGuide/Another_module.ttcn | 2 +- .../compileonly/styleGuide/Makefile | 2 +- .../compileonly/styleGuide/MyASN1_module.asn | 2 +- .../styleGuide/MySample_module.ttcn | 2 +- .../compileonly/styleGuide/external.cc | 2 +- regression_test/compileonly/topLevelPdu/A.asn | 2 +- regression_test/compileonly/topLevelPdu/B.asn | 2 +- .../compileonly/topLevelPdu/Makefile | 2 +- .../compileonly/typeInstantiation/A.asn | 2 +- .../compileonly/typeInstantiation/B.asn | 2 +- .../compileonly/typeInstantiation/Makefile | 2 +- regression_test/configOper/Makefile | 2 +- regression_test/configOper/TconfigOper.ttcn | 2 +- regression_test/controlTimer/Makefile | 2 +- .../controlTimer/TcontrolTimer.ttcn | 2 +- regression_test/controlTimer/config.cfg | 2 +- regression_test/defaultOper/Makefile | 2 +- regression_test/defaultOper/TdefaultOper.ttcn | 2 +- regression_test/defaultOper/config.cfg | 2 +- regression_test/enumOper/Makefile | 2 +- regression_test/enumOper/TenumOper.ttcn | 38 +- regression_test/enumOper/config.cfg | 2 +- regression_test/floatOper/Makefile | 2 +- regression_test/floatOper/TfloatOper.ttcn | 6 +- regression_test/floatOper/config.cfg | 2 +- .../functionReference/FuncRef.ttcn | 10 +- regression_test/functionReference/Makefile | 2 +- regression_test/functionReference/config.cfg | 2 +- regression_test/functionSubref/Makefile | 54 + .../functionSubref/TfunctionSubref.ttcn | 586 ++++ .../functionSubref/TpardTemplateSubref.ttcn | 205 ++ regression_test/functionSubref/config.cfg | 15 + regression_test/hexstrOper/Makefile | 2 +- regression_test/hexstrOper/ThexstrOper.ttcn | 2 +- regression_test/hexstrOper/config.cfg | 2 +- regression_test/iconv/Makefile | 2 +- regression_test/iconv/config.cfg | 2 +- regression_test/iconv/converter.ttcn | 2 +- regression_test/iconv/convertest.ttcn | 8 +- regression_test/iconv/iconver.cc | 2 +- regression_test/implicitMsgEncoding/Makefile | 2 +- .../implicitMsgEncoding/PCOType.cc | 2 +- .../implicitMsgEncoding/PCOType.hh | 2 +- .../implicitMsgEncoding/TimplicitEnc.ttcn | 2 +- .../implicitMsgEncoding/config.cfg | 2 +- regression_test/implicitOmit/Makefile | 2 +- regression_test/implicitOmit/config.cfg | 2 +- regression_test/implicitOmit/io.ttcn | 2 +- regression_test/intOper/Makefile | 2 +- regression_test/intOper/PCOType.cc | 2 +- regression_test/intOper/PCOType.hh | 2 +- regression_test/intOper/TintOper.ttcn | 110 +- regression_test/intOper/config.cfg | 2 +- regression_test/ipv6/Makefile | 2 +- regression_test/ipv6/host_ipv6_global.cfg | 2 +- regression_test/ipv6/host_link_local.cfg | 2 +- regression_test/ipv6/invalid_global_ipv6.cfg | 2 +- .../ipv6/invalid_global_ipv6_long.cfg | 2 +- regression_test/ipv6/ip_create_on_host.cfg | 2 +- regression_test/ipv6/ipv6.ttcn | 2 +- regression_test/ipv6/ipv6_all_global.cfg | 2 +- .../ipv6/ipv6_long_short_global.cfg | 2 +- regression_test/ipv6/ipv_hostname_macro.cfg | 2 +- regression_test/ipv6/link_local_ipv6.cfg | 2 +- .../ipv6/localhost_create_on_host.cfg | 2 +- .../ipv6/localhost_ip_create_on_host.cfg | 2 +- .../ipv6/long_host_ipv6_global.cfg | 2 +- regression_test/ipv6/long_ipv6_global.cfg | 2 +- .../ipv6/no_full_syntax_check_link_local.cfg | 2 +- .../no_full_syntax_check_link_local_long.cfg | 2 +- regression_test/ipv6/total_link_local.cfg | 2 +- regression_test/ipv6/valid_global_ipv6.cfg | 2 +- regression_test/ispresent/IsPresent_Test.cfg | 2 +- regression_test/ispresent/IsPresent_Test.ttcn | 17 +- regression_test/ispresent/Makefile | 2 +- regression_test/json/AttributeTestcases.ttcn | 126 +- regression_test/json/Functions.ttcn | 27 +- regression_test/json/JSON.cfg | 2 +- regression_test/json/JsonData.asn | 8 +- regression_test/json/Makefile | 2 +- regression_test/json/SemanticCheck.ttcn | 2 +- regression_test/json/Testcases.ttcn | 2 +- regression_test/json/Types.ttcn | 41 +- regression_test/junitlogger/Makefile | 2 +- regression_test/junitlogger/main1.cfg | 2 +- regression_test/junitlogger/main1.ttcn | 2 +- regression_test/junitlogger/test_junitlog.pl | 2 +- regression_test/junitlogger/test_junitlog.sh | 2 +- regression_test/lazyEval/LazyASNTypes.asn | 2 +- regression_test/lazyEval/Makefile | 11 +- regression_test/lazyEval/lazy.cfg | 2 +- regression_test/lazyEval/lazy_A.ttcn | 2 +- regression_test/lazyEval/lazy_B.ttcn | 2 +- regression_test/lazyEval/lazy_defs.ttcn | 2 +- regression_test/lazyEval/lazy_main.ttcn | 2 +- regression_test/logFiles/CommonStuff.ttcn | 2 +- regression_test/logFiles/LogFiles.cfg | 2 +- regression_test/logFiles/LogFiles.ttcn | 2 +- regression_test/logFiles/LogFiles2.cfg | 2 +- regression_test/logFiles/LogFilesInc.cfg | 2 +- regression_test/logFiles/LogFilesProc.cfg | 2 +- regression_test/logFiles/Makefile | 3 +- regression_test/logFiles/TitanLogTest.cfg | 2 +- regression_test/logFiles/TitanLogTest.ttcn | 2 +- regression_test/logFiles/extfunc.cc | 2 +- regression_test/logFiles/filtered_e.log2 | 2 + regression_test/logFiles/lfilter.log2 | 4 + regression_test/logFiles/logFiles_doc.script | 2 +- regression_test/logFiles/logfilter.sh | 22 + regression_test/logger/Makefile | 2 +- .../logger/emergency_logging/Console_N.txt | 2 +- .../logger/emergency_logging/Console_O.txt | 2 +- .../emergency_logging/EL_BufferAll_1.cfg | 2 +- .../emergency_logging/EL_BufferAll_10.cfg | 2 +- .../emergency_logging/EL_BufferAll_11.cfg | 2 +- .../emergency_logging/EL_BufferAll_12.cfg | 2 +- .../emergency_logging/EL_BufferAll_13.cfg | 2 +- .../emergency_logging/EL_BufferAll_1_NOEL.cfg | 2 +- .../emergency_logging/EL_BufferAll_2.cfg | 2 +- .../emergency_logging/EL_BufferAll_3.cfg | 2 +- .../emergency_logging/EL_BufferAll_3_NOEL.cfg | 2 +- .../emergency_logging/EL_BufferAll_4.cfg | 2 +- .../emergency_logging/EL_BufferAll_5.cfg | 2 +- .../emergency_logging/EL_BufferAll_6.cfg | 2 +- .../emergency_logging/EL_BufferAll_7.cfg | 2 +- .../emergency_logging/EL_BufferAll_7A.cfg | 2 +- .../emergency_logging/EL_BufferAll_8.cfg | 2 +- .../emergency_logging/EL_BufferAll_9.cfg | 2 +- .../emergency_logging/EL_BufferMasked_1.cfg | 2 +- .../emergency_logging/EL_BufferMasked_10.cfg | 2 +- .../emergency_logging/EL_BufferMasked_11.cfg | 2 +- .../emergency_logging/EL_BufferMasked_12.cfg | 2 +- .../emergency_logging/EL_BufferMasked_13.cfg | 2 +- .../emergency_logging/EL_BufferMasked_2.cfg | 2 +- .../emergency_logging/EL_BufferMasked_3.cfg | 2 +- .../emergency_logging/EL_BufferMasked_4.cfg | 2 +- .../emergency_logging/EL_BufferMasked_5.cfg | 2 +- .../emergency_logging/EL_BufferMasked_6.cfg | 2 +- .../emergency_logging/EL_BufferMasked_7.cfg | 2 +- .../emergency_logging/EL_BufferMasked_8.cfg | 2 +- .../emergency_logging/EL_BufferMasked_9.cfg | 2 +- .../emergency_logging/EmergencyLogTest.sh | 2 +- .../EmergencyLoggingTest.ttcn | 2 +- .../EmergencyLoggingTest_BuffMasked.cfg | 2 +- .../logger/emergency_logging/Makefile | 2 +- .../logger/emergency_logging/PCO_PT.cc | 2 +- .../logger/emergency_logging/PCO_PT.hh | 2 +- .../emergency_logging/Titan_LogTest.ttcn | 2 +- .../Titan_LogTestDefinitions.ttcn | 2 +- .../emergency_logging/failed_testcases.txt | 2 +- .../logger/emergency_logging/runlog.txt | 2 +- regression_test/logger/logcontrol/Makefile | 2 +- .../logcontrol/Titan_LogControlTest.cfg | 2 +- .../logcontrol/Titan_LogControlTest.ttcn | 2 +- .../logtest/Console_original_merged_log.txt | 2 +- regression_test/logger/logtest/Makefile | 2 +- regression_test/logger/logtest/PCO_PT.cc | 2 +- regression_test/logger/logtest/PCO_PT.hh | 2 +- .../logger/logtest/Titan_LogTest.cfg | 2 +- .../logger/logtest/Titan_LogTest.ttcn | 2 +- .../logtest/Titan_LogTestDefinitions.ttcn | 2 +- .../logger/logtest/Titan_LogTest_ACTION.cfg | 2 +- .../Titan_LogTest_ACTIONplusEXECUTOR_RT.cfg | 2 +- .../logger/logtest/Titan_LogTest_DEBUG.cfg | 2 +- ...itan_LogTest_DEFAULT_OPplusEXECUTOR_RT.cfg | 2 +- .../logtest/Titan_LogTest_ERRORplusRT.cfg | 2 +- .../logtest/Titan_LogTest_EXECUTOR_LOGOPT.cfg | 2 +- .../Titan_LogTest_EXECUTOR_RTplusCOMP.cfg | 2 +- .../Titan_LogTest_EXECUTOR_RTplusLOGOPT.cfg | 2 +- .../logger/logtest/Titan_LogTest_EXEC_RT.cfg | 2 +- .../logtest/Titan_LogTest_EX_UNQUAL.cfg | 2 +- .../Titan_LogTest_E_RTplus_E_CONFIGDATA.cfg | 2 +- .../logger/logtest/Titan_LogTest_FUNC.cfg | 2 +- .../logger/logtest/Titan_LogTest_MATCH.cfg | 2 +- .../logger/logtest/Titan_LogTest_PARALLEL.cfg | 2 +- .../logtest/Titan_LogTest_PORTEVENT.cfg | 2 +- .../logger/logtest/Titan_LogTest_STAT.cfg | 2 +- .../logger/logtest/Titan_LogTest_TC.cfg | 2 +- .../logger/logtest/Titan_LogTest_TIMER.cfg | 2 +- .../logtest/Titan_LogTest_TTCN_ACTION.cfg | 2 +- .../logger/logtest/Titan_LogTest_USER.cfg | 2 +- .../logger/logtest/Titan_LogTest_VERDICT.cfg | 2 +- .../logger/logtest/Titan_LogTest_WARNING.cfg | 2 +- regression_test/logger/logtest/logtest.sh | 2 +- .../logger/logtest/original_merged_log.txt | 2 +- .../logtest/original_merged_log_modified.txt | 2 +- regression_test/logger_control/Makefile | 2 +- regression_test/logger_control/config.cfg | 2 +- .../logger_control/logcontrol.ttcn | 2 +- regression_test/loggerplugin/Makefile | 2 +- regression_test/loggerplugin/a.ttcn | 2 +- regression_test/loggerplugin/config.cfg | 2 +- regression_test/lostTimer/Makefile | 2 +- regression_test/lostTimer/TlostTimer.ttcn | 5 +- regression_test/lostTimer/config.cfg | 2 +- regression_test/macros/Macros.ttcn | 2 +- regression_test/macros/Makefile | 2 +- regression_test/macros/config.cfg | 2 +- regression_test/modifiedTemplate/Makefile | 2 +- .../modifiedTemplate/TmodifiedTemplate.ttcn | 2 +- regression_test/modifiedTemplate/config.cfg | 2 +- .../namedActualParameters/Makefile | 2 +- .../namedActualParameters/config.cfg | 2 +- .../namedActualParameters/inlinetemplate.ttcn | 2 +- .../namedActualParameters/namedparam.ttcn | 2 +- .../namedActualParameters/small.ttcn | 2 +- .../namedActualParameters/templates.ttcn | 2 +- regression_test/negativeTest/Makefile | 2 +- regression_test/negativeTest/NegTest.cfg | 2 +- .../negativeTest/NegTestTestcases.ttcn | 2 +- regression_test/negativeTest/NegTestTypes.asn | 2 +- regression_test/negativeTest/NegTest_RAW.cfg | 2 +- .../negativeTest/NegTest_RAW_Testcases.ttcn | 2 +- .../negativeTest/NegTest_RAW_Types.ttcn | 2 +- regression_test/negativeTest/NegTest_TEXT.cfg | 2 +- .../negativeTest/NegTest_TEXT_Testcases.ttcn | 2 +- .../negativeTest/NegTest_TEXT_Types.ttcn | 2 +- regression_test/negativeTest/NegTest_XML.cfg | 2 +- .../negativeTest/NegTest_XML_Testcases.ttcn | 2 +- .../negativeTest/NegTest_XML_Types.xsd | 2 +- regression_test/negativeTest/NegTest_all.cfg | 2 +- regression_test/negativeTest/Types.asn | 2 +- .../negativeTest/UsefulTtcn3Types.ttcn | 2 +- regression_test/negativeTest/XSD.ttcn | 2 +- regression_test/negativeTest/config.cfg | 2 +- regression_test/negativeTest/negtest.ttcn | 2 +- ...ww_XmlTest_org_negativeTest_XML_Types.ttcn | 2 +- regression_test/nonMandatoryPar/Makefile | 2 +- regression_test/nonMandatoryPar/PCOType.cc | 2 +- regression_test/nonMandatoryPar/PCOType.hh | 2 +- .../nonMandatoryPar/TnonMandatory.ttcn | 2 +- regression_test/nonMandatoryPar/config.cfg | 2 +- regression_test/objidOper/Makefile | 2 +- regression_test/objidOper/TobjidOper.ttcn | 9 +- regression_test/objidOper/config.cfg | 2 +- regression_test/objidOper/indexer.cc | 2 +- regression_test/octetstrOper/Makefile | 2 +- .../octetstrOper/ToctetstrOper.ttcn | 3 +- regression_test/octetstrOper/config.cfg | 2 +- regression_test/omitdef/Datatypes.asn | 2 +- regression_test/omitdef/Dumping.hh | 2 +- regression_test/omitdef/Makefile | 2 +- regression_test/omitdef/PT_DefOpt.cc | 2 +- regression_test/omitdef/PT_DefOpt.hh | 2 +- regression_test/omitdef/Tsenderos.ttcn | 2 +- regression_test/omitdef/config.cfg | 2 +- regression_test/pattern_quadruples/Makefile | 2 +- regression_test/pattern_quadruples/config.cfg | 2 +- .../pattern_quadruples.ttcn | 2 +- regression_test/preCompilerFlags/Makefile | 2 +- .../preCompilerFlags/TpreCompilerFlags.ttcnpp | 2 +- regression_test/preCompilerFlags/config.cfg | 2 +- regression_test/predefFunction/Makefile | 2 +- regression_test/predefFunction/PreDef.cfg | 2 +- regression_test/predefFunction/bit_to_OK.ttcn | 2 +- regression_test/predefFunction/bit_to_SW.ttcn | 2 +- .../predefFunction/char_to_OK.ttcn | 2 +- .../predefFunction/char_to_SW.ttcn | 2 +- regression_test/predefFunction/encdec_OK.ttcn | 2 +- .../predefFunction/enum_to_OK.ttcn | 2 +- .../predefFunction/enum_to_SW.ttcn | 2 +- .../predefFunction/float_to_OK.ttcn | 2 +- .../predefFunction/float_to_SW.ttcn | 2 +- regression_test/predefFunction/hex_to_OK.ttcn | 2 +- regression_test/predefFunction/hex_to_SW.ttcn | 2 +- regression_test/predefFunction/int_to_OK.ttcn | 2 +- regression_test/predefFunction/int_to_SW.ttcn | 2 +- .../predefFunction/isprecho_OK.ttcn | 2 +- .../predefFunction/length_of_OK.ttcn | 2 +- .../predefFunction/length_of_SW.ttcn | 2 +- regression_test/predefFunction/oct_to_OK.ttcn | 2 +- regression_test/predefFunction/oct_to_SW.ttcn | 2 +- regression_test/predefFunction/regex_OK.ttcn | 2 +- .../predefFunction/replacer_OK.ttcn | 2 +- .../predefFunction/replacer_SW.ttcn | 2 +- regression_test/predefFunction/rotter_OK.ttcn | 2 +- regression_test/predefFunction/rotter_SW.ttcn | 2 +- regression_test/predefFunction/shifty_OK.ttcn | 2 +- regression_test/predefFunction/shifty_SW.ttcn | 2 +- .../predefFunction/size_of_OK.ttcn | 2 +- .../predefFunction/size_of_SW.ttcn | 2 +- regression_test/predefFunction/str_to_OK.ttcn | 2 +- regression_test/predefFunction/str_to_SW.ttcn | 2 +- .../predefFunction/sub_str_OK.ttcn | 2 +- .../predefFunction/sub_str_SW.ttcn | 2 +- regression_test/predefFunction/tcname_OK.ttcn | 2 +- regression_test/predefFunction/tcname_SW.ttcn | 2 +- regression_test/prereq.pl | 2 +- regression_test/profiler/Makefile | 3 +- regression_test/profiler/PIPEasp_PT.cc | 2 +- regression_test/profiler/PIPEasp_PT.hh | 2 +- .../profiler/PIPEasp_PortType.ttcn | 2 +- .../profiler/PIPEasp_Templates.ttcn | 2 +- regression_test/profiler/PIPEasp_Types.ttcn | 2 +- regression_test/profiler/Shell.ttcn | 18 +- regression_test/profiler/Testcases.ttcn | 72 +- regression_test/profiler/data_e.json | 37 + regression_test/profiler/double_e.json | 263 ++ regression_test/profiler/double_e.stats | 84 + regression_test/profiler/merged_e.stats | 84 + regression_test/profiler/prof2.cfg | 2 +- regression_test/profiler/prof3.cfg | 2 +- regression_test/recofOper/BerType.asn | 2 +- regression_test/recofOper/Circular1.ttcn | 22 + regression_test/recofOper/Circular2.ttcn | 17 + regression_test/recofOper/Makefile | 4 +- regression_test/recofOper/TrecofOper.ttcn | 2 +- regression_test/recofOper/TrecofParamRef.ttcn | 2 +- regression_test/recofOper/config.cfg | 2 +- regression_test/recordOper/Makefile | 2 +- regression_test/recordOper/TrecordOper.ttcn | 2 +- regression_test/recordOper/config.cfg | 2 +- regression_test/setOper/Makefile | 2 +- regression_test/setOper/TsetOper.ttcn | 2 +- regression_test/setOper/config.cfg | 2 +- regression_test/setofMatch/Makefile | 2 +- regression_test/setofMatch/TsetofMatch.ttcn | 2 +- regression_test/setofMatch/config.cfg | 2 +- regression_test/setofOper/Makefile | 2 +- regression_test/setofOper/TsetofOper.ttcn | 2 +- regression_test/setofOper/config.cfg | 2 +- regression_test/singlecontrol/Makefile | 2 +- .../singlecontrol/alsohascontrolpart.ttcn | 2 +- regression_test/singlecontrol/config.cfg | 2 +- regression_test/singlecontrol/config1.cfg | 2 +- regression_test/singlecontrol/config2.cfg | 2 +- .../singlecontrol/config_noexec.cfg | 2 +- .../singlecontrol/hascontrolpart.ttcn | 2 +- .../singlecontrol/nocontrolpart.ttcn | 2 +- regression_test/singlecontrol/ouch.cfg | 2 +- regression_test/slider/Makefile | 2 +- regression_test/slider/PT1.cc | 2 +- regression_test/slider/PT1.hh | 2 +- regression_test/slider/UNDER.cc | 2 +- regression_test/slider/UNDER.hh | 2 +- regression_test/slider/dual.ttcn | 2 +- regression_test/slider/dual2.ttcn | 2 +- regression_test/slider/dualnegtest.ttcn | 2 +- regression_test/slider/run.cfg | 2 +- regression_test/slider/slider.ttcn | 2 +- regression_test/templateAnytype/Makefile | 2 +- .../templateAnytype/TtemplateAnytype.ttcn | 2 +- regression_test/templateAnytype/config.cfg | 2 +- regression_test/templateBitstr/Makefile | 2 +- .../templateBitstr/TtemplateBitstr.ttcn | 2 +- regression_test/templateBitstr/config.cfg | 2 +- regression_test/templateBool/Makefile | 2 +- .../templateBool/TtemplateBool.ttcn | 2 +- regression_test/templateBool/config.cfg | 2 +- regression_test/templateChar/Makefile | 2 +- .../templateChar/TtemplateChar.ttcn | 2 +- regression_test/templateChar/config.cfg | 2 +- regression_test/templateCharstr/Makefile | 2 +- .../templateCharstr/TtemplateCharstr.ttcn | 2 +- regression_test/templateCharstr/config.cfg | 2 +- regression_test/templateEnum/Makefile | 2 +- .../templateEnum/TtemplateEnum.ttcn | 2 +- regression_test/templateEnum/config.cfg | 2 +- regression_test/templateFloat/Makefile | 2 +- .../templateFloat/TtemplateFloat.ttcn | 22 +- regression_test/templateFloat/config.cfg | 2 +- regression_test/templateInt/Makefile | 2 +- regression_test/templateInt/TtemplateInt.ttcn | 33 +- regression_test/templateInt/config.cfg | 2 +- regression_test/templateOctetstr/Makefile | 2 +- .../templateOctetstr/TtemplateOctetstr.ttcn | 2 +- regression_test/templateOctetstr/config.cfg | 2 +- .../templateOmit/Common/Templates.ttcn | 51 + .../templateOmit/Common/Types.ttcn | 53 + .../LegacyTests/LegacyTestcases.ttcn | 529 ++++ .../templateOmit/LegacyTests/Makefile | 58 + .../templateOmit/LegacyTests/legacy.cfg | 14 + regression_test/templateOmit/Makefile | 24 + .../templateOmit/NewTests/Makefile | 56 + .../templateOmit/NewTests/NewTestcases.ttcn | 423 +++ regression_test/templateOmit/NewTests/new.cfg | 14 + regression_test/templateRec/Makefile | 4 +- regression_test/templateRec/TtemplateRec.ttcn | 15 +- .../templateRec/TtemplateRecAsn.asn | 2 +- regression_test/templateRec/config.cfg | 2 +- regression_test/templateRecof/Makefile | 2 +- .../templateRecof/TmultiplePermutations.ttcn | 2 +- .../templateRecof/TtemplateRecof.ttcn | 2 +- regression_test/templateRecof/config.cfg | 2 +- regression_test/templateSet/Makefile | 2 +- regression_test/templateSet/TtemplateSet.ttcn | 2 +- regression_test/templateSet/config.cfg | 2 +- regression_test/templateSetof/Makefile | 2 +- .../templateSetof/TtemplateSetof.ttcn | 2 +- regression_test/templateSetof/config.cfg | 2 +- regression_test/templateUnion/Makefile | 2 +- .../templateUnion/TtemplateUnion.ttcn | 2 +- regression_test/templateUnion/config.cfg | 2 +- regression_test/testcase_defparam/Makefile | 2 +- regression_test/testcase_defparam/config.cfg | 2 +- .../testcase_defparam/tcdefparam.ttcn | 2 +- regression_test/text2ttcn/Makefile | 107 +- regression_test/text2ttcn/array_test.ttcn | 2 +- regression_test/text2ttcn/bitstring_test.ttcn | 2 +- regression_test/text2ttcn/boolean_test.ttcn | 2 +- .../text2ttcn/charstring_test.ttcn | 8 +- regression_test/text2ttcn/component_test.ttcn | 2 +- regression_test/text2ttcn/enum_test.ttcn | 2 +- regression_test/text2ttcn/float_test.ttcn | 2 +- regression_test/text2ttcn/functions.ttcn | 2 +- regression_test/text2ttcn/hexstring_test.ttcn | 2 +- regression_test/text2ttcn/integer_test.ttcn | 2 +- regression_test/text2ttcn/objid_test.ttcn | 2 +- .../text2ttcn/octetstring_test.ttcn | 2 +- regression_test/text2ttcn/record_test.ttcn | 2 +- regression_test/text2ttcn/recordof_test.ttcn | 2 +- regression_test/text2ttcn/set_test.ttcn | 3 +- regression_test/text2ttcn/setof_test.ttcn | 2 +- regression_test/text2ttcn/text2ttcn_1.cfg | 2 +- regression_test/text2ttcn/types.ttcn | 2 +- .../text2ttcn/ucharstring_test.ttcn | 2 +- regression_test/text2ttcn/union_test.ttcn | 2 +- regression_test/transparent/Makefile | 2 +- regression_test/transparent/run.cfg | 2 +- regression_test/transparent/transparent.ttcn | 2 +- regression_test/tryCatch/Makefile | 2 +- regression_test/tryCatch/PCOType.cc | 2 +- regression_test/tryCatch/PCOType.hh | 2 +- regression_test/tryCatch/external_function.cc | 2 +- regression_test/tryCatch/tryCatch.cfg | 2 +- .../tryCatch/tryCatch_Functions.ttcn | 2 +- .../tryCatch/tryCatch_Testcases.ttcn | 2 +- regression_test/ttcn2json/CompareSchemas.ttcn | 37 +- regression_test/ttcn2json/General_Types.ttcn | 2 +- .../ttcn2json/General_Types_e.json | 769 +++-- regression_test/ttcn2json/Main_e.json | 1 + regression_test/ttcn2json/Makefile | 4 +- regression_test/ttcn2json/MiniRanap_e.json | 1 + regression_test/ttcn2json/PIPEasp_PT.cc | 2 +- regression_test/ttcn2json/PIPEasp_PT.hh | 2 +- .../ttcn2json/PIPEasp_PortType.ttcn | 2 +- .../ttcn2json/PIPEasp_Templates.ttcn | 2 +- regression_test/ttcn2json/PIPEasp_Types.ttcn | 2 +- regression_test/ttcn2json/Shell.ttcn | 2 +- regression_test/ttcn2json/SubType.ttcn | 125 + regression_test/ttcn2json/SubType_e.json | 632 ++++ regression_test/ttcn2json/Testcases.ttcn | 9 +- .../ttcn2json/f_ext_import_schema.cc | 149 +- regression_test/ttcn2json/one.ttcn | 10 +- regression_test/ttcn2json/one_e.json | 329 +- regression_test/ttcn2json/three.ttcn | 5 +- regression_test/ttcn2json/three_e.json | 78 +- regression_test/ttcn2json/two.ttcn | 11 +- regression_test/ttcn2json/two_e.json | 76 +- regression_test/ttcn2json/zero.asn | 2 +- regression_test/typeCompat/ASN_Ext.asn | 2 +- regression_test/typeCompat/Compat.ttcn | 2 +- regression_test/typeCompat/Ext.ttcn | 2 +- regression_test/typeCompat/Ext2.ttcn | 2 +- regression_test/typeCompat/Makefile | 2 +- regression_test/typeCompat/Std.ttcn | 2 +- regression_test/typeCompat/config.cfg | 2 +- .../ucharstrOper/Base64Testcases.ttcn | 2 +- regression_test/ucharstrOper/Common.ttcn | 2 +- regression_test/ucharstrOper/Makefile | 2 +- .../ucharstrOper/TucharstrOper.ttcn | 2 +- .../ucharstrOper/UTF16Testcases.ttcn | 2 +- .../ucharstrOper/UTF32Testcases.ttcn | 2 +- .../ucharstrOper/UTF8Testcases.ttcn | 2 +- regression_test/ucharstrOper/config.cfg | 2 +- .../ucharstrOper/cstr_content.ttcn | 2 +- regression_test/ucharstrOper/external.cc | 2 +- regression_test/unionOper/Makefile | 2 +- regression_test/unionOper/TunionOper.ttcn | 2 +- regression_test/unionOper/config.cfg | 2 +- regression_test/vcheck.pl | 2 +- regression_test/verdictOper/Makefile | 2 +- regression_test/verdictOper/TverdictOper.ttcn | 2 +- regression_test/verdictOper/config.cfg | 2 +- regression_test/visibility/Makefile | 2 +- regression_test/visibility/Visibility.ttcn | 2 +- regression_test/visibility/config.cfg | 2 +- regression_test/visibility/module1.ttcn | 2 +- regression_test/visibility/module2.ttcn | 2 +- regression_test/visibility/module3.ttcn | 2 +- regression_test/visibility/module4.ttcn | 2 +- repgen/Makefile | 2 +- repgen/logfilter.c | 5 +- repgen/logformat.l | 69 +- repgen/logmerge.c | 2 +- repgen/parser.l | 2 +- repgen/repgen.c | 2 +- repgen/repgen.h | 2 +- repgen/ttcn3_logfilter.1 | 2 +- repgen/ttcn3_logformat.1 | 5 +- repgen/ttcn3_logmerge.1 | 2 +- .../TITAN_Executor_API/build.xml | 2 +- .../javadoc-overview/javadoc-overview.html | 2 +- .../TITAN_Executor_API/readme.txt | 2 +- .../titan/executor/jni/ComponentStruct.java | 2 +- .../titan/executor/jni/HcStateEnum.java | 2 +- .../titan/executor/jni/HostStruct.java | 2 +- .../titan/executor/jni/IJNICallback.java | 2 +- .../titan/executor/jni/JNIMiddleWare.java | 2 +- .../titan/executor/jni/McStateEnum.java | 2 +- .../titan/executor/jni/QualifiedName.java | 2 +- .../titan/executor/jni/TcStateEnum.java | 2 +- .../eclipse/titan/executor/jni/Timeval.java | 2 +- .../titan/executor/jni/TransportTypeEnum.java | 2 +- .../titan/executor/jni/VerdictTypeEnum.java | 2 +- .../titan/executorapi/HostController.java | 2 +- .../executorapi/IJniExecutorObserver.java | 2 +- .../titan/executorapi/JniExecutor.java | 2 +- .../exception/JniExecutorException.java | 2 +- .../JniExecutorIllegalArgumentException.java | 2 +- .../JniExecutorJniLoadException.java | 2 +- .../JniExecutorStartSessionException.java | 2 +- .../JniExecutorWrongStateException.java | 2 +- .../titan/executorapi/package-info.java | 2 +- .../eclipse/titan/executorapi/util/Log.java | 2 +- .../titan/executorapi/util/StringUtil.java | 2 +- .../titan/executorapi/demo/CommonData.java | 2 +- .../titan/executorapi/demo/DemoFrame.java | 2 +- .../executorapi/demo/ExecuteCfgDialog.java | 2 +- .../demo/ExecuteControlDialog.java | 2 +- .../demo/ExecuteTestcaseDialog.java | 2 +- .../eclipse/titan/executorapi/demo/Main.java | 2 +- .../TITAN_Executor_API_test/build.xml | 2 +- .../build_and_run_test.sh | 82 + .../TITAN_Executor_API_test/readme.txt | 101 +- .../HostControllerErrorIllegalArgTest.java | 2 +- .../JniExecutorAsyncErrorIllegalArgTest.java | 2 +- .../test/JniExecutorAsyncErrorTest.java | 2 +- .../JniExecutorAsyncErrorWrongStateTest.java | 2 +- .../test/JniExecutorAsyncHappySimpleTest.java | 2 +- .../test/JniExecutorAsyncHappyTest.java | 2 +- .../test/JniExecutorAsyncTest.java | 2 +- .../executorapi/test/JniExecutorSync.java | 2 +- .../executorapi/test/JniExecutorSyncTest.java | 2 +- .../executorapi/test/JniExecutorTest.java | 2 +- .../executorapi/test/NormalTestObserver.java | 2 +- .../executorapi/test/StringUtilTest.java | 2 +- .../titan/executorapi/test/Test1Observer.java | 2 +- .../titan/executorapi/test/Test2Observer.java | 2 +- .../titan/executorapi/test/TestConstants.java | 2 +- .../executorapi/test/TestObserverBase.java | 2 +- .../titan/executorapi/test/TestUtil.java | 2 +- .../doc/Titan_Executor_API_User_Guide.doc | Bin 64512 -> 74240 bytes usrguide/Makefile | 2 +- usrguide/PRI.doc | Bin 84480 -> 0 bytes usrguide/PRI.docx | Bin 0 -> 127610 bytes usrguide/apiguide.doc | Bin 555520 -> 696832 bytes usrguide/installationguide.doc | Bin 118272 -> 118784 bytes usrguide/pdfgen.sh | 2 +- usrguide/referenceguide.doc | Bin 1615360 -> 1682432 bytes usrguide/releasenotes.doc | Bin 581120 -> 581120 bytes usrguide/userguide.doc | Bin 847872 -> 849920 bytes xsdconvert/Annotation.cc | 38 +- xsdconvert/Annotation.hh | 17 +- xsdconvert/AttributeType.cc | 248 ++ xsdconvert/AttributeType.hh | 131 + xsdconvert/ComplexType.cc | 2780 +++++++++++------ xsdconvert/ComplexType.hh | 213 +- xsdconvert/FieldType.cc | 587 ---- xsdconvert/FieldType.hh | 98 - xsdconvert/GeneralFunctions.cc | 597 ++-- xsdconvert/GeneralFunctions.hh | 63 +- xsdconvert/GeneralTypes.hh | 125 +- xsdconvert/ImportStatement.cc | 126 +- xsdconvert/ImportStatement.hh | 45 +- xsdconvert/List.hh | 200 +- xsdconvert/Makefile | 6 +- xsdconvert/Mstring.cc | 182 +- xsdconvert/Mstring.hh | 127 +- xsdconvert/PredefinedModules.cc | 10 +- xsdconvert/RootType.cc | 320 +- xsdconvert/RootType.hh | 174 +- xsdconvert/SimpleType.cc | 1472 +++++---- xsdconvert/SimpleType.hh | 287 +- xsdconvert/TTCN3Module.cc | 358 ++- xsdconvert/TTCN3Module.hh | 187 +- xsdconvert/TTCN3ModuleInventory.cc | 248 +- xsdconvert/TTCN3ModuleInventory.hh | 66 +- xsdconvert/XMLParser.cc | 752 +++-- xsdconvert/XMLParser.hh | 175 +- xsdconvert/converter.cc | 394 +-- 2787 files changed, 61901 insertions(+), 12236 deletions(-) create mode 100644 core/ProfMerge_main.cc create mode 100644 core/ProfilerTools.cc create mode 100644 core/ProfilerTools.hh create mode 100644 core/ttcn3_profmerge.1 create mode 100644 function_test/Semantic_Analyser/template_restrictions/.gitignore create mode 100644 function_test/Semantic_Analyser/template_restrictions/Makefile create mode 100644 function_test/Semantic_Analyser/template_restrictions/TempRes_SE.ttcn create mode 100755 function_test/Semantic_Analyser/template_restrictions/t mode change 100644 => 100755 function_test/doc/TTCN3_Executor_TestReport.doc create mode 100644 hello/hello_world.ttcn create mode 100644 help/info/apply.html create mode 100644 help/info/derefers.html create mode 100644 help/info/int2enum.html create mode 100644 help/info/log2str.html create mode 100644 help/info/refers.html create mode 100644 makefiles/Makefile.personal.elx1pjld12-hz create mode 100644 regression_test/RAW/IntX/IntX.ttcn create mode 100644 regression_test/RAW/IntX/Makefile create mode 100644 regression_test/RAW/IntX/config.cfg create mode 100644 regression_test/XML/HU13380/HU13380.ttcn create mode 100644 regression_test/XML/HU13380/Makefile create mode 100644 regression_test/XML/HU13380/config.cfg create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/MyTypes_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/NoTargetNamespace.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/attribute_in_extension_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/http_www_example_org_complex_restriction_with_use_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/http_www_example_org_name_conv2_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/http_www_example_org_name_conv3_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/http_www_example_org_nillable_in_nillable_extension_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/http_www_example_org_seq_embeds_seq_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/http_www_example_org_wildcards_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/imported_module_1_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/imported_module_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/module_typename_conversion_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/name_conversion_extension_attrib_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/nillable_annotations_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_all_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_anyattr_in_complex_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_anyattrib_single_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_attr_ext_rest_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_attrib_enum_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_attrib_order_a_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_attrib_order_b_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_attribgroup_ingroup_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_boolean_variant_commented_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_comment_placement_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_complex_nillable_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_decimal_fractiondigits_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_dont_generate_element_substitution_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_enum_field_names_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_enumeration_remove_dup_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_enumeration_restriction_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_fixed_value_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_generate_element_substitution_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_id_attrib_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_import_prefix_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_imported2_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_imported_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_list_simpletype_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_long_extension_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_name_conv_http_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_namespaceas_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_nillable_fixed_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_no_ns_connector_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_not_a_number_minex_inf_maxex_inf_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_qualified_element_attrib_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_regex_square_brackets_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_self_recursion_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_seq_enumeration_restriction_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_seq_group_reference_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_simpletype_base_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_simpletype_ref_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_simpletype_restrict_comp_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_substitutiongroup_abstract_block_1_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_substitutiongroup_abstract_block_2_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_substitutiongroup_complex_without_element_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_substitutiongroup_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_substitutiongroup_long_extension_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_substitutiongroup_main_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_substitutiongroup_ref_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_type_attributegroup_nillable_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_type_conversion_follow_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_unnamed_union_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_unqualified_element_attrib_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_xml_in_annotation_e.ttcn create mode 100644 regression_test/XML/XmlWorkflow/xsd/anyattr_in_complex.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/anyattrib_single.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/anyattribute_optional.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/attrib_enum.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/attrib_order_a.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/attrib_order_b.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/attrib_order_c.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/attrib_restriction_extension.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/attribgroup_ingroup.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/attribute_in_extension.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/attributegroup_nillable.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/boolean_variant_commented.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/comment_placement.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/complex_nillable.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/complex_restriction_with_use.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/complex_self_recursion.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/decimal_fractiondigits.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/dont_generate_element_substitution.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/element_in_all_minmax.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/element_in_all_mixed.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/enum_field_names.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/enumeration_remove_dup.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/enumeration_restriction.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/enumeration_restriction2.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/fixed_value.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/generate_element_substitution.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/id_attrib.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/import_prefix_name.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/imported2.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/imported_module.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/imported_module_.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/imported_prefix_name.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/list_simpletype.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/long_extension.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/module_typename_conversion.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/module_typename_conversion_1.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/name_conv_non_alphanumeric.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/name_conv_remove_seq_of_low_line.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/name_conv_with_z.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/name_conversion_extension_attrib.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/namespaceas.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/nillable_annotations.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/nillable_fixed.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/nillable_in_nillable_extension.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/no_ns_connector.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/not_a_number_minex_inf_maxex_-inf.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/qualified_element_attrib.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/regex_square_brackets.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/seq_group_reference.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/sequence_embeds_sequence.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/simpletype_base.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/simpletype_ref.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/simpletype_restrict_comp.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/substitutiongroup.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/substitutiongroup_abstract_block_1.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/substitutiongroup_abstract_block_2.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/substitutiongroup_complex_without_element.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/substitutiongroup_long_extension.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/substitutiongroup_main.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/substitutiongroup_neg.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/substitutiongroup_ref.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/type_conversion_follow.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/unqualified_element_attrib.xsd create mode 100644 regression_test/XML/XmlWorkflow/xsd/xml_in_annotation.xsd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/Abstract_Socket_CNL113384.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/AoC_v1.1.2_CNL113653.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/BFCP_CNL113751.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/BICC_ANSI_CNL113397.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/BICC_Q.1902.1_CNL113359.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/BICC_TTC_CNL113416.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/BSSGP_v10.6.0_CNL113750.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/BSSGP_v9.4.0_CNL113720.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/BSSMAP_v11.2.0_CNL113761.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/BSSMAP_v8.6.0_CNL113655.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/CAP_v2_v6.4.0_CNL113483.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/CAP_v4.7.0_CNL113425.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/CAP_v4_v7.2.0_CNL113572.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/CAP_v4_v7.6.0_CNL113721.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/CCAPI_MINSAT_60_CNL113601.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/CDR_v9.12.0_CNL113757.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/CDR_v9.5.0_CNL113712.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/CDR_v9.5.0_SGSN_CNL113728.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/CIP_CS4.0_CNL113535.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/CIP_Orga_Italy_CNL113701.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/DHCP_CNL113461.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/DHCPv6_CNL113763.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/DNS_CNL113429.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/DSS1_ETSI_CNL113435.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EAP_CNL113722.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/ECMS_CORBAmsg_CNL113687.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_BICC_CNL113711.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_BSSMAP_CNL113608.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_CAI3G_CNL113566.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_CAP_CNL113662.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_CAP_Common_CNL113662.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_CAP_v2_CNL113662.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_CAP_v3_CNL113662.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_CAP_v4_CNL113662.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_CAP_v4_v760_CNL113662.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_CIP_All_CNL113666.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_CIP_CNL113666.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_CIP_Orga_CNL113666.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_DNS_CNL113597.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_DSS1_CNL113748.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_Diameter_CNL113521.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_EricssonRTC_CNL113683.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_H248_CNL113523.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_HTTP_CNL113618.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_INAP_CNL113596.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_ISUP_CNL113681.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_IUA_CNL113747.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_LANL2_CNL113698.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_LNP_CNL113714.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_MAP_CNL113595.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_MLSim_CNL113568.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_MSRP_CNL113564.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_MobileL3_CNL113609.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_RANAP_CNL113647.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_SDP_CNL113744.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_SGsAP_CNL113723.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_SIP_CNL113522.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_SOAP_CNL113620.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_SRVCC_CNL113741.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_STUN_CNL113645.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_UPloadCP_CNL113634.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_UserPlane_CNL113724.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_VXML_CNL113565.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_XCAP_CNL113534.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Base.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Buffer.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_CLI.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_CentralScheduling.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_CentralSchedulingUIHandler.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Common.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_DataSource.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_ExecCtrl.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_ExecCtrl_UI.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_FBQ.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_GUIViewer.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_HashMap.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_HostAdmin.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_HostAdmin_UI.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_ILog.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_ILogBase.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_ILogString.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_LGenBase.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_LGenBase_UI.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_LoadRegulator.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_LoadRegulatorUI.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Logging.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Logging_Client.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Logging_Server.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Logging_UI.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_NQueue.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_NameService.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_PTCDeployment.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_RandomNArray.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_RedBlackTree.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Rendezvous.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_RingBuffer.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Scheduler.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Semaphore.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_StatCapture.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_StatCaptureControl.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_StatCaptureUI.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_StatHandler.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_StatHandler_UI.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_StatManager.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_StatMeasure.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_StatReplay.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_TimeProfileEditor.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Transport.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_TransportRouting.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Transport_CommPortIPL4.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Transport_Common.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Transport_IPL2.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Transport_IPL4.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Transport_MessageBufferManager.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_UIHandler.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Variable.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Variable_UI.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_CommonTransport_M3_CNL113682.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_CommonTransport_SCCP_CNL113610.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_CommonTransport_TCAP_CNL113592.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_FreeBusyQueue_demo.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_AC.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_AIR.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ASDP.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ATandT.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_BCS_AC.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_BCS_SSP.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_BCS_WCE.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_CAI3G.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_CAPv2.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_CAPv3.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_CAPv4.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_CCMP.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_CIP.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_CIP_Orga.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_CLF.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_CLFv2.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_CNS.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_CSCF.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_CSCFclient.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_Common.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_DIAMETER.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_DNS.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_DSC.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_EDB.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_EDB_CLI.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_EPC.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM_CAPv2.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM_CAPv3.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM_CAPv4.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM_CAPv4_v760.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM_CCA.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM_CSCF.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM_DCC.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM_ECC.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM_HomeZone.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM_LTE_INAP.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM_MCC.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM_NP.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM_NP21.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM_SNA.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM_SNA2.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_H248.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_HLR.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_HLRsim.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_HTTP.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_INAP.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ISUP.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_LDAP.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_LNP.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_LRF.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_LTE.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_MABEZ.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_MAP.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_MGW.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_MMESim.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_MMsim.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_MRFC.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_MSS.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_MTAS.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_MTAS_noSS7.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_MWI.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_MWIAS.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_Meta.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_NACF.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_NASS.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_Netconf.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_OCF.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_PCRFsim.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_PGM.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_PGM_HTTP.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_PGM_SIP.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ParlayX.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_RACF.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_SCP.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_SIP.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_SNA.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_SOAP.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_UAAF.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_USSD.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_UserPlane.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_VMS.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_VXML.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_WCE_HTTP_Client.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_XCAP.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EPTF_ILog_demo.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/EricssonRTC_CNL113414.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/Ericsson_INAP_CS1plus_CNL113356.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/Ericsson_MAP_v2_CNL113725.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/GCP_31r1_CNL113364.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/GTP_v9.11.0_CNL113765.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/GTPv2_Sv_v10.5.0_CNL113740.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/GTPv2_Sv_v11.4.0_CNL113777.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/GTPv2_Sv_v9.1.0_CNL113703.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/GTPv2_Sv_v9.7.0_CNL113730.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/GTPv2_Sv_v9.8.0_CNL113737.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/GTPv2_v11.x.0_CNL113753.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/GiGnREPLAYasp_CNL113604.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/H225.0_v0298_CNL113354.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/H245_v6_CNL113587.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/H248_v2_CNL113424.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/HTTPmsg_CNL113312.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/IMSA2_CNL113693.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/IOS_HRPD_CLN113752.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/IPL4_EIN_SCTP.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/IPL4asp_CNL113531.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/IPL4asp_CNL113531_Interface.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/IP_CNL113418.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/IP_Daemon_Dynamic_CNL113739.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/IP_Daemon_Dynamic_CNL113739_demo.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/ISUP_ANSI_CNL113411.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/ISUP_Q.762_CNL113365.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/ISUP_Q.762_TCOM_CNL113762.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/ISUP_for_Japan_CNL113727.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/IUA_CNL113439.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/JSON_v07_2006_CNL113676.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/JUnit.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/LANL2asp_CNL113519.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/LDAPasp_RFC4511_CNL113513_Functions.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/LDAPasp_RFC4511_CNL113513_TestPort.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/LNP_ANSI_CNL113715.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/LOADMEASasp_CNL113585.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/M2PA_CNL113558.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/M3AP_v9.4.0_CNL113735.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/M3UA_SCTP_Daemon_CNL113487.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/MAP_ANSI_v2.0_CNL113673.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/MAP_ANSI_v2.0_CNL113673_demo.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/MAP_Current_CNL113745_1.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/MAP_Current_CNL113745_1_HLR.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/MAP_Current_CNL113745_1_v123.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/MAP_Current_CNL113745_1_v123_HLR.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/MAP_v10.4.0_CNL113736.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/MAP_v10.6.0_CNL113764.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/MAP_v1_CNL113431.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/MAP_v2_CNL113432.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/MAP_v6.11.0_CNL113500.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/MAP_v6.3.0_CNL113366.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/MAP_v7.12.0_CNL113635.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/MAP_v7.12.0_CNL113635_v123.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/MAP_v7.8.0_CNL113569.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/MAP_v9.3.0_CNL113710.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/MIME_CNL113352.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/MLSIMPLUSasp_CNL113749.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/MLSIMasp_CNL113538.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/MMLasp_CNL113490.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/MSRP_CNL113467.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/MTP3asp_CNL113337.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/MTP3asp_EIN_CNL113421.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/MobileL3_v10.5.0_CNL113758.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/MobileL3_v9.5.0_CNL113719.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/NAS_EPS_v10.6.1_CNL113746.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/NAS_EPS_v9.7.0_CNL113729.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/PIM_CNL113733.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/PIPEasp_CNL113334.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/PMIP_v10.5.0_CNL113759.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/PMIP_v8.5.0_CNL113704.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/ParlayX_CNL113540.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/ProtocolModules_Common.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/RANAP_v10.4.0_CNL113742.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/RANAP_v9.5.0_CNL113718.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/RANAP_v9.5.0_CNL113718_demo_RNC_to_RNC.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/ROSE_CNL113369.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/RTP_CNL113392.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/RTSP_CNL113588.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/S1AP_v10.6.0_CNL113756.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/S1AP_v8.7.0_CNL113672.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/S1AP_v9.4.0_CNL113717.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/S1AP_v9.7.0_CNL113732.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/SBC_AP_v10.0.0_CNL113734.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/SBC_AP_v9.3.0_CNL113731.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/SCCP_CNL113341.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/SCCPasp_CNL113348.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/SCTP_Daemon_CNL113477.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/SCTP_Daemon_Dynamic_CNL113630.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/SCTPasp_CNL113469.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/SDP_CNL113353.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/SGsAP_v9.0.0_CNL113684.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/SIPmsg_CNL113319.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/SNMP_CNL113774.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/SNMPmsg_CNL113344.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/SQLasp_CNL113760.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/SRTP_CNL113769.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/SS7Common_CNL113755.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/SSHCLIENTasp_CNL113484.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/STDINOUTmsg_CNL113642.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/STUN_CNL113644.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/SUA_CNL113478.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/SUA_Daemon_CNL113743.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/SUAasp_CNL113516.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/SUNRPCasp_CNL113493.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/Socket_API_CNL113686.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/SubscriptionHistoryProtocol_1.0_CNL113584.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/TCAP_CNL113342.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/TCAPasp_CNL113349.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/TCCUsefulFunctions_CNL113472_Common.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/TCCUsefulFunctions_CNL113472_IPsec.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/TCCUsefulFunctions_CNL113472_Interface.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/TCCUsefulFunctions_CNL113472_Maths.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/TCCUsefulFunctions_CNL113472_Regexp.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/TCCUsefulFunctions_CNL113472_Security.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/TCCUsefulFunctions_CNL113472_TitanSim.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/TCCUsefulFunctions_CNL113472_XPath.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/TCP_CNL113675.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/TCPasp_CNL113347.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/TELNET_Daemon_CNL113667.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/TELNETasp_CNL113320.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/Tariffing_v8.0.0_CNL113654.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/TitanSim_evolution_files.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/Trigger_HSS4.2_CNL113583.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/UDP_CNL113420.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/UDPasp_CNL113346.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/UPloadCP_CNL113633.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/XML_RPC_CNL113488.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/XSDASN_CNL113474.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/XTDP_CNL113663.tpd create mode 100644 regression_test/XML/tpdValidTest/tpdTest/XTDPasp_CNL113494.tpd create mode 100644 regression_test/all_from/all_from_subrefs.ttcn create mode 100644 regression_test/cfgFile/module_parameters/references/Makefile create mode 100644 regression_test/cfgFile/module_parameters/references/references.cfg create mode 100644 regression_test/cfgFile/module_parameters/references/references.ttcn create mode 100644 regression_test/compileonly/openTypeNames/IO_based_message.asn create mode 100644 regression_test/compileonly/openTypeNames/Makefile create mode 100644 regression_test/compileonly/openTypeNames/Open_type_use.ttcn create mode 100644 regression_test/functionSubref/Makefile create mode 100644 regression_test/functionSubref/TfunctionSubref.ttcn create mode 100644 regression_test/functionSubref/TpardTemplateSubref.ttcn create mode 100644 regression_test/functionSubref/config.cfg create mode 100644 regression_test/logFiles/filtered_e.log2 create mode 100644 regression_test/logFiles/lfilter.log2 create mode 100755 regression_test/logFiles/logfilter.sh create mode 100644 regression_test/profiler/double_e.json create mode 100644 regression_test/profiler/double_e.stats create mode 100644 regression_test/profiler/merged_e.stats create mode 100644 regression_test/recofOper/Circular1.ttcn create mode 100644 regression_test/recofOper/Circular2.ttcn create mode 100644 regression_test/templateOmit/Common/Templates.ttcn create mode 100644 regression_test/templateOmit/Common/Types.ttcn create mode 100644 regression_test/templateOmit/LegacyTests/LegacyTestcases.ttcn create mode 100644 regression_test/templateOmit/LegacyTests/Makefile create mode 100644 regression_test/templateOmit/LegacyTests/legacy.cfg create mode 100644 regression_test/templateOmit/Makefile create mode 100644 regression_test/templateOmit/NewTests/Makefile create mode 100644 regression_test/templateOmit/NewTests/NewTestcases.ttcn create mode 100644 regression_test/templateOmit/NewTests/new.cfg create mode 100644 regression_test/ttcn2json/SubType.ttcn create mode 100644 regression_test/ttcn2json/SubType_e.json create mode 100755 titan_executor_api/TITAN_Executor_API_test/build_and_run_test.sh delete mode 100644 usrguide/PRI.doc create mode 100644 usrguide/PRI.docx create mode 100644 xsdconvert/AttributeType.cc create mode 100644 xsdconvert/AttributeType.hh delete mode 100644 xsdconvert/FieldType.cc delete mode 100644 xsdconvert/FieldType.hh diff --git a/.gitignore b/.gitignore index 4fb166858..c41dfb794 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,12 @@ doxygen Install Makefile.personal -.cproject +.project .TITAN* *.o +*.so +*.so.0 +*.so.0.0 *.exe *.pdf META-INF diff --git a/JNI/Makefile b/JNI/Makefile index 41753a5bc..3e9261c68 100644 --- a/JNI/Makefile +++ b/JNI/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/JNI/jnimw.cc b/JNI/jnimw.cc index 151afe13a..a4ca5d185 100644 --- a/JNI/jnimw.cc +++ b/JNI/jnimw.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/JNI/jnimw.h b/JNI/jnimw.h index 5b0da168b..9c00ec786 100644 --- a/JNI/jnimw.h +++ b/JNI/jnimw.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/JNI/jninativelib.cc b/JNI/jninativelib.cc index b472414ba..62a3c92d6 100644 --- a/JNI/jninativelib.cc +++ b/JNI/jninativelib.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/JNI/org_eclipse_titan_executor_jni_JNIMiddleWare.h b/JNI/org_eclipse_titan_executor_jni_JNIMiddleWare.h index d1443dd86..bca634ca5 100644 --- a/JNI/org_eclipse_titan_executor_jni_JNIMiddleWare.h +++ b/JNI/org_eclipse_titan_executor_jni_JNIMiddleWare.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/Makefile b/Makefile index 766ca7e36..74fc88d40 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/Makefile.cfg b/Makefile.cfg index 6c8e47b9a..f4c5fb92b 100644 --- a/Makefile.cfg +++ b/Makefile.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 @@ -75,20 +75,9 @@ OPENSSL_DIR := default # Location of libxml2 XMLDIR := default -## ## ## ## ## Variables below are automatically set ## ## ## ## ## - # Flags for the C(++) preprocessor: # Prevent a warning about yyinput being defined but not used CPPFLAGS := -DYY_NO_INPUT -ifeq ($(DEBUG), yes) - CPPFLAGS += -DMEMORY_DEBUG -DFATAL_DEBUG -else - CPPFLAGS += -DNDEBUG -endif - -# MingW flags need to be passed to the preprocessor during ctags configure -CPPFLAGS += $(MINGW) - # Flags shared between C and C++ COMPILERFLAGS := -Wall @@ -100,16 +89,55 @@ COMPILERFLAGS := -Wall # Flags for the C compiler. # std=gnu9x shuts up warnings about long long and variadic macros CCFLAGS = $(COMPILERFLAGS) -std=gnu9x + +# Flags for the C++ compiler: +CXXFLAGS = $(COMPILERFLAGS) -Wno-long-long + +# The command for maintaining static libraries: +AR := ar + +# The command for building the shared libraries: +# It shall be set to either "$(CXX) -G" or "$(CXX) -shared" depending +# on the linker you use. +LD = $(CXX) -shared + +# Flags for linking binary executables (e.g. for profiling): +LDFLAGS = $(MINGW) + +# The command for removing symbol table from the executables: +STRIP := strip + +# Flags for flex: +FLEXFLAGS := -B -s -Cr + +# Flags for bison: +BISONFLAGS := -d + +# Override common settings with personal preferences if needed +-include $(TOP)/Makefile.personal + +## ## ## ## ## Variables below are automatically set ## ## ## ## ## + +ifeq ($(DEBUG), yes) + CPPFLAGS += -DMEMORY_DEBUG -DFATAL_DEBUG +else + CPPFLAGS += -DNDEBUG +endif + +# MingW flags need to be passed to the preprocessor during ctags configure +CPPFLAGS += $(MINGW) + ifeq ($(DEBUG), yes) CCFLAGS += -g CCFLAGS += -Wshadow -Wpointer-arith -Wcast-qual -Wcast-align \ -Wstrict-prototypes +else +ifeq ($(COVERAGE), yes) + CCFLAGS += -O0 else CCFLAGS += -O2 endif - -# Flags for the C++ compiler: -CXXFLAGS = $(COMPILERFLAGS) -Wno-long-long +endif # Only the default Cygwin compiler can be used for Mingw. # Its version is 3.4.4, too low. @@ -121,9 +149,13 @@ endif ifeq ($(DEBUG), yes) CXXFLAGS += -g CXXFLAGS += -Wshadow -Wpointer-arith -Wcast-qual -Wcast-align +else +ifeq ($(COVERAGE), yes) + CXXFLAGS += -O0 else CXXFLAGS += -O2 endif +endif # Flags for the C/C++ compilers to generate dependency list (-M or -MM # for gcc or clang, -xM or -xM1 for Sun C compiler). @@ -137,25 +169,11 @@ CCDEPFLAG := -xM1 CXXDEPFLAG := -xM1 endif -# The command for maintaining static libraries: -AR := ar - -# The command for building the shared libraries: -# It shall be set to either "$(CXX) -G" or "$(CXX) -shared" depending -# on the linker you use. -LD = $(CXX) -shared - -# Flags for linking binary executables (e.g. for profiling): -LDFLAGS = $(MINGW) ifeq ($(DEBUG), yes) LDFLAGS += -g endif -# The command for removing symbol table from the executables: -STRIP := strip -# Flags for flex: -FLEXFLAGS := -B -s -Cr ifeq ($(DEBUG), yes) FLEXFLAGS += -b -p # FLEXFLAGS += -d @@ -165,21 +183,16 @@ else FLEXFLAGS += -Cfe endif -# Flags for bison: -BISONFLAGS := -d + ifeq ($(DEBUG), yes) BISONFLAGS += -t -v endif ifeq ($(COVERAGE), yes) -ifneq ($(DEBUG), yes) - $(error TURN ON DEBUG MODE FOR COVERAGE) -else CPPFLAGS += -DCOVERAGE_BUILD COMPILERFLAGS += -fprofile-arcs -ftest-coverage LDFLAGS += -fprofile-arcs -ftest-coverage -lgcov endif -endif # Directory which contains the code for POSIX regular expression handling. # It is needed on platforms where the system's libc does not support POSIX @@ -206,8 +219,6 @@ endif # or installed. TEXPATH := /usr/local/teTeX2.0.2/bin/sparc-sun-solaris2.8 -# Override common settings with personal preferences if needed --include $(TOP)/Makefile.personal ########################################################################### # You don't have to alter anything below this line. diff --git a/Makefile.genrules b/Makefile.genrules index b33ef4c21..eb33baba2 100644 --- a/Makefile.genrules +++ b/Makefile.genrules @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 @@ -79,6 +79,10 @@ V_DEP = $(V_DEP_$(VD)) %.o: %.c $(V_CC)$(CC) -c $(CPPFLAGS) $(CCFLAGS) $< -o $@ +# Special rule for building profmerge files +%.profmerge.o: %.cc + $(V_CXX)$(CXX) -c -DPROF_MERGE $(CPPFLAGS) $(CXXFLAGS) $< -o $@ + %.o: %.cc $(V_CXX)$(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $< -o $@ diff --git a/README.linux b/README.linux index 0d35fa76a..5534e3d45 100644 --- a/README.linux +++ b/README.linux @@ -17,13 +17,13 @@ sudo apt-get install xutils-dev The following packages may be needed for titan_eclipse/automatic_build: sudo apt-get install ant xsltproc -2.Clone the titan directory from git into /home/<user_id>/titan +2.Clone the titan directory from git into /home/<user_id>/titan.core -git clone https://github.com/eclipse/titan.core titan +git clone https://github.com/eclipse/titan.core titan.core 3. Configure the build -cd titan +cd titan.core check that MakefileFOSS.cfg is present and has the following content: cat MakefileFOSS.cfg @@ -37,15 +37,15 @@ Options can be overridden by the content of a file named Makefile.personal whic adapt to local installation directories, change config options etc. Below, a small number of typical scenarios are presented. -1) JNI disabled +a) JNI disabled The JNI interface is used by the Eclipse Titan Executor or by the Java Executor API. If you don't need them , Titan can be compiled without JNI. -Create ~/titan/Makefile.personal to override settings in Makefile.cfg with the following content: +Create ~/titan.core/Makefile.personal to override settings in Makefile.cfg with the following content: (replace paths with values relevant to your installation) -TTCN3_DIR := /home/<user id>/titan/Install +TTCN3_DIR := /home/<user id>/titan.core/Install OPENSSL_DIR := /usr #JDKDIR := /usr/lib/jvm/java-7-openjdk-amd64 XMLDIR := /usr @@ -55,14 +55,14 @@ GEN_PDF := no -2) JNI enabled +b) JNI enabled install JDK into /home/<user id>/jdk -Create ~/titan/Makefile.personal to override settings in Makefile.cfg with the following content: +Create ~/titan.core/Makefile.personal to override settings in Makefile.cfg with the following content: (replace paths with values relevant to your installation) -TTCN3_DIR := /home/<user id>/titan/Install +TTCN3_DIR := /home/<user id>/titan.core/Install OPENSSL_DIR := /usr JDKDIR := /usr/lib/jvm/java-7-openjdk-amd64 XMLDIR := /usr @@ -77,7 +77,7 @@ make 5. Set environment variables -setenv TTCN3_DIR /home/<user id>/titan/Install +setenv TTCN3_DIR /home/<user id>/titan.core/Install setenv PATH /home/<userid>/titan.core/Install/bin/:${PATH} setenv LD_LIBRARY_PATH /home/<userid>/titan.core/Install/lib:${LD_LIBRARY_PATH} @@ -85,7 +85,7 @@ for csh or -export TTCN3_DIR=/home/<user id>/titan/Install +export TTCN3_DIR=/home/<user id>/titan.core/Install export PATH=/home/<userid>/titan.core/Install/bin/:${PATH} export LD_LIBRARY_PATH=/home/<userid>/titan.core/Install/lib:${LD_LIBRARY_PATH} @@ -95,15 +95,16 @@ for bash make install -This will install Titan into /home/<user id>/titan/Install +This will install Titan into /home/<user id>/titan.core/Install 7. Optionally , run function/regression tests -cd /home/<user id>/titan/function_test +cd /home/<user id>/titan.core/function_test in the following Makefiles +BER_EncDec/Makefile XER_EncDec/Makefile Text_EncDec/Makefile RAW_EncDec/Makefile @@ -116,7 +117,7 @@ make ( or make |& tee outputfile if you want to save the output for verification) -cd /home/<user id>/titan/regression_test +cd /home/<user id>/titan.core/regression_test make run ( or make run |& tee outputfile if you want to save the output for verification) diff --git a/common/CharCoding.hh b/common/CharCoding.hh index 9a4bde2be..c511a9255 100644 --- a/common/CharCoding.hh +++ b/common/CharCoding.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/common/JSON_Tokenizer.cc b/common/JSON_Tokenizer.cc index cb58f0cf3..b221e865e 100644 --- a/common/JSON_Tokenizer.cc +++ b/common/JSON_Tokenizer.cc @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2000-2015 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 +/////////////////////////////////////////////////////////////////////////////// + #include <cstring> #include "JSON_Tokenizer.hh" @@ -371,3 +379,50 @@ int JSON_Tokenizer::put_next_token(json_token_t p_token, const char* p_token_str return buf_len - start_len; } + +char* convert_to_json_string(const char* str) +{ + char* ret_val = mcopystrn("\"", 1); + // control characters (like \n) cannot be placed in a JSON string, replace + // them with JSON metacharacters + // double quotes and backslashes need to be escaped, too + size_t str_len = strlen(str); + for (size_t i = 0; i < str_len; ++i) { + switch (str[i]) { + case '\n': + ret_val = mputstrn(ret_val, "\\n", 2); + break; + case '\r': + ret_val = mputstrn(ret_val, "\\r", 2); + break; + case '\t': + ret_val = mputstrn(ret_val, "\\t", 2); + break; + case '\f': + ret_val = mputstrn(ret_val, "\\f", 2); + break; + case '\b': + ret_val = mputstrn(ret_val, "\\b", 2); + break; + case '\"': + ret_val = mputstrn(ret_val, "\\\"", 2); + break; + case '\\': + ret_val = mputstrn(ret_val, "\\\\", 2); + break; + default: + if (str[i] < 32 && str[i] > 0) { + // use the JSON \uHHHH notation for other control characters + // (this is just for esthetic reasons, these wouldn't break the JSON + // string format) + ret_val = mputprintf(ret_val, "\\u00%d%c", str[i] / 16, + (str[i] % 16 < 10) ? (str[i] % 16 + '0') : (str[i] % 16 - 10 + 'A')); + } + else { + ret_val = mputc(ret_val, str[i]); + } + break; + } + } + return mputstrn(ret_val, "\"", 1); +} diff --git a/common/JSON_Tokenizer.hh b/common/JSON_Tokenizer.hh index 6775c69a1..fb0748917 100644 --- a/common/JSON_Tokenizer.hh +++ b/common/JSON_Tokenizer.hh @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2000-2015 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 +/////////////////////////////////////////////////////////////////////////////// + #ifndef JSON_TOKENIZER_HH #define JSON_TOKENIZER_HH @@ -155,6 +163,14 @@ public: // A dummy JSON tokenizer, use when there is no actual JSON document static JSON_Tokenizer DUMMY_BUFFER; +/** Converts a string into a JSON string by replacing all control characters + * with JSON escape sequences, if available, or with the \uHHHH escape sequence. + * The string is also wrapped inside a set of double quotes and all double quotes + * and backslash characters are double-escaped. + * + * Returns an expstring, that needs to be freed. */ +extern char* convert_to_json_string(const char* str); + #endif /* JSON_TOKENIZER_HH */ diff --git a/common/Makefile b/common/Makefile index 3b114518b..6675bc6d9 100644 --- a/common/Makefile +++ b/common/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/common/ModuleVersion.cc b/common/ModuleVersion.cc index b08d5c5bb..0d57b631f 100644 --- a/common/ModuleVersion.cc +++ b/common/ModuleVersion.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/common/ModuleVersion.hh b/common/ModuleVersion.hh index be54651bc..19890ec35 100644 --- a/common/ModuleVersion.hh +++ b/common/ModuleVersion.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/common/NetworkHandler.cc b/common/NetworkHandler.cc index 95a81cdd6..14019293e 100644 --- a/common/NetworkHandler.cc +++ b/common/NetworkHandler.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/common/NetworkHandler.hh b/common/NetworkHandler.hh index 138bb67b0..5dd982e7f 100644 --- a/common/NetworkHandler.hh +++ b/common/NetworkHandler.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/common/Path2.cc b/common/Path2.cc index a15030053..6a588bf23 100644 --- a/common/Path2.cc +++ b/common/Path2.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/common/Path2.hh b/common/Path2.hh index a2170c998..c0d785a5d 100644 --- a/common/Path2.hh +++ b/common/Path2.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/common/Quadruple.cc b/common/Quadruple.cc index 2b8111c24..a2f744a35 100644 --- a/common/Quadruple.cc +++ b/common/Quadruple.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/common/Quadruple.hh b/common/Quadruple.hh index 2b98dae3f..0efbb061e 100644 --- a/common/Quadruple.hh +++ b/common/Quadruple.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/common/cfg_process_utils.hh b/common/cfg_process_utils.hh index 05ecf16d2..35dfd3cfd 100644 --- a/common/cfg_process_utils.hh +++ b/common/cfg_process_utils.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/common/config_preproc.cc b/common/config_preproc.cc index db1d3d3ca..85ffdb452 100644 --- a/common/config_preproc.cc +++ b/common/config_preproc.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/common/config_preproc.h b/common/config_preproc.h index 026d09560..297498444 100644 --- a/common/config_preproc.h +++ b/common/config_preproc.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/common/config_preproc_la.l b/common/config_preproc_la.l index 1699f33a9..7c1520d3f 100644 --- a/common/config_preproc_la.l +++ b/common/config_preproc_la.l @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 @@ -135,9 +135,18 @@ MACRO_REFERENCE_INT \$"{"{WS}{TTCN3IDENTIFIER}{WS}(","{WS}integer{WS})?"}" "["{WS}MODULE_PARAMETERS{WS}"]" BEGIN(SC_module_parameters); "["{WS}TESTPORT_PARAMETERS{WS}"]" BEGIN(SC_testport_parameters); -<SC_module_parameters,SC_testport_parameters> +<SC_testport_parameters> { "["{NUMBER}"]" ; +} + +<SC_module_parameters> +{ + "["[ \t0-9a-zA-Z+*/&-]*"]" ; +} + +<SC_module_parameters,SC_testport_parameters> +{ "["[^\r\n\[\]]*{MACRO_REFERENCE_INT}{WS}[^\r\n\[\]]*"]" ; } @@ -192,7 +201,7 @@ MACRO_REFERENCE_INT \$"{"{WS}{TTCN3IDENTIFIER}{WS}(","{WS}integer{WS})?"}" BEGIN(INITIAL); } else { preproc_error_flag = 1; - config_preproc_error(error_msg.c_str()); + config_preproc_error("%s", error_msg.c_str()); } } /* no break */ diff --git a/common/config_preproc_p.y b/common/config_preproc_p.y index 939e3941e..e76ee4f07 100644 --- a/common/config_preproc_p.y +++ b/common/config_preproc_p.y @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/common/dbgnew.hh b/common/dbgnew.hh index b0a8a2e54..b236a0e1f 100644 --- a/common/dbgnew.hh +++ b/common/dbgnew.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/common/hostid.c b/common/hostid.c index 2f0dc8aa7..50ffd067c 100644 --- a/common/hostid.c +++ b/common/hostid.c @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/common/license.c b/common/license.c index aa381f09f..3cad4c9e6 100644 --- a/common/license.c +++ b/common/license.c @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/common/license.h b/common/license.h index 560d1a072..b2d6d0bdc 100644 --- a/common/license.h +++ b/common/license.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/common/memory.c b/common/memory.c index 11ceec813..724fc746d 100644 --- a/common/memory.c +++ b/common/memory.c @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -311,6 +311,7 @@ static void check_memory_address(memory_block *block_ptr, int oper) #define MALLOC_INTERNAL(f,l,s) Malloc_dbg(f,l,s) #define MEMPTYSTR_INTERNAL(f,l) memptystr_dbg(f,l) #define MCOPYSTR_INTERNAL(f,l,s) mcopystr_dbg(f,l,s) +#define MCOPYSTRN_INTERNAL(f,l,s,l2) mcopystrn_dbg(f,l,s,l2) #define REALLOC_INTERNAL(f,l,p,s) Realloc_dbg(f,l,p,s) #define FREE_INTERNAL(f,l,p) Free_dbg(f,l,p) #define MPRINTF_VA_LIST_INTERNAL(f,l,s,p) mprintf_va_list_dbg(f,l,s,p) @@ -333,6 +334,7 @@ static void extract_location(void *p, const char **fn, int *ln) #define MALLOC_INTERNAL(f,l,s) Malloc(s) #define MEMPTYSTR_INTERNAL(f,l) memptystr() #define MCOPYSTR_INTERNAL(f,l,s) mcopystr(s) +#define MCOPYSTRN_INTERNAL(f,l,s,l2) mcopystrn(s,l2) #define REALLOC_INTERNAL(f,l,p,s) Realloc(p,s) #define FREE_INTERNAL(f,l,p) Free(p) #define MPRINTF_VA_LIST_INTERNAL(f,l,s,p) mprintf_va_list(s,p) @@ -861,7 +863,7 @@ expstring_t mputstrn(expstring_t str, const char *str2, size_t len2) memset(str + newlen, '\0', newsize - newlen); } memcpy(str + len, str2, len2); - } else str = MCOPYSTR_INTERNAL(filename, line, str2); + } else str = MCOPYSTRN_INTERNAL(filename, line, str2, len2); } return str; } diff --git a/common/memory.h b/common/memory.h index b048423f5..cf31f0a8f 100644 --- a/common/memory.h +++ b/common/memory.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/common/new.cc b/common/new.cc index 7506718b9..11eade373 100644 --- a/common/new.cc +++ b/common/new.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/common/path.c b/common/path.c index 59765c2ca..d9c4f3d27 100644 --- a/common/path.c +++ b/common/path.c @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/common/path.h b/common/path.h index b1594cb48..e72b743f1 100644 --- a/common/path.h +++ b/common/path.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/common/pattern.hh b/common/pattern.hh index f5db171cf..96104b6a4 100644 --- a/common/pattern.hh +++ b/common/pattern.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -20,8 +20,12 @@ * charstring pattern to a POSIX Extended Regular Expression (ERE). * If error occurs, returns a NULL-pointer. It uses the * TTCN_pattern_error() and TTCN_pattern_warning() functions to - * report errors/warnings. */ -extern char* TTCN_pattern_to_regexp(const char* p_pattern); + * report errors/warnings. + * + * The function is also used on universal charstring patterns (in UTF-8 format) + * during JSON schema generation. In this case the 2nd parameter must be set + * to true, so no errors are reported for the extended ASCII characters. */ +extern char* TTCN_pattern_to_regexp(const char* p_pattern, bool utf8 = false); extern char* TTCN_pattern_to_regexp_uni(const char* p_pattern, int** groups = 0); diff --git a/common/pattern_la.l b/common/pattern_la.l index 29e3d16d1..109c0c272 100644 --- a/common/pattern_la.l +++ b/common/pattern_la.l @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/common/pattern_p.y b/common/pattern_p.y index 8d01c5c01..90a59fe81 100644 --- a/common/pattern_p.y +++ b/common/pattern_p.y @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 @@ -54,6 +54,8 @@ /** The converted regexp. */ static char *ret_val; + /** Turns error messages for extended ASCII characters on or off */ + static bool allow_ext_ascii = false; /** The parser error reporting function. */ static void pattern_yyerror(const char *error_str); /** Creates the POSIX equivalent of literal character \a c using the @@ -406,8 +408,8 @@ RE_OneCharPos: | TOK_Char { unsigned char c = $1; - if (c == 0 || c > 127) TTCN_pattern_error("Character with code %u " - "(0x%02x) cannot be used in a pattern for type charstring.", c, c); + if (c == 0 || (c > 127 && !allow_ext_ascii)) TTCN_pattern_error("Character " + "with code %u (0x%02x) cannot be used in a pattern for type charstring.", c, c); $$ = translate_character($1); } | RE_Quadruple @@ -551,8 +553,8 @@ RE_Set_Range_Char: | TOK_Char { unsigned char c = $1; - if (c == 0 || c > 127) TTCN_pattern_error("Character with code %u " - "(0x%02x) cannot be used in a pattern for type charstring.", c, c); + if (c == 0 || (c > 127 && !allow_ext_ascii)) TTCN_pattern_error("Character " + "with code %u (0x%02x) cannot be used in a pattern for type charstring.", c, c); $$ = $1; } | RE_Quadruple { $$ = $1; } @@ -621,13 +623,16 @@ RE_Quadruple: * Interface *********************************************************************/ -char* TTCN_pattern_to_regexp(const char* p_pattern) +char* TTCN_pattern_to_regexp(const char* p_pattern, bool utf8) { /* if you want to debug */ //pattern_yydebug=1; ret_val=NULL; + /* allow extended ASCII characters if the pattern is in UTF-8 format */ + allow_ext_ascii = utf8; + yy_buffer_state *flex_buffer = pattern_yy_scan_string(p_pattern); if(flex_buffer == NULL) { TTCN_pattern_error("Flex buffer creation failed."); diff --git a/common/pattern_uni.y b/common/pattern_uni.y index 1d33ad7e3..18754ad8a 100644 --- a/common/pattern_uni.y +++ b/common/pattern_uni.y @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/common/platform.h b/common/platform.h index cc016fe5b..50dfb9f63 100644 --- a/common/platform.h +++ b/common/platform.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/common/static_check.h b/common/static_check.h index 40b8117c0..9a0be9df1 100644 --- a/common/static_check.h +++ b/common/static_check.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/common/ttcn3float.hh b/common/ttcn3float.hh index 9e8f5603a..4bc3c6d88 100644 --- a/common/ttcn3float.hh +++ b/common/ttcn3float.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -10,6 +10,13 @@ #include <math.h> +/* TTCN-3 float values that have absolute value smaller than this + are displayed in exponential notation. */ +#define MIN_DECIMAL_FLOAT 1.0E-4 +/* TTCN-3 float values that have absolute value larger or equal than this + are displayed in exponential notation. */ +#define MAX_DECIMAL_FLOAT 1.0E+10 + #ifndef signbit // Probably Solaris. // Thankfully, IEEE Std 1003.1, 2004 Edition says that signbit is a macro, diff --git a/common/usage_stats.cc b/common/usage_stats.cc index c195d8421..36116ce4b 100644 --- a/common/usage_stats.cc +++ b/common/usage_stats.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/common/usage_stats.hh b/common/usage_stats.hh index 632508bc3..2396568a4 100644 --- a/common/usage_stats.hh +++ b/common/usage_stats.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/common/userinfo.c b/common/userinfo.c index 66db4b96f..843be53e3 100644 --- a/common/userinfo.c +++ b/common/userinfo.c @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/common/userinfo.h b/common/userinfo.h index 80ac1bab7..6113aeb02 100644 --- a/common/userinfo.h +++ b/common/userinfo.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/common/version.h b/common/version.h index 5ee284291..8f25a76df 100644 --- a/common/version.h +++ b/common/version.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -10,7 +10,7 @@ /* Version numbers */ #define TTCN3_MAJOR 5 -#define TTCN3_MINOR 3 +#define TTCN3_MINOR 4 #define TTCN3_PATCHLEVEL 0 //#define TTCN3_BUILDNUMBER 0 @@ -22,7 +22,7 @@ * TTCN3_VERSION = TTCN3_MAJOR * 1000000 + TTCN3_MINOR * 10000 + * TTCN3_PATCHLEVEL * 100 + TTCN3_BUILDNUMBER */ -#define TTCN3_VERSION 50300 +#define TTCN3_VERSION 50400 /* A monotonically increasing version number. * An official release is deemed to have the highest possible build number (99) diff --git a/common/version.py b/common/version.py index cc4346810..117b55eac 100644 --- a/common/version.py +++ b/common/version.py @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/common/version_internal.h b/common/version_internal.h index bc8da1bbf..38a9a93da 100644 --- a/common/version_internal.h +++ b/common/version_internal.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -249,7 +249,7 @@ #endif /* Copyright message */ -#define COPYRIGHT_STRING COMMENT_PREFIX "Copyright Ericsson Telecom AB 2000-2014" +#define COPYRIGHT_STRING COMMENT_PREFIX "Copyright (c) 2000-2015 Ericsson Telecom AB" /* For prefixing the above messages. Default value: empty string. */ #define COMMENT_PREFIX diff --git a/compiler2/AST.cc b/compiler2/AST.cc index 202d282f2..daae450dd 100644 --- a/compiler2/AST.cc +++ b/compiler2/AST.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -878,6 +878,24 @@ namespace Common { output->functions.set_param = NULL; has_set_param = true; } else has_set_param = false; + // get_param function + bool has_get_param; + if (output->functions.get_param) { + output->source.static_function_prototypes = mputstr(output->source.static_function_prototypes, + "static Module_Param* get_module_param(Module_Param_Name& param_name);\n"); + output->source.static_function_bodies = mputstr(output->source.static_function_bodies, + "static Module_Param* get_module_param(Module_Param_Name& param_name)\n" + "{\n" + "const char* const par_name = param_name.get_current_name();\n"); + output->source.static_function_bodies = + mputstr(output->source.static_function_bodies, output->functions.get_param); + output->source.static_function_bodies = + mputstr(output->source.static_function_bodies, "return NULL;\n" + "}\n\n"); + Free(output->functions.get_param); + output->functions.get_param = NULL; + has_get_param = true; + } else has_get_param = false; // log_param function bool has_log_param; if (output->functions.log_param) { @@ -1029,12 +1047,13 @@ namespace Common { } string extra_str = extra ? ( string('"') + extra + string('"') ) : string("NULL"); output->source.global_vars = mputprintf(output->source.global_vars, - ", %uU, %uU, %uU, %uU, %s, %luLU, %s, %s, %s, %s, %s, %s, %s", + ", %uU, %uU, %uU, %uU, %s, %luLU, %s, %s, %s, %s, %s, %s, %s, %s", suffix, release, patch, build, extra_str.c_str(), (unsigned long)num_xml_namespaces, ((num_xml_namespaces || (control_ns && control_ns_prefix)) ? "xml_namespaces" : "0"), has_post_init ? "post_init_module" : "NULL", has_set_param ? "set_module_param" : "NULL", + has_get_param ? "get_module_param" : "NULL", has_log_param ? "log_module_param" : "NULL", has_init_comp ? "init_comp_type" : "NULL", has_start ? "start_ptc_function" : "NULL", @@ -1045,6 +1064,8 @@ namespace Common { FATAL_ERROR("Module::generate_functions(): post_init function in ASN.1 module"); if (has_set_param) FATAL_ERROR("Module::generate_functions(): set_param function in ASN.1 module"); + if (has_get_param) + FATAL_ERROR("Module::generate_functions(): get_param function in ASN.1 module"); if (has_log_param) FATAL_ERROR("Module::generate_functions(): log_param function in ASN.1 module"); if (has_init_comp) diff --git a/compiler2/AST.hh b/compiler2/AST.hh index ddb99c274..7de62e88e 100644 --- a/compiler2/AST.hh +++ b/compiler2/AST.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/Code.cc b/compiler2/Code.cc index f9769d9f8..e5ff3560e 100644 --- a/compiler2/Code.cc +++ b/compiler2/Code.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -39,6 +39,7 @@ namespace Common { output->functions.pre_init = NULL; output->functions.post_init = NULL; output->functions.set_param = NULL; + output->functions.get_param = NULL; output->functions.log_param = NULL; output->functions.init_comp = NULL; output->functions.start = NULL; @@ -92,6 +93,8 @@ namespace Common { mputstr(dest->functions.post_init, src->functions.post_init); dest->functions.set_param = mputstr(dest->functions.set_param, src->functions.set_param); + dest->functions.get_param = + mputstr(dest->functions.get_param, src->functions.get_param); dest->functions.log_param = mputstr(dest->functions.log_param, src->functions.log_param); dest->functions.init_comp = @@ -124,6 +127,7 @@ namespace Common { Free(output->functions.pre_init); Free(output->functions.post_init); Free(output->functions.set_param); + Free(output->functions.get_param); Free(output->functions.log_param); Free(output->functions.init_comp); Free(output->functions.start); diff --git a/compiler2/Code.hh b/compiler2/Code.hh index 8f8cac7b2..a15d32ad9 100644 --- a/compiler2/Code.hh +++ b/compiler2/Code.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/CodeGenHelper.cc b/compiler2/CodeGenHelper.cc index d0968839a..4d6f16b4b 100644 --- a/compiler2/CodeGenHelper.cc +++ b/compiler2/CodeGenHelper.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -210,6 +210,7 @@ void CodeGenHelper::finalize_generation(Type* type) { transfer_value(dst.functions.post_init, src.functions.post_init); transfer_value(dst.functions.set_param, src.functions.set_param); + transfer_value(dst.functions.get_param, src.functions.get_param); transfer_value(dst.functions.log_param, src.functions.log_param); transfer_value(dst.functions.init_comp, src.functions.init_comp); transfer_value(dst.functions.start, src.functions.start); diff --git a/compiler2/CodeGenHelper.hh b/compiler2/CodeGenHelper.hh index cee124237..d07c837e0 100644 --- a/compiler2/CodeGenHelper.hh +++ b/compiler2/CodeGenHelper.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/CompField.cc b/compiler2/CompField.cc index 07a7b0a9d..bd3298d59 100644 --- a/compiler2/CompField.cc +++ b/compiler2/CompField.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/CompField.hh b/compiler2/CompField.hh index c65aa0228..b07f61555 100644 --- a/compiler2/CompField.hh +++ b/compiler2/CompField.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/CompType.cc b/compiler2/CompType.cc index 3f09be2d3..f14825f2f 100644 --- a/compiler2/CompType.cc +++ b/compiler2/CompType.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/CompType.hh b/compiler2/CompType.hh index eb142246b..c131d5787 100644 --- a/compiler2/CompType.hh +++ b/compiler2/CompType.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/CompilerError.cc b/compiler2/CompilerError.cc index 2b438fa90..e90ae493f 100644 --- a/compiler2/CompilerError.cc +++ b/compiler2/CompilerError.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/CompilerError.hh b/compiler2/CompilerError.hh index 9405a0043..bf62b0650 100644 --- a/compiler2/CompilerError.hh +++ b/compiler2/CompilerError.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/Constraint.cc b/compiler2/Constraint.cc index 3ba9c5110..e820ed963 100644 --- a/compiler2/Constraint.cc +++ b/compiler2/Constraint.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/Constraint.hh b/compiler2/Constraint.hh index 59d2faccd..5f8963836 100644 --- a/compiler2/Constraint.hh +++ b/compiler2/Constraint.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/EnumItem.cc b/compiler2/EnumItem.cc index c125b4882..5b24aceab 100644 --- a/compiler2/EnumItem.cc +++ b/compiler2/EnumItem.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -61,21 +61,6 @@ void EnumItem::set_text(const string& p_text) text = p_text; } -string EnumItem::get_name_hacked(Type *p_type) const -{ - if (p_type->is_asn1()) { - string hack_asnname(Identifier::name_2_asn(p_type->get_genname_own())); - hack_asnname += "-enum-"; - hack_asnname += name->get_asnname(); - return Identifier::asn_2_name(hack_asnname); - } else { - string hack_ttcnname(Identifier::name_2_ttcn(p_type->get_genname_own())); - hack_ttcnname += "_enum_"; - hack_ttcnname += name->get_ttcnname(); - return Identifier::ttcn_2_name(hack_ttcnname); - } -} - void EnumItem::dump(unsigned level) const { name->dump(level); diff --git a/compiler2/EnumItem.hh b/compiler2/EnumItem.hh index 62be404f8..2ff8fa332 100644 --- a/compiler2/EnumItem.hh +++ b/compiler2/EnumItem.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -33,8 +33,6 @@ public: virtual EnumItem *clone() const; virtual void set_fullname(const string& p_fullname); const Identifier& get_name() const { return *name; } - /// Return the name for the "enum hack" - string get_name_hacked(Type *p_type) const; Value *get_value() const { return value; } void set_value(Value *p_value); const string& get_text() const { return text; } diff --git a/compiler2/Identifier.cc b/compiler2/Identifier.cc index 9632a0e36..10f8b4d81 100644 --- a/compiler2/Identifier.cc +++ b/compiler2/Identifier.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/Identifier.hh b/compiler2/Identifier.hh index b0ee3e8e1..c01df15ac 100644 --- a/compiler2/Identifier.hh +++ b/compiler2/Identifier.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/Int.cc b/compiler2/Int.cc index 3c1bee773..456f32b16 100644 --- a/compiler2/Int.cc +++ b/compiler2/Int.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/Int.hh b/compiler2/Int.hh index 9f25995c8..8de6b0cfb 100644 --- a/compiler2/Int.hh +++ b/compiler2/Int.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/Makefile b/compiler2/Makefile index 61ef64fc5..8499fe4e6 100644 --- a/compiler2/Makefile +++ b/compiler2/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/compiler2/PredefFunc.cc b/compiler2/PredefFunc.cc index 9b0f083dd..746cde299 100644 --- a/compiler2/PredefFunc.cc +++ b/compiler2/PredefFunc.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/PredefFunc.hh b/compiler2/PredefFunc.hh index 0131b42f0..3720a2258 100644 --- a/compiler2/PredefFunc.hh +++ b/compiler2/PredefFunc.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/ProjectGenHelper.cc b/compiler2/ProjectGenHelper.cc index 991449e58..4b475352a 100644 --- a/compiler2/ProjectGenHelper.cc +++ b/compiler2/ProjectGenHelper.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -226,7 +226,7 @@ std::string ProjectDescriptor::setRelativePathTo(const std::string& absPathTo) } if (length == i) { // got subdirectory if (projectAbsWorkingDir == absPathTo) { - return std::string("."); // the same pathes were given + return std::string("."); // the same paths were given } else if ((projectAbsWorkingDir.size() > absPathTo.size() && projectAbsWorkingDir.at(length) == SEPARATOR) || (projectAbsWorkingDir.size() < absPathTo.size() && absPathTo.at(length) == SEPARATOR)) @@ -495,22 +495,22 @@ void ProjectGenHelper::getExternalLibs(std::vector<const char*>& extLibs) } } -void ProjectGenHelper::getExternalLibSearchPathes(std::vector<const char*>& extLibPathes) +void ProjectGenHelper::getExternalLibSearchPaths(std::vector<const char*>& extLibPaths) { if (!Zflag) return; - std::map<const char*, const char*, CompareStr> libPathes; + std::map<const char*, const char*, CompareStr> libPaths; for (std::map<std::string, ProjectDescriptor>::iterator it = projs.begin(); it != projs.end(); ++it) { if ((it->second).numOfLibSearchPaths() > 0) { for (size_t i = 0; i < (it->second).numOfLibSearchPaths(); ++i) { const char* key = (it->second).getLibSearchPath(i); const char* value = (it->second).getProjectName().c_str(); - libPathes.insert(std::pair<const char*,const char*>(key,value)); // filter duplicates + libPaths.insert(std::pair<const char*,const char*>(key,value)); // filter duplicates } } } std::map<const char*, const char*>::iterator it; - for (it = libPathes.begin(); it != libPathes.end(); ++it) { - extLibPathes.push_back(it->first); + for (it = libPaths.begin(); it != libPaths.end(); ++it) { + extLibPaths.push_back(it->first); } } diff --git a/compiler2/ProjectGenHelper.hh b/compiler2/ProjectGenHelper.hh index 638633bdb..df661cb06 100644 --- a/compiler2/ProjectGenHelper.hh +++ b/compiler2/ProjectGenHelper.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -122,7 +122,7 @@ public: std::map<std::string, ProjectDescriptor>::const_iterator getEnd() const; size_t numOfLibs() const; void getExternalLibs(std::vector<const char*>& extLibs); - void getExternalLibSearchPathes(std::vector<const char*>& extLibPathes); + void getExternalLibSearchPaths(std::vector<const char*>& extLibPaths); bool hasReferencedProject(); size_t numOfProjects() const { return projs.size();}; bool isCPPSourceFile(const char* fileName) const; diff --git a/compiler2/Real.cc b/compiler2/Real.cc index 0a15eda30..41f486b0a 100644 --- a/compiler2/Real.cc +++ b/compiler2/Real.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/Real.hh b/compiler2/Real.hh index 1e5380b49..8920ed8fc 100644 --- a/compiler2/Real.hh +++ b/compiler2/Real.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/Setting.cc b/compiler2/Setting.cc index 47e5a736c..b8262e02a 100644 --- a/compiler2/Setting.cc +++ b/compiler2/Setting.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/Setting.hh b/compiler2/Setting.hh index 82f1bfcb1..b46986c0b 100644 --- a/compiler2/Setting.hh +++ b/compiler2/Setting.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/SigParam.cc b/compiler2/SigParam.cc index 739edfff3..e7f956f65 100644 --- a/compiler2/SigParam.cc +++ b/compiler2/SigParam.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/SigParam.hh b/compiler2/SigParam.hh index c32592c9c..1f2b9eee8 100644 --- a/compiler2/SigParam.hh +++ b/compiler2/SigParam.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/Stopwatch.cc b/compiler2/Stopwatch.cc index 749507939..49f727ea0 100644 --- a/compiler2/Stopwatch.cc +++ b/compiler2/Stopwatch.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/Stopwatch.hh b/compiler2/Stopwatch.hh index 8fcbdfbee..b2918fba7 100644 --- a/compiler2/Stopwatch.hh +++ b/compiler2/Stopwatch.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/Type.cc b/compiler2/Type.cc index fd06d5d4c..40b83b8f3 100644 --- a/compiler2/Type.cc +++ b/compiler2/Type.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -1591,6 +1591,10 @@ namespace Common { Ttcn::FieldOrArrayRef *ref = subrefs->get_ref(i); switch (ref->get_type()) { case Ttcn::FieldOrArrayRef::FIELD_REF: { + if (t->typetype == T_OPENTYPE) { + // allow the alternatives of open types as both lower and upper identifiers + ref->set_field_name_to_lowercase(); + } const Identifier& id = *ref->get_id(); switch (t->typetype) { case T_CHOICE_A: @@ -2006,7 +2010,7 @@ namespace Common { } break; case T_SEQ_T: - case T_SET_T: + case T_SET_T: { if(rawattrib){ size_t fieldnum; for(int c=0;c<rawattrib->taglist.nElements;c++) { // check TAG @@ -2175,6 +2179,7 @@ namespace Common { } } } + int used_bits = 0; // number of bits used to store all previous fields for(size_t i = 0; i < get_nof_comps(); i++) { // field attributes CompField *cf = get_comp_byIndex(i); const Identifier& field_id = cf->get_name(); @@ -2183,6 +2188,27 @@ namespace Common { field_type->force_raw(); RawAST *rawpar = field_type->rawattrib; if (rawpar) { + if (rawpar->prepadding != 0) { + used_bits = (used_bits + rawpar->prepadding - 1) / rawpar->prepadding * + rawpar->prepadding; + } + if (rawpar->intx && field_type_last->get_typetype() == T_INT) { // IntX + if (used_bits % 8 != 0 && + (!rawattrib || rawattrib->fieldorder != XDEFMSB)) { + error("Using RAW parameter IntX in a record/set with FIELDORDER " + "set to 'lsb' is only supported if the IntX field starts at " + "the beginning of a new octet. There are %d unused bits in the " + "last octet before field %s.", 8 - (used_bits % 8), + field_id.get_dispname().c_str()); + } + } + else { + used_bits += rawpar->fieldlength; + } + if (rawpar->padding != 0) { + used_bits = (used_bits + rawpar->padding - 1) / rawpar->padding * + rawpar->padding; + } for (int j = 0; j < rawpar->lengthto_num; j++) { // LENGTHTO Identifier *idf = rawpar->lengthto[j]; if (!has_comp_withName(*idf)) { @@ -2400,7 +2426,7 @@ namespace Common { } } } - break; + break; } case T_BSTR: if(rawattrib->fieldlength==0 && rawattrib->length_restrition!=-1){ rawattrib->fieldlength=rawattrib->length_restrition; @@ -2447,8 +2473,14 @@ namespace Common { "(64)", rawattrib->fieldlength, get_fullname().c_str()); } break; - case T_ENUM_T: case T_INT: + if (rawattrib->intx) { + rawattrib->bitorderinfield = XDEFMSB; + rawattrib->bitorderinoctet = XDEFMSB; + rawattrib->byteorder = XDEFMSB; + } + break; + case T_ENUM_T: case T_BOOL: default: // nothing to do, ASN1 types or types without defined raw attribute @@ -2617,6 +2649,17 @@ namespace Common { chk_text(); } + static const char* JSON_SCHEMA_KEYWORDS[] = { + // built-in JSON schema keywords + "$ref", "type", "properties", "items", "anyOf", "enum", "pattern", + "default", "minItems", "maxItems", "additionalProperties", "fieldOrder", + "required", "$schema", "minLength", "maxLength", "minimum", "maximum", + "excludeMinimum", "excludeMaximum", "allOf" + // TITAN-specific keywords + "originalName", "unusedAlias", "subType", "numericValues", "omitAsNull", + "encoding", "decoding" + }; + void Type::chk_json() { if (json_checked) return; @@ -2637,6 +2680,7 @@ namespace Common { break; } case T_SEQOF: case T_SETOF: + case T_ARRAY: get_ofType()->force_json(); break; default: @@ -2671,6 +2715,71 @@ namespace Common { if (NULL != jsonattrib->default_value) { chk_json_default(); } + + const size_t nof_extensions = jsonattrib->schema_extensions.size(); + if (0 != nof_extensions) { + const size_t nof_keywords = sizeof(JSON_SCHEMA_KEYWORDS) / sizeof(char*); + + // these keep track of erroneous extensions so each warning is only + // displayed once + char* checked_extensions = new char[nof_extensions]; + char* checked_keywords = new char[nof_keywords]; + memset(checked_extensions, 0, nof_extensions); + memset(checked_keywords, 0, nof_keywords); + + for (size_t i = 0; i < nof_extensions; ++i) { + for (size_t j = 0; j < nof_keywords; ++j) { + if (0 == checked_extensions[i] && 0 == checked_keywords[j] && + 0 == strcmp(jsonattrib->schema_extensions[i]->key, + JSON_SCHEMA_KEYWORDS[j])) { + // only report the warning once for each keyword + warning("JSON schema keyword '%s' should not be used as the key of " + "attribute 'extend'", JSON_SCHEMA_KEYWORDS[j]); + checked_keywords[j] = 1; + checked_extensions[i] = 1; + break; + } + } + if (0 == checked_extensions[i]) { + for (size_t k = i + 1; k < nof_extensions; ++k) { + if (0 == strcmp(jsonattrib->schema_extensions[i]->key, + jsonattrib->schema_extensions[k]->key)) { + if (0 == checked_extensions[i]) { + // only report the warning once for each unique key + warning("Key '%s' is used multiple times in 'extend' attributes " + "of type '%s'", jsonattrib->schema_extensions[i]->key, + get_typename().c_str()); + checked_extensions[i] = 1; + } + checked_extensions[k] = 1; + } + } + } + } + delete[] checked_extensions; + delete[] checked_keywords; + } + if (jsonattrib->metainfo_unbound) { + Type* parent = get_parent_type(); + if (T_SEQ_T == get_type_refd_last()->typetype || + T_SET_T == get_type_refd_last()->typetype) { + // if it's set for the record/set, pass it onto its fields + size_t nof_comps = get_nof_comps(); + for (size_t i = 0; i < nof_comps; i++) { + Type* comp_type = get_comp_byIndex(i)->get_type(); + if (NULL == comp_type->jsonattrib) { + comp_type->jsonattrib = new JsonAST; + } + comp_type->jsonattrib->metainfo_unbound = true; + } + } + else if (NULL == parent || (T_SEQ_T != parent->typetype && + T_SET_T != parent->typetype)) { + // only allowed if it's a field of a record/set + error("Invalid attribute 'metainfo for unbound', requires record, set, " + "or field of a record or set"); + } + } } } @@ -5258,9 +5367,6 @@ end_ext: const string& spec = s.get_attribSpec().get_spec(); if (spec == get_encoding_name(encoding_type)) { return true; - } else { - // if it has an encode other than the one we're looking for, quit now - return false; } } // if ENCODE } // for @@ -5512,8 +5618,6 @@ end_ext: if (spec == ex_emm_ell // the right answer ||spec == ex_ee_arr) // the acceptable answer return memory.remember(t, ANSWER_YES); - else // if it has an encode other than XER, quit now - return memory.remember(t, ANSWER_NO); } // if ENCODE } // for } // next a diff --git a/compiler2/Type.hh b/compiler2/Type.hh index 29f85957b..57eee7ae1 100644 --- a/compiler2/Type.hh +++ b/compiler2/Type.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -1169,6 +1169,8 @@ namespace Common { /** Generates a reference to this type's schema segment and inserts it into * the given schema. */ void generate_json_schema_ref(JSON_Tokenizer& json); + + JsonAST* get_json_attributes() const { return jsonattrib; } }; /** @} end of AST_Type group */ diff --git a/compiler2/TypeCompat.cc b/compiler2/TypeCompat.cc index 4e58d7a48..96400fb73 100644 --- a/compiler2/TypeCompat.cc +++ b/compiler2/TypeCompat.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/TypeCompat.hh b/compiler2/TypeCompat.hh index 02e2c7bbe..ef36e3bfd 100644 --- a/compiler2/TypeCompat.hh +++ b/compiler2/TypeCompat.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/Type_chk.cc b/compiler2/Type_chk.cc index d3861ebb2..d3bf10e69 100644 --- a/compiler2/Type_chk.cc +++ b/compiler2/Type_chk.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -1522,7 +1522,7 @@ void Type::chk_xer_untagged() // found the component if (cf->get_is_optional() || cf->get_defval() != 0) { error("Type with final encoding attribute UNTAGGED" - " shall not have OPIONAL or DEFAULT"); + " shall not have OPTIONAL or DEFAULT"); } break; } @@ -3938,6 +3938,10 @@ bool Type::chk_this_value_Choice(Value *value, Common::Assignment *lhs, } // no break case Value::V_CHOICE: { + if (!value->is_asn1() && typetype == T_OPENTYPE) { + // allow the alternatives of open types as both lower and upper identifiers + value->set_alt_name_to_lowercase(); + } const Identifier& alt_name = value->get_alt_name(); if(!has_comp_withName(alt_name)) { if (value->is_asn1()) { @@ -5354,7 +5358,8 @@ bool Type::chk_this_template_generic(Template *t, namedbool incomplete_allowed, t_comp->set_my_governor(this); chk_this_template_ref(t_comp); self_ref |= chk_this_template_generic(t_comp, INCOMPLETE_NOT_ALLOWED, - allow_omit, ANY_OR_OMIT_ALLOWED, sub_chk, implicit_omit, lhs); + omit_in_value_list ? OMIT_ALLOWED : OMIT_NOT_ALLOWED, + ANY_OR_OMIT_ALLOWED, sub_chk, implicit_omit, lhs); if(temptype==Ttcn::Template::COMPLEMENTED_LIST && t_comp->get_template_refd_last()->get_templatetype() == Ttcn::Template::ANY_OR_OMIT) @@ -5724,10 +5729,10 @@ void Type::chk_this_template_Int_Real(Template *t) FATAL_ERROR("Type::chk_this_template_Int_Real()"); } } - if (v_lower && !v_upper) { + if (v_lower && !vr->get_max_v()) { chk_range_boundary_infinity(v_lower, true); } - if (!v_lower && v_upper) { + if (!vr->get_min_v() && v_upper) { chk_range_boundary_infinity(v_upper, false); } break;} @@ -5761,6 +5766,10 @@ bool Type::chk_this_template_Choice(Template *t, namedbool is_modified, // to have more than one here. for (size_t i = 0; i < nof_nts; i++) { Ttcn::NamedTemplate *nt = t->get_namedtemp_byIndex(i); + if (typetype == T_OPENTYPE) { + // allow the alternatives of open types as both lower and upper identifiers + nt->set_name_to_lowercase(); + } const Identifier& nt_name = nt->get_name(); if (!has_comp_withName(nt_name)) { diff --git a/compiler2/Type_codegen.cc b/compiler2/Type_codegen.cc index 5be67c25d..cfddb7ab7 100644 --- a/compiler2/Type_codegen.cc +++ b/compiler2/Type_codegen.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -650,7 +650,12 @@ void Type::generate_code_rawdescriptor(output_struct *target) "extern const TTCN_RAWdescriptor_t %s_raw_;\n", gennameown_str); char *str = mprintf("const TTCN_RAWdescriptor_t %s_raw_ = {", gennameown_str); - str = mputprintf(str, "%d,", rawattrib->fieldlength); + if (rawattrib->intx) { + str = mputstr(str, "RAW_INTX,"); + } + else { + str = mputprintf(str, "%d,", rawattrib->fieldlength); + } if (rawattrib->comp == XDEFCOMPL) str = mputstr(str, "SG_2COMPL,"); else if (rawattrib->comp == XDEFSIGNBIT) str = mputstr(str, "SG_SG_BIT,"); else str = mputstr(str, "SG_NO,"); @@ -967,19 +972,20 @@ void Type::generate_code_jsondescriptor(output_struct *target) if (NULL == jsonattrib) { target->source.global_vars = mputprintf(target->source.global_vars, - "const TTCN_JSONdescriptor_t %s_json_ = { false, NULL, false, NULL };\n" + "const TTCN_JSONdescriptor_t %s_json_ = { false, NULL, false, NULL, false };\n" , get_genname_own().c_str()); } else { char* alias = jsonattrib->alias ? mputprintf(NULL, "\"%s\"", jsonattrib->alias) : NULL; char* def_val = jsonattrib->default_value ? mputprintf(NULL, "\"%s\"", jsonattrib->default_value) : NULL; target->source.global_vars = mputprintf(target->source.global_vars, - "const TTCN_JSONdescriptor_t %s_json_ = { %s, %s, %s, %s };\n" + "const TTCN_JSONdescriptor_t %s_json_ = { %s, %s, %s, %s, %s };\n" , get_genname_own().c_str() , jsonattrib->omit_as_null ? "true" : "false" , alias ? alias : "NULL" , jsonattrib->as_value ? "true" : "false" - , def_val ? def_val : "NULL"); + , def_val ? def_val : "NULL" + , jsonattrib->metainfo_unbound ? "true" : "false"); Free(alias); Free(def_val); } @@ -1098,6 +1104,25 @@ void Type::generate_code_Choice(output_struct *target) sdef.opentype_outermost = get_is_opentype_outermost(); sdef.ot = generate_code_ot(pool); sdef.nElements = get_nof_comps(); + sdef.isOptional = false; + if (parent_type != NULL) { + switch (parent_type->typetype) { + case T_SEQ_T: + case T_SEQ_A: + case T_SET_T: + case T_SET_A: + for (size_t x = 0; x < parent_type->get_nof_comps(); ++x) { + CompField * cf = parent_type->get_comp_byIndex(x); + if (cf->get_type() == this && cf->get_is_optional()) { + sdef.isOptional = true; + break; // from the for loop + } + } + break; + default: + break; + } + } sdef.elements = (struct_field*) Malloc(sdef.nElements*sizeof(*sdef.elements)); memset(sdef.elements, 0, sdef.nElements*sizeof(*sdef.elements)); @@ -1124,30 +1149,56 @@ void Type::generate_code_Choice(output_struct *target) typetype_t tt = cftype->get_type_refd_last()->typetype; switch(tt) { case T_INT: + case T_INT_A: sdef.elements[i].jsonValueType = JSON_NUMBER; break; case T_REAL: sdef.elements[i].jsonValueType = JSON_NUMBER | JSON_STRING; break; case T_BOOL: - sdef.elements[i].jsonValueType = JSON_LITERAL; + sdef.elements[i].jsonValueType = JSON_BOOLEAN; + break; + case T_NULL: + sdef.elements[i].jsonValueType = JSON_NULL; break; case T_BSTR: + case T_BSTR_A: case T_HSTR: case T_OSTR: case T_CSTR: case T_USTR: + case T_UTF8STRING: + case T_NUMERICSTRING: + case T_PRINTABLESTRING: + case T_TELETEXSTRING: + case T_VIDEOTEXSTRING: + case T_IA5STRING: + case T_GRAPHICSTRING: + case T_VISIBLESTRING: + case T_GENERALSTRING: + case T_UNIVERSALSTRING: + case T_BMPSTRING: case T_VERDICT: case T_ENUM_T: + case T_ENUM_A: + case T_OID: + case T_ROID: + case T_ANY: sdef.elements[i].jsonValueType = JSON_STRING; break; case T_SEQ_T: + case T_SEQ_A: case T_SET_T: + case T_SET_A: case T_CHOICE_T: + case T_CHOICE_A: + case T_ANYTYPE: + case T_OPENTYPE: sdef.elements[i].jsonValueType = JSON_OBJECT; break; case T_SEQOF: case T_SETOF: + case T_ARRAY: sdef.elements[i].jsonValueType = JSON_ARRAY; break; default: @@ -1531,6 +1582,7 @@ void Type::generate_code_Se(output_struct *target) cur.jsonOmitAsNull = type->jsonattrib->omit_as_null; cur.jsonAlias = type->jsonattrib->alias; cur.jsonDefaultValue = type->jsonattrib->default_value; + cur.jsonMetainfoUnbound = type->jsonattrib->metainfo_unbound; } // if jsonattrib } // next element @@ -1845,7 +1897,7 @@ void Type::generate_code_SeOf(output_struct *target) case T_UNIVERSALSTRING: case T_BMPSTRING: case T_OBJECTDESCRIPTOR: - target->header.typedefs = mputprintf(target->header.typedefs, + target->header.class_decls = mputprintf(target->header.class_decls, "typedef PreGenRecordOf::PREGEN__%s__OF__UNIVERSAL__CHARSTRING%s %s;\n" "typedef PreGenRecordOf::PREGEN__%s__OF__UNIVERSAL__CHARSTRING%s_template %s_template;\n", (typetype == T_SEQOF) ? "RECORD" : "SET", @@ -1854,7 +1906,9 @@ void Type::generate_code_SeOf(output_struct *target) optimized_memalloc ? "__OPTIMIZED" : "", get_genname_own().c_str()); return; default: - target->header.typedefs = mputprintf(target->header.typedefs, + // generate these in the class declarations part, they need to be + // outside of the include guard in case of circular imports + target->header.class_decls = mputprintf(target->header.class_decls, "typedef PreGenRecordOf::PREGEN__%s__OF__%s%s %s;\n" "typedef PreGenRecordOf::PREGEN__%s__OF__%s%s_template %s_template;\n", (typetype == T_SEQOF) ? "RECORD" : "SET", oftypename.c_str(), @@ -2172,7 +2226,7 @@ void Type::generate_code_done(output_struct *target) "component_reference.log();\n" "TTCN_Logger::log_event_str(\" failed: Return value does not match " "the template: \");\n" - "value_template.log_match(return_value);\n" + "value_template.log_match(return_value%s);\n" "TTCN_Logger::end_event();\n" "}\n" "return ALT_NO;\n" @@ -2180,7 +2234,7 @@ void Type::generate_code_done(output_struct *target) "} else return ret_val;\n" "}\n\n", genname_str, genname_str, dispname_str, genname_str, dispname_str, - dispname_str); + dispname_str, omit_in_value_list ? ", TRUE" : ""); } bool Type::ispresent_anyvalue_embedded_field(Type* t, @@ -2352,8 +2406,9 @@ void Type::generate_code_ispresentbound(expression_struct *expr, is_template?"_template":"", tmp_id_str); expr->expr = mputprintf(expr->expr, - "%s = %s.%s();\n", global_id.c_str(), - tmp_id2_str, isbound ? "is_bound" : "is_present"); + "%s = %s.%s(%s);\n", global_id.c_str(), + tmp_id2_str, isbound ? "is_bound" : "is_present", + (!isbound && is_template && omit_in_value_list) ? "TRUE" : ""); Free(tmp_generalid_str); tmp_generalid_str = mcopystr(tmp_id2_str); @@ -2409,8 +2464,9 @@ void Type::generate_code_ispresentbound(expression_struct *expr, id.get_name().c_str()); expr->expr = mputprintf(expr->expr, - "%s = %s.%s();\n", global_id.c_str(), - tmp_id_str, isbound||(i!=(nof_refs-1)) ? "is_bound" : "is_present"); + "%s = %s.%s(%s);\n", global_id.c_str(), + tmp_id_str, isbound||(i!=(nof_refs-1)) ? "is_bound" : "is_present", + (!(isbound||(i!=(nof_refs-1))) && is_template && omit_in_value_list) ? "TRUE" : ""); Free(tmp_generalid_str); tmp_generalid_str = mcopystr(tmp_id_str); } @@ -2496,9 +2552,10 @@ void Type::generate_code_ispresentbound(expression_struct *expr, if (is_string_element) { expr->expr = mputprintf(expr->expr, - "%s = %s[%s].%s();\n", global_id.c_str(), + "%s = %s[%s].%s(%s);\n", global_id.c_str(), tmp_generalid_str, tmp_index_id_str, - isbound||(i!=(nof_refs-1)) ? "is_bound" : "is_present"); + isbound||(i!=(nof_refs-1)) ? "is_bound" : "is_present", + (!(isbound||(i!=(nof_refs-1))) && is_template && omit_in_value_list) ? "TRUE" : ""); } else { if (is_template) { expr->expr = mputprintf(expr->expr, @@ -2515,8 +2572,9 @@ void Type::generate_code_ispresentbound(expression_struct *expr, } expr->expr = mputprintf(expr->expr, - "%s = %s.%s();\n", global_id.c_str(), tmp_id_str, - isbound||(i!=(nof_refs-1)) ? "is_bound" : "is_present"); + "%s = %s.%s(%s);\n", global_id.c_str(), tmp_id_str, + isbound||(i!=(nof_refs-1)) ? "is_bound" : "is_present", + (!(isbound||(i!=(nof_refs-1))) && is_template && omit_in_value_list) ? "TRUE" : ""); } Free(tmp_generalid_str); @@ -2689,22 +2747,56 @@ void Type::generate_json_schema(JSON_Tokenizer& json, bool embedded, bool as_val Free(alias_str); } } - + // get the type at the end of the reference chain Type* last = get_type_refd_last(); - // if the type has its own definition and it's embedded in another type, then - // its schema already exists, only add a reference to it + // check if this is a reference to another type that has its own definition + Type* refd_type = NULL; + if (is_ref()) { + Type* iter = this; + while (iter->is_ref()) { + iter = iter->get_type_refd(); + if (iter->ownertype == OT_TYPE_DEF || /* TTCN-3 type definition */ + iter->ownertype == OT_TYPE_ASS) { /* ASN.1 type assignment */ + refd_type = iter; + break; + } + } + } + + // check if there are any type restrictions + boolean has_restrictions = sub_type != NULL && sub_type->has_json_schema(); + + // if it's a referenced type, then its schema already exists, only add a pointer to it // exception: instances of ASN.1 parameterized types, always embed their schemas - if (embedded && (!is_ref() || !get_type_refd()->pard_type_instance) && - (last->ownertype == OT_TYPE_DEF /* TTCN-3 type definition */ - || last->ownertype == OT_TYPE_ASS /* ASN.1 type assignment */ )) { + if (refd_type != NULL && !get_type_refd()->pard_type_instance) { + if (has_restrictions) { + // an 'allOf' structure is needed if this is a subtype, + // insert the pointer in the first part + json.put_next_token(JSON_TOKEN_NAME, "allOf"); + json.put_next_token(JSON_TOKEN_ARRAY_START); + json.put_next_token(JSON_TOKEN_OBJECT_START); + } json.put_next_token(JSON_TOKEN_NAME, "$ref"); char* ref_str = mprintf("\"#/definitions/%s/%s\"", - last->my_scope->get_scope_mod()->get_modid().get_ttcnname().c_str(), - (is_ref() && last->pard_type_instance) ? get_type_refd()->get_dispname().c_str() : last->get_dispname().c_str()); + refd_type->my_scope->get_scope_mod()->get_modid().get_ttcnname().c_str(), + refd_type->get_dispname().c_str()); json.put_next_token(JSON_TOKEN_STRING, ref_str); Free(ref_str); + if (has_restrictions) { + // close the first part of the 'allOf' and insert the type restrictions + // in the second part + json.put_next_token(JSON_TOKEN_OBJECT_END); + json.put_next_token(JSON_TOKEN_OBJECT_START); + + // pass the tokenizer to the subtype to insert the type restrictions' schema + sub_type->generate_json_schema(json); + + // close the second part and the 'allOf' structure itself + json.put_next_token(JSON_TOKEN_OBJECT_END); + json.put_next_token(JSON_TOKEN_ARRAY_END); + } } else { // generate the schema for the referenced type switch (last->typetype) { @@ -2720,22 +2812,32 @@ void Type::generate_json_schema(JSON_Tokenizer& json, bool embedded, bool as_val json.put_next_token(JSON_TOKEN_STRING, "\"integer\""); break; case T_REAL: - // any of: JSON number or the special values as strings (in an enum) - json.put_next_token(JSON_TOKEN_NAME, "anyOf"); - json.put_next_token(JSON_TOKEN_ARRAY_START); - json.put_next_token(JSON_TOKEN_OBJECT_START); - json.put_next_token(JSON_TOKEN_NAME, "type"); - json.put_next_token(JSON_TOKEN_STRING, "\"number\""); - json.put_next_token(JSON_TOKEN_OBJECT_END); - json.put_next_token(JSON_TOKEN_OBJECT_START); - json.put_next_token(JSON_TOKEN_NAME, "enum"); - json.put_next_token(JSON_TOKEN_ARRAY_START); - json.put_next_token(JSON_TOKEN_STRING, "\"not_a_number\""); - json.put_next_token(JSON_TOKEN_STRING, "\"infinity\""); - json.put_next_token(JSON_TOKEN_STRING, "\"-infinity\""); - json.put_next_token(JSON_TOKEN_ARRAY_END); - json.put_next_token(JSON_TOKEN_OBJECT_END); - json.put_next_token(JSON_TOKEN_ARRAY_END); + if (has_restrictions) { + // adding restrictions after the type's schema wouldn't work here + // if the restrictions affect the special values + // use a special function that generates the schema segment for both + // the float type and its restrictions + sub_type->generate_json_schema_float(json); + has_restrictions = false; // so they aren't generated twice + } + else { + // any of: JSON number or the special values as strings (in an enum) + json.put_next_token(JSON_TOKEN_NAME, "anyOf"); + json.put_next_token(JSON_TOKEN_ARRAY_START); + json.put_next_token(JSON_TOKEN_OBJECT_START); + json.put_next_token(JSON_TOKEN_NAME, "type"); + json.put_next_token(JSON_TOKEN_STRING, "\"number\""); + json.put_next_token(JSON_TOKEN_OBJECT_END); + json.put_next_token(JSON_TOKEN_OBJECT_START); + json.put_next_token(JSON_TOKEN_NAME, "enum"); + json.put_next_token(JSON_TOKEN_ARRAY_START); + json.put_next_token(JSON_TOKEN_STRING, "\"not_a_number\""); + json.put_next_token(JSON_TOKEN_STRING, "\"infinity\""); + json.put_next_token(JSON_TOKEN_STRING, "\"-infinity\""); + json.put_next_token(JSON_TOKEN_ARRAY_END); + json.put_next_token(JSON_TOKEN_OBJECT_END); + json.put_next_token(JSON_TOKEN_ARRAY_END); + } break; case T_BSTR: case T_BSTR_A: @@ -2791,15 +2893,23 @@ void Type::generate_json_schema(JSON_Tokenizer& json, bool embedded, bool as_val json.put_next_token(JSON_TOKEN_STRING, "\"^[0-2][.][1-3]?[0-9]([.][0-9]|([1-9][0-9]+))*$\""); break; case T_VERDICT: - // enumerate the possible values - json.put_next_token(JSON_TOKEN_NAME, "enum"); - json.put_next_token(JSON_TOKEN_ARRAY_START); - json.put_next_token(JSON_TOKEN_STRING, "\"none\""); - json.put_next_token(JSON_TOKEN_STRING, "\"pass\""); - json.put_next_token(JSON_TOKEN_STRING, "\"inconc\""); - json.put_next_token(JSON_TOKEN_STRING, "\"fail\""); - json.put_next_token(JSON_TOKEN_STRING, "\"error\""); - json.put_next_token(JSON_TOKEN_ARRAY_END); + if (has_restrictions) { + // the restrictions would only add another JSON enum (after the one + /// generated below), instead just insert the one with the restrictions + sub_type->generate_json_schema(json); + has_restrictions = false; // so they aren't generated twice + } + else { + // enumerate the possible values + json.put_next_token(JSON_TOKEN_NAME, "enum"); + json.put_next_token(JSON_TOKEN_ARRAY_START); + json.put_next_token(JSON_TOKEN_STRING, "\"none\""); + json.put_next_token(JSON_TOKEN_STRING, "\"pass\""); + json.put_next_token(JSON_TOKEN_STRING, "\"inconc\""); + json.put_next_token(JSON_TOKEN_STRING, "\"fail\""); + json.put_next_token(JSON_TOKEN_STRING, "\"error\""); + json.put_next_token(JSON_TOKEN_ARRAY_END); + } break; case T_ENUM_T: case T_ENUM_A: @@ -2847,6 +2957,11 @@ void Type::generate_json_schema(JSON_Tokenizer& json, bool embedded, bool as_val default: FATAL_ERROR("Type::generate_json_schema"); } + + if (has_restrictions) { + // pass the tokenizer to the subtype to insert the type restrictions' schema + sub_type->generate_json_schema(json); + } } // insert default value (if any) @@ -2880,6 +2995,16 @@ void Type::generate_json_schema(JSON_Tokenizer& json, bool embedded, bool as_val FATAL_ERROR("Type::generate_json_schema"); } } + + // insert schema extensions (if any) + if (jsonattrib != NULL) { + for (size_t i = 0; i < jsonattrib->schema_extensions.size(); ++i) { + json.put_next_token(JSON_TOKEN_NAME, jsonattrib->schema_extensions[i]->key); + char* value_str = mprintf("\"%s\"", jsonattrib->schema_extensions[i]->value); + json.put_next_token(JSON_TOKEN_STRING, value_str); + Free(value_str); + } + } // end of type's schema json.put_next_token(JSON_TOKEN_OBJECT_END); diff --git a/compiler2/Typestuff.cc b/compiler2/Typestuff.cc index 28125f47d..867cad5d4 100644 --- a/compiler2/Typestuff.cc +++ b/compiler2/Typestuff.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/Typestuff.hh b/compiler2/Typestuff.hh index 034e8f0ec..20c2f0e24 100644 --- a/compiler2/Typestuff.hh +++ b/compiler2/Typestuff.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/Value.cc b/compiler2/Value.cc index 7fb2f0b5d..1ea0cb097 100644 --- a/compiler2/Value.cc +++ b/compiler2/Value.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -30,6 +30,7 @@ #include "ttcn3/Statement.hh" #include "ttcn3/Attributes.hh" +#include "../common/JSON_Tokenizer.hh" #include <math.h> #include <regex.h> @@ -9082,6 +9083,25 @@ error: if (valuetype != V_CHOICE) FATAL_ERROR("Value::get_alt_value()"); return u.choice.alt_value; } + + void Value::set_alt_name_to_lowercase() + { + if (valuetype != V_CHOICE) FATAL_ERROR("Value::set_alt_name_to_lowercase()"); + string new_name = u.choice.alt_name->get_name(); + if (isupper(new_name[0])) { + new_name[0] = tolower(new_name[0]); + if (new_name[new_name.size() - 1] == '_') { + // an underscore is inserted at the end of the alternative name if it's + // a basic type's name (since it would conflict with the class generated + // for that type) + // remove the underscore, it won't conflict with anything if its name + // starts with a lowercase letter + new_name.replace(new_name.size() - 1, 1, ""); + } + delete u.choice.alt_name; + u.choice.alt_name = new Identifier(Identifier::ID_NAME, new_name); + } + } bool Value::has_oid_error() { @@ -11343,7 +11363,7 @@ error: } expr->expr = mputstr(expr->expr, ".log_match("); u.expr.v1->generate_code_expr(expr); - expr->expr = mputc(expr->expr, ')'); + expr->expr = mputprintf(expr->expr, "%s)", omit_in_value_list ? ", TRUE" : ""); } void Value::generate_code_expr_expr(expression_struct *expr) @@ -11657,7 +11677,8 @@ error: expr->expr=mputstr(expr->expr, ".is_bound()"); break; case OPTYPE_ISPRESENT: - expr->expr=mputstr(expr->expr, ".is_present()"); + expr->expr=mputprintf(expr->expr, ".is_present(%s)", + omit_in_value_list ? "TRUE" : ""); break; case OPTYPE_SIZEOF: expr->expr=mputstr(expr->expr, ".size_of()"); @@ -11680,7 +11701,7 @@ error: u.expr.t2->generate_code(expr); expr->expr = mputstr(expr->expr, ".match("); u.expr.v1->generate_code_expr(expr); - expr->expr = mputc(expr->expr, ')'); + expr->expr = mputprintf(expr->expr, "%s)", omit_in_value_list ? ", TRUE" : ""); break; case OPTYPE_UNDEF_RUNNING: // it is resolved during semantic check @@ -12046,7 +12067,7 @@ error: Value* v4_last = v4->get_value_refd_last(); if ((v4_last->valuetype == V_SEQOF || v4_last->valuetype == V_SETOF) && !v4_last->u.val_vs->is_indexed() && v4_last->u.val_vs->get_nof_vs() == 0) { - expr->expr = mputprintf(expr->expr, "(%s)", v4->my_governor->get_stringRepr().c_str()); + expr->expr = mputprintf(expr->expr, "(%s)", v4->my_governor->get_genname_value(my_scope).c_str()); } v4->generate_code_expr_mandatory(expr); } @@ -12610,6 +12631,205 @@ error: } return str; } + + /** This type contains the JSON encoding type of an omitted optional field */ + enum omitted_json_value_t { + NOT_OMITTED, // the field is not omitted + OMITTED_ABSENT, // the omitted field is not present in the JSON object + OMITTED_NULL // the omitted field is set to 'null' in the JSON object + }; + + /** JSON code for omitted optional fields of can be generated in 2 ways: + * - the field is not present in the JSON object or + * - the field is present and its value is 'null'. + * Because of this all record/set values containing omitted fields have 2^N + * possible JSON encodings, where N is the number of omitted fields. + * + * This function helps go through all the possible encodings, by generating + * the next combination from a previous one. + * + * The algorithm is basically adding 1 to a binary number (where OMITTED_ABSENT + * is zero, OMITTED_NULL is one, all NOT_OMITTEDs are ignored and the first bit + * is the least significant bit). + * + * Usage: generate the first combination, where all omitted fields are absent + * (=all zeros), and keep calling this function until the last combination + * (where all omitted fields are 'null', = all ones) is reached. + * + * @return true, if the next combination was successfully generated, or + * false, when called with the last combination */ + static bool next_omitted_json_combo(int* omitted_fields, size_t len) + { + for (size_t i = 0; i < len; ++i) { + if (omitted_fields[i] == OMITTED_ABSENT) { + omitted_fields[i] = OMITTED_NULL; + for (size_t j = 0; j < i; ++j) { + if (omitted_fields[j] == OMITTED_NULL) { + omitted_fields[j] = OMITTED_ABSENT; + } + } + return true; + } + } + return false; + } + + void Value::generate_json_value(JSON_Tokenizer& json, bool allow_special_float /* = true */) + { + switch (valuetype) { + case V_INT: + json.put_next_token(JSON_TOKEN_NUMBER, get_val_Int()->t_str().c_str()); + break; + case V_REAL: { + Real r = get_val_Real(); + if (r == REAL_INFINITY) { + if (allow_special_float) { + json.put_next_token(JSON_TOKEN_STRING, "\"infinity\""); + } + } + else if (r == -REAL_INFINITY) { + if (allow_special_float) { + json.put_next_token(JSON_TOKEN_STRING, "\"-infinity\""); + } + } + else if (r != r) { + if (allow_special_float) { + json.put_next_token(JSON_TOKEN_STRING, "\"not_a_number\""); + } + } + else { + // true if decimal representation possible (use %f format) + bool decimal_repr = (r == 0.0) + || (r > -MAX_DECIMAL_FLOAT && r <= -MIN_DECIMAL_FLOAT) + || (r >= MIN_DECIMAL_FLOAT && r < MAX_DECIMAL_FLOAT); + char* number_str = mprintf(decimal_repr ? "%f" : "%e", r); + json.put_next_token(JSON_TOKEN_NUMBER, number_str); + Free(number_str); + } + break; } + case V_BOOL: + json.put_next_token(get_val_bool() ? JSON_TOKEN_LITERAL_TRUE : JSON_TOKEN_LITERAL_FALSE); + break; + case V_BSTR: + case V_HSTR: + case V_OSTR: + case V_CSTR: { + char* str = convert_to_json_string(get_val_str().c_str()); + json.put_next_token(JSON_TOKEN_STRING, str); + Free(str); + break; } + case V_USTR: { + char* str = convert_to_json_string(ustring_to_uft8(get_val_ustr()).c_str()); + json.put_next_token(JSON_TOKEN_STRING, str); + Free(str); + break; } + case V_VERDICT: + case V_ENUM: + json.put_next_token(JSON_TOKEN_STRING, + (string('\"') + create_stringRepr() + string('\"')).c_str()); + break; + case V_SEQOF: + case V_SETOF: + json.put_next_token(JSON_TOKEN_ARRAY_START); + if (!u.val_vs->is_indexed()) { + for (size_t i = 0; i < u.val_vs->get_nof_vs(); ++i) { + u.val_vs->get_v_byIndex(i)->generate_json_value(json); + } + } + else { + for (size_t i = 0; i < u.val_vs->get_nof_ivs(); ++i) { + // look for the entry with index equal to i + for (size_t j = 0; j < u.val_vs->get_nof_ivs(); ++j) { + if (u.val_vs->get_iv_byIndex(j)->get_index()->get_val_Int()->get_val() == (Int)i) { + u.val_vs->get_iv_byIndex(j)->get_value()->generate_json_value(json); + break; + } + } + } + } + json.put_next_token(JSON_TOKEN_ARRAY_END); + break; + case V_SEQ: + case V_SET: { + // omitted fields have 2 possible JSON values (the field is absent, or it's + // present with value 'null'), each combination of omitted values must be + // generated + size_t len = get_nof_comps(); + int* omitted_fields = new int[len]; // stores one combination + for (size_t i = 0; i < len; ++i) { + if (get_se_comp_byIndex(i)->get_value()->valuetype == V_OMIT) { + // all omitted fields are absent in the first combination + omitted_fields[i] = OMITTED_ABSENT; + } + else { + omitted_fields[i] = NOT_OMITTED; + } + } + do { + // generate the JSON object from the present combination + json.put_next_token(JSON_TOKEN_OBJECT_START); + for (size_t i = 0; i < len; ++i) { + if (omitted_fields[i] == OMITTED_ABSENT) { + // the field is absent, don't insert anything + continue; + } + // use the field's alias, if it has one + const char* alias = NULL; + if (my_governor != NULL) { + JsonAST* field_attrib = my_governor->get_comp_byName( + get_se_comp_byIndex(i)->get_name())->get_type()->get_json_attributes(); + if (field_attrib != NULL) { + alias = field_attrib->alias; + } + } + json.put_next_token(JSON_TOKEN_NAME, (alias != NULL) ? alias : + get_se_comp_byIndex(i)->get_name().get_ttcnname().c_str()); + if (omitted_fields[i] == OMITTED_NULL) { + json.put_next_token(JSON_TOKEN_LITERAL_NULL); + } + else { + get_se_comp_byIndex(i)->get_value()->generate_json_value(json); + } + } + json.put_next_token(JSON_TOKEN_OBJECT_END); + } // generate the next combination, until all combinations have been processed + while (next_omitted_json_combo(omitted_fields, len)); + break; } + case V_CHOICE: { + bool as_value = my_governor != NULL && + my_governor->get_type_refd_last()->get_json_attributes() != NULL && + my_governor->get_type_refd_last()->get_json_attributes()->as_value; + if (!as_value) { + // no 'as value' coding instruction, insert an object with one field + json.put_next_token(JSON_TOKEN_OBJECT_START); + // use the field's alias, if it has one + const char* alias = NULL; + if (my_governor != NULL) { + JsonAST* field_attrib = my_governor->get_comp_byName( + get_alt_name())->get_type()->get_json_attributes(); + if (field_attrib != NULL) { + alias = field_attrib->alias; + } + } + json.put_next_token(JSON_TOKEN_NAME, (alias != NULL) ? alias : + get_alt_name().get_ttcnname().c_str()); + } + get_alt_value()->generate_json_value(json); + if (!as_value) { + json.put_next_token(JSON_TOKEN_OBJECT_END); + } + break; } + case V_REFD: { + Value* v = get_value_refd_last(); + if (this != v) { + v->generate_json_value(json); + return; + } + } // no break + default: + FATAL_ERROR("Value::generate_json_value - %d", valuetype); + } + } bool Value::explicit_cast_needed(bool forIsValue) { diff --git a/compiler2/Value.hh b/compiler2/Value.hh index 61d324cf9..a163c219a 100644 --- a/compiler2/Value.hh +++ b/compiler2/Value.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -15,6 +15,7 @@ #include "../common/ttcn3float.hh" class ustring; +class JSON_Tokenizer; namespace Asn { class Block; @@ -686,6 +687,12 @@ namespace Common { bool is_indexed() const; const Identifier& get_alt_name(); Value *get_alt_value(); + /** Sets the first letter in the name of the alternative to lowercase + * if it's an uppercase letter. + * Used on open types (the name of their alternatives can be given with both + * an uppercase or a lowercase first letter, and the generated code will need + * to use the lowercase version). */ + void set_alt_name_to_lowercase(); /** Returns whether the embedded object identifier components * contain any error. Applicable to OID/ROID values only. */ bool has_oid_error(); @@ -904,6 +911,11 @@ namespace Common { char *generate_code_init_refd(char *str, const char *name); public: + /** Generates JSON code from this value. Used in JSON schema generation. + * No code is generated for special float values NaN, INF and -INF if the + * 2nd parameter is false. */ + void generate_json_value(JSON_Tokenizer& json, bool allow_special_float = true); + /** Returns whether C++ explicit cast (type conversion) is necessary when * \a this is the argument of a send() or log() statement. True is returned * when the type of the C++ equivalent is ambiguous or is a built-in type @@ -979,7 +991,7 @@ namespace Common { static void generate_code_ap_default_value(expression_struct *expr, Value* value, Scope* scope); static void generate_code_ap_default_ti(expression_struct *expr, TemplateInstance* ti, Scope* scope); }; - + } // namespace Common #endif // _Common_Value_HH diff --git a/compiler2/Valuestuff.cc b/compiler2/Valuestuff.cc index bc243baa8..5d49a4bfe 100644 --- a/compiler2/Valuestuff.cc +++ b/compiler2/Valuestuff.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/Valuestuff.hh b/compiler2/Valuestuff.hh index 619b5dc38..a9b0c7c55 100644 --- a/compiler2/Valuestuff.hh +++ b/compiler2/Valuestuff.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/XerAttributes.cc b/compiler2/XerAttributes.cc index c10a0fce5..62dd84b1b 100644 --- a/compiler2/XerAttributes.cc +++ b/compiler2/XerAttributes.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/XerAttributes.hh b/compiler2/XerAttributes.hh index d9cd43769..82e6028a8 100644 --- a/compiler2/XerAttributes.hh +++ b/compiler2/XerAttributes.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/asn1/AST_asn1.cc b/compiler2/asn1/AST_asn1.cc index 6e83b0b2a..342f3c4c1 100644 --- a/compiler2/asn1/AST_asn1.cc +++ b/compiler2/asn1/AST_asn1.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/asn1/AST_asn1.hh b/compiler2/asn1/AST_asn1.hh index 43eba0332..33ad2f9bd 100644 --- a/compiler2/asn1/AST_asn1.hh +++ b/compiler2/asn1/AST_asn1.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/asn1/Block.cc b/compiler2/asn1/Block.cc index 8764ddf0b..bbfd7ea7f 100644 --- a/compiler2/asn1/Block.cc +++ b/compiler2/asn1/Block.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/asn1/Block.hh b/compiler2/asn1/Block.hh index e5a87fa7d..6c6862e2e 100644 --- a/compiler2/asn1/Block.hh +++ b/compiler2/asn1/Block.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/asn1/Makefile b/compiler2/asn1/Makefile index 8dc4f9922..473bbddae 100644 --- a/compiler2/asn1/Makefile +++ b/compiler2/asn1/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/compiler2/asn1/OCSV.cc b/compiler2/asn1/OCSV.cc index b217b4a73..c41732417 100644 --- a/compiler2/asn1/OCSV.cc +++ b/compiler2/asn1/OCSV.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/asn1/OCSV.hh b/compiler2/asn1/OCSV.hh index a9618edbc..abaae0f04 100644 --- a/compiler2/asn1/OCSV.hh +++ b/compiler2/asn1/OCSV.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/asn1/Object.cc b/compiler2/asn1/Object.cc index 38d4d3296..21751cdb5 100644 --- a/compiler2/asn1/Object.cc +++ b/compiler2/asn1/Object.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/asn1/Object.hh b/compiler2/asn1/Object.hh index 3a801a8c2..98027d7cf 100644 --- a/compiler2/asn1/Object.hh +++ b/compiler2/asn1/Object.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/asn1/Object0.hh b/compiler2/asn1/Object0.hh index 310fd65db..3339107bc 100644 --- a/compiler2/asn1/Object0.hh +++ b/compiler2/asn1/Object0.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/asn1/Ref.cc b/compiler2/asn1/Ref.cc index 0c7b52f7b..7c92d288b 100644 --- a/compiler2/asn1/Ref.cc +++ b/compiler2/asn1/Ref.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/asn1/Ref.hh b/compiler2/asn1/Ref.hh index ef8686ca2..77bf44cde 100644 --- a/compiler2/asn1/Ref.hh +++ b/compiler2/asn1/Ref.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/asn1/TableConstraint.cc b/compiler2/asn1/TableConstraint.cc index fd6a820b9..42b6267e5 100644 --- a/compiler2/asn1/TableConstraint.cc +++ b/compiler2/asn1/TableConstraint.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/asn1/TableConstraint.hh b/compiler2/asn1/TableConstraint.hh index d89b24738..188083d13 100644 --- a/compiler2/asn1/TableConstraint.hh +++ b/compiler2/asn1/TableConstraint.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/asn1/Tag.cc b/compiler2/asn1/Tag.cc index 72b6c6409..9da124588 100644 --- a/compiler2/asn1/Tag.cc +++ b/compiler2/asn1/Tag.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/asn1/Tag.hh b/compiler2/asn1/Tag.hh index 00b0eb82a..e9dd5e400 100644 --- a/compiler2/asn1/Tag.hh +++ b/compiler2/asn1/Tag.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/asn1/TokenBuf.cc b/compiler2/asn1/TokenBuf.cc index 4435280be..90babcdb8 100644 --- a/compiler2/asn1/TokenBuf.cc +++ b/compiler2/asn1/TokenBuf.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/asn1/TokenBuf.hh b/compiler2/asn1/TokenBuf.hh index a53f8490f..2f34defed 100644 --- a/compiler2/asn1/TokenBuf.hh +++ b/compiler2/asn1/TokenBuf.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/asn1/Type_parse.cc b/compiler2/asn1/Type_parse.cc index f3b3fbe58..edf2d6802 100644 --- a/compiler2/asn1/Type_parse.cc +++ b/compiler2/asn1/Type_parse.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/asn1/asn1.hh b/compiler2/asn1/asn1.hh index bef4c7eba..957d1310c 100644 --- a/compiler2/asn1/asn1.hh +++ b/compiler2/asn1/asn1.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/asn1/asn1_preparser.h b/compiler2/asn1/asn1_preparser.h index 5d41eedb6..3be85a9cf 100644 --- a/compiler2/asn1/asn1_preparser.h +++ b/compiler2/asn1/asn1_preparser.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/asn1/asn1_preparser.l b/compiler2/asn1/asn1_preparser.l index f15099c47..ede9eca48 100644 --- a/compiler2/asn1/asn1_preparser.l +++ b/compiler2/asn1/asn1_preparser.l @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/compiler2/asn1/asn1la.l b/compiler2/asn1/asn1la.l index 244302f29..63dba4887 100644 --- a/compiler2/asn1/asn1la.l +++ b/compiler2/asn1/asn1la.l @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 @@ -378,8 +378,6 @@ TITAN_ID [A-Za-z0-9 \-_]+ } <<EOF>> { - Location loc(asn1_infile, yylineno); - loc.error("Unterminated `--' (missing newline at the end of file)"); yy_pop_state(); return 0; } diff --git a/compiler2/asn1/asn1p.y b/compiler2/asn1/asn1p.y index 8b7da2e1b..9131608e2 100644 --- a/compiler2/asn1/asn1p.y +++ b/compiler2/asn1/asn1p.y @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/compiler2/asn1/asn1p_old.h b/compiler2/asn1/asn1p_old.h index 146d57e8f..c328ff567 100644 --- a/compiler2/asn1/asn1p_old.h +++ b/compiler2/asn1/asn1p_old.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/compiler.1 b/compiler2/compiler.1 index 2df9a3418..9739703d7 100644 --- a/compiler2/compiler.1 +++ b/compiler2/compiler.1 @@ -3,7 +3,7 @@ compiler \- TTCN-3 and ASN.1 to C++ translator .SH SYNOPSIS .B compiler -.RB "[\| " \-abcdfgijlLpqrRsStuwxXyY " \|]" +.RB "[\| " \-abcdfgijlLMpqrRsStuwxXyY " \|]" .RB "[\| " \-V .IR " verb_level" " \|]" .RB "[\| " \-K @@ -141,6 +141,22 @@ Usage of this option a bit enlarges the size of the generated code and slightly reduces execution speed. This flag is not recommended when the TTCN-3 test suite is used for load generation. .TP +.B \-M +Allows the use of the value +.B omit +in template lists and complemented template lists (legacy behavior). +If set, an omitted field will match a template list, if the value +.B omit +appears in the list, and it will match a complemented template list, if +.B omit +is not in the list (the +.B ifpresent +attribute can still be used for matching omitted fields). This also affects the +.B ispresent +operation and the +.B present +template restriction accordingly. +.TP .BI \-o " dir" The output files (including Test Port skeletons) will be placed into the directory specified by @@ -385,7 +401,7 @@ ITU-T Recommendations X.680-683: .SH AUTHOR This manpage is written by Janos Zoltan Szabo, Ericsson Telecom AB .br -Copyright (c) 2000-2014 Ericsson Telecom AB +Copyright (c) 2000-2015 Ericsson Telecom AB .br All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 diff --git a/compiler2/datatypes.h b/compiler2/datatypes.h index a49fe4be8..66c7ff038 100644 --- a/compiler2/datatypes.h +++ b/compiler2/datatypes.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -36,11 +36,12 @@ typedef enum { typedef enum { JSON_NONE = 0x00, // no value type set (default) JSON_NUMBER = 0x01, // integer and float - JSON_STRING = 0x02, // all string types, the verdict type and enumerated values - JSON_LITERAL = 0x04, // boolean (true or false) - JSON_OBJECT = 0x08, // records, sets and unions - JSON_ARRAY = 0x10, // record of and set of - JSON_ANY_VALUE = 0x1F // unions with the "as value" coding instruction + JSON_STRING = 0x02, // all string types, the objid type, the verdict type and enumerated values + JSON_BOOLEAN = 0x04, // boolean (true or false) + JSON_OBJECT = 0x08, // records, sets, unions and the anytype + JSON_ARRAY = 0x10, // record of, set of and array + JSON_NULL = 0x20, // ASN.1 null type + JSON_ANY_VALUE = 0x3F // unions with the "as value" coding instruction } json_value_t; /* Compound type definitions */ @@ -68,6 +69,7 @@ typedef struct { unsigned short jsonValueType; boolean xerAttribute; boolean jsonOmitAsNull; + boolean jsonMetainfoUnbound; const char* jsonAlias; const char* jsonDefaultValue; /** true if the field is a record-of or set-of with optimized memory allocation */ @@ -105,6 +107,7 @@ typedef struct { boolean has_opentypes; boolean opentype_outermost; Opentype_t *ot; + boolean isOptional; /**< this structure is an optional field in a record/set */ } struct_def; /** record of, set of descriptor for code generation */ diff --git a/compiler2/encdec.c b/compiler2/encdec.c index 4d5362d21..64bd7faed 100644 --- a/compiler2/encdec.c +++ b/compiler2/encdec.c @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/encdec.h b/compiler2/encdec.h index 3f9f88b79..9a107ae7c 100644 --- a/compiler2/encdec.h +++ b/compiler2/encdec.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/enum.c b/compiler2/enum.c index 15ad0b576..1d58b2e87 100644 --- a/compiler2/enum.c +++ b/compiler2/enum.c @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -298,6 +298,16 @@ void defEnumClass(const enum_def *edef, output_struct *output) def = mputstr(def, "int as_int() const { return enum2int(enum_value); }\n" "void from_int(int p_val) { *this = p_val; }\n"); + + /* TTCN-3 predefined function int2enum() */ + def = mputstr(def, "void int2enum(int int_val);\n"); + src = mputprintf(src, "void %s::int2enum(int int_val)\n" + "{\n" + "if (!is_valid_enum(int_val)) " + "TTCN_error(\"Assigning invalid numeric value %%d to a variable of " + "enumerated type %s.\", int_val);\n" + "enum_value = (%s)int_val;\n" + "}\n\n", name, dispname, enum_type); /* miscellaneous members */ def = mputprintf(def, "operator %s() const;\n", enum_type); @@ -354,12 +364,36 @@ void defEnumClass(const enum_def *edef, output_struct *output) "void %s::set_param(Module_Param& param)\n" "{\n" " param.basic_check(Module_Param::BC_VALUE, \"enumerated value\");\n" - " if (param.get_type()!=Module_Param::MP_Enumerated) param.type_error(\"enumerated value\", \"%s\");\n" - " enum_value = str_to_enum(param.get_enumerated());\n" - " if (!is_valid_enum(enum_value)) {\n " + " Module_Param_Ptr mp = ¶m;\n" + " if (param.get_type() == Module_Param::MP_Reference) {\n" + /* enumerated values are also treated as references (containing only 1 name) by the parser; + first check if the reference name is a valid enumerated value */ + " char* enum_name = param.get_enumerated();\n" + /* get_enumerated() returns NULL if the reference contained more than one name */ + " enum_value = (enum_name != NULL) ? str_to_enum(enum_name) : %s;\n" + " if (is_valid_enum(enum_value)) {\n" + " return;\n" + " }\n" + /* it's not a valid enum value => dereference it! */ + " mp = param.get_referenced_param();\n" + " }\n" + " if (mp->get_type()!=Module_Param::MP_Enumerated) param.type_error(\"enumerated value\", \"%s\");\n" + " enum_value = str_to_enum(mp->get_enumerated());\n" + " if (!is_valid_enum(enum_value)) {\n" " param.error(\"Invalid enumerated value for type %s.\");\n" " }\n" - "}\n\n", name, dispname, dispname); + "}\n\n", name, unknown_value, dispname, dispname); + + def = mputstr(def, "Module_Param* get_param(Module_Param_Name& param_name) const;\n"); + src = mputprintf + (src, + "Module_Param* %s::get_param(Module_Param_Name& /* param_name */) const\n" + "{\n" + " if (!is_bound()) {\n" + " return new Module_Param_Unbound();\n" + " }\n" + " return new Module_Param_Enumerated(mcopystr(enum_to_str(enum_value)));\n" + "}\n\n", name); /* encoders/decoders */ def = mputstr(def, "void encode_text(Text_Buf& text_buf) const;\n"); @@ -808,9 +842,10 @@ void defEnumTemplate(const enum_def *edef, output_struct *output) char *def = NULL, *src = NULL; const char *name = edef->name, *dispname = edef->dispname; - char *enum_type, *unbound_value; + char *enum_type, *unbound_value, *unknown_value; enum_type = mprintf("%s::enum_type", name); unbound_value = mprintf("%s::UNBOUND_VALUE", name); + unknown_value = mprintf("%s::UNKNOWN_VALUE", name); /* Class declaration */ output->header.class_decls = mputprintf(output->header.class_decls, @@ -1054,10 +1089,10 @@ void defEnumTemplate(const enum_def *edef, output_struct *output) "}\n\n", name, name, name); /* match operators */ - def = mputprintf(def, "boolean match(%s other_value) const;\n", enum_type); + def = mputprintf(def, "boolean match(%s other_value, boolean legacy = FALSE) " + "const;\n", enum_type); src = mputprintf(src, - "boolean %s_template::match(%s other_value) " - "const\n" + "boolean %s_template::match(%s other_value, boolean) const\n" "{\n" "switch (template_selection) {\n" "case SPECIFIC_VALUE:\n" @@ -1081,10 +1116,10 @@ void defEnumTemplate(const enum_def *edef, output_struct *output) "return FALSE;\n" "}\n\n", name, enum_type, dispname); - def = mputprintf(def, "boolean match(const %s& other_value) const;\n", - name); + def = mputprintf(def, "boolean match(const %s& other_value, boolean legacy " + "= FALSE) const;\n", name); src = mputprintf(src, - "boolean %s_template::match(const %s& other_value) const\n" + "boolean %s_template::match(const %s& other_value, boolean) const\n" "{\n" "if (other_value.enum_value == %s) " "TTCN_error(\"Matching a template of enumerated type %s with an unbound " @@ -1143,8 +1178,8 @@ void defEnumTemplate(const enum_def *edef, output_struct *output) "void copy_value(const Base_Type* other_value);\n" "Base_Template* clone() const;\n" "const TTCN_Typedescriptor_t* get_descriptor() const;\n" - "boolean matchv(const Base_Type* other_value) const;\n" - "void log_matchv(const Base_Type* match_value) const;\n"); + "boolean matchv(const Base_Type* other_value, boolean legacy) const;\n" + "void log_matchv(const Base_Type* match_value, boolean legacy) const;\n"); src = mputprintf(src, "void %s_template::valueofv(Base_Type* value) const " "{ *(static_cast<%s*>(value)) = valueof(); }\n" @@ -1156,10 +1191,12 @@ void defEnumTemplate(const enum_def *edef, output_struct *output) "{ return new %s_template(*this); }\n" "const TTCN_Typedescriptor_t* %s_template::get_descriptor() const " "{ return &%s_descr_; }\n" - "boolean %s_template::matchv(const Base_Type* other_value) const " - "{ return match(*(static_cast<const %s*>(other_value))); }\n" - "void %s_template::log_matchv(const Base_Type* match_value) const " - " { log_match(*(static_cast<const %s*>(match_value))); }\n", + "boolean %s_template::matchv(const Base_Type* other_value, " + "boolean legacy) const " + "{ return match(*(static_cast<const %s*>(other_value)), legacy); }\n" + "void %s_template::log_matchv(const Base_Type* match_value, " + "boolean legacy) const " + " { log_match(*(static_cast<const %s*>(match_value)), legacy); }\n", name, name, name, name, name, @@ -1196,11 +1233,10 @@ void defEnumTemplate(const enum_def *edef, output_struct *output) "log_ifpresent();\n" "}\n\n", name, name); - def = mputprintf(def, "void log_match(const %s& match_value) const;\n", - name); + def = mputprintf(def, "void log_match(const %s& match_value, " + "boolean legacy = FALSE) const;\n", name); src = mputprintf(src, - "void %s_template::log_match(const %s& match_value) " - "const\n" + "void %s_template::log_match(const %s& match_value, boolean) const\n" "{\n" "match_value.log();\n" "TTCN_Logger::log_event_str(\" with \");\n" @@ -1267,18 +1303,18 @@ void defEnumTemplate(const enum_def *edef, output_struct *output) "}\n\n", name, enum_type, name, dispname, name, dispname); /* TTCN-3 ispresent() function */ - def = mputstr(def, "boolean is_present() const;\n"); + def = mputstr(def, "boolean is_present(boolean legacy = FALSE) const;\n"); src = mputprintf(src, - "boolean %s_template::is_present() const\n" + "boolean %s_template::is_present(boolean legacy) const\n" "{\n" "if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE;\n" - "return !match_omit();\n" + "return !match_omit(legacy);\n" "}\n\n", name); /* match_omit() */ - def = mputstr(def, "boolean match_omit() const;\n"); + def = mputstr(def, "boolean match_omit(boolean legacy = FALSE) const;\n"); src = mputprintf(src, - "boolean %s_template::match_omit() const\n" + "boolean %s_template::match_omit(boolean legacy) const\n" "{\n" "if (is_ifpresent) return TRUE;\n" "switch (template_selection) {\n" @@ -1287,10 +1323,12 @@ void defEnumTemplate(const enum_def *edef, output_struct *output) "return TRUE;\n" "case VALUE_LIST:\n" "case COMPLEMENTED_LIST:\n" + "if (legacy) {\n" "for (unsigned int i=0; i<value_list.n_values; i++)\n" "if (value_list.list_value[i].match_omit())\n" "return template_selection==VALUE_LIST;\n" "return template_selection==COMPLEMENTED_LIST;\n" + "} // else fall through\n" "default:\n" "return FALSE;\n" "}\n" @@ -1303,7 +1341,22 @@ void defEnumTemplate(const enum_def *edef, output_struct *output) "void %s_template::set_param(Module_Param& param)\n" "{\n" " param.basic_check(Module_Param::BC_TEMPLATE, \"enumerated template\");\n" - " switch (param.get_type()) {\n" + " Module_Param_Ptr mp = ¶m;\n" + " if (param.get_type() == Module_Param::MP_Reference) {\n" + /* enumerated values are also treated as references (containing only 1 name) by the parser; + first check if the reference name is a valid enumerated value */ + " char* enum_name = param.get_enumerated();\n" + /* get_enumerated() returns NULL if the reference contained more than one name */ + " %s enum_val = (enum_name != NULL) ? %s::str_to_enum(enum_name) : %s;\n" + " if (%s::is_valid_enum(enum_val)) {\n" + " *this = enum_val;\n" + " is_ifpresent = param.get_ifpresent() || mp->get_ifpresent();\n" + " return;\n" + " }\n" + /* it's not a valid enum value => dereference it! */ + " mp = param.get_referenced_param();\n" + " }\n" + " switch (mp->get_type()) {\n" " case Module_Param::MP_Omit:\n" " *this = OMIT_VALUE;\n" " break;\n" @@ -1314,14 +1367,17 @@ void defEnumTemplate(const enum_def *edef, output_struct *output) " *this = ANY_OR_OMIT;\n" " break;\n" " case Module_Param::MP_List_Template:\n" - " case Module_Param::MP_ComplementList_Template:\n" - " set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, param.get_size());\n" - " for (size_t p_i=0; p_i<param.get_size(); p_i++) {\n" - " list_item(p_i).set_param(*param.get_elem(p_i));\n" + " case Module_Param::MP_ComplementList_Template: {\n" + " %s_template temp;\n" + " temp.set_type(mp->get_type()==Module_Param::MP_List_Template ? " + "VALUE_LIST : COMPLEMENTED_LIST, mp->get_size());\n" + " for (size_t p_i=0; p_i<mp->get_size(); p_i++) {\n" + " temp.list_item(p_i).set_param(*mp->get_elem(p_i));\n" " }\n" - " break;\n" + " *this = temp;\n" + " break; }\n" " case Module_Param::MP_Enumerated: {\n" - " %s enum_val = %s::str_to_enum(param.get_enumerated());\n" + " %s enum_val = %s::str_to_enum(mp->get_enumerated());\n" " if (!%s::is_valid_enum(enum_val)) {\n" " param.error(\"Invalid enumerated value for type %s.\");\n" " }\n" @@ -1330,15 +1386,61 @@ void defEnumTemplate(const enum_def *edef, output_struct *output) " default:\n" " param.type_error(\"enumerated template\", \"%s\");\n" " }\n" - " is_ifpresent = param.get_ifpresent();\n" - "}\n\n", name, enum_type, name, name, dispname, dispname); + " is_ifpresent = param.get_ifpresent() || mp->get_ifpresent();\n" + "}\n\n", name, enum_type, name, unknown_value, name + , name, enum_type, name, name, dispname, dispname); + + /* get_param() */ + def = mputstr(def, "Module_Param* get_param(Module_Param_Name& param_name) const;\n"); + src = mputprintf + (src, + "Module_Param* %s_template::get_param(Module_Param_Name& param_name) const\n" + "{\n" + " Module_Param* mp = NULL;\n" + " switch (template_selection) {\n" + " case UNINITIALIZED_TEMPLATE:\n" + " mp = new Module_Param_Unbound();\n" + " break;\n" + " case OMIT_VALUE:\n" + " mp = new Module_Param_Omit();\n" + " break;\n" + " case ANY_VALUE:\n" + " mp = new Module_Param_Any();\n" + " break;\n" + " case ANY_OR_OMIT:\n" + " mp = new Module_Param_AnyOrNone();\n" + " break;\n" + " case SPECIFIC_VALUE:\n" + " mp = new Module_Param_Enumerated(mcopystr(%s::enum_to_str(single_value)));\n" + " break;\n" + " case VALUE_LIST:\n" + " case COMPLEMENTED_LIST: {\n" + " if (template_selection == VALUE_LIST) {\n" + " mp = new Module_Param_List_Template();\n" + " }\n" + " else {\n" + " mp = new Module_Param_ComplementList_Template();\n" + " }\n" + " for (size_t i = 0; i < value_list.n_values; ++i) {\n" + " mp->add_elem(value_list.list_value[i].get_param(param_name));\n" + " }\n" + " break; }\n" + " default:\n" + " break;\n" + " }\n" + " if (is_ifpresent) {\n" + " mp->set_ifpresent();\n" + " }\n" + " return mp;\n" + "}\n\n", name, name); if (!use_runtime_2) { /* check template restriction */ def = mputstr(def, "void check_restriction(template_res t_res, " - "const char* t_name=NULL) const;\n"); + "const char* t_name=NULL, boolean legacy = FALSE) const;\n"); src = mputprintf(src, - "void %s_template::check_restriction(template_res t_res, const char* t_name) const\n" + "void %s_template::check_restriction(template_res t_res, const char* t_name,\n" + "boolean legacy) const\n" "{\n" "if (template_selection==UNINITIALIZED_TEMPLATE) return;\n" "switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) {\n" @@ -1350,7 +1452,7 @@ void defEnumTemplate(const enum_def *edef, output_struct *output) "template_selection==SPECIFIC_VALUE)) return;\n" "break;\n" "case TR_PRESENT:\n" - "if (!match_omit()) return;\n" + "if (!match_omit(legacy)) return;\n" "break;\n" "default:\n" "return;\n" @@ -1370,4 +1472,5 @@ void defEnumTemplate(const enum_def *edef, output_struct *output) Free(enum_type); Free(unbound_value); + Free(unknown_value); } diff --git a/compiler2/enum.h b/compiler2/enum.h index 0c460df2b..f1b21221c 100644 --- a/compiler2/enum.h +++ b/compiler2/enum.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/error.h b/compiler2/error.h index 687e9ffed..03602eb66 100644 --- a/compiler2/error.h +++ b/compiler2/error.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/functionref.c b/compiler2/functionref.c index f81764b20..b7d1a720a 100644 --- a/compiler2/functionref.c +++ b/compiler2/functionref.c @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -275,6 +275,13 @@ void defFunctionrefClass(const funcref_def *fdef, output_struct *output) "{\n" " param.error(\"Not supported.\");\n" "}\n\n", name); + + /* get_param */ + def = mputstr(def,"Module_Param* get_param(Module_Param_Name& param_name) const;\n"); + src = mputprintf(src,"Module_Param* %s::get_param(Module_Param_Name& /* param_name */) const\n" + "{\n" + " return NULL;\n" + "}\n\n", name); /* encode_text / decode_text */ def = mputstr(def,"void encode_text(Text_Buf& text_buf) const;\n"); @@ -508,9 +515,9 @@ void defFunctionrefTemplate(const funcref_def *fdef, output_struct *output) /* match functions */ def = mputprintf(def,"boolean match(%s::function_pointer " - "other_value) const;\n", name); + "other_value, boolean legacy = FALSE) const;\n", name); src = mputprintf(src,"boolean %s_template::match(%s::function_pointer " - "other_value) const\n" + "other_value, boolean) const\n" "{\n" "switch(template_selection) {\n" "case SPECIFIC_VALUE:\n" @@ -532,11 +539,12 @@ void defFunctionrefTemplate(const funcref_def *fdef, output_struct *output) "};\n" "return FALSE;\n" "}\n\n", name, name, dispname); - def = mputprintf(def,"boolean match(const %s& other_value) const;\n", name); - src = mputprintf(src,"boolean %s_template::match(const %s& other_value) " - "const\n" + def = mputprintf(def,"boolean match(const %s& other_value, boolean legacy " + "= FALSE) const;\n", name); + src = mputprintf(src,"boolean %s_template::match(const %s& other_value, " + "boolean) const\n" "{\n" - " if (!other_value.is_bound()) return FALSE;\n" + " if (!other_value.is_bound()) return FALSE;\n" "return match(other_value.referred_function);\n" "}\n\n", name, name); @@ -588,8 +596,8 @@ void defFunctionrefTemplate(const funcref_def *fdef, output_struct *output) "void copy_value(const Base_Type* other_value);\n" "Base_Template* clone() const;\n" "const TTCN_Typedescriptor_t* get_descriptor() const;\n" - "boolean matchv(const Base_Type* other_value) const;\n" - "void log_matchv(const Base_Type* match_value) const;\n"); + "boolean matchv(const Base_Type* other_value, boolean legacy) const;\n" + "void log_matchv(const Base_Type* match_value, boolean legacy) const;\n"); src = mputprintf(src, "void %s_template::valueofv(Base_Type* value) const " "{ *(static_cast<%s*>(value)) = valueof(); }\n" @@ -601,10 +609,12 @@ void defFunctionrefTemplate(const funcref_def *fdef, output_struct *output) "{ return new %s_template(*this); }\n" "const TTCN_Typedescriptor_t* %s_template::get_descriptor() const " "{ return &%s_descr_; }\n" - "boolean %s_template::matchv(const Base_Type* other_value) const " - "{ return match(*(static_cast<const %s*>(other_value))); }\n" - "void %s_template::log_matchv(const Base_Type* match_value) const " - " { log_match(*(static_cast<const %s*>(match_value))); }\n", + "boolean %s_template::matchv(const Base_Type* other_value, " + "boolean legacy) const " + "{ return match(*(static_cast<const %s*>(other_value)), legacy); }\n" + "void %s_template::log_matchv(const Base_Type* match_value, " + "boolean legacy) const " + " { log_match(*(static_cast<const %s*>(match_value)), legacy); }\n", name, name, name, name, name, @@ -639,14 +649,15 @@ void defFunctionrefTemplate(const funcref_def *fdef, output_struct *output) "}\n\n", name, fat_string); /* log_match function */ - def = mputprintf(def,"void log_match(const %s& match_value) const;\n", name); - src = mputprintf(src,"void %s_template::log_match(const %s& match_value) " - "const\n" + def = mputprintf(def,"void log_match(const %s& match_value, " + "boolean legacy = FALSE) const;\n", name); + src = mputprintf(src,"void %s_template::log_match(const %s& match_value, " + "boolean legacy) const\n" "{\n" "log();\n" "TTCN_Logger::log_event_str(\" with \");\n" "match_value.log();\n" - "if(match(match_value)) TTCN_Logger::log_event_str(\" matched\");\n" + "if(match(match_value, legacy)) TTCN_Logger::log_event_str(\" matched\");\n" "else TTCN_Logger::log_event_str(\" unmatched\");\n" "}\n\n", name, name); @@ -716,18 +727,18 @@ void defFunctionrefTemplate(const funcref_def *fdef, output_struct *output) src = mputstr(src,"}\n\n"); /* TTCN-3 ispresent() function */ - def = mputstr(def, "boolean is_present() const;\n"); + def = mputstr(def, "boolean is_present(boolean legacy = FALSE) const;\n"); src = mputprintf(src, - "boolean %s_template::is_present() const\n" + "boolean %s_template::is_present(boolean legacy) const\n" "{\n" "if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE;\n" - "return !match_omit();\n" + "return !match_omit(legacy);\n" "}\n\n", name); /* match_omit() */ - def = mputstr(def, "boolean match_omit() const;\n"); + def = mputstr(def, "boolean match_omit(boolean legacy = FALSE) const;\n"); src = mputprintf(src, - "boolean %s_template::match_omit() const\n" + "boolean %s_template::match_omit(boolean legacy) const\n" "{\n" "if (is_ifpresent) return TRUE;\n" "switch (template_selection) {\n" @@ -736,10 +747,12 @@ void defFunctionrefTemplate(const funcref_def *fdef, output_struct *output) "return TRUE;\n" "case VALUE_LIST:\n" "case COMPLEMENTED_LIST:\n" + "if (legacy) {\n" "for (unsigned int i=0; i<value_list.n_values; i++)\n" "if (value_list.list_value[i].match_omit())\n" "return template_selection==VALUE_LIST;\n" "return template_selection==COMPLEMENTED_LIST;\n" + "} // else fall through\n" "default:\n" "return FALSE;\n" "}\n" @@ -752,14 +765,21 @@ void defFunctionrefTemplate(const funcref_def *fdef, output_struct *output) "{\n" " param.error(\"Not supported.\");\n" "}\n\n", name); + + /* get_param */ + def = mputstr(def,"Module_Param* get_param(Module_Param_Name& param_name) const;\n"); + src = mputprintf(src,"Module_Param* %s_template::get_param(Module_Param_Name& /* param_name */) const\n" + "{\n" + " return NULL;\n" + "}\n\n", name); if (!use_runtime_2) { /* check template restriction */ def = mputstr(def, "void check_restriction(template_res t_res, " - "const char* t_name=NULL) const;\n"); + "const char* t_name=NULL, boolean legacy = FALSE) const;\n"); src = mputprintf(src, "void %s_template::check_restriction" - "(template_res t_res, const char* t_name) const\n" + "(template_res t_res, const char* t_name, boolean legacy) const\n" "{\n" "if (template_selection==UNINITIALIZED_TEMPLATE) return;\n" "switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) {\n" @@ -771,7 +791,7 @@ void defFunctionrefTemplate(const funcref_def *fdef, output_struct *output) "template_selection==SPECIFIC_VALUE)) return;\n" "break;\n" "case TR_PRESENT:\n" - "if (!match_omit()) return;\n" + "if (!match_omit(legacy)) return;\n" "break;\n" "default:\n" "return;\n" diff --git a/compiler2/functionref.h b/compiler2/functionref.h index cdd9f4518..9a8421b21 100644 --- a/compiler2/functionref.h +++ b/compiler2/functionref.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/main.cc b/compiler2/main.cc index 7a0d19b5e..c4e8ff387 100644 --- a/compiler2/main.cc +++ b/compiler2/main.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -71,7 +71,7 @@ boolean generate_skeleton = FALSE, force_overwrite = FALSE, use_runtime_2 = FALSE, gcc_compat = FALSE, asn1_xer = FALSE, check_subtype = TRUE, suppress_context = FALSE, display_up_to_date = FALSE, implicit_json_encoding = FALSE, json_refs_for_all_types = TRUE, - force_gen_seof = FALSE; + force_gen_seof = FALSE, omit_in_value_list = FALSE; // Default code splitting mode is set to 'no splitting'. CodeGenHelper::split_type code_splitting_mode = CodeGenHelper::SPLIT_NONE; @@ -349,7 +349,9 @@ static bool check_file_list(const char *file_name, module_struct *module_list, static boolean is_valid_asn1_filename(const char* file_name) { - if (0 == strchr(file_name, '-' )) { + // only check the actual file name, not the whole path + const char* file_name_start = strrchr(file_name, '/'); + if (0 == strchr(file_name_start != NULL ? file_name_start : file_name, '-' )) { return TRUE; } return FALSE; @@ -373,9 +375,10 @@ static void usage() " -g: emulate GCC error/warning message format\n" " -i: use only line numbers in error/warning messages\n" " -j: disable JSON encoder/decoder functions\n" + " -K file: enable selective code coverage\n" " -l: include source line info in C++ code\n" " -L: add source line info for logging\n" - " -K file: enable selective code coverage\n" + " -M: allow 'omit' in template value lists (legacy behavior)\n" " -o dir: output files will be placed into dir\n" " -p: parse only (no semantic check or code generation)\n" " -P pduname: define top-level pdu\n" @@ -393,7 +396,7 @@ static void usage() " -x: disable TEXT encoder/decoder functions\n" " -X: disable XER encoder/decoder functions\n" " -y: disable subtype checking\n" - " -Y: Enforces legacy behaviour of the \"out\" function parameters (see refguide)\n" + " -Y: enforce legacy behaviour for \"out\" function parameters (see refguide)\n" " -z file: enable profiling and code coverage for the TTCN-3 files in the argument\n" " -T file: force interpretation of file as TTCN-3 module\n" " -A file: force interpretation of file as ASN.1 module\n" @@ -452,7 +455,7 @@ int main(int argc, char *argv[]) dflag = false, Xflag = false, Rflag = false, gflag = false, aflag = false, s0flag = false, Cflag = false, yflag = false, Uflag = false, Qflag = false, Sflag = false, Kflag = false, jflag = false, zflag = false, Fflag = false, - errflag = false, print_usage = false, ttcn2json = false; + Mflag = false, errflag = false, print_usage = false, ttcn2json = false; CodeGenHelper cgh; @@ -544,7 +547,7 @@ int main(int argc, char *argv[]) if (!ttcn2json) { for ( ; ; ) { - int c = getopt(argc, argv, "aA:C:K:LP:T:V:bcdfFgilo:YpqQ:rRs0StuU:vwxXjyz:-"); + int c = getopt(argc, argv, "aA:C:K:LP:T:V:bcdfFgilMo:YpqQ:rRs0StuU:vwxXjyz:-"); if (c == -1) break; switch (c) { case 'a': @@ -707,6 +710,10 @@ int main(int argc, char *argv[]) SET_FLAG(F); force_gen_seof = TRUE; break; + case 'M': + SET_FLAG(M); + omit_in_value_list = TRUE; + break; case 'Q': { long max_errs; @@ -751,7 +758,7 @@ int main(int argc, char *argv[]) if (Aflag || Lflag || Pflag || Tflag || Vflag || Yflag || bflag || fflag || iflag || lflag || oflag || pflag || qflag || rflag || sflag || tflag || uflag || wflag || xflag || Xflag || Rflag || - Uflag || yflag || Kflag || jflag || zflag || Fflag) { + Uflag || yflag || Kflag || jflag || zflag || Fflag || Mflag) { errflag = true; print_usage = true; } diff --git a/compiler2/main.hh b/compiler2/main.hh index 4e522034a..10192d71d 100644 --- a/compiler2/main.hh +++ b/compiler2/main.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -35,7 +35,8 @@ extern boolean generate_skeleton, force_overwrite, include_line_info, include_location_info, duplicate_underscores, parse_only, semantic_check_only, output_only_linenum, default_as_optional, use_runtime_2, gcc_compat, asn1_xer, check_subtype, suppress_context, enable_set_bound_out_param, display_up_to_date, - implicit_json_encoding, json_refs_for_all_types, force_gen_seof; + implicit_json_encoding, json_refs_for_all_types, force_gen_seof, + omit_in_value_list; extern const char *expected_platform; diff --git a/compiler2/makefile.c b/compiler2/makefile.c index 4252d22e3..3bf80cfe5 100644 --- a/compiler2/makefile.c +++ b/compiler2/makefile.c @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -207,6 +207,7 @@ struct makefile_struct { char *code_splitting_mode; boolean coverage; char *tcov_file_name; + struct string_list* profiled_file_list; /* not owned */ boolean library; boolean linkingStrategy; boolean hierarchical; @@ -236,6 +237,7 @@ struct makefile_struct { boolean addsourcelineinfo; boolean suppresswarnings; boolean outparamboundness; + boolean omit_in_value_list; struct string_list* solspeclibraries; /* not owned */ struct string_list* sol8speclibraries; /* not owned */ struct string_list* linuxspeclibraries; /* not owned */ @@ -289,6 +291,7 @@ static void init_makefile_struct(struct makefile_struct *makefile) makefile->code_splitting_mode = NULL; makefile->coverage = FALSE; makefile->tcov_file_name = NULL; + makefile->profiled_file_list = NULL; makefile->library = FALSE; makefile->linkingStrategy = FALSE; makefile->hierarchical = FALSE; @@ -297,6 +300,7 @@ static void init_makefile_struct(struct makefile_struct *makefile) makefile->prep_includes = NULL; makefile->prep_defines = NULL; makefile->outparamboundness = FALSE; + makefile->omit_in_value_list = FALSE; makefile->solspeclibraries = NULL; makefile->sol8speclibraries = NULL; makefile->linuxspeclibraries = NULL; @@ -472,6 +476,16 @@ static void dump_makefile_struct(const struct makefile_struct *makefile, DEBUG(level + 1, "Code coverage file: %s", makefile->tcov_file_name != NULL ? makefile->tcov_file_name : "<unknown>"); + if (makefile->profiled_file_list) { + char* lists = mcopystr(makefile->profiled_file_list->str); + struct string_list* iter = makefile->profiled_file_list->next; + while(iter != NULL) { + lists = mputprintf(lists, " %s", iter->str); + iter = iter->next; + } + DEBUG(level + 1, "Profiled file list(s): %s", lists); + Free(lists); + } #ifdef COVERAGE_BUILD DEBUG(level + 1, "Enable coverage: %s", makefile->coverage ? "yes" : "no"); #endif @@ -1961,7 +1975,7 @@ static void print_makefile(struct makefile_struct *makefile) "AR = ar\n" "ARFLAGS = \n\n" "# Flags for the TTCN-3 and ASN.1 compiler:\n" - "COMPILER_FLAGS =%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s %s\n\n" + "COMPILER_FLAGS =%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s\n\n" "# Execution mode: (either ttcn3 or ttcn3-parallel)\n" "TTCN3_LIB = ttcn3%s%s%s\n\n" #ifdef LICENSE @@ -1997,7 +2011,9 @@ static void print_makefile(struct makefile_struct *makefile) /*(makefile->addsourcelineinfo ? " -L" : ""),*/ (makefile->suppresswarnings ? " -w" : ""), (makefile->outparamboundness ? " -Y" : ""), + (makefile->omit_in_value_list ? " -M" : ""), (makefile->tcov_file_name ? makefile->tcov_file_name : ""), + (makefile->profiled_file_list ? " -z $(PROFILED_FILE_LIST)" : ""), /* end of COMPILER FLAGS */ (makefile->use_runtime_2 ? "-rt2" : ""), /* TTCN3_LIB */ (makefile->single_mode ? "" : "-parallel"), @@ -2169,6 +2185,29 @@ static void print_makefile(struct makefile_struct *makefile) } } } + if (makefile->profiled_file_list) { + if (makefile->profiled_file_list->next && !makefile->central_storage) { + // merge all profiled file lists into one list + fprintf(fp, "\n\n" + "# Text file containing the list of profiled TTCN-3 files of " + "this project:\n" + "PROFILED_FILE_LIST = %s.merged\n" + "PROFILED_FILE_LIST_SEGMENTS =", + makefile->profiled_file_list->str); + struct string_list* iter = makefile->profiled_file_list; + while(iter != NULL) { + fprintf(fp, " %s", iter->str); + iter = iter->next; + } + } + else { + // only one profiled file list is needed + fprintf(fp, "\n\n" + "# Text file containing the list of profiled TTCN-3 files of " + "this project:\n" + "PROFILED_FILE_LIST = %s", makefile->profiled_file_list->str); + } + } fputs("\n\n" "# C++ source & header files generated from the TTCN-3 & ASN.1 " "modules of\n" @@ -3040,7 +3079,7 @@ static void print_makefile(struct makefile_struct *makefile) } free_string2_list(head); - struct string_list* act_head = getExternalLibPathes(makefile->project_name); + struct string_list* act_head = getExternalLibPaths(makefile->project_name); struct string_list* act_ext_elem = act_head; while (act_ext_elem) { if (act_ext_elem->str) { @@ -3099,7 +3138,7 @@ static void print_makefile(struct makefile_struct *makefile) act_elem = act_elem->next; } free_string2_list(head); - struct string_list* act_head = getExternalLibPathes(makefile->project_name); + struct string_list* act_head = getExternalLibPaths(makefile->project_name); struct string_list* act_ext_elem = act_head; while (act_ext_elem) { if (act_ext_elem->str) { @@ -3210,6 +3249,8 @@ static void print_makefile(struct makefile_struct *makefile) "preprocess: $(PREPROCESSED_TTCN3_MODULES) ;\n\n", fp); } + boolean merge_profiled_file_lists = makefile->profiled_file_list + && makefile->profiled_file_list->next && !makefile->central_storage; if (makefile->central_storage) { boolean is_first = TRUE; fprintf(fp, "$(GENERATED_SOURCES) $(GENERATED_HEADERS):%s compile-all compile ", @@ -3275,8 +3316,14 @@ static void print_makefile(struct makefile_struct *makefile) "endif\n" "endif",fp); } + if (makefile->profiled_file_list) { + fputs("\n\n" + "compile:: $(PROFILED_FILE_LIST)\n" + "\ttouch $(TTCN3_MODULES) $(PREPROCESSED_TTCN3_MODULES) " + "$(ASN1_MODULES)", fp); + } fprintf(fp, "\n\n" - "compile: $(TTCN3_MODULES) $(PREPROCESSED_TTCN3_MODULES) " + "compile:%s $(TTCN3_MODULES) $(PREPROCESSED_TTCN3_MODULES) " "$(ASN1_MODULES)\n" "\t@echo \"compiling \"'$(patsubst %%.tpd, %%, $(TPD))';\n" "\t$(TTCN3_DIR)/bin/compiler $(COMPILER_FLAGS) \\\n" @@ -3284,6 +3331,7 @@ static void print_makefile(struct makefile_struct *makefile) "\t$(PREPROCESSED_TTCN3_MODULES) $(BASE_PREPROCESSED_TTCN3_MODULES) %s\\\n" "\t$(ASN1_MODULES) $(BASE_ASN1_MODULES) %s - $?\n" "\ttouch $@\n\n", + makefile->profiled_file_list ? ":" : "", makefile->linkingStrategy ? "$(BASE2_TTCN3_MODULES) ":"", makefile->linkingStrategy ? "$(BASE2_PREPROCESSED_TTCN3_MODULES) ":"", makefile->linkingStrategy ? "$(BASE2_ASN1_MODULES)":""); @@ -3304,7 +3352,7 @@ static void print_makefile(struct makefile_struct *makefile) makefile->linkingStrategy ? "$(BASE2_TTCN3_MODULES) ":"", makefile->linkingStrategy ? "$(BASE2_PREPROCESSED_TTCN3_MODULES) ":"", makefile->linkingStrategy ? "$(BASE2_ASN1_MODULES) ":""); - } + } else { fprintf(fp, "\n" "\t@if [ ! -f $@ ]; then %s compile-all; $(MAKE) compile-all; fi\n", rm_command); @@ -3342,14 +3390,20 @@ static void print_makefile(struct makefile_struct *makefile) "endif",fp); } + if (makefile->profiled_file_list) { + fputs("\n\n" + "compile:: $(PROFILED_FILE_LIST)\n" + "\ttouch $(TTCN3_MODULES) $(ASN1_MODULES)", fp); + } fprintf(fp, "\n\n" - "compile: $(TTCN3_MODULES) $(ASN1_MODULES)\n" + "compile:%s $(TTCN3_MODULES) $(ASN1_MODULES)\n" "\t@echo \"compiling \"'$(patsubst %%.tpd, %%, $(TPD))';\n" "\t$(TTCN3_DIR)/bin/compiler $(COMPILER_FLAGS) \\\n" "\t$(TTCN3_MODULES) $(BASE_TTCN3_MODULES) %s\\\n" "\t$(ASN1_MODULES) $(BASE_ASN1_MODULES) %s\\\n" "\t- $?\n" "\ttouch $@\n\n", + makefile->profiled_file_list ? ":" : "", makefile->linkingStrategy ? "$(BASE2_TTCN3_MODULES) " : "", makefile->linkingStrategy ? "$(BASE2_ASN1_MODULES) " : ""); fprintf(fp, @@ -3393,11 +3447,14 @@ static void print_makefile(struct makefile_struct *makefile) "\t@exit 2\n\n", base_dir->dir_name); } } - } + } else { /* not central storage */ fprintf(fp, "$(GENERATED_SOURCES) $(GENERATED_HEADERS): compile\n" "\t@if [ ! -f $@ ]; then %s compile; $(MAKE) compile; fi\n\n" - "check: $(TTCN3_MODULES) ", rm_command); + "%s" + "check:%s $(TTCN3_MODULES) ", rm_command, + merge_profiled_file_lists ? "check:: $(PROFILED_FILE_LIST)\n\n" : "", + merge_profiled_file_lists ? ":" : ""); if (makefile->preprocess) fputs("$(PREPROCESSED_TTCN3_MODULES) ", fp); fputs("$(ASN1_MODULES)\n" "\t$(TTCN3_DIR)/bin/compiler -s $(COMPILER_FLAGS) ", fp); @@ -3407,8 +3464,14 @@ static void print_makefile(struct makefile_struct *makefile) "\t$(TTCN3_MODULES) $(PREPROCESSED_TTCN3_MODULES) $(ASN1_MODULES)", fp); } - fputs("\n\n" - "compile: $(TTCN3_MODULES) ", fp); + if (makefile->profiled_file_list) { + fputs("\n\ncompile:: $(PROFILED_FILE_LIST)\n" + "\ttouch $(TTCN3_MODULES) ", fp); + if (makefile->preprocess) fputs("$(PREPROCESSED_TTCN3_MODULES) ", fp); + fputs("$(ASN1_MODULES)", fp); + } + fprintf(fp, "\n\n" + "compile:%s $(TTCN3_MODULES) ", makefile->profiled_file_list ? ":" : ""); if (makefile->preprocess) fputs("$(PREPROCESSED_TTCN3_MODULES) ", fp); fputs("$(ASN1_MODULES)\n" "\t$(TTCN3_DIR)/bin/compiler $(COMPILER_FLAGS) ", fp); @@ -3422,6 +3485,10 @@ static void print_makefile(struct makefile_struct *makefile) fputs(" - $?\n" "\ttouch $@\n" "\n", fp); + if (merge_profiled_file_lists) { + fputs("$(PROFILED_FILE_LIST): $(PROFILED_FILE_LIST_SEGMENTS)\n" + "\tcat $(PROFILED_FILE_LIST_SEGMENTS) > $(PROFILED_FILE_LIST)\n\n", fp); + } } // clean: if (makefile->linkingStrategy) { @@ -3438,6 +3505,9 @@ static void print_makefile(struct makefile_struct *makefile) fputs("compile", fp); if (makefile->central_storage) fputs(" compile-all", fp); if (makefile->gcc_dep) fputs(" $(DEPFILES)", fp); + if (merge_profiled_file_lists) { + fputs(" $(PROFILED_FILE_LIST)", fp); + } fprintf(fp, " \\\n" "\ttags *.log%s%s\n\n", add_refd_prjs?" referenced*":"", @@ -3452,6 +3522,9 @@ static void print_makefile(struct makefile_struct *makefile) fputs("compile", fp); if (makefile->central_storage) fputs(" compile-all", fp); if (makefile->gcc_dep) fputs(" $(DEPFILES)", fp); + if (merge_profiled_file_lists) { + fputs(" $(PROFILED_FILE_LIST)", fp); + } fprintf(fp, " \\\n" "\ttags *.log%s", add_refd_prjs?" referenced*":""); @@ -3639,14 +3712,14 @@ static void generate_makefile(size_t n_arguments, char *arguments[], boolean central_storage, boolean absolute_paths, boolean preprocess, boolean dump_makefile_data, boolean force_overwrite, boolean use_runtime_2, boolean dynamic, boolean makedepend, boolean coverage, - const char *code_splitting_mode, const char *tcov_file_name, + const char *code_splitting_mode, const char *tcov_file_name, struct string_list* profiled_file_list, boolean Lflag, boolean Zflag, boolean Hflag, struct string_list* sub_project_dirs, struct string_list* ttcn3_prep_includes, struct string_list* ttcn3_prep_defines, struct string_list* ttcn3_prep_undefines, struct string_list* prep_includes, struct string_list* prep_defines, struct string_list* prep_undefines, boolean codesplittpd, boolean quietly, boolean disablesubtypecheck, const char* cxxcompiler, const char* optlevel, const char* optflags, boolean disableber, boolean disableraw, boolean disabletext, boolean disablexer, boolean disablejson, boolean forcexerinasn, boolean defaultasomit, boolean gccmsgformat, boolean linenumbersonlymsg, boolean includesourceinfo, boolean addsourcelineinfo, boolean suppresswarnings, - boolean outparamboundness, struct string_list* solspeclibraries, struct string_list* sol8speclibraries, + boolean outparamboundness, boolean omit_in_value_list, struct string_list* solspeclibraries, struct string_list* sol8speclibraries, struct string_list* linuxspeclibraries, struct string_list* freebsdspeclibraries, struct string_list* win32speclibraries, const char* ttcn3preprocessor, struct string_list* linkerlibraries, struct string_list* additionalObjects, struct string_list* linkerlibsearchpath, char* generatorCommandOutput, @@ -3696,6 +3769,7 @@ static void generate_makefile(size_t n_arguments, char *arguments[], makefile.addsourcelineinfo = addsourcelineinfo; makefile.suppresswarnings = suppresswarnings; makefile.outparamboundness = outparamboundness; + makefile.omit_in_value_list = omit_in_value_list; makefile.solspeclibraries = solspeclibraries; makefile.sol8speclibraries = sol8speclibraries; makefile.linuxspeclibraries = linuxspeclibraries; @@ -3773,7 +3847,11 @@ static void generate_makefile(size_t n_arguments, char *arguments[], } if (tcov_file_name != NULL) { - makefile.tcov_file_name = mputprintf(makefile.tcov_file_name, "-K %s", tcov_file_name); + makefile.tcov_file_name = mprintf(" -K %s", tcov_file_name); + } + + if (profiled_file_list != NULL) { + makefile.profiled_file_list = profiled_file_list; } if (makefile.nTTCN3Modules >= 1) { @@ -3826,7 +3904,7 @@ static void generate_makefile(size_t n_arguments, char *arguments[], static void usage(void) { fprintf(stderr, "\n" - "usage: %s [-abc" C_flag "dDfFglLmprRstTVwWXZ] [-K file] [-P dir]" + "usage: %s [-abc" C_flag "dDfFglLmMprRstTVwWXZ] [-K file] [-z file ] [-P dir]" " [-U none|type] [-e ets_name] [-o dir|file]\n" " [-t project_descriptor.tpd [-b buildconfig]]\n" " [-O file] ... module_name ... testport_name ...\n" @@ -3842,10 +3920,11 @@ static void usage(void) " -e ets_name: name of the target executable\n" " -f: force overwriting of the output Makefile\n" " -g: generate Makefile for use with GNU make\n" + " -K file: enable selective code coverage\n" " -l: use dynamic linking\n" " -L: create makefile with library archive as the default target\n" " -m: always use makedepend for dependencies\n" - " -K file: enable selective code coverage\n" + " -M: allow 'omit' in template value lists (legacy behavior)\n" " -o dir|file: write the Makefile to the given directory or file\n" " -O file: add the given file to the Makefile as other file\n" " -p: generate Makefile with TTCN-3 preprocessing\n" @@ -3855,6 +3934,7 @@ static void usage(void) " -v: show version\n" " -w: suppress warnings\n" " -Y: Enforces legacy behaviour of the \"out\" function parameters (see refguide)\n" + " -z file: enable profiling and code coverage for the TTCN-3 files in the argument\n" "Options for processing the Titan Project Descriptor file(s):\n" " -t tpd: read project descriptor file\n" " -b buildconfig: use the specified build config instead of the default\n" @@ -3911,7 +3991,8 @@ int main(int argc, char *argv[]) dxflag = FALSE, fxflag = FALSE, doflag = FALSE, gfflag = FALSE, lnflag = FALSE, isflag = FALSE, asflag = FALSE, swflag = FALSE, Vflag = FALSE, Dflag = FALSE, Wflag = FALSE, - djflag = FALSE, Zflag = FALSE, Hflag = FALSE; + djflag = FALSE, Zflag = FALSE, Hflag = FALSE, Mflag = FALSE, + zflag = FALSE; boolean error_flag = FALSE; char *output_file = NULL; char *ets_name = NULL; @@ -3922,6 +4003,8 @@ int main(int argc, char *argv[]) const char *tpd_file_name = NULL; const char *tpd_build_config = NULL; const char *tcov_file_name = NULL; + struct string_list* profiled_file_list = NULL; + const char *profiled_file_list_zflag = NULL; const char *file_list_path = NULL; enum tpd_result tpd_processed = FALSE; struct string_list* sub_project_dirs = NULL; @@ -3964,7 +4047,7 @@ int main(int argc, char *argv[]) } for ( ; ; ) { - int c = getopt(argc, argv, "O:ab:c" C_flag "dDe:fFgK:o:lLmpP:rRst:TU:vVwWXYZH"); + int c = getopt(argc, argv, "O:ab:c" C_flag "dDe:fFgK:o:lLmMpP:rRst:TU:vVwWXYz:ZH"); if (c == -1) break; switch (c) { case 'O': @@ -4027,6 +4110,9 @@ int main(int argc, char *argv[]) case 'm': SET_FLAG(m); break; + case 'M': + SET_FLAG(M); + break; case 'p': SET_FLAG(p); break; @@ -4084,6 +4170,10 @@ int main(int argc, char *argv[]) case 'X': SET_FLAG(X); break; + case 'z': + SET_FLAG(z); + profiled_file_list_zflag = optarg; + break; case 'Z': SET_FLAG(Z); break; @@ -4099,7 +4189,7 @@ int main(int argc, char *argv[]) if ( aflag || bflag || cflag || Cflag || dflag || eflag || fflag || Fflag || gflag || mflag || oflag || lflag || pflag || Pflag || rflag || Rflag || sflag || tflag || Tflag || Vflag || wflag || Xflag || Kflag || Dflag || Wflag || Yflag - || Zflag || Hflag || n_other_files > 0) + || Zflag || Hflag || Mflag || zflag || n_other_files > 0) error_flag = TRUE; } @@ -4261,9 +4351,9 @@ int main(int argc, char *argv[]) &Rflag, &lflag, &mflag, &Pflag, &Lflag, rflag, Fflag, Tflag, output_file, &abs_work_dir, sub_project_dirs, program_name, prj_graph_fp, create_symlink_list,ttcn3_prep_includes, ttcn3_prep_defines,ttcn3_prep_undefines, prep_includes, prep_defines, prep_undefines, &csflag, &quflag, &dsflag, &cxxcompiler, &optlevel, &optflags, &dbflag, &drflag, &dtflag, &dxflag, &djflag, &fxflag, &doflag, &gfflag, &lnflag, &isflag, - &asflag, &swflag, &Yflag, solspeclibraries, sol8speclibraries, linuxspeclibraries, freebsdspeclibraries, win32speclibraries, &ttcn3prep, + &asflag, &swflag, &Yflag, &Mflag, solspeclibraries, sol8speclibraries, linuxspeclibraries, freebsdspeclibraries, win32speclibraries, &ttcn3prep, linkerlibraries, additionalObjects, linkerlibsearchpath, Vflag, Dflag, &Zflag, &Hflag, - &generatorCommandOutput, target_placement_list, Wflag, run_command_list, required_configs); + &generatorCommandOutput, target_placement_list, Wflag, run_command_list, required_configs, &profiled_file_list); Free(abs_work_dir); if (prj_graph_fp) { @@ -4274,6 +4364,16 @@ int main(int argc, char *argv[]) ERROR("Failed to process %s", tpd_file_name); exit(EXIT_FAILURE); } + if (zflag) { + WARNING("Compiler option '-z' and its argument will be overwritten by " + "the settings in the TPD"); + } + } + else if (zflag) { + // use the argument given in the command line if there is no TPD + profiled_file_list = (struct string_list*)Malloc(sizeof(struct string_list)); + profiled_file_list->str = mcopystr(profiled_file_list_zflag); + profiled_file_list->next = NULL; } if (!Pflag) { @@ -4287,9 +4387,10 @@ int main(int argc, char *argv[]) } generate_makefile(argc - optind, argv + optind, n_other_files, other_files, output_file, ets_name, project_name, gflag, sflag, cflag, aflag, pflag, dflag, fflag||Fflag, - Rflag, lflag, mflag, Cflag, code_splitting_mode, tcov_file_name, Lflag, Zflag, Hflag, rflag ? sub_project_dirs : NULL, ttcn3_prep_includes, + Rflag, lflag, mflag, Cflag, code_splitting_mode, tcov_file_name, profiled_file_list, + Lflag, Zflag, Hflag, rflag ? sub_project_dirs : NULL, ttcn3_prep_includes, ttcn3_prep_defines, ttcn3_prep_undefines, prep_includes, prep_defines, prep_undefines, csflag, quflag, dsflag, cxxcompiler, optlevel, optflags, dbflag, - drflag, dtflag, dxflag, djflag, fxflag, doflag, gfflag, lnflag, isflag, asflag, swflag, Yflag, solspeclibraries, + drflag, dtflag, dxflag, djflag, fxflag, doflag, gfflag, lnflag, isflag, asflag, swflag, Yflag, Mflag, solspeclibraries, sol8speclibraries, linuxspeclibraries, freebsdspeclibraries, win32speclibraries, ttcn3prep, linkerlibraries, additionalObjects, linkerlibsearchpath, generatorCommandOutput, target_placement_list); } @@ -4309,6 +4410,7 @@ int main(int argc, char *argv[]) free_string_list(linkerlibraries); free_string_list(additionalObjects); free_string_list(linkerlibsearchpath); + free_string_list(profiled_file_list); Free(generatorCommandOutput); free_string2_list(target_placement_list); diff --git a/compiler2/map.hh b/compiler2/map.hh index 477f52419..38880f6fe 100644 --- a/compiler2/map.hh +++ b/compiler2/map.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/record.c b/compiler2/record.c index eeda17628..097ffe763 100644 --- a/compiler2/record.c +++ b/compiler2/record.c @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -2689,6 +2689,7 @@ void gen_xer(const struct_def *sdef, char **pdef, char **psrc) src = mputprintf(src, " {\n" " field_%s.set_size(0);\n" + " if (!tag_closed) {\n" /* Nothing to order if there are no child elements */ " int e_val, num_seen = 0, *seen_f = new int[%lu];\n" , sdef->elements[uo].name , (unsigned long)(n_embed) @@ -2700,6 +2701,7 @@ void gen_xer(const struct_def *sdef, char **pdef, char **psrc) src = mputstr(src, " int last_embval_index = 0;\n"); } src = mputprintf(src, + " bool early_exit = false;\n" " for (int i=0; i < %lu; ++i) {\n" " for (rd_ok=p_reader.Ok(); rd_ok==1; rd_ok=p_reader.Read()) {\n" , (unsigned long)(n_embed)); @@ -2717,8 +2719,12 @@ void gen_xer(const struct_def *sdef, char **pdef, char **psrc) src = mputstr(src, " type = p_reader.NodeType();\n" " if (type==XML_READER_TYPE_ELEMENT) break;\n" + " if (type == XML_READER_TYPE_END_ELEMENT) {\n" + " early_exit = true;\n" + " break;\n" + " }\n" " }\n" - " if (rd_ok != 1) break;\n" + " if (rd_ok != 1 || early_exit) break;\n" " const char * x_name = (const char*)p_reader.LocalName();\n" /* Name or LocalName ? */); if (sdef->xerEmbedValuesPossible) { @@ -2793,7 +2799,11 @@ void gen_xer(const struct_def *sdef, char **pdef, char **psrc) } src = mputstr(src, - " continue; \n" /* take care of the dangling else */ + " {\n" /* take care of the dangling else */ + " TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_INVAL_MSG,\n" + " \"Bad XML tag '%s' instead of a valid field\", x_name);\n" + " break;\n" + " }\n" " }\n" " for (int d_f = 0; d_f < num_seen; ++d_f)\n" " if (e_val == seen_f[d_f])\n" @@ -2828,6 +2838,7 @@ void gen_xer(const struct_def *sdef, char **pdef, char **psrc) " TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_CONSTRAINT, \"Wrong number of elements\");\n" " }\n" " }\n" + " } // !tag_closed\n" " } else { // !uo\n" , sdef->elements[uo].dispname , min_ordered, max_ordered @@ -2959,7 +2970,20 @@ void gen_xer(const struct_def *sdef, char **pdef, char **psrc) } src = mputstr(src, - " } // errorcontext\n" /* End scope for error context objects */ + " } // errorcontext\n"); /* End scope for error context objects */ + + /* Check if every non-optional field has been set */ + for (i = 0; i < sdef->nElements; ++i) { + if (!sdef->elements[i].isOptional) { + src = mputprintf(src, + " if (!field_%s.is_bound()) {\n" + " TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_INCOMPL_MSG,\n" + " \"No data found for non-optional field '%s'\");\n" + " }\n" + , sdef->elements[i].name, sdef->elements[i].dispname); + } + } + src = mputstr(src, " if (!omit_tag) {\n" " int current_depth;\n" " for (rd_ok = p_reader.Ok(); rd_ok == 1; rd_ok = p_reader.Read()) {\n" @@ -3307,27 +3331,31 @@ void defRecordClass1(const struct_def *sdef, output_struct *output) "param.error(\"Field `%%s' not found in %s type `%s'\", param_field);\n" " }\n" " param.basic_check(Module_Param::BC_VALUE, \"%s value\");\n" - " switch (param.get_type()) {\n" + " Module_Param_Ptr mp = ¶m;\n" + " if (param.get_type() == Module_Param::MP_Reference) {\n" + " mp = param.get_referenced_param();\n" + " }\n" + " switch (mp->get_type()) {\n" " case Module_Param::MP_Value_List:\n" - " if (%lu<param.get_size()) {\n" - " param.error(\"%s value of type %s has %lu fields but list value has %%d fields\", (int)param.get_size());\n" + " if (%lu<mp->get_size()) {\n" + " param.error(\"%s value of type %s has %lu fields but list value has %%d fields\", (int)mp->get_size());\n" " }\n", kind_str, dispname, kind_str, (unsigned long)sdef->nElements, kind_str, dispname, (unsigned long)sdef->nElements); for (i = 0; i < sdef->nElements; ++i) { src = mputprintf(src, - " if (param.get_size()>%lu && param.get_elem(%lu)->get_type()!=Module_Param::MP_NotUsed) %s().set_param(*param.get_elem(%lu));\n", + " if (mp->get_size()>%lu && mp->get_elem(%lu)->get_type()!=Module_Param::MP_NotUsed) %s().set_param(*mp->get_elem(%lu));\n", (unsigned long)i, (unsigned long)i, sdef->elements[i].name, (unsigned long)i); } src = mputstr(src, " break;\n" " case Module_Param::MP_Assignment_List: {\n" - " Vector<bool> value_used(param.get_size());\n" - " value_used.resize(param.get_size(), false);\n"); + " Vector<bool> value_used(mp->get_size());\n" + " value_used.resize(mp->get_size(), false);\n"); for (i = 0; i < sdef->nElements; ++i) { src = mputprintf(src, - " for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {\n" - " Module_Param* const curr_param = param.get_elem(val_idx);\n" + " for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) {\n" + " Module_Param* const curr_param = mp->get_elem(val_idx);\n" " if (!strcmp(curr_param->get_id()->get_name(), \"%s\")) {\n" " if (curr_param->get_type()!=Module_Param::MP_NotUsed) {\n" " %s().set_param(*curr_param);\n" @@ -3338,8 +3366,8 @@ void defRecordClass1(const struct_def *sdef, output_struct *output) , sdef->elements[i].dispname, sdef->elements[i].name); } src = mputprintf(src, - " for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {\n" - " param.get_elem(val_idx)->error(\"Non existent field name in type %s: %%s\", param.get_elem(val_idx)->get_id()->get_name());\n" + " for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) if (!value_used[val_idx]) {\n" + " mp->get_elem(val_idx)->error(\"Non existent field name in type %s: %%s\", mp->get_elem(val_idx)->get_id()->get_name());\n" " break;\n" " }\n" " } break;\n" @@ -3347,6 +3375,48 @@ void defRecordClass1(const struct_def *sdef, output_struct *output) " param.type_error(\"%s value\", \"%s\");\n" " }\n" "}\n\n", dispname, kind_str, dispname); + + /* get param function */ + def = mputstr(def, "Module_Param* get_param(Module_Param_Name& param_name) const;\n"); + src = mputprintf(src, + "Module_Param* %s::get_param(Module_Param_Name& param_name) const\n" + "{\n" + " if (!is_bound()) {\n" + " return new Module_Param_Unbound();\n" + " }\n" + " if (param_name.next_name()) {\n" + // Haven't reached the end of the module parameter name + // => the name refers to one of the fields, not to the whole record + " char* param_field = param_name.get_current_name();\n" + " if (param_field[0] >= '0' && param_field[0] <= '9') {\n" + " TTCN_error(\"Unexpected array index in module parameter reference, \"\n" + " \"expected a valid field name for %s type `%s'\");\n" + " }\n" + " ", name, kind_str, dispname); + for (i = 0; i < sdef->nElements; i++) { + src = mputprintf(src, + "if (strcmp(\"%s\", param_field) == 0) {\n" + " return %s().get_param(param_name);\n" + " } else ", + sdef->elements[i].dispname, sdef->elements[i].name); + } + src = mputprintf(src, + "TTCN_error(\"Field `%%s' not found in %s type `%s'\", param_field);\n" + " }\n" + " Module_Param_Assignment_List* mp = new Module_Param_Assignment_List();\n" + , kind_str, dispname); + for (i = 0; i < sdef->nElements; i++) { + src = mputprintf(src, + " Module_Param* mp_field_%s = field_%s.get_param(param_name);\n" + " mp_field_%s->set_id(new Module_Param_FieldName(mcopystr(\"%s\")));\n" + " mp->add_elem(mp_field_%s);\n" + , sdef->elements[i].name, sdef->elements[i].name + , sdef->elements[i].name, sdef->elements[i].dispname + , sdef->elements[i].name); + } + src = mputstr(src, + " return mp;\n" + " }\n\n"); /* set implicit omit function, recursive */ def = mputstr(def, " void set_implicit_omit();\n"); @@ -4250,17 +4320,30 @@ void defRecordClass1(const struct_def *sdef, output_struct *output) " int enc_len = p_tok.put_next_token(JSON_TOKEN_OBJECT_START, NULL);\n\n" , name, dispname); for (i = 0; i < sdef->nElements; ++i) { - if (sdef->elements[i].isOptional && !sdef->elements[i].jsonOmitAsNull) { + if (sdef->elements[i].isOptional && !sdef->elements[i].jsonOmitAsNull && + !sdef->elements[i].jsonMetainfoUnbound) { src = mputprintf(src, " if (field_%s.is_present())\n" , sdef->elements[i].name); } - src=mputprintf(src, + src = mputprintf(src, " {\n" - " enc_len += p_tok.put_next_token(JSON_TOKEN_NAME, \"%s\");\n" - " enc_len += field_%s.JSON_encode(%s_descr_, p_tok);\n" + " enc_len += p_tok.put_next_token(JSON_TOKEN_NAME, \"%s\");\n " + , sdef->elements[i].jsonAlias ? sdef->elements[i].jsonAlias : sdef->elements[i].dispname); + if (sdef->elements[i].jsonMetainfoUnbound) { + src = mputprintf(src, + "if (!field_%s.is_bound()) {\n" + " enc_len += p_tok.put_next_token(JSON_TOKEN_LITERAL_NULL);\n" + " enc_len += p_tok.put_next_token(JSON_TOKEN_NAME, \"metainfo %s\");\n" + " enc_len += p_tok.put_next_token(JSON_TOKEN_STRING, \"\\\"unbound\\\"\");\n" + " }\n" + " else " + , sdef->elements[i].name + , sdef->elements[i].jsonAlias ? sdef->elements[i].jsonAlias : sdef->elements[i].dispname); + } + src = mputprintf(src, + "enc_len += field_%s.JSON_encode(%s_descr_, p_tok);\n" " }\n\n" - , sdef->elements[i].jsonAlias ? sdef->elements[i].jsonAlias : sdef->elements[i].dispname , sdef->elements[i].name, sdef->elements[i].typedescrname); } src = mputstr(src, @@ -4282,8 +4365,20 @@ void defRecordClass1(const struct_def *sdef, output_struct *output) " return JSON_ERROR_INVALID_TOKEN;\n" " }\n" " bound_flag = TRUE;\n\n" - // Read name - value token pairs until we reach some other token - " while (true) {\n" + , name); + boolean has_metainfo_enabled = FALSE; + for (i = 0; i < sdef->nElements; ++i) { + if (sdef->elements[i].jsonMetainfoUnbound) { + // initialize meta info states + src = mputprintf(src, + " int metainfo_%s = JSON_METAINFO_NONE;\n" + , sdef->elements[i].name); + has_metainfo_enabled = TRUE; + } + } + src = mputstr(src, + // Read name - value token pairs until we reach some other token + "\n while (true) {\n" " char* fld_name = 0;\n" " size_t name_len = 0;\n" " size_t buf_pos = p_tok.get_buf_pos();\n" @@ -4297,31 +4392,96 @@ void defRecordClass1(const struct_def *sdef, output_struct *output) " p_tok.set_buf_pos(buf_pos);\n" " break;\n" " }\n" - " else {\n " - , name); + " else {\n "); + if (has_metainfo_enabled) { + // check for meta info + src = mputstr(src, + "boolean is_metainfo = FALSE;\n" + " if (name_len > 9 && 0 == strncmp(fld_name, \"metainfo \", 9)) {\n" + " fld_name += 9;\n" + " name_len -= 9;\n" + " is_metainfo = TRUE;\n" + " }\n "); + } for (i = 0; i < sdef->nElements; ++i) { src = mputprintf(src, // check field name "if (%d == name_len && 0 == strncmp(fld_name, \"%s\", name_len)) {\n" - " int ret_val = field_%s.JSON_decode(%s_descr_, p_tok, p_silent);\n" - " if (0 > ret_val) {\n" - " if (JSON_ERROR_INVALID_TOKEN) {\n" - " JSON_ERROR(TTCN_EncDec::ET_INVAL_MSG, JSON_DEC_FIELD_TOKEN_ERROR, \"%s\");\n" - " }\n" - " return JSON_ERROR_FATAL;\n" - " }\n" - " dec_len += ret_val;\n" - " } else " , (int)strlen(sdef->elements[i].jsonAlias ? sdef->elements[i].jsonAlias : sdef->elements[i].dispname) - , sdef->elements[i].jsonAlias ? sdef->elements[i].jsonAlias : sdef->elements[i].dispname - , sdef->elements[i].name, sdef->elements[i].typedescrname + , sdef->elements[i].jsonAlias ? sdef->elements[i].jsonAlias : sdef->elements[i].dispname); + if (has_metainfo_enabled) { + src = mputstr(src, " if (is_metainfo) {\n"); + if (sdef->elements[i].jsonMetainfoUnbound) { + src = mputprintf(src, + // check meta info + " char* info_value = 0;\n" + " size_t info_len = 0;\n" + " dec_len += p_tok.get_next_token(&j_token, &info_value, &info_len);\n" + " if (JSON_TOKEN_STRING == j_token && 9 == info_len &&\n" + " 0 == strncmp(info_value, \"\\\"unbound\\\"\", 9)) {\n" + " metainfo_%s = JSON_METAINFO_UNBOUND;\n" + " }\n" + " else {\n" + " JSON_ERROR(TTCN_EncDec::ET_INVAL_MSG, JSON_DEC_METAINFO_VALUE_ERROR, \"%s\");\n" + " return JSON_ERROR_FATAL;\n" + " }\n" + , sdef->elements[i].name, sdef->elements[i].dispname); + } + else { + src = mputprintf(src, + " JSON_ERROR(TTCN_EncDec::ET_INVAL_MSG, JSON_DEC_METAINFO_NOT_APPLICABLE, \"%s\");\n" + " return JSON_ERROR_FATAL;\n" + , sdef->elements[i].dispname); + } + src = mputstr(src, + " }\n" + " else {\n"); + if (sdef->elements[i].jsonMetainfoUnbound) { + src = mputstr(src, " buf_pos = p_tok.get_buf_pos();\n"); + } + } + src = mputprintf(src, + " int ret_val = field_%s.JSON_decode(%s_descr_, p_tok, p_silent);\n" + " if (0 > ret_val) {\n" + " if (JSON_ERROR_INVALID_TOKEN == ret_val) {\n" + , sdef->elements[i].name, sdef->elements[i].typedescrname); + if (sdef->elements[i].jsonMetainfoUnbound) { + src = mputprintf(src, + // undo the last action on the buffer, check if the invalid token was a null token + " p_tok.set_buf_pos(buf_pos);\n" + " p_tok.get_next_token(&j_token, NULL, NULL);\n" + " if (JSON_TOKEN_LITERAL_NULL == j_token) {\n" + " if (JSON_METAINFO_NONE == metainfo_%s) {\n" + // delay reporting an error for now, there might be meta info later + " metainfo_%s = JSON_METAINFO_NEEDED;\n" + " continue;\n" + " }\n" + " else if (JSON_METAINFO_UNBOUND == metainfo_%s) {\n" + // meta info already found + " continue;\n" + " }\n" + " }\n" + , sdef->elements[i].name, sdef->elements[i].name, sdef->elements[i].name); + } + src = mputprintf(src, + " JSON_ERROR(TTCN_EncDec::ET_INVAL_MSG, JSON_DEC_FIELD_TOKEN_ERROR, \"%s\");\n" + " }\n" + " return JSON_ERROR_FATAL;\n" + " }\n" + " dec_len += ret_val;\n" , sdef->elements[i].dispname); + if (has_metainfo_enabled) { + src = mputstr(src, " }\n"); + } + src = mputstr(src, + " }\n" + " else "); } - src = mputstr(src, + src = mputprintf(src, "{\n" // invalid field name " char* fld_name2 = mcopystrn(fld_name, name_len);\n" - " JSON_ERROR(TTCN_EncDec::ET_INVAL_MSG, JSON_DEC_INVALID_NAME_ERROR, fld_name2);\n" + " JSON_ERROR(TTCN_EncDec::ET_INVAL_MSG, %sJSON_DEC_INVALID_NAME_ERROR, fld_name2);\n" // if this is set to a warning, skip the value of the field " dec_len += p_tok.get_next_token(&j_token, NULL, NULL);\n" " if (JSON_TOKEN_NUMBER != j_token && JSON_TOKEN_STRING != j_token &&\n" @@ -4339,11 +4499,25 @@ void defRecordClass1(const struct_def *sdef, output_struct *output) " if (JSON_TOKEN_OBJECT_END != j_token) {\n" " JSON_ERROR(TTCN_EncDec::ET_INVAL_MSG, JSON_DEC_OBJECT_END_TOKEN_ERROR, \"\");\n" " return JSON_ERROR_FATAL;\n" - " }\n\n"); - // Check if every field has been set + " }\n\n " + , has_metainfo_enabled ? "is_metainfo ?\n JSON_DEC_METAINFO_NAME_ERROR : " : ""); + // Check if every field has been set and handle meta info for (i = 0; i < sdef->nElements; ++i) { + if (sdef->elements[i].jsonMetainfoUnbound) { + src = mputprintf(src, + "if (JSON_METAINFO_UNBOUND == metainfo_%s) {\n" + " field_%s.clean_up();\n" + " }\n" + " else if (JSON_METAINFO_NEEDED == metainfo_%s) {\n" + // no meta info was found for this field, report the delayed error + " JSON_ERROR(TTCN_EncDec::ET_INVAL_MSG, JSON_DEC_FIELD_TOKEN_ERROR, \"%s\");\n" + " }\n" + " else " + , sdef->elements[i].name, sdef->elements[i].name + , sdef->elements[i].name, sdef->elements[i].dispname); + } src = mputprintf(src, - " if (!field_%s.is_bound()) {\n" + "if (!field_%s.is_bound()) {\n" , sdef->elements[i].name); if (sdef->elements[i].jsonDefaultValue) { src = mputprintf(src, @@ -4952,11 +5126,11 @@ void defRecordTemplate1(const struct_def *sdef, output_struct *output) "}\n\n", name, name, name); /* match operation (template matching) */ - def = mputprintf(def, "boolean match(const %s& other_value) const;\n", - name); + def = mputprintf(def, "boolean match(const %s& other_value, boolean legacy " + "= FALSE) const;\n", name); src = mputprintf(src, - "boolean %s_template::match(const %s& other_value) const\n" + "boolean %s_template::match(const %s& other_value, boolean legacy) const\n" "{\n" "if (!other_value.is_bound()) return FALSE;\n" "switch (template_selection) {\n" @@ -4970,13 +5144,13 @@ void defRecordTemplate1(const struct_def *sdef, output_struct *output) src = mputprintf(src,"if(!other_value.%s().is_bound()) return FALSE;\n", sdef->elements[i].name); if (sdef->elements[i].isOptional) src = mputprintf(src, "if((other_value.%s().ispresent() ? " - "!single_value->field_%s.match((const %s&)other_value.%s()) : " - "!single_value->field_%s.match_omit()))", + "!single_value->field_%s.match((const %s&)other_value.%s(), legacy) : " + "!single_value->field_%s.match_omit(legacy)))", sdef->elements[i].name, sdef->elements[i].name, sdef->elements[i].type, sdef->elements[i].name, sdef->elements[i].name); else src = mputprintf(src, - "if(!single_value->field_%s.match(other_value.%s()))", + "if(!single_value->field_%s.match(other_value.%s(), legacy))", sdef->elements[i].name, sdef->elements[i].name); src = mputstr(src, "return FALSE;\n"); } @@ -4986,7 +5160,7 @@ void defRecordTemplate1(const struct_def *sdef, output_struct *output) "case COMPLEMENTED_LIST:\n" "for (unsigned int list_count = 0; list_count < value_list.n_values; " "list_count++)\n" - "if (value_list.list_value[list_count].match(other_value)) " + "if (value_list.list_value[list_count].match(other_value, legacy)) " "return template_selection == VALUE_LIST;\n" "return template_selection == COMPLEMENTED_LIST;\n" "default:\n" @@ -5244,14 +5418,14 @@ void defRecordTemplate1(const struct_def *sdef, output_struct *output) "}\n\n"); /* log_match function */ - def = mputprintf(def, "void log_match(const %s& match_value) " - "const;\n", name); + def = mputprintf(def, "void log_match(const %s& match_value, " + "boolean legacy = FALSE) const;\n", name); src = mputprintf(src, - "void %s_template::log_match(const %s& match_value) const\n" - "{\n" + "void %s_template::log_match(const %s& match_value, boolean legacy) const\n" + "{\n" "if(TTCN_Logger::VERBOSITY_COMPACT" " == TTCN_Logger::get_matching_verbosity()){\n" - "if(match(match_value)){\n" + "if(match(match_value, legacy)){\n" "TTCN_Logger::print_logmatch_buffer();\n" "TTCN_Logger::log_event_str(\" matched\");\n" "} else{\n" @@ -5262,13 +5436,13 @@ void defRecordTemplate1(const struct_def *sdef, output_struct *output) if (sdef->elements[i].isOptional){ src = mputprintf(src, "if (match_value.%s().ispresent()){\n" - "if(!single_value->field_%s.match(match_value.%s())){\n" + "if(!single_value->field_%s.match(match_value.%s(), legacy)){\n" "TTCN_Logger::log_logmatch_info(\".%s\");\n" - "single_value->field_%s.log_match(match_value.%s());\n" + "single_value->field_%s.log_match(match_value.%s(), legacy);\n" "TTCN_Logger::set_logmatch_buffer_len(previous_size);\n" "}\n" "} else {\n" - "if (!single_value->field_%s.match_omit()){\n " + "if (!single_value->field_%s.match_omit(legacy)){\n " "TTCN_Logger::log_logmatch_info(\".%s := omit with \");\n" "TTCN_Logger::print_logmatch_buffer();\n" "single_value->field_%s.log();\n" @@ -5283,9 +5457,9 @@ void defRecordTemplate1(const struct_def *sdef, output_struct *output) sdef->elements[i].name); }else{ src = mputprintf(src, - "if(!single_value->field_%s.match(match_value.%s())){\n" + "if(!single_value->field_%s.match(match_value.%s(), legacy)){\n" "TTCN_Logger::log_logmatch_info(\".%s\");\n" - "single_value->field_%s.log_match(match_value.%s());\n" + "single_value->field_%s.log_match(match_value.%s(), legacy);\n" "TTCN_Logger::set_logmatch_buffer_len(previous_size);\n" "}\n",sdef->elements[i].name, sdef->elements[i].name, sdef->elements[i].dispname, sdef->elements[i].name, @@ -5311,11 +5485,11 @@ void defRecordTemplate1(const struct_def *sdef, output_struct *output) src = mputprintf(src, " %s := \");\n", sdef->elements[i].dispname); if (sdef->elements[i].isOptional) src = mputprintf(src, "if (match_value.%s().ispresent()) " - "single_value->field_%s.log_match(match_value.%s());\n" + "single_value->field_%s.log_match(match_value.%s(), legacy);\n" "else {\n" "TTCN_Logger::log_event_str(\"omit with \");\n" "single_value->field_%s.log();\n" - "if (single_value->field_%s.match_omit()) " + "if (single_value->field_%s.match_omit(legacy)) " "TTCN_Logger::log_event_str(\" matched\");\n" "else TTCN_Logger::log_event_str(\" unmatched\");\n" "}\n", @@ -5323,7 +5497,7 @@ void defRecordTemplate1(const struct_def *sdef, output_struct *output) sdef->elements[i].name, sdef->elements[i].name, sdef->elements[i].name); else src = mputprintf(src, - "single_value->field_%s.log_match(match_value.%s());\n", + "single_value->field_%s.log_match(match_value.%s(), legacy);\n", sdef->elements[i].name, sdef->elements[i].name); } src = mputstr(src, @@ -5332,7 +5506,7 @@ void defRecordTemplate1(const struct_def *sdef, output_struct *output) "match_value.log();\n" "TTCN_Logger::log_event_str(\" with \");\n" "log();\n" - "if (match(match_value)) TTCN_Logger::log_event_str(\" matched\");\n" + "if (match(match_value, legacy)) TTCN_Logger::log_event_str(\" matched\");\n" "else TTCN_Logger::log_event_str(\" unmatched\");\n" "}\n" "}\n\n"); @@ -5427,7 +5601,11 @@ void defRecordTemplate1(const struct_def *sdef, output_struct *output) "param.error(\"Field `%%s' not found in %s template type `%s'\", param_field);\n" " }\n" " param.basic_check(Module_Param::BC_TEMPLATE, \"%s template\");\n" - " switch (param.get_type()) {\n" + " Module_Param_Ptr mp = ¶m;\n" + " if (param.get_type() == Module_Param::MP_Reference) {\n" + " mp = param.get_referenced_param();\n" + " }\n" + " switch (mp->get_type()) {\n" " case Module_Param::MP_Omit:\n" " *this = OMIT_VALUE;\n" " break;\n" @@ -5438,31 +5616,34 @@ void defRecordTemplate1(const struct_def *sdef, output_struct *output) " *this = ANY_OR_OMIT;\n" " break;\n" " case Module_Param::MP_List_Template:\n" - " case Module_Param::MP_ComplementList_Template:\n" - " set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, param.get_size());\n" - " for (size_t p_i=0; p_i<param.get_size(); p_i++) {\n" - " list_item(p_i).set_param(*param.get_elem(p_i));\n" + " case Module_Param::MP_ComplementList_Template: {\n" + " %s_template temp;\n" + " temp.set_type(mp->get_type()==Module_Param::MP_List_Template ? " + "VALUE_LIST : COMPLEMENTED_LIST, mp->get_size());\n" + " for (size_t p_i=0; p_i<mp->get_size(); p_i++) {\n" + " temp.list_item(p_i).set_param(*mp->get_elem(p_i));\n" " }\n" - " break;\n" + " *this = temp;\n" + " break; }\n" " case Module_Param::MP_Value_List:\n" - " if (%lu<param.get_size()) {\n" - " param.error(\"%s template of type %s has %lu fields but list value has %%d fields\", (int)param.get_size());\n" + " if (%lu<mp->get_size()) {\n" + " param.error(\"%s template of type %s has %lu fields but list value has %%d fields\", (int)mp->get_size());\n" " }\n", - kind_str, dispname, kind_str, (unsigned long)sdef->nElements, kind_str, dispname, (unsigned long)sdef->nElements); + kind_str, dispname, kind_str, name, (unsigned long)sdef->nElements, kind_str, dispname, (unsigned long)sdef->nElements); for (i = 0; i < sdef->nElements; ++i) { src = mputprintf(src, - " if (param.get_size()>%lu && param.get_elem(%lu)->get_type()!=Module_Param::MP_NotUsed) %s().set_param(*param.get_elem(%lu));\n", + " if (mp->get_size()>%lu && mp->get_elem(%lu)->get_type()!=Module_Param::MP_NotUsed) %s().set_param(*mp->get_elem(%lu));\n", (unsigned long)i, (unsigned long)i, sdef->elements[i].name, (unsigned long)i); } src = mputstr(src, " break;\n" " case Module_Param::MP_Assignment_List: {\n" - " Vector<bool> value_used(param.get_size());\n" - " value_used.resize(param.get_size(), false);\n"); + " Vector<bool> value_used(mp->get_size());\n" + " value_used.resize(mp->get_size(), false);\n"); for (i = 0; i < sdef->nElements; ++i) { src = mputprintf(src, - " for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {\n" - " Module_Param* const curr_param = param.get_elem(val_idx);\n" + " for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) {\n" + " Module_Param* const curr_param = mp->get_elem(val_idx);\n" " if (!strcmp(curr_param->get_id()->get_name(), \"%s\")) {\n" " if (curr_param->get_type()!=Module_Param::MP_NotUsed) {\n" " %s().set_param(*curr_param);\n" @@ -5473,23 +5654,96 @@ void defRecordTemplate1(const struct_def *sdef, output_struct *output) , sdef->elements[i].dispname, sdef->elements[i].name); } src = mputprintf(src, - " for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {\n" - " param.get_elem(val_idx)->error(\"Non existent field name in type %s: %%s\", param.get_elem(val_idx)->get_id()->get_name());\n" + " for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) if (!value_used[val_idx]) {\n" + " mp->get_elem(val_idx)->error(\"Non existent field name in type %s: %%s\", mp->get_elem(val_idx)->get_id()->get_name());\n" " break;\n" " }\n" " } break;\n" " default:\n" " param.type_error(\"%s template\", \"%s\");\n" " }\n" - " is_ifpresent = param.get_ifpresent();\n" + " is_ifpresent = param.get_ifpresent() || mp->get_ifpresent();\n" "}\n\n", dispname, kind_str, dispname); + + /* get_param() */ + def = mputstr(def, "Module_Param* get_param(Module_Param_Name& param_name) const;\n"); + src = mputprintf(src, + "Module_Param* %s_template::get_param(Module_Param_Name& param_name) const\n" + "{\n" + " if (param_name.next_name()) {\n" + // Haven't reached the end of the module parameter name + // => the name refers to one of the fields, not to the whole record + " char* param_field = param_name.get_current_name();\n" + " if (param_field[0] >= '0' && param_field[0] <= '9') {\n" + " TTCN_error(\"Unexpected array index in module parameter reference, \"\n" + " \"expected a valid field name for %s template type `%s'\");\n" + " }\n" + " ", name, kind_str, dispname); + for (i = 0; i < sdef->nElements; i++) { + src = mputprintf(src, + "if (strcmp(\"%s\", param_field) == 0) {\n" + " return %s().get_param(param_name);\n" + " } else ", + sdef->elements[i].dispname, sdef->elements[i].name); + } + src = mputprintf(src, + "TTCN_error(\"Field `%%s' not found in %s type `%s'\", param_field);\n" + " }\n" + " Module_Param* mp = NULL;\n" + " switch (template_selection) {\n" + " case UNINITIALIZED_TEMPLATE:\n" + " mp = new Module_Param_Unbound();\n" + " break;\n" + " case OMIT_VALUE:\n" + " mp = new Module_Param_Omit();\n" + " break;\n" + " case ANY_VALUE:\n" + " mp = new Module_Param_Any();\n" + " break;\n" + " case ANY_OR_OMIT:\n" + " mp = new Module_Param_AnyOrNone();\n" + " break;\n" + " case SPECIFIC_VALUE: {\n" + " mp = new Module_Param_Assignment_List();\n" + , kind_str, dispname); + for (i = 0; i < sdef->nElements; i++) { + src = mputprintf(src, + " Module_Param* mp_field_%s = single_value->field_%s.get_param(param_name);\n" + " mp_field_%s->set_id(new Module_Param_FieldName(mcopystr(\"%s\")));\n" + " mp->add_elem(mp_field_%s);\n" + , sdef->elements[i].name, sdef->elements[i].name + , sdef->elements[i].name, sdef->elements[i].dispname + , sdef->elements[i].name); + } + src = mputstr(src, + " break; }\n" + " case VALUE_LIST:\n" + " case COMPLEMENTED_LIST: {\n" + " if (template_selection == VALUE_LIST) {\n" + " mp = new Module_Param_List_Template();\n" + " }\n" + " else {\n" + " mp = new Module_Param_ComplementList_Template();\n" + " }\n" + " for (size_t i = 0; i < value_list.n_values; ++i) {\n" + " mp->add_elem(value_list.list_value[i].get_param(param_name));\n" + " }\n" + " break; }\n" + " default:\n" + " break;\n" + " }\n" + " if (is_ifpresent) {\n" + " mp->set_ifpresent();\n" + " }\n" + " return mp;\n" + "}\n\n"); /* check template restriction */ def = mputstr(def, "void check_restriction(template_res t_res, " - "const char* t_name=NULL) const;\n"); + "const char* t_name=NULL, boolean legacy = FALSE) const;\n"); src = mputprintf(src, "void %s_template::check_restriction(" - "template_res t_res, const char* t_name) const\n" + "template_res t_res, const char* t_name, boolean legacy) const\n" "{\n" "if (template_selection==UNINITIALIZED_TEMPLATE) return;\n" "switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) {\n" @@ -5506,7 +5760,7 @@ void defRecordTemplate1(const struct_def *sdef, output_struct *output) src = mputprintf(src, "return;\n" "case TR_PRESENT:\n" - "if (!match_omit()) return;\n" + "if (!match_omit(legacy)) return;\n" "break;\n" "default:\n" "return;\n" @@ -5649,15 +5903,30 @@ static void defEmptyRecordClass(const struct_def *sdef, "}\n\n", name); /* set_param function */ - def = mputstr(def, "void set_param(const Module_Param& param);\n"); - src = mputprintf(src, "void %s::set_param(const Module_Param& param)\n" + def = mputstr(def, "void set_param(Module_Param& param);\n"); + src = mputprintf(src, "void %s::set_param(Module_Param& param)\n" "{\n" " param.basic_check(Module_Param::BC_VALUE, \"empty record/set value (i.e. { })\");\n" - " if (param.get_type()!=Module_Param::MP_Value_List || param.get_size()>0) {\n" + " Module_Param_Ptr mp = ¶m;\n" + " if (param.get_type() == Module_Param::MP_Reference) {\n" + " mp = param.get_referenced_param();\n" + " }\n" + " if (mp->get_type()!=Module_Param::MP_Value_List || mp->get_size()>0) {\n" " param.type_error(\"empty record/set value (i.e. { })\", \"%s\");\n" " }\n" " bound_flag = TRUE;\n" "}\n\n", name, dispname); + + /* get param function */ + def = mputstr(def, "Module_Param* get_param(Module_Param_Name& param_name) const;\n"); + src = mputprintf(src, + "Module_Param* %s::get_param(Module_Param_Name& /* param_name */) const\n" + "{\n" + " if (!is_bound()) {\n" + " return new Module_Param_Unbound();\n" + " }\n" + " return new Module_Param_Value_List();\n" + "}\n\n", name); /* encode_text function */ def = mputstr(def, "void encode_text(Text_Buf& text_buf) const;\n"); @@ -6108,9 +6377,10 @@ static void defEmptyRecordTemplate(const char *name, const char *dispname, "}\n\n", name, name, name); /* match operation with {} */ - def = mputstr(def, "boolean match(null_type other_value) const;\n"); - src = mputprintf(src, "boolean %s_template::match(null_type other_value) " - "const\n" + def = mputstr(def, "boolean match(null_type other_value, boolean legacy " + "= FALSE) const;\n"); + src = mputprintf(src, "boolean %s_template::match(null_type other_value," + "boolean) const\n" "{\n" "switch (template_selection) {\n" "case ANY_VALUE:\n" @@ -6134,10 +6404,10 @@ static void defEmptyRecordTemplate(const char *name, const char *dispname, "}\n\n", name, dispname); /* match operation with specific value */ - def = mputprintf(def, "boolean match(const %s& other_value) const;\n", - name); - src = mputprintf(src, "boolean %s_template::match(const %s& other_value) " - "const\n" + def = mputprintf(def, "boolean match(const %s& other_value, boolean legacy " + "= FALSE) const;\n", name); + src = mputprintf(src, "boolean %s_template::match(const %s& other_value, " + "boolean) const\n" "{\n" "if (!other_value.is_bound()) return FALSE;" "return match(NULL_VALUE);\n" @@ -6215,10 +6485,10 @@ static void defEmptyRecordTemplate(const char *name, const char *dispname, "}\n\n", name); /* log_match function */ - def = mputprintf(def, "void log_match(const %s& match_value) const;\n", - name); - src = mputprintf(src, "void %s_template::log_match(const %s& match_value) " - "const\n" + def = mputprintf(def, "void log_match(const %s& match_value, " + "boolean legacy = FALSE) const;\n", name); + src = mputprintf(src, "void %s_template::log_match(const %s& match_value, " + "boolean) const\n" "{\n" "match_value.log();\n" "TTCN_Logger::log_event_str(\" with \");\n" @@ -6279,12 +6549,16 @@ static void defEmptyRecordTemplate(const char *name, const char *dispname, "}\n\n", name, name, dispname); /* set_param() */ - def = mputstr(def, "void set_param(const Module_Param& param);\n"); + def = mputstr(def, "void set_param(Module_Param& param);\n"); src = mputprintf(src, - "void %s_template::set_param(const Module_Param& param)\n" + "void %s_template::set_param(Module_Param& param)\n" "{\n" " param.basic_check(Module_Param::BC_TEMPLATE, \"empty record/set template\");\n" - " switch (param.get_type()) {\n" + " Module_Param_Ptr mp = ¶m;\n" + " if (param.get_type() == Module_Param::MP_Reference) {\n" + " mp = param.get_referenced_param();\n" + " }\n" + " switch (mp->get_type()) {\n" " case Module_Param::MP_Omit:\n" " *this = OMIT_VALUE;\n" " break;\n" @@ -6295,28 +6569,74 @@ static void defEmptyRecordTemplate(const char *name, const char *dispname, " *this = ANY_OR_OMIT;\n" " break;\n" " case Module_Param::MP_List_Template:\n" - " case Module_Param::MP_ComplementList_Template:\n" - " set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, param.get_size());\n" - " for (size_t p_i=0; p_i<param.get_size(); p_i++) {\n" - " list_item(p_i).set_param(*param.get_elem(p_i));\n" + " case Module_Param::MP_ComplementList_Template: {\n" + " %s_template temp;\n" + " temp.set_type(mp->get_type()==Module_Param::MP_List_Template ? " + "VALUE_LIST : COMPLEMENTED_LIST, mp->get_size());\n" + " for (size_t p_i=0; p_i<mp->get_size(); p_i++) {\n" + " temp.list_item(p_i).set_param(*mp->get_elem(p_i));\n" " }\n" - " break;\n" + " *this = temp;\n" + " break; }\n" " case Module_Param::MP_Value_List:\n" - " if (param.get_size()>0) param.type_error(\"empty record/set template\", \"%s\");\n" + " if (mp->get_size()>0) param.type_error(\"empty record/set template\", \"%s\");\n" " *this = NULL_VALUE;\n" " break;\n" " default:\n" " param.type_error(\"empty record/set template\", \"%s\");\n" " }\n" - " is_ifpresent = param.get_ifpresent();\n" - "}\n\n", name, dispname, dispname); + " is_ifpresent = param.get_ifpresent() || mp->get_ifpresent();\n" + "}\n\n", name, name, dispname, dispname); + + /* get_param() */ + def = mputstr(def, "Module_Param* get_param(Module_Param_Name& param_name) const;\n"); + src = mputprintf(src, + "Module_Param* %s_template::get_param(Module_Param_Name& param_name) const\n" + "{\n" + " Module_Param* mp = NULL;\n" + " switch (template_selection) {\n" + " case UNINITIALIZED_TEMPLATE:\n" + " mp = new Module_Param_Unbound();\n" + " break;\n" + " case OMIT_VALUE:\n" + " mp = new Module_Param_Omit();\n" + " break;\n" + " case ANY_VALUE:\n" + " mp = new Module_Param_Any();\n" + " break;\n" + " case ANY_OR_OMIT:\n" + " mp = new Module_Param_AnyOrNone();\n" + " break;\n" + " case SPECIFIC_VALUE:\n" + " mp = new Module_Param_Value_List();\n" + " break;\n" + " case VALUE_LIST:\n" + " case COMPLEMENTED_LIST: {\n" + " if (template_selection == VALUE_LIST) {\n" + " mp = new Module_Param_List_Template();\n" + " }\n" + " else {\n" + " mp = new Module_Param_ComplementList_Template();\n" + " }\n" + " for (size_t i = 0; i < value_list.n_values; ++i) {\n" + " mp->add_elem(value_list.list_value[i].get_param(param_name));\n" + " }\n" + " break; }\n" + " default:\n" + " break;\n" + " }\n" + " if (is_ifpresent) {\n" + " mp->set_ifpresent();\n" + " }\n" + " return mp;\n" + "}\n\n", name); /* check template restriction */ def = mputstr(def, "void check_restriction(template_res t_res, " - "const char* t_name=NULL) const;\n"); + "const char* t_name=NULL, boolean legacy = FALSE) const;\n"); src = mputprintf(src, "void %s_template::check_restriction(" - "template_res t_res, const char* t_name) const\n" + "template_res t_res, const char* t_name, boolean legacy) const\n" "{\n" "if (template_selection==UNINITIALIZED_TEMPLATE) return;\n" "switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) {\n" @@ -6326,7 +6646,7 @@ static void defEmptyRecordTemplate(const char *name, const char *dispname, "if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break;\n" "return;\n" "case TR_PRESENT:\n" - "if (!match_omit()) return;\n" + "if (!match_omit(legacy)) return;\n" "break;\n" "default:\n" "return;\n" @@ -6350,18 +6670,18 @@ static void defCommonRecordTemplate(const char *name, char **def, char **src) { /* TTCN-3 ispresent() function */ - *def = mputstr(*def, "boolean is_present() const;\n"); + *def = mputstr(*def, "boolean is_present(boolean legacy = FALSE) const;\n"); *src = mputprintf(*src, - "boolean %s_template::is_present() const\n" + "boolean %s_template::is_present(boolean legacy) const\n" "{\n" "if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE;\n" - "return !match_omit();\n" + "return !match_omit(legacy);\n" "}\n\n", name); /* match_omit() */ - *def = mputstr(*def, "boolean match_omit() const;\n"); + *def = mputstr(*def, "boolean match_omit(boolean legacy = FALSE) const;\n"); *src = mputprintf(*src, - "boolean %s_template::match_omit() const\n" + "boolean %s_template::match_omit(boolean legacy) const\n" "{\n" "if (is_ifpresent) return TRUE;\n" "switch (template_selection) {\n" @@ -6370,10 +6690,12 @@ static void defCommonRecordTemplate(const char *name, "return TRUE;\n" "case VALUE_LIST:\n" "case COMPLEMENTED_LIST:\n" + "if (legacy) {\n" "for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++)\n" "if (value_list.list_value[l_idx].match_omit())\n" "return template_selection==VALUE_LIST;\n" "return template_selection==COMPLEMENTED_LIST;\n" + "} // else fall through\n" "default:\n" "return FALSE;\n" "}\n" @@ -6922,12 +7244,14 @@ void defRecordTemplate2(const struct_def *sdef, output_struct *output) } /* match operation (template matching) */ - def = mputprintf(def, "inline boolean match(const %s& other_value) const " - "{ return matchv(&other_value); }\n", name); + def = mputprintf(def, "inline boolean match(const %s& other_value, " + "boolean legacy = FALSE) const " + "{ return matchv(&other_value, legacy); }\n", name); /* log_match */ - def = mputprintf(def, "inline void log_match(const %s& match_value) const " - "{ log_matchv(&match_value); }\n", name); + def = mputprintf(def, "inline void log_match(const %s& match_value, " + "boolean legacy = FALSE) const " + "{ log_matchv(&match_value, legacy); }\n", name); /* valueof operation */ def = mputprintf(def, "%s valueof() const;\n", name); diff --git a/compiler2/record.h b/compiler2/record.h index 09bf71379..cb9e6710d 100644 --- a/compiler2/record.h +++ b/compiler2/record.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/record_of.c b/compiler2/record_of.c index 5f97b3d90..875a06c41 100644 --- a/compiler2/record_of.c +++ b/compiler2/record_of.c @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -603,25 +603,29 @@ void defRecordOfClass1(const struct_of_def *sdef, output_struct *output) " return;\n" " }\n" " param.basic_check(Module_Param::BC_VALUE|Module_Param::BC_LIST, \"%s value\");\n" + " Module_Param_Ptr mp = ¶m;\n" + " if (param.get_type() == Module_Param::MP_Reference) {\n" + " mp = param.get_referenced_param();\n" + " }\n" " switch (param.get_operation_type()) {\n" " case Module_Param::OT_ASSIGN:\n" - " if (param.get_type()==Module_Param::MP_Value_List && param.get_size()==0) {\n" + " if (mp->get_type()==Module_Param::MP_Value_List && mp->get_size()==0) {\n" " *this = NULL_VALUE;\n" " return;\n" " }\n" - " switch (param.get_type()) {\n" + " switch (mp->get_type()) {\n" " case Module_Param::MP_Value_List:\n" - " set_size(param.get_size());\n" - " for (size_t i=0; i<param.get_size(); ++i) {\n" - " Module_Param* const curr = param.get_elem(i);\n" + " set_size(mp->get_size());\n" + " for (size_t i=0; i<mp->get_size(); ++i) {\n" + " Module_Param* const curr = mp->get_elem(i);\n" " if (curr->get_type()!=Module_Param::MP_NotUsed) {\n" " (*this)[i].set_param(*curr);\n" " }\n" " }\n" " break;\n" " case Module_Param::MP_Indexed_List:\n" - " for (size_t i=0; i<param.get_size(); ++i) {\n" - " Module_Param* const curr = param.get_elem(i);\n" + " for (size_t i=0; i<mp->get_size(); ++i) {\n" + " Module_Param* const curr = mp->get_elem(i);\n" " (*this)[curr->get_id()->get_index()].set_param(*curr);\n" " }\n" " break;\n" @@ -630,12 +634,12 @@ void defRecordOfClass1(const struct_of_def *sdef, output_struct *output) " }\n" " break;\n" " case Module_Param::OT_CONCAT:\n" - " switch (param.get_type()) {\n" + " switch (mp->get_type()) {\n" " case Module_Param::MP_Value_List: {\n" " if (!is_bound()) *this = NULL_VALUE;\n" " int start_idx = lengthof();\n" - " for (size_t i=0; i<param.get_size(); ++i) {\n" - " Module_Param* const curr = param.get_elem(i);\n" + " for (size_t i=0; i<mp->get_size(); ++i) {\n" + " Module_Param* const curr = mp->get_elem(i);\n" " if ((curr->get_type()!=Module_Param::MP_NotUsed)) {\n" " (*this)[start_idx+(int)i].set_param(*curr);\n" " }\n" @@ -651,10 +655,41 @@ void defRecordOfClass1(const struct_of_def *sdef, output_struct *output) " default:\n" " TTCN_error(\"Internal error: Unknown operation type.\");\n" " }\n" - "}\n", name, sdef->kind == RECORD_OF ? "record of" : "set of", + "}\n\n", name, sdef->kind == RECORD_OF ? "record of" : "set of", dispname, sdef->kind == RECORD_OF ? "record of" : "set of", sdef->kind == RECORD_OF ? "record of" : "set of", dispname, sdef->kind == RECORD_OF ? "record of" : "set of", dispname); + + /* get param function */ + def = mputstr(def, "Module_Param* get_param(Module_Param_Name& param_name) const;\n"); + src = mputprintf + (src, + "Module_Param* %s::get_param(Module_Param_Name& param_name) const\n" + "{\n" + " if (!is_bound()) {\n" + " return new Module_Param_Unbound();\n" + " }\n" + " if (param_name.next_name()) {\n" + // Haven't reached the end of the module parameter name + // => the name refers to one of the elements, not to the whole record of + " char* param_field = param_name.get_current_name();\n" + " if (param_field[0] < '0' || param_field[0] > '9') {\n" + " TTCN_error(\"Unexpected record field name in module parameter reference, \"\n" + " \"expected a valid index for %s type `%s'\");\n" + " }\n" + " int param_index = -1;\n" + " sscanf(param_field, \"%%d\", ¶m_index);\n" + " return (*this)[param_index].get_param(param_name);\n" + " }\n" + " Vector<Module_Param*> values;\n" + " for (int i = 0; i < val_ptr->n_elements; ++i) {\n" + " values.push_back((*this)[i].get_param(param_name));\n" + " }\n" + " Module_Param_Value_List* mp = new Module_Param_Value_List();\n" + " mp->add_list_with_implicit_ids(&values);\n" + " values.clear();\n" + " return mp;\n" + "}\n\n", name, sdef->kind == RECORD_OF ? "record of" : "set of", dispname); /* set implicit omit function, recursive */ def = mputstr(def, " void set_implicit_omit();\n"); @@ -2083,25 +2118,29 @@ void defRecordOfClassMemAllocOptimized(const struct_of_def *sdef, output_struct " return;\n" " }\n" " param.basic_check(Module_Param::BC_VALUE|Module_Param::BC_LIST, \"%s value\");\n" + " Module_Param_Ptr mp = ¶m;\n" + " if (param.get_type() == Module_Param::MP_Reference) {\n" + " mp = param.get_referenced_param();\n" + " }\n" " switch (param.get_operation_type()) {\n" " case Module_Param::OT_ASSIGN:\n" - " if (param.get_type()==Module_Param::MP_Value_List && param.get_size()==0) {\n" + " if (mp->get_type()==Module_Param::MP_Value_List && mp->get_size()==0) {\n" " *this = NULL_VALUE;\n" " return;\n" " }\n" - " switch (param.get_type()) {\n" + " switch (mp->get_type()) {\n" " case Module_Param::MP_Value_List:\n" - " set_size(param.get_size());\n" - " for (size_t i=0; i<param.get_size(); ++i) {\n" - " Module_Param* const curr = param.get_elem(i);\n" + " set_size(mp->get_size());\n" + " for (size_t i=0; i<mp->get_size(); ++i) {\n" + " Module_Param* const curr = mp->get_elem(i);\n" " if (curr->get_type()!=Module_Param::MP_NotUsed) {\n" " (*this)[i].set_param(*curr);\n" " }\n" " }\n" " break;\n" " case Module_Param::MP_Indexed_List:\n" - " for (size_t i=0; i<param.get_size(); ++i) {\n" - " Module_Param* const curr = param.get_elem(i);\n" + " for (size_t i=0; i<mp->get_size(); ++i) {\n" + " Module_Param* const curr = mp->get_elem(i);\n" " (*this)[curr->get_id()->get_index()].set_param(*curr);\n" " }\n" " break;\n" @@ -2110,12 +2149,12 @@ void defRecordOfClassMemAllocOptimized(const struct_of_def *sdef, output_struct " }\n" " break;\n" " case Module_Param::OT_CONCAT:\n" - " switch (param.get_type()) {\n" + " switch (mp->get_type()) {\n" " case Module_Param::MP_Value_List: {\n" " if (!is_bound()) *this = NULL_VALUE;\n" " int start_idx = lengthof();\n" - " for (size_t i=0; i<param.get_size(); ++i) {\n" - " Module_Param* const curr = param.get_elem(i);\n" + " for (size_t i=0; i<mp->get_size(); ++i) {\n" + " Module_Param* const curr = mp->get_elem(i);\n" " if ((curr->get_type()!=Module_Param::MP_NotUsed)) {\n" " (*this)[start_idx+(int)i].set_param(*curr);\n" " }\n" @@ -2135,6 +2174,37 @@ void defRecordOfClassMemAllocOptimized(const struct_of_def *sdef, output_struct sdef->kind == RECORD_OF ? "record of" : "set of", sdef->kind == RECORD_OF ? "record of" : "set of", dispname, sdef->kind == RECORD_OF ? "record of" : "set of", dispname); + + /* get param function */ + def = mputstr(def, "Module_Param* get_param(Module_Param_Name& param_name) const;\n"); + src = mputprintf + (src, + "Module_Param* %s::get_param(Module_Param_Name& param_name) const\n" + "{\n" + " if (!is_bound()) {\n" + " return new Module_Param_Unbound();\n" + " }\n" + " if (param_name.next_name()) {\n" + // Haven't reached the end of the module parameter name + // => the name refers to one of the elements, not to the whole record of + " char* param_field = param_name.get_current_name();\n" + " if (param_field[0] < '0' || param_field[0] > '9') {\n" + " TTCN_error(\"Unexpected record field name in module parameter reference, \"\n" + " \"expected a valid index for %s type `%s'\");\n" + " }\n" + " int param_index = -1;\n" + " sscanf(param_field, \"%%d\", ¶m_index);\n" + " return (*this)[param_index].get_param(param_name);\n" + " }\n" + " Vector<Module_Param*> values;\n" + " for (int i = 0; i < n_elements; ++i) {\n" + " values.push_back((*this)[i].get_param(param_name));\n" + " }\n" + " Module_Param_Value_List* mp = new Module_Param_Value_List();\n" + " mp->add_list_with_implicit_ids(&values);\n" + " values.clear();\n" + " return mp;\n" + "}\n\n", name, sdef->kind == RECORD_OF ? "record of" : "set of", dispname); /* encoding / decoding functions */ def = mputstr(def, "void encode_text(Text_Buf& text_buf) const;\n"); @@ -3388,15 +3458,15 @@ void defRecordOfTemplate1(const struct_of_def *sdef, output_struct *output) def = mputstr(def, "static boolean match_function_specific(const Base_Type *value_ptr, " "int value_index, const Restricted_Length_Template *template_ptr, " - "int template_index);\n"); + "int template_index, boolean legacy);\n"); src = mputprintf(src, "boolean %s_template::match_function_specific(const Base_Type *value_ptr, " "int value_index, const Restricted_Length_Template *template_ptr, " - "int template_index)\n" + "int template_index, boolean legacy)\n" "{\n" "if (value_index >= 0) return ((const %s_template*)template_ptr)->" "single_value.value_elements[template_index]->" - "match((*(const %s*)value_ptr)[value_index]);\n" + "match((*(const %s*)value_ptr)[value_index], legacy);\n" "else return ((const %s_template*)template_ptr)->" "single_value.value_elements[template_index]->is_any_or_omit();\n" "}\n\n", name, name, name, name); @@ -3406,15 +3476,15 @@ void defRecordOfTemplate1(const struct_of_def *sdef, output_struct *output) def = mputstr(def, "static boolean match_function_set(const Base_Type *value_ptr, " "int value_index, const Restricted_Length_Template *template_ptr, " - "int template_index);\n"); + "int template_index, boolean legacy);\n"); src = mputprintf(src, "boolean %s_template::match_function_set(const Base_Type *value_ptr, " "int value_index, const Restricted_Length_Template *template_ptr, " - "int template_index)\n" + "int template_index, boolean legacy)\n" "{\n" "if (value_index >= 0) return ((const %s_template*)template_ptr)->" "value_set.set_items[template_index].match(" - "(*(const %s*)value_ptr)[value_index]);\n" + "(*(const %s*)value_ptr)[value_index], legacy);\n" "else return ((const %s_template*)template_ptr)->" "value_set.set_items[template_index].is_any_or_omit();\n" "}\n\n", name, name, name, name); @@ -3423,16 +3493,16 @@ void defRecordOfTemplate1(const struct_of_def *sdef, output_struct *output) def = mputstr(def, "static void log_function(const Base_Type *value_ptr, " "const Restricted_Length_Template *template_ptr," - " int index_value, int index_template);\n"); + " int index_value, int index_template, boolean legacy);\n"); src = mputprintf(src, "void %s_template::log_function(const Base_Type *value_ptr, " "const Restricted_Length_Template *template_ptr," - " int index_value, int index_template)\n" + " int index_value, int index_template, boolean legacy)\n" "{\n" "if (value_ptr != NULL && template_ptr != NULL)" "((const %s_template*)template_ptr)" "->single_value.value_elements[index_template]" - "->log_match((*(const %s*)value_ptr)[index_value]);\n" + "->log_match((*(const %s*)value_ptr)[index_value], legacy);\n" "else if (value_ptr != NULL) (*(const %s*)value_ptr)[index_value].log();\n" "else if (template_ptr != NULL) ((const %s_template*)template_ptr)" "->single_value.value_elements[index_template]->log();\n" @@ -3860,10 +3930,10 @@ void defRecordOfTemplate1(const struct_of_def *sdef, output_struct *output) dispname, dispname, dispname, dispname, dispname, dispname); /* match operation */ - def = mputprintf(def, "boolean match(const %s& other_value) const;\n", - name); + def = mputprintf(def, "boolean match(const %s& other_value, boolean legacy " + "= FALSE) const;\n", name); src = mputprintf(src, - "boolean %s_template::match(const %s& other_value) const\n" + "boolean %s_template::match(const %s& other_value, boolean legacy) const\n" "{\n" "if (!other_value.is_bound()) return FALSE;\n" "int value_length = other_value.size_of();\n" @@ -3871,7 +3941,7 @@ void defRecordOfTemplate1(const struct_of_def *sdef, output_struct *output) "switch (template_selection) {\n" "case SPECIFIC_VALUE:\n" "return match_%s_of(&other_value, value_length, this, " - "single_value.n_elements, match_function_specific);\n" + "single_value.n_elements, match_function_specific, legacy);\n" "case OMIT_VALUE:\n" "return FALSE;\n" "case ANY_VALUE:\n" @@ -3881,7 +3951,7 @@ void defRecordOfTemplate1(const struct_of_def *sdef, output_struct *output) "case COMPLEMENTED_LIST:\n" "for (unsigned int list_count = 0; list_count < value_list.n_values; " "list_count++)\n" - "if (value_list.list_value[list_count].match(other_value)) " + "if (value_list.list_value[list_count].match(other_value, legacy)) " "return template_selection == VALUE_LIST;\n" "return template_selection == COMPLEMENTED_LIST;\n", name, name, sdef->kind == RECORD_OF ? "record" : "set"); @@ -3890,7 +3960,7 @@ void defRecordOfTemplate1(const struct_of_def *sdef, output_struct *output) "case SUPERSET_MATCH:\n" "case SUBSET_MATCH:\n" "return match_set_of(&other_value, value_length, this, " - "value_set.n_items, match_function_set);\n"); + "value_set.n_items, match_function_set, legacy);\n"); } src = mputprintf(src, "default:\n" @@ -4091,13 +4161,13 @@ void defRecordOfTemplate1(const struct_of_def *sdef, output_struct *output) "log_ifpresent();\n" "}\n\n"); - def = mputprintf(def, "void log_match(const %s& match_value) const;\n", - name); - src = mputprintf(src, "void %s_template::log_match(const %s& match_value) " - "const\n" + def = mputprintf(def, "void log_match(const %s& match_value, " + "boolean legacy = FALSE) const;\n", name); + src = mputprintf(src, "void %s_template::log_match(const %s& match_value, " + "boolean legacy) const\n" "{\n" "if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){\n" - "if(match(match_value)){\n" + "if(match(match_value, legacy)){\n" "TTCN_Logger::print_logmatch_buffer();\n" "TTCN_Logger::log_event_str(\" matched\");\n" "}else{\n", name, name); @@ -4110,9 +4180,9 @@ void defRecordOfTemplate1(const struct_of_def *sdef, output_struct *output) "size_t previous_size = TTCN_Logger::get_logmatch_buffer_len();\n" "for (int elem_count = 0; elem_count < single_value.n_elements; " "elem_count++) {\n" - "if(!single_value.value_elements[elem_count]->match(match_value[elem_count])){\n" + "if(!single_value.value_elements[elem_count]->match(match_value[elem_count], legacy)){\n" "TTCN_Logger::log_logmatch_info(\"[%d]\", elem_count);\n" - "single_value.value_elements[elem_count]->log_match(match_value[elem_count]);\n" + "single_value.value_elements[elem_count]->log_match(match_value[elem_count], legacy);\n" "TTCN_Logger::set_logmatch_buffer_len(previous_size);\n" "}\n" "}\n" @@ -4130,7 +4200,7 @@ void defRecordOfTemplate1(const struct_of_def *sdef, output_struct *output) "size_t previous_size = TTCN_Logger::get_logmatch_buffer_len();\n" "if (template_selection == SPECIFIC_VALUE)\n" " log_match_heuristics(&match_value, match_value.size_of(), this, " - "single_value.n_elements, match_function_specific, log_function);\n" + "single_value.n_elements, match_function_specific, log_function, legacy);\n" "else{\n" "if(previous_size != 0){\n" "TTCN_Logger::print_logmatch_buffer();\n" @@ -4159,7 +4229,7 @@ void defRecordOfTemplate1(const struct_of_def *sdef, output_struct *output) "elem_count++) {\n" "if (elem_count > 0) TTCN_Logger::log_event_str(\", \");\n" "single_value.value_elements[elem_count]->log_match" - "(match_value[elem_count]);\n" + "(match_value[elem_count], legacy);\n" "}\n" "TTCN_Logger::log_event_str(\" }\");\n" "log_match_length(single_value.n_elements);\n" @@ -4169,13 +4239,13 @@ void defRecordOfTemplate1(const struct_of_def *sdef, output_struct *output) "match_value.log();\n" "TTCN_Logger::log_event_str(\" with \");\n" "log();\n" - "if (match(match_value)) TTCN_Logger::log_event_str(\" matched\");\n"); + "if (match(match_value, legacy)) TTCN_Logger::log_event_str(\" matched\");\n"); if (sdef->kind == SET_OF) { src = mputstr(src, "else {\n" "TTCN_Logger::log_event_str(\" unmatched\");\n" "if (template_selection == SPECIFIC_VALUE) log_match_heuristics(" "&match_value, match_value.size_of(), this, single_value.n_elements, " - "match_function_specific, log_function);\n" + "match_function_specific, log_function, legacy);\n" "}\n"); } else { src = mputstr(src, "else TTCN_Logger::log_event_str(\" unmatched\");\n" @@ -4273,18 +4343,18 @@ void defRecordOfTemplate1(const struct_of_def *sdef, output_struct *output) "}\n\n", dispname); /* TTCN-3 ispresent() function */ - def = mputstr(def, "boolean is_present() const;\n"); + def = mputstr(def, "boolean is_present(boolean legacy = FALSE) const;\n"); src = mputprintf(src, - "boolean %s_template::is_present() const\n" + "boolean %s_template::is_present(boolean legacy) const\n" "{\n" "if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE;\n" - "return !match_omit();\n" + "return !match_omit(legacy);\n" "}\n\n", name); /* match_omit() */ - def = mputstr(def, "boolean match_omit() const;\n"); + def = mputstr(def, "boolean match_omit(boolean legacy = FALSE) const;\n"); src = mputprintf(src, - "boolean %s_template::match_omit() const\n" + "boolean %s_template::match_omit(boolean legacy) const\n" "{\n" "if (is_ifpresent) return TRUE;\n" "switch (template_selection) {\n" @@ -4293,10 +4363,12 @@ void defRecordOfTemplate1(const struct_of_def *sdef, output_struct *output) "return TRUE;\n" "case VALUE_LIST:\n" "case COMPLEMENTED_LIST:\n" + "if (legacy) {\n" "for (unsigned int i=0; i<value_list.n_values; i++)\n" "if (value_list.list_value[i].match_omit())\n" "return template_selection==VALUE_LIST;\n" "return template_selection==COMPLEMENTED_LIST;\n" + "} // else fall through\n" "default:\n" "return FALSE;\n" "}\n" @@ -4323,7 +4395,11 @@ void defRecordOfTemplate1(const struct_of_def *sdef, output_struct *output) " return;\n" " }\n" " param.basic_check(Module_Param::BC_TEMPLATE|Module_Param::BC_LIST, \"%s of template\");\n" - " switch (param.get_type()) {\n" + " Module_Param_Ptr mp = ¶m;\n" + " if (param.get_type() == Module_Param::MP_Reference) {\n" + " mp = param.get_referenced_param();\n" + " }\n" + " switch (mp->get_type()) {\n" " case Module_Param::MP_Omit:\n" " *this = OMIT_VALUE;\n" " break;\n" @@ -4334,40 +4410,43 @@ void defRecordOfTemplate1(const struct_of_def *sdef, output_struct *output) " *this = ANY_OR_OMIT;\n" " break;\n" " case Module_Param::MP_List_Template:\n" - " case Module_Param::MP_ComplementList_Template:\n" - " set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, param.get_size());\n" - " for (size_t p_i=0; p_i<param.get_size(); p_i++) {\n" - " list_item(p_i).set_param(*param.get_elem(p_i));\n" + " case Module_Param::MP_ComplementList_Template: {\n" + " %s_template temp;\n" + " temp.set_type(mp->get_type()==Module_Param::MP_List_Template ? " + "VALUE_LIST : COMPLEMENTED_LIST, mp->get_size());\n" + " for (size_t p_i=0; p_i<mp->get_size(); p_i++) {\n" + " temp.list_item(p_i).set_param(*mp->get_elem(p_i));\n" " }\n" - " break;\n" + " *this = temp;\n" + " break; }\n" " case Module_Param::MP_Indexed_List:\n" " if (template_selection!=SPECIFIC_VALUE) set_size(0);\n" - " for (size_t p_i=0; p_i<param.get_size(); ++p_i) {\n" - " (*this)[(int)(param.get_elem(p_i)->get_id()->get_index())].set_param(*param.get_elem(p_i));\n" + " for (size_t p_i=0; p_i<mp->get_size(); ++p_i) {\n" + " (*this)[(int)(mp->get_elem(p_i)->get_id()->get_index())].set_param(*mp->get_elem(p_i));\n" " }\n" " break;\n", - name, sdef->kind==RECORD_OF?"record":"set", dispname, sdef->kind==RECORD_OF?"record":"set"); + name, sdef->kind==RECORD_OF?"record":"set", dispname, sdef->kind==RECORD_OF?"record":"set", name); if (sdef->kind == RECORD_OF) { src = mputstr(src, " case Module_Param::MP_Value_List: {\n" - " set_size(param.get_size());\n" + " set_size(mp->get_size());\n" " int curr_idx = 0;\n" - " for (size_t p_i=0; p_i<param.get_size(); ++p_i) {\n" - " switch (param.get_elem(p_i)->get_type()) {\n" + " for (size_t p_i=0; p_i<mp->get_size(); ++p_i) {\n" + " switch (mp->get_elem(p_i)->get_type()) {\n" " case Module_Param::MP_NotUsed:\n" " curr_idx++;\n" " break;\n" " case Module_Param::MP_Permutation_Template: {\n" " int perm_start_idx = curr_idx;\n" - " for (size_t perm_i=0; perm_i<param.get_elem(p_i)->get_size(); perm_i++) {\n" - " (*this)[curr_idx].set_param(*(param.get_elem(p_i)->get_elem(perm_i)));\n" + " for (size_t perm_i=0; perm_i<mp->get_elem(p_i)->get_size(); perm_i++) {\n" + " (*this)[curr_idx].set_param(*(mp->get_elem(p_i)->get_elem(perm_i)));\n" " curr_idx++;\n" " }\n" " int perm_end_idx = curr_idx - 1;\n" " add_permutation(perm_start_idx, perm_end_idx);\n" " } break;\n" " default:\n" - " (*this)[curr_idx].set_param(*param.get_elem(p_i));\n" + " (*this)[curr_idx].set_param(*mp->get_elem(p_i));\n" " curr_idx++;\n" " }\n" " }\n" @@ -4375,18 +4454,18 @@ void defRecordOfTemplate1(const struct_of_def *sdef, output_struct *output) } else { src = mputstr(src, " case Module_Param::MP_Value_List:\n" - " set_size(param.get_size());\n" - " for (size_t p_i=0; p_i<param.get_size(); ++p_i) {\n" - " if (param.get_elem(p_i)->get_type()!=Module_Param::MP_NotUsed) {\n" - " (*this)[p_i].set_param(*param.get_elem(p_i));\n" + " set_size(mp->get_size());\n" + " for (size_t p_i=0; p_i<mp->get_size(); ++p_i) {\n" + " if (mp->get_elem(p_i)->get_type()!=Module_Param::MP_NotUsed) {\n" + " (*this)[p_i].set_param(*mp->get_elem(p_i));\n" " }\n" " }\n" " break;\n" " case Module_Param::MP_Superset_Template:\n" " case Module_Param::MP_Subset_Template:\n" - " set_type(param.get_type()==Module_Param::MP_Superset_Template ? SUPERSET_MATCH : SUBSET_MATCH, param.get_size());\n" - " for (size_t p_i=0; p_i<param.get_size(); p_i++) {\n" - " set_item(p_i).set_param(*param.get_elem(p_i));\n" + " set_type(mp->get_type()==Module_Param::MP_Superset_Template ? SUPERSET_MATCH : SUBSET_MATCH, mp->get_size());\n" + " for (size_t p_i=0; p_i<mp->get_size(); p_i++) {\n" + " set_item(p_i).set_param(*mp->get_elem(p_i));\n" " }\n" " break;\n"); } @@ -4394,16 +4473,84 @@ void defRecordOfTemplate1(const struct_of_def *sdef, output_struct *output) " default:\n" " param.type_error(\"%s of template\", \"%s\");\n" " }\n" - " is_ifpresent = param.get_ifpresent();\n" - " set_length_range(param);\n" + " is_ifpresent = param.get_ifpresent() || mp->get_ifpresent();\n" + " if (param.get_length_restriction() != NULL) {\n" + " set_length_range(param);\n" + " }\n" + " else {\n" + " set_length_range(*mp);\n" + " };\n" "}\n\n", sdef->kind==RECORD_OF?"record":"set", dispname); + + /* get_param() */ + def = mputstr(def, "Module_Param* get_param(Module_Param_Name& param_name) const;\n"); + src = mputprintf + (src, + "Module_Param* %s_template::get_param(Module_Param_Name& param_name) const\n" + "{\n" + " if (param_name.next_name()) {\n" + // Haven't reached the end of the module parameter name + // => the name refers to one of the elements, not to the whole record of + " char* param_field = param_name.get_current_name();\n" + " if (param_field[0] < '0' || param_field[0] > '9') {\n" + " TTCN_error(\"Unexpected record field name in module parameter reference, \"\n" + " \"expected a valid index for %s template type `%s'\");\n" + " }\n" + " int param_index = -1;\n" + " sscanf(param_field, \"%%d\", ¶m_index);\n" + " return (*this)[param_index].get_param(param_name);\n" + " }\n" + " Module_Param* mp = NULL;\n" + " switch (template_selection) {\n" + " case UNINITIALIZED_TEMPLATE:\n" + " mp = new Module_Param_Unbound();\n" + " break;\n" + " case OMIT_VALUE:\n" + " mp = new Module_Param_Omit();\n" + " break;\n" + " case ANY_VALUE:\n" + " mp = new Module_Param_Any();\n" + " break;\n" + " case ANY_OR_OMIT:\n" + " mp = new Module_Param_AnyOrNone();\n" + " break;\n" + " case SPECIFIC_VALUE: {\n" + " Vector<Module_Param*> values;\n" + " for (int i = 0; i < single_value.n_elements; ++i) {\n" + " values.push_back((*this)[i].get_param(param_name));\n" + " }\n" + " mp = new Module_Param_Value_List();\n" + " mp->add_list_with_implicit_ids(&values);\n" + " values.clear();\n" + " break; }\n" + " case VALUE_LIST:\n" + " case COMPLEMENTED_LIST: {\n" + " if (template_selection == VALUE_LIST) {\n" + " mp = new Module_Param_List_Template();\n" + " }\n" + " else {\n" + " mp = new Module_Param_ComplementList_Template();\n" + " }\n" + " for (size_t i = 0; i < value_list.n_values; ++i) {\n" + " mp->add_elem(value_list.list_value[i].get_param(param_name));\n" + " }\n" + " break; }\n" + " default:\n" + " break;\n" + " }\n" + " if (is_ifpresent) {\n" + " mp->set_ifpresent();\n" + " }\n" + " mp->set_length_restriction(get_length_range());\n" + " return mp;\n" + "}\n\n", name, sdef->kind==RECORD_OF ? "record of" : "set of", dispname); /* check template restriction */ def = mputstr(def, "void check_restriction(template_res t_res, " - "const char* t_name=NULL) const;\n"); + "const char* t_name=NULL, boolean legacy = FALSE) const;\n"); src = mputprintf(src, "void %s_template::check_restriction(" - "template_res t_res, const char* t_name) const\n" + "template_res t_res, const char* t_name, boolean legacy) const\n" "{\n" "if (template_selection==UNINITIALIZED_TEMPLATE) return;\n" "switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) {\n" @@ -4416,7 +4563,7 @@ void defRecordOfTemplate1(const struct_of_def *sdef, output_struct *output) "t_res, t_name ? t_name : \"%s\");\n" "return;\n" "case TR_PRESENT:\n" - "if (!match_omit()) return;\n" + "if (!match_omit(legacy)) return;\n" "break;\n" "default:\n" "return;\n" @@ -4552,8 +4699,9 @@ void defRecordOfTemplate2(const struct_of_def *sdef, output_struct *output) type, name, type); /* match operation */ - def = mputprintf(def, "inline boolean match(const %s& match_value) const " - "{ return matchv(&match_value); }\n", name); + def = mputprintf(def, "inline boolean match(const %s& match_value, " + "boolean legacy = FALSE) const " + "{ return matchv(&match_value, legacy); }\n", name); /* valueof operation */ def = mputprintf(def, "%s valueof() const;\n", name); @@ -4611,8 +4759,9 @@ void defRecordOfTemplate2(const struct_of_def *sdef, output_struct *output) } /* logging functions */ - def = mputprintf(def, "inline void log_match(const %s& match_value) const " - "{ log_matchv(&match_value); }\n", name); + def = mputprintf(def, "inline void log_match(const %s& match_value, " + "boolean legacy = FALSE) const " + "{ log_matchv(&match_value, legacy); }\n", name); /* virtual helper functions */ def = mputprintf(def, diff --git a/compiler2/record_of.h b/compiler2/record_of.h index 45ec92344..ca0c1714b 100644 --- a/compiler2/record_of.h +++ b/compiler2/record_of.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/stack.hh b/compiler2/stack.hh index 17c98dd38..de35cfeca 100644 --- a/compiler2/stack.hh +++ b/compiler2/stack.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/string.cc b/compiler2/string.cc index 1917183ff..fac350757 100644 --- a/compiler2/string.cc +++ b/compiler2/string.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/string.hh b/compiler2/string.hh index 886e953e1..cc57780c1 100644 --- a/compiler2/string.hh +++ b/compiler2/string.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/subtype.cc b/compiler2/subtype.cc index 60f81ae5b..bb448b307 100644 --- a/compiler2/subtype.cc +++ b/compiler2/subtype.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -17,6 +17,7 @@ #include "ttcn3/Templatestuff.hh" #include "ttcn3/PatternString.hh" #include "Constraint.hh" +#include "../common/JSON_Tokenizer.hh" #include <limits.h> @@ -3040,4 +3041,267 @@ void SubType::generate_code(output_struct &) if (checked!=STC_YES) FATAL_ERROR("SubType::generate_code()"); } +void SubType::generate_json_schema(JSON_Tokenizer& json, bool allow_special_float /* = true */) +{ + bool has_value_list = false; + size_t nof_ranges = 0; + for (size_t i = 0; i < parsed->size(); ++i) { + SubTypeParse *parse = (*parsed)[i]; + switch (parse->get_selection()) { + case SubTypeParse::STP_SINGLE: + // single values will be added later, all at once + has_value_list = true; + break; + case SubTypeParse::STP_RANGE: + ++nof_ranges; + break; + case SubTypeParse::STP_LENGTH: { + Ttcn::LengthRestriction* len_res = parse->Length(); + Value* min_val = len_res->get_is_range() ? len_res->get_lower_value() : + len_res->get_single_value(); + Value* max_val = len_res->get_is_range() ? len_res->get_upper_value() : + len_res->get_single_value(); + const char* json_min = NULL; + const char* json_max = NULL; + switch (subtype) { + case ST_RECORDOF: + case ST_SETOF: + // use minItems and maxItems for record of/set of + json_min = "minItems"; + json_max = "maxItems"; + break; + case ST_BITSTRING: + case ST_HEXSTRING: + case ST_OCTETSTRING: + case ST_CHARSTRING: + case ST_UNIVERSAL_CHARSTRING: + // use minLength and maxLength for string types + json_min = "minLength"; + json_max = "maxLength"; + break; + default: + FATAL_ERROR("SubType::generate_json_schema - length %d", subtype); + } + json.put_next_token(JSON_TOKEN_NAME, json_min); + min_val->generate_json_value(json); + if (max_val != NULL) { + json.put_next_token(JSON_TOKEN_NAME, json_max); + max_val->generate_json_value(json); + } + break; } + case SubTypeParse::STP_PATTERN: { + json.put_next_token(JSON_TOKEN_NAME, "pattern"); + char* json_pattern = parse->Pattern()->convert_to_json(); + json.put_next_token(JSON_TOKEN_STRING, json_pattern); + Free(json_pattern); + break; } + default: + break; + } + } + + bool need_anyOf = (subtype == ST_INTEGER || subtype == ST_FLOAT) && + (nof_ranges + (has_value_list ? 1 : 0) > 1); + if (need_anyOf) { + // there are multiple value range/value list restrictions, + // they need to be grouped in an 'anyOf' structure + json.put_next_token(JSON_TOKEN_NAME, "anyOf"); + json.put_next_token(JSON_TOKEN_ARRAY_START); + json.put_next_token(JSON_TOKEN_OBJECT_START); + } + if (has_value_list) { + // generate the value list into an enum + json.put_next_token(JSON_TOKEN_NAME, "enum"); + json.put_next_token(JSON_TOKEN_ARRAY_START); + generate_json_schema_value_list(json, allow_special_float); + json.put_next_token(JSON_TOKEN_ARRAY_END); + } + if (need_anyOf && has_value_list) { + // end of the value list and beginning of the first value range + json.put_next_token(JSON_TOKEN_OBJECT_END); + json.put_next_token(JSON_TOKEN_OBJECT_START); + } + if (nof_ranges > 0) { + switch (subtype) { + case ST_INTEGER: + case ST_FLOAT: + generate_json_schema_number_ranges(json); + break; + case ST_CHARSTRING: + case ST_UNIVERSAL_CHARSTRING: { + // merge all string range restrictions into one JSON schema pattern + char* pattern_str = mcopystrn("\"^[", 3); + pattern_str = generate_json_schema_string_ranges(pattern_str); + pattern_str = mputstrn(pattern_str, "]*$\"", 4); + json.put_next_token(JSON_TOKEN_NAME, "pattern"); + json.put_next_token(JSON_TOKEN_STRING, pattern_str); + Free(pattern_str); + break; } + default: + FATAL_ERROR("SubType::generate_json_schema - range %d", subtype); + } + } + if (need_anyOf) { + // end of the 'anyOf' structure + json.put_next_token(JSON_TOKEN_OBJECT_END); + json.put_next_token(JSON_TOKEN_ARRAY_END); + } +} + +void SubType::generate_json_schema_value_list(JSON_Tokenizer& json, bool allow_special_float) +{ + for (size_t i = 0; i < parsed->size(); ++i) { + SubTypeParse *parse = (*parsed)[i]; + if (parse->get_selection() == SubTypeParse::STP_SINGLE) { + if (parse->Single()->get_valuetype() == Value::V_REFD) { + Common::Assignment* ass = parse->Single()->get_reference()->get_refd_assignment(); + if (ass->get_asstype() == Common::Assignment::A_TYPE) { + // it's a reference to another subtype, insert its value list here + ass->get_Type()->get_sub_type()->generate_json_schema_value_list(json, allow_special_float); + } + } + else { + parse->Single()->generate_json_value(json, allow_special_float); + } + } + } +} + +bool SubType::generate_json_schema_number_ranges(JSON_Tokenizer& json, bool first /* = true */) +{ + for (size_t i = 0; i < parsed->size(); ++i) { + SubTypeParse *parse = (*parsed)[i]; + if (parse->get_selection() == SubTypeParse::STP_SINGLE) { + if (parse->Single()->get_valuetype() == Value::V_REFD) { + Common::Assignment* ass = parse->Single()->get_reference()->get_refd_assignment(); + if (ass->get_asstype() == Common::Assignment::A_TYPE) { + // it's a reference to another subtype, insert its value ranges here + first = ass->get_Type()->get_sub_type()->generate_json_schema_number_ranges(json, first); + } + } + } + else if (parse->get_selection() == SubTypeParse::STP_RANGE) { + if (!first) { + // the ranges are in an 'anyOf' structure, they need to be placed in an object + json.put_next_token(JSON_TOKEN_OBJECT_END); + json.put_next_token(JSON_TOKEN_OBJECT_START); + } + else { + first = false; + } + // add the minimum and/or maximum values as numbers + if (parse->Min() != NULL) { + json.put_next_token(JSON_TOKEN_NAME, "minimum"); + parse->Min()->generate_json_value(json); + json.put_next_token(JSON_TOKEN_NAME, "exclusiveMinimum"); + json.put_next_token(parse->MinExclusive() ? JSON_TOKEN_LITERAL_TRUE : JSON_TOKEN_LITERAL_FALSE); + } + if (parse->Max() != NULL) { + json.put_next_token(JSON_TOKEN_NAME, "maximum"); + parse->Max()->generate_json_value(json); + json.put_next_token(JSON_TOKEN_NAME, "exclusiveMaximum"); + json.put_next_token(parse->MaxExclusive() ? JSON_TOKEN_LITERAL_TRUE : JSON_TOKEN_LITERAL_FALSE); + } + } + } + return first; +} + +char* SubType::generate_json_schema_string_ranges(char* pattern_str) +{ + for (size_t i = 0; i < parsed->size(); ++i) { + SubTypeParse *parse = (*parsed)[i]; + if (parse->get_selection() == SubTypeParse::STP_SINGLE) { + if (parse->Single()->get_valuetype() == Value::V_REFD) { + Common::Assignment* ass = parse->Single()->get_reference()->get_refd_assignment(); + if (ass->get_asstype() == Common::Assignment::A_TYPE) { + // it's a reference to another subtype, insert its string ranges here + pattern_str = ass->get_Type()->get_sub_type()->generate_json_schema_string_ranges(pattern_str); + } + } + } + else if (parse->get_selection() == SubTypeParse::STP_RANGE) { + // insert the string range into the pattern string + string lower_str = (subtype == ST_CHARSTRING) ? parse->Min()->get_val_str() : + ustring_to_uft8(parse->Min()->get_val_ustr()); + string upper_str = (subtype == ST_CHARSTRING) ? parse->Max()->get_val_str() : + ustring_to_uft8(parse->Max()->get_val_ustr()); + pattern_str = mputprintf(pattern_str, "%s-%s", lower_str.c_str(), upper_str.c_str()); + } + } + return pattern_str; +} + +void SubType::generate_json_schema_float(JSON_Tokenizer& json) +{ + bool has_nan = float_st->is_element(make_ttcn3float(REAL_NAN)); + bool has_pos_inf = float_st->is_element(make_ttcn3float(REAL_INFINITY)); + bool has_neg_inf = float_st->is_element(make_ttcn3float(-REAL_INFINITY)); + bool has_special = has_nan || has_pos_inf || has_neg_inf; + bool has_number = false; + for (size_t i = 0; i < parsed->size() && !has_number; ++i) { + // go through the restrictions and check if at least one number is allowed + SubTypeParse *parse = (*parsed)[i]; + switch (parse->get_selection()) { + case SubTypeParse::STP_SINGLE: { + Real r = parse->Single()->get_val_Real(); + if (r == r && r != REAL_INFINITY && r != -REAL_INFINITY) { + // a single value other than NaN, INF and -INF is a number + has_number = true; + } + break; } + case SubTypeParse::STP_RANGE: { + if (parse->Min() != NULL) { + if (parse->Min()->get_val_Real() != REAL_INFINITY) { + // a minimum value other than INF means a number is allowed + has_number = true; + } + } + if (parse->Max() != NULL) { + // a maximum value other than -INF means a number is allowed + if (parse->Max()->get_val_Real() != -REAL_INFINITY) { + has_number = true; + } + } + break; } + default: + break; + } + } + if (has_number && has_special) { + json.put_next_token(JSON_TOKEN_NAME, "anyOf"); + json.put_next_token(JSON_TOKEN_ARRAY_START); + json.put_next_token(JSON_TOKEN_OBJECT_START); + } + if (has_number) { + json.put_next_token(JSON_TOKEN_NAME, "type"); + json.put_next_token(JSON_TOKEN_STRING, "\"number\""); + // generate the restrictions' schema elements here + // (the 2nd parameter makes sure that NaN, INF and -INF are ignored) + generate_json_schema(json, false); + } + if (has_number && has_special) { + json.put_next_token(JSON_TOKEN_OBJECT_END); + json.put_next_token(JSON_TOKEN_OBJECT_START); + } + if (has_special) { + json.put_next_token(JSON_TOKEN_NAME, "enum"); + json.put_next_token(JSON_TOKEN_ARRAY_START); + if (has_nan) { + json.put_next_token(JSON_TOKEN_STRING, "\"not_a_number\""); + } + if (has_pos_inf) { + json.put_next_token(JSON_TOKEN_STRING, "\"infinity\""); + } + if (has_neg_inf) { + json.put_next_token(JSON_TOKEN_STRING, "\"-infinity\""); + } + json.put_next_token(JSON_TOKEN_ARRAY_END); + } + if (has_number && has_special) { + json.put_next_token(JSON_TOKEN_OBJECT_END); + json.put_next_token(JSON_TOKEN_ARRAY_END); + } +} + } // namespace Common diff --git a/compiler2/subtype.hh b/compiler2/subtype.hh index f7fde1aa5..c6fb5a15a 100644 --- a/compiler2/subtype.hh +++ b/compiler2/subtype.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -18,6 +18,8 @@ #include "subtypestuff.hh" +class JSON_Tokenizer; + namespace Ttcn { class LengthRestriction; class Template; @@ -255,6 +257,45 @@ public: /// No-op. void generate_code(output_struct &); + + /** Returns true if there are JSON schema elements to be generated for this subtype */ + boolean has_json_schema() const { return parsed != NULL; } + + /** Generates the JSON schema segment for the type restrictions. + * + * The float special values NaN, INF and -INF are not included in the code + * generated for float value list restrictions if the 2nd parameter is false. */ + void generate_json_schema(JSON_Tokenizer& json, bool allow_special_float = true); + + /** Generates the JSON values inside the subtype's value list restriction. + * Recursive (it also inserts the values of referenced subtypes into the list). + * + * The float special values NaN, INF and -INF are not included in the code + * generated for float value lists if the 2nd parameter is false. */ + void generate_json_schema_value_list(JSON_Tokenizer& json, bool allow_special_float); + + /** Generates the JSON schema elements for integer and float range restrictions. + * If there are multiple restrictions, then they are placed in an 'anyOf' structure, + * each one in a JSON object. The function also inserts the separators between these + * objects (the 2nd parameter indicates whether the first range has been inserted). + * + * Recursive (it also inserts the value ranges of referenced subtypes). + * @return true, if the first value range has not been inserted yet */ + bool generate_json_schema_number_ranges(JSON_Tokenizer& json, bool first = true); + + /** Generates the segments of the JSON schema string pattern (regex) used for + * representing the range restrictions of charstrings and universal charstrings. + * A value range (inside a regex set expression) is generated for each TTCN-3 + * range restriction. + * + * Recursive (it also inserts the string ranges of referenced subtypes). */ + char* generate_json_schema_string_ranges(char* pattern_str); + + /** Generates the JSON schema segment of the float type this subtype belongs to + * (the schema segment for the whole type is generated, not only the type's + * restrictions). + * This replaces the schema segment generated by Type::generate_json_schema().*/ + void generate_json_schema_float(JSON_Tokenizer& json); void dump(unsigned level) const; diff --git a/compiler2/subtypestuff.cc b/compiler2/subtypestuff.cc index bc18d923b..ed38eb673 100644 --- a/compiler2/subtypestuff.cc +++ b/compiler2/subtypestuff.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/subtypestuff.hh b/compiler2/subtypestuff.hh index 473213e7b..f6f94c5a8 100644 --- a/compiler2/subtypestuff.hh +++ b/compiler2/subtypestuff.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/tcov.xsd b/compiler2/tcov.xsd index f8b0b24d4..99b71736d 100644 --- a/compiler2/tcov.xsd +++ b/compiler2/tcov.xsd @@ -1,6 +1,6 @@ <?xml version="1.0"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/compiler2/tcov.xsl b/compiler2/tcov.xsl index cd26bc71a..4c55ea16b 100644 --- a/compiler2/tcov.xsl +++ b/compiler2/tcov.xsl @@ -1,6 +1,6 @@ <?xml version="1.0"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/compiler2/tcov2lcov.cc b/compiler2/tcov2lcov.cc index 15b26cef6..e3c98a8c7 100644 --- a/compiler2/tcov2lcov.cc +++ b/compiler2/tcov2lcov.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/tcov2lcov.hh b/compiler2/tcov2lcov.hh index 33ec9799a..684762045 100644 --- a/compiler2/tcov2lcov.hh +++ b/compiler2/tcov2lcov.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/titanver b/compiler2/titanver index 012358c85..4bdd48caf 100644 --- a/compiler2/titanver +++ b/compiler2/titanver @@ -1,6 +1,6 @@ #!/bin/sh ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/compiler2/ttcn3/AST_ttcn3.cc b/compiler2/ttcn3/AST_ttcn3.cc index 8449e696b..efe3c18a4 100644 --- a/compiler2/ttcn3/AST_ttcn3.cc +++ b/compiler2/ttcn3/AST_ttcn3.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -178,6 +178,25 @@ namespace Ttcn { str += "<unknown sub-reference>"; } } + + void FieldOrArrayRef::set_field_name_to_lowercase() + { + if (ref_type != FIELD_REF) FATAL_ERROR("FieldOrArrayRef::set_field_name_to_lowercase()"); + string new_name = u.id->get_name(); + if (isupper(new_name[0])) { + new_name[0] = tolower(new_name[0]); + if (new_name[new_name.size() - 1] == '_') { + // an underscore is inserted at the end of the field name if it's + // a basic type's name (since it would conflict with the class generated + // for that type) + // remove the underscore, it won't conflict with anything if its name + // starts with a lowercase letter + new_name.replace(new_name.size() - 1, 1, ""); + } + delete u.id; + u.id = new Identifier(Identifier::ID_NAME, new_name); + } + } // ================================= // ===== FieldOrArrayRefs @@ -706,7 +725,9 @@ namespace Ttcn { expr->expr = mputprintf(expr->expr, "%s", tmp_generalid_str); } else { - expr->expr = mputprintf(expr->expr, "%s.%s()", ass_id_str, isbound ? "is_bound":"is_present"); + expr->expr = mputprintf(expr->expr, "%s.%s(%s)", ass_id_str, + isbound ? "is_bound":"is_present", + (!isbound && is_template && omit_in_value_list) ? "TRUE" : ""); } } @@ -942,28 +963,34 @@ namespace Ttcn { bool is_template; switch (ass->get_asstype()) { + case Common::Assignment::A_TEMPLATE: + if (NULL == ass->get_FormalParList()) { + // not a parameterized template + is_template = true; + break; + } + // else fall through case Common::Assignment::A_CONST: case Common::Assignment::A_EXT_CONST: case Common::Assignment::A_ALTSTEP: case Common::Assignment::A_TESTCASE: case Common::Assignment::A_FUNCTION: case Common::Assignment::A_EXT_FUNCTION: + case Common::Assignment::A_FUNCTION_RVAL: + case Common::Assignment::A_EXT_FUNCTION_RVAL: + case Common::Assignment::A_FUNCTION_RTEMP: + case Common::Assignment::A_EXT_FUNCTION_RTEMP: generate_code(expr); return; case Common::Assignment::A_MODULEPAR: case Common::Assignment::A_VAR: - case Common::Assignment::A_FUNCTION_RVAL: - case Common::Assignment::A_EXT_FUNCTION_RVAL: case Common::Assignment::A_PAR_VAL_IN: case Common::Assignment::A_PAR_VAL_OUT: case Common::Assignment::A_PAR_VAL_INOUT: { is_template = false; break; } case Common::Assignment::A_MODULEPAR_TEMP: - case Common::Assignment::A_TEMPLATE: case Common::Assignment::A_VAR_TEMPLATE: - case Common::Assignment::A_FUNCTION_RTEMP: - case Common::Assignment::A_EXT_FUNCTION_RTEMP: case Common::Assignment::A_PAR_TEMPL_IN: case Common::Assignment::A_PAR_TEMPL_OUT: case Common::Assignment::A_PAR_TEMPL_INOUT: { @@ -1632,10 +1659,12 @@ namespace Ttcn { if (!covered) im->generate_code(target); } if (base_lib_needed) { - // if no real import was found the base library definitions has to be - // #include'd - target->header.includes = mputstr(target->header.includes, - "#include <TTCN3.hh>\n"); + // if no real import was found the base library definitions have to be + // #include'd (also, make sure this is the first include) + char* temp = target->header.includes; + target->header.includes = mcopystr("#include <TTCN3.hh>\n"); + target->header.includes = mputstr(target->header.includes, temp); + Free(temp); } } @@ -3585,6 +3614,10 @@ namespace Ttcn { "modulepar_%s.set_param(param);\n" "return TRUE;\n" "} else ", dispname, name); + target->functions.get_param = mputprintf(target->functions.get_param, + "if (!strcmp(par_name, \"%s\")) {\n" + "return modulepar_%s.get_param(param_name);\n" + "} else ", dispname, name); if (target->functions.log_param) { // this is not the first modulepar @@ -3753,6 +3786,10 @@ namespace Ttcn { "modulepar_%s.set_param(param);\n" "return TRUE;\n" "} else ", dispname, name); + target->functions.get_param = mputprintf(target->functions.get_param, + "if (!strcmp(par_name, \"%s\")) {\n" + "return modulepar_%s.get_param(param_name);\n" + "} else ", dispname, name); if (target->functions.log_param) { // this is not the first modulepar @@ -3922,7 +3959,7 @@ namespace Ttcn { Error_Context ec(this, "While checking template restriction `%s'", Template::get_restriction_name(template_restriction)); gen_restriction_check = - body->chk_restriction("template definition", template_restriction); + body->chk_restriction("template definition", template_restriction, body); if (fp_list && template_restriction!=TR_PRESENT) { size_t nof_fps = fp_list->get_nof_fps(); for (size_t i=0; i<nof_fps; i++) { @@ -4656,7 +4693,7 @@ namespace Ttcn { OMIT_ALLOWED, ANY_OR_OMIT_ALLOWED, SUB_CHK, IMPLICIT_OMIT, 0); gen_restriction_check = initial_value->chk_restriction("template variable definition", - template_restriction); + template_restriction, initial_value); if (!semantic_check_only) { initial_value->set_genname_recursive(get_genname()); initial_value->set_code_section(GovernedSimple::CS_INLINE); @@ -7787,7 +7824,8 @@ namespace Ttcn { if (template_restriction!=TR_NONE) { bool needs_runtime_check = ret_val->get_TemplateInstance()->chk_restriction( - "template formal parameter", template_restriction); + "template formal parameter", template_restriction, + ret_val->get_TemplateInstance()); if (needs_runtime_check) ret_val->set_gen_restriction_check(template_restriction); } @@ -7887,7 +7925,7 @@ namespace Ttcn { case A_PAR_TEMPL_OUT: case A_PAR_TEMPL_INOUT: { FormalPar* fp = dynamic_cast<FormalPar*>(ass); - if (!fp) FATAL_ERROR("Template::chk_restriction_refd()"); + if (!fp) FATAL_ERROR("FormalPar::chk_actual_par_by_ref()"); refd_tr = fp->get_template_restriction(); } break; default: diff --git a/compiler2/ttcn3/AST_ttcn3.hh b/compiler2/ttcn3/AST_ttcn3.hh index 06a57a6a9..119f4a3ee 100644 --- a/compiler2/ttcn3/AST_ttcn3.hh +++ b/compiler2/ttcn3/AST_ttcn3.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -209,6 +209,12 @@ namespace Ttcn { Value* get_val() const; /** Appends the string representation of the sub-reference to \a str. */ void append_stringRepr(string& str) const; + /** Sets the first letter in the name of the field to lowercase if it's an + * uppercase letter. + * Used on open types (the name of their alternatives can be given with both + * an uppercase or a lowercase first letter, and the generated code will need + * to use the lowercase version). */ + void set_field_name_to_lowercase(); }; /** A vector of FieldOrArrayRef objects */ diff --git a/compiler2/ttcn3/ArrayDimensions.cc b/compiler2/ttcn3/ArrayDimensions.cc index b971b2b4d..d8cddb134 100644 --- a/compiler2/ttcn3/ArrayDimensions.cc +++ b/compiler2/ttcn3/ArrayDimensions.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/ttcn3/ArrayDimensions.hh b/compiler2/ttcn3/ArrayDimensions.hh index d3f896aa2..9a6cf7b95 100644 --- a/compiler2/ttcn3/ArrayDimensions.hh +++ b/compiler2/ttcn3/ArrayDimensions.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/ttcn3/Attributes.cc b/compiler2/ttcn3/Attributes.cc index c63f0444f..8465ed877 100644 --- a/compiler2/ttcn3/Attributes.cc +++ b/compiler2/ttcn3/Attributes.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -1205,14 +1205,14 @@ namespace Ttcn { case SingleWithAttrib::AT_VARIANT: { // Ignore JSON variants, these should not produce warnings const string& spec = act_single->get_attribSpec().get_spec(); - size_t i = 0; - while (i < spec.size()) { - if (spec[i] != ' ' && spec[i] != '\t') { + size_t i2 = 0; + while (i2 < spec.size()) { + if (spec[i2] != ' ' && spec[i2] != '\t') { break; } - ++i; + ++i2; } - if (i == spec.size() || spec.find("JSON", i) != i) { + if (i2 == spec.size() || spec.find("JSON", i2) != i2) { self_has_variant = true; } break; } diff --git a/compiler2/ttcn3/Attributes.hh b/compiler2/ttcn3/Attributes.hh index 780786c36..e070d9c98 100644 --- a/compiler2/ttcn3/Attributes.hh +++ b/compiler2/ttcn3/Attributes.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/ttcn3/BerAST.cc b/compiler2/ttcn3/BerAST.cc index 4d1bfa87e..7c503ef9e 100644 --- a/compiler2/ttcn3/BerAST.cc +++ b/compiler2/ttcn3/BerAST.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/ttcn3/BerAST.hh b/compiler2/ttcn3/BerAST.hh index c4e8fa7bf..fe151bc5b 100644 --- a/compiler2/ttcn3/BerAST.hh +++ b/compiler2/ttcn3/BerAST.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/ttcn3/ILT.cc b/compiler2/ttcn3/ILT.cc index 7ab2076be..043afa758 100644 --- a/compiler2/ttcn3/ILT.cc +++ b/compiler2/ttcn3/ILT.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/ttcn3/ILT.hh b/compiler2/ttcn3/ILT.hh index 36dfc69b9..4d90e3996 100644 --- a/compiler2/ttcn3/ILT.hh +++ b/compiler2/ttcn3/ILT.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/ttcn3/JsonAST.cc b/compiler2/ttcn3/JsonAST.cc index d7bc09200..b3ead3a6e 100644 --- a/compiler2/ttcn3/JsonAST.cc +++ b/compiler2/ttcn3/JsonAST.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -10,12 +10,25 @@ #include <cstddef> #include <cstdio> +void JsonSchemaExtension::init(const char* p_key, const char* p_value) +{ + key = mcopystr(p_key); + value = mcopystr(p_value); +} + +JsonSchemaExtension::~JsonSchemaExtension() +{ + Free(key); + Free(value); +} + void JsonAST::init_JsonAST() { omit_as_null = false; alias = NULL; as_value = false; default_value = NULL; + metainfo_unbound = false; } JsonAST::JsonAST(const JsonAST *other_val) @@ -26,6 +39,10 @@ JsonAST::JsonAST(const JsonAST *other_val) alias = (NULL != other_val->alias) ? mcopystr(other_val->alias) : NULL; as_value = other_val->as_value; default_value = (NULL != other_val->default_value) ? mcopystr(other_val->default_value) : NULL; + for (size_t i = 0; i < other_val->schema_extensions.size(); ++i) { + schema_extensions.add(new JsonSchemaExtension(*other_val->schema_extensions[i])); + } + metainfo_unbound = other_val->metainfo_unbound; } } @@ -33,6 +50,10 @@ JsonAST::~JsonAST() { Free(alias); Free(default_value); + for (size_t i = 0; i < schema_extensions.size(); ++i) { + delete schema_extensions[i]; + } + schema_extensions.clear(); } void JsonAST::print_JsonAST() const @@ -52,4 +73,13 @@ void JsonAST::print_JsonAST() const if (default_value) { printf("Default value: %s\n\r", default_value); } + if (0 != schema_extensions.size()) { + printf("Extensions:"); + for (size_t i = 0; i < schema_extensions.size(); ++i) { + printf(" \"%s\" : \"%s\"", schema_extensions[i]->key, schema_extensions[i]->value); + } + } + if (metainfo_unbound) { + printf("Metainfo for unbound field(s)\n\r"); + } } diff --git a/compiler2/ttcn3/JsonAST.hh b/compiler2/ttcn3/JsonAST.hh index 91748d4b7..fe24901df 100644 --- a/compiler2/ttcn3/JsonAST.hh +++ b/compiler2/ttcn3/JsonAST.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -9,6 +9,19 @@ #define JSONAST_HH_ #include "../datatypes.h" +#include "../vector.hh" + +class JsonSchemaExtension { +private: + void init(const char* p_key, const char* p_value); +public: + char* key; + char* value; + + JsonSchemaExtension(const char* p_key, const char* p_value) { init(p_key, p_value); } + JsonSchemaExtension(const JsonSchemaExtension& x) { init(x.key, x.value); } + ~JsonSchemaExtension(); +}; class JsonAST { private: @@ -20,6 +33,8 @@ class JsonAST { char* alias; boolean as_value; char* default_value; + vector<JsonSchemaExtension> schema_extensions; + boolean metainfo_unbound; JsonAST() { init_JsonAST(); } JsonAST(const JsonAST *other_val); diff --git a/compiler2/ttcn3/Makefile b/compiler2/ttcn3/Makefile index cdac82771..3c8b3111c 100644 --- a/compiler2/ttcn3/Makefile +++ b/compiler2/ttcn3/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/compiler2/ttcn3/PatternString.cc b/compiler2/ttcn3/PatternString.cc index 668fc4e25..277653453 100644 --- a/compiler2/ttcn3/PatternString.cc +++ b/compiler2/ttcn3/PatternString.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -9,6 +9,7 @@ #include "../../common/pattern.hh" #include "../CompilerError.hh" #include "../Code.hh" +#include "../../common/JSON_Tokenizer.hh" #include "TtcnTemplate.hh" @@ -491,6 +492,55 @@ namespace Ttcn { new string(get_full_str())); return cstr_value; } + + char* PatternString::convert_to_json() + { + string pstr = get_value()->get_val_str(); + + // convert the pattern into an extended regular expression + char* regex_str = NULL; + if (CSTR_PATTERN == pattern_type) { + regex_str = TTCN_pattern_to_regexp(pstr.c_str()); + } + else { // USTR_PATTERN + // handle the unicode characters in \q{g,p,r,c} format + string utf8str; + for (size_t i = 0; i < pstr.size(); ++i) { + if ('\\' == pstr[i]) { + if ('q' == pstr[i + 1]) { + // extract the unicode character + unsigned int group, plane, row, cell; + i = pstr.find('{', i + 1); + sscanf(pstr.c_str() + i + 1, "%u", &group); + i = pstr.find(',', i + 1); + sscanf(pstr.c_str() + i + 1, "%u", &plane); + i = pstr.find(',', i + 1); + sscanf(pstr.c_str() + i + 1, "%u", &row); + i = pstr.find(',', i + 1); + sscanf(pstr.c_str() + i + 1, "%u", &cell); + i = pstr.find('}', i + 1); + + // convert the character to UTF-8 format + utf8str += ustring_to_uft8(ustring(group, plane, row, cell)); + continue; + } + else if ('\\' == pstr[i + 1]) { + // must be handled separately, so we don't confuse \\q with \q + ++i; + utf8str += '\\'; + } + } + utf8str += pstr[i]; + } + + // use the pattern converter for charstrings, the pattern should be in UTF-8 + // format now (setting the 2nd parameter will make sure that no error + // messages are displayed for extended ASCII characters) + regex_str = TTCN_pattern_to_regexp(utf8str.c_str(), true); + } + + return convert_to_json_string(regex_str); + } } // namespace Ttcn diff --git a/compiler2/ttcn3/PatternString.hh b/compiler2/ttcn3/PatternString.hh index db99d7911..5a35dd1a9 100644 --- a/compiler2/ttcn3/PatternString.hh +++ b/compiler2/ttcn3/PatternString.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -79,6 +79,9 @@ namespace Ttcn { /** Called by Value::get_value_refd_last() */ Value* get_value(); + + /** Converts this string pattern into a JSON schema string pattern. */ + char* convert_to_json(); }; } // namespace Ttcn diff --git a/compiler2/ttcn3/RawAST.cc b/compiler2/ttcn3/RawAST.cc index 47ec94d8d..7f1699b61 100644 --- a/compiler2/ttcn3/RawAST.cc +++ b/compiler2/ttcn3/RawAST.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -56,6 +56,7 @@ RawAST::RawAST(RawAST *other,bool int_type){ topleveleind=other->topleveleind; toplevel.bitorder=other->toplevel.bitorder; length_restrition=other->length_restrition; + intx = other->intx; } else init_rawast(int_type); } @@ -94,7 +95,7 @@ void RawAST::init_rawast(bool int_type){ presence.nElements=0; presence.keyList=NULL; topleveleind=0; - + intx = false; } RawAST::~RawAST(){ @@ -183,7 +184,7 @@ void RawAST::print_RawAST(){ printf("\n\r"); } } - + printf("%sIntX encoding\n\r", intx ? "" : "not "); } void copy_rawAST_to_struct(RawAST *from, raw_attrib_struct *to){ @@ -291,5 +292,6 @@ int compare_raw_attrib(RawAST *a, RawAST *b){ a->padding!=b->padding || a->ptroffset!=b->ptroffset || a->repeatable!=b->repeatable || - a->unit!=b->unit; + a->unit!=b->unit || + a->intx != b->intx; } diff --git a/compiler2/ttcn3/RawAST.hh b/compiler2/ttcn3/RawAST.hh index ca0837af9..d1e3e2678 100644 --- a/compiler2/ttcn3/RawAST.hh +++ b/compiler2/ttcn3/RawAST.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -104,6 +104,7 @@ public: int topleveleind; rawAST_toplevel toplevel; /**< Toplevel attributes */ int length_restrition; + bool intx; /**< IntX encoding for integers */ /** Default constructor. * Calls \c init_rawast(false). * \todo should be merged with the next one */ diff --git a/compiler2/ttcn3/Statement.cc b/compiler2/ttcn3/Statement.cc index 02d28a669..b6f201c73 100644 --- a/compiler2/ttcn3/Statement.cc +++ b/compiler2/ttcn3/Statement.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -675,8 +675,9 @@ namespace Ttcn { delete fau_refd.ap_list2; break; case S_STRING2TTCN: - delete str2ttcn.val; - delete str2ttcn.ref; + case S_INT2ENUM: + delete convert_op.val; + delete convert_op.ref; break; default: FATAL_ERROR("Statement::clean_up()"); @@ -1324,11 +1325,21 @@ namespace Ttcn { } } - Statement::Statement(statementtype_t p_st, Value* p_val, Reference* p_ref): statementtype(p_st), my_sb(0) + Statement::Statement(statementtype_t p_st, Value* p_val, Reference* p_ref) + : statementtype(p_st), my_sb(0) { - if (p_st!=S_STRING2TTCN || p_val==NULL || p_ref==NULL) FATAL_ERROR("Statement::Statement()"); - str2ttcn.val = p_val; - str2ttcn.ref = p_ref; + switch (statementtype) { + case S_STRING2TTCN: + case S_INT2ENUM: + if (p_val==NULL || p_ref==NULL) { + FATAL_ERROR("Statement::Statement()"); + } + convert_op.val = p_val; + convert_op.ref = p_ref; + break; + default: + FATAL_ERROR("Statement::Statement()"); + } } Statement::~Statement() @@ -1455,6 +1466,7 @@ namespace Ttcn { case S_TESTCASE_INSTANCE_REFD: return "execute"; case S_STRING2TTCN: return "string2ttcn"; + case S_INT2ENUM: return "int2enum"; case S_START_PROFILER: return "@profiler.start"; case S_STOP_PROFILER: return "@profiler.stop"; default: @@ -1745,8 +1757,9 @@ namespace Ttcn { fau_refd.t_list1->set_my_scope(p_scope); break; case S_STRING2TTCN: - str2ttcn.val->set_my_scope(p_scope); - str2ttcn.ref->set_my_scope(p_scope); + case S_INT2ENUM: + convert_op.val->set_my_scope(p_scope); + convert_op.ref->set_my_scope(p_scope); break; default: FATAL_ERROR("Statement::set_my_scope()"); @@ -1991,8 +2004,9 @@ namespace Ttcn { fau_refd.t_list1->set_fullname(p_fullname+".<parameters>"); break; case S_STRING2TTCN: - str2ttcn.val->set_fullname(p_fullname+".ti"); - str2ttcn.ref->set_fullname(p_fullname+".ref"); + case S_INT2ENUM: + convert_op.val->set_fullname(p_fullname+".ti"); + convert_op.ref->set_fullname(p_fullname+".ref"); break; default: FATAL_ERROR("Statement::set_fullname()"); @@ -2268,6 +2282,7 @@ namespace Ttcn { case S_TESTCASE_INSTANCE_REFD: case S_START_PROFILER: case S_STOP_PROFILER: + case S_INT2ENUM: return false; case S_ALT: case S_INTERLEAVE: @@ -2508,6 +2523,9 @@ namespace Ttcn { case S_STRING2TTCN: chk_string2ttcn(); break; + case S_INT2ENUM: + chk_int2enum(); + break; case S_START_PROFILER: case S_STOP_PROFILER: // do nothing @@ -2520,9 +2538,9 @@ namespace Ttcn { void Statement::chk_string2ttcn() { Error_Context cntxt(this, "In string2ttcn() statement"); - str2ttcn.val->chk_expr_type(Type::T_CSTR, "charstring", Type::EXPECTED_DYNAMIC_VALUE); + convert_op.val->chk_expr_type(Type::T_CSTR, "charstring", Type::EXPECTED_DYNAMIC_VALUE); /// - Common::Assignment* refd_ass = str2ttcn.ref->get_refd_assignment(); + Common::Assignment* refd_ass = convert_op.ref->get_refd_assignment(); if (refd_ass==NULL) { error("Could not determine the assignment for second parameter"); goto error; @@ -2530,7 +2548,7 @@ namespace Ttcn { switch (refd_ass->get_asstype()) { case Definition::A_PAR_VAL_IN: case Definition::A_PAR_TEMPL_IN: - refd_ass->use_as_lvalue(*str2ttcn.ref); + refd_ass->use_as_lvalue(*convert_op.ref); case Definition::A_VAR: case Definition::A_VAR_TEMPLATE: case Definition::A_PAR_VAL_OUT: @@ -2540,16 +2558,38 @@ namespace Ttcn { // valid assignment types break; default: - str2ttcn.ref->error("Reference to '%s' cannot be used as the second parameter", refd_ass->get_assname()); + convert_op.ref->error("Reference to '%s' cannot be used as the second parameter", refd_ass->get_assname()); goto error; } return; error: - delete str2ttcn.val; - delete str2ttcn.ref; + delete convert_op.val; + delete convert_op.ref; statementtype = S_ERROR; } - + + void Statement::chk_int2enum() + { + Error_Context cntxt(this, "In int2enum() statement"); + convert_op.val->chk_expr_type(Type::T_INT, "integer", Type::EXPECTED_DYNAMIC_VALUE); + /// + Common::Assignment* refd_ass = convert_op.ref->get_refd_assignment(); + if (refd_ass==NULL) { + error("Could not determine the assignment for second parameter"); + goto error; + } + if (Type::T_ENUM_T != convert_op.ref->chk_variable_ref()->get_type_refd_last()->get_typetype_ttcn3()) { + convert_op.ref->error("A reference to variable or value parameter of " + "type enumerated was expected"); + goto error; + } + return; + error: + delete convert_op.val; + delete convert_op.ref; + statementtype = S_ERROR; + } + void Statement::chk_allowed_interleave() { switch (statementtype) { @@ -3073,7 +3113,7 @@ error: if (!dfb) FATAL_ERROR("Statement::chk_return()"); returnexpr.gen_restriction_check = returnexpr.t->chk_restriction("return template", - dfb->get_template_restriction()); + dfb->get_template_restriction(), this); } break; case Definition::A_ALTSTEP: @@ -5302,8 +5342,9 @@ error: fau_refd.ap_list2->get_par(i)->set_code_section(p_code_section); break; case S_STRING2TTCN: - str2ttcn.val->set_code_section(p_code_section); - str2ttcn.ref->set_code_section(p_code_section); + case S_INT2ENUM: + convert_op.val->set_code_section(p_code_section); + convert_op.ref->set_code_section(p_code_section); break; default: FATAL_ERROR("Statement::set_code_section()"); @@ -5485,6 +5526,9 @@ error: case S_STRING2TTCN: str=generate_code_string2ttcn(str); break; + case S_INT2ENUM: + str = generate_code_int2enum(str); + break; case S_START_PROFILER: str = mputstr(str, "ttcn3_prof.start();\n"); break; @@ -5501,11 +5545,11 @@ error: { expression_struct val_expr; Code::init_expr(&val_expr); - str2ttcn.val->generate_code_expr(&val_expr); + convert_op.val->generate_code_expr(&val_expr); expression_struct ref_expr; Code::init_expr(&ref_expr); - str2ttcn.ref->generate_code(&ref_expr); + convert_op.ref->generate_code(&ref_expr); str = mputstr(str, val_expr.preamble); str = mputstr(str, ref_expr.preamble); @@ -5520,7 +5564,52 @@ error: return str; } + + char* Statement::generate_code_int2enum(char* str) + { + expression_struct val_expr; + Code::init_expr(&val_expr); + convert_op.val->generate_code_expr(&val_expr); + + expression_struct ref_expr; + Code::init_expr(&ref_expr); + convert_op.ref->generate_code(&ref_expr); + + // check if the reference is an optional field + bool is_optional = false; + FieldOrArrayRefs* subrefs = convert_op.ref->get_subrefs(); + if (NULL != subrefs) { + Type* ref_type = convert_op.ref->get_refd_assignment()->get_Type()->get_type_refd_last(); + for (size_t i = 0; i < subrefs->get_nof_refs(); ++i) { + FieldOrArrayRef* subref = subrefs->get_ref(i); + if (FieldOrArrayRef::ARRAY_REF == subref->get_type()) { + ref_type = ref_type->get_ofType()->get_type_refd_last(); + } + else { // FIELD_REF + CompField* cf = ref_type->get_comp_byName(*subref->get_id()); + if (i == subrefs->get_nof_refs() - 1 && cf->get_is_optional()) { + is_optional = true; + } + ref_type = cf->get_type()->get_type_refd_last(); + } + } + } + str = mputstr(str, val_expr.preamble); + str = mputstr(str, ref_expr.preamble); + + str = mputprintf(str, "%s%s.int2enum(%s);\n", ref_expr.expr, + is_optional ? "()" : "", val_expr.expr); + + str = mputstr(str, val_expr.postamble); + str = mputstr(str, ref_expr.postamble); + + Code::free_expr(&val_expr); + Code::free_expr(&ref_expr); + + return str; + } + void Statement::generate_code_expr(expression_struct *expr) { switch (statementtype) { @@ -7150,6 +7239,7 @@ error: case S_STRING2TTCN: case S_START_PROFILER: case S_STOP_PROFILER: + case S_INT2ENUM: break; default: FATAL_ERROR("Statement::set_parent_path()"); @@ -7548,7 +7638,7 @@ error: template_restriction = Template::get_sub_restriction(template_restriction, ref); // check the template restriction gen_restriction_check = - templ->chk_restriction("template", template_restriction); + templ->chk_restriction("template", template_restriction, this); } char *Assignment::generate_code(char *str) @@ -9138,7 +9228,8 @@ error: if(!exprs.preamble && !exprs.postamble) { str=mputstr(str, "if("); if(!is_value) - str=mputprintf(str, "%s.match(%s)", exprs.expr, expr_name); + str=mputprintf(str, "%s.match(%s%s)", exprs.expr, expr_name, + omit_in_value_list ? ", TRUE" : ""); else str=mputprintf(str, "%s == %s", expr_name, exprs.expr); str=mputprintf(str, ") goto %s_%lu;\n", tmp_prefix, (unsigned long) idx); @@ -9150,7 +9241,8 @@ error: char *s=exprs.expr; exprs.expr=mprintf("%s_%lub = ", tmp_prefix, (unsigned long) idx); if(!is_value) - exprs.expr=mputprintf(exprs.expr, "%s.match(%s)", s, expr_name); + exprs.expr=mputprintf(exprs.expr, "%s.match(%s%s)", s, expr_name, + omit_in_value_list ? ", TRUE" : ""); else exprs.expr=mputprintf(exprs.expr, "(%s == %s)", expr_name, s); Free(s); str=Code::merge_free_expr(str, &exprs); diff --git a/compiler2/ttcn3/Statement.hh b/compiler2/ttcn3/Statement.hh index 7abce565f..139091caa 100644 --- a/compiler2/ttcn3/Statement.hh +++ b/compiler2/ttcn3/Statement.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -235,10 +235,12 @@ namespace Ttcn { /* control statement */ S_TESTCASE_INSTANCE, // testcase_inst S_TESTCASE_INSTANCE_REFD, //execute_refd - S_STRING2TTCN, // str2ttcn /* TTCN-3 Profiler statements */ S_START_PROFILER, - S_STOP_PROFILER + S_STOP_PROFILER, + /* Conversion statements */ + S_STRING2TTCN, // convert_op + S_INT2ENUM // convert_op }; enum component_t { @@ -433,7 +435,7 @@ namespace Ttcn { struct { // S_STRING2TTCN Value* val; Reference* ref; - } str2ttcn; + } convert_op; }; Statement(const Statement& p); ///< copy disabled @@ -543,7 +545,7 @@ namespace Ttcn { /** Constructor used by S_ACTIVATE_REFD */ Statement(statementtype_t p_st, Value *p_derefered_value, TemplateInstances *p_ap_list, Value *p_val); - /** Constructor used by S_STRING2TTCN */ + /** Constructor used by S_STRING2TTCN, S_INT2ENUM */ Statement(statementtype_t p_st, Value* p_val, Reference* p_ref); virtual ~Statement(); virtual Statement* clone() const; @@ -715,6 +717,7 @@ namespace Ttcn { Type *chk_conn_endpoint(Value *p_compref, Reference *p_portref, bool allow_system); void chk_string2ttcn(); + void chk_int2enum(); public: /** Sets the code section selector of all embedded values and * templates to \a p_code_section. */ @@ -802,6 +805,7 @@ namespace Ttcn { * component reference. */ static void generate_code_portref(expression_struct *expr, Reference *p_ref); + char* generate_code_int2enum(char* str); }; /** diff --git a/compiler2/ttcn3/Templatestuff.cc b/compiler2/ttcn3/Templatestuff.cc index 94af53796..535c718cd 100644 --- a/compiler2/ttcn3/Templatestuff.cc +++ b/compiler2/ttcn3/Templatestuff.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -319,6 +319,24 @@ namespace Ttcn { Node::set_my_scope(p_scope); temp->set_my_scope(p_scope); } + + void NamedTemplate::set_name_to_lowercase() + { + string new_name = name->get_name(); + if (isupper(new_name[0])) { + new_name[0] = tolower(new_name[0]); + if (new_name[new_name.size() - 1] == '_') { + // an underscore is inserted at the end of the alternative name if it's + // a basic type's name (since it would conflict with the class generated + // for that type) + // remove the underscore, it won't conflict with anything if its name + // starts with a lowercase letter + new_name.replace(new_name.size() - 1, 1, ""); + } + delete name; + name = new Identifier(Identifier::ID_NAME, new_name); + } + } Template* NamedTemplate::extract_template() { diff --git a/compiler2/ttcn3/Templatestuff.hh b/compiler2/ttcn3/Templatestuff.hh index be5b020be..54dd73a41 100644 --- a/compiler2/ttcn3/Templatestuff.hh +++ b/compiler2/ttcn3/Templatestuff.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -163,6 +163,12 @@ namespace Ttcn { const Identifier& get_name() const { return *name; } /* \todo this should be called get_Template, like in TemplateInstance */ Template *get_template() const { return temp; } + /** Sets the first letter in the name of the named template to lowercase + * if it's an uppercase letter. + * Used on open types (the name of their alternatives can be given with both + * an uppercase or a lowercase first letter, and the generated code will need + * to use the lowercase version). */ + void set_name_to_lowercase(); /** Remove the template from the ownership of NamedTemplate. * @return \a temp * @post \a temp == 0 */ diff --git a/compiler2/ttcn3/TextAST.cc b/compiler2/ttcn3/TextAST.cc index 295ec30df..73019a2e3 100644 --- a/compiler2/ttcn3/TextAST.cc +++ b/compiler2/ttcn3/TextAST.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/ttcn3/TextAST.hh b/compiler2/ttcn3/TextAST.hh index 93bb3a616..45e0b9454 100644 --- a/compiler2/ttcn3/TextAST.hh +++ b/compiler2/ttcn3/TextAST.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/ttcn3/Ttcn2Json.cc b/compiler2/ttcn3/Ttcn2Json.cc index fb70102fb..92d913e1d 100644 --- a/compiler2/ttcn3/Ttcn2Json.cc +++ b/compiler2/ttcn3/Ttcn2Json.cc @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2000-2015 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 +/////////////////////////////////////////////////////////////////////////////// + #include "Ttcn2Json.hh" #include "compiler.h" @@ -32,6 +40,10 @@ void Ttcn2Json::create_schema(JSON_Tokenizer& json) // top-level object start json.put_next_token(JSON_TOKEN_OBJECT_START, NULL); + // insert the schema header + json.put_next_token(JSON_TOKEN_NAME, "$schema"); + json.put_next_token(JSON_TOKEN_STRING, "\"http://json-schema.org/draft-04/schema#\""); + // start of type definitions json.put_next_token(JSON_TOKEN_NAME, "definitions"); json.put_next_token(JSON_TOKEN_OBJECT_START, NULL); diff --git a/compiler2/ttcn3/Ttcn2Json.hh b/compiler2/ttcn3/Ttcn2Json.hh index c7a9701e7..52402dc51 100644 --- a/compiler2/ttcn3/Ttcn2Json.hh +++ b/compiler2/ttcn3/Ttcn2Json.hh @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2000-2015 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 +/////////////////////////////////////////////////////////////////////////////// + #ifndef TTCN2JSON_HH #define TTCN2JSON_HH diff --git a/compiler2/ttcn3/TtcnTemplate.cc b/compiler2/ttcn3/TtcnTemplate.cc index 03f6d5ee0..5342d34c8 100644 --- a/compiler2/ttcn3/TtcnTemplate.cc +++ b/compiler2/ttcn3/TtcnTemplate.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -1549,6 +1549,9 @@ namespace Ttcn { Template *t = u.templates->get_t_byIndex(i); switch (t->templatetype) { case ANY_OR_OMIT: + case ALL_FROM: + // 'all from' clauses not known at compile time are also considered + // as 'AnyOrNone' return true; case PERMUTATION_MATCH: // walk recursively @@ -1578,13 +1581,14 @@ namespace Ttcn { Template *t = u.templates->get_t_byIndex(i); switch (t->templatetype) { case ANY_OR_OMIT: + case ALL_FROM: // do not count it break; case PERMUTATION_MATCH: // walk recursively ret_val += t->get_nof_comps_not_anyornone(); break; - default: + default: // other types are counted as 1 ret_val++; break; @@ -1968,8 +1972,6 @@ end: // check for subreferences in the 'all from' target FieldOrArrayRefs* subrefs = ref->get_subrefs(); if (NULL != subrefs) { - // flattening values/templates with subreferences is not implemented yet - can_flatten = false; for (size_t i = 0; i < subrefs->get_nof_refs(); ++i) { FieldOrArrayRef* subref = subrefs->get_ref(i); if (FieldOrArrayRef::ARRAY_REF == subref->get_type()) { @@ -1986,97 +1988,219 @@ end: Common::Assignment::asstype_t asst = ass->get_asstype(); switch (asst) { - case Common::Assignment::A_MODULEPAR_TEMP: - case Common::Assignment::A_VAR_TEMPLATE: - case Common::Assignment::A_FUNCTION_RTEMP: - case Common::Assignment::A_EXT_FUNCTION_RTEMP: { - // Cannot flatten at compile time - delete new_templates; - new_templates = 0; - break; } - case Common::Assignment::A_TEMPLATE: { Template *tpl = ass->get_Template(); // tpl is the template whose name appears after the "all from" - Template::templatetype_t tpltt = tpl->get_templatetype(); - switch (tpltt) { - case TEMPLATE_REFD: { - delete new_templates; - new_templates = 0; - killer = false; - break; } - case TEMPLATE_LIST: - // ALL_FROM ? - case VALUE_LIST: { - size_t nvl = tpl->get_nof_comps(); - for (size_t ti = 0; ti < nvl; ++ti) { - Template *orig = tpl->get_temp_byIndex(ti); - switch (orig->templatetype) { - case SPECIFIC_VALUE: { - if (can_flatten) { - Value *val = orig->get_specific_value(); - if (val->get_valuetype() == Value::V_REFD) { - if (dynamic_cast<Ttcn::Ref_pard*>(val->get_reference())) { - // Cannot flatten at compile time if one of the values or templates has parameters. - can_flatten = false; + Common::Type *type = ass->get_Type()->get_type_refd_last(); + if (NULL != subrefs) { + // walk through the subreferences to determine the type and value of the 'all from' target + // Note: the templates referenced by the array indexes and field names + // have not been checked yet + for (size_t i = 0; i < subrefs->get_nof_refs(); ++i) { + FieldOrArrayRef* subref = subrefs->get_ref(i); + if (FieldOrArrayRef::ARRAY_REF == subref->get_type()) { + // check if the type can be indexed + Common::Type::typetype_t tt = type->get_typetype(); + if (Common::Type::T_SEQOF != tt && Common::Type::T_SETOF != tt && + Common::Type::T_ARRAY != tt) { + subref->error("Cannot apply an array index to type '%s'", + type->get_typename().c_str()); + i = subrefs->get_nof_refs(); // quit from the cycle, too + tpl = NULL; + break; + } + if (can_flatten && !subref->get_val()->is_unfoldable()) { + switch(tpl->get_templatetype()) { + case TEMPLATE_LIST: + case VALUE_LIST: { + Int index = subref->get_val()->get_val_Int()->get_val(); + // check for index overflow + if (index >= static_cast<Int>(tpl->get_nof_comps())) { + subref->error("Index overflow in a template %s type `%s':" + " the index is %s, but the template has only %lu elements", + Common::Type::T_ARRAY == tt ? "array of" : + (Common::Type::T_SEQOF == tt ? "of 'record of'" : "of 'set of'"), + type->get_typename().c_str(), Int2string(index).c_str(), + (unsigned long)tpl->get_nof_comps()); + i = subrefs->get_nof_refs(); // quit from the cycle, too + tpl = NULL; + break; } + tpl = tpl->get_temp_byIndex(index); + // check if the element is initialized + if (TEMPLATE_NOTUSED == tpl->get_templatetype()) { + subref->error("An uninitialized list element can not be used as target of 'all from'"); + i = subrefs->get_nof_refs(); // quit from the cycle, too + tpl = NULL; + break; + } + break; } + case INDEXED_TEMPLATE_LIST: + can_flatten = false; // currently not supported + break; + default: + subref->error("Expected a specific value of type '%s' instead of %s", + type->get_typename().c_str(), tpl->get_templatetype_str()); + i = subrefs->get_nof_refs(); // quit from the cycle, too + tpl = NULL; + break; } } - break; } - case ANY_OR_OMIT: - if (from_permutation) { - break; // AnyElementOrNone allowed in "all from" now + else { + // one of the array indexes is a reference => cannot flatten + can_flatten = false; } - // no break - case PERMUTATION_MATCH: - t->error("'all from' can not refer to permutation or AnyElementsOrNone"); - t->set_templatetype(TEMPLATE_ERROR); - default: - break; + type = type->get_ofType()->get_type_refd_last(); + } + else { // FIELD_REF + // check if the type can have fields + Common::Type::typetype_t tt = type->get_typetype(); + if (Common::Type::T_SEQ_T != tt && Common::Type::T_SEQ_A != tt && + Common::Type::T_SET_T != tt && Common::Type::T_SET_A != tt && + Common::Type::T_CHOICE_T != tt && Common::Type::T_CHOICE_A != tt) { + subref->error("Cannot apply a field name to type '%s'", + type->get_typename().c_str()); + tpl = NULL; + break; + } + // check if the field name is valid + if (!type->has_comp_withName(*subref->get_id())) { + subref->error("Type '%s' does not have a field with name '%s'", + type->get_typename().c_str(), subref->get_id()->get_dispname().c_str()); + tpl = NULL; + break; + } + if (can_flatten) { + switch(tpl->get_templatetype()) { + case NAMED_TEMPLATE_LIST: { + // check if there is any data in the template for this field + // (no data means it's uninitialized) + if (!tpl->u.named_templates->has_nt_withName(*subref->get_id())) { + subref->error("An uninitialized field can not be used as target of 'all from'"); + i = subrefs->get_nof_refs(); // quit from the cycle, too + tpl = NULL; + break; + } + tpl = tpl->u.named_templates->get_nt_byName(*subref->get_id())->get_template(); + // check if the field is initialized and present (not omitted) + if (OMIT_VALUE == tpl->get_templatetype() || TEMPLATE_NOTUSED == tpl->get_templatetype()) { + subref->error("An %s field can not be used as target of 'all from'", + OMIT_VALUE == tpl->get_templatetype() ? "omitted" : "uninitialized"); + i = subrefs->get_nof_refs(); // quit from the cycle, too + tpl = NULL; + break; + } + break; } + default: + subref->error("Expected a specific value of type '%s' instead of %s", + type->get_typename().c_str(), tpl->get_templatetype_str()); + i = subrefs->get_nof_refs(); // quit from the cycle, too + tpl = NULL; + break; + } + } + type = type->get_comp_byName(*subref->get_id())->get_type()->get_type_refd_last(); } } + } + if (NULL != tpl) { // tpl is set to null if an error occurs if (can_flatten) { - for (size_t ti = 0; ti < nvl; ++ti) { + Template::templatetype_t tpltt = tpl->get_templatetype(); + switch (tpltt) { + case INDEXED_TEMPLATE_LIST: // currently not supported + case TEMPLATE_REFD: { + delete new_templates; + new_templates = 0; + killer = false; + break; } + + case TEMPLATE_LIST: + // ALL_FROM ? + case VALUE_LIST: { + size_t nvl = tpl->get_nof_comps(); + for (size_t ti = 0; ti < nvl; ++ti) { Template *orig = tpl->get_temp_byIndex(ti); - Template *copy = orig->clone(); - copy->set_my_scope(orig->get_my_scope()); - new_templates->add_t(copy); - } - } - else { - // Cannot flatten at compile time - delete new_templates; - new_templates = 0; - killer = false; - } - break; } + switch (orig->templatetype) { + case SPECIFIC_VALUE: { + Value *val = orig->get_specific_value(); + if (val->get_valuetype() == Value::V_REFD) { + if (dynamic_cast<Ttcn::Ref_pard*>(val->get_reference())) { + // Cannot flatten at compile time if one of the values or templates has parameters. + can_flatten = false; + } + } + break; } + case ANY_OR_OMIT: + if (from_permutation) { + break; // AnyElementOrNone allowed in "all from" now + } + // no break + case PERMUTATION_MATCH: + t->error("'all from' can not refer to permutation or AnyElementsOrNone"); + t->set_templatetype(TEMPLATE_ERROR); + default: + break; + } + } + if (can_flatten) { + for (size_t ti = 0; ti < nvl; ++ti) { + Template *orig = tpl->get_temp_byIndex(ti); + Template *copy = orig->clone(); + copy->set_my_scope(orig->get_my_scope()); + new_templates->add_t(copy); + } + } + else { + // Cannot flatten at compile time + delete new_templates; + new_templates = 0; + killer = false; + } + break; } - case NAMED_TEMPLATE_LIST: { - size_t nvl = tpl->get_nof_comps(); - for (size_t ti = 0; ti < nvl; ++ti) { - NamedTemplate *orig = tpl->get_namedtemp_byIndex(ti); - switch (orig->get_template()->get_templatetype()) { - case ANY_OR_OMIT: - break; - case PERMUTATION_MATCH: - t->error("'all from' can not refer to permutation or AnyElementsOrNone"); - t->set_templatetype(TEMPLATE_ERROR); - default: - break; + case NAMED_TEMPLATE_LIST: { + size_t nvl = tpl->get_nof_comps(); + for (size_t ti = 0; ti < nvl; ++ti) { + NamedTemplate *orig = tpl->get_namedtemp_byIndex(ti); + switch (orig->get_template()->get_templatetype()) { + case ANY_OR_OMIT: + break; + case PERMUTATION_MATCH: + t->error("'all from' can not refer to permutation or AnyElementsOrNone"); + t->set_templatetype(TEMPLATE_ERROR); + default: + break; + } + } + delete new_templates; + new_templates = 0; + killer = false; + break; } + + case ANY_VALUE: + case ANY_OR_OMIT: + tpl->error("Matching mechanism can not be used as target of 'all from'"); + break; + default: + tpl->error("A template of type '%s' can not be used as target of 'all from'", + type->get_typename().c_str()); + break; } } - delete new_templates; - new_templates = 0; - killer = false; - break; } - - case ANY_VALUE: - case ANY_OR_OMIT: - tpl->error("Matching mechanism can not be used as target of 'all from'"); - break; - default: - FATAL_ERROR("harbinger"); - break; + else { // cannot flatten + switch (type->get_typetype()) { + case Common::Type::T_SEQOF: case Common::Type::T_SETOF: + case Common::Type::T_ARRAY: + delete new_templates; + new_templates = 0; + killer = false; + break; + default: + type->error("A template of type `%s' can not be used as target of 'all from'", + type->get_typename().c_str()); + break; + } // switch(typetype) + } } if (killer) delete t; @@ -2085,43 +2209,218 @@ end: case Common::Assignment::A_CONST: { // all from a constant definition Common::Value *val = ass->get_Value(); - switch (val->get_valuetype()) { - case Common::Value::V_SEQOF: case Common::Value::V_SETOF: - case Common::Value::V_ARRAY: { - if (can_flatten) { - const size_t ncomp = val->get_nof_comps(); - for (size_t i = 0; i < ncomp; ++i) { - Value *v = val->get_comp_byIndex(i); - Template *newt = new Template(v->clone()); - new_templates->add_t(newt); + Common::Type *type = ass->get_Type()->get_type_refd_last(); + if (NULL != subrefs) { + // walk through the subreferences to determine the type and value of the 'all from' target + for (size_t i = 0; i < subrefs->get_nof_refs(); ++i) { + FieldOrArrayRef* subref = subrefs->get_ref(i); + if (FieldOrArrayRef::ARRAY_REF == subref->get_type()) { + // check if the type can be indexed + Common::Type::typetype_t tt = type->get_typetype(); + if (Common::Type::T_SEQOF != tt && Common::Type::T_SETOF != tt && + Common::Type::T_ARRAY != tt) { + subref->error("Cannot apply an array index to type '%s'", + type->get_typename().c_str()); + val = NULL; + break; + } + if (can_flatten && !subref->get_val()->is_unfoldable()) { + Int index = subref->get_val()->get_val_Int()->get_val(); + // check for index overflow + if (index >= static_cast<Int>(val->get_nof_comps())) { + subref->error("Index overflow in a value %s type `%s':" + " the index is %s, but the template has only %lu elements", + Common::Type::T_ARRAY == tt ? "array of" : + (Common::Type::T_SEQOF == tt ? "of 'record of'" : "of 'set of'"), + type->get_typename().c_str(), Int2string(index).c_str(), + (unsigned long)val->get_nof_comps()); + val = NULL; + break; + } + val = val->get_comp_byIndex(index); + // check if the element is initialized + if (Common::Value::V_NOTUSED == val->get_valuetype()) { + subref->error("An unbound list element can not be used as target of 'all from'"); + val = NULL; + break; + } + } + else { + // one of the array indexes is a reference => cannot flatten + can_flatten = false; + } + type = type->get_ofType()->get_type_refd_last(); + } + else { // FIELD_REF + // check if the type can have fields + Common::Type::typetype_t tt = type->get_typetype(); + if (Common::Type::T_SEQ_T != tt && Common::Type::T_SEQ_A != tt && + Common::Type::T_SET_T != tt && Common::Type::T_SET_A != tt && + Common::Type::T_CHOICE_T != tt && Common::Type::T_CHOICE_A != tt) { + subref->error("Cannot apply a field name to type '%s'", + type->get_typename().c_str()); + val = NULL; + break; + } + // check if the field name is valid + if (!type->has_comp_withName(*subref->get_id())) { + subref->error("Type '%s' does not have a field with name '%s'", + type->get_typename().c_str(), subref->get_id()->get_dispname().c_str()); + val = NULL; + break; + } + type = type->get_comp_byName(*subref->get_id())->get_type()->get_type_refd_last(); + if (can_flatten) { + // check if the value has any data for this field (no data = unbound) + if (!val->has_comp_withName(*subref->get_id())) { + subref->error("An unbound field can not be used as target of 'all from'"); + val = NULL; + break; + } + val = val->get_comp_value_byName(*subref->get_id()); + // check if the field is bound and present (not omitted) + if (Common::Value::V_OMIT == val->get_valuetype() || + Common::Value::V_NOTUSED == val->get_valuetype()) { + subref->error("An %s field can not be used as target of 'all from'", + Common::Value::V_OMIT == val->get_valuetype() ? "omitted" : "unbound"); + val = NULL; + break; + } + } } } - else { - delete new_templates; - new_templates = 0; - killer = false; - } - break; } + } + if (NULL != val) { // val is set to null if an error occurs + switch (type->get_typetype()) { + case Common::Type::T_SEQOF: case Common::Type::T_SETOF: + case Common::Type::T_ARRAY: { + if (can_flatten) { + const size_t ncomp = val->get_nof_comps(); + for (size_t i = 0; i < ncomp; ++i) { + Value *v = val->get_comp_byIndex(i); + Template *newt = new Template(v->clone()); + new_templates->add_t(newt); + } + } + else { + delete new_templates; + new_templates = 0; + killer = false; + } + break; } - default: - val->error("A constant of type `%s' can not be used as target of 'all from'", - val->get_my_governor()->get_typename().c_str()); - break; - } // switch(valuetype) + default: + type->error("A constant of type `%s' can not be used as target of 'all from'", + type->get_typename().c_str()); + break; + } // switch(typetype) + } if (killer) delete t; break; } + case Common::Assignment::A_MODULEPAR_TEMP: + case Common::Assignment::A_VAR_TEMPLATE: + case Common::Assignment::A_FUNCTION_RTEMP: + case Common::Assignment::A_EXT_FUNCTION_RTEMP: case Common::Assignment::A_PAR_TEMPL_IN: case Common::Assignment::A_PAR_TEMPL_INOUT: + case Common::Assignment::A_PAR_TEMPL_OUT: //TODO: flatten if the actual par is const template case Common::Assignment::A_MODULEPAR: // all from a module parameter case Common::Assignment::A_VAR: // all from a variable case Common::Assignment::A_PAR_VAL_IN: - case Common::Assignment::A_PAR_VAL_INOUT: + case Common::Assignment::A_PAR_VAL_INOUT: + case Common::Assignment::A_PAR_VAL_OUT: case Common::Assignment::A_FUNCTION_RVAL: case Common::Assignment::A_EXT_FUNCTION_RVAL: { - delete new_templates; // cannot flatten at compile time - new_templates = 0; + Common::Type *type = ass->get_Type()->get_type_refd_last(); + if (NULL != subrefs) { + // walk through the subreferences to determine the type of the 'all from' target + for (size_t i = 0; i < subrefs->get_nof_refs(); ++i) { + FieldOrArrayRef* subref = subrefs->get_ref(i); + if (FieldOrArrayRef::ARRAY_REF == subref->get_type()) { + // check if the type can be indexed + Common::Type::typetype_t tt = type->get_typetype(); + if (Common::Type::T_SEQOF != tt && Common::Type::T_SETOF != tt && + Common::Type::T_ARRAY != tt) { + subref->error("Cannot apply an array index to type '%s'", + type->get_typename().c_str()); + type = NULL; + break; + } + type = type->get_ofType()->get_type_refd_last(); + } + else { // FIELD_REF + // check if the type can have fields + Common::Type::typetype_t tt = type->get_typetype(); + if (Common::Type::T_SEQ_T != tt && Common::Type::T_SEQ_A != tt && + Common::Type::T_SET_T != tt && Common::Type::T_SET_A != tt && + Common::Type::T_CHOICE_T != tt && Common::Type::T_CHOICE_A != tt) { + subref->error("Cannot apply a field name to type '%s'", + type->get_typename().c_str()); + type = NULL; + break; + } + // check if the field name is valid + if (!type->has_comp_withName(*subref->get_id())) { + subref->error("Type '%s' does not have a field with name '%s'", + type->get_typename().c_str(), subref->get_id()->get_dispname().c_str()); + type = NULL; + break; + } + type = type->get_comp_byName(*subref->get_id())->get_type()->get_type_refd_last(); + } + } + } + if (NULL != type) { + switch (type->get_typetype()) { + case Common::Type::T_SEQOF: case Common::Type::T_SETOF: + case Common::Type::T_ARRAY: + delete new_templates; // cannot flatten at compile time + new_templates = 0; + break; + default: { + // not an array type => error + const char* ass_name = ass->get_assname(); + string descr; + switch(asst) { + case Common::Assignment::A_MODULEPAR_TEMP: + case Common::Assignment::A_VAR_TEMPLATE: + case Common::Assignment::A_MODULEPAR: + case Common::Assignment::A_VAR: + case Common::Assignment::A_PAR_TEMPL_IN: + case Common::Assignment::A_PAR_VAL_IN: + descr = "A "; + descr += ass_name; + break; + case Common::Assignment::A_PAR_TEMPL_INOUT: + case Common::Assignment::A_PAR_TEMPL_OUT: + case Common::Assignment::A_PAR_VAL_INOUT: + case Common::Assignment::A_PAR_VAL_OUT: + descr = "An "; + descr += ass_name; + break; + // the assignment name string for functions is no good here + case Common::Assignment::A_FUNCTION_RTEMP: + descr = "A function returning a template"; + break; + case Common::Assignment::A_FUNCTION_RVAL: + descr = "A function returning a value"; + break; + case Common::Assignment::A_EXT_FUNCTION_RTEMP: + descr = "An external function returning a template"; + break; + case Common::Assignment::A_EXT_FUNCTION_RVAL: + descr = "An external function returning a value"; + break; + default: + break; + } + type->error("%s of type `%s' can not be used as target of 'all from'", + descr.c_str(), type->get_typename().c_str()); + break; } + } + } // switch(typetype) break; } default: @@ -2333,12 +2632,14 @@ end: default: FATAL_ERROR("Template::generate_restriction_check_code()"); } - return mputprintf(str, "%s.check_restriction(%s);\n", name, tr_name); + return mputprintf(str, "%s.check_restriction(%s%s);\n", name, tr_name, + (omit_in_value_list ? ", NULL, TRUE" : "")); } // embedded templates -> check needed only for case of TR_OMIT bool Template::chk_restriction_named_list(const char* definition_name, - map<string, void>& checked_map, size_t needed_checked_cnt) + map<string, void>& checked_map, size_t needed_checked_cnt, + const Location* usage_loc) { bool needs_runtime_check = false; if (checked_map.size()>=needed_checked_cnt) return needs_runtime_check; @@ -2349,14 +2650,14 @@ end: const string& name = u.named_templates->get_nt_byIndex(i)->get_name().get_name(); if (!checked_map.has_key(name)) { - bool nrc = tmpl->chk_restriction(definition_name, TR_OMIT); + bool nrc = tmpl->chk_restriction(definition_name, TR_OMIT, usage_loc); needs_runtime_check = needs_runtime_check || nrc; checked_map.add(name, 0); } } if (base_template) { bool nrc = base_template->chk_restriction_named_list(definition_name, - checked_map, needed_checked_cnt); + checked_map, needed_checked_cnt, usage_loc); needs_runtime_check = needs_runtime_check || nrc; } break; @@ -2373,7 +2674,7 @@ end: } bool Template::chk_restriction_refd(const char* definition_name, - template_restriction_t template_restriction) + template_restriction_t template_restriction, const Location* usage_loc) { bool needs_runtime_check = false; Common::Assignment* ass = u.ref.ref->get_refd_assignment(); @@ -2386,7 +2687,7 @@ end: Template* t_last = get_template_refd_last(); if (t_last!=this) { bool nrc = t_last->chk_restriction(definition_name, - template_restriction); + template_restriction, usage_loc); needs_runtime_check = needs_runtime_check || nrc; } break; } @@ -2438,27 +2739,33 @@ end: } bool Template::chk_restriction(const char* definition_name, - template_restriction_t template_restriction) + template_restriction_t template_restriction, + const Location* usage_loc) { bool needs_runtime_check = false; + bool erroneous = false; switch (template_restriction) { case TR_NONE: break; case TR_OMIT: case TR_VALUE: - if (length_restriction) - error("Restriction on %s does not allow usage of length restriction", - definition_name); - if (is_ifpresent) - error("Restriction on %s does not allow usage of `ifpresent'", - definition_name); + if (length_restriction) { + usage_loc->error("Restriction on %s does not allow usage of length " + "restriction", definition_name); + erroneous = true; + } + if (is_ifpresent) { + usage_loc->error("Restriction on %s does not allow usage of `ifpresent'", + definition_name); + erroneous = true; + } switch(templatetype) { case TEMPLATE_ERROR: break; case TEMPLATE_NOTUSED: if (base_template) { bool nrc = base_template->chk_restriction(definition_name, - template_restriction); + template_restriction, usage_loc); needs_runtime_check = needs_runtime_check || nrc; } else needs_runtime_check = true; @@ -2467,13 +2774,14 @@ end: case TEMPLATE_INVOKE: break; case TEMPLATE_REFD: { - bool nrc = chk_restriction_refd(definition_name, template_restriction); + bool nrc = chk_restriction_refd(definition_name, template_restriction, + usage_loc); needs_runtime_check = needs_runtime_check || nrc; } break; case TEMPLATE_LIST: for (size_t i = 0; i < u.templates->get_nof_ts(); i++) { bool nrc = u.templates->get_t_byIndex(i)-> - chk_restriction(definition_name, TR_OMIT); + chk_restriction(definition_name, TR_OMIT, usage_loc); needs_runtime_check = needs_runtime_check || nrc; } break; @@ -2495,7 +2803,7 @@ end: } for (size_t i = 0;i < u.named_templates->get_nof_nts(); i++) { bool nrc = u.named_templates->get_nt_byIndex(i)->get_template()-> - chk_restriction(definition_name, TR_OMIT); + chk_restriction(definition_name, TR_OMIT, usage_loc); needs_runtime_check = needs_runtime_check || nrc; if (needed_checked_cnt) checked_map.add( @@ -2503,7 +2811,7 @@ end: } if (needed_checked_cnt) { bool nrc = base_template->chk_restriction_named_list(definition_name, - checked_map, needed_checked_cnt); + checked_map, needed_checked_cnt, usage_loc); needs_runtime_check = needs_runtime_check || nrc; checked_map.clear(); } @@ -2511,7 +2819,7 @@ end: case INDEXED_TEMPLATE_LIST: for (size_t i = 0; i < u.indexed_templates->get_nof_its(); i++) { bool nrc = u.indexed_templates->get_it_byIndex(i)->get_template()-> - chk_restriction(definition_name, TR_OMIT); + chk_restriction(definition_name, TR_OMIT, usage_loc); needs_runtime_check = needs_runtime_check || nrc; } needs_runtime_check = true; // only basic check, needs runtime check @@ -2521,46 +2829,57 @@ end: // Else restriction is TR_VALUE, but template type is OMIT: // fall through to error. default: - error("Restriction on %s does not allow usage of %s", - definition_name, get_templatetype_str()); + usage_loc->error("Restriction on %s does not allow usage of %s", + definition_name, get_templatetype_str()); + erroneous = true; break; } break; case TR_PRESENT: - if (is_ifpresent) - error("Restriction on %s does not allow usage of `ifpresent'", - definition_name); + if (is_ifpresent) { + usage_loc->error("Restriction on %s does not allow usage of `ifpresent'", + definition_name); + erroneous = true; + } switch(templatetype) { case TEMPLATE_REFD: { - bool nrc = chk_restriction_refd(definition_name, template_restriction); + bool nrc = chk_restriction_refd(definition_name, template_restriction, + usage_loc); needs_runtime_check = needs_runtime_check || nrc; } break; case VALUE_LIST: for (size_t i = 0; i < u.templates->get_nof_ts(); i++) { bool nrc = u.templates->get_t_byIndex(i)-> - chk_restriction(definition_name, template_restriction); + chk_restriction(definition_name, template_restriction, usage_loc); needs_runtime_check = needs_runtime_check || nrc; } break; - case COMPLEMENTED_LIST: { + case COMPLEMENTED_LIST: // some basic check, always needs runtime check needs_runtime_check = true; - bool has_any_or_omit = false; - for (size_t i = 0; i < u.templates->get_nof_ts(); i++) { - templatetype_t item_templatetype = - u.templates->get_t_byIndex(i)->templatetype; - if (item_templatetype==OMIT_VALUE || item_templatetype==ANY_OR_OMIT) { - has_any_or_omit = true; - break; + if (omit_in_value_list) { + bool has_any_or_omit = false; + for (size_t i = 0; i < u.templates->get_nof_ts(); i++) { + templatetype_t item_templatetype = + u.templates->get_t_byIndex(i)->templatetype; + if (item_templatetype==OMIT_VALUE || item_templatetype==ANY_OR_OMIT) { + has_any_or_omit = true; + break; + } + } + if (!has_any_or_omit) { + usage_loc->error("Restriction on %s does not allow usage of %s without " + "omit or AnyValueOrNone in the list", definition_name, + get_templatetype_str()); + erroneous = true; } } - if (has_any_or_omit) break; - } - // FIXME really no break? + break; case OMIT_VALUE: case ANY_OR_OMIT: - error("Restriction on %s does not allow usage of %s", - definition_name, get_templatetype_str()); + usage_loc->error("Restriction on %s does not allow usage of %s", + definition_name, get_templatetype_str()); + erroneous = true; break; default: break; // all others are ok @@ -2569,6 +2888,10 @@ end: default: FATAL_ERROR("Template::chk_restriction()"); } + if (erroneous && usage_loc != this) { + // display the template's location, too + note("Referenced template is here"); + } return needs_runtime_check; } @@ -3143,6 +3466,25 @@ end: Code::free_expr(&expr); } } + + switch(ass->get_asstype()) { + case Common::Assignment::A_CONST: + case Common::Assignment::A_EXT_CONST: + case Common::Assignment::A_MODULEPAR: + case Common::Assignment::A_VAR: + case Common::Assignment::A_PAR_VAL_IN: + case Common::Assignment::A_PAR_VAL_OUT: + case Common::Assignment::A_PAR_VAL_INOUT: + case Common::Assignment::A_FUNCTION_RVAL: + case Common::Assignment::A_EXT_FUNCTION_RVAL: + if (ass->get_Type()->field_is_optional(subrefs)) { + str_set_size = mputstrn(str_set_size, "()", 2); + } + break; + default: + break; + } + str_set_size = mputstr(str_set_size, ".n_elem()"); } } @@ -3155,7 +3497,7 @@ end: Free(str_set_size); str = mputstrn(str, ");\n", 3); // finally done set_size - + size_t index = 0; string skipper, hopper; for (size_t i = 0; i < nof_ts; i++) { @@ -3183,6 +3525,25 @@ end: ref_pard->generate_code_cached(&expr); else ref->generate_code(&expr); + + Common::Assignment* ass = ref->get_refd_assignment(); + switch(ass->get_asstype()) { + case Common::Assignment::A_CONST: + case Common::Assignment::A_EXT_CONST: + case Common::Assignment::A_MODULEPAR: + case Common::Assignment::A_VAR: + case Common::Assignment::A_PAR_VAL_IN: + case Common::Assignment::A_PAR_VAL_OUT: + case Common::Assignment::A_PAR_VAL_INOUT: + case Common::Assignment::A_FUNCTION_RVAL: + case Common::Assignment::A_EXT_FUNCTION_RVAL: + if (ass->get_Type()->field_is_optional(ref->get_subrefs())) { + expr.expr = mputstrn(expr.expr, "()", 2); + } + break; + default: + break; + } break; } default: @@ -3289,6 +3650,25 @@ end: Code::free_expr(&expr); } } + + switch(ass->get_asstype()) { + case Common::Assignment::A_CONST: + case Common::Assignment::A_EXT_CONST: + case Common::Assignment::A_MODULEPAR: + case Common::Assignment::A_VAR: + case Common::Assignment::A_PAR_VAL_IN: + case Common::Assignment::A_PAR_VAL_OUT: + case Common::Assignment::A_PAR_VAL_INOUT: + case Common::Assignment::A_FUNCTION_RVAL: + case Common::Assignment::A_EXT_FUNCTION_RVAL: + if (ass->get_Type()->field_is_optional(subrefs)) { + str_set_size = mputstrn(str_set_size, "()", 2); + } + break; + default: + break; + } + str_set_size = mputstr(str_set_size, ".n_elem()"); } } @@ -3298,7 +3678,7 @@ end: Free(str_preamble); Free(str_set_size); str = mputstrn(str, ");\n", 3); // finally done set_size - + size_t index = 0; string skipper; for (size_t i = 0; i < nof_ts; i++) { @@ -3319,6 +3699,26 @@ end: ref_pard->generate_code_cached(&expr); else ref->generate_code(&expr); + + Common::Assignment* ass = ref->get_refd_assignment(); + switch(ass->get_asstype()) { + case Common::Assignment::A_CONST: + case Common::Assignment::A_EXT_CONST: + case Common::Assignment::A_MODULEPAR: + case Common::Assignment::A_VAR: + case Common::Assignment::A_PAR_VAL_IN: + case Common::Assignment::A_PAR_VAL_OUT: + case Common::Assignment::A_PAR_VAL_INOUT: + case Common::Assignment::A_FUNCTION_RVAL: + case Common::Assignment::A_EXT_FUNCTION_RVAL: + if (ass->get_Type()->field_is_optional(ref->get_subrefs())) { + expr.expr = mputstrn(expr.expr, "()", 2); + } + break; + default: + break; + } + break; } default: FATAL_ERROR("vtype %d", spec->get_valuetype()); @@ -3344,8 +3744,6 @@ end: ++index; break; } default: { - printf("generate_code_init_seof allfrom default: %s\n", - (Int2string(index_offset + index) + skipper).c_str()); str = t->generate_code_init_seof_element(str, name, (Int2string(index_offset + index) + skipper).c_str(), oftype_name_str); // no break @@ -3468,6 +3866,26 @@ compile_time: ref_pard->generate_code_cached(&expr); else ref->generate_code(&expr); + + Common::Assignment* ass = ref->get_refd_assignment(); + switch(ass->get_asstype()) { + case Common::Assignment::A_CONST: + case Common::Assignment::A_EXT_CONST: + case Common::Assignment::A_MODULEPAR: + case Common::Assignment::A_VAR: + case Common::Assignment::A_PAR_VAL_IN: + case Common::Assignment::A_PAR_VAL_OUT: + case Common::Assignment::A_PAR_VAL_INOUT: + case Common::Assignment::A_FUNCTION_RVAL: + case Common::Assignment::A_EXT_FUNCTION_RVAL: + if (ass->get_Type()->field_is_optional(ref->get_subrefs())) { + expr.expr = mputstrn(expr.expr, "()", 2); + } + break; + default: + break; + } + str = mputprintf(str, "%s = %s[i_i];\n", name, expr.expr); // The caller will have to provide the for cycle with this variable Code::free_expr(&expr); @@ -3593,7 +4011,7 @@ compile_time: if (variables.size() > 0) { char* str_preamble = 0; - char* str_set_type = mputprintf(0, "%s.set_type(%s, %lu", name, + char* str_set_type = mprintf("%s.set_type(%s, %lu", name, (is_complemented ? "COMPLEMENTED_LIST" : "VALUE_LIST"), (unsigned long)fixed_part); // The code to compute the number of elements at run time (the variable part). @@ -3633,11 +4051,30 @@ compile_time: Code::init_expr(&expr); subrefs->generate_code(&expr, ass); - str_set_type = mputprintf(str, "%s", expr.expr); + str_set_type = mputprintf(str_set_type, "%s", expr.expr); Code::free_expr(&expr); } } + + switch(ass->get_asstype()) { + case Common::Assignment::A_CONST: + case Common::Assignment::A_EXT_CONST: + case Common::Assignment::A_MODULEPAR: + case Common::Assignment::A_VAR: + case Common::Assignment::A_PAR_VAL_IN: + case Common::Assignment::A_PAR_VAL_OUT: + case Common::Assignment::A_PAR_VAL_INOUT: + case Common::Assignment::A_FUNCTION_RVAL: + case Common::Assignment::A_EXT_FUNCTION_RVAL: + if (ass->get_Type()->field_is_optional(subrefs)) { + str_set_type = mputstrn(str_set_type, "()", 2); + } + break; + default: + break; + } + str_set_type = mputstr(str_set_type, ".n_elem()"); } @@ -3648,7 +4085,7 @@ compile_time: Free(str_set_type); str = mputstrn(str, ");\n", 3); - + string shifty; // contains the expression used to calculate // the size increase due to the runtime expansion of "all from". // In nof_ts, each "all from" appears as 1, but actually contributes @@ -3674,7 +4111,27 @@ compile_time: if (ref_pard) ref_pard->generate_code_cached(&expr); else - ref->generate_code(&expr); + ref->generate_code(&expr); + + Common::Assignment* ass = ref->get_refd_assignment(); + switch(ass->get_asstype()) { + case Common::Assignment::A_CONST: + case Common::Assignment::A_EXT_CONST: + case Common::Assignment::A_MODULEPAR: + case Common::Assignment::A_VAR: + case Common::Assignment::A_PAR_VAL_IN: + case Common::Assignment::A_PAR_VAL_OUT: + case Common::Assignment::A_PAR_VAL_INOUT: + case Common::Assignment::A_FUNCTION_RVAL: + case Common::Assignment::A_EXT_FUNCTION_RVAL: + if (ass->get_Type()->field_is_optional(ref->get_subrefs())) { + expr.expr = mputstrn(expr.expr, "()", 2); + } + break; + default: + break; + } + break; } default: @@ -3818,6 +4275,25 @@ compile_time: Code::free_expr(&expr); } } + + switch(ass->get_asstype()) { + case Common::Assignment::A_CONST: + case Common::Assignment::A_EXT_CONST: + case Common::Assignment::A_MODULEPAR: + case Common::Assignment::A_VAR: + case Common::Assignment::A_PAR_VAL_IN: + case Common::Assignment::A_PAR_VAL_OUT: + case Common::Assignment::A_PAR_VAL_INOUT: + case Common::Assignment::A_FUNCTION_RVAL: + case Common::Assignment::A_EXT_FUNCTION_RVAL: + if (ass->get_Type()->field_is_optional(subrefs)) { + str_set_type = mputstrn(str_set_type, "()", 2); + } + break; + default: + break; + } + str_set_type = mputstr(str_set_type, ".n_elem()"); } @@ -3848,6 +4324,26 @@ compile_time: ref_pard->generate_code_cached(&expr); else ref->generate_code(&expr); + + Common::Assignment* ass = ref->get_refd_assignment(); + switch(ass->get_asstype()) { + case Common::Assignment::A_CONST: + case Common::Assignment::A_EXT_CONST: + case Common::Assignment::A_MODULEPAR: + case Common::Assignment::A_VAR: + case Common::Assignment::A_PAR_VAL_IN: + case Common::Assignment::A_PAR_VAL_OUT: + case Common::Assignment::A_PAR_VAL_INOUT: + case Common::Assignment::A_FUNCTION_RVAL: + case Common::Assignment::A_EXT_FUNCTION_RVAL: + if (ass->get_Type()->field_is_optional(ref->get_subrefs())) { + expr.expr = mputstrn(expr.expr, "()", 2); + } + break; + default: + break; + } + break; } default: @@ -4468,7 +4964,7 @@ compile_time: } bool TemplateInstance::chk_restriction(const char* definition_name, - template_restriction_t template_restriction) + template_restriction_t template_restriction, const Location* usage_loc) { bool needs_runtime_check = false; if (derived_reference) // if modified @@ -4478,7 +4974,7 @@ compile_time: case Common::Assignment::A_TEMPLATE: // already added to template_body as base template by chk_DerivedRef() needs_runtime_check = template_body->chk_restriction( - definition_name, template_restriction); + definition_name, template_restriction, usage_loc); break; case Common::Assignment::A_MODULEPAR_TEMP: case Common::Assignment::A_VAR_TEMPLATE: @@ -4493,7 +4989,7 @@ compile_time: FATAL_ERROR("TemplateInstance::chk_restriction()"); template_body->set_base_template(new Template(derived_reference)); needs_runtime_check = template_body->chk_restriction( - definition_name, template_restriction); + definition_name, template_restriction, usage_loc); delete template_body->get_base_template(); template_body->set_base_template(0); } break; @@ -4502,7 +4998,7 @@ compile_time: } } else { // simple needs_runtime_check = template_body->chk_restriction(definition_name, - template_restriction); + template_restriction, usage_loc); } return needs_runtime_check; } diff --git a/compiler2/ttcn3/TtcnTemplate.hh b/compiler2/ttcn3/TtcnTemplate.hh index 9e49bec99..8925f8e0a 100644 --- a/compiler2/ttcn3/TtcnTemplate.hh +++ b/compiler2/ttcn3/TtcnTemplate.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -360,9 +360,10 @@ namespace Ttcn { private: /** helper functions used by chk_restriction() */ bool chk_restriction_named_list(const char* definition_name, - map<string, void>& checked_map, size_t needed_checked_cnt); + map<string, void>& checked_map, size_t needed_checked_cnt, + const Location* usage_loc); bool chk_restriction_refd(const char* definition_name, - template_restriction_t template_restriction); + template_restriction_t template_restriction, const Location* usage_loc); public: /** Checks if this template conforms to the restriction, return value: * false = always satisfies restriction -> no runtime check needed or @@ -371,9 +372,12 @@ namespace Ttcn { * time -> runtime check needed and compiler warning given when * inadequate restrictions are used, in other cases there's * no warning - * The return value is used by code generation to avoid useless checks */ + * The return value is used by code generation to avoid useless checks + * @param usage_loc contains the location, where the template is used + * (errors are issued here, instead of where the template is declared) */ bool chk_restriction(const char* definition_name, - template_restriction_t template_restriction); + template_restriction_t template_restriction, + const Location* usage_loc); /** Public entry points for code generation. */ /** Generates the equivalent C++ code for the template. It is used @@ -541,7 +545,7 @@ namespace Ttcn { bool is_string_type(Type::expected_value_t exp_val); bool chk_restriction(const char* definition_name, - template_restriction_t template_restriction); + template_restriction_t template_restriction, const Location* usage_loc); /** Returns whether the template instance can be represented by an in-line * C++ expression. */ diff --git a/compiler2/ttcn3/Ttcnstuff.cc b/compiler2/ttcn3/Ttcnstuff.cc index 44df932c9..3044da218 100644 --- a/compiler2/ttcn3/Ttcnstuff.cc +++ b/compiler2/ttcn3/Ttcnstuff.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/ttcn3/Ttcnstuff.hh b/compiler2/ttcn3/Ttcnstuff.hh index 2e09f946d..fa5cc1399 100644 --- a/compiler2/ttcn3/Ttcnstuff.hh +++ b/compiler2/ttcn3/Ttcnstuff.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/ttcn3/charstring_la.l b/compiler2/ttcn3/charstring_la.l index 59fe270ee..b401aa1c1 100644 --- a/compiler2/ttcn3/charstring_la.l +++ b/compiler2/ttcn3/charstring_la.l @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 @@ -112,7 +112,7 @@ HEXDIGIT [0-9A-Fa-f] Location loc(current_file, current_line, current_column, current_line, current_column + yyleng); loc.warning("Unknown escape sequence `%s' was treated literally", yytext); - for (int i = 0; i < yyleng; i++) ADD_CHAR(yytext[i]); + for (size_t i = 0; i < yyleng; i++) ADD_CHAR(yytext[i]); current_column += 2; } @@ -126,7 +126,7 @@ HEXDIGIT [0-9A-Fa-f] {NEWLINE} { Location loc(current_file, current_line, current_column, current_line + 1, 0); loc.warning("Unescaped newline character"); - for (int i = 0; i < yyleng; i++) ADD_CHAR(yytext[i]); + for (size_t i = 0; i < yyleng; i++) ADD_CHAR(yytext[i]); current_line++; current_column = 0; } diff --git a/compiler2/ttcn3/coding_attrib_la.l b/compiler2/ttcn3/coding_attrib_la.l index 77f69afcb..4830661ff 100644 --- a/compiler2/ttcn3/coding_attrib_la.l +++ b/compiler2/ttcn3/coding_attrib_la.l @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/compiler2/ttcn3/coding_attrib_p.y b/compiler2/ttcn3/coding_attrib_p.y index 04ff85409..a5eb4f5fe 100644 --- a/compiler2/ttcn3/coding_attrib_p.y +++ b/compiler2/ttcn3/coding_attrib_p.y @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/compiler2/ttcn3/compiler.c b/compiler2/ttcn3/compiler.c index b9cb1af8a..cd26df641 100644 --- a/compiler2/ttcn3/compiler.c +++ b/compiler2/ttcn3/compiler.c @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/ttcn3/compiler.h b/compiler2/ttcn3/compiler.h index 556de501d..c5fa2fc71 100644 --- a/compiler2/ttcn3/compiler.h +++ b/compiler2/ttcn3/compiler.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -45,6 +45,7 @@ extern "C" { char *pre_init; /**< Code for pre_init_module() */ char *post_init; /**< Code for post_init_module() */ char *set_param; /**< Code for set_module_param() */ + char *get_param; /**< Code for get_module_param() */ char *log_param; /**< Code for log_module_param() */ char *init_comp; /**< Code for init_comp_type() */ char *start; /**< Code for start_ptc_function() */ diff --git a/compiler2/ttcn3/compiler.l b/compiler2/ttcn3/compiler.l index 4497b6ca7..063baffe5 100644 --- a/compiler2/ttcn3/compiler.l +++ b/compiler2/ttcn3/compiler.l @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 @@ -256,10 +256,6 @@ TITAN "$#&&&(#TITANERRONEOUS$#&&^#% " } {LINECOMMENT} { - Location loc(infile, current_line, current_column, current_line, - current_column + yyleng); - loc.error("Unterminated line comment (missing newline character at the end " - "of file)"); current_column += yyleng; } @@ -523,6 +519,7 @@ hex2oct RETURN(hex2octKeyword); hex2str RETURN(hex2strKeyword); int2bit RETURN(int2bitKeyword); int2char RETURN(int2charKeyword); +int2enum RETURN(int2enumKeyword); int2float RETURN(int2floatKeyword); int2hex RETURN(int2hexKeyword); int2oct RETURN(int2octKeyword); diff --git a/compiler2/ttcn3/compiler.y b/compiler2/ttcn3/compiler.y index 5f07d0285..e8719923a 100644 --- a/compiler2/ttcn3/compiler.y +++ b/compiler2/ttcn3/compiler.y @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 @@ -756,6 +756,7 @@ static const string anyname("anytype"); %token hex2strKeyword %token int2bitKeyword %token int2charKeyword +%token int2enumKeyword %token int2floatKeyword %token int2hexKeyword %token int2octKeyword @@ -901,7 +902,7 @@ static const string anyname("anytype"); StartTimerStatement StopExecutionStatement StopStatement StopTCStatement StopTimerStatement TimeoutStatement TimerStatements TriggerStatement UnmapStatement VerdictStatements WhileStatement SelectCaseConstruct - StopTestcaseStatement String2TtcnStatement ProfilerStatement + StopTestcaseStatement String2TtcnStatement ProfilerStatement int2enumStatement %type <statementblock> StatementBlock optElseClause FunctionStatementOrDefList ControlStatementOrDefList ModuleControlBody %type <subtypeparse> ValueOrRange @@ -1148,6 +1149,7 @@ IDentifier IdentifierOrAddressKeyword ImportFromSpec InLineTemplate +int2enumStatement IntegerValue InterleavedConstruct InterleavedGuardElement @@ -1714,20 +1716,20 @@ optRunsOnComprefOrSelf %left '*' '/' ModKeyword RemKeyword %left UnarySign -%expect 25 +%expect 26 %start GrammarRoot /* -XXX Source of conflicts (25 S/R): +XXX Source of conflicts (26 S/R): -1.) 8 conflicts in one state +1.) 9 conflicts in one state The Expression after 'return' keyword is optional in ReturnStatement. -For 8 tokens the parser cannot decide whether the token is a part of +For 9 tokens the parser cannot decide whether the token is a part of the return expression (shift) or it is the beginning of the next statement (reduce). -2.) 8 distinct states, each with one conflict caused by token '[' +2.) 9 distinct states, each with one conflict caused by token '[' The local definitions in altsteps can be followed immediately by the guard expression. When the parser sees the '[' token it cannot decide whether it belongs to the local definition as array dimension or array subreference @@ -1741,6 +1743,7 @@ The situations are the following: - var t v <here> [ - var t v := ref.objid{...}.subref <here> [ - var template t v <here> [ +- var t v := function(...)<subrefs> <here> [ 3.) 1 conflict The sequence identifier.objid can be either the beginning of a module name @@ -1757,16 +1760,8 @@ non-standard language extension. 6.) 1 Conflict due to pattern concatenation -7.) 1 conflict -The TitanSpecificProfilerKeyword following the ReturnKeyword in a ReturnStatement -can either be the returned boolean value if followed by the DotRunningKeyword (shift) -or the next statement if followed by the DotStartKeyword or the DotStopKeyword (reduce). - Note that the parser implemented by bison always chooses to shift instead of -reduce in case of conflicts. This is the desired behaviour in situations 1.), -2.), 4.) and 7.) since the opposite alternative can be forced by the correct usage -of semi-colons. Situation 3.) does not cause any problems as anytype is not -supported at the moment. +reduce in case of conflicts. */ %% @@ -3919,6 +3914,7 @@ FunctionStatement: // 180 | StopExecutionStatement { $$ = $1; } | StopTestcaseStatement { $$ = $1; } | ProfilerStatement { $$ = $1; } +| int2enumStatement { $$ = $1; } ; FunctionInstance: /* refpard */ // 181 @@ -5088,6 +5084,7 @@ ControlStatement: /* Statement *stmt */ // 295 | SUTStatements { $$ = $1; } | StopExecutionStatement { $$ = $1; } | ProfilerStatement { $$ = $1; } +| int2enumStatement { $$ = $1; } ; /* A.1.6.2.1 Variable instantiation */ @@ -7560,6 +7557,20 @@ ProfilerStatement: } ; +int2enumStatement: + int2enumKeyword '(' optError Expression optError ',' optError Reference optError ')' + { + Ttcn::Reference* out_ref; + if ($8.is_ref) out_ref = $8.ref; + else { + out_ref = new Ttcn::Reference($8.id); + out_ref->set_location(infile, @8); + } + $$ = new Statement(Statement::S_INT2ENUM, $4, out_ref); + $$->set_location(infile, @$); + } +; + ProfilerRunningOp: TitanSpecificProfilerKeyword DotRunningKeyword { @@ -8345,8 +8356,10 @@ OpCall: // 611 else $$ = new Value(Value::V_ERROR); $$->set_location(infile, @$); } -| FunctionInstance +| FunctionInstance optExtendedFieldReference { + for (size_t i = 0; i < $2.nElements; i++) $1->add($2.elements[i]); + Free($2.elements); $$ = new Value(Value::V_REFD, $1); $$->set_location(infile, @$); } diff --git a/compiler2/ttcn3/comptype_attrib_la.l b/compiler2/ttcn3/comptype_attrib_la.l index ab77ee649..1a9a2088f 100644 --- a/compiler2/ttcn3/comptype_attrib_la.l +++ b/compiler2/ttcn3/comptype_attrib_la.l @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/compiler2/ttcn3/port.c b/compiler2/ttcn3/port.c index 2889ab5f4..74b6e8950 100644 --- a/compiler2/ttcn3/port.c +++ b/compiler2/ttcn3/port.c @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -620,8 +620,9 @@ static void generate_receive(char **def_ptr, char **src_ptr, failed_str, message_type->dispname); if (is_trigger) src = mputstr(src, "remove_msg_queue_head();\n"); src = mputprintf(src, "return %s;\n" - "} else if (!value_template.match(*my_head->message_%lu)) {\n", - failed_status, (unsigned long) message_index); + "} else if (!value_template.match(*my_head->message_%lu%s)) {\n", + failed_status, (unsigned long) message_index, + (omit_in_value_list ? ", TRUE" : "")); src = mputprintf(src, "const TTCN_Logger::Severity log_sev = %s;\n" "if (TTCN_Logger::log_this_event(log_sev)) {\n" @@ -629,7 +630,7 @@ static void generate_receive(char **def_ptr, char **src_ptr, "port_name, my_head->sender_component,\n" "TitanLoggerApiSimple::MatchingFailureType_reason::message__does__not__match__template,\n" "(TTCN_Logger::begin_event(log_sev, TRUE)," - " value_template.log_match(*my_head->message_%lu),\n" + " value_template.log_match(*my_head->message_%lu%s),\n" " TTCN_Logger::end_event_log2str())" ");\n" "}\n", @@ -637,7 +638,8 @@ static void generate_receive(char **def_ptr, char **src_ptr, "TTCN_Logger::MATCHING_MMUNSUCC" : "my_head->sender_component==SYSTEM_COMPREF ? " "TTCN_Logger::MATCHING_MMUNSUCC : TTCN_Logger::MATCHING_MCUNSUCC"), - (unsigned long) message_index); + (unsigned long) message_index, + (omit_in_value_list ? ", TRUE" : "")); if (is_trigger) src = mputstr(src, "remove_msg_queue_head();\n"); src = mputprintf(src, "return %s;\n" "} else {\n" @@ -653,7 +655,7 @@ static void generate_receive(char **def_ptr, char **src_ptr, "TTCN_Logger::log_matching_success(TitanLoggerApiSimple::PortType::message__,\n" "port_name, SYSTEM_COMPREF,\n" "(TTCN_Logger::begin_event(TTCN_Logger::MATCHING_MMSUCCESS, TRUE)," - " value_template.log_match(*my_head->message_%lu),\n" + " value_template.log_match(*my_head->message_%lu%s),\n" " TTCN_Logger::end_event_log2str()));\n" "}\n" "if (TTCN_Logger::log_this_event(TTCN_Logger::PORTEVENT_MMRECV)) " @@ -666,7 +668,8 @@ static void generate_receive(char **def_ptr, char **src_ptr, " TTCN_Logger::log_event_str(\": %s : \"),\n" "my_head->message_%lu->log(), TTCN_Logger::end_event_log2str()),\n" "msg_head_count+1);\n" - "}\n", (unsigned long) message_index, logger_operation, + "}\n", (unsigned long) message_index, + (omit_in_value_list ? ", TRUE" : ""), logger_operation, message_type->dispname, (unsigned long) message_index); } else { src = mputprintf(src, @@ -677,7 +680,7 @@ static void generate_receive(char **def_ptr, char **src_ptr, "TTCN_Logger::log_matching_success(TitanLoggerApiSimple::PortType::message__,\n" "port_name, my_head->sender_component,\n" "(TTCN_Logger::begin_event(log_sev, TRUE)," - " value_template.log_match(*my_head->message_%lu),\n" + " value_template.log_match(*my_head->message_%lu%s),\n" " TTCN_Logger::end_event_log2str()));\n" "}\n" "log_sev = my_head->sender_component==SYSTEM_COMPREF?" @@ -689,7 +692,8 @@ static void generate_receive(char **def_ptr, char **src_ptr, "(TTCN_Logger::begin_event(log_sev,TRUE), TTCN_Logger::log_event_str(\": %s : \"),\n" "my_head->message_%lu->log(), TTCN_Logger::end_event_log2str()),\n" "msg_head_count+1);\n" - "}\n", (unsigned long) message_index, logger_operation, + "}\n", (unsigned long) message_index, + (omit_in_value_list ? ", TRUE" : ""), logger_operation, message_type->dispname, (unsigned long) message_index); } @@ -893,7 +897,7 @@ static void generate_proc_incoming_data_logging(char **src_ptr, "TTCN_Logger::log_matching_success(TitanLoggerApiSimple::PortType::procedure__,\n" "port_name, SYSTEM_COMPREF,\n" "(TTCN_Logger::begin_event(TTCN_Logger::MATCHING_PMSUCCESS, TRUE)," - " %s(*proc_queue_head->%s_%lu),\n" + " %s(*proc_queue_head->%s_%lu%s),\n" " TTCN_Logger::end_event_log2str()));\n" "}\n" "if (TTCN_Logger::log_this_event(TTCN_Logger::PORTEVENT_PMIN)) " @@ -905,6 +909,7 @@ static void generate_proc_incoming_data_logging(char **src_ptr, " TTCN_Logger::end_event_log2str()),\n" "msg_head_count+1);\n" "}\n", match_str, op_str, (unsigned long) signature_index, + (omit_in_value_list ? ", TRUE" : ""), op_str, (is_check ? "TRUE" : "FALSE"), op_str, (unsigned long) signature_index); } else { *src_ptr = mputprintf(*src_ptr, "TTCN_Logger::Severity log_sev = " @@ -1012,12 +1017,13 @@ static void generate_getcall(char **def_ptr, char **src_ptr, "signature %s.\", port_name);\n" "return ALT_NO;\n" "} else if (!getcall_template.match_call" - "(*proc_queue_head->call_%lu)) {\n", + "(*proc_queue_head->call_%lu%s)) {\n", (unsigned long) signature_index, is_address ? "TTCN_Logger::MATCHING_PMUNSUCC" : "proc_queue_head->sender_component==SYSTEM_COMPREF ? " "TTCN_Logger::MATCHING_PMUNSUCC:TTCN_Logger::MATCHING_PCUNSUCC", - signature->dispname, (unsigned long) signature_index); + signature->dispname, (unsigned long) signature_index, + (omit_in_value_list ? ", TRUE" : "")); src = mputprintf(src, "const TTCN_Logger::Severity log_sev = %s;\n" "if (TTCN_Logger::log_this_event(log_sev)) {\n" @@ -1025,7 +1031,7 @@ static void generate_getcall(char **def_ptr, char **src_ptr, "port_name, proc_queue_head->sender_component,\n" "TitanLoggerApiSimple::MatchingFailureType_reason::parameters__of__call__do__not__match__template,\n" "(TTCN_Logger::begin_event(log_sev, TRUE)," - " getcall_template.log_match_call(*proc_queue_head->call_%lu)," + " getcall_template.log_match_call(*proc_queue_head->call_%lu%s)," " TTCN_Logger::end_event_log2str()));\n" "}\n" "return ALT_NO;\n" @@ -1036,7 +1042,9 @@ static void generate_getcall(char **def_ptr, char **src_ptr, "TTCN_Logger::MATCHING_PMUNSUCC" : "proc_queue_head->sender_component==SYSTEM_COMPREF ? " "TTCN_Logger::MATCHING_PMUNSUCC : TTCN_Logger::MATCHING_PCUNSUCC"), - (unsigned long) signature_index, (unsigned long) signature_index); + (unsigned long) signature_index, + (omit_in_value_list ? ", TRUE" : ""), + (unsigned long) signature_index); if (is_address) src = mputstr(src, "*proc_queue_head->sender_address;\n"); else src = mputstr(src, "proc_queue_head->sender_component;\n"); @@ -1131,11 +1139,12 @@ static void generate_getreply(char **def_ptr, char **src_ptr, "signature %s.\", port_name);\n" "return ALT_NO;\n" "} else if (!getreply_template.match_reply" - "(*proc_queue_head->reply_%lu)) {\n", (unsigned long) signature_index, + "(*proc_queue_head->reply_%lu%s)) {\n", (unsigned long) signature_index, is_address ? "TTCN_Logger::MATCHING_PMUNSUCC" : "proc_queue_head->sender_component==SYSTEM_COMPREF?" "TTCN_Logger::MATCHING_PMUNSUCC:TTCN_Logger::MATCHING_PCUNSUCC", - signature->dispname, (unsigned long) signature_index); + signature->dispname, (unsigned long) signature_index, + (omit_in_value_list ? ", TRUE" : "")); src = mputprintf(src, "const TTCN_Logger::Severity log_sev = %s;\n" @@ -1144,7 +1153,7 @@ static void generate_getreply(char **def_ptr, char **src_ptr, "port_name, proc_queue_head->sender_component,\n" "TitanLoggerApiSimple::MatchingFailureType_reason::parameters__of__reply__do__not__match__template,\n" "(TTCN_Logger::begin_event(log_sev, TRUE)," - " getreply_template.log_match_reply(*proc_queue_head->reply_%lu), " + " getreply_template.log_match_reply(*proc_queue_head->reply_%lu%s), " " TTCN_Logger::end_event_log2str()));\n" "}\n" "return ALT_NO;\n" @@ -1155,7 +1164,9 @@ static void generate_getreply(char **def_ptr, char **src_ptr, "TTCN_Logger::MATCHING_PMUNSUCC" : "proc_queue_head->sender_component==SYSTEM_COMPREF ? " "TTCN_Logger::MATCHING_PMUNSUCC : TTCN_Logger::MATCHING_PCUNSUCC"), - (unsigned long) signature_index, (unsigned long) signature_index); + (unsigned long) signature_index, + (omit_in_value_list ? ", TRUE" : ""), + (unsigned long) signature_index); if (is_address) src = mputstr(src, "*proc_queue_head->sender_address;\n"); else src = mputstr(src, "proc_queue_head->sender_component;\n"); @@ -1252,10 +1263,11 @@ static void generate_catch(char **def_ptr, char **src_ptr, "CHARSTRING(\"%s\"));\n" "return ALT_NO;\n" "} else if (!catch_template.match" - "(*proc_queue_head->exception_%lu)) {\n", + "(*proc_queue_head->exception_%lu%s)) {\n", (unsigned long) signature_index, (is_address ? "SYSTEM_COMPREF": "proc_queue_head->sender_component"), - signature->dispname, (unsigned long) signature_index); + signature->dispname, (unsigned long) signature_index, + (omit_in_value_list ? ", TRUE" : "")); if (is_address) { src = mputstr(src, "if (TTCN_Logger::log_this_event(" "TTCN_Logger::MATCHING_PMUNSUCC)) {\n"); @@ -1270,7 +1282,7 @@ static void generate_catch(char **def_ptr, char **src_ptr, "port_name, proc_queue_head->sender_component,\n" "TitanLoggerApiSimple::MatchingFailureType_reason::exception__does__not__match__template,\n" "(TTCN_Logger::begin_event(%s, TRUE),\n" - " catch_template.log_match(*proc_queue_head->exception_%lu),\n" + " catch_template.log_match(*proc_queue_head->exception_%lu%s),\n" " TTCN_Logger::end_event_log2str()));\n" "}\n" "return ALT_NO;\n" @@ -1278,7 +1290,9 @@ static void generate_catch(char **def_ptr, char **src_ptr, "catch_template.set_value(*proc_queue_head->exception_%lu);\n" "if (sender_ptr != NULL) *sender_ptr = ", (is_address ? "TTCN_Logger::MATCHING_PMUNSUCC" : "log_sev"), - (unsigned long) signature_index, (unsigned long) signature_index); + (unsigned long) signature_index, + (omit_in_value_list ? ", TRUE" : ""), + (unsigned long) signature_index); if (is_address) src = mputstr(src, "*proc_queue_head->sender_address;\n"); else src = mputstr(src, "proc_queue_head->sender_component;\n"); diff --git a/compiler2/ttcn3/port.h b/compiler2/ttcn3/port.h index 5fe27f987..96d0c33d8 100644 --- a/compiler2/ttcn3/port.h +++ b/compiler2/ttcn3/port.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/ttcn3/pstring_la.l b/compiler2/ttcn3/pstring_la.l index 0072f9f69..39e157f0d 100644 --- a/compiler2/ttcn3/pstring_la.l +++ b/compiler2/ttcn3/pstring_la.l @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 @@ -37,10 +37,10 @@ using namespace Common; * @param [in,out] current_line * @param [in,out] current_column * */ -static void update_location(int start_index, int end_index, - int& current_line, int& current_column) +static void update_location(size_t start_index, size_t end_index, + size_t& current_line, size_t& current_column) { - for (int i = start_index; i < yyleng && i < end_index; i++) { + for (size_t i = start_index; i < yyleng && i < end_index; i++) { // count CR, count LF, but count CR + LF as one switch (yytext[i]) { case '\r': @@ -64,7 +64,7 @@ static void update_location(int start_index, int end_index, update_location(start_index, end_index, current_line, current_column) #define YY_DECL static PatternString *yylex(const char *current_file, \ - int current_line, int current_column) + size_t current_line, size_t current_column) %} /* ***************** definitions ***************** */ @@ -110,12 +110,12 @@ if (in_set) { size_t num_id = identifiers.size(); bool error = false; Ttcn::Reference *ref = 0; - int last = 0; // last "consumed" index into yytext + size_t last = 0; // last "consumed" index into yytext int old_column = 0, old_line = 0; // the beginning of the entire reference for (size_t i = 0; i < num_id; ++i) { const string & id_str = *identifiers[i]; - const int & id_beg = *beginnings [i]; + const size_t & id_beg = *beginnings [i]; if (Identifier::is_reserved_word(id_str, Identifier::ID_TTCN)) { UPDATE_LOCATION(last, id_beg); // consume before identifier int first_line = current_line, first_column = current_column; @@ -233,10 +233,10 @@ if (in_set) { } "\\q"{WS}"{"{WS}{NUMBER}{WS}","{WS}{NUMBER}{WS}","{WS}{NUMBER}{WS}","{WS}{NUMBER}{WS}"}" { - int group_begin = 3; + size_t group_begin = 3; while (!isdigit(yytext[group_begin])) group_begin++; UPDATE_LOCATION(0, group_begin); - int group_len = 1; + size_t group_len = 1; while (isdigit(yytext[group_begin + group_len])) group_len++; string group_str(group_len, yytext + group_begin); Location group_loc(current_file, current_line, current_column, current_line, @@ -247,7 +247,7 @@ if (in_set) { "the range 0 .. 127 instead of %s", Int2string(group).c_str()); group = group < 0 ? 0 : 127; } - int plane_begin = group_begin + group_len + 1; + size_t plane_begin = group_begin + group_len + 1; while (!isdigit(yytext[plane_begin])) plane_begin++; UPDATE_LOCATION(group_begin, plane_begin); int plane_len = 1; @@ -261,10 +261,10 @@ if (in_set) { "the range 0 .. 255 instead of %s", Int2string(plane).c_str()); plane = plane < 0 ? 0 : 255; } - int row_begin = plane_begin + plane_len + 1; + size_t row_begin = plane_begin + plane_len + 1; while (!isdigit(yytext[row_begin])) row_begin++; UPDATE_LOCATION(plane_begin, row_begin); - int row_len = 1; + size_t row_len = 1; while (isdigit(yytext[row_begin + row_len])) row_len++; string row_str(row_len, yytext + row_begin); Location row_loc(current_file, current_line, current_column, current_line, @@ -275,10 +275,10 @@ if (in_set) { "the range 0 .. 255 instead of %s", Int2string(row).c_str()); row = row < 0 ? 0 : 255; } - int cell_begin = row_begin + row_len + 1; + size_t cell_begin = row_begin + row_len + 1; while (!isdigit(yytext[cell_begin])) cell_begin++; UPDATE_LOCATION(row_begin, cell_begin); - int cell_len = 1; + size_t cell_len = 1; while (isdigit(yytext[cell_begin + cell_len])) cell_len++; string cell_str(cell_len, yytext + cell_begin); Location cell_loc(current_file, current_line, current_column, current_line, @@ -441,7 +441,7 @@ if (in_set) { loc.error("Number of repetitions `#(n)' cannot be given inside a set " "expression"); } else { - int number_begin = 2; + size_t number_begin = 2; while (!isdigit(yytext[number_begin])) number_begin++; UPDATE_LOCATION(0, number_begin); int number_len = 1; @@ -467,7 +467,7 @@ if (in_set) { loc.error("Number of repetitions `#(n,m)' cannot be given inside a set " "expression"); } else { - int lower_begin = 2; + size_t lower_begin = 2; while (!isdigit(yytext[lower_begin])) lower_begin++; UPDATE_LOCATION(0, lower_begin); int lower_len = 1; @@ -482,7 +482,7 @@ if (in_set) { Int2string(lower).c_str()); lower = 0; } - int upper_begin = lower_begin + lower_len + 1; + size_t upper_begin = lower_begin + lower_len + 1; while (!isdigit(yytext[upper_begin])) upper_begin++; UPDATE_LOCATION(lower_begin, upper_begin); int upper_len = 1; @@ -521,7 +521,7 @@ if (in_set) { loc.error("Number of repetitions `#(n,)' cannot be given inside a set " "expression"); } else { - int lower_begin = 2; + size_t lower_begin = 2; while (!isdigit(yytext[lower_begin])) lower_begin++; UPDATE_LOCATION(0, lower_begin); int lower_len = 1; @@ -549,7 +549,7 @@ if (in_set) { loc.error("Number of repetitions `#(,m)' cannot be given inside a set " "expression"); } else { - int upper_begin = 3; + size_t upper_begin = 3; while (!isdigit(yytext[upper_begin])) upper_begin++; UPDATE_LOCATION(0, upper_begin); int upper_len = 1; diff --git a/compiler2/ttcn3/rawAST.l b/compiler2/ttcn3/rawAST.l index 84e3017f8..e74a8f27b 100644 --- a/compiler2/ttcn3/rawAST.l +++ b/compiler2/ttcn3/rawAST.l @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 @@ -172,7 +172,7 @@ omit RETURN(XOmitKeyword); current_column += 2; bool backslash_flag = false; yylval.str = memptystr(); - for (int i = 2; i < yyleng - 2; ) { + for (size_t i = 2; i < yyleng - 2; ) { if (!backslash_flag && (yytext[i] == '\\' || yytext[i] == '"') && yytext[i + 1] == '"' && (yytext[i + 2] == '\\' || yytext[i + 2] == '"') && @@ -284,6 +284,7 @@ BITORDERINFIELD { BEGIN(rawcodec); RETURN(XBitOrderInFieldKeyword); } BITORDERINOCTET { BEGIN(rawcodec); RETURN(XBitOrderInOctetKeyword); } HEXORDER { BEGIN(rawcodec); RETURN(XHexOrderKeyword); } TOPLEVEL { BEGIN(rawcodec); RETURN(XToplevelKeyword); } +IntX { RETURN(XIntXKeyword); } <rawcodec>{ yes { yylval.enumval = XDEFYES; RETURN(XYes); } @@ -434,16 +435,24 @@ null RETURN(XKWnull); name RETURN(XKWname); value RETURN(XKWvalue); default RETURN(XKWdefault); +extend RETURN(XKWextend); +metainfo RETURN(XKWmetainfo); +for RETURN(XKWfor); +unbound RETURN(XKWunbound); [(] { BEGIN(jsonvalue); RETURN(XJsonValueStart); } {IDENTIFIER} { yylval.str = mcopystr(yytext); RETURN(XAliasToken); } [^: \t] { rawAST_error("invalid JSON token"); } } <jsonvalue>{ -[\\]. { +[\\][\\][)] { /* \\) -> \) would not work with the other rules */ + yylval.str = mcopystr("\\)"); + RETURN(XJsonValueSegment); +} +[\\]. { /* \) -> ), all others are treated literally */ if (yytext[1] == ')') yylval.str = mcopystr(")"); else yylval.str = mcopystr(yytext); - RETURN(XJsonValueSegment); + RETURN(XJsonValueSegment); } [)] { BEGIN(jsoncodec); RETURN(XJsonValueEnd); } [\"][\"] { yylval.str = mcopystr("\\\""); RETURN(XJsonValueSegment); } @@ -466,7 +475,7 @@ definite RETURN(XKWdefinite); current_column++; bool backslash_flag = false; yylval.str = memptystr(); - for (int i = 1; i < yyleng - 1; ) { + for (size_t i = 1; i < yyleng - 1; ) { if (!backslash_flag && (yytext[i] == '\'' || yytext[i] == '"') && yytext[i + 1] == yytext[i]) { /* transform '' -> \' and "" -> \" */ diff --git a/compiler2/ttcn3/rawAST.y b/compiler2/ttcn3/rawAST.y index 6f9cfe3a1..f210f480b 100644 --- a/compiler2/ttcn3/rawAST.y +++ b/compiler2/ttcn3/rawAST.y @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 @@ -151,6 +151,7 @@ static void yyprint(FILE *file, int type, const YYSTYPE& value); %token <enumval> XHigh %token XToplevelKeyword %token XRepeatableKeyword +%token XIntXKeyword /* XER attributes */ %token XKWall "all" @@ -258,6 +259,10 @@ static void yyprint(FILE *file, int type, const YYSTYPE& value); %token XAliasToken "JSON alias" %token XKWvalue "value" %token XKWdefault "default" +%token XKWextend "extend" +%token XKWmetainfo "metainfo" +%token XKWfor "for" +%token XKWunbound "unbound" %token XJsonValueStart "(" %token XJsonValueEnd ")" %token XJsonValueSegment "JSON value" @@ -274,7 +279,7 @@ static void yyprint(FILE *file, int type, const YYSTYPE& value); XLengthIndexDef XStructFieldRefOrEmpty XStructFieldRef %type <str> - XEncodeToken XmatchDef XAliasToken XJsonValueSegment XJsonValue + XEncodeToken XmatchDef XAliasToken XJsonValueSegment XJsonValueCore XJsonValue %type <decodetoken> XDecodeToken @@ -329,6 +334,7 @@ Xtoken Xstring XAliasToken XJsonValueSegment +XJsonValueCore XJsonValue %destructor { delete $$; } @@ -454,6 +460,8 @@ XSingleEncodingDef : XPaddingDef { rawstruct->repeatable = $1;raw_f=true; } | XToplevelDef { rawstruct->topleveleind=1; raw_f=true;} + | XIntXKeyword + { rawstruct->intx = true; raw_f = true; } /* TEXT encoder keywords */ | XBeginDef { text_f=true; } @@ -1498,7 +1506,7 @@ xsddata: /* XSD:something */ // JSON encoder XJsonDef: - XKWjson XOptSpaces ':' XOptSpaces XJsonAttribute + XOptSpaces XKWjson XOptSpaces ':' XOptSpaces XJsonAttribute XOptSpaces ; XJsonAttribute: @@ -1506,6 +1514,8 @@ XJsonAttribute: | XNameAs | XAsValue | XDefault +| XExtend +| XMetainfoForUnbound ; XOmitAsNull: @@ -1521,13 +1531,26 @@ XAsValue: ; XDefault: - XKWdefault XOptSpaces XJsonValueStart XJsonValue XJsonValueEnd { jsonstruct->default_value = mcopystr($4); } -| XKWdefault XOptSpaces XJsonValueStart XJsonValueEnd { jsonstruct->default_value = mcopystr(""); } + XKWdefault XOptSpaces XJsonValue { jsonstruct->default_value = mcopystr($3); } +; + +XExtend: + XKWextend XOptSpaces XJsonValue XOptSpaces ':' XOptSpaces XJsonValue + { jsonstruct->schema_extensions.add(new JsonSchemaExtension($3, $7)); } ; XJsonValue: - XJsonValue XJsonValueSegment { $$ = mcopystr($1); $$ = mputstr($$, $2); } -| XJsonValueSegment { $$ = mcopystr($1); } + XJsonValueStart XJsonValueCore XJsonValueEnd { $$ = mcopystr($2); } +| XJsonValueStart XJsonValueEnd { $$ = mcopystr(""); } +; + +XJsonValueCore: + XJsonValueCore XJsonValueSegment { $$ = mcopystr($1); $$ = mputstr($$, $2); } +| XJsonValueSegment { $$ = mcopystr($1); } +; + +XMetainfoForUnbound: + XKWmetainfo XOptSpaces XKWfor XOptSpaces XKWunbound { jsonstruct->metainfo_unbound = true; } ; XOptSpaces: diff --git a/compiler2/ttcn3/rawASTspec.h b/compiler2/ttcn3/rawASTspec.h index 04455ccc0..74aab749b 100644 --- a/compiler2/ttcn3/rawASTspec.h +++ b/compiler2/ttcn3/rawASTspec.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/ttcn3/signature.c b/compiler2/ttcn3/signature.c index 0d4a4ac1f..9cb0ae39f 100644 --- a/compiler2/ttcn3/signature.c +++ b/compiler2/ttcn3/signature.c @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -370,8 +370,7 @@ void defSignatureClasses(const signature_def *sdef, output_struct *output) /* otherwise constructor is not needed */ /* set_parameters function (used for param redirect in getreply) */ - if ((sdef->parameters.nElements - num_in) > 0 - || sdef->return_type != NULL) { + if (num_out > 0 || sdef->return_type != NULL) { /* if there are "out" or "inout" parameters or a "return" ... */ def = mputprintf(def, "void set_parameters(const %s_reply& reply_par) " "const;\n", name); @@ -692,17 +691,17 @@ void defSignatureClasses(const signature_def *sdef, output_struct *output) } /* match function */ - def = mputprintf(def, "boolean match(const %s_exception& other_value) " - "const;\n", name); + def = mputprintf(def, "boolean match(const %s_exception& other_value," + "boolean legacy = FALSE) const;\n", name); src = mputprintf(src, "boolean %s_exception_template::match(const " - "%s_exception& other_value) const\n" + "%s_exception& other_value, boolean legacy) const\n" "{\n" "if (exception_selection != other_value.get_selection()) " "return FALSE;\n" "switch (exception_selection) {\n", name, name); for (i = 0; i < sdef->exceptions.nElements; i++) { src = mputprintf(src, "case %s_%s:\n" - "return field_%s->match(other_value.%s_field());\n", + "return field_%s->match(other_value.%s_field(), legacy);\n", selection_prefix, sdef->exceptions.elements[i].altname, sdef->exceptions.elements[i].altname, sdef->exceptions.elements[i].altname); @@ -715,10 +714,10 @@ void defSignatureClasses(const signature_def *sdef, output_struct *output) "}\n\n", dispname); /* log_match function */ - def = mputprintf(def, "void log_match(const %s_exception& other_value) " - "const;\n", name); + def = mputprintf(def, "void log_match(const %s_exception& other_value, " + "boolean legacy = FALSE) const;\n", name); src = mputprintf(src, "void %s_exception_template::log_match(const " - "%s_exception& other_value) const\n" + "%s_exception& other_value, boolean legacy) const\n" "{\n" "TTCN_Logger::log_event_str(\"%s, \");\n" "if (exception_selection == other_value.get_selection()) {\n" @@ -726,7 +725,7 @@ void defSignatureClasses(const signature_def *sdef, output_struct *output) for (i = 0; i < sdef->exceptions.nElements; i++) { src = mputprintf(src, "case %s_%s:\n" "TTCN_Logger::log_event_str(\"%s : \");\n" - "field_%s->log_match(other_value.%s_field());\n" + "field_%s->log_match(other_value.%s_field(), legacy);\n" "break;\n", selection_prefix, sdef->exceptions.elements[i].altname, sdef->exceptions.elements[i].dispname, @@ -752,7 +751,7 @@ void defSignatureClasses(const signature_def *sdef, output_struct *output) src = mputstr(src, "default:\n" "TTCN_Logger::log_event_str(\"<invalid selector>\");\n" "}\n" - "if (match(other_value)) " + "if (match(other_value, legacy)) " "TTCN_Logger::log_event_str(\" matched\");\n" "else TTCN_Logger::log_event_str(\" unmatched\");\n" "}\n" @@ -919,17 +918,17 @@ void defSignatureClasses(const signature_def *sdef, output_struct *output) /* match_call function for matching with xxx_call signature-value */ if (num_in > 0) { boolean first_param = TRUE; - def = mputprintf(def, "boolean match_call(const %s_call& match_value) " - "const;\n", name); + def = mputprintf(def, "boolean match_call(const %s_call& match_value, " + "boolean legacy = FALSE) const;\n", name); src = mputprintf(src, "boolean %s_template::match_call(const %s_call& " - "match_value) const\n" + "match_value, boolean legacy) const\n" "{\n" "return ", name, name); for (i = 0; i < sdef->parameters.nElements; i++) { if (sdef->parameters.elements[i].direction != PAR_OUT) { if (first_param) first_param = FALSE; else src = mputstr(src, " &&\n"); - src = mputprintf(src, "param_%s.match(match_value.%s())", + src = mputprintf(src, "param_%s.match(match_value.%s(), legacy)", sdef->parameters.elements[i].name, sdef->parameters.elements[i].name); } @@ -938,7 +937,7 @@ void defSignatureClasses(const signature_def *sdef, output_struct *output) "}\n\n"); } else { def = mputprintf(def, "inline boolean match_call(const %s_call&" - ") const { return TRUE; }\n", name); + ", boolean legacy = FALSE) const { return TRUE; }\n", name); } if (!sdef->is_noblock) { @@ -946,16 +945,16 @@ void defSignatureClasses(const signature_def *sdef, output_struct *output) boolean first_param = TRUE; /* match_reply function for matching with xxx_reply value */ def = mputprintf(def, "boolean match_reply(const %s_reply& " - "match_value) const;\n", name); + "match_value, boolean legacy = FALSE) const;\n", name); src = mputprintf(src, "boolean %s_template::match_reply(const " - "%s_reply& match_value) const\n" + "%s_reply& match_value, boolean legacy) const\n" "{\n" "return ", name, name); for (i = 0; i < sdef->parameters.nElements; i++) { if(sdef->parameters.elements[i].direction != PAR_IN) { if (first_param) first_param = FALSE; else src = mputstr(src, " &&\n"); - src = mputprintf(src, "param_%s.match(match_value.%s())", + src = mputprintf(src, "param_%s.match(match_value.%s(), legacy)", sdef->parameters.elements[i].name, sdef->parameters.elements[i].name); } @@ -964,13 +963,13 @@ void defSignatureClasses(const signature_def *sdef, output_struct *output) if (first_param) /*first_param = FALSE*/; else src = mputstr(src, " &&\n"); src = mputstr(src, - "reply_value.match(match_value.return_value())"); + "reply_value.match(match_value.return_value(), legacy)"); } src = mputstr(src, ";\n" "}\n\n"); } else { def = mputprintf(def, "inline boolean match_reply(const %s_reply&" - ") const { return TRUE; }\n", name); + ", boolean legacy = FALSE) const { return TRUE; }\n", name); } } @@ -1007,13 +1006,13 @@ void defSignatureClasses(const signature_def *sdef, output_struct *output) src = mputstr(src, "}\n\n"); /* log_match_call function */ - def = mputprintf(def, "void log_match_call(const %s_call& match_value) " - "const;\n", name); + def = mputprintf(def, "void log_match_call(const %s_call& match_value, " + "boolean legacy = FALSE) const;\n", name); src = mputprintf(src, "void %s_template::log_match_call(const %s_call& " , name, name); if (num_in > 0) { boolean first_param = TRUE; - src = mputstr(src, "match_value) const\n{\n"); + src = mputstr(src, "match_value, boolean legacy) const\n{\n"); for (i = 0; i < sdef->parameters.nElements; i++) { if (sdef->parameters.elements[i].direction != PAR_OUT) { src = mputstr(src, "TTCN_Logger::log_event_str(\""); @@ -1022,7 +1021,7 @@ void defSignatureClasses(const signature_def *sdef, output_struct *output) first_param = FALSE; } else src = mputc(src, ','); src = mputprintf(src, " %s := \");\n" - "param_%s.log_match(match_value.%s());\n", + "param_%s.log_match(match_value.%s(), legacy);\n", sdef->parameters.elements[i].dispname, sdef->parameters.elements[i].name, sdef->parameters.elements[i].name); @@ -1030,20 +1029,20 @@ void defSignatureClasses(const signature_def *sdef, output_struct *output) } src = mputstr(src, "TTCN_Logger::log_event_str(\" }\");\n"); } else { - src = mputstr(src, ") const\n{\n" + src = mputstr(src, ", boolean) const\n{\n" "TTCN_Logger::log_event_str(\"{ } with { } matched\");\n"); } src = mputstr(src, "}\n\n"); if (!sdef->is_noblock) { /* log_match_reply function */ - def = mputprintf(def, "void log_match_reply(const %s_reply& match_value) " - "const;\n", name); + def = mputprintf(def, "void log_match_reply(const %s_reply& match_value, " + "boolean legacy = FALSE) const;\n", name); src = mputprintf(src, "void %s_template::log_match_reply(const %s_reply& " , name, name); if (num_out > 0) { boolean first_param = TRUE; - src = mputstr(src, "match_value) const\n{\n"); + src = mputstr(src, "match_value, boolean legacy) const\n{\n"); for (i = 0; i < sdef->parameters.nElements; i++) { if (sdef->parameters.elements[i].direction != PAR_IN) { src = mputstr(src, "TTCN_Logger::log_event_str(\""); @@ -1052,7 +1051,7 @@ void defSignatureClasses(const signature_def *sdef, output_struct *output) first_param = FALSE; } else src = mputc(src, ','); src = mputprintf(src, " %s := \");\n" - "param_%s.log_match(match_value.%s());\n", + "param_%s.log_match(match_value.%s(), legacy);\n", sdef->parameters.elements[i].dispname, sdef->parameters.elements[i].name, sdef->parameters.elements[i].name); @@ -1061,18 +1060,18 @@ void defSignatureClasses(const signature_def *sdef, output_struct *output) if (sdef->return_type != NULL) { src = mputstr(src, "TTCN_Logger::log_event_str(\" } value " "\");\n" - "reply_value.log_match(match_value.return_value());\n"); + "reply_value.log_match(match_value.return_value(), legacy);\n"); } else { src = mputstr(src, "TTCN_Logger::log_event_str(\" }\");\n"); } } else { if (sdef->return_type != NULL) { - src = mputstr(src, "match_value) const\n{\n" + src = mputstr(src, "match_value, boolean legacy) const\n{\n" "TTCN_Logger::log_event_str(\"{ } with { } " "matched value \");\n" - "reply_value.log_match(match_value.return_value());\n"); + "reply_value.log_match(match_value.return_value(), legacy);\n"); } else { - src = mputstr(src, ") const\n{\n" + src = mputstr(src, ", boolean) const\n{\n" "TTCN_Logger::log_event_str(\"{ } with { } " "matched\");\n"); } diff --git a/compiler2/ttcn3/signature.h b/compiler2/ttcn3/signature.h index c0d202a50..096327839 100644 --- a/compiler2/ttcn3/signature.h +++ b/compiler2/ttcn3/signature.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/ttcn3/ttcn3_preparser.h b/compiler2/ttcn3/ttcn3_preparser.h index bb684ee32..9e7318048 100644 --- a/compiler2/ttcn3/ttcn3_preparser.h +++ b/compiler2/ttcn3/ttcn3_preparser.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/ttcn3/ttcn3_preparser.l b/compiler2/ttcn3/ttcn3_preparser.l index c33a672c7..cefefd26a 100644 --- a/compiler2/ttcn3/ttcn3_preparser.l +++ b/compiler2/ttcn3/ttcn3_preparser.l @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/compiler2/ttcn3_makefilegen.1 b/compiler2/ttcn3_makefilegen.1 index d620b3fea..4c41a154c 100644 --- a/compiler2/ttcn3_makefilegen.1 +++ b/compiler2/ttcn3_makefilegen.1 @@ -3,12 +3,14 @@ ttcn3_makefilegen \- Makefile Generator .SH SYNOPSIS .B ttcn3_makefilegen -.RB "[\| " \-acdfglpRsw " \|]" +.RB "[\| " \-acdfglMpRsw " \|]" .RB "[\| " \-e .IR " ETS_name" " \|]" .RB "[\| " \-o .IR " dir|file" " \|]" .RB "[\| " \-O +.IR " file" " \|]" +.RB "[\| " \-z .IR " file" " \|] ..." TTCN3_module[.ttcn] ... ASN1_module[.asn] ... Testport_name[.cc] ... .br @@ -89,6 +91,22 @@ objects. It can be used to speed up the linking phase, in the price of somewhat performance and increased memory usage. It's recommended to use this flag only in the development phase of the project. This option is not supported on Windows. .TP +.B \-M +Allows the use of the value +.B omit +in template lists and complemented template lists (legacy behavior). +If set, an omitted field will match a template list, if the value +.B omit +appears in the list, and it will match a complemented template list, if +.B omit +is not in the list (the +.B ifpresent +attribute can still be used for matching omitted fields). This also affects the +.B ispresent +operation and the +.B present +template restriction accordingly. +.TP .B \-p Generate Makefile with .I TTCN-3 preprocessing. @@ -115,6 +133,14 @@ and license key information and exits. Suppresses all .I warning messages. +.TP +.BI \-z " file" +Enables code coverage and profiling in the TTCN-3 files listed in the +.I file +argument. The TTCN-3 files in the list must be separated by new lines and must +also appear among the makefile generator's arguments (this switch is ignored if the +.B \-t +option is present). .SH ENVIRONMENT VARIABLES .TP @@ -145,7 +171,7 @@ Ericsson document 2/198 17-CRL 113 200 Uen: .SH AUTHOR This manpage is written by Janos Zoltan Szabo, Ericsson Telecom AB .br -Copyright (c) 2000-2014 Ericsson Telecom AB +Copyright (c) 2000-2015 Ericsson Telecom AB .br All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 diff --git a/compiler2/union.c b/compiler2/union.c index e469f4abf..1e75686f3 100644 --- a/compiler2/union.c +++ b/compiler2/union.c @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -352,11 +352,15 @@ void defUnionClass(struct_def const *sdef, output_struct *output) "param.error(\"Field `%%s' not found in union type `%s'\", param_field);\n" " }\n" " param.basic_check(Module_Param::BC_VALUE, \"union value\");\n" - " if (param.get_type()==Module_Param::MP_Value_List && param.get_size()==0) return;\n" - " if (param.get_type()!=Module_Param::MP_Assignment_List) {\n" + " Module_Param_Ptr mp = ¶m;\n" + " if (param.get_type() == Module_Param::MP_Reference) {\n" + " mp = param.get_referenced_param();\n" + " }\n" + " if (mp->get_type()==Module_Param::MP_Value_List && mp->get_size()==0) return;\n" + " if (mp->get_type()!=Module_Param::MP_Assignment_List) {\n" " param.error(\"union value with field name was expected\");\n" " }\n" - " Module_Param* mp_last = param.get_elem(param.get_size()-1);\n", dispname); + " Module_Param* mp_last = mp->get_elem(mp->get_size()-1);\n", dispname); for (i = 0; i < sdef->nElements; i++) { src = mputprintf(src, @@ -368,6 +372,54 @@ void defUnionClass(struct_def const *sdef, output_struct *output) src = mputprintf(src, " mp_last->error(\"Field %%s does not exist in type %s.\", mp_last->get_id()->get_name());\n" "}\n\n", dispname); + + /* get param function */ + def = mputstr(def, "Module_Param* get_param(Module_Param_Name& param_name) const;\n"); + src = mputprintf(src, + "Module_Param* %s::get_param(Module_Param_Name& param_name) const\n" + "{\n" + " if (!is_bound()) {\n" + " return new Module_Param_Unbound();\n" + " }\n" + " if (param_name.next_name()) {\n" + // Haven't reached the end of the module parameter name + // => the name refers to one of the fields, not to the whole union + " char* param_field = param_name.get_current_name();\n" + " if (param_field[0] >= '0' && param_field[0] <= '9') {\n" + " TTCN_error(\"Unexpected array index in module parameter reference, \"\n" + " \"expected a valid field name for union type `%s'\");\n" + " }\n" + " ", name, dispname); + for (i = 0; i < sdef->nElements; i++) { + src = mputprintf(src, + "if (strcmp(\"%s\", param_field) == 0) {\n" + " return %s%s().get_param(param_name);\n" + " } else ", + sdef->elements[i].dispname, at_field, sdef->elements[i].name); + } + src = mputprintf(src, + "TTCN_error(\"Field `%%s' not found in union type `%s'\", param_field);\n" + " }\n" + " Module_Param* mp_field = NULL;\n" + " switch(union_selection) {\n" + , name); + for (i = 0; i < sdef->nElements; ++i) { + src = mputprintf(src, + " case %s_%s:\n" + " mp_field = field_%s->get_param(param_name);\n" + " mp_field->set_id(new Module_Param_FieldName(mcopystr(\"%s\")));\n" + " break;\n" + , selection_prefix, sdef->elements[i].name + , sdef->elements[i].name, sdef->elements[i].dispname); + } + src = mputstr(src, + " default:\n" + " break;\n" + " }\n" + " Module_Param_Assignment_List* mp = new Module_Param_Assignment_List();\n" + " mp->add_elem(mp_field);\n" + " return mp;\n" + "}\n\n"); /* set implicit omit function, recursive */ def = mputstr(def, " void set_implicit_omit();\n"); @@ -1724,15 +1776,17 @@ void defUnionClass(struct_def const *sdef, output_struct *output) at_field, sdef->elements[i].name, sdef->elements[i].typegen, at_field, sdef->elements[i].name); } - src = mputstr(src, - " else {\n" - " ec_1.set_msg(\" \");\n" - " TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_INVAL_MSG, " - "\"'%s' does not match any alternative\", elem_name);\n" - " if (xml_depth >= 0) for (; rd_ok == 1 " - "&& p_reader.Depth() > xml_depth; rd_ok = p_reader.Read()) ;\n" - " }\n" - ); + if (!sdef->isOptional) { + src = mputstr(src, + " else {\n" + " ec_1.set_msg(\" \");\n" + " TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_INVAL_MSG, " + "\"'%s' does not match any alternative\", elem_name);\n" + " if (xml_depth >= 0) for (; rd_ok == 1 " + "&& p_reader.Depth() > xml_depth; rd_ok = p_reader.Read()) ;\n" + " }\n" + ); + } } src = mputprintf(src, @@ -1835,10 +1889,9 @@ void defUnionClass(struct_def const *sdef, output_struct *output) " return JSON_ERROR_FATAL;\n" " }\n" " case JSON_TOKEN_LITERAL_TRUE:\n" - " case JSON_TOKEN_LITERAL_FALSE:\n" - " case JSON_TOKEN_LITERAL_NULL: {\n"); + " case JSON_TOKEN_LITERAL_FALSE: {\n"); for (i = 0; i < sdef->nElements; ++i) { - if (JSON_LITERAL & sdef->elements[i].jsonValueType) { + if (JSON_BOOLEAN & sdef->elements[i].jsonValueType) { src = mputprintf(src, " p_tok.set_buf_pos(buf_pos);\n" " ret_val = %s%s().JSON_decode(%s_descr_, p_tok, true);\n" @@ -1850,8 +1903,7 @@ void defUnionClass(struct_def const *sdef, output_struct *output) } src = mputstr(src, " char* literal_str = mprintf(\"literal (%s)\",\n" - " (JSON_TOKEN_LITERAL_TRUE == j_token) ? \"true\" :\n" - " ((JSON_TOKEN_LITERAL_FALSE == j_token) ? \"false\" : \"null\"));\n" + " (JSON_TOKEN_LITERAL_TRUE == j_token) ? \"true\" : \"false\");\n" " JSON_ERROR(TTCN_EncDec::ET_INVAL_MSG, JSON_DEC_AS_VALUE_ERROR, literal_str);\n" " Free(literal_str);\n" " clean_up();\n" @@ -1891,6 +1943,24 @@ void defUnionClass(struct_def const *sdef, output_struct *output) " clean_up();\n" " return JSON_ERROR_FATAL;\n" " }\n" + " case JSON_TOKEN_LITERAL_NULL: {\n"); + for (i = 0; i < sdef->nElements; ++i) { + if (JSON_NULL & sdef->elements[i].jsonValueType) { + src = mputprintf(src, + " p_tok.set_buf_pos(buf_pos);\n" + " ret_val = %s%s().JSON_decode(%s_descr_, p_tok, true);\n" + " if (0 <= ret_val) {\n" + " return ret_val;\n" + " }\n" + , at_field, sdef->elements[i].name, sdef->elements[i].typedescrname); + } + } + src = mputstr(src, + " clean_up();\n" + // the caller might be able to decode the null value if it's an optional field + // only return an invalid token error, not a fatal error + " return JSON_ERROR_INVALID_TOKEN;\n" + " }\n" " case JSON_TOKEN_ERROR:\n" " JSON_ERROR(TTCN_EncDec::ET_INVAL_MSG, JSON_DEC_BAD_TOKEN_ERROR, \"\");\n" " return JSON_ERROR_FATAL;\n" @@ -2223,9 +2293,10 @@ void defUnionTemplate(const struct_def *sdef, output_struct *output) "}\n\n", name, name, name); /* match function */ - def = mputprintf(def, "boolean match(const %s& other_value) const;\n", name); - src = mputprintf(src, "boolean %s_template::match(const %s& other_value) " - "const\n" + def = mputprintf(def, "boolean match(const %s& other_value, boolean legacy " + "= FALSE) const;\n", name); + src = mputprintf(src, "boolean %s_template::match(const %s& other_value, " + "boolean legacy) const\n" "{\n" "if (!other_value.is_bound()) return FALSE;\n" "switch (template_selection) {\n" @@ -2242,7 +2313,7 @@ void defUnionTemplate(const struct_def *sdef, output_struct *output) "switch (value_selection) {\n", name, name, selection_type, unbound_value); for (i = 0; i < sdef->nElements; i++) { src = mputprintf(src, "case %s_%s:\n" - "return single_value.field_%s->match(other_value.%s%s());\n", + "return single_value.field_%s->match(other_value.%s%s(), legacy);\n", selection_prefix, sdef->elements[i].name, sdef->elements[i].name, at_field, sdef->elements[i].name); } @@ -2255,7 +2326,7 @@ void defUnionTemplate(const struct_def *sdef, output_struct *output) "case COMPLEMENTED_LIST:\n" "for (unsigned int list_count = 0; list_count < value_list.n_values; " "list_count++)\n" - "if (value_list.list_value[list_count].match(other_value)) " + "if (value_list.list_value[list_count].match(other_value, legacy)) " "return template_selection == VALUE_LIST;\n" "return template_selection == COMPLEMENTED_LIST;\n" "default:\n" @@ -2432,8 +2503,8 @@ void defUnionTemplate(const struct_def *sdef, output_struct *output) "void copy_value(const Base_Type* other_value);\n" "Base_Template* clone() const;\n" "const TTCN_Typedescriptor_t* get_descriptor() const;\n" - "boolean matchv(const Base_Type* other_value) const;\n" - "void log_matchv(const Base_Type* match_value) const;\n"); + "boolean matchv(const Base_Type* other_value, boolean legacy) const;\n" + "void log_matchv(const Base_Type* match_value, boolean legacy) const;\n"); src = mputprintf(src, "void %s_template::valueofv(Base_Type* value) const " "{ *(static_cast<%s*>(value)) = valueof(); }\n" @@ -2445,10 +2516,12 @@ void defUnionTemplate(const struct_def *sdef, output_struct *output) "{ return new %s_template(*this); }\n" "const TTCN_Typedescriptor_t* %s_template::get_descriptor() const " "{ return &%s_descr_; }\n" - "boolean %s_template::matchv(const Base_Type* other_value) const " - "{ return match(*(static_cast<const %s*>(other_value))); }\n" - "void %s_template::log_matchv(const Base_Type* match_value) const " - " { log_match(*(static_cast<const %s*>(match_value))); }\n", + "boolean %s_template::matchv(const Base_Type* other_value, " + "boolean legacy) const " + "{ return match(*(static_cast<const %s*>(other_value)), legacy); }\n" + "void %s_template::log_matchv(const Base_Type* match_value, " + "boolean legacy) const " + " { log_match(*(static_cast<const %s*>(match_value)), legacy); }\n", name, name, name, name, name, @@ -2498,12 +2571,13 @@ void defUnionTemplate(const struct_def *sdef, output_struct *output) src = mputstr(src, "}\n\n"); /* log_match function */ - def = mputprintf(def, "void log_match(const %s& match_value) " - "const;\n", name); + def = mputprintf(def, "void log_match(const %s& match_value, " + "boolean legacy = FALSE) const;\n", name); src = mputprintf(src, - "void %s_template::log_match(const %s& match_value) const\n" + "void %s_template::log_match(const %s& match_value, boolean legacy) const\n" "{\n" - "if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity() && match(match_value)){\n" + "if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity() " + "&& match(match_value, legacy)){\n" "TTCN_Logger::print_logmatch_buffer();\n" "TTCN_Logger::log_event_str(\" matched\");\n" "return;\n" @@ -2515,10 +2589,10 @@ void defUnionTemplate(const struct_def *sdef, output_struct *output) src = mputprintf(src, "case %s_%s:\n" "if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){\n" "TTCN_Logger::log_logmatch_info(\".%s\");\n" - "single_value.field_%s->log_match(match_value.%s%s());\n" + "single_value.field_%s->log_match(match_value.%s%s(), legacy);\n" "} else {\n" "TTCN_Logger::log_event_str(\"{ %s := \");\n" - "single_value.field_%s->log_match(match_value.%s%s());\n" + "single_value.field_%s->log_match(match_value.%s%s(), legacy);\n" "TTCN_Logger::log_event_str(\" }\");\n" "}\n" "break;\n", selection_prefix, sdef->elements[i].name, @@ -2536,7 +2610,7 @@ void defUnionTemplate(const struct_def *sdef, output_struct *output) "match_value.log();\n" "TTCN_Logger::log_event_str(\" with \");\n" "log();\n" - "if (match(match_value)) TTCN_Logger::log_event_str(\" matched\");\n" + "if (match(match_value, legacy)) TTCN_Logger::log_event_str(\" matched\");\n" "else TTCN_Logger::log_event_str(\" unmatched\");\n" "}\n" "}\n\n"); @@ -2623,18 +2697,18 @@ void defUnionTemplate(const struct_def *sdef, output_struct *output) "}\n\n", dispname, name, dispname); /* TTCN-3 ispresent() function */ - def = mputstr(def, "boolean is_present() const;\n"); + def = mputstr(def, "boolean is_present(boolean legacy = FALSE) const;\n"); src = mputprintf(src, - "boolean %s_template::is_present() const\n" + "boolean %s_template::is_present(boolean legacy) const\n" "{\n" "if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE;\n" - "return !match_omit();\n" + "return !match_omit(legacy);\n" "}\n\n", name); /* match_omit() */ - def = mputstr(def, "boolean match_omit() const;\n"); + def = mputstr(def, "boolean match_omit(boolean legacy = FALSE) const;\n"); src = mputprintf(src, - "boolean %s_template::match_omit() const\n" + "boolean %s_template::match_omit(boolean legacy) const\n" "{\n" "if (is_ifpresent) return TRUE;\n" "switch (template_selection) {\n" @@ -2643,10 +2717,12 @@ void defUnionTemplate(const struct_def *sdef, output_struct *output) "return TRUE;\n" "case VALUE_LIST:\n" "case COMPLEMENTED_LIST:\n" + "if (legacy) {\n" "for (unsigned int v_idx=0; v_idx<value_list.n_values; v_idx++)\n" "if (value_list.list_value[v_idx].match_omit())\n" "return template_selection==VALUE_LIST;\n" "return template_selection==COMPLEMENTED_LIST;\n" + "} // else fall through\n" "default:\n" "return FALSE;\n" "}\n" @@ -2680,7 +2756,11 @@ void defUnionTemplate(const struct_def *sdef, output_struct *output) "param.error(\"Field `%%s' not found in union template type `%s'\", param_field);\n" " }\n" " param.basic_check(Module_Param::BC_TEMPLATE, \"union template\");\n" - " switch (param.get_type()) {\n" + " Module_Param_Ptr mp = ¶m;\n" + " if (param.get_type() == Module_Param::MP_Reference) {\n" + " mp = param.get_referenced_param();\n" + " }\n" + " switch (mp->get_type()) {\n" " case Module_Param::MP_Omit:\n" " *this = OMIT_VALUE;\n" " break;\n" @@ -2691,19 +2771,22 @@ void defUnionTemplate(const struct_def *sdef, output_struct *output) " *this = ANY_OR_OMIT;\n" " break;\n" " case Module_Param::MP_List_Template:\n" - " case Module_Param::MP_ComplementList_Template:\n" - " set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, param.get_size());\n" - " for (size_t p_i=0; p_i<param.get_size(); p_i++) {\n" - " list_item(p_i).set_param(*param.get_elem(p_i));\n" + " case Module_Param::MP_ComplementList_Template: {\n" + " %s_template temp;\n" + " temp.set_type(mp->get_type()==Module_Param::MP_List_Template ? " + "VALUE_LIST : COMPLEMENTED_LIST, mp->get_size());\n" + " for (size_t p_i=0; p_i<mp->get_size(); p_i++) {\n" + " temp.list_item(p_i).set_param(*mp->get_elem(p_i));\n" " }\n" - " break;\n" + " *this = temp;\n" + " break; }\n" " case Module_Param::MP_Value_List:\n" - " if (param.get_size()==0) break;\n" /* for backward compatibility */ + " if (mp->get_size()==0) break;\n" /* for backward compatibility */ " param.type_error(\"union template\", \"%s\");\n" " break;\n" " case Module_Param::MP_Assignment_List: {\n" - " Module_Param* mp_last = param.get_elem(param.get_size()-1);\n", - dispname, dispname); + " Module_Param* mp_last = mp->get_elem(mp->get_size()-1);\n", + dispname, name, dispname); for (i = 0; i < sdef->nElements; i++) { src = mputprintf(src, " if (!strcmp(mp_last->get_id()->get_name(), \"%s\")) {\n" @@ -2717,15 +2800,94 @@ void defUnionTemplate(const struct_def *sdef, output_struct *output) " default:\n" " param.type_error(\"union template\", \"%s\");\n" " }\n" - " is_ifpresent = param.get_ifpresent();\n" + " is_ifpresent = param.get_ifpresent() || mp->get_ifpresent();\n" "}\n\n", dispname, dispname); + + /* get_param() */ + def = mputstr(def, "Module_Param* get_param(Module_Param_Name& param_name) const;\n"); + src = mputprintf(src, + "Module_Param* %s_template::get_param(Module_Param_Name& param_name) const\n" + "{\n" + " if (param_name.next_name()) {\n" + // Haven't reached the end of the module parameter name + // => the name refers to one of the fields, not to the whole union + " char* param_field = param_name.get_current_name();\n" + " if (param_field[0] >= '0' && param_field[0] <= '9') {\n" + " TTCN_error(\"Unexpected array index in module parameter reference, \"\n" + " \"expected a valid field name for union template type `%s'\");\n" + " }\n" + " ", name, dispname); + for (i = 0; i < sdef->nElements; i++) { + src = mputprintf(src, + "if (strcmp(\"%s\", param_field) == 0) {\n" + " return %s%s().get_param(param_name);\n" + " } else ", + sdef->elements[i].dispname, at_field, sdef->elements[i].name); + } + src = mputprintf(src, + "TTCN_error(\"Field `%%s' not found in union type `%s'\", param_field);\n" + " }\n" + " Module_Param* mp = NULL;\n" + " switch (template_selection) {\n" + " case UNINITIALIZED_TEMPLATE:\n" + " mp = new Module_Param_Unbound();\n" + " break;\n" + " case OMIT_VALUE:\n" + " mp = new Module_Param_Omit();\n" + " break;\n" + " case ANY_VALUE:\n" + " mp = new Module_Param_Any();\n" + " break;\n" + " case ANY_OR_OMIT:\n" + " mp = new Module_Param_AnyOrNone();\n" + " break;\n" + " case SPECIFIC_VALUE: {\n" + " Module_Param* mp_field = NULL;\n" + " switch(single_value.union_selection) {\n" + , name); + for (i = 0; i < sdef->nElements; ++i) { + src = mputprintf(src, + " case %s_%s:\n" + " mp_field = single_value.field_%s->get_param(param_name);\n" + " mp_field->set_id(new Module_Param_FieldName(mcopystr(\"%s\")));\n" + " break;\n" + , selection_prefix, sdef->elements[i].name + , sdef->elements[i].name, sdef->elements[i].dispname); + } + src = mputstr(src, + " default:\n" + " break;\n" + " }\n" + " mp = new Module_Param_Assignment_List();\n" + " mp->add_elem(mp_field);\n" + " break; }\n" + " case VALUE_LIST:\n" + " case COMPLEMENTED_LIST: {\n" + " if (template_selection == VALUE_LIST) {\n" + " mp = new Module_Param_List_Template();\n" + " }\n" + " else {\n" + " mp = new Module_Param_ComplementList_Template();\n" + " }\n" + " for (size_t i = 0; i < value_list.n_values; ++i) {\n" + " mp->add_elem(value_list.list_value[i].get_param(param_name));\n" + " }\n" + " break; }\n" + " default:\n" + " break;\n" + " }\n" + " if (is_ifpresent) {\n" + " mp->set_ifpresent();\n" + " }\n" + " return mp;\n" + "}\n\n"); /* check template restriction */ def = mputstr(def, "void check_restriction(template_res t_res, " - "const char* t_name=NULL) const;\n"); + "const char* t_name=NULL, boolean legacy = FALSE) const;\n"); src = mputprintf(src, "void %s_template::check_restriction(" - "template_res t_res, const char* t_name) const\n" + "template_res t_res, const char* t_name, boolean legacy) const\n" "{\n" "if (template_selection==UNINITIALIZED_TEMPLATE) return;\n" "switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) {\n" @@ -2748,7 +2910,7 @@ void defUnionTemplate(const struct_def *sdef, output_struct *output) "performing check_restriction operation on a template of union type %s.\");\n" "}\n" "case TR_PRESENT:\n" - "if (!match_omit()) return;\n" + "if (!match_omit(legacy)) return;\n" "break;\n" "default:\n" "return;\n" diff --git a/compiler2/union.h b/compiler2/union.h index a2e40da58..e90757ada 100644 --- a/compiler2/union.h +++ b/compiler2/union.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/ustring.cc b/compiler2/ustring.cc index d88149fdb..6406b1ab7 100644 --- a/compiler2/ustring.cc +++ b/compiler2/ustring.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -437,3 +437,58 @@ bool operator<(const ustring::universal_char& uc1, else if (uc1.row > uc2.row) return false; else return uc1.cell < uc2.cell; } + +string ustring_to_uft8(const ustring& ustr) +{ + string ret_val; + for(size_t i = 0; i < ustr.size(); i++) { + unsigned char g = ustr[i].group; + unsigned char p = ustr[i].plane; + unsigned char r = ustr[i].row; + unsigned char c = ustr[i].cell; + if(g == 0x00 && p <= 0x1F) { + if(p == 0x00) { + if(r == 0x00 && c <= 0x7F) { + // 1 octet + ret_val += c; + } // r + // 2 octets + else if(r <= 0x07) { + ret_val += (0xC0 | r << 2 | c >> 6); + ret_val += (0x80 | (c & 0x3F)); + } // r + // 3 octets + else { + ret_val += (0xE0 | r >> 4); + ret_val += (0x80 | (r << 2 & 0x3C) | c >> 6); + ret_val += (0x80 | (c & 0x3F)); + } // r + } // p + // 4 octets + else { + ret_val += (0xF0 | p >> 2); + ret_val += (0x80 | (p << 4 & 0x30) | r >> 4); + ret_val += (0x80 | (r << 2 & 0x3C) | c >> 6); + ret_val += (0x80 | (c & 0x3F)); + } // p + } //g + // 5 octets + else if(g <= 0x03) { + ret_val += (0xF8 | g); + ret_val += (0x80 | p >> 2); + ret_val += (0x80 | (p << 4 & 0x30) | r >> 4); + ret_val += (0x80 | (r << 2 & 0x3C) | c >> 6); + ret_val += (0x80 | (c & 0x3F)); + } // g + // 6 octets + else { + ret_val += (0xFC | g >> 6); + ret_val += (0x80 | (g & 0x3F)); + ret_val += (0x80 | p >> 2); + ret_val += (0x80 | (p << 4 & 0x30) | r >> 4); + ret_val += (0x80 | (r << 2 & 0x3C) | c >> 6); + ret_val += (0x80 | (c & 0x3F)); + } + } // for i + return ret_val; +} diff --git a/compiler2/ustring.hh b/compiler2/ustring.hh index 5ee51dbdf..e83e60bd9 100644 --- a/compiler2/ustring.hh +++ b/compiler2/ustring.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -154,4 +154,7 @@ extern bool operator==(const ustring::universal_char& uc1, extern bool operator<(const ustring::universal_char& uc1, const ustring::universal_char& uc2); +/** Converts the unicode string to UTF-8 format */ +extern string ustring_to_uft8(const ustring&); + #endif // _Common_ustring_HH diff --git a/compiler2/vector.hh b/compiler2/vector.hh index bb1016071..ff726e17b 100644 --- a/compiler2/vector.hh +++ b/compiler2/vector.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/compiler2/xpather.cc b/compiler2/xpather.cc index d81658438..0ac78b04f 100644 --- a/compiler2/xpather.cc +++ b/compiler2/xpather.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -249,14 +249,14 @@ extern "C" string_list* getExternalLibs(const char* projName) return head; } -extern "C" string_list* getExternalLibPathes(const char* projName) +extern "C" string_list* getExternalLibPaths(const char* projName) { if (!projGenHelper.getZflag()) return NULL; ProjectDescriptor* proj = projGenHelper.getTargetOfProject(projName); if (!proj) return NULL; std::vector<const char*> externalLibs; - projGenHelper.getExternalLibSearchPathes(externalLibs); + projGenHelper.getExternalLibSearchPaths(externalLibs); if (0 == externalLibs.size()) return NULL; @@ -617,11 +617,11 @@ static tpd_result process_tpd_internal(const char *p_tpd_name, const char *actcf struct string_list* prep_defines, struct string_list* prep_undefines, boolean *p_csflag, boolean *p_quflag, boolean* p_dsflag, char** cxxcompiler, char** optlevel, char** optflags, boolean* p_dbflag, boolean* p_drflag, boolean* p_dtflag, boolean* p_dxflag, boolean* p_djflag, boolean* p_fxflag, boolean* p_doflag, boolean* p_gfflag, boolean* p_lnflag, boolean* p_isflag, - boolean* p_asflag, boolean* p_swflag, boolean* p_Yflag, struct string_list* solspeclibs, struct string_list* sol8speclibs, + boolean* p_asflag, boolean* p_swflag, boolean* p_Yflag, boolean* p_Mflag, struct string_list* solspeclibs, struct string_list* sol8speclibs, struct string_list* linuxspeclibs, struct string_list* freebsdspeclibs, struct string_list* win32speclibs, char** ttcn3prep, struct string_list* linkerlibs, struct string_list* additionalObjects, struct string_list* linkerlibsearchp, boolean Vflag, boolean Dflag, boolean *p_Zflag, boolean *p_Hflag, char** generatorCommandOutput, struct string2_list* target_placement_list, boolean prefix_workdir, - struct string2_list* run_command_list, map<cstring, int>& seen_tpd_files, struct string2_list* required_configs); + struct string2_list* run_command_list, map<cstring, int>& seen_tpd_files, struct string2_list* required_configs, struct string_list** profiled_file_list); extern "C" tpd_result process_tpd(const char *p_tpd_name, const char *actcfg, const char *file_list_path, int *p_argc, char ***p_argv, @@ -635,11 +635,11 @@ extern "C" tpd_result process_tpd(const char *p_tpd_name, const char *actcfg, struct string_list* prep_defines, struct string_list* prep_undefines, boolean *p_csflag, boolean *p_quflag, boolean* p_dsflag, char** cxxcompiler, char** optlevel, char** optflags, boolean* p_dbflag, boolean* p_drflag, boolean* p_dtflag, boolean* p_dxflag, boolean* p_djflag, boolean* p_fxflag, boolean* p_doflag, boolean* p_gfflag, boolean* p_lnflag, boolean* p_isflag, - boolean* p_asflag, boolean* p_swflag, boolean* p_Yflag, struct string_list* solspeclibs, struct string_list* sol8speclibs, + boolean* p_asflag, boolean* p_swflag, boolean* p_Yflag, boolean* p_Mflag, struct string_list* solspeclibs, struct string_list* sol8speclibs, struct string_list* linuxspeclibs, struct string_list* freebsdspeclibs, struct string_list* win32speclibs, char** ttcn3prep, string_list* linkerlibs, string_list* additionalObjects, string_list* linkerlibsearchp, boolean Vflag, boolean Dflag, boolean *p_Zflag, boolean *p_Hflag, char** generatorCommandOutput, struct string2_list* target_placement_list, boolean prefix_workdir, - struct string2_list* run_command_list, struct string2_list* required_configs) { + struct string2_list* run_command_list, struct string2_list* required_configs, struct string_list** profiled_file_list) { map<cstring, int> seen_tpd_files; projGenHelper.setZflag(*p_Zflag); @@ -657,11 +657,11 @@ extern "C" tpd_result process_tpd(const char *p_tpd_name, const char *actcfg, prep_undefines, p_csflag, p_quflag, p_dsflag, cxxcompiler, optlevel, optflags, p_dbflag, p_drflag, p_dtflag, p_dxflag, p_djflag, p_fxflag, p_doflag, p_gfflag, p_lnflag, p_isflag, - p_asflag, p_swflag, p_Yflag, solspeclibs, sol8speclibs, + p_asflag, p_swflag, p_Yflag, p_Mflag, solspeclibs, sol8speclibs, linuxspeclibs, freebsdspeclibs, win32speclibs, ttcn3prep, linkerlibs, additionalObjects, linkerlibsearchp, Vflag, Dflag, p_Zflag, p_Hflag, generatorCommandOutput, target_placement_list, prefix_workdir, - run_command_list, seen_tpd_files, required_configs); + run_command_list, seen_tpd_files, required_configs, profiled_file_list); if (TPD_FAILED == success) exit(EXIT_FAILURE); @@ -705,11 +705,11 @@ static tpd_result process_tpd_internal(const char *p_tpd_name, const char *actcf struct string_list* prep_defines, struct string_list* prep_undefines, boolean *p_csflag, boolean *p_quflag, boolean* p_dsflag, char** cxxcompiler, char** optlevel, char** optflags, boolean* p_dbflag, boolean* p_drflag, boolean* p_dtflag, boolean* p_dxflag, boolean* p_djflag, boolean* p_fxflag, boolean* p_doflag, boolean* p_gfflag, boolean* p_lnflag, boolean* p_isflag, - boolean* p_asflag, boolean* p_swflag, boolean* p_Yflag, struct string_list* solspeclibs, struct string_list* sol8speclibs, + boolean* p_asflag, boolean* p_swflag, boolean* p_Yflag, boolean* p_Mflag, struct string_list* solspeclibs, struct string_list* sol8speclibs, struct string_list* linuxspeclibs, struct string_list* freebsdspeclibs, struct string_list* win32speclibs, char** ttcn3prep, string_list* linkerlibs, string_list* additionalObjects, string_list* linkerlibsearchp, boolean Vflag, boolean Dflag, boolean *p_Zflag, boolean *p_Hflag, char** generatorCommandOutput, struct string2_list* target_placement_list, boolean prefix_workdir, - struct string2_list* run_command_list, map<cstring, int>& seen_tpd_files, struct string2_list* required_configs) + struct string2_list* run_command_list, map<cstring, int>& seen_tpd_files, struct string2_list* required_configs, struct string_list** profiled_file_list) { tpd_result result = TPD_SUCCESS; // read-only non-pointer aliases @@ -1170,6 +1170,7 @@ static tpd_result process_tpd_internal(const char *p_tpd_name, const char *actcf xsdbool2boolean(xpathCtx, actcfg, "addSourceLineInfo", p_asflag); xsdbool2boolean(xpathCtx, actcfg, "suppressWarnings", p_swflag); xsdbool2boolean(xpathCtx, actcfg, "outParamBoundness", p_Yflag); + xsdbool2boolean(xpathCtx, actcfg, "omitInValueList", p_Mflag); projDesc = projGenHelper.getTargetOfProject(*p_project_name); if (projDesc) projDesc->setLinkingStrategy(*p_lflag); @@ -1815,6 +1816,70 @@ static tpd_result process_tpd_internal(const char *p_tpd_name, const char *actcf } } } + + { + // profiler file name + char* profilerXpath = mprintf( + "/TITAN_Project_File_Information/Configurations/Configuration[@name='%s']" + "/ProjectProperties/MakefileSettings/profiledFileList", actcfg); + XPathObject profiledFilesNameObj(run_xpath(xpathCtx, profilerXpath)); + Free(profilerXpath); + xmlNodeSetPtr nodes = profiledFilesNameObj->nodesetval; + if (nodes && nodes->nodeNr > 0) { + const char *uri = 0, *path = 0, *raw = 0; + for (xmlAttrPtr attr = nodes->nodeTab[0]->properties; attr; attr = attr->next) { + if (!strcmp((const char*)attr->name, "projectRelativePath")) { + path = (const char*)attr->children->content; + } + else if (!strcmp((const char*)attr->name, "relativeURI")) { + uri = (const char*)attr->children->content; + } + else if (!strcmp((const char*)attr->name, "rawURI")) { + raw = (const char*)attr->children->content; + } + else { + WARNING("Unknown attribute %s", (const char*)nodes->nodeTab[0]->name); + } + } // next attribute + + if (path == NULL) { + ERROR("A profiledFileList must have a projectRelativePath"); + } + else { + if (uri == NULL && raw == NULL) { + ERROR("A profiledFileList must have either relativeURI or rawURI"); + } + else { + cstring cpath(path); + if (files.has_key(cpath)) { + ERROR("profiledFileLists and FileResources must be unique!"); + } + else { + // add the file to the end of the list + struct string_list* new_item = NULL; + if (*profiled_file_list == NULL) { + *profiled_file_list = (struct string_list*)Malloc(sizeof(struct string_list)); + new_item = *profiled_file_list; + } + else { + new_item = *profiled_file_list; + while(new_item->next != NULL) { + new_item = new_item->next; + } + new_item->next = (struct string_list*)Malloc(sizeof(struct string_list)); + new_item = new_item->next; + } + new_item->str = mcopystr(path); + new_item->next = NULL; + + // add the file to the map of files to be copied to the working directory + char *ruri = uri ? mcopystr(uri) : cook(raw, path_vars); + files.add(cpath, ruri); + } + } + } + } + } // collect the required configurations { @@ -1912,7 +1977,7 @@ static tpd_result process_tpd_internal(const char *p_tpd_name, const char *actcf my_quflag = 0, my_dsflag = 0, my_dbflag = 0, my_drflag = 0, my_dtflag = 0, my_dxflag = 0, my_djflag = 0, my_fxflag = 0, my_doflag = 0, my_gfflag = 0, my_lnflag = 0, my_isflag = 0, my_asflag = 0, - my_swflag = 0, my_Yflag = 0; + my_swflag = 0, my_Yflag = 0, my_Mflag = *p_Mflag; char *my_ets = NULL; char *my_proj_name = NULL; @@ -1920,7 +1985,7 @@ static tpd_result process_tpd_internal(const char *p_tpd_name, const char *actcf compose_path_name(abs_tpd_dir, projectLocationURI)); char* sub_proj_abs_work_dir = NULL; - + tpd_result success = process_tpd_internal((const char*)abs_projectLocationURI, my_actcfg, file_list_path, &my_argc, &my_argv, &my_optind, &my_ets, &my_proj_name, &my_gflag, &my_sflag, &my_cflag, &my_aflag, preprocess, &my_Rflag, &my_lflag, @@ -1929,9 +1994,10 @@ static tpd_result process_tpd_internal(const char *p_tpd_name, const char *actcf prep_includes, prep_defines, prep_undefines, &my_csflag, &my_quflag, &my_dsflag, cxxcompiler, optlevel, optflags, &my_dbflag, &my_drflag, &my_dtflag, &my_dxflag, &my_djflag, &my_fxflag, &my_doflag, - &my_gfflag, &my_lnflag, &my_isflag, &my_asflag, &my_swflag, &my_Yflag, solspeclibs, sol8speclibs, linuxspeclibs, freebsdspeclibs, win32speclibs, + &my_gfflag, &my_lnflag, &my_isflag, &my_asflag, &my_swflag, &my_Yflag, &my_Mflag, + solspeclibs, sol8speclibs, linuxspeclibs, freebsdspeclibs, win32speclibs, ttcn3prep, linkerlibs, additionalObjects, linkerlibsearchp, Vflag, FALSE, &my_Zflag, - &my_Hflag, NULL, NULL, prefix_workdir, run_command_list, seen_tpd_files, required_configs); + &my_Hflag, NULL, NULL, prefix_workdir, run_command_list, seen_tpd_files, required_configs, profiled_file_list); autostring sub_proj_abs_work_dir_as(sub_proj_abs_work_dir); // ?! diff --git a/compiler2/xpather.h b/compiler2/xpather.h index 935e22524..a9f6e8c5f 100644 --- a/compiler2/xpather.h +++ b/compiler2/xpather.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -65,7 +65,7 @@ struct string_list* getExternalLibs(const char* projName); #ifdef __cplusplus extern "C" #endif -struct string_list* getExternalLibPathes(const char* projName); +struct string_list* getExternalLibPaths(const char* projName); #ifdef __cplusplus extern "C" @@ -183,6 +183,7 @@ boolean buildObjects(const char* projName, boolean add_referenced); * @param addsourcelineinfo addSourceLineInfo -l * @param suppresswarnings suppressWarnings -S * @param outparamboundness outParamBoundness -Y + * @param omit_in_value_list omitInValueList -M * @param solspeclibs SolarisSpecificLibraries * @param sol8speclibs Solaris8SpecificLibraries * @param linuxspeclibs LinuxSpecificLibraries @@ -197,7 +198,7 @@ boolean buildObjects(const char* projName, boolean add_referenced); * @param target_placement_list a list of (target,placement) strings pairs from the TPD * @param prefix_workdir prefix working directory with project name * @param run_command_list contains the working directories and the makefilegen commands to be called there - * @return TPD_SUCESS if parsing successful, TPD_SKIPPED if the tpd + * @return TPD_SUCCESS if parsing successful, TPD_SKIPPED if the tpd * was seen already, or TPD_FAILED on error. */ #ifdef __cplusplus @@ -221,10 +222,10 @@ tpd_result process_tpd(const char *p_tpd_name, const char *actcfg, char** cxxcompiler, char** optlevel, char** optflags, boolean *disableber, boolean *disableraw, boolean *disabletext, boolean *disablexer, boolean *disablejson, boolean *forcexerinasn, boolean *defaultasomit, boolean *gccmessageformat, boolean *linenumber, boolean *includesourceinfo, boolean *addsourcelineinfo, boolean *suppresswarnings, - boolean *outparamboundness, struct string_list* solspeclibs, struct string_list* sol8speclibs, + boolean *outparamboundness, boolean *omit_in_value_list, struct string_list* solspeclibs, struct string_list* sol8speclibs, struct string_list* linuxspeclibs, struct string_list* freebsdspeclibs, struct string_list* win32speclibs, char** ttcn3preprocessor, struct string_list* linkerlibs, struct string_list* additionalObjects, struct string_list* linkerlibsearchpath, boolean Vflag, boolean Dflag, boolean *Zflag, boolean *Hflag, char** generatorCommandOutput, struct string2_list* target_placement_list, boolean prefix_workdir, struct string2_list* run_command_list, - struct string2_list* required_configs); + struct string2_list* required_configs, struct string_list** profiled_file_list); #endif /* XPATHER_H_ */ diff --git a/core/.gitignore b/core/.gitignore index a6cf2db0b..8fe256be8 100644 --- a/core/.gitignore +++ b/core/.gitignore @@ -21,3 +21,5 @@ gccversion.exe cversion.h RT1 TitanLoggerApi.ttcn +ttcn3_profmerge +ttcn3_profmerge.exe diff --git a/core/ASN_Any.cc b/core/ASN_Any.cc index 129081b88..a366f401c 100644 --- a/core/ASN_Any.cc +++ b/core/ASN_Any.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/core/ASN_Any.hh b/core/ASN_Any.hh index 20ee4925b..6be0fc58d 100644 --- a/core/ASN_Any.hh +++ b/core/ASN_Any.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/core/ASN_CharacterString.cc b/core/ASN_CharacterString.cc index edbd97a36..f1b871527 100644 --- a/core/ASN_CharacterString.cc +++ b/core/ASN_CharacterString.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -374,11 +374,15 @@ void CHARACTER_STRING_identification::log() const void CHARACTER_STRING_identification::set_param(Module_Param& param) { param.basic_check(Module_Param::BC_VALUE, "union value"); - if (param.get_type()==Module_Param::MP_Value_List && param.get_size()==0) return; - if (param.get_type()!=Module_Param::MP_Assignment_List) { + Module_Param_Ptr mp = ¶m; + if (param.get_type() == Module_Param::MP_Reference) { + mp = param.get_referenced_param(); + } + if (mp->get_type()==Module_Param::MP_Value_List && mp->get_size()==0) return; + if (mp->get_type()!=Module_Param::MP_Assignment_List) { param.error("union value with field name was expected"); } - Module_Param* mp_last = param.get_elem(param.get_size()-1); + Module_Param* mp_last = mp->get_elem(mp->get_size()-1); if (!strcmp(mp_last->get_id()->get_name(), "syntaxes")) { syntaxes().set_param(*mp_last); return; @@ -406,10 +410,53 @@ void CHARACTER_STRING_identification::set_param(Module_Param& param) mp_last->error("Field %s does not exist in type CHARACTER STRING.identification.", mp_last->get_id()->get_name()); } +Module_Param* CHARACTER_STRING_identification::get_param(Module_Param_Name& param_name) const +{ + if (!is_bound()) { + return new Module_Param_Unbound(); + } + Module_Param* mp_field = NULL; + switch(get_selection()) { + case ALT_syntaxes: + mp_field = field_syntaxes->get_param(param_name); + mp_field->set_id(new Module_Param_FieldName(mcopystr("syntaxes"))); + break; + case ALT_syntax: + mp_field = field_syntax->get_param(param_name); + mp_field->set_id(new Module_Param_FieldName(mcopystr("syntax"))); + break; + case ALT_presentation__context__id: + mp_field = field_presentation__context__id->get_param(param_name); + mp_field->set_id(new Module_Param_FieldName(mcopystr("presentation_context_id"))); + break; + case ALT_context__negotiation: + mp_field = field_context__negotiation->get_param(param_name); + mp_field->set_id(new Module_Param_FieldName(mcopystr("context_negotiation"))); + break; + case ALT_transfer__syntax: + mp_field = field_transfer__syntax->get_param(param_name); + mp_field->set_id(new Module_Param_FieldName(mcopystr("transfer_syntax"))); + break; + case ALT_fixed: + mp_field = field_fixed->get_param(param_name); + mp_field->set_id(new Module_Param_FieldName(mcopystr("fixed"))); + break; + default: + break; + } + Module_Param_Assignment_List* mp = new Module_Param_Assignment_List(); + mp->add_elem(mp_field); + return mp; +} + void CHARACTER_STRING_identification_template::set_param(Module_Param& param) { param.basic_check(Module_Param::BC_TEMPLATE, "union template"); - switch (param.get_type()) { + Module_Param_Ptr mp = ¶m; + if (param.get_type() == Module_Param::MP_Reference) { + mp = param.get_referenced_param(); + } + switch (mp->get_type()) { case Module_Param::MP_Omit: *this = OMIT_VALUE; break; @@ -420,18 +467,21 @@ void CHARACTER_STRING_identification_template::set_param(Module_Param& param) *this = ANY_OR_OMIT; break; case Module_Param::MP_List_Template: - case Module_Param::MP_ComplementList_Template: - set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, param.get_size()); - for (size_t p_i=0; p_i<param.get_size(); p_i++) { - list_item(p_i).set_param(*param.get_elem(p_i)); + case Module_Param::MP_ComplementList_Template: { + CHARACTER_STRING_identification_template temp; + temp.set_type(mp->get_type() == Module_Param::MP_List_Template ? + VALUE_LIST : COMPLEMENTED_LIST, mp->get_size()); + for (size_t i=0; i<mp->get_size(); i++) { + temp.list_item(i).set_param(*mp->get_elem(i)); } - break; + *this = temp; + break; } case Module_Param::MP_Value_List: - if (param.get_size()==0) break; + if (mp->get_size()==0) break; param.type_error("union template", "CHARACTER STRING.identification"); break; case Module_Param::MP_Assignment_List: { - Module_Param* mp_last = param.get_elem(param.get_size()-1); + Module_Param* mp_last = mp->get_elem(mp->get_size()-1); if (!strcmp(mp_last->get_id()->get_name(), "syntaxes")) { syntaxes().set_param(*mp_last); break; @@ -461,7 +511,77 @@ void CHARACTER_STRING_identification_template::set_param(Module_Param& param) default: param.type_error("union template", "CHARACTER STRING.identification"); } - is_ifpresent = param.get_ifpresent(); + is_ifpresent = param.get_ifpresent() || mp->get_ifpresent(); +} + +Module_Param* CHARACTER_STRING_identification_template::get_param(Module_Param_Name& param_name) const +{ + Module_Param* mp = NULL; + switch (template_selection) { + case UNINITIALIZED_TEMPLATE: + mp = new Module_Param_Unbound(); + break; + case OMIT_VALUE: + mp = new Module_Param_Omit(); + break; + case ANY_VALUE: + mp = new Module_Param_Any(); + break; + case ANY_OR_OMIT: + mp = new Module_Param_AnyOrNone(); + break; + case SPECIFIC_VALUE: { + Module_Param* mp_field = NULL; + switch(single_value.union_selection) { + case CHARACTER_STRING_identification::ALT_syntaxes: + mp_field = single_value.field_syntaxes->get_param(param_name); + mp_field->set_id(new Module_Param_FieldName(mcopystr("syntaxes"))); + break; + case CHARACTER_STRING_identification::ALT_syntax: + mp_field = single_value.field_syntax->get_param(param_name); + mp_field->set_id(new Module_Param_FieldName(mcopystr("syntax"))); + break; + case CHARACTER_STRING_identification::ALT_presentation__context__id: + mp_field = single_value.field_presentation__context__id->get_param(param_name); + mp_field->set_id(new Module_Param_FieldName(mcopystr("presentation_context_id"))); + break; + case CHARACTER_STRING_identification::ALT_context__negotiation: + mp_field = single_value.field_context__negotiation->get_param(param_name); + mp_field->set_id(new Module_Param_FieldName(mcopystr("context_negotiation"))); + break; + case CHARACTER_STRING_identification::ALT_transfer__syntax: + mp_field = single_value.field_transfer__syntax->get_param(param_name); + mp_field->set_id(new Module_Param_FieldName(mcopystr("transfer_syntax"))); + break; + case CHARACTER_STRING_identification::ALT_fixed: + mp_field = single_value.field_fixed->get_param(param_name); + mp_field->set_id(new Module_Param_FieldName(mcopystr("fixed"))); + break; + default: + break; + } + mp = new Module_Param_Assignment_List(); + mp->add_elem(mp_field); + break; } + case VALUE_LIST: + case COMPLEMENTED_LIST: { + if (template_selection == VALUE_LIST) { + mp = new Module_Param_List_Template(); + } + else { + mp = new Module_Param_ComplementList_Template(); + } + for (size_t i = 0; i < value_list.n_values; ++i) { + mp->add_elem(value_list.list_value[i].get_param(param_name)); + } + break; } + default: + break; + } + if (is_ifpresent) { + mp->set_ifpresent(); + } + return mp; } void CHARACTER_STRING_identification::encode_text(Text_Buf& text_buf) const @@ -935,7 +1055,8 @@ CHARACTER_STRING_identification_template& CHARACTER_STRING_identification_templa return *this; } -boolean CHARACTER_STRING_identification_template::match(const CHARACTER_STRING_identification& other_value) const +boolean CHARACTER_STRING_identification_template::match(const CHARACTER_STRING_identification& other_value, + boolean /* legacy */) const { switch (template_selection) { case ANY_VALUE: @@ -1232,7 +1353,8 @@ void CHARACTER_STRING_identification_template::log() const log_ifpresent(); } -void CHARACTER_STRING_identification_template::log_match(const CHARACTER_STRING_identification& match_value) const +void CHARACTER_STRING_identification_template::log_match(const CHARACTER_STRING_identification& match_value, + boolean /* legacy */) const { if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){ if(match(match_value)){ @@ -1418,13 +1540,13 @@ void CHARACTER_STRING_identification_template::decode_text(Text_Buf& text_buf) } } -boolean CHARACTER_STRING_identification_template::is_present() const +boolean CHARACTER_STRING_identification_template::is_present(boolean legacy /* = FALSE */) const { if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE; - return !match_omit(); + return !match_omit(legacy); } -boolean CHARACTER_STRING_identification_template::match_omit() const +boolean CHARACTER_STRING_identification_template::match_omit(boolean legacy /* = FALSE */) const { if (is_ifpresent) return TRUE; switch (template_selection) { @@ -1433,10 +1555,12 @@ boolean CHARACTER_STRING_identification_template::match_omit() const return TRUE; case VALUE_LIST: case COMPLEMENTED_LIST: - for (unsigned int i=0; i<value_list.n_values; i++) - if (value_list.list_value[i].match_omit()) - return template_selection==VALUE_LIST; - return template_selection==COMPLEMENTED_LIST; + if (legacy) { + for (unsigned int i=0; i<value_list.n_values; i++) + if (value_list.list_value[i].match_omit()) + return template_selection==VALUE_LIST; + return template_selection==COMPLEMENTED_LIST; + } // else fall through default: return FALSE; } @@ -1444,7 +1568,8 @@ boolean CHARACTER_STRING_identification_template::match_omit() const } #ifndef TITAN_RUNTIME_2 -void CHARACTER_STRING_identification_template::check_restriction(template_res t_res, const char* t_name) const +void CHARACTER_STRING_identification_template::check_restriction(template_res t_res, const char* t_name, + boolean legacy /* = FALSE */) const { if (template_selection==UNINITIALIZED_TEMPLATE) return; switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) { @@ -1456,7 +1581,7 @@ void CHARACTER_STRING_identification_template::check_restriction(template_res t_ template_selection==SPECIFIC_VALUE)) return; break; case TR_PRESENT: - if (!match_omit()) return; + if (!match_omit(legacy)) return; break; default: return; @@ -1521,34 +1646,38 @@ void CHARACTER_STRING_identification_syntaxes::clean_up() void CHARACTER_STRING_identification_syntaxes::set_param(Module_Param& param) { param.basic_check(Module_Param::BC_VALUE, "record value"); - switch (param.get_type()) { + Module_Param_Ptr mp = ¶m; + if (param.get_type() == Module_Param::MP_Reference) { + mp = param.get_referenced_param(); + } + switch (mp->get_type()) { case Module_Param::MP_Value_List: - if (param.get_size()==0) return; - if (2!=param.get_size()) { - param.error("record value of type CHARACTER STRING.identification.syntaxes has 2 fields but list value has %d fields", (int)param.get_size()); + if (mp->get_size()==0) return; + if (2!=mp->get_size()) { + param.error("record value of type CHARACTER STRING.identification.syntaxes has 2 fields but list value has %d fields", (int)mp->get_size()); } - if (param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) abstract().set_param(*param.get_elem(0)); - if (param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) transfer().set_param(*param.get_elem(1)); + if (mp->get_elem(0)->get_type()!=Module_Param::MP_NotUsed) abstract().set_param(*mp->get_elem(0)); + if (mp->get_elem(1)->get_type()!=Module_Param::MP_NotUsed) transfer().set_param(*mp->get_elem(1)); break; case Module_Param::MP_Assignment_List: { - Vector<bool> value_used(param.get_size()); - value_used.resize(param.get_size(), false); - for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { - Module_Param* const curr_param = param.get_elem(val_idx); + Vector<bool> value_used(mp->get_size()); + value_used.resize(mp->get_size(), false); + for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) { + Module_Param* const curr_param = mp->get_elem(val_idx); if (!strcmp(curr_param->get_id()->get_name(), "abstract")) { abstract().set_param(*curr_param); value_used[val_idx]=true; } } - for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { - Module_Param* const curr_param = param.get_elem(val_idx); + for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) { + Module_Param* const curr_param = mp->get_elem(val_idx); if (!strcmp(curr_param->get_id()->get_name(), "transfer")) { transfer().set_param(*curr_param); value_used[val_idx]=true; } } - for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) { - param.get_elem(val_idx)->error("Non existent field name in type CHARACTER STRING.identification.syntaxes: %s", param.get_elem(val_idx)->get_id()->get_name()); + for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) if (!value_used[val_idx]) { + mp->get_elem(val_idx)->error("Non existent field name in type CHARACTER STRING.identification.syntaxes: %s", mp->get_elem(val_idx)->get_id()->get_name()); break; } } break; @@ -1557,60 +1686,19 @@ void CHARACTER_STRING_identification_syntaxes::set_param(Module_Param& param) } } -void CHARACTER_STRING_identification_syntaxes_template::set_param(Module_Param& param) +Module_Param* CHARACTER_STRING_identification_syntaxes::get_param(Module_Param_Name& param_name) const { - param.basic_check(Module_Param::BC_TEMPLATE, "record template"); - switch (param.get_type()) { - case Module_Param::MP_Omit: - *this = OMIT_VALUE; - break; - case Module_Param::MP_Any: - *this = ANY_VALUE; - break; - case Module_Param::MP_AnyOrNone: - *this = ANY_OR_OMIT; - break; - case Module_Param::MP_List_Template: - case Module_Param::MP_ComplementList_Template: - set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, param.get_size()); - for (size_t p_i=0; p_i<param.get_size(); p_i++) { - list_item(p_i).set_param(*param.get_elem(p_i)); - } - break; - case Module_Param::MP_Value_List: - if (param.get_size()==0) break; - if (2!=param.get_size()) { - param.error("record template of type CHARACTER STRING.identification.syntaxes has 2 fields but list value has %d fields", (int)param.get_size()); - } - if (param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) abstract().set_param(*param.get_elem(0)); - if (param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) transfer().set_param(*param.get_elem(1)); - break; - case Module_Param::MP_Assignment_List: { - Vector<bool> value_used(param.get_size()); - value_used.resize(param.get_size(), false); - for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { - Module_Param* const curr_param = param.get_elem(val_idx); - if (!strcmp(curr_param->get_id()->get_name(), "abstract")) { - abstract().set_param(*curr_param); - value_used[val_idx]=true; - } - } - for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { - Module_Param* const curr_param = param.get_elem(val_idx); - if (!strcmp(curr_param->get_id()->get_name(), "transfer")) { - transfer().set_param(*curr_param); - value_used[val_idx]=true; - } - } - for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) { - param.get_elem(val_idx)->error("Non existent field name in type CHARACTER STRING.identification.syntaxes: %s", param.get_elem(val_idx)->get_id()->get_name()); - break; - } - } break; - default: - param.type_error("record template", "CHARACTER STRING.identification.syntaxes"); + if (!is_bound()) { + return new Module_Param_Unbound(); } - is_ifpresent = param.get_ifpresent(); + Module_Param* mp_field_abstract = field_abstract.get_param(param_name); + mp_field_abstract->set_id(new Module_Param_FieldName(mcopystr("abstract"))); + Module_Param* mp_field_transfer = field_transfer.get_param(param_name); + mp_field_transfer->set_id(new Module_Param_FieldName(mcopystr("transfer"))); + Module_Param_Assignment_List* mp = new Module_Param_Assignment_List(); + mp->add_elem(mp_field_abstract); + mp->add_elem(mp_field_transfer); + return mp; } void CHARACTER_STRING_identification_syntaxes::encode_text(Text_Buf& text_buf) const @@ -1715,6 +1803,115 @@ struct CHARACTER_STRING_identification_syntaxes_template::single_value_struct { OBJID_template field_transfer; }; +void CHARACTER_STRING_identification_syntaxes_template::set_param(Module_Param& param) +{ + param.basic_check(Module_Param::BC_TEMPLATE, "record template"); + Module_Param_Ptr mp = ¶m; + if (param.get_type() == Module_Param::MP_Reference) { + mp = param.get_referenced_param(); + } + switch (mp->get_type()) { + case Module_Param::MP_Omit: + *this = OMIT_VALUE; + break; + case Module_Param::MP_Any: + *this = ANY_VALUE; + break; + case Module_Param::MP_AnyOrNone: + *this = ANY_OR_OMIT; + break; + case Module_Param::MP_List_Template: + case Module_Param::MP_ComplementList_Template: { + CHARACTER_STRING_identification_syntaxes_template temp; + temp.set_type(mp->get_type() == Module_Param::MP_List_Template ? + VALUE_LIST : COMPLEMENTED_LIST, mp->get_size()); + for (size_t i=0; i<mp->get_size(); i++) { + temp.list_item(i).set_param(*mp->get_elem(i)); + } + *this = temp; + break; } + case Module_Param::MP_Value_List: + if (mp->get_size()==0) break; + if (2!=mp->get_size()) { + param.error("record template of type CHARACTER STRING.identification.syntaxes has 2 fields but list value has %d fields", (int)mp->get_size()); + } + if (mp->get_elem(0)->get_type()!=Module_Param::MP_NotUsed) abstract().set_param(*mp->get_elem(0)); + if (mp->get_elem(1)->get_type()!=Module_Param::MP_NotUsed) transfer().set_param(*mp->get_elem(1)); + break; + case Module_Param::MP_Assignment_List: { + Vector<bool> value_used(mp->get_size()); + value_used.resize(mp->get_size(), false); + for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) { + Module_Param* const curr_param = mp->get_elem(val_idx); + if (!strcmp(curr_param->get_id()->get_name(), "abstract")) { + abstract().set_param(*curr_param); + value_used[val_idx]=true; + } + } + for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) { + Module_Param* const curr_param = mp->get_elem(val_idx); + if (!strcmp(curr_param->get_id()->get_name(), "transfer")) { + transfer().set_param(*curr_param); + value_used[val_idx]=true; + } + } + for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) if (!value_used[val_idx]) { + mp->get_elem(val_idx)->error("Non existent field name in type CHARACTER STRING.identification.syntaxes: %s", mp->get_elem(val_idx)->get_id()->get_name()); + break; + } + } break; + default: + param.type_error("record template", "CHARACTER STRING.identification.syntaxes"); + } + is_ifpresent = param.get_ifpresent() || mp->get_ifpresent(); +} + +Module_Param* CHARACTER_STRING_identification_syntaxes_template::get_param(Module_Param_Name& param_name) const +{ + Module_Param* mp = NULL; + switch (template_selection) { + case UNINITIALIZED_TEMPLATE: + mp = new Module_Param_Unbound(); + break; + case OMIT_VALUE: + mp = new Module_Param_Omit(); + break; + case ANY_VALUE: + mp = new Module_Param_Any(); + break; + case ANY_OR_OMIT: + mp = new Module_Param_AnyOrNone(); + break; + case SPECIFIC_VALUE: { + Module_Param* mp_field_abstract = single_value->field_abstract.get_param(param_name); + mp_field_abstract->set_id(new Module_Param_FieldName(mcopystr("abstract"))); + Module_Param* mp_field_transfer = single_value->field_transfer.get_param(param_name); + mp_field_transfer->set_id(new Module_Param_FieldName(mcopystr("transfer"))); + mp = new Module_Param_Assignment_List(); + mp->add_elem(mp_field_abstract); + mp->add_elem(mp_field_transfer); + break; } + case VALUE_LIST: + case COMPLEMENTED_LIST: { + if (template_selection == VALUE_LIST) { + mp = new Module_Param_List_Template(); + } + else { + mp = new Module_Param_ComplementList_Template(); + } + for (size_t i = 0; i < value_list.n_values; ++i) { + mp->add_elem(value_list.list_value[i].get_param(param_name)); + } + break; } + default: + break; + } + if (is_ifpresent) { + mp->set_ifpresent(); + } + return mp; +} + void CHARACTER_STRING_identification_syntaxes_template::clean_up() { switch (template_selection) { @@ -1856,7 +2053,8 @@ CHARACTER_STRING_identification_syntaxes_template& CHARACTER_STRING_identificati return *this; } -boolean CHARACTER_STRING_identification_syntaxes_template::match(const CHARACTER_STRING_identification_syntaxes& other_value) const +boolean CHARACTER_STRING_identification_syntaxes_template::match(const CHARACTER_STRING_identification_syntaxes& other_value, + boolean /* legacy */) const { switch (template_selection) { case ANY_VALUE: @@ -1998,7 +2196,8 @@ void CHARACTER_STRING_identification_syntaxes_template::log() const log_ifpresent(); } -void CHARACTER_STRING_identification_syntaxes_template::log_match(const CHARACTER_STRING_identification_syntaxes& match_value) const +void CHARACTER_STRING_identification_syntaxes_template::log_match(const CHARACTER_STRING_identification_syntaxes& match_value, + boolean /* legacy */) const { if (template_selection == SPECIFIC_VALUE) { TTCN_Logger::log_event_str("{ abstract := "); @@ -2064,13 +2263,13 @@ void CHARACTER_STRING_identification_syntaxes_template::decode_text(Text_Buf& te } } -boolean CHARACTER_STRING_identification_syntaxes_template::is_present() const +boolean CHARACTER_STRING_identification_syntaxes_template::is_present(boolean legacy /* = FALSE */) const { if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE; - return !match_omit(); + return !match_omit(legacy); } -boolean CHARACTER_STRING_identification_syntaxes_template::match_omit() const +boolean CHARACTER_STRING_identification_syntaxes_template::match_omit(boolean legacy /* = FALSE */) const { if (is_ifpresent) return TRUE; switch (template_selection) { @@ -2079,10 +2278,12 @@ boolean CHARACTER_STRING_identification_syntaxes_template::match_omit() const return TRUE; case VALUE_LIST: case COMPLEMENTED_LIST: - for (unsigned int i=0; i<value_list.n_values; i++) - if (value_list.list_value[i].match_omit()) - return template_selection==VALUE_LIST; - return template_selection==COMPLEMENTED_LIST; + if (legacy) { + for (unsigned int i=0; i<value_list.n_values; i++) + if (value_list.list_value[i].match_omit()) + return template_selection==VALUE_LIST; + return template_selection==COMPLEMENTED_LIST; + } // else fall through default: return FALSE; } @@ -2090,7 +2291,8 @@ boolean CHARACTER_STRING_identification_syntaxes_template::match_omit() const } #ifndef TITAN_RUNTIME_2 -void CHARACTER_STRING_identification_syntaxes_template::check_restriction(template_res t_res, const char* t_name) const +void CHARACTER_STRING_identification_syntaxes_template::check_restriction(template_res t_res, const char* t_name, + boolean legacy /* = FALSE */) const { if (template_selection==UNINITIALIZED_TEMPLATE) return; switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) { @@ -2102,7 +2304,7 @@ void CHARACTER_STRING_identification_syntaxes_template::check_restriction(templa template_selection==SPECIFIC_VALUE)) return; break; case TR_PRESENT: - if (!match_omit()) return; + if (!match_omit(legacy)) return; break; default: return; @@ -2167,34 +2369,38 @@ void CHARACTER_STRING_identification_context__negotiation::clean_up() void CHARACTER_STRING_identification_context__negotiation::set_param(Module_Param& param) { param.basic_check(Module_Param::BC_VALUE, "record value"); - switch (param.get_type()) { + Module_Param_Ptr mp = ¶m; + if (param.get_type() == Module_Param::MP_Reference) { + mp = param.get_referenced_param(); + } + switch (mp->get_type()) { case Module_Param::MP_Value_List: - if (param.get_size()==0) return; - if (2!=param.get_size()) { - param.error("record value of type CHARACTER STRING.identification.context-negotiation has 2 fields but list value has %d fields", (int)param.get_size()); + if (mp->get_size()==0) return; + if (2!=mp->get_size()) { + param.error("record value of type CHARACTER STRING.identification.context-negotiation has 2 fields but list value has %d fields", (int)mp->get_size()); } - if (param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) presentation__context__id().set_param(*param.get_elem(0)); - if (param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) transfer__syntax().set_param(*param.get_elem(1)); + if (mp->get_elem(0)->get_type()!=Module_Param::MP_NotUsed) presentation__context__id().set_param(*mp->get_elem(0)); + if (mp->get_elem(1)->get_type()!=Module_Param::MP_NotUsed) transfer__syntax().set_param(*mp->get_elem(1)); break; case Module_Param::MP_Assignment_List: { - Vector<bool> value_used(param.get_size()); - value_used.resize(param.get_size(), false); - for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { - Module_Param* const curr_param = param.get_elem(val_idx); + Vector<bool> value_used(mp->get_size()); + value_used.resize(mp->get_size(), false); + for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) { + Module_Param* const curr_param = mp->get_elem(val_idx); if (!strcmp(curr_param->get_id()->get_name(), "presentation_context_id")) { presentation__context__id().set_param(*curr_param); value_used[val_idx]=true; } } - for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { - Module_Param* const curr_param = param.get_elem(val_idx); + for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) { + Module_Param* const curr_param = mp->get_elem(val_idx); if (!strcmp(curr_param->get_id()->get_name(), "transfer_syntax")) { transfer__syntax().set_param(*curr_param); value_used[val_idx]=true; } } - for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) { - param.get_elem(val_idx)->error("Non existent field name in type CHARACTER STRING.identification.context-negotiation: %s", param.get_elem(val_idx)->get_id()->get_name()); + for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) if (!value_used[val_idx]) { + mp->get_elem(val_idx)->error("Non existent field name in type CHARACTER STRING.identification.context-negotiation: %s", mp->get_elem(val_idx)->get_id()->get_name()); break; } } break; @@ -2203,60 +2409,19 @@ void CHARACTER_STRING_identification_context__negotiation::set_param(Module_Para } } -void CHARACTER_STRING_identification_context__negotiation_template::set_param(Module_Param& param) +Module_Param* CHARACTER_STRING_identification_context__negotiation::get_param(Module_Param_Name& param_name) const { - param.basic_check(Module_Param::BC_TEMPLATE, "record template"); - switch (param.get_type()) { - case Module_Param::MP_Omit: - *this = OMIT_VALUE; - break; - case Module_Param::MP_Any: - *this = ANY_VALUE; - break; - case Module_Param::MP_AnyOrNone: - *this = ANY_OR_OMIT; - break; - case Module_Param::MP_List_Template: - case Module_Param::MP_ComplementList_Template: - set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, param.get_size()); - for (size_t p_i=0; p_i<param.get_size(); p_i++) { - list_item(p_i).set_param(*param.get_elem(p_i)); - } - break; - case Module_Param::MP_Value_List: - if (param.get_size()==0) break; - if (2!=param.get_size()) { - param.error("record template of type CHARACTER STRING.identification.context-negotiation has 2 fields but list value has %d fields", (int)param.get_size()); - } - if (param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) presentation__context__id().set_param(*param.get_elem(0)); - if (param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) transfer__syntax().set_param(*param.get_elem(1)); - break; - case Module_Param::MP_Assignment_List: { - Vector<bool> value_used(param.get_size()); - value_used.resize(param.get_size(), false); - for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { - Module_Param* const curr_param = param.get_elem(val_idx); - if (!strcmp(curr_param->get_id()->get_name(), "presentation_context_id")) { - presentation__context__id().set_param(*curr_param); - value_used[val_idx]=true; - } - } - for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { - Module_Param* const curr_param = param.get_elem(val_idx); - if (!strcmp(curr_param->get_id()->get_name(), "transfer_syntax")) { - transfer__syntax().set_param(*curr_param); - value_used[val_idx]=true; - } - } - for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) { - param.get_elem(val_idx)->error("Non existent field name in type CHARACTER STRING.identification.context-negotiation: %s", param.get_elem(val_idx)->get_id()->get_name()); - break; - } - } break; - default: - param.type_error("record template", "CHARACTER STRING.identification.context-negotiation"); + if (!is_bound()) { + return new Module_Param_Unbound(); } - is_ifpresent = param.get_ifpresent(); + Module_Param* mp_field_presentation_context_id = field_presentation__context__id.get_param(param_name); + mp_field_presentation_context_id->set_id(new Module_Param_FieldName(mcopystr("presentation_context_id"))); + Module_Param* mp_field_transfer_syntax = field_transfer__syntax.get_param(param_name); + mp_field_transfer_syntax->set_id(new Module_Param_FieldName(mcopystr("transfer_syntax"))); + Module_Param_Assignment_List* mp = new Module_Param_Assignment_List(); + mp->add_elem(mp_field_presentation_context_id); + mp->add_elem(mp_field_transfer_syntax); + return mp; } void CHARACTER_STRING_identification_context__negotiation::encode_text(Text_Buf& text_buf) const @@ -2363,6 +2528,115 @@ struct CHARACTER_STRING_identification_context__negotiation_template::single_val OBJID_template field_transfer__syntax; }; +void CHARACTER_STRING_identification_context__negotiation_template::set_param(Module_Param& param) +{ + param.basic_check(Module_Param::BC_TEMPLATE, "record template"); + Module_Param_Ptr mp = ¶m; + if (param.get_type() == Module_Param::MP_Reference) { + mp = param.get_referenced_param(); + } + switch (mp->get_type()) { + case Module_Param::MP_Omit: + *this = OMIT_VALUE; + break; + case Module_Param::MP_Any: + *this = ANY_VALUE; + break; + case Module_Param::MP_AnyOrNone: + *this = ANY_OR_OMIT; + break; + case Module_Param::MP_List_Template: + case Module_Param::MP_ComplementList_Template: { + CHARACTER_STRING_identification_context__negotiation_template temp; + temp.set_type(mp->get_type() == Module_Param::MP_List_Template ? + VALUE_LIST : COMPLEMENTED_LIST, mp->get_size()); + for (size_t i=0; i<mp->get_size(); i++) { + temp.list_item(i).set_param(*mp->get_elem(i)); + } + *this = temp; + break; } + case Module_Param::MP_Value_List: + if (mp->get_size()==0) break; + if (2!=mp->get_size()) { + param.error("record template of type CHARACTER STRING.identification.context-negotiation has 2 fields but list value has %d fields", (int)mp->get_size()); + } + if (mp->get_elem(0)->get_type()!=Module_Param::MP_NotUsed) presentation__context__id().set_param(*mp->get_elem(0)); + if (mp->get_elem(1)->get_type()!=Module_Param::MP_NotUsed) transfer__syntax().set_param(*mp->get_elem(1)); + break; + case Module_Param::MP_Assignment_List: { + Vector<bool> value_used(mp->get_size()); + value_used.resize(mp->get_size(), false); + for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) { + Module_Param* const curr_param = mp->get_elem(val_idx); + if (!strcmp(curr_param->get_id()->get_name(), "presentation_context_id")) { + presentation__context__id().set_param(*curr_param); + value_used[val_idx]=true; + } + } + for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) { + Module_Param* const curr_param = mp->get_elem(val_idx); + if (!strcmp(curr_param->get_id()->get_name(), "transfer_syntax")) { + transfer__syntax().set_param(*curr_param); + value_used[val_idx]=true; + } + } + for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) if (!value_used[val_idx]) { + mp->get_elem(val_idx)->error("Non existent field name in type CHARACTER STRING.identification.context-negotiation: %s", mp->get_elem(val_idx)->get_id()->get_name()); + break; + } + } break; + default: + param.type_error("record template", "CHARACTER STRING.identification.context-negotiation"); + } + is_ifpresent = param.get_ifpresent() || mp->get_ifpresent(); +} + +Module_Param* CHARACTER_STRING_identification_context__negotiation_template::get_param(Module_Param_Name& param_name) const +{ + Module_Param* mp = NULL; + switch (template_selection) { + case UNINITIALIZED_TEMPLATE: + mp = new Module_Param_Unbound(); + break; + case OMIT_VALUE: + mp = new Module_Param_Omit(); + break; + case ANY_VALUE: + mp = new Module_Param_Any(); + break; + case ANY_OR_OMIT: + mp = new Module_Param_AnyOrNone(); + break; + case SPECIFIC_VALUE: { + Module_Param* mp_field_presentation_context_id = single_value->field_presentation__context__id.get_param(param_name); + mp_field_presentation_context_id->set_id(new Module_Param_FieldName(mcopystr("presentation_context_id"))); + Module_Param* mp_field_transfer_syntax = single_value->field_transfer__syntax.get_param(param_name); + mp_field_transfer_syntax->set_id(new Module_Param_FieldName(mcopystr("transfer_syntax"))); + mp = new Module_Param_Assignment_List(); + mp->add_elem(mp_field_presentation_context_id); + mp->add_elem(mp_field_transfer_syntax); + break; } + case VALUE_LIST: + case COMPLEMENTED_LIST: { + if (template_selection == VALUE_LIST) { + mp = new Module_Param_List_Template(); + } + else { + mp = new Module_Param_ComplementList_Template(); + } + for (size_t i = 0; i < value_list.n_values; ++i) { + mp->add_elem(value_list.list_value[i].get_param(param_name)); + } + break; } + default: + break; + } + if (is_ifpresent) { + mp->set_ifpresent(); + } + return mp; +} + void CHARACTER_STRING_identification_context__negotiation_template::clean_up() { switch (template_selection) { @@ -2504,7 +2778,8 @@ CHARACTER_STRING_identification_context__negotiation_template& CHARACTER_STRING_ return *this; } -boolean CHARACTER_STRING_identification_context__negotiation_template::match(const CHARACTER_STRING_identification_context__negotiation& other_value) const +boolean CHARACTER_STRING_identification_context__negotiation_template::match(const CHARACTER_STRING_identification_context__negotiation& other_value, + boolean /* legacy */) const { switch (template_selection) { case ANY_VALUE: @@ -2646,7 +2921,8 @@ void CHARACTER_STRING_identification_context__negotiation_template::log() const log_ifpresent(); } -void CHARACTER_STRING_identification_context__negotiation_template::log_match(const CHARACTER_STRING_identification_context__negotiation& match_value) const +void CHARACTER_STRING_identification_context__negotiation_template::log_match(const CHARACTER_STRING_identification_context__negotiation& match_value, + boolean /* legacy */) const { if (template_selection == SPECIFIC_VALUE) { TTCN_Logger::log_event_str("{ presentation_context_id := "); @@ -2712,13 +2988,13 @@ void CHARACTER_STRING_identification_context__negotiation_template::decode_text( } } -boolean CHARACTER_STRING_identification_context__negotiation_template::is_present() const +boolean CHARACTER_STRING_identification_context__negotiation_template::is_present(boolean legacy /* = FALSE */) const { if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE; - return !match_omit(); + return !match_omit(legacy); } -boolean CHARACTER_STRING_identification_context__negotiation_template::match_omit() const +boolean CHARACTER_STRING_identification_context__negotiation_template::match_omit(boolean legacy /* = FALSE */) const { if (is_ifpresent) return TRUE; switch (template_selection) { @@ -2727,10 +3003,12 @@ boolean CHARACTER_STRING_identification_context__negotiation_template::match_omi return TRUE; case VALUE_LIST: case COMPLEMENTED_LIST: - for (unsigned int i=0; i<value_list.n_values; i++) - if (value_list.list_value[i].match_omit()) - return template_selection==VALUE_LIST; - return template_selection==COMPLEMENTED_LIST; + if (legacy) { + for (unsigned int i=0; i<value_list.n_values; i++) + if (value_list.list_value[i].match_omit()) + return template_selection==VALUE_LIST; + return template_selection==COMPLEMENTED_LIST; + } // else fall through default: return FALSE; } @@ -2738,7 +3016,8 @@ boolean CHARACTER_STRING_identification_context__negotiation_template::match_omi } #ifndef TITAN_RUNTIME_2 -void CHARACTER_STRING_identification_context__negotiation_template::check_restriction(template_res t_res, const char* t_name) const +void CHARACTER_STRING_identification_context__negotiation_template::check_restriction(template_res t_res, const char* t_name, + boolean legacy /* = FALSE */) const { if (template_selection==UNINITIALIZED_TEMPLATE) return; switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) { @@ -2750,7 +3029,7 @@ void CHARACTER_STRING_identification_context__negotiation_template::check_restri template_selection==SPECIFIC_VALUE)) return; break; case TR_PRESENT: - if (!match_omit()) return; + if (!match_omit(legacy)) return; break; default: return; @@ -2824,42 +3103,46 @@ void CHARACTER_STRING::log() const void CHARACTER_STRING::set_param(Module_Param& param) { param.basic_check(Module_Param::BC_VALUE, "record value"); - switch (param.get_type()) { + Module_Param_Ptr mp = ¶m; + if (param.get_type() == Module_Param::MP_Reference) { + mp = param.get_referenced_param(); + } + switch (mp->get_type()) { case Module_Param::MP_Value_List: - if (param.get_size()==0) return; - if (3!=param.get_size()) { - param.error("record value of type CHARACTER STRING has 3 fields but list value has %d fields", (int)param.get_size()); + if (mp->get_size()==0) return; + if (3!=mp->get_size()) { + param.error("record value of type CHARACTER STRING has 3 fields but list value has %d fields", (int)mp->get_size()); } - if (param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) identification().set_param(*param.get_elem(0)); - if (param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) data__value__descriptor().set_param(*param.get_elem(1)); - if (param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) string__value().set_param(*param.get_elem(2)); + if (mp->get_elem(0)->get_type()!=Module_Param::MP_NotUsed) identification().set_param(*mp->get_elem(0)); + if (mp->get_elem(1)->get_type()!=Module_Param::MP_NotUsed) data__value__descriptor().set_param(*mp->get_elem(1)); + if (mp->get_elem(2)->get_type()!=Module_Param::MP_NotUsed) string__value().set_param(*mp->get_elem(2)); break; case Module_Param::MP_Assignment_List: { - Vector<bool> value_used(param.get_size()); - value_used.resize(param.get_size(), false); - for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { - Module_Param* const curr_param = param.get_elem(val_idx); + Vector<bool> value_used(mp->get_size()); + value_used.resize(mp->get_size(), false); + for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) { + Module_Param* const curr_param = mp->get_elem(val_idx); if (!strcmp(curr_param->get_id()->get_name(), "identification")) { identification().set_param(*curr_param); value_used[val_idx]=true; } } - for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { - Module_Param* const curr_param = param.get_elem(val_idx); + for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) { + Module_Param* const curr_param = mp->get_elem(val_idx); if (!strcmp(curr_param->get_id()->get_name(), "data_value_descriptor")) { data__value__descriptor().set_param(*curr_param); value_used[val_idx]=true; } } - for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { - Module_Param* const curr_param = param.get_elem(val_idx); + for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) { + Module_Param* const curr_param = mp->get_elem(val_idx); if (!strcmp(curr_param->get_id()->get_name(), "string_value")) { string__value().set_param(*curr_param); value_used[val_idx]=true; } } - for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) { - param.get_elem(val_idx)->error("Non existent field name in type CHARACTER STRING: %s", param.get_elem(val_idx)->get_id()->get_name()); + for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) if (!value_used[val_idx]) { + mp->get_elem(val_idx)->error("Non existent field name in type CHARACTER STRING: %s", mp->get_elem(val_idx)->get_id()->get_name()); break; } } break; @@ -2868,68 +3151,22 @@ void CHARACTER_STRING::set_param(Module_Param& param) } } -void CHARACTER_STRING_template::set_param(Module_Param& param) +Module_Param* CHARACTER_STRING::get_param(Module_Param_Name& param_name) const { - param.basic_check(Module_Param::BC_TEMPLATE, "record template"); - switch (param.get_type()) { - case Module_Param::MP_Omit: - *this = OMIT_VALUE; - break; - case Module_Param::MP_Any: - *this = ANY_VALUE; - break; - case Module_Param::MP_AnyOrNone: - *this = ANY_OR_OMIT; - break; - case Module_Param::MP_List_Template: - case Module_Param::MP_ComplementList_Template: - set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, param.get_size()); - for (size_t p_i=0; p_i<param.get_size(); p_i++) { - list_item(p_i).set_param(*param.get_elem(p_i)); - } - break; - case Module_Param::MP_Value_List: - if (param.get_size()==0) break; - if (3!=param.get_size()) { - param.error("record template of type CHARACTER STRING has 3 fields but list value has %d fields", (int)param.get_size()); - } - if (param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) identification().set_param(*param.get_elem(0)); - if (param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) data__value__descriptor().set_param(*param.get_elem(1)); - if (param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) string__value().set_param(*param.get_elem(2)); - break; - case Module_Param::MP_Assignment_List: { - Vector<bool> value_used(param.get_size()); - value_used.resize(param.get_size(), false); - for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { - Module_Param* const curr_param = param.get_elem(val_idx); - if (!strcmp(curr_param->get_id()->get_name(), "identification")) { - identification().set_param(*curr_param); - value_used[val_idx]=true; - } - } - for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { - Module_Param* const curr_param = param.get_elem(val_idx); - if (!strcmp(curr_param->get_id()->get_name(), "data_value_descriptor")) { - data__value__descriptor().set_param(*curr_param); - value_used[val_idx]=true; - } - } - for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { - Module_Param* const curr_param = param.get_elem(val_idx); - if (!strcmp(curr_param->get_id()->get_name(), "string_value")) { - string__value().set_param(*curr_param); - value_used[val_idx]=true; - } - } - for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) { - param.get_elem(val_idx)->error("Non existent field name in type CHARACTER STRING: %s", param.get_elem(val_idx)->get_id()->get_name()); - break; - } - } break; - default: - param.type_error("record template", "CHARACTER STRING"); + if (!is_bound()) { + return new Module_Param_Unbound(); } - is_ifpresent = param.get_ifpresent(); + Module_Param* mp_field_identification = field_identification.get_param(param_name); + mp_field_identification->set_id(new Module_Param_FieldName(mcopystr("identification"))); + Module_Param* mp_field_data_value_descriptor = field_data__value__descriptor.get_param(param_name); + mp_field_data_value_descriptor->set_id(new Module_Param_FieldName(mcopystr("data_value_descriptor"))); + Module_Param* mp_field_string_value = field_string__value.get_param(param_name); + mp_field_string_value->set_id(new Module_Param_FieldName(mcopystr("string_value"))); + Module_Param_Assignment_List* mp = new Module_Param_Assignment_List(); + mp->add_elem(mp_field_identification); + mp->add_elem(mp_field_data_value_descriptor); + mp->add_elem(mp_field_string_value); + return mp; } void CHARACTER_STRING::encode_text(Text_Buf& text_buf) const @@ -3147,6 +3384,126 @@ struct CHARACTER_STRING_template::single_value_struct { OCTETSTRING_template field_string__value; }; +void CHARACTER_STRING_template::set_param(Module_Param& param) +{ + param.basic_check(Module_Param::BC_TEMPLATE, "record template"); + Module_Param_Ptr mp = ¶m; + if (param.get_type() == Module_Param::MP_Reference) { + mp = param.get_referenced_param(); + } + switch (mp->get_type()) { + case Module_Param::MP_Omit: + *this = OMIT_VALUE; + break; + case Module_Param::MP_Any: + *this = ANY_VALUE; + break; + case Module_Param::MP_AnyOrNone: + *this = ANY_OR_OMIT; + break; + case Module_Param::MP_List_Template: + case Module_Param::MP_ComplementList_Template: { + CHARACTER_STRING_template temp; + temp.set_type(mp->get_type() == Module_Param::MP_List_Template ? + VALUE_LIST : COMPLEMENTED_LIST, mp->get_size()); + for (size_t i=0; i<mp->get_size(); i++) { + temp.list_item(i).set_param(*mp->get_elem(i)); + } + *this = temp; + break; } + case Module_Param::MP_Value_List: + if (mp->get_size()==0) break; + if (3!=mp->get_size()) { + param.error("record template of type CHARACTER STRING has 3 fields but list value has %d fields", (int)mp->get_size()); + } + if (mp->get_elem(0)->get_type()!=Module_Param::MP_NotUsed) identification().set_param(*mp->get_elem(0)); + if (mp->get_elem(1)->get_type()!=Module_Param::MP_NotUsed) data__value__descriptor().set_param(*mp->get_elem(1)); + if (mp->get_elem(2)->get_type()!=Module_Param::MP_NotUsed) string__value().set_param(*mp->get_elem(2)); + break; + case Module_Param::MP_Assignment_List: { + Vector<bool> value_used(mp->get_size()); + value_used.resize(mp->get_size(), false); + for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) { + Module_Param* const curr_param = mp->get_elem(val_idx); + if (!strcmp(curr_param->get_id()->get_name(), "identification")) { + identification().set_param(*curr_param); + value_used[val_idx]=true; + } + } + for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) { + Module_Param* const curr_param = mp->get_elem(val_idx); + if (!strcmp(curr_param->get_id()->get_name(), "data_value_descriptor")) { + data__value__descriptor().set_param(*curr_param); + value_used[val_idx]=true; + } + } + for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) { + Module_Param* const curr_param = mp->get_elem(val_idx); + if (!strcmp(curr_param->get_id()->get_name(), "string_value")) { + string__value().set_param(*curr_param); + value_used[val_idx]=true; + } + } + for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) if (!value_used[val_idx]) { + mp->get_elem(val_idx)->error("Non existent field name in type CHARACTER STRING: %s", mp->get_elem(val_idx)->get_id()->get_name()); + break; + } + } break; + default: + param.type_error("record template", "CHARACTER STRING"); + } + is_ifpresent = param.get_ifpresent() || mp->get_ifpresent(); +} + +Module_Param* CHARACTER_STRING_template::get_param(Module_Param_Name& param_name) const +{ + Module_Param* mp = NULL; + switch (template_selection) { + case UNINITIALIZED_TEMPLATE: + mp = new Module_Param_Unbound(); + break; + case OMIT_VALUE: + mp = new Module_Param_Omit(); + break; + case ANY_VALUE: + mp = new Module_Param_Any(); + break; + case ANY_OR_OMIT: + mp = new Module_Param_AnyOrNone(); + break; + case SPECIFIC_VALUE: { + Module_Param* mp_field_identification = single_value->field_identification.get_param(param_name); + mp_field_identification->set_id(new Module_Param_FieldName(mcopystr("identification"))); + Module_Param* mp_field_data_value_descriptor = single_value->field_data__value__descriptor.get_param(param_name); + mp_field_data_value_descriptor->set_id(new Module_Param_FieldName(mcopystr("data_value_descriptor"))); + Module_Param* mp_field_string_value = single_value->field_string__value.get_param(param_name); + mp_field_string_value->set_id(new Module_Param_FieldName(mcopystr("string_value"))); + mp = new Module_Param_Assignment_List(); + mp->add_elem(mp_field_identification); + mp->add_elem(mp_field_data_value_descriptor); + mp->add_elem(mp_field_string_value); + break; } + case VALUE_LIST: + case COMPLEMENTED_LIST: { + if (template_selection == VALUE_LIST) { + mp = new Module_Param_List_Template(); + } + else { + mp = new Module_Param_ComplementList_Template(); + } + for (size_t i = 0; i < value_list.n_values; ++i) { + mp->add_elem(value_list.list_value[i].get_param(param_name)); + } + break; } + default: + break; + } + if (is_ifpresent) { + mp->set_ifpresent(); + } + return mp; +} + void CHARACTER_STRING_template::clean_up() { switch (template_selection) { @@ -3291,7 +3648,8 @@ CHARACTER_STRING_template& CHARACTER_STRING_template::operator=(const CHARACTER_ return *this; } -boolean CHARACTER_STRING_template::match(const CHARACTER_STRING& other_value) const +boolean CHARACTER_STRING_template::match(const CHARACTER_STRING& other_value, + boolean /* legacy */) const { switch (template_selection) { case ANY_VALUE: @@ -3453,7 +3811,8 @@ void CHARACTER_STRING_template::log() const log_ifpresent(); } -void CHARACTER_STRING_template::log_match(const CHARACTER_STRING& match_value) const +void CHARACTER_STRING_template::log_match(const CHARACTER_STRING& match_value, + boolean /* legacy */) const { if (template_selection == SPECIFIC_VALUE) { TTCN_Logger::log_event_str("{ identification := "); @@ -3528,13 +3887,13 @@ void CHARACTER_STRING_template::decode_text(Text_Buf& text_buf) } } -boolean CHARACTER_STRING_template::is_present() const +boolean CHARACTER_STRING_template::is_present(boolean legacy /* = FALSE */) const { if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE; - return !match_omit(); + return !match_omit(legacy); } -boolean CHARACTER_STRING_template::match_omit() const +boolean CHARACTER_STRING_template::match_omit(boolean legacy /* = FALSE */) const { if (is_ifpresent) return TRUE; switch (template_selection) { @@ -3543,10 +3902,14 @@ boolean CHARACTER_STRING_template::match_omit() const return TRUE; case VALUE_LIST: case COMPLEMENTED_LIST: - for (unsigned int i=0; i<value_list.n_values; i++) - if (value_list.list_value[i].match_omit()) - return template_selection==VALUE_LIST; - return template_selection==COMPLEMENTED_LIST; + if (legacy) { + // legacy behavior: 'omit' can appear in the value/complement list + for (unsigned int i=0; i<value_list.n_values; i++) + if (value_list.list_value[i].match_omit()) + return template_selection==VALUE_LIST; + return template_selection==COMPLEMENTED_LIST; + } + // else fall through default: return FALSE; } @@ -3554,7 +3917,8 @@ boolean CHARACTER_STRING_template::match_omit() const } #ifndef TITAN_RUNTIME_2 -void CHARACTER_STRING_template::check_restriction(template_res t_res, const char* t_name) const +void CHARACTER_STRING_template::check_restriction(template_res t_res, const char* t_name, + boolean legacy /* = FALSE */) const { if (template_selection==UNINITIALIZED_TEMPLATE) return; switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) { @@ -3566,7 +3930,7 @@ void CHARACTER_STRING_template::check_restriction(template_res t_res, const char template_selection==SPECIFIC_VALUE)) return; break; case TR_PRESENT: - if (!match_omit()) return; + if (!match_omit(legacy)) return; break; default: return; diff --git a/core/ASN_CharacterString.hh b/core/ASN_CharacterString.hh index 279bccc0a..f1cd8f666 100644 --- a/core/ASN_CharacterString.hh +++ b/core/ASN_CharacterString.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -79,6 +79,7 @@ public: inline boolean is_present() const { return is_bound(); } #endif void set_param(Module_Param& param); + Module_Param* get_param(Module_Param_Name& param_name) const; void encode_text(Text_Buf& text_buf) const; void decode_text(Text_Buf& text_buf); //void encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t p_coding, ...) const; @@ -130,7 +131,7 @@ public: CHARACTER_STRING_identification_template& operator=(const CHARACTER_STRING_identification& other_value); CHARACTER_STRING_identification_template& operator=(const OPTIONAL<CHARACTER_STRING_identification>& other_value); CHARACTER_STRING_identification_template& operator=(const CHARACTER_STRING_identification_template& other_value); - boolean match(const CHARACTER_STRING_identification& other_value) const; + boolean match(const CHARACTER_STRING_identification& other_value, boolean legacy = FALSE) const; CHARACTER_STRING_identification valueof() const; CHARACTER_STRING_identification_template& list_item(unsigned int list_index) const; void set_type(template_sel template_type, unsigned int list_length); @@ -148,23 +149,24 @@ public: const ASN_NULL_template& fixed() const; boolean ischosen(CHARACTER_STRING_identification::union_selection_type checked_selection) const; void log() const; - void log_match(const CHARACTER_STRING_identification& match_value) const; + void log_match(const CHARACTER_STRING_identification& match_value, boolean legacy = FALSE) const; void encode_text(Text_Buf& text_buf) const; void decode_text(Text_Buf& text_buf); - boolean is_present() const; - boolean match_omit() const; + boolean is_present(boolean legacy = FALSE) const; + boolean match_omit(boolean legacy = FALSE) const; void set_param(Module_Param& param); + Module_Param* get_param(Module_Param_Name& param_name) const; #ifdef TITAN_RUNTIME_2 void valueofv(Base_Type* value) const { *(static_cast<CHARACTER_STRING_identification*>(value)) = valueof(); } void set_value(template_sel other_value) { *this = other_value; } void copy_value(const Base_Type* other_value) { *this = *(static_cast<const CHARACTER_STRING_identification*>(other_value)); } Base_Template* clone() const { return new CHARACTER_STRING_identification_template(*this); } const TTCN_Typedescriptor_t* get_descriptor() const { return &CHARACTER_STRING_descr_; } - boolean matchv(const Base_Type* other_value) const { return match(*(static_cast<const CHARACTER_STRING_identification*>(other_value))); } - void log_matchv(const Base_Type* match_value) const { log_match(*(static_cast<const CHARACTER_STRING_identification*>(match_value))); } + boolean matchv(const Base_Type* other_value, boolean legacy) const { return match(*(static_cast<const CHARACTER_STRING_identification*>(other_value)), legacy); } + void log_matchv(const Base_Type* match_value, boolean legacy) const { log_match(*(static_cast<const CHARACTER_STRING_identification*>(match_value)), legacy); } #else - void check_restriction(template_res t_res, const char* t_name=NULL) const; + void check_restriction(template_res t_res, const char* t_name=NULL, boolean legacy = FALSE) const; #endif }; @@ -201,6 +203,7 @@ public: boolean is_value() const; void clean_up(); void set_param(Module_Param& param); + Module_Param* get_param(Module_Param_Name& param_name) const; void encode_text(Text_Buf& text_buf) const; void decode_text(Text_Buf& text_buf); //void encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t p_coding, ...) const; @@ -245,7 +248,7 @@ public: CHARACTER_STRING_identification_syntaxes_template& operator=(const CHARACTER_STRING_identification_syntaxes& other_value); CHARACTER_STRING_identification_syntaxes_template& operator=(const OPTIONAL<CHARACTER_STRING_identification_syntaxes>& other_value); CHARACTER_STRING_identification_syntaxes_template& operator=(const CHARACTER_STRING_identification_syntaxes_template& other_value); - boolean match(const CHARACTER_STRING_identification_syntaxes& other_value) const; + boolean match(const CHARACTER_STRING_identification_syntaxes& other_value, boolean legacy = FALSE) const; CHARACTER_STRING_identification_syntaxes valueof() const; void set_type(template_sel template_type, unsigned int list_length); CHARACTER_STRING_identification_syntaxes_template& list_item(unsigned int list_index) const; @@ -255,23 +258,24 @@ public: const OBJID_template& transfer() const; int size_of() const; void log() const; - void log_match(const CHARACTER_STRING_identification_syntaxes& match_value) const; + void log_match(const CHARACTER_STRING_identification_syntaxes& match_value, boolean legacy = FALSE) const; void encode_text(Text_Buf& text_buf) const; void decode_text(Text_Buf& text_buf); - boolean is_present() const; - boolean match_omit() const; + boolean is_present(boolean legacy = FALSE) const; + boolean match_omit(boolean legacy = FALSE) const; void set_param(Module_Param& param); + Module_Param* get_param(Module_Param_Name& param_name) const; #ifdef TITAN_RUNTIME_2 void valueofv(Base_Type* value) const { *(static_cast<CHARACTER_STRING_identification_syntaxes*>(value)) = valueof(); } void set_value(template_sel other_value) { *this = other_value; } void copy_value(const Base_Type* other_value) { *this = *(static_cast<const CHARACTER_STRING_identification_syntaxes*>(other_value)); } Base_Template* clone() const { return new CHARACTER_STRING_identification_syntaxes_template(*this); } const TTCN_Typedescriptor_t* get_descriptor() const { return &CHARACTER_STRING_descr_; } - boolean matchv(const Base_Type* other_value) const { return match(*(static_cast<const CHARACTER_STRING_identification_syntaxes*>(other_value))); } - void log_matchv(const Base_Type* match_value) const { log_match(*(static_cast<const CHARACTER_STRING_identification_syntaxes*>(match_value))); } + boolean matchv(const Base_Type* other_value, boolean legacy) const { return match(*(static_cast<const CHARACTER_STRING_identification_syntaxes*>(other_value)), legacy); } + void log_matchv(const Base_Type* match_value, boolean legacy) const { log_match(*(static_cast<const CHARACTER_STRING_identification_syntaxes*>(match_value)), legacy); } #else - void check_restriction(template_res t_res, const char* t_name=NULL) const; + void check_restriction(template_res t_res, const char* t_name=NULL, boolean legacy = FALSE) const; #endif }; @@ -308,6 +312,7 @@ public: inline boolean is_present() const { return is_bound(); } #endif void set_param(Module_Param& param); + Module_Param* get_param(Module_Param_Name& param_name) const; void encode_text(Text_Buf& text_buf) const; void decode_text(Text_Buf& text_buf); //void encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t p_coding, ...) const; @@ -352,7 +357,7 @@ public: CHARACTER_STRING_identification_context__negotiation_template& operator=(const CHARACTER_STRING_identification_context__negotiation& other_value); CHARACTER_STRING_identification_context__negotiation_template& operator=(const OPTIONAL<CHARACTER_STRING_identification_context__negotiation>& other_value); CHARACTER_STRING_identification_context__negotiation_template& operator=(const CHARACTER_STRING_identification_context__negotiation_template& other_value); - boolean match(const CHARACTER_STRING_identification_context__negotiation& other_value) const; + boolean match(const CHARACTER_STRING_identification_context__negotiation& other_value, boolean legacy = FALSE) const; CHARACTER_STRING_identification_context__negotiation valueof() const; void set_type(template_sel template_type, unsigned int list_length); CHARACTER_STRING_identification_context__negotiation_template& list_item(unsigned int list_index) const; @@ -362,23 +367,24 @@ public: const OBJID_template& transfer__syntax() const; int size_of() const; void log() const; - void log_match(const CHARACTER_STRING_identification_context__negotiation& match_value) const; + void log_match(const CHARACTER_STRING_identification_context__negotiation& match_value, boolean legacy = FALSE) const; void encode_text(Text_Buf& text_buf) const; void decode_text(Text_Buf& text_buf); - boolean is_present() const; - boolean match_omit() const; + boolean is_present(boolean legacy = FALSE) const; + boolean match_omit(boolean legacy = FALSE) const; void set_param(Module_Param& param); + Module_Param* get_param(Module_Param_Name& param_name) const; #ifdef TITAN_RUNTIME_2 void valueofv(Base_Type* value) const { *(static_cast<CHARACTER_STRING_identification_context__negotiation*>(value)) = valueof(); } void set_value(template_sel other_value) { *this = other_value; } void copy_value(const Base_Type* other_value) { *this = *(static_cast<const CHARACTER_STRING_identification_context__negotiation*>(other_value)); } Base_Template* clone() const { return new CHARACTER_STRING_identification_context__negotiation_template(*this); } const TTCN_Typedescriptor_t* get_descriptor() const { return &CHARACTER_STRING_descr_; } - boolean matchv(const Base_Type* other_value) const { return match(*(static_cast<const CHARACTER_STRING_identification_context__negotiation*>(other_value))); } - void log_matchv(const Base_Type* match_value) const { log_match(*(static_cast<const CHARACTER_STRING_identification_context__negotiation*>(match_value))); } + boolean matchv(const Base_Type* other_value, boolean legacy) const { return match(*(static_cast<const CHARACTER_STRING_identification_context__negotiation*>(other_value)), legacy); } + void log_matchv(const Base_Type* match_value, boolean legacy) const { log_match(*(static_cast<const CHARACTER_STRING_identification_context__negotiation*>(match_value)), legacy); } #else - void check_restriction(template_res t_res, const char* t_name=NULL) const; + void check_restriction(template_res t_res, const char* t_name=NULL, boolean legacy = FALSE) const; #endif }; @@ -424,6 +430,7 @@ public: inline boolean is_present() const { return is_bound(); } #endif void set_param(Module_Param& param); + Module_Param* get_param(Module_Param_Name& param_name) const; void encode_text(Text_Buf& text_buf) const; void decode_text(Text_Buf& text_buf); void encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t p_coding, ...) const; @@ -466,7 +473,7 @@ public: CHARACTER_STRING_template& operator=(const CHARACTER_STRING& other_value); CHARACTER_STRING_template& operator=(const OPTIONAL<CHARACTER_STRING>& other_value); CHARACTER_STRING_template& operator=(const CHARACTER_STRING_template& other_value); - boolean match(const CHARACTER_STRING& other_value) const; + boolean match(const CHARACTER_STRING& other_value, boolean legacy = FALSE) const; CHARACTER_STRING valueof() const; void set_type(template_sel template_type, unsigned int list_length); CHARACTER_STRING_template& list_item(unsigned int list_index) const; @@ -478,23 +485,24 @@ public: const OCTETSTRING_template& string__value() const; int size_of() const; void log() const; - void log_match(const CHARACTER_STRING& match_value) const; + void log_match(const CHARACTER_STRING& match_value, boolean legacy = FALSE) const; void encode_text(Text_Buf& text_buf) const; void decode_text(Text_Buf& text_buf); - boolean is_present() const; - boolean match_omit() const; + boolean is_present(boolean legacy = FALSE) const; + boolean match_omit(boolean legacy = FALSE) const; void set_param(Module_Param& param); + Module_Param* get_param(Module_Param_Name& param_name) const; #ifdef TITAN_RUNTIME_2 void valueofv(Base_Type* value) const { *(static_cast<CHARACTER_STRING*>(value)) = valueof(); } void set_value(template_sel other_value) { *this = other_value; } void copy_value(const Base_Type* other_value) { *this = *(static_cast<const CHARACTER_STRING*>(other_value)); } Base_Template* clone() const { return new CHARACTER_STRING_template(*this); } const TTCN_Typedescriptor_t* get_descriptor() const { return &CHARACTER_STRING_descr_; } - boolean matchv(const Base_Type* other_value) const { return match(*(static_cast<const CHARACTER_STRING*>(other_value))); } - void log_matchv(const Base_Type* match_value) const { log_match(*(static_cast<const CHARACTER_STRING*>(match_value))); } + boolean matchv(const Base_Type* other_value, boolean legacy) const { return match(*(static_cast<const CHARACTER_STRING*>(other_value)), legacy); } + void log_matchv(const Base_Type* match_value, boolean legacy) const { log_match(*(static_cast<const CHARACTER_STRING*>(match_value)), legacy); } #else - void check_restriction(template_res t_res, const char* t_name=NULL) const; + void check_restriction(template_res t_res, const char* t_name=NULL, boolean legacy = FALSE) const; #endif }; diff --git a/core/ASN_EmbeddedPDV.cc b/core/ASN_EmbeddedPDV.cc index 11cfeed96..c0bb57718 100644 --- a/core/ASN_EmbeddedPDV.cc +++ b/core/ASN_EmbeddedPDV.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -361,11 +361,15 @@ void EMBEDDED_PDV_identification::log() const void EMBEDDED_PDV_identification::set_param(Module_Param& param) { param.basic_check(Module_Param::BC_VALUE, "union value"); - if (param.get_type()==Module_Param::MP_Value_List && param.get_size()==0) return; - if (param.get_type()!=Module_Param::MP_Assignment_List) { + Module_Param_Ptr mp = ¶m; + if (param.get_type() == Module_Param::MP_Reference) { + mp = param.get_referenced_param(); + } + if (mp->get_type()==Module_Param::MP_Value_List && mp->get_size()==0) return; + if (mp->get_type()!=Module_Param::MP_Assignment_List) { param.error("union value with field name was expected"); } - Module_Param* mp_last = param.get_elem(param.get_size()-1); + Module_Param* mp_last = mp->get_elem(mp->get_size()-1); if (!strcmp(mp_last->get_id()->get_name(), "syntaxes")) { syntaxes().set_param(*mp_last); return; @@ -393,10 +397,53 @@ void EMBEDDED_PDV_identification::set_param(Module_Param& param) mp_last->error("Field %s does not exist in type EMBEDDED PDV.identification.", mp_last->get_id()->get_name()); } +Module_Param* EMBEDDED_PDV_identification::get_param(Module_Param_Name& param_name) const +{ + if (!is_bound()) { + return new Module_Param_Unbound(); + } + Module_Param* mp_field = NULL; + switch(get_selection()) { + case ALT_syntaxes: + mp_field = field_syntaxes->get_param(param_name); + mp_field->set_id(new Module_Param_FieldName(mcopystr("syntaxes"))); + break; + case ALT_syntax: + mp_field = field_syntax->get_param(param_name); + mp_field->set_id(new Module_Param_FieldName(mcopystr("syntax"))); + break; + case ALT_presentation__context__id: + mp_field = field_presentation__context__id->get_param(param_name); + mp_field->set_id(new Module_Param_FieldName(mcopystr("presentation_context_id"))); + break; + case ALT_context__negotiation: + mp_field = field_context__negotiation->get_param(param_name); + mp_field->set_id(new Module_Param_FieldName(mcopystr("context_negotiation"))); + break; + case ALT_transfer__syntax: + mp_field = field_transfer__syntax->get_param(param_name); + mp_field->set_id(new Module_Param_FieldName(mcopystr("transfer_syntax"))); + break; + case ALT_fixed: + mp_field = field_fixed->get_param(param_name); + mp_field->set_id(new Module_Param_FieldName(mcopystr("fixed"))); + break; + default: + break; + } + Module_Param_Assignment_List* mp = new Module_Param_Assignment_List(); + mp->add_elem(mp_field); + return mp; +} + void EMBEDDED_PDV_identification_template::set_param(Module_Param& param) { param.basic_check(Module_Param::BC_TEMPLATE, "union template"); - switch (param.get_type()) { + Module_Param_Ptr mp = ¶m; + if (param.get_type() == Module_Param::MP_Reference) { + mp = param.get_referenced_param(); + } + switch (mp->get_type()) { case Module_Param::MP_Omit: *this = OMIT_VALUE; break; @@ -407,18 +454,21 @@ void EMBEDDED_PDV_identification_template::set_param(Module_Param& param) *this = ANY_OR_OMIT; break; case Module_Param::MP_List_Template: - case Module_Param::MP_ComplementList_Template: - set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, param.get_size()); - for (size_t p_i=0; p_i<param.get_size(); p_i++) { - list_item(p_i).set_param(*param.get_elem(p_i)); + case Module_Param::MP_ComplementList_Template: { + EMBEDDED_PDV_identification_template temp; + temp.set_type(mp->get_type() == Module_Param::MP_List_Template ? + VALUE_LIST : COMPLEMENTED_LIST, mp->get_size()); + for (size_t i=0; i<mp->get_size(); i++) { + temp.list_item(i).set_param(*mp->get_elem(i)); } - break; + *this = temp; + break; } case Module_Param::MP_Value_List: - if (param.get_size()==0) break; + if (mp->get_size()==0) break; param.type_error("union template", "EMBEDDED PDV.identification"); break; case Module_Param::MP_Assignment_List: { - Module_Param* mp_last = param.get_elem(param.get_size()-1); + Module_Param* mp_last = mp->get_elem(mp->get_size()-1); if (!strcmp(mp_last->get_id()->get_name(), "syntaxes")) { syntaxes().set_param(*mp_last); break; @@ -448,7 +498,77 @@ void EMBEDDED_PDV_identification_template::set_param(Module_Param& param) default: param.type_error("union template", "EMBEDDED PDV.identification"); } - is_ifpresent = param.get_ifpresent(); + is_ifpresent = param.get_ifpresent() || mp->get_ifpresent(); +} + +Module_Param* EMBEDDED_PDV_identification_template::get_param(Module_Param_Name& param_name) const +{ + Module_Param* mp = NULL; + switch (template_selection) { + case UNINITIALIZED_TEMPLATE: + mp = new Module_Param_Unbound(); + break; + case OMIT_VALUE: + mp = new Module_Param_Omit(); + break; + case ANY_VALUE: + mp = new Module_Param_Any(); + break; + case ANY_OR_OMIT: + mp = new Module_Param_AnyOrNone(); + break; + case SPECIFIC_VALUE: { + Module_Param* mp_field = NULL; + switch(single_value.union_selection) { + case EMBEDDED_PDV_identification::ALT_syntaxes: + mp_field = single_value.field_syntaxes->get_param(param_name); + mp_field->set_id(new Module_Param_FieldName(mcopystr("syntaxes"))); + break; + case EMBEDDED_PDV_identification::ALT_syntax: + mp_field = single_value.field_syntax->get_param(param_name); + mp_field->set_id(new Module_Param_FieldName(mcopystr("syntax"))); + break; + case EMBEDDED_PDV_identification::ALT_presentation__context__id: + mp_field = single_value.field_presentation__context__id->get_param(param_name); + mp_field->set_id(new Module_Param_FieldName(mcopystr("presentation_context_id"))); + break; + case EMBEDDED_PDV_identification::ALT_context__negotiation: + mp_field = single_value.field_context__negotiation->get_param(param_name); + mp_field->set_id(new Module_Param_FieldName(mcopystr("context_negotiation"))); + break; + case EMBEDDED_PDV_identification::ALT_transfer__syntax: + mp_field = single_value.field_transfer__syntax->get_param(param_name); + mp_field->set_id(new Module_Param_FieldName(mcopystr("transfer_syntax"))); + break; + case EMBEDDED_PDV_identification::ALT_fixed: + mp_field = single_value.field_fixed->get_param(param_name); + mp_field->set_id(new Module_Param_FieldName(mcopystr("fixed"))); + break; + default: + break; + } + mp = new Module_Param_Assignment_List(); + mp->add_elem(mp_field); + break; } + case VALUE_LIST: + case COMPLEMENTED_LIST: { + if (template_selection == VALUE_LIST) { + mp = new Module_Param_List_Template(); + } + else { + mp = new Module_Param_ComplementList_Template(); + } + for (size_t i = 0; i < value_list.n_values; ++i) { + mp->add_elem(value_list.list_value[i].get_param(param_name)); + } + break; } + default: + break; + } + if (is_ifpresent) { + mp->set_ifpresent(); + } + return mp; } void EMBEDDED_PDV_identification::encode_text(Text_Buf& text_buf) const @@ -930,7 +1050,8 @@ EMBEDDED_PDV_identification_template& EMBEDDED_PDV_identification_template::oper return *this; } -boolean EMBEDDED_PDV_identification_template::match(const EMBEDDED_PDV_identification& other_value) const +boolean EMBEDDED_PDV_identification_template::match(const EMBEDDED_PDV_identification& other_value, + boolean /* legacy */) const { switch (template_selection) { case ANY_VALUE: @@ -1228,7 +1349,8 @@ void EMBEDDED_PDV_identification_template::log() const log_ifpresent(); } -void EMBEDDED_PDV_identification_template::log_match(const EMBEDDED_PDV_identification& match_value) const +void EMBEDDED_PDV_identification_template::log_match(const EMBEDDED_PDV_identification& match_value, + boolean /* legacy */) const { if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){ if(match(match_value)){ @@ -1413,13 +1535,13 @@ void EMBEDDED_PDV_identification_template::decode_text(Text_Buf& text_buf) } } -boolean EMBEDDED_PDV_identification_template::is_present() const +boolean EMBEDDED_PDV_identification_template::is_present(boolean legacy /* = FALSE */) const { if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE; - return !match_omit(); + return !match_omit(legacy); } -boolean EMBEDDED_PDV_identification_template::match_omit() const +boolean EMBEDDED_PDV_identification_template::match_omit(boolean legacy /* = FALSE */) const { if (is_ifpresent) return TRUE; switch (template_selection) { @@ -1428,10 +1550,12 @@ boolean EMBEDDED_PDV_identification_template::match_omit() const return TRUE; case VALUE_LIST: case COMPLEMENTED_LIST: - for (unsigned int i=0; i<value_list.n_values; i++) - if (value_list.list_value[i].match_omit()) - return template_selection==VALUE_LIST; - return template_selection==COMPLEMENTED_LIST; + if (legacy) { + for (unsigned int i=0; i<value_list.n_values; i++) + if (value_list.list_value[i].match_omit()) + return template_selection==VALUE_LIST; + return template_selection==COMPLEMENTED_LIST; + } // else fall through default: return FALSE; } @@ -1439,7 +1563,8 @@ boolean EMBEDDED_PDV_identification_template::match_omit() const } #ifndef TITAN_RUNTIME_2 -void EMBEDDED_PDV_identification_template::check_restriction(template_res t_res, const char* t_name) const +void EMBEDDED_PDV_identification_template::check_restriction(template_res t_res, const char* t_name, + boolean legacy /* = FALSE */) const { if (template_selection==UNINITIALIZED_TEMPLATE) return; switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) { @@ -1451,7 +1576,7 @@ void EMBEDDED_PDV_identification_template::check_restriction(template_res t_res, template_selection==SPECIFIC_VALUE)) return; break; case TR_PRESENT: - if (!match_omit()) return; + if (!match_omit(legacy)) return; break; default: return; @@ -1516,34 +1641,38 @@ void EMBEDDED_PDV_identification_syntaxes::clean_up() void EMBEDDED_PDV_identification_syntaxes::set_param(Module_Param& param) { param.basic_check(Module_Param::BC_VALUE, "record value"); - switch (param.get_type()) { + Module_Param_Ptr mp = ¶m; + if (param.get_type() == Module_Param::MP_Reference) { + mp = param.get_referenced_param(); + } + switch (mp->get_type()) { case Module_Param::MP_Value_List: - if (param.get_size()==0) return; - if (2!=param.get_size()) { - param.error("record value of type EMBEDDED PDV.identification.syntaxes has 2 fields but list value has %d fields", (int)param.get_size()); + if (mp->get_size()==0) return; + if (2!=mp->get_size()) { + param.error("record value of type EMBEDDED PDV.identification.syntaxes has 2 fields but list value has %d fields", (int)mp->get_size()); } - if (param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) abstract().set_param(*param.get_elem(0)); - if (param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) transfer().set_param(*param.get_elem(1)); + if (mp->get_elem(0)->get_type()!=Module_Param::MP_NotUsed) abstract().set_param(*mp->get_elem(0)); + if (mp->get_elem(1)->get_type()!=Module_Param::MP_NotUsed) transfer().set_param(*mp->get_elem(1)); break; case Module_Param::MP_Assignment_List: { - Vector<bool> value_used(param.get_size()); - value_used.resize(param.get_size(), false); - for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { - Module_Param* const curr_param = param.get_elem(val_idx); + Vector<bool> value_used(mp->get_size()); + value_used.resize(mp->get_size(), false); + for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) { + Module_Param* const curr_param = mp->get_elem(val_idx); if (!strcmp(curr_param->get_id()->get_name(), "abstract")) { abstract().set_param(*curr_param); value_used[val_idx]=true; } } - for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { - Module_Param* const curr_param = param.get_elem(val_idx); + for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) { + Module_Param* const curr_param = mp->get_elem(val_idx); if (!strcmp(curr_param->get_id()->get_name(), "transfer")) { transfer().set_param(*curr_param); value_used[val_idx]=true; } } - for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) { - param.get_elem(val_idx)->error("Non existent field name in type EMBEDDED PDV.identification.syntaxes: %s", param.get_elem(val_idx)->get_id()->get_name()); + for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) if (!value_used[val_idx]) { + mp->get_elem(val_idx)->error("Non existent field name in type EMBEDDED PDV.identification.syntaxes: %s", mp->get_elem(val_idx)->get_id()->get_name()); break; } } break; @@ -1552,60 +1681,19 @@ void EMBEDDED_PDV_identification_syntaxes::set_param(Module_Param& param) } } -void EMBEDDED_PDV_identification_syntaxes_template::set_param(Module_Param& param) +Module_Param* EMBEDDED_PDV_identification_syntaxes::get_param(Module_Param_Name& param_name) const { - param.basic_check(Module_Param::BC_TEMPLATE, "record template"); - switch (param.get_type()) { - case Module_Param::MP_Omit: - *this = OMIT_VALUE; - break; - case Module_Param::MP_Any: - *this = ANY_VALUE; - break; - case Module_Param::MP_AnyOrNone: - *this = ANY_OR_OMIT; - break; - case Module_Param::MP_List_Template: - case Module_Param::MP_ComplementList_Template: - set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, param.get_size()); - for (size_t p_i=0; p_i<param.get_size(); p_i++) { - list_item(p_i).set_param(*param.get_elem(p_i)); - } - break; - case Module_Param::MP_Value_List: - if (param.get_size()==0) break; - if (2!=param.get_size()) { - param.error("record template of type EMBEDDED PDV.identification.syntaxes has 2 fields but list value has %d fields", (int)param.get_size()); - } - if (param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) abstract().set_param(*param.get_elem(0)); - if (param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) transfer().set_param(*param.get_elem(1)); - break; - case Module_Param::MP_Assignment_List: { - Vector<bool> value_used(param.get_size()); - value_used.resize(param.get_size(), false); - for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { - Module_Param* const curr_param = param.get_elem(val_idx); - if (!strcmp(curr_param->get_id()->get_name(), "abstract")) { - abstract().set_param(*curr_param); - value_used[val_idx]=true; - } - } - for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { - Module_Param* const curr_param = param.get_elem(val_idx); - if (!strcmp(curr_param->get_id()->get_name(), "transfer")) { - transfer().set_param(*curr_param); - value_used[val_idx]=true; - } - } - for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) { - param.get_elem(val_idx)->error("Non existent field name in type EMBEDDED PDV.identification.syntaxes: %s", param.get_elem(val_idx)->get_id()->get_name()); - break; - } - } break; - default: - param.type_error("record template", "EMBEDDED PDV.identification.syntaxes"); + if (!is_bound()) { + return new Module_Param_Unbound(); } - is_ifpresent = param.get_ifpresent(); + Module_Param* mp_field_abstract = field_abstract.get_param(param_name); + mp_field_abstract->set_id(new Module_Param_FieldName(mcopystr("abstract"))); + Module_Param* mp_field_transfer = field_transfer.get_param(param_name); + mp_field_transfer->set_id(new Module_Param_FieldName(mcopystr("transfer"))); + Module_Param_Assignment_List* mp = new Module_Param_Assignment_List(); + mp->add_elem(mp_field_abstract); + mp->add_elem(mp_field_transfer); + return mp; } void EMBEDDED_PDV_identification_syntaxes::encode_text(Text_Buf& text_buf) const @@ -1719,6 +1807,115 @@ struct EMBEDDED_PDV_identification_syntaxes_template::single_value_struct { OBJID_template field_transfer; }; +void EMBEDDED_PDV_identification_syntaxes_template::set_param(Module_Param& param) +{ + param.basic_check(Module_Param::BC_TEMPLATE, "record template"); + Module_Param_Ptr mp = ¶m; + if (param.get_type() == Module_Param::MP_Reference) { + mp = param.get_referenced_param(); + } + switch (mp->get_type()) { + case Module_Param::MP_Omit: + *this = OMIT_VALUE; + break; + case Module_Param::MP_Any: + *this = ANY_VALUE; + break; + case Module_Param::MP_AnyOrNone: + *this = ANY_OR_OMIT; + break; + case Module_Param::MP_List_Template: + case Module_Param::MP_ComplementList_Template: { + EMBEDDED_PDV_identification_syntaxes_template temp; + temp.set_type(mp->get_type() == Module_Param::MP_List_Template ? + VALUE_LIST : COMPLEMENTED_LIST, mp->get_size()); + for (size_t i=0; i<mp->get_size(); i++) { + temp.list_item(i).set_param(*mp->get_elem(i)); + } + *this = temp; + break; } + case Module_Param::MP_Value_List: + if (mp->get_size()==0) break; + if (2!=mp->get_size()) { + param.error("record template of type EMBEDDED PDV.identification.syntaxes has 2 fields but list value has %d fields", (int)mp->get_size()); + } + if (mp->get_elem(0)->get_type()!=Module_Param::MP_NotUsed) abstract().set_param(*mp->get_elem(0)); + if (mp->get_elem(1)->get_type()!=Module_Param::MP_NotUsed) transfer().set_param(*mp->get_elem(1)); + break; + case Module_Param::MP_Assignment_List: { + Vector<bool> value_used(mp->get_size()); + value_used.resize(mp->get_size(), false); + for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) { + Module_Param* const curr_param = mp->get_elem(val_idx); + if (!strcmp(curr_param->get_id()->get_name(), "abstract")) { + abstract().set_param(*curr_param); + value_used[val_idx]=true; + } + } + for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) { + Module_Param* const curr_param = mp->get_elem(val_idx); + if (!strcmp(curr_param->get_id()->get_name(), "transfer")) { + transfer().set_param(*curr_param); + value_used[val_idx]=true; + } + } + for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) if (!value_used[val_idx]) { + mp->get_elem(val_idx)->error("Non existent field name in type EMBEDDED PDV.identification.syntaxes: %s", mp->get_elem(val_idx)->get_id()->get_name()); + break; + } + } break; + default: + param.type_error("record template", "EMBEDDED PDV.identification.syntaxes"); + } + is_ifpresent = param.get_ifpresent() || mp->get_ifpresent(); +} + +Module_Param* EMBEDDED_PDV_identification_syntaxes_template::get_param(Module_Param_Name& param_name) const +{ + Module_Param* mp = NULL; + switch (template_selection) { + case UNINITIALIZED_TEMPLATE: + mp = new Module_Param_Unbound(); + break; + case OMIT_VALUE: + mp = new Module_Param_Omit(); + break; + case ANY_VALUE: + mp = new Module_Param_Any(); + break; + case ANY_OR_OMIT: + mp = new Module_Param_AnyOrNone(); + break; + case SPECIFIC_VALUE: { + Module_Param* mp_field_abstract = single_value->field_abstract.get_param(param_name); + mp_field_abstract->set_id(new Module_Param_FieldName(mcopystr("abstract"))); + Module_Param* mp_field_transfer = single_value->field_transfer.get_param(param_name); + mp_field_transfer->set_id(new Module_Param_FieldName(mcopystr("transfer"))); + mp = new Module_Param_Assignment_List(); + mp->add_elem(mp_field_abstract); + mp->add_elem(mp_field_transfer); + break; } + case VALUE_LIST: + case COMPLEMENTED_LIST: { + if (template_selection == VALUE_LIST) { + mp = new Module_Param_List_Template(); + } + else { + mp = new Module_Param_ComplementList_Template(); + } + for (size_t i = 0; i < value_list.n_values; ++i) { + mp->add_elem(value_list.list_value[i].get_param(param_name)); + } + break; } + default: + break; + } + if (is_ifpresent) { + mp->set_ifpresent(); + } + return mp; +} + void EMBEDDED_PDV_identification_syntaxes_template::clean_up() { switch (template_selection) { @@ -1860,7 +2057,8 @@ EMBEDDED_PDV_identification_syntaxes_template& EMBEDDED_PDV_identification_synta return *this; } -boolean EMBEDDED_PDV_identification_syntaxes_template::match(const EMBEDDED_PDV_identification_syntaxes& other_value) const +boolean EMBEDDED_PDV_identification_syntaxes_template::match(const EMBEDDED_PDV_identification_syntaxes& other_value, + boolean /* legacy */) const { switch (template_selection) { case ANY_VALUE: @@ -2002,7 +2200,8 @@ void EMBEDDED_PDV_identification_syntaxes_template::log() const log_ifpresent(); } -void EMBEDDED_PDV_identification_syntaxes_template::log_match(const EMBEDDED_PDV_identification_syntaxes& match_value) const +void EMBEDDED_PDV_identification_syntaxes_template::log_match(const EMBEDDED_PDV_identification_syntaxes& match_value, + boolean /* legacy */) const { if (template_selection == SPECIFIC_VALUE) { TTCN_Logger::log_event_str("{ abstract := "); @@ -2068,13 +2267,13 @@ void EMBEDDED_PDV_identification_syntaxes_template::decode_text(Text_Buf& text_b } } -boolean EMBEDDED_PDV_identification_syntaxes_template::is_present() const +boolean EMBEDDED_PDV_identification_syntaxes_template::is_present(boolean legacy /* = FALSE */) const { if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE; - return !match_omit(); + return !match_omit(legacy); } -boolean EMBEDDED_PDV_identification_syntaxes_template::match_omit() const +boolean EMBEDDED_PDV_identification_syntaxes_template::match_omit(boolean legacy /* = FALSE */) const { if (is_ifpresent) return TRUE; switch (template_selection) { @@ -2083,10 +2282,12 @@ boolean EMBEDDED_PDV_identification_syntaxes_template::match_omit() const return TRUE; case VALUE_LIST: case COMPLEMENTED_LIST: - for (unsigned int i=0; i<value_list.n_values; i++) - if (value_list.list_value[i].match_omit()) - return template_selection==VALUE_LIST; - return template_selection==COMPLEMENTED_LIST; + if (legacy) { + for (unsigned int i=0; i<value_list.n_values; i++) + if (value_list.list_value[i].match_omit()) + return template_selection==VALUE_LIST; + return template_selection==COMPLEMENTED_LIST; + } // else fall through default: return FALSE; } @@ -2094,7 +2295,8 @@ boolean EMBEDDED_PDV_identification_syntaxes_template::match_omit() const } #ifndef TITAN_RUNTIME_2 -void EMBEDDED_PDV_identification_syntaxes_template::check_restriction(template_res t_res, const char* t_name) const +void EMBEDDED_PDV_identification_syntaxes_template::check_restriction(template_res t_res, const char* t_name, + boolean legacy /* = FALSE */) const { if (template_selection==UNINITIALIZED_TEMPLATE) return; switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) { @@ -2106,7 +2308,7 @@ void EMBEDDED_PDV_identification_syntaxes_template::check_restriction(template_r template_selection==SPECIFIC_VALUE)) return; break; case TR_PRESENT: - if (!match_omit()) return; + if (!match_omit(legacy)) return; break; default: return; @@ -2171,34 +2373,38 @@ void EMBEDDED_PDV_identification_context__negotiation::clean_up() void EMBEDDED_PDV_identification_context__negotiation::set_param(Module_Param& param) { param.basic_check(Module_Param::BC_VALUE, "record value"); - switch (param.get_type()) { + Module_Param_Ptr mp = ¶m; + if (param.get_type() == Module_Param::MP_Reference) { + mp = param.get_referenced_param(); + } + switch (mp->get_type()) { case Module_Param::MP_Value_List: - if (param.get_size()==0) return; - if (2!=param.get_size()) { - param.error("record value of type EMBEDDED PDV.identification.context-negotiation has 2 fields but list value has %d fields", (int)param.get_size()); + if (mp->get_size()==0) return; + if (2!=mp->get_size()) { + param.error("record value of type EMBEDDED PDV.identification.context-negotiation has 2 fields but list value has %d fields", (int)mp->get_size()); } - if (param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) presentation__context__id().set_param(*param.get_elem(0)); - if (param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) transfer__syntax().set_param(*param.get_elem(1)); + if (mp->get_elem(0)->get_type()!=Module_Param::MP_NotUsed) presentation__context__id().set_param(*mp->get_elem(0)); + if (mp->get_elem(1)->get_type()!=Module_Param::MP_NotUsed) transfer__syntax().set_param(*mp->get_elem(1)); break; case Module_Param::MP_Assignment_List: { - Vector<bool> value_used(param.get_size()); - value_used.resize(param.get_size(), false); - for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { - Module_Param* const curr_param = param.get_elem(val_idx); + Vector<bool> value_used(mp->get_size()); + value_used.resize(mp->get_size(), false); + for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) { + Module_Param* const curr_param = mp->get_elem(val_idx); if (!strcmp(curr_param->get_id()->get_name(), "presentation_context_id")) { presentation__context__id().set_param(*curr_param); value_used[val_idx]=true; } } - for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { - Module_Param* const curr_param = param.get_elem(val_idx); + for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) { + Module_Param* const curr_param = mp->get_elem(val_idx); if (!strcmp(curr_param->get_id()->get_name(), "transfer_syntax")) { transfer__syntax().set_param(*curr_param); value_used[val_idx]=true; } } - for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) { - param.get_elem(val_idx)->error("Non existent field name in type EMBEDDED PDV.identification.context-negotiation: %s", param.get_elem(val_idx)->get_id()->get_name()); + for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) if (!value_used[val_idx]) { + mp->get_elem(val_idx)->error("Non existent field name in type EMBEDDED PDV.identification.context-negotiation: %s", mp->get_elem(val_idx)->get_id()->get_name()); break; } } break; @@ -2207,60 +2413,19 @@ void EMBEDDED_PDV_identification_context__negotiation::set_param(Module_Param& p } } -void EMBEDDED_PDV_identification_context__negotiation_template::set_param(Module_Param& param) +Module_Param* EMBEDDED_PDV_identification_context__negotiation::get_param(Module_Param_Name& param_name) const { - param.basic_check(Module_Param::BC_TEMPLATE, "record template"); - switch (param.get_type()) { - case Module_Param::MP_Omit: - *this = OMIT_VALUE; - break; - case Module_Param::MP_Any: - *this = ANY_VALUE; - break; - case Module_Param::MP_AnyOrNone: - *this = ANY_OR_OMIT; - break; - case Module_Param::MP_List_Template: - case Module_Param::MP_ComplementList_Template: - set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, param.get_size()); - for (size_t p_i=0; p_i<param.get_size(); p_i++) { - list_item(p_i).set_param(*param.get_elem(p_i)); - } - break; - case Module_Param::MP_Value_List: - if (param.get_size()==0) break; - if (2!=param.get_size()) { - param.error("record template of type EMBEDDED PDV.identification.context-negotiation has 2 fields but list value has %d fields", (int)param.get_size()); - } - if (param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) presentation__context__id().set_param(*param.get_elem(0)); - if (param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) transfer__syntax().set_param(*param.get_elem(1)); - break; - case Module_Param::MP_Assignment_List: { - Vector<bool> value_used(param.get_size()); - value_used.resize(param.get_size(), false); - for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { - Module_Param* const curr_param = param.get_elem(val_idx); - if (!strcmp(curr_param->get_id()->get_name(), "presentation_context_id")) { - presentation__context__id().set_param(*curr_param); - value_used[val_idx]=true; - } - } - for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { - Module_Param* const curr_param = param.get_elem(val_idx); - if (!strcmp(curr_param->get_id()->get_name(), "transfer_syntax")) { - transfer__syntax().set_param(*curr_param); - value_used[val_idx]=true; - } - } - for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) { - param.get_elem(val_idx)->error("Non existent field name in type EMBEDDED PDV.identification.context-negotiation: %s", param.get_elem(val_idx)->get_id()->get_name()); - break; - } - } break; - default: - param.type_error("record template", "EMBEDDED PDV.identification.context-negotiation"); + if (!is_bound()) { + return new Module_Param_Unbound(); } - is_ifpresent = param.get_ifpresent(); + Module_Param* mp_field_presentation_context_id = field_presentation__context__id.get_param(param_name); + mp_field_presentation_context_id->set_id(new Module_Param_FieldName(mcopystr("presentation_context_id"))); + Module_Param* mp_field_transfer_syntax = field_transfer__syntax.get_param(param_name); + mp_field_transfer_syntax->set_id(new Module_Param_FieldName(mcopystr("transfer_syntax"))); + Module_Param_Assignment_List* mp = new Module_Param_Assignment_List(); + mp->add_elem(mp_field_presentation_context_id); + mp->add_elem(mp_field_transfer_syntax); + return mp; } void EMBEDDED_PDV_identification_context__negotiation::encode_text(Text_Buf& text_buf) const @@ -2375,6 +2540,115 @@ struct EMBEDDED_PDV_identification_context__negotiation_template::single_value_s OBJID_template field_transfer__syntax; }; +void EMBEDDED_PDV_identification_context__negotiation_template::set_param(Module_Param& param) +{ + param.basic_check(Module_Param::BC_TEMPLATE, "record template"); + Module_Param_Ptr mp = ¶m; + if (param.get_type() == Module_Param::MP_Reference) { + mp = param.get_referenced_param(); + } + switch (mp->get_type()) { + case Module_Param::MP_Omit: + *this = OMIT_VALUE; + break; + case Module_Param::MP_Any: + *this = ANY_VALUE; + break; + case Module_Param::MP_AnyOrNone: + *this = ANY_OR_OMIT; + break; + case Module_Param::MP_List_Template: + case Module_Param::MP_ComplementList_Template: { + EMBEDDED_PDV_identification_context__negotiation_template temp; + temp.set_type(mp->get_type() == Module_Param::MP_List_Template ? + VALUE_LIST : COMPLEMENTED_LIST, mp->get_size()); + for (size_t i=0; i<mp->get_size(); i++) { + temp.list_item(i).set_param(*mp->get_elem(i)); + } + *this = temp; + break; } + case Module_Param::MP_Value_List: + if (mp->get_size()==0) break; + if (2!=mp->get_size()) { + param.error("record template of type EMBEDDED PDV.identification.context-negotiation has 2 fields but list value has %d fields", (int)mp->get_size()); + } + if (mp->get_elem(0)->get_type()!=Module_Param::MP_NotUsed) presentation__context__id().set_param(*mp->get_elem(0)); + if (mp->get_elem(1)->get_type()!=Module_Param::MP_NotUsed) transfer__syntax().set_param(*mp->get_elem(1)); + break; + case Module_Param::MP_Assignment_List: { + Vector<bool> value_used(mp->get_size()); + value_used.resize(mp->get_size(), false); + for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) { + Module_Param* const curr_param = mp->get_elem(val_idx); + if (!strcmp(curr_param->get_id()->get_name(), "presentation_context_id")) { + presentation__context__id().set_param(*curr_param); + value_used[val_idx]=true; + } + } + for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) { + Module_Param* const curr_param = mp->get_elem(val_idx); + if (!strcmp(curr_param->get_id()->get_name(), "transfer_syntax")) { + transfer__syntax().set_param(*curr_param); + value_used[val_idx]=true; + } + } + for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) if (!value_used[val_idx]) { + mp->get_elem(val_idx)->error("Non existent field name in type EMBEDDED PDV.identification.context-negotiation: %s", mp->get_elem(val_idx)->get_id()->get_name()); + break; + } + } break; + default: + param.type_error("record template", "EMBEDDED PDV.identification.context-negotiation"); + } + is_ifpresent = param.get_ifpresent() || mp->get_ifpresent(); +} + +Module_Param* EMBEDDED_PDV_identification_context__negotiation_template::get_param(Module_Param_Name& param_name) const +{ + Module_Param* mp = NULL; + switch (template_selection) { + case UNINITIALIZED_TEMPLATE: + mp = new Module_Param_Unbound(); + break; + case OMIT_VALUE: + mp = new Module_Param_Omit(); + break; + case ANY_VALUE: + mp = new Module_Param_Any(); + break; + case ANY_OR_OMIT: + mp = new Module_Param_AnyOrNone(); + break; + case SPECIFIC_VALUE: { + Module_Param* mp_field_presentation_context_id = single_value->field_presentation__context__id.get_param(param_name); + mp_field_presentation_context_id->set_id(new Module_Param_FieldName(mcopystr("presentation_context_id"))); + Module_Param* mp_field_transfer_syntax = single_value->field_transfer__syntax.get_param(param_name); + mp_field_transfer_syntax->set_id(new Module_Param_FieldName(mcopystr("transfer_syntax"))); + mp = new Module_Param_Assignment_List(); + mp->add_elem(mp_field_presentation_context_id); + mp->add_elem(mp_field_transfer_syntax); + break; } + case VALUE_LIST: + case COMPLEMENTED_LIST: { + if (template_selection == VALUE_LIST) { + mp = new Module_Param_List_Template(); + } + else { + mp = new Module_Param_ComplementList_Template(); + } + for (size_t i = 0; i < value_list.n_values; ++i) { + mp->add_elem(value_list.list_value[i].get_param(param_name)); + } + break; } + default: + break; + } + if (is_ifpresent) { + mp->set_ifpresent(); + } + return mp; +} + void EMBEDDED_PDV_identification_context__negotiation_template::clean_up() { switch (template_selection) { @@ -2516,7 +2790,8 @@ EMBEDDED_PDV_identification_context__negotiation_template& EMBEDDED_PDV_identifi return *this; } -boolean EMBEDDED_PDV_identification_context__negotiation_template::match(const EMBEDDED_PDV_identification_context__negotiation& other_value) const +boolean EMBEDDED_PDV_identification_context__negotiation_template::match(const EMBEDDED_PDV_identification_context__negotiation& other_value, + boolean /* legacy */) const { switch (template_selection) { case ANY_VALUE: @@ -2658,7 +2933,8 @@ void EMBEDDED_PDV_identification_context__negotiation_template::log() const log_ifpresent(); } -void EMBEDDED_PDV_identification_context__negotiation_template::log_match(const EMBEDDED_PDV_identification_context__negotiation& match_value) const +void EMBEDDED_PDV_identification_context__negotiation_template::log_match(const EMBEDDED_PDV_identification_context__negotiation& match_value, + boolean /* legacy */) const { if (template_selection == SPECIFIC_VALUE) { TTCN_Logger::log_event_str("{ presentation_context_id := "); @@ -2724,13 +3000,13 @@ void EMBEDDED_PDV_identification_context__negotiation_template::decode_text(Text } } -boolean EMBEDDED_PDV_identification_context__negotiation_template::is_present() const +boolean EMBEDDED_PDV_identification_context__negotiation_template::is_present(boolean legacy /* = FALSE */) const { if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE; - return !match_omit(); + return !match_omit(legacy); } -boolean EMBEDDED_PDV_identification_context__negotiation_template::match_omit() const +boolean EMBEDDED_PDV_identification_context__negotiation_template::match_omit(boolean legacy /* = FALSE */) const { if (is_ifpresent) return TRUE; switch (template_selection) { @@ -2739,10 +3015,12 @@ boolean EMBEDDED_PDV_identification_context__negotiation_template::match_omit() return TRUE; case VALUE_LIST: case COMPLEMENTED_LIST: - for (unsigned int i=0; i<value_list.n_values; i++) - if (value_list.list_value[i].match_omit()) - return template_selection==VALUE_LIST; - return template_selection==COMPLEMENTED_LIST; + if (legacy) { + for (unsigned int i=0; i<value_list.n_values; i++) + if (value_list.list_value[i].match_omit()) + return template_selection==VALUE_LIST; + return template_selection==COMPLEMENTED_LIST; + } // else fall through default: return FALSE; } @@ -2750,7 +3028,8 @@ boolean EMBEDDED_PDV_identification_context__negotiation_template::match_omit() } #ifndef TITAN_RUNTIME_2 -void EMBEDDED_PDV_identification_context__negotiation_template::check_restriction(template_res t_res, const char* t_name) const +void EMBEDDED_PDV_identification_context__negotiation_template::check_restriction(template_res t_res, const char* t_name, + boolean legacy /* = FALSE */) const { if (template_selection==UNINITIALIZED_TEMPLATE) return; switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) { @@ -2762,7 +3041,7 @@ void EMBEDDED_PDV_identification_context__negotiation_template::check_restrictio template_selection==SPECIFIC_VALUE)) return; break; case TR_PRESENT: - if (!match_omit()) return; + if (!match_omit(legacy)) return; break; default: return; @@ -2836,42 +3115,46 @@ void EMBEDDED_PDV::clean_up() void EMBEDDED_PDV::set_param(Module_Param& param) { param.basic_check(Module_Param::BC_VALUE, "record value"); - switch (param.get_type()) { + Module_Param_Ptr mp = ¶m; + if (param.get_type() == Module_Param::MP_Reference) { + mp = param.get_referenced_param(); + } + switch (mp->get_type()) { case Module_Param::MP_Value_List: - if (param.get_size()==0) return; - if (3!=param.get_size()) { - param.error("record value of type EMBEDDED PDV has 3 fields but list value has %d fields", (int)param.get_size()); + if (mp->get_size()==0) return; + if (3!=mp->get_size()) { + param.error("record value of type EMBEDDED PDV has 3 fields but list value has %d fields", (int)mp->get_size()); } - if (param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) identification().set_param(*param.get_elem(0)); - if (param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) data__value__descriptor().set_param(*param.get_elem(1)); - if (param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) data__value().set_param(*param.get_elem(2)); + if (mp->get_elem(0)->get_type()!=Module_Param::MP_NotUsed) identification().set_param(*mp->get_elem(0)); + if (mp->get_elem(1)->get_type()!=Module_Param::MP_NotUsed) data__value__descriptor().set_param(*mp->get_elem(1)); + if (mp->get_elem(2)->get_type()!=Module_Param::MP_NotUsed) data__value().set_param(*mp->get_elem(2)); break; case Module_Param::MP_Assignment_List: { - Vector<bool> value_used(param.get_size()); - value_used.resize(param.get_size(), false); - for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { - Module_Param* const curr_param = param.get_elem(val_idx); + Vector<bool> value_used(mp->get_size()); + value_used.resize(mp->get_size(), false); + for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) { + Module_Param* const curr_param = mp->get_elem(val_idx); if (!strcmp(curr_param->get_id()->get_name(), "identification")) { identification().set_param(*curr_param); value_used[val_idx]=true; } } - for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { - Module_Param* const curr_param = param.get_elem(val_idx); + for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) { + Module_Param* const curr_param = mp->get_elem(val_idx); if (!strcmp(curr_param->get_id()->get_name(), "data_value_descriptor")) { data__value__descriptor().set_param(*curr_param); value_used[val_idx]=true; } } - for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { - Module_Param* const curr_param = param.get_elem(val_idx); + for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) { + Module_Param* const curr_param = mp->get_elem(val_idx); if (!strcmp(curr_param->get_id()->get_name(), "data_value")) { data__value().set_param(*curr_param); value_used[val_idx]=true; } } - for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) { - param.get_elem(val_idx)->error("Non existent field name in type EMBEDDED PDV: %s", param.get_elem(val_idx)->get_id()->get_name()); + for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) if (!value_used[val_idx]) { + mp->get_elem(val_idx)->error("Non existent field name in type EMBEDDED PDV: %s", mp->get_elem(val_idx)->get_id()->get_name()); break; } } break; @@ -2880,68 +3163,22 @@ void EMBEDDED_PDV::set_param(Module_Param& param) } } -void EMBEDDED_PDV_template::set_param(Module_Param& param) +Module_Param* EMBEDDED_PDV::get_param(Module_Param_Name& param_name) const { - param.basic_check(Module_Param::BC_TEMPLATE, "record template"); - switch (param.get_type()) { - case Module_Param::MP_Omit: - *this = OMIT_VALUE; - break; - case Module_Param::MP_Any: - *this = ANY_VALUE; - break; - case Module_Param::MP_AnyOrNone: - *this = ANY_OR_OMIT; - break; - case Module_Param::MP_List_Template: - case Module_Param::MP_ComplementList_Template: - set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, param.get_size()); - for (size_t p_i=0; p_i<param.get_size(); p_i++) { - list_item(p_i).set_param(*param.get_elem(p_i)); - } - break; - case Module_Param::MP_Value_List: - if (param.get_size()==0) break; - if (3!=param.get_size()) { - param.error("record template of type EMBEDDED PDV has 3 fields but list value has %d fields", (int)param.get_size()); - } - if (param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) identification().set_param(*param.get_elem(0)); - if (param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) data__value__descriptor().set_param(*param.get_elem(1)); - if (param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) data__value().set_param(*param.get_elem(2)); - break; - case Module_Param::MP_Assignment_List: { - Vector<bool> value_used(param.get_size()); - value_used.resize(param.get_size(), false); - for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { - Module_Param* const curr_param = param.get_elem(val_idx); - if (!strcmp(curr_param->get_id()->get_name(), "identification")) { - identification().set_param(*curr_param); - value_used[val_idx]=true; - } - } - for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { - Module_Param* const curr_param = param.get_elem(val_idx); - if (!strcmp(curr_param->get_id()->get_name(), "data_value_descriptor")) { - data__value__descriptor().set_param(*curr_param); - value_used[val_idx]=true; - } - } - for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { - Module_Param* const curr_param = param.get_elem(val_idx); - if (!strcmp(curr_param->get_id()->get_name(), "data_value")) { - data__value().set_param(*curr_param); - value_used[val_idx]=true; - } - } - for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) { - param.get_elem(val_idx)->error("Non existent field name in type EMBEDDED PDV: %s", param.get_elem(val_idx)->get_id()->get_name()); - break; - } - } break; - default: - param.type_error("record template", "EMBEDDED PDV"); + if (!is_bound()) { + return new Module_Param_Unbound(); } - is_ifpresent = param.get_ifpresent(); + Module_Param* mp_field_identification = field_identification.get_param(param_name); + mp_field_identification->set_id(new Module_Param_FieldName(mcopystr("identification"))); + Module_Param* mp_field_data_value_descriptor = field_data__value__descriptor.get_param(param_name); + mp_field_data_value_descriptor->set_id(new Module_Param_FieldName(mcopystr("data_value_descriptor"))); + Module_Param* mp_field_data_value = field_data__value.get_param(param_name); + mp_field_data_value->set_id(new Module_Param_FieldName(mcopystr("data_value"))); + Module_Param_Assignment_List* mp = new Module_Param_Assignment_List(); + mp->add_elem(mp_field_identification); + mp->add_elem(mp_field_data_value_descriptor); + mp->add_elem(mp_field_data_value); + return mp; } void EMBEDDED_PDV::encode_text(Text_Buf& text_buf) const @@ -3164,6 +3401,126 @@ struct EMBEDDED_PDV_template::single_value_struct { OCTETSTRING_template field_data__value; }; +void EMBEDDED_PDV_template::set_param(Module_Param& param) +{ + param.basic_check(Module_Param::BC_TEMPLATE, "record template"); + Module_Param_Ptr mp = ¶m; + if (param.get_type() == Module_Param::MP_Reference) { + mp = param.get_referenced_param(); + } + switch (mp->get_type()) { + case Module_Param::MP_Omit: + *this = OMIT_VALUE; + break; + case Module_Param::MP_Any: + *this = ANY_VALUE; + break; + case Module_Param::MP_AnyOrNone: + *this = ANY_OR_OMIT; + break; + case Module_Param::MP_List_Template: + case Module_Param::MP_ComplementList_Template: { + EMBEDDED_PDV_template temp; + temp.set_type(mp->get_type() == Module_Param::MP_List_Template ? + VALUE_LIST : COMPLEMENTED_LIST, mp->get_size()); + for (size_t i=0; i<mp->get_size(); i++) { + temp.list_item(i).set_param(*mp->get_elem(i)); + } + *this = temp; + break; } + case Module_Param::MP_Value_List: + if (mp->get_size()==0) break; + if (3!=mp->get_size()) { + param.error("record template of type EMBEDDED PDV has 3 fields but list value has %d fields", (int)mp->get_size()); + } + if (mp->get_elem(0)->get_type()!=Module_Param::MP_NotUsed) identification().set_param(*mp->get_elem(0)); + if (mp->get_elem(1)->get_type()!=Module_Param::MP_NotUsed) data__value__descriptor().set_param(*mp->get_elem(1)); + if (mp->get_elem(2)->get_type()!=Module_Param::MP_NotUsed) data__value().set_param(*mp->get_elem(2)); + break; + case Module_Param::MP_Assignment_List: { + Vector<bool> value_used(mp->get_size()); + value_used.resize(mp->get_size(), false); + for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) { + Module_Param* const curr_param = mp->get_elem(val_idx); + if (!strcmp(curr_param->get_id()->get_name(), "identification")) { + identification().set_param(*curr_param); + value_used[val_idx]=true; + } + } + for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) { + Module_Param* const curr_param = mp->get_elem(val_idx); + if (!strcmp(curr_param->get_id()->get_name(), "data_value_descriptor")) { + data__value__descriptor().set_param(*curr_param); + value_used[val_idx]=true; + } + } + for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) { + Module_Param* const curr_param = mp->get_elem(val_idx); + if (!strcmp(curr_param->get_id()->get_name(), "data_value")) { + data__value().set_param(*curr_param); + value_used[val_idx]=true; + } + } + for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) if (!value_used[val_idx]) { + mp->get_elem(val_idx)->error("Non existent field name in type EMBEDDED PDV: %s", mp->get_elem(val_idx)->get_id()->get_name()); + break; + } + } break; + default: + param.type_error("record template", "EMBEDDED PDV"); + } + is_ifpresent = param.get_ifpresent() || mp->get_ifpresent(); +} + +Module_Param* EMBEDDED_PDV_template::get_param(Module_Param_Name& param_name) const +{ + Module_Param* mp = NULL; + switch (template_selection) { + case UNINITIALIZED_TEMPLATE: + mp = new Module_Param_Unbound(); + break; + case OMIT_VALUE: + mp = new Module_Param_Omit(); + break; + case ANY_VALUE: + mp = new Module_Param_Any(); + break; + case ANY_OR_OMIT: + mp = new Module_Param_AnyOrNone(); + break; + case SPECIFIC_VALUE: { + Module_Param* mp_field_identification = single_value->field_identification.get_param(param_name); + mp_field_identification->set_id(new Module_Param_FieldName(mcopystr("identification"))); + Module_Param* mp_field_data_value_descriptor = single_value->field_data__value__descriptor.get_param(param_name); + mp_field_data_value_descriptor->set_id(new Module_Param_FieldName(mcopystr("data_value_descriptor"))); + Module_Param* mp_field_string_value = single_value->field_data__value.get_param(param_name); + mp_field_string_value->set_id(new Module_Param_FieldName(mcopystr("data_value"))); + mp = new Module_Param_Assignment_List(); + mp->add_elem(mp_field_identification); + mp->add_elem(mp_field_data_value_descriptor); + mp->add_elem(mp_field_string_value); + break; } + case VALUE_LIST: + case COMPLEMENTED_LIST: { + if (template_selection == VALUE_LIST) { + mp = new Module_Param_List_Template(); + } + else { + mp = new Module_Param_ComplementList_Template(); + } + for (size_t i = 0; i < value_list.n_values; ++i) { + mp->add_elem(value_list.list_value[i].get_param(param_name)); + } + break; } + default: + break; + } + if (is_ifpresent) { + mp->set_ifpresent(); + } + return mp; +} + void EMBEDDED_PDV_template::clean_up() { switch (template_selection) { @@ -3308,7 +3665,8 @@ EMBEDDED_PDV_template& EMBEDDED_PDV_template::operator=(const EMBEDDED_PDV_templ return *this; } -boolean EMBEDDED_PDV_template::match(const EMBEDDED_PDV& other_value) const +boolean EMBEDDED_PDV_template::match(const EMBEDDED_PDV& other_value, + boolean /* legacy */) const { switch (template_selection) { case ANY_VALUE: @@ -3470,7 +3828,8 @@ void EMBEDDED_PDV_template::log() const log_ifpresent(); } -void EMBEDDED_PDV_template::log_match(const EMBEDDED_PDV& match_value) const +void EMBEDDED_PDV_template::log_match(const EMBEDDED_PDV& match_value, + boolean /* legacy */) const { if (template_selection == SPECIFIC_VALUE) { TTCN_Logger::log_event_str("{ identification := "); @@ -3546,13 +3905,13 @@ void EMBEDDED_PDV_template::decode_text(Text_Buf& text_buf) } } -boolean EMBEDDED_PDV_template::is_present() const +boolean EMBEDDED_PDV_template::is_present(boolean legacy /* = FALSE */) const { if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE; - return !match_omit(); + return !match_omit(legacy); } -boolean EMBEDDED_PDV_template::match_omit() const +boolean EMBEDDED_PDV_template::match_omit(boolean legacy /* = FALSE */) const { if (is_ifpresent) return TRUE; switch (template_selection) { @@ -3561,10 +3920,14 @@ boolean EMBEDDED_PDV_template::match_omit() const return TRUE; case VALUE_LIST: case COMPLEMENTED_LIST: - for (unsigned int i=0; i<value_list.n_values; i++) - if (value_list.list_value[i].match_omit()) - return template_selection==VALUE_LIST; - return template_selection==COMPLEMENTED_LIST; + if (legacy) { + // legacy behavior: 'omit' can appear in the value/complement list + for (unsigned int i=0; i<value_list.n_values; i++) + if (value_list.list_value[i].match_omit()) + return template_selection==VALUE_LIST; + return template_selection==COMPLEMENTED_LIST; + } + // else fall through default: return FALSE; } @@ -3572,7 +3935,8 @@ boolean EMBEDDED_PDV_template::match_omit() const } #ifndef TITAN_RUNTIME_2 -void EMBEDDED_PDV_template::check_restriction(template_res t_res, const char* t_name) const +void EMBEDDED_PDV_template::check_restriction(template_res t_res, const char* t_name, + boolean legacy /* = FALSE */) const { if (template_selection==UNINITIALIZED_TEMPLATE) return; switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) { @@ -3584,7 +3948,7 @@ void EMBEDDED_PDV_template::check_restriction(template_res t_res, const char* t_ template_selection==SPECIFIC_VALUE)) return; break; case TR_PRESENT: - if (!match_omit()) return; + if (!match_omit(legacy)) return; break; default: return; diff --git a/core/ASN_EmbeddedPDV.hh b/core/ASN_EmbeddedPDV.hh index 0ee44cf13..5e0c9aa67 100644 --- a/core/ASN_EmbeddedPDV.hh +++ b/core/ASN_EmbeddedPDV.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -79,6 +79,7 @@ public: inline boolean is_present() const { return is_bound(); } #endif void set_param(Module_Param& param); + Module_Param* get_param(Module_Param_Name& param_name) const; void encode_text(Text_Buf& text_buf) const; void decode_text(Text_Buf& text_buf); //void encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t p_coding, ...) const; @@ -130,7 +131,7 @@ public: EMBEDDED_PDV_identification_template& operator=(const EMBEDDED_PDV_identification& other_value); EMBEDDED_PDV_identification_template& operator=(const OPTIONAL<EMBEDDED_PDV_identification>& other_value); EMBEDDED_PDV_identification_template& operator=(const EMBEDDED_PDV_identification_template& other_value); - boolean match(const EMBEDDED_PDV_identification& other_value) const; + boolean match(const EMBEDDED_PDV_identification& other_value, boolean legacy = FALSE) const; EMBEDDED_PDV_identification valueof() const; EMBEDDED_PDV_identification_template& list_item(unsigned int list_index) const; void set_type(template_sel template_type, unsigned int list_length); @@ -148,23 +149,24 @@ public: const ASN_NULL_template& fixed() const; boolean ischosen(EMBEDDED_PDV_identification::union_selection_type checked_selection) const; void log() const; - void log_match(const EMBEDDED_PDV_identification& match_value) const; + void log_match(const EMBEDDED_PDV_identification& match_value, boolean legacy = FALSE) const; void encode_text(Text_Buf& text_buf) const; void decode_text(Text_Buf& text_buf); - boolean is_present() const; - boolean match_omit() const; + boolean is_present(boolean legacy = FALSE) const; + boolean match_omit(boolean legacy = FALSE) const; void set_param(Module_Param& param); + Module_Param* get_param(Module_Param_Name& param_name) const; #ifdef TITAN_RUNTIME_2 void valueofv(Base_Type* value) const { *(static_cast<EMBEDDED_PDV_identification*>(value)) = valueof(); } void set_value(template_sel other_value) { *this = other_value; } void copy_value(const Base_Type* other_value) { *this = *(static_cast<const EMBEDDED_PDV_identification*>(other_value)); } Base_Template* clone() const { return new EMBEDDED_PDV_identification_template(*this); } const TTCN_Typedescriptor_t* get_descriptor() const { return &EMBEDDED_PDV_descr_; } - boolean matchv(const Base_Type* other_value) const { return match(*(static_cast<const EMBEDDED_PDV_identification*>(other_value))); } - void log_matchv(const Base_Type* match_value) const { log_match(*(static_cast<const EMBEDDED_PDV_identification*>(match_value))); } + boolean matchv(const Base_Type* other_value, boolean legacy) const { return match(*(static_cast<const EMBEDDED_PDV_identification*>(other_value)), legacy); } + void log_matchv(const Base_Type* match_value, boolean legacy) const { log_match(*(static_cast<const EMBEDDED_PDV_identification*>(match_value)), legacy); } #else - void check_restriction(template_res t_res, const char* t_name=NULL) const; + void check_restriction(template_res t_res, const char* t_name=NULL, boolean legacy = FALSE) const; #endif }; @@ -201,6 +203,7 @@ public: inline boolean is_present() const { return is_bound(); } #endif void set_param(Module_Param& param); + Module_Param* get_param(Module_Param_Name& param_name) const; void encode_text(Text_Buf& text_buf) const; void decode_text(Text_Buf& text_buf); //void encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t p_coding, ...) const; @@ -243,7 +246,7 @@ public: EMBEDDED_PDV_identification_syntaxes_template& operator=(const EMBEDDED_PDV_identification_syntaxes& other_value); EMBEDDED_PDV_identification_syntaxes_template& operator=(const OPTIONAL<EMBEDDED_PDV_identification_syntaxes>& other_value); EMBEDDED_PDV_identification_syntaxes_template& operator=(const EMBEDDED_PDV_identification_syntaxes_template& other_value); - boolean match(const EMBEDDED_PDV_identification_syntaxes& other_value) const; + boolean match(const EMBEDDED_PDV_identification_syntaxes& other_value, boolean legacy = FALSE) const; EMBEDDED_PDV_identification_syntaxes valueof() const; void set_type(template_sel template_type, unsigned int list_length); EMBEDDED_PDV_identification_syntaxes_template& list_item(unsigned int list_index) const; @@ -253,23 +256,24 @@ public: const OBJID_template& transfer() const; int size_of() const; void log() const; - void log_match(const EMBEDDED_PDV_identification_syntaxes& match_value) const; + void log_match(const EMBEDDED_PDV_identification_syntaxes& match_value, boolean legacy = FALSE) const; void encode_text(Text_Buf& text_buf) const; void decode_text(Text_Buf& text_buf); - boolean is_present() const; - boolean match_omit() const; + boolean is_present(boolean legacy = FALSE) const; + boolean match_omit(boolean legacy = FALSE) const; void set_param(Module_Param& param); + Module_Param* get_param(Module_Param_Name& param_name) const; #ifdef TITAN_RUNTIME_2 void valueofv(Base_Type* value) const { *(static_cast<EMBEDDED_PDV_identification_syntaxes*>(value)) = valueof(); } void set_value(template_sel other_value) { *this = other_value; } void copy_value(const Base_Type* other_value) { *this = *(static_cast<const EMBEDDED_PDV_identification_syntaxes*>(other_value)); } Base_Template* clone() const { return new EMBEDDED_PDV_identification_syntaxes_template(*this); } const TTCN_Typedescriptor_t* get_descriptor() const { return &EMBEDDED_PDV_descr_; } - boolean matchv(const Base_Type* other_value) const { return match(*(static_cast<const EMBEDDED_PDV_identification_syntaxes*>(other_value))); } - void log_matchv(const Base_Type* match_value) const { log_match(*(static_cast<const EMBEDDED_PDV_identification_syntaxes*>(match_value))); } + boolean matchv(const Base_Type* other_value, boolean legacy) const { return match(*(static_cast<const EMBEDDED_PDV_identification_syntaxes*>(other_value)), legacy); } + void log_matchv(const Base_Type* match_value, boolean legacy) const { log_match(*(static_cast<const EMBEDDED_PDV_identification_syntaxes*>(match_value)), legacy); } #else - void check_restriction(template_res t_res, const char* t_name=NULL) const; + void check_restriction(template_res t_res, const char* t_name=NULL, boolean legacy = FALSE) const; #endif }; @@ -306,6 +310,7 @@ public: inline boolean is_present() const { return is_bound(); } #endif void set_param(Module_Param& param); + Module_Param* get_param(Module_Param_Name& param_name) const; void encode_text(Text_Buf& text_buf) const; void decode_text(Text_Buf& text_buf); //void encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t p_coding, ...) const; @@ -348,7 +353,7 @@ public: EMBEDDED_PDV_identification_context__negotiation_template& operator=(const EMBEDDED_PDV_identification_context__negotiation& other_value); EMBEDDED_PDV_identification_context__negotiation_template& operator=(const OPTIONAL<EMBEDDED_PDV_identification_context__negotiation>& other_value); EMBEDDED_PDV_identification_context__negotiation_template& operator=(const EMBEDDED_PDV_identification_context__negotiation_template& other_value); - boolean match(const EMBEDDED_PDV_identification_context__negotiation& other_value) const; + boolean match(const EMBEDDED_PDV_identification_context__negotiation& other_value, boolean legacy = FALSE) const; EMBEDDED_PDV_identification_context__negotiation valueof() const; void set_type(template_sel template_type, unsigned int list_length); EMBEDDED_PDV_identification_context__negotiation_template& list_item(unsigned int list_index) const; @@ -358,23 +363,24 @@ public: const OBJID_template& transfer__syntax() const; int size_of() const; void log() const; - void log_match(const EMBEDDED_PDV_identification_context__negotiation& match_value) const; + void log_match(const EMBEDDED_PDV_identification_context__negotiation& match_value, boolean legacy = FALSE) const; void encode_text(Text_Buf& text_buf) const; void decode_text(Text_Buf& text_buf); - boolean is_present() const; - boolean match_omit() const; + boolean is_present(boolean legacy = FALSE) const; + boolean match_omit(boolean legacy = FALSE) const; void set_param(Module_Param& param); + Module_Param* get_param(Module_Param_Name& param_name) const; #ifdef TITAN_RUNTIME_2 void valueofv(Base_Type* value) const { *(static_cast<EMBEDDED_PDV_identification_context__negotiation*>(value)) = valueof(); } void set_value(template_sel other_value) { *this = other_value; } void copy_value(const Base_Type* other_value) { *this = *(static_cast<const EMBEDDED_PDV_identification_context__negotiation*>(other_value)); } Base_Template* clone() const { return new EMBEDDED_PDV_identification_context__negotiation_template(*this); } const TTCN_Typedescriptor_t* get_descriptor() const { return &EMBEDDED_PDV_descr_; } - boolean matchv(const Base_Type* other_value) const { return match(*(static_cast<const EMBEDDED_PDV_identification_context__negotiation*>(other_value))); } - void log_matchv(const Base_Type* match_value) const { log_match(*(static_cast<const EMBEDDED_PDV_identification_context__negotiation*>(match_value))); } + boolean matchv(const Base_Type* other_value, boolean legacy) const { return match(*(static_cast<const EMBEDDED_PDV_identification_context__negotiation*>(other_value)), legacy); } + void log_matchv(const Base_Type* match_value, boolean legacy) const { log_match(*(static_cast<const EMBEDDED_PDV_identification_context__negotiation*>(match_value)), legacy); } #else - void check_restriction(template_res t_res, const char* t_name=NULL) const; + void check_restriction(template_res t_res, const char* t_name=NULL, boolean legacy = FALSE) const; #endif }; @@ -417,6 +423,7 @@ public: #endif void log() const; void set_param(Module_Param& param); + Module_Param* get_param(Module_Param_Name& param_name) const; void encode_text(Text_Buf& text_buf) const; void decode_text(Text_Buf& text_buf); void encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t p_coding, ...) const; @@ -459,7 +466,7 @@ public: EMBEDDED_PDV_template& operator=(const EMBEDDED_PDV& other_value); EMBEDDED_PDV_template& operator=(const OPTIONAL<EMBEDDED_PDV>& other_value); EMBEDDED_PDV_template& operator=(const EMBEDDED_PDV_template& other_value); - boolean match(const EMBEDDED_PDV& other_value) const; + boolean match(const EMBEDDED_PDV& other_value, boolean legacy = FALSE) const; EMBEDDED_PDV valueof() const; void set_type(template_sel template_type, unsigned int list_length); EMBEDDED_PDV_template& list_item(unsigned int list_index) const; @@ -471,23 +478,24 @@ public: const OCTETSTRING_template& data__value() const; int size_of() const; void log() const; - void log_match(const EMBEDDED_PDV& match_value) const; + void log_match(const EMBEDDED_PDV& match_value, boolean legacy = FALSE) const; void encode_text(Text_Buf& text_buf) const; void decode_text(Text_Buf& text_buf); - boolean is_present() const; - boolean match_omit() const; + boolean is_present(boolean legacy = FALSE) const; + boolean match_omit(boolean legacy = FALSE) const; void set_param(Module_Param& param); + Module_Param* get_param(Module_Param_Name& param_name) const; #ifdef TITAN_RUNTIME_2 void valueofv(Base_Type* value) const { *(static_cast<EMBEDDED_PDV*>(value)) = valueof(); } void set_value(template_sel other_value) { *this = other_value; } void copy_value(const Base_Type* other_value) { *this = *(static_cast<const EMBEDDED_PDV*>(other_value)); } Base_Template* clone() const { return new EMBEDDED_PDV_template(*this); } const TTCN_Typedescriptor_t* get_descriptor() const { return &EMBEDDED_PDV_descr_; } - boolean matchv(const Base_Type* other_value) const { return match(*(static_cast<const EMBEDDED_PDV*>(other_value))); } - void log_matchv(const Base_Type* match_value) const { log_match(*(static_cast<const EMBEDDED_PDV*>(match_value))); } + boolean matchv(const Base_Type* other_value, boolean legacy) const { return match(*(static_cast<const EMBEDDED_PDV*>(other_value)), legacy); } + void log_matchv(const Base_Type* match_value, boolean legacy) const { log_match(*(static_cast<const EMBEDDED_PDV*>(match_value)), legacy); } #else - void check_restriction(template_res t_res, const char* t_name=NULL) const; + void check_restriction(template_res t_res, const char* t_name=NULL, boolean legacy = FALSE) const; #endif }; diff --git a/core/ASN_External.cc b/core/ASN_External.cc index 4cc701ff0..ff6e0d5d8 100644 --- a/core/ASN_External.cc +++ b/core/ASN_External.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -91,6 +91,7 @@ namespace { /* anonymous namespace */ inline union_selection_type get_selection() const { return union_selection; } #ifdef TITAN_RUNTIME_2 void set_param(Module_Param& /*param*/) { TTCN_error("Internal error: EXTERNALtransfer_encoding::set_param() called."); } + Module_Param* get_param(Module_Param_Name& param_name) const { TTCN_error("Internal error: EXTERNALtransfer_encoding::get_param() called."); } void encode_text(Text_Buf& /*text_buf*/) const { TTCN_error("Internal error: EXTERNALtransfer_encoding::encode_text() called."); } void decode_text(Text_Buf& /*text_buf*/) { TTCN_error("Internal error: EXTERNALtransfer_encoding::decode_text() called."); } boolean is_bound() const { return union_selection!=UNBOUND_VALUE; } @@ -146,6 +147,7 @@ namespace { /* anonymous namespace */ {return field_encoding;} #ifdef TITAN_RUNTIME_2 void set_param(Module_Param& /*param*/) { TTCN_error("Internal error: EXTERNALtransfer::set_param() called."); } + Module_Param* get_param(Module_Param_Name& param_name) const { TTCN_error("Internal error: EXTERNALtransfer::get_param() called."); } void encode_text(Text_Buf& /*text_buf*/) const { TTCN_error("Internal error: EXTERNALtransfer::encode_text() called."); } void decode_text(Text_Buf& /*text_buf*/) { TTCN_error("Internal error: EXTERNALtransfer::decode_text() called."); } boolean is_bound() const { TTCN_error("Internal error: EXTERNALtransfer::is_bound() called."); } @@ -983,11 +985,15 @@ void EXTERNAL_identification::log() const void EXTERNAL_identification::set_param(Module_Param& param) { param.basic_check(Module_Param::BC_VALUE, "union value"); - if (param.get_type()==Module_Param::MP_Value_List && param.get_size()==0) return; - if (param.get_type()!=Module_Param::MP_Assignment_List) { + Module_Param_Ptr mp = ¶m; + if (param.get_type() == Module_Param::MP_Reference) { + mp = param.get_referenced_param(); + } + if (mp->get_type()==Module_Param::MP_Value_List && mp->get_size()==0) return; + if (mp->get_type()!=Module_Param::MP_Assignment_List) { param.error("union value with field name was expected"); } - Module_Param* mp_last = param.get_elem(param.get_size()-1); + Module_Param* mp_last = mp->get_elem(mp->get_size()-1); if (!strcmp(mp_last->get_id()->get_name(), "syntaxes")) { syntaxes().set_param(*mp_last); return; @@ -1015,10 +1021,54 @@ void EXTERNAL_identification::set_param(Module_Param& param) { mp_last->error("Field %s does not exist in type EXTERNAL.identification.", mp_last->get_id()->get_name()); } +Module_Param* EXTERNAL_identification::get_param(Module_Param_Name& param_name) const +{ + if (!is_bound()) { + return new Module_Param_Unbound(); + } + Module_Param* mp_field = NULL; + + switch(get_selection()) { + case ALT_syntaxes: + mp_field = field_syntaxes->get_param(param_name); + mp_field->set_id(new Module_Param_FieldName(mcopystr("syntaxes"))); + break; + case ALT_syntax: + mp_field = field_syntax->get_param(param_name); + mp_field->set_id(new Module_Param_FieldName(mcopystr("syntax"))); + break; + case ALT_presentation__context__id: + mp_field = field_presentation__context__id->get_param(param_name); + mp_field->set_id(new Module_Param_FieldName(mcopystr("presentation_context_id"))); + break; + case ALT_context__negotiation: + mp_field = field_context__negotiation->get_param(param_name); + mp_field->set_id(new Module_Param_FieldName(mcopystr("context_negotiation"))); + break; + case ALT_transfer__syntax: + mp_field = field_transfer__syntax->get_param(param_name); + mp_field->set_id(new Module_Param_FieldName(mcopystr("transfer_syntax"))); + break; + case ALT_fixed: + mp_field = field_fixed->get_param(param_name); + mp_field->set_id(new Module_Param_FieldName(mcopystr("fixed"))); + break; + default: + break; + } + Module_Param_Assignment_List* mp = new Module_Param_Assignment_List(); + mp->add_elem(mp_field); + return mp; +} + void EXTERNAL_identification_template::set_param(Module_Param& param) { param.basic_check(Module_Param::BC_TEMPLATE, "union template"); - switch (param.get_type()) { + Module_Param_Ptr mp = ¶m; + if (param.get_type() == Module_Param::MP_Reference) { + mp = param.get_referenced_param(); + } + switch (mp->get_type()) { case Module_Param::MP_Omit: *this = OMIT_VALUE; break; @@ -1029,18 +1079,21 @@ void EXTERNAL_identification_template::set_param(Module_Param& param) *this = ANY_OR_OMIT; break; case Module_Param::MP_List_Template: - case Module_Param::MP_ComplementList_Template: - set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, param.get_size()); - for (size_t p_i=0; p_i<param.get_size(); p_i++) { - list_item(p_i).set_param(*param.get_elem(p_i)); - } - break; + case Module_Param::MP_ComplementList_Template: { + EXTERNAL_identification_template temp; + temp.set_type(mp->get_type() == Module_Param::MP_List_Template ? + VALUE_LIST : COMPLEMENTED_LIST, mp->get_size()); + for (size_t i=0; i<mp->get_size(); i++) { + temp.list_item(i).set_param(*mp->get_elem(i)); + } + *this = temp; + break; } case Module_Param::MP_Value_List: - if (param.get_size()==0) break; + if (mp->get_size()==0) break; param.type_error("union template", "EXTERNAL.identification"); break; case Module_Param::MP_Assignment_List: { - Module_Param* mp_last = param.get_elem(param.get_size()-1); + Module_Param* mp_last = mp->get_elem(mp->get_size()-1); if (!strcmp(mp_last->get_id()->get_name(), "syntaxes")) { syntaxes().set_param(*mp_last); break; @@ -1070,7 +1123,77 @@ void EXTERNAL_identification_template::set_param(Module_Param& param) default: param.type_error("union template", "EXTERNAL.identification"); } - is_ifpresent = param.get_ifpresent(); + is_ifpresent = param.get_ifpresent() || mp->get_ifpresent(); +} + +Module_Param* EXTERNAL_identification_template::get_param(Module_Param_Name& param_name) const +{ + Module_Param* mp = NULL; + switch (template_selection) { + case UNINITIALIZED_TEMPLATE: + mp = new Module_Param_Unbound(); + break; + case OMIT_VALUE: + mp = new Module_Param_Omit(); + break; + case ANY_VALUE: + mp = new Module_Param_Any(); + break; + case ANY_OR_OMIT: + mp = new Module_Param_AnyOrNone(); + break; + case SPECIFIC_VALUE: { + Module_Param* mp_field = NULL; + switch(single_value.union_selection) { + case EXTERNAL_identification::ALT_syntaxes: + mp_field = single_value.field_syntaxes->get_param(param_name); + mp_field->set_id(new Module_Param_FieldName(mcopystr("syntaxes"))); + break; + case EXTERNAL_identification::ALT_syntax: + mp_field = single_value.field_syntax->get_param(param_name); + mp_field->set_id(new Module_Param_FieldName(mcopystr("syntax"))); + break; + case EXTERNAL_identification::ALT_presentation__context__id: + mp_field = single_value.field_presentation__context__id->get_param(param_name); + mp_field->set_id(new Module_Param_FieldName(mcopystr("presentation_context_id"))); + break; + case EXTERNAL_identification::ALT_context__negotiation: + mp_field = single_value.field_context__negotiation->get_param(param_name); + mp_field->set_id(new Module_Param_FieldName(mcopystr("context_negotiation"))); + break; + case EXTERNAL_identification::ALT_transfer__syntax: + mp_field = single_value.field_transfer__syntax->get_param(param_name); + mp_field->set_id(new Module_Param_FieldName(mcopystr("transfer_syntax"))); + break; + case EXTERNAL_identification::ALT_fixed: + mp_field = single_value.field_fixed->get_param(param_name); + mp_field->set_id(new Module_Param_FieldName(mcopystr("fixed"))); + break; + default: + break; + } + mp = new Module_Param_Assignment_List(); + mp->add_elem(mp_field); + break; } + case VALUE_LIST: + case COMPLEMENTED_LIST: { + if (template_selection == VALUE_LIST) { + mp = new Module_Param_List_Template(); + } + else { + mp = new Module_Param_ComplementList_Template(); + } + for (size_t i = 0; i < value_list.n_values; ++i) { + mp->add_elem(value_list.list_value[i].get_param(param_name)); + } + break; } + default: + break; + } + if (is_ifpresent) { + mp->set_ifpresent(); + } + return mp; } void EXTERNAL_identification::encode_text(Text_Buf& text_buf) const @@ -1317,7 +1440,8 @@ EXTERNAL_identification_template& EXTERNAL_identification_template::operator=(co return *this; } -boolean EXTERNAL_identification_template::match(const EXTERNAL_identification& other_value) const +boolean EXTERNAL_identification_template::match(const EXTERNAL_identification& other_value, + boolean /* legacy */) const { switch (template_selection) { case ANY_VALUE: @@ -1615,7 +1739,8 @@ void EXTERNAL_identification_template::log() const log_ifpresent(); } -void EXTERNAL_identification_template::log_match(const EXTERNAL_identification& match_value) const +void EXTERNAL_identification_template::log_match(const EXTERNAL_identification& match_value, + boolean /* legacy */) const { if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){ if(match(match_value)){ @@ -1801,13 +1926,13 @@ void EXTERNAL_identification_template::decode_text(Text_Buf& text_buf) } } -boolean EXTERNAL_identification_template::is_present() const +boolean EXTERNAL_identification_template::is_present(boolean legacy /* = FALSE */) const { if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE; - return !match_omit(); + return !match_omit(legacy); } -boolean EXTERNAL_identification_template::match_omit() const +boolean EXTERNAL_identification_template::match_omit(boolean legacy /* = FALSE */) const { if (is_ifpresent) return TRUE; switch (template_selection) { @@ -1816,10 +1941,12 @@ boolean EXTERNAL_identification_template::match_omit() const return TRUE; case VALUE_LIST: case COMPLEMENTED_LIST: - for (unsigned int i=0; i<value_list.n_values; i++) - if (value_list.list_value[i].match_omit()) - return template_selection==VALUE_LIST; - return template_selection==COMPLEMENTED_LIST; + if (legacy) { + for (unsigned int i=0; i<value_list.n_values; i++) + if (value_list.list_value[i].match_omit()) + return template_selection==VALUE_LIST; + return template_selection==COMPLEMENTED_LIST; + } // else fall through default: return FALSE; } @@ -1827,7 +1954,8 @@ boolean EXTERNAL_identification_template::match_omit() const } #ifndef TITAN_RUNTIME_2 -void EXTERNAL_identification_template::check_restriction(template_res t_res, const char* t_name) const +void EXTERNAL_identification_template::check_restriction(template_res t_res, const char* t_name, + boolean legacy /* = FALSE */) const { if (template_selection==UNINITIALIZED_TEMPLATE) return; switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) { @@ -1839,7 +1967,7 @@ void EXTERNAL_identification_template::check_restriction(template_res t_res, con template_selection==SPECIFIC_VALUE)) return; break; case TR_PRESENT: - if (!match_omit()) return; + if (!match_omit(legacy)) return; break; default: return; @@ -1904,34 +2032,38 @@ void EXTERNAL_identification_syntaxes::clean_up() void EXTERNAL_identification_syntaxes::set_param(Module_Param& param) { param.basic_check(Module_Param::BC_VALUE, "record value"); - switch (param.get_type()) { + Module_Param_Ptr mp = ¶m; + if (param.get_type() == Module_Param::MP_Reference) { + mp = param.get_referenced_param(); + } + switch (mp->get_type()) { case Module_Param::MP_Value_List: - if (param.get_size()==0) return; - if (2!=param.get_size()) { - param.error("record value of type EXTERNAL.identification.syntaxes has 2 fields but list value has %d fields", (int)param.get_size()); + if (mp->get_size()==0) return; + if (2!=mp->get_size()) { + param.error("record value of type EXTERNAL.identification.syntaxes has 2 fields but list value has %d fields", (int)mp->get_size()); } - if (param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) abstract().set_param(*param.get_elem(0)); - if (param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) transfer().set_param(*param.get_elem(1)); + if (mp->get_elem(0)->get_type()!=Module_Param::MP_NotUsed) abstract().set_param(*mp->get_elem(0)); + if (mp->get_elem(1)->get_type()!=Module_Param::MP_NotUsed) transfer().set_param(*mp->get_elem(1)); break; case Module_Param::MP_Assignment_List: { - Vector<bool> value_used(param.get_size()); - value_used.resize(param.get_size(), false); - for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { - Module_Param* const curr_param = param.get_elem(val_idx); + Vector<bool> value_used(mp->get_size()); + value_used.resize(mp->get_size(), false); + for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) { + Module_Param* const curr_param = mp->get_elem(val_idx); if (!strcmp(curr_param->get_id()->get_name(), "abstract")) { abstract().set_param(*curr_param); value_used[val_idx]=true; } } - for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { - Module_Param* const curr_param = param.get_elem(val_idx); + for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) { + Module_Param* const curr_param = mp->get_elem(val_idx); if (!strcmp(curr_param->get_id()->get_name(), "transfer")) { transfer().set_param(*curr_param); value_used[val_idx]=true; } } - for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) { - param.get_elem(val_idx)->error("Non existent field name in type EXTERNAL.identification.syntaxes: %s", param.get_elem(val_idx)->get_id()->get_name()); + for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) if (!value_used[val_idx]) { + mp->get_elem(val_idx)->error("Non existent field name in type EXTERNAL.identification.syntaxes: %s", mp->get_elem(val_idx)->get_id()->get_name()); break; } } break; @@ -1940,10 +2072,46 @@ void EXTERNAL_identification_syntaxes::set_param(Module_Param& param) } } +Module_Param* EXTERNAL_identification_syntaxes::get_param(Module_Param_Name& param_name) const +{ + if (!is_bound()) { + return new Module_Param_Unbound(); + } + Module_Param* mp_field_abstract = field_abstract.get_param(param_name); + mp_field_abstract->set_id(new Module_Param_FieldName(mcopystr("abstract"))); + Module_Param* mp_field_transfer = field_transfer.get_param(param_name); + mp_field_transfer->set_id(new Module_Param_FieldName(mcopystr("transfer"))); + Module_Param_Assignment_List* mp = new Module_Param_Assignment_List(); + mp->add_elem(mp_field_abstract); + mp->add_elem(mp_field_transfer); + return mp; +} + +void EXTERNAL_identification_syntaxes::encode_text(Text_Buf& text_buf) const +{ + field_abstract.encode_text(text_buf); + field_transfer.encode_text(text_buf); +} + +void EXTERNAL_identification_syntaxes::decode_text(Text_Buf& text_buf) +{ + field_abstract.decode_text(text_buf); + field_transfer.decode_text(text_buf); +} + +struct EXTERNAL_identification_syntaxes_template::single_value_struct { + OBJID_template field_abstract; + OBJID_template field_transfer; +}; + void EXTERNAL_identification_syntaxes_template::set_param(Module_Param& param) { param.basic_check(Module_Param::BC_TEMPLATE, "record template"); - switch (param.get_type()) { + Module_Param_Ptr mp = ¶m; + if (param.get_type() == Module_Param::MP_Reference) { + mp = param.get_referenced_param(); + } + switch (mp->get_type()) { case Module_Param::MP_Omit: *this = OMIT_VALUE; break; @@ -1954,65 +2122,97 @@ void EXTERNAL_identification_syntaxes_template::set_param(Module_Param& param) *this = ANY_OR_OMIT; break; case Module_Param::MP_List_Template: - case Module_Param::MP_ComplementList_Template: - set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, param.get_size()); - for (size_t p_i=0; p_i<param.get_size(); p_i++) { - list_item(p_i).set_param(*param.get_elem(p_i)); - } - break; + case Module_Param::MP_ComplementList_Template: { + EXTERNAL_identification_syntaxes_template temp; + temp.set_type(mp->get_type() == Module_Param::MP_List_Template ? + VALUE_LIST : COMPLEMENTED_LIST, mp->get_size()); + for (size_t i=0; i<mp->get_size(); i++) { + temp.list_item(i).set_param(*mp->get_elem(i)); + } + *this = temp; + break; } case Module_Param::MP_Value_List: - if (param.get_size()==0) break; - if (2!=param.get_size()) { - param.error("record template of type EXTERNAL.identification.syntaxes has 2 fields but list value has %d fields", (int)param.get_size()); + if (mp->get_size()==0) break; + if (2!=mp->get_size()) { + param.error("record template of type EXTERNAL.identification.syntaxes has 2 fields but list value has %d fields", (int)mp->get_size()); } - if (param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) abstract().set_param(*param.get_elem(0)); - if (param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) transfer().set_param(*param.get_elem(1)); + if (mp->get_elem(0)->get_type()!=Module_Param::MP_NotUsed) abstract().set_param(*mp->get_elem(0)); + if (mp->get_elem(1)->get_type()!=Module_Param::MP_NotUsed) transfer().set_param(*mp->get_elem(1)); break; case Module_Param::MP_Assignment_List: { - Vector<bool> value_used(param.get_size()); - value_used.resize(param.get_size(), false); - for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { - Module_Param* const curr_param = param.get_elem(val_idx); + Vector<bool> value_used(mp->get_size()); + value_used.resize(mp->get_size(), false); + for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) { + Module_Param* const curr_param = mp->get_elem(val_idx); if (!strcmp(curr_param->get_id()->get_name(), "abstract")) { abstract().set_param(*curr_param); value_used[val_idx]=true; } } - for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { - Module_Param* const curr_param = param.get_elem(val_idx); + for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) { + Module_Param* const curr_param = mp->get_elem(val_idx); if (!strcmp(curr_param->get_id()->get_name(), "transfer")) { transfer().set_param(*curr_param); value_used[val_idx]=true; } } - for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) { - param.get_elem(val_idx)->error("Non existent field name in type EXTERNAL.identification.syntaxes: %s", param.get_elem(val_idx)->get_id()->get_name()); + for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) if (!value_used[val_idx]) { + mp->get_elem(val_idx)->error("Non existent field name in type EXTERNAL.identification.syntaxes: %s", mp->get_elem(val_idx)->get_id()->get_name()); break; } } break; default: param.type_error("record template", "EXTERNAL.identification.syntaxes"); } - is_ifpresent = param.get_ifpresent(); -} - -void EXTERNAL_identification_syntaxes::encode_text(Text_Buf& text_buf) const -{ - field_abstract.encode_text(text_buf); - field_transfer.encode_text(text_buf); + is_ifpresent = param.get_ifpresent() || mp->get_ifpresent(); } -void EXTERNAL_identification_syntaxes::decode_text(Text_Buf& text_buf) +Module_Param* EXTERNAL_identification_syntaxes_template::get_param(Module_Param_Name& param_name) const { - field_abstract.decode_text(text_buf); - field_transfer.decode_text(text_buf); + Module_Param* mp = NULL; + switch (template_selection) { + case UNINITIALIZED_TEMPLATE: + mp = new Module_Param_Unbound(); + break; + case OMIT_VALUE: + mp = new Module_Param_Omit(); + break; + case ANY_VALUE: + mp = new Module_Param_Any(); + break; + case ANY_OR_OMIT: + mp = new Module_Param_AnyOrNone(); + break; + case SPECIFIC_VALUE: { + Module_Param* mp_field_abstract = single_value->field_abstract.get_param(param_name); + mp_field_abstract->set_id(new Module_Param_FieldName(mcopystr("abstract"))); + Module_Param* mp_field_transfer = single_value->field_transfer.get_param(param_name); + mp_field_transfer->set_id(new Module_Param_FieldName(mcopystr("transfer"))); + mp = new Module_Param_Assignment_List(); + mp->add_elem(mp_field_abstract); + mp->add_elem(mp_field_transfer); + break; } + case VALUE_LIST: + case COMPLEMENTED_LIST: { + if (template_selection == VALUE_LIST) { + mp = new Module_Param_List_Template(); + } + else { + mp = new Module_Param_ComplementList_Template(); + } + for (size_t i = 0; i < value_list.n_values; ++i) { + mp->add_elem(value_list.list_value[i].get_param(param_name)); + } + break; } + default: + break; + } + if (is_ifpresent) { + mp->set_ifpresent(); + } + return mp; } -struct EXTERNAL_identification_syntaxes_template::single_value_struct { - OBJID_template field_abstract; - OBJID_template field_transfer; -}; - void EXTERNAL_identification_syntaxes_template::clean_up() { switch (template_selection) { @@ -2154,7 +2354,8 @@ EXTERNAL_identification_syntaxes_template& EXTERNAL_identification_syntaxes_temp return *this; } -boolean EXTERNAL_identification_syntaxes_template::match(const EXTERNAL_identification_syntaxes& other_value) const +boolean EXTERNAL_identification_syntaxes_template::match(const EXTERNAL_identification_syntaxes& other_value, + boolean /* legacy */) const { switch (template_selection) { case ANY_VALUE: @@ -2296,7 +2497,8 @@ void EXTERNAL_identification_syntaxes_template::log() const log_ifpresent(); } -void EXTERNAL_identification_syntaxes_template::log_match(const EXTERNAL_identification_syntaxes& match_value) const +void EXTERNAL_identification_syntaxes_template::log_match(const EXTERNAL_identification_syntaxes& match_value, + boolean /* legacy */) const { if (template_selection == SPECIFIC_VALUE) { TTCN_Logger::log_event_str("{ abstract := "); @@ -2362,13 +2564,13 @@ void EXTERNAL_identification_syntaxes_template::decode_text(Text_Buf& text_buf) } } -boolean EXTERNAL_identification_syntaxes_template::is_present() const +boolean EXTERNAL_identification_syntaxes_template::is_present(boolean legacy /* = FALSE */) const { if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE; - return !match_omit(); + return !match_omit(legacy); } -boolean EXTERNAL_identification_syntaxes_template::match_omit() const +boolean EXTERNAL_identification_syntaxes_template::match_omit(boolean legacy /* = FALSE */) const { if (is_ifpresent) return TRUE; switch (template_selection) { @@ -2377,10 +2579,12 @@ boolean EXTERNAL_identification_syntaxes_template::match_omit() const return TRUE; case VALUE_LIST: case COMPLEMENTED_LIST: - for (unsigned int i=0; i<value_list.n_values; i++) - if (value_list.list_value[i].match_omit()) - return template_selection==VALUE_LIST; - return template_selection==COMPLEMENTED_LIST; + if (legacy) { + for (unsigned int i=0; i<value_list.n_values; i++) + if (value_list.list_value[i].match_omit()) + return template_selection==VALUE_LIST; + return template_selection==COMPLEMENTED_LIST; + } // else fall through default: return FALSE; } @@ -2388,7 +2592,8 @@ boolean EXTERNAL_identification_syntaxes_template::match_omit() const } #ifndef TITAN_RUNTIME_2 -void EXTERNAL_identification_syntaxes_template::check_restriction(template_res t_res, const char* t_name) const +void EXTERNAL_identification_syntaxes_template::check_restriction(template_res t_res, const char* t_name, + boolean legacy /* = FALSE */) const { if (template_selection==UNINITIALIZED_TEMPLATE) return; switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) { @@ -2400,7 +2605,7 @@ void EXTERNAL_identification_syntaxes_template::check_restriction(template_res t template_selection==SPECIFIC_VALUE)) return; break; case TR_PRESENT: - if (!match_omit()) return; + if (!match_omit(legacy)) return; break; default: return; @@ -2465,34 +2670,38 @@ void EXTERNAL_identification_context__negotiation::clean_up() void EXTERNAL_identification_context__negotiation::set_param(Module_Param& param) { param.basic_check(Module_Param::BC_VALUE, "record value"); - switch (param.get_type()) { + Module_Param_Ptr mp = ¶m; + if (param.get_type() == Module_Param::MP_Reference) { + mp = param.get_referenced_param(); + } + switch (mp->get_type()) { case Module_Param::MP_Value_List: - if (param.get_size()==0) return; - if (2!=param.get_size()) { - param.error("record value of type EXTERNAL.identification.context-negotiation has 2 fields but list value has %d fields", (int)param.get_size()); + if (mp->get_size()==0) return; + if (2!=mp->get_size()) { + param.error("record value of type EXTERNAL.identification.context-negotiation has 2 fields but list value has %d fields", (int)mp->get_size()); } - if (param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) presentation__context__id().set_param(*param.get_elem(0)); - if (param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) transfer__syntax().set_param(*param.get_elem(1)); + if (mp->get_elem(0)->get_type()!=Module_Param::MP_NotUsed) presentation__context__id().set_param(*mp->get_elem(0)); + if (mp->get_elem(1)->get_type()!=Module_Param::MP_NotUsed) transfer__syntax().set_param(*mp->get_elem(1)); break; case Module_Param::MP_Assignment_List: { - Vector<bool> value_used(param.get_size()); - value_used.resize(param.get_size(), false); - for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { - Module_Param* const curr_param = param.get_elem(val_idx); + Vector<bool> value_used(mp->get_size()); + value_used.resize(mp->get_size(), false); + for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) { + Module_Param* const curr_param = mp->get_elem(val_idx); if (!strcmp(curr_param->get_id()->get_name(), "presentation_context_id")) { presentation__context__id().set_param(*curr_param); value_used[val_idx]=true; } } - for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { - Module_Param* const curr_param = param.get_elem(val_idx); + for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) { + Module_Param* const curr_param = mp->get_elem(val_idx); if (!strcmp(curr_param->get_id()->get_name(), "transfer_syntax")) { transfer__syntax().set_param(*curr_param); value_used[val_idx]=true; } } - for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) { - param.get_elem(val_idx)->error("Non existent field name in type EXTERNAL.identification.context-negotiation: %s", param.get_elem(val_idx)->get_id()->get_name()); + for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) if (!value_used[val_idx]) { + mp->get_elem(val_idx)->error("Non existent field name in type EXTERNAL.identification.context-negotiation: %s", mp->get_elem(val_idx)->get_id()->get_name()); break; } } break; @@ -2501,10 +2710,46 @@ void EXTERNAL_identification_context__negotiation::set_param(Module_Param& param } } +Module_Param* EXTERNAL_identification_context__negotiation::get_param(Module_Param_Name& param_name) const +{ + if (!is_bound()) { + return new Module_Param_Unbound(); + } + Module_Param* mp_field_presentation_context_id = field_presentation__context__id.get_param(param_name); + mp_field_presentation_context_id->set_id(new Module_Param_FieldName(mcopystr("presentation_context_id"))); + Module_Param* mp_field_transfer_syntax = field_transfer__syntax.get_param(param_name); + mp_field_transfer_syntax->set_id(new Module_Param_FieldName(mcopystr("transfer_syntax"))); + Module_Param_Assignment_List* mp = new Module_Param_Assignment_List(); + mp->add_elem(mp_field_presentation_context_id); + mp->add_elem(mp_field_transfer_syntax); + return mp; +} + +void EXTERNAL_identification_context__negotiation::encode_text(Text_Buf& text_buf) const +{ + field_presentation__context__id.encode_text(text_buf); + field_transfer__syntax.encode_text(text_buf); +} + +void EXTERNAL_identification_context__negotiation::decode_text(Text_Buf& text_buf) +{ + field_presentation__context__id.decode_text(text_buf); + field_transfer__syntax.decode_text(text_buf); +} + +struct EXTERNAL_identification_context__negotiation_template::single_value_struct { + INTEGER_template field_presentation__context__id; + OBJID_template field_transfer__syntax; +}; + void EXTERNAL_identification_context__negotiation_template::set_param(Module_Param& param) { param.basic_check(Module_Param::BC_TEMPLATE, "record template"); - switch (param.get_type()) { + Module_Param_Ptr mp = ¶m; + if (param.get_type() == Module_Param::MP_Reference) { + mp = param.get_referenced_param(); + } + switch (mp->get_type()) { case Module_Param::MP_Omit: *this = OMIT_VALUE; break; @@ -2515,65 +2760,97 @@ void EXTERNAL_identification_context__negotiation_template::set_param(Module_Par *this = ANY_OR_OMIT; break; case Module_Param::MP_List_Template: - case Module_Param::MP_ComplementList_Template: - set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, param.get_size()); - for (size_t p_i=0; p_i<param.get_size(); p_i++) { - list_item(p_i).set_param(*param.get_elem(p_i)); - } - break; + case Module_Param::MP_ComplementList_Template: { + EXTERNAL_identification_context__negotiation_template temp; + temp.set_type(mp->get_type() == Module_Param::MP_List_Template ? + VALUE_LIST : COMPLEMENTED_LIST, mp->get_size()); + for (size_t i=0; i<mp->get_size(); i++) { + temp.list_item(i).set_param(*mp->get_elem(i)); + } + *this = temp; + break; } case Module_Param::MP_Value_List: - if (param.get_size()==0) break; - if (2!=param.get_size()) { - param.error("record template of type EXTERNAL.identification.context-negotiation has 2 fields but list value has %d fields", (int)param.get_size()); + if (mp->get_size()==0) break; + if (2!=mp->get_size()) { + param.error("record template of type EXTERNAL.identification.context-negotiation has 2 fields but list value has %d fields", (int)mp->get_size()); } - if (param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) presentation__context__id().set_param(*param.get_elem(0)); - if (param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) transfer__syntax().set_param(*param.get_elem(1)); + if (mp->get_elem(0)->get_type()!=Module_Param::MP_NotUsed) presentation__context__id().set_param(*mp->get_elem(0)); + if (mp->get_elem(1)->get_type()!=Module_Param::MP_NotUsed) transfer__syntax().set_param(*mp->get_elem(1)); break; case Module_Param::MP_Assignment_List: { - Vector<bool> value_used(param.get_size()); - value_used.resize(param.get_size(), false); - for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { - Module_Param* const curr_param = param.get_elem(val_idx); + Vector<bool> value_used(mp->get_size()); + value_used.resize(mp->get_size(), false); + for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) { + Module_Param* const curr_param = mp->get_elem(val_idx); if (!strcmp(curr_param->get_id()->get_name(), "presentation_context_id")) { presentation__context__id().set_param(*curr_param); value_used[val_idx]=true; } } - for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { - Module_Param* const curr_param = param.get_elem(val_idx); + for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) { + Module_Param* const curr_param = mp->get_elem(val_idx); if (!strcmp(curr_param->get_id()->get_name(), "transfer_syntax")) { transfer__syntax().set_param(*curr_param); value_used[val_idx]=true; } } - for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) { - param.get_elem(val_idx)->error("Non existent field name in type EXTERNAL.identification.context-negotiation: %s", param.get_elem(val_idx)->get_id()->get_name()); + for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) if (!value_used[val_idx]) { + mp->get_elem(val_idx)->error("Non existent field name in type EXTERNAL.identification.context-negotiation: %s", mp->get_elem(val_idx)->get_id()->get_name()); break; } } break; default: param.type_error("record template", "EXTERNAL.identification.context-negotiation"); } - is_ifpresent = param.get_ifpresent(); + is_ifpresent = param.get_ifpresent() || mp->get_ifpresent(); } -void EXTERNAL_identification_context__negotiation::encode_text(Text_Buf& text_buf) const +Module_Param* EXTERNAL_identification_context__negotiation_template::get_param(Module_Param_Name& param_name) const { - field_presentation__context__id.encode_text(text_buf); - field_transfer__syntax.encode_text(text_buf); -} - -void EXTERNAL_identification_context__negotiation::decode_text(Text_Buf& text_buf) -{ - field_presentation__context__id.decode_text(text_buf); - field_transfer__syntax.decode_text(text_buf); + Module_Param* mp = NULL; + switch (template_selection) { + case UNINITIALIZED_TEMPLATE: + mp = new Module_Param_Unbound(); + break; + case OMIT_VALUE: + mp = new Module_Param_Omit(); + break; + case ANY_VALUE: + mp = new Module_Param_Any(); + break; + case ANY_OR_OMIT: + mp = new Module_Param_AnyOrNone(); + break; + case SPECIFIC_VALUE: { + Module_Param* mp_field_presentation_context_id = single_value->field_presentation__context__id.get_param(param_name); + mp_field_presentation_context_id->set_id(new Module_Param_FieldName(mcopystr("presentation_context_id"))); + Module_Param* mp_field_transfer_syntax = single_value->field_transfer__syntax.get_param(param_name); + mp_field_transfer_syntax->set_id(new Module_Param_FieldName(mcopystr("transfer_syntax"))); + mp = new Module_Param_Assignment_List(); + mp->add_elem(mp_field_presentation_context_id); + mp->add_elem(mp_field_transfer_syntax); + break; } + case VALUE_LIST: + case COMPLEMENTED_LIST: { + if (template_selection == VALUE_LIST) { + mp = new Module_Param_List_Template(); + } + else { + mp = new Module_Param_ComplementList_Template(); + } + for (size_t i = 0; i < value_list.n_values; ++i) { + mp->add_elem(value_list.list_value[i].get_param(param_name)); + } + break; } + default: + break; + } + if (is_ifpresent) { + mp->set_ifpresent(); + } + return mp; } -struct EXTERNAL_identification_context__negotiation_template::single_value_struct { - INTEGER_template field_presentation__context__id; - OBJID_template field_transfer__syntax; -}; - void EXTERNAL_identification_context__negotiation_template::clean_up() { switch (template_selection) { @@ -2715,7 +2992,8 @@ EXTERNAL_identification_context__negotiation_template& EXTERNAL_identification_c return *this; } -boolean EXTERNAL_identification_context__negotiation_template::match(const EXTERNAL_identification_context__negotiation& other_value) const +boolean EXTERNAL_identification_context__negotiation_template::match(const EXTERNAL_identification_context__negotiation& other_value, + boolean /* legacy */) const { switch (template_selection) { case ANY_VALUE: @@ -2857,7 +3135,8 @@ void EXTERNAL_identification_context__negotiation_template::log() const log_ifpresent(); } -void EXTERNAL_identification_context__negotiation_template::log_match(const EXTERNAL_identification_context__negotiation& match_value) const +void EXTERNAL_identification_context__negotiation_template::log_match(const EXTERNAL_identification_context__negotiation& match_value, + boolean /* legacy */) const { if (template_selection == SPECIFIC_VALUE) { TTCN_Logger::log_event_str("{ presentation_context_id := "); @@ -2923,13 +3202,13 @@ void EXTERNAL_identification_context__negotiation_template::decode_text(Text_Buf } } -boolean EXTERNAL_identification_context__negotiation_template::is_present() const +boolean EXTERNAL_identification_context__negotiation_template::is_present(boolean legacy /* = FALSE */) const { if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE; - return !match_omit(); + return !match_omit(legacy); } -boolean EXTERNAL_identification_context__negotiation_template::match_omit() const +boolean EXTERNAL_identification_context__negotiation_template::match_omit(boolean legacy /* = FALSE */) const { if (is_ifpresent) return TRUE; switch (template_selection) { @@ -2938,10 +3217,12 @@ boolean EXTERNAL_identification_context__negotiation_template::match_omit() cons return TRUE; case VALUE_LIST: case COMPLEMENTED_LIST: - for (unsigned int i=0; i<value_list.n_values; i++) - if (value_list.list_value[i].match_omit()) - return template_selection==VALUE_LIST; - return template_selection==COMPLEMENTED_LIST; + if (legacy) { + for (unsigned int i=0; i<value_list.n_values; i++) + if (value_list.list_value[i].match_omit()) + return template_selection==VALUE_LIST; + return template_selection==COMPLEMENTED_LIST; + } // else fall through default: return FALSE; } @@ -2949,7 +3230,8 @@ boolean EXTERNAL_identification_context__negotiation_template::match_omit() cons } #ifndef TITAN_RUNTIME_2 -void EXTERNAL_identification_context__negotiation_template::check_restriction(template_res t_res, const char* t_name) const +void EXTERNAL_identification_context__negotiation_template::check_restriction(template_res t_res, const char* t_name, + boolean legacy /* = FALSE */) const { if (template_selection==UNINITIALIZED_TEMPLATE) return; switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) { @@ -2961,7 +3243,7 @@ void EXTERNAL_identification_context__negotiation_template::check_restriction(te template_selection==SPECIFIC_VALUE)) return; break; case TR_PRESENT: - if (!match_omit()) return; + if (!match_omit(legacy)) return; break; default: return; @@ -3035,42 +3317,46 @@ void EXTERNAL::clean_up() void EXTERNAL::set_param(Module_Param& param) { param.basic_check(Module_Param::BC_VALUE, "record value"); - switch (param.get_type()) { + Module_Param_Ptr mp = ¶m; + if (param.get_type() == Module_Param::MP_Reference) { + mp = param.get_referenced_param(); + } + switch (mp->get_type()) { case Module_Param::MP_Value_List: - if (param.get_size()==0) return; - if (3!=param.get_size()) { - param.error("record value of type EXTERNAL has 3 fields but list value has %d fields", (int)param.get_size()); + if (mp->get_size()==0) return; + if (3!=mp->get_size()) { + param.error("record value of type EXTERNAL has 3 fields but list value has %d fields", (int)mp->get_size()); } - if (param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) identification().set_param(*param.get_elem(0)); - if (param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) data__value__descriptor().set_param(*param.get_elem(1)); - if (param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) data__value().set_param(*param.get_elem(2)); + if (mp->get_elem(0)->get_type()!=Module_Param::MP_NotUsed) identification().set_param(*mp->get_elem(0)); + if (mp->get_elem(1)->get_type()!=Module_Param::MP_NotUsed) data__value__descriptor().set_param(*mp->get_elem(1)); + if (mp->get_elem(2)->get_type()!=Module_Param::MP_NotUsed) data__value().set_param(*mp->get_elem(2)); break; case Module_Param::MP_Assignment_List: { - Vector<bool> value_used(param.get_size()); - value_used.resize(param.get_size(), false); - for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { - Module_Param* const curr_param = param.get_elem(val_idx); + Vector<bool> value_used(mp->get_size()); + value_used.resize(mp->get_size(), false); + for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) { + Module_Param* const curr_param = mp->get_elem(val_idx); if (!strcmp(curr_param->get_id()->get_name(), "identification")) { identification().set_param(*curr_param); value_used[val_idx]=true; } } - for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { - Module_Param* const curr_param = param.get_elem(val_idx); + for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) { + Module_Param* const curr_param = mp->get_elem(val_idx); if (!strcmp(curr_param->get_id()->get_name(), "data_value_descriptor")) { data__value__descriptor().set_param(*curr_param); value_used[val_idx]=true; } } - for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { - Module_Param* const curr_param = param.get_elem(val_idx); + for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) { + Module_Param* const curr_param = mp->get_elem(val_idx); if (!strcmp(curr_param->get_id()->get_name(), "data_value")) { data__value().set_param(*curr_param); value_used[val_idx]=true; } } - for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) { - param.get_elem(val_idx)->error("Non existent field name in type EXTERNAL: %s", param.get_elem(val_idx)->get_id()->get_name()); + for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) if (!value_used[val_idx]) { + mp->get_elem(val_idx)->error("Non existent field name in type EXTERNAL: %s", mp->get_elem(val_idx)->get_id()->get_name()); break; } } break; @@ -3079,68 +3365,22 @@ void EXTERNAL::set_param(Module_Param& param) } } -void EXTERNAL_template::set_param(Module_Param& param) +Module_Param* EXTERNAL::get_param(Module_Param_Name& param_name) const { - param.basic_check(Module_Param::BC_TEMPLATE, "record template"); - switch (param.get_type()) { - case Module_Param::MP_Omit: - *this = OMIT_VALUE; - break; - case Module_Param::MP_Any: - *this = ANY_VALUE; - break; - case Module_Param::MP_AnyOrNone: - *this = ANY_OR_OMIT; - break; - case Module_Param::MP_List_Template: - case Module_Param::MP_ComplementList_Template: - set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, param.get_size()); - for (size_t p_i=0; p_i<param.get_size(); p_i++) { - list_item(p_i).set_param(*param.get_elem(p_i)); - } - break; - case Module_Param::MP_Value_List: - if (param.get_size()==0) break; - if (3!=param.get_size()) { - param.error("record template of type EXTERNAL has 3 fields but list value has %d fields", (int)param.get_size()); - } - if (param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) identification().set_param(*param.get_elem(0)); - if (param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) data__value__descriptor().set_param(*param.get_elem(1)); - if (param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) data__value().set_param(*param.get_elem(2)); - break; - case Module_Param::MP_Assignment_List: { - Vector<bool> value_used(param.get_size()); - value_used.resize(param.get_size(), false); - for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { - Module_Param* const curr_param = param.get_elem(val_idx); - if (!strcmp(curr_param->get_id()->get_name(), "identification")) { - identification().set_param(*curr_param); - value_used[val_idx]=true; - } - } - for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { - Module_Param* const curr_param = param.get_elem(val_idx); - if (!strcmp(curr_param->get_id()->get_name(), "data_value_descriptor")) { - data__value__descriptor().set_param(*curr_param); - value_used[val_idx]=true; - } - } - for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { - Module_Param* const curr_param = param.get_elem(val_idx); - if (!strcmp(curr_param->get_id()->get_name(), "data_value")) { - data__value().set_param(*curr_param); - value_used[val_idx]=true; - } - } - for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) { - param.get_elem(val_idx)->error("Non existent field name in type EXTERNAL: %s", param.get_elem(val_idx)->get_id()->get_name()); - break; - } - } break; - default: - param.type_error("record template", "EXTERNAL"); + if (!is_bound()) { + return new Module_Param_Unbound(); } - is_ifpresent = param.get_ifpresent(); + Module_Param* mp_field_identification = field_identification.get_param(param_name); + mp_field_identification->set_id(new Module_Param_FieldName(mcopystr("identification"))); + Module_Param* mp_field_data_value_descriptor = field_data__value__descriptor.get_param(param_name); + mp_field_data_value_descriptor->set_id(new Module_Param_FieldName(mcopystr("data_value_descriptor"))); + Module_Param* mp_field_data_value = field_data__value.get_param(param_name); + mp_field_data_value->set_id(new Module_Param_FieldName(mcopystr("data_value"))); + Module_Param_Assignment_List* mp = new Module_Param_Assignment_List(); + mp->add_elem(mp_field_identification); + mp->add_elem(mp_field_data_value_descriptor); + mp->add_elem(mp_field_data_value); + return mp; } void EXTERNAL::encode_text(Text_Buf& text_buf) const @@ -3250,6 +3490,126 @@ struct EXTERNAL_template::single_value_struct { OCTETSTRING_template field_data__value; }; +void EXTERNAL_template::set_param(Module_Param& param) +{ + param.basic_check(Module_Param::BC_TEMPLATE, "record template"); + Module_Param_Ptr mp = ¶m; + if (param.get_type() == Module_Param::MP_Reference) { + mp = param.get_referenced_param(); + } + switch (mp->get_type()) { + case Module_Param::MP_Omit: + *this = OMIT_VALUE; + break; + case Module_Param::MP_Any: + *this = ANY_VALUE; + break; + case Module_Param::MP_AnyOrNone: + *this = ANY_OR_OMIT; + break; + case Module_Param::MP_List_Template: + case Module_Param::MP_ComplementList_Template: { + EXTERNAL_template temp; + temp.set_type(mp->get_type() == Module_Param::MP_List_Template ? + VALUE_LIST : COMPLEMENTED_LIST, mp->get_size()); + for (size_t i=0; i<mp->get_size(); i++) { + temp.list_item(i).set_param(*mp->get_elem(i)); + } + *this = temp; + break; } + case Module_Param::MP_Value_List: + if (mp->get_size()==0) break; + if (3!=mp->get_size()) { + param.error("record template of type EXTERNAL has 3 fields but list value has %d fields", (int)mp->get_size()); + } + if (mp->get_elem(0)->get_type()!=Module_Param::MP_NotUsed) identification().set_param(*mp->get_elem(0)); + if (mp->get_elem(1)->get_type()!=Module_Param::MP_NotUsed) data__value__descriptor().set_param(*mp->get_elem(1)); + if (mp->get_elem(2)->get_type()!=Module_Param::MP_NotUsed) data__value().set_param(*mp->get_elem(2)); + break; + case Module_Param::MP_Assignment_List: { + Vector<bool> value_used(mp->get_size()); + value_used.resize(mp->get_size(), false); + for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) { + Module_Param* const curr_param = mp->get_elem(val_idx); + if (!strcmp(curr_param->get_id()->get_name(), "identification")) { + identification().set_param(*curr_param); + value_used[val_idx]=true; + } + } + for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) { + Module_Param* const curr_param = mp->get_elem(val_idx); + if (!strcmp(curr_param->get_id()->get_name(), "data_value_descriptor")) { + data__value__descriptor().set_param(*curr_param); + value_used[val_idx]=true; + } + } + for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) { + Module_Param* const curr_param = mp->get_elem(val_idx); + if (!strcmp(curr_param->get_id()->get_name(), "data_value")) { + data__value().set_param(*curr_param); + value_used[val_idx]=true; + } + } + for (size_t val_idx=0; val_idx<mp->get_size(); val_idx++) if (!value_used[val_idx]) { + mp->get_elem(val_idx)->error("Non existent field name in type EXTERNAL: %s", mp->get_elem(val_idx)->get_id()->get_name()); + break; + } + } break; + default: + param.type_error("record template", "EXTERNAL"); + } + is_ifpresent = param.get_ifpresent() || mp->get_ifpresent(); +} + +Module_Param* EXTERNAL_template::get_param(Module_Param_Name& param_name) const +{ + Module_Param* mp = NULL; + switch (template_selection) { + case UNINITIALIZED_TEMPLATE: + mp = new Module_Param_Unbound(); + break; + case OMIT_VALUE: + mp = new Module_Param_Omit(); + break; + case ANY_VALUE: + mp = new Module_Param_Any(); + break; + case ANY_OR_OMIT: + mp = new Module_Param_AnyOrNone(); + break; + case SPECIFIC_VALUE: { + Module_Param* mp_field_identification = single_value->field_identification.get_param(param_name); + mp_field_identification->set_id(new Module_Param_FieldName(mcopystr("identification"))); + Module_Param* mp_field_data_value_descriptor = single_value->field_data__value__descriptor.get_param(param_name); + mp_field_data_value_descriptor->set_id(new Module_Param_FieldName(mcopystr("data_value_descriptor"))); + Module_Param* mp_field_string_value = single_value->field_data__value.get_param(param_name); + mp_field_string_value->set_id(new Module_Param_FieldName(mcopystr("data_value"))); + mp = new Module_Param_Assignment_List(); + mp->add_elem(mp_field_identification); + mp->add_elem(mp_field_data_value_descriptor); + mp->add_elem(mp_field_string_value); + break; } + case VALUE_LIST: + case COMPLEMENTED_LIST: { + if (template_selection == VALUE_LIST) { + mp = new Module_Param_List_Template(); + } + else { + mp = new Module_Param_ComplementList_Template(); + } + for (size_t i = 0; i < value_list.n_values; ++i) { + mp->add_elem(value_list.list_value[i].get_param(param_name)); + } + break; } + default: + break; + } + if (is_ifpresent) { + mp->set_ifpresent(); + } + return mp; +} + void EXTERNAL_template::clean_up() { switch (template_selection) { @@ -3394,7 +3754,8 @@ EXTERNAL_template& EXTERNAL_template::operator=(const EXTERNAL_template& other_v return *this; } -boolean EXTERNAL_template::match(const EXTERNAL& other_value) const +boolean EXTERNAL_template::match(const EXTERNAL& other_value, + boolean /* legacy */) const { switch (template_selection) { case ANY_VALUE: @@ -3556,7 +3917,8 @@ void EXTERNAL_template::log() const log_ifpresent(); } -void EXTERNAL_template::log_match(const EXTERNAL& match_value) const +void EXTERNAL_template::log_match(const EXTERNAL& match_value, + boolean /* legacy */) const { if (template_selection == SPECIFIC_VALUE) { TTCN_Logger::log_event_str("{ identification := "); @@ -3631,13 +3993,13 @@ void EXTERNAL_template::decode_text(Text_Buf& text_buf) } } -boolean EXTERNAL_template::is_present() const +boolean EXTERNAL_template::is_present(boolean legacy /* = FALSE */) const { if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE; - return !match_omit(); + return !match_omit(legacy); } -boolean EXTERNAL_template::match_omit() const +boolean EXTERNAL_template::match_omit(boolean legacy /* = FALSE */) const { if (is_ifpresent) return TRUE; switch (template_selection) { @@ -3646,10 +4008,14 @@ boolean EXTERNAL_template::match_omit() const return TRUE; case VALUE_LIST: case COMPLEMENTED_LIST: - for (unsigned int i=0; i<value_list.n_values; i++) - if (value_list.list_value[i].match_omit()) - return template_selection==VALUE_LIST; - return template_selection==COMPLEMENTED_LIST; + if (legacy) { + // legacy behavior: 'omit' can appear in the value/complement list + for (unsigned int i=0; i<value_list.n_values; i++) + if (value_list.list_value[i].match_omit()) + return template_selection==VALUE_LIST; + return template_selection==COMPLEMENTED_LIST; + } + // else fall through default: return FALSE; } @@ -3657,7 +4023,8 @@ boolean EXTERNAL_template::match_omit() const } #ifndef TITAN_RUNTIME_2 -void EXTERNAL_template::check_restriction(template_res t_res, const char* t_name) const +void EXTERNAL_template::check_restriction(template_res t_res, const char* t_name, + boolean legacy /* = FALSE */) const { if (template_selection==UNINITIALIZED_TEMPLATE) return; switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) { @@ -3669,7 +4036,7 @@ void EXTERNAL_template::check_restriction(template_res t_res, const char* t_name template_selection==SPECIFIC_VALUE)) return; break; case TR_PRESENT: - if (!match_omit()) return; + if (!match_omit(legacy)) return; break; default: return; diff --git a/core/ASN_External.hh b/core/ASN_External.hh index 9405c254c..609a1ba1f 100644 --- a/core/ASN_External.hh +++ b/core/ASN_External.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -78,7 +78,8 @@ public: #else inline boolean is_present() const { return is_bound(); } #endif - void set_param(Module_Param& param); + void set_param(Module_Param& param); + Module_Param* get_param(Module_Param_Name& param_name) const; void encode_text(Text_Buf& text_buf) const; void decode_text(Text_Buf& text_buf); }; @@ -119,7 +120,7 @@ public: EXTERNAL_identification_template& operator=(const EXTERNAL_identification& other_value); EXTERNAL_identification_template& operator=(const OPTIONAL<EXTERNAL_identification>& other_value); EXTERNAL_identification_template& operator=(const EXTERNAL_identification_template& other_value); - boolean match(const EXTERNAL_identification& other_value) const; + boolean match(const EXTERNAL_identification& other_value, boolean legacy = FALSE) const; EXTERNAL_identification valueof() const; EXTERNAL_identification_template& list_item(unsigned int list_index) const; void set_type(template_sel template_type, unsigned int list_length); @@ -137,23 +138,24 @@ public: const ASN_NULL_template& fixed() const; boolean ischosen(EXTERNAL_identification::union_selection_type checked_selection) const; void log() const; - void log_match(const EXTERNAL_identification& match_value) const; + void log_match(const EXTERNAL_identification& match_value, boolean legacy = FALSE) const; void encode_text(Text_Buf& text_buf) const; void decode_text(Text_Buf& text_buf); - boolean is_present() const; - boolean match_omit() const; + boolean is_present(boolean legacy = FALSE) const; + boolean match_omit(boolean legacy = FALSE) const; void set_param(Module_Param& param); + Module_Param* get_param(Module_Param_Name& param_name) const; #ifdef TITAN_RUNTIME_2 void valueofv(Base_Type* value) const { *(static_cast<EXTERNAL_identification*>(value)) = valueof(); } void set_value(template_sel other_value) { *this = other_value; } void copy_value(const Base_Type* other_value) { *this = *(static_cast<const EXTERNAL_identification*>(other_value)); } Base_Template* clone() const { return new EXTERNAL_identification_template(*this); } const TTCN_Typedescriptor_t* get_descriptor() const { return &EXTERNAL_descr_; } - boolean matchv(const Base_Type* other_value) const { return match(*(static_cast<const EXTERNAL_identification*>(other_value))); } - void log_matchv(const Base_Type* match_value) const { log_match(*(static_cast<const EXTERNAL_identification*>(match_value))); } + boolean matchv(const Base_Type* other_value, boolean legacy) const { return match(*(static_cast<const EXTERNAL_identification*>(other_value)), legacy); } + void log_matchv(const Base_Type* match_value, boolean legacy) const { log_match(*(static_cast<const EXTERNAL_identification*>(match_value)), legacy); } #else - void check_restriction(template_res t_res, const char* t_name=NULL) const; + void check_restriction(template_res t_res, const char* t_name=NULL, boolean legacy = FALSE) const; #endif }; @@ -190,6 +192,7 @@ public: inline boolean is_present() const { return is_bound(); } #endif void set_param(Module_Param& param); + Module_Param* get_param(Module_Param_Name& param_name) const; void encode_text(Text_Buf& text_buf) const; void decode_text(Text_Buf& text_buf); }; @@ -226,7 +229,7 @@ public: EXTERNAL_identification_syntaxes_template& operator=(const EXTERNAL_identification_syntaxes& other_value); EXTERNAL_identification_syntaxes_template& operator=(const OPTIONAL<EXTERNAL_identification_syntaxes>& other_value); EXTERNAL_identification_syntaxes_template& operator=(const EXTERNAL_identification_syntaxes_template& other_value); - boolean match(const EXTERNAL_identification_syntaxes& other_value) const; + boolean match(const EXTERNAL_identification_syntaxes& other_value, boolean legacy = FALSE) const; EXTERNAL_identification_syntaxes valueof() const; void set_type(template_sel template_type, unsigned int list_length); EXTERNAL_identification_syntaxes_template& list_item(unsigned int list_index) const; @@ -236,23 +239,24 @@ public: const OBJID_template& transfer() const; int size_of() const; void log() const; - void log_match(const EXTERNAL_identification_syntaxes& match_value) const; + void log_match(const EXTERNAL_identification_syntaxes& match_value, boolean legacy = FALSE) const; void encode_text(Text_Buf& text_buf) const; void decode_text(Text_Buf& text_buf); - boolean is_present() const; - boolean match_omit() const; + boolean is_present(boolean legacy = FALSE) const; + boolean match_omit(boolean legacy = FALSE) const; void set_param(Module_Param& param); + Module_Param* get_param(Module_Param_Name& param_name) const; #ifdef TITAN_RUNTIME_2 void valueofv(Base_Type* value) const { *(static_cast<EXTERNAL_identification_syntaxes*>(value)) = valueof(); } void set_value(template_sel other_value) { *this = other_value; } void copy_value(const Base_Type* other_value) { *this = *(static_cast<const EXTERNAL_identification_syntaxes*>(other_value)); } Base_Template* clone() const { return new EXTERNAL_identification_syntaxes_template(*this); } const TTCN_Typedescriptor_t* get_descriptor() const { return &EXTERNAL_descr_; } - boolean matchv(const Base_Type* other_value) const { return match(*(static_cast<const EXTERNAL_identification_syntaxes*>(other_value))); } - void log_matchv(const Base_Type* match_value) const { log_match(*(static_cast<const EXTERNAL_identification_syntaxes*>(match_value))); } + boolean matchv(const Base_Type* other_value, boolean legacy) const { return match(*(static_cast<const EXTERNAL_identification_syntaxes*>(other_value)), legacy); } + void log_matchv(const Base_Type* match_value, boolean legacy) const { log_match(*(static_cast<const EXTERNAL_identification_syntaxes*>(match_value)), legacy); } #else - void check_restriction(template_res t_res, const char* t_name=NULL) const; + void check_restriction(template_res t_res, const char* t_name=NULL, boolean legacy = FALSE) const; #endif }; @@ -289,6 +293,7 @@ public: inline boolean is_present() const { return is_bound(); } #endif void set_param(Module_Param& param); + Module_Param* get_param(Module_Param_Name& param_name) const; void encode_text(Text_Buf& text_buf) const; void decode_text(Text_Buf& text_buf); }; @@ -325,7 +330,7 @@ public: EXTERNAL_identification_context__negotiation_template& operator=(const EXTERNAL_identification_context__negotiation& other_value); EXTERNAL_identification_context__negotiation_template& operator=(const OPTIONAL<EXTERNAL_identification_context__negotiation>& other_value); EXTERNAL_identification_context__negotiation_template& operator=(const EXTERNAL_identification_context__negotiation_template& other_value); - boolean match(const EXTERNAL_identification_context__negotiation& other_value) const; + boolean match(const EXTERNAL_identification_context__negotiation& other_value, boolean legacy = FALSE) const; EXTERNAL_identification_context__negotiation valueof() const; void set_type(template_sel template_type, unsigned int list_length); EXTERNAL_identification_context__negotiation_template& list_item(unsigned int list_index) const; @@ -335,23 +340,24 @@ public: const OBJID_template& transfer__syntax() const; int size_of() const; void log() const; - void log_match(const EXTERNAL_identification_context__negotiation& match_value) const; + void log_match(const EXTERNAL_identification_context__negotiation& match_value, boolean legacy = FALSE) const; void encode_text(Text_Buf& text_buf) const; void decode_text(Text_Buf& text_buf); - boolean is_present() const; - boolean match_omit() const; + boolean is_present(boolean legacy = FALSE) const; + boolean match_omit(boolean legacy = FALSE) const; void set_param(Module_Param& param); + Module_Param* get_param(Module_Param_Name& param_name) const; #ifdef TITAN_RUNTIME_2 void valueofv(Base_Type* value) const { *(static_cast<EXTERNAL_identification_context__negotiation*>(value)) = valueof(); } void set_value(template_sel other_value) { *this = other_value; } void copy_value(const Base_Type* other_value) { *this = *(static_cast<const EXTERNAL_identification_context__negotiation*>(other_value)); } Base_Template* clone() const { return new EXTERNAL_identification_context__negotiation_template(*this); } const TTCN_Typedescriptor_t* get_descriptor() const { return &EXTERNAL_descr_; } - boolean matchv(const Base_Type* other_value) const { return match(*(static_cast<const EXTERNAL_identification_context__negotiation*>(other_value))); } - void log_matchv(const Base_Type* match_value) const { log_match(*(static_cast<const EXTERNAL_identification_context__negotiation*>(match_value))); } + boolean matchv(const Base_Type* other_value, boolean legacy) const { return match(*(static_cast<const EXTERNAL_identification_context__negotiation*>(other_value)), legacy); } + void log_matchv(const Base_Type* match_value, boolean legacy) const { log_match(*(static_cast<const EXTERNAL_identification_context__negotiation*>(match_value)), legacy); } #else - void check_restriction(template_res t_res, const char* t_name=NULL) const; + void check_restriction(template_res t_res, const char* t_name=NULL, boolean legacy = FALSE) const; #endif }; @@ -396,6 +402,7 @@ public: inline boolean is_present() const { return is_bound(); } #endif void set_param(Module_Param& param); + Module_Param* get_param(Module_Param_Name& param_name) const; void encode_text(Text_Buf& text_buf) const; void decode_text(Text_Buf& text_buf); void encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t p_coding, ...) const; @@ -440,7 +447,7 @@ public: EXTERNAL_template& operator=(const EXTERNAL& other_value); EXTERNAL_template& operator=(const OPTIONAL<EXTERNAL>& other_value); EXTERNAL_template& operator=(const EXTERNAL_template& other_value); - boolean match(const EXTERNAL& other_value) const; + boolean match(const EXTERNAL& other_value, boolean legacy = FALSE) const; EXTERNAL valueof() const; void set_type(template_sel template_type, unsigned int list_length); EXTERNAL_template& list_item(unsigned int list_index) const; @@ -452,23 +459,24 @@ public: const OCTETSTRING_template& data__value() const; int size_of() const; void log() const; - void log_match(const EXTERNAL& match_value) const; + void log_match(const EXTERNAL& match_value, boolean legacy = FALSE) const; void encode_text(Text_Buf& text_buf) const; void decode_text(Text_Buf& text_buf); - boolean is_present() const; - boolean match_omit() const; + boolean is_present(boolean legacy = FALSE) const; + boolean match_omit(boolean legacy = FALSE) const; void set_param(Module_Param& param); + Module_Param* get_param(Module_Param_Name& param_name) const; #ifdef TITAN_RUNTIME_2 void valueofv(Base_Type* value) const { *(static_cast<EXTERNAL*>(value)) = valueof(); } void set_value(template_sel other_value) { *this = other_value; } void copy_value(const Base_Type* other_value) { *this = *(static_cast<const EXTERNAL*>(other_value)); } Base_Template* clone() const { return new EXTERNAL_template(*this); } const TTCN_Typedescriptor_t* get_descriptor() const { return &EXTERNAL_descr_; } - boolean matchv(const Base_Type* other_value) const { return match(*(static_cast<const EXTERNAL*>(other_value))); } - void log_matchv(const Base_Type* match_value) const { log_match(*(static_cast<const EXTERNAL*>(match_value))); } + boolean matchv(const Base_Type* other_value, boolean legacy) const { return match(*(static_cast<const EXTERNAL*>(other_value)), legacy); } + void log_matchv(const Base_Type* match_value, boolean legacy) const { log_match(*(static_cast<const EXTERNAL*>(match_value)), legacy); } #else - void check_restriction(template_res t_res, const char* t_name=NULL) const; + void check_restriction(template_res t_res, const char* t_name=NULL, boolean legacy = FALSE) const; #endif }; diff --git a/core/ASN_Null.cc b/core/ASN_Null.cc index ab3c9a2c8..36616c1a7 100644 --- a/core/ASN_Null.cc +++ b/core/ASN_Null.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -73,10 +73,22 @@ void ASN_NULL::log() const void ASN_NULL::set_param(Module_Param& param) { param.basic_check(Module_Param::BC_VALUE, "NULL value"); - if (param.get_type()!=Module_Param::MP_Asn_Null) param.type_error("NULL value"); + Module_Param_Ptr mp = ¶m; + if (param.get_type() == Module_Param::MP_Reference) { + mp = param.get_referenced_param(); + } + if (mp->get_type()!=Module_Param::MP_Asn_Null) param.type_error("NULL value"); bound_flag = TRUE; } +Module_Param* ASN_NULL::get_param(Module_Param_Name& /* param_name */) const +{ + if (!is_bound()) { + return new Module_Param_Unbound(); + } + return new Module_Param_Asn_Null(); +} + void ASN_NULL::encode_text(Text_Buf&) const { if (!bound_flag) @@ -422,7 +434,8 @@ ASN_NULL_template& ASN_NULL_template::operator= return *this; } -boolean ASN_NULL_template::match(asn_null_type other_value) const +boolean ASN_NULL_template::match(asn_null_type other_value, + boolean /* legacy */) const { switch (template_selection) { case OMIT_VALUE: @@ -444,7 +457,8 @@ boolean ASN_NULL_template::match(asn_null_type other_value) const return FALSE; } -boolean ASN_NULL_template::match(const ASN_NULL& other_value) const +boolean ASN_NULL_template::match(const ASN_NULL& other_value, + boolean /* legacy */) const { if (!other_value.is_bound()) return FALSE; return match(ASN_NULL_VALUE); @@ -502,7 +516,8 @@ void ASN_NULL_template::log() const log_ifpresent(); } -void ASN_NULL_template::log_match(const ASN_NULL& match_value) const +void ASN_NULL_template::log_match(const ASN_NULL& match_value, + boolean /* legacy */) const { if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){ TTCN_Logger::print_logmatch_buffer(); @@ -517,7 +532,11 @@ void ASN_NULL_template::log_match(const ASN_NULL& match_value) const void ASN_NULL_template::set_param(Module_Param& param) { param.basic_check(Module_Param::BC_TEMPLATE, "NULL template"); - switch (param.get_type()) { + Module_Param_Ptr mp = ¶m; + if (param.get_type() == Module_Param::MP_Reference) { + mp = param.get_referenced_param(); + } + switch (mp->get_type()) { case Module_Param::MP_Omit: *this = OMIT_VALUE; break; @@ -528,19 +547,62 @@ void ASN_NULL_template::set_param(Module_Param& param) { *this = ANY_OR_OMIT; break; case Module_Param::MP_List_Template: - case Module_Param::MP_ComplementList_Template: - set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, param.get_size()); - for (size_t i=0; i<param.get_size(); i++) { - list_item(i).set_param(*param.get_elem(i)); + case Module_Param::MP_ComplementList_Template: { + ASN_NULL_template temp; + temp.set_type(mp->get_type() == Module_Param::MP_List_Template ? + VALUE_LIST : COMPLEMENTED_LIST, mp->get_size()); + for (size_t i=0; i<mp->get_size(); i++) { + temp.list_item(i).set_param(*mp->get_elem(i)); } - break; + *this = temp; + break; } case Module_Param::MP_Asn_Null: *this = ASN_NULL_VALUE; break; default: param.type_error("NULL template"); } - is_ifpresent = param.get_ifpresent(); + is_ifpresent = param.get_ifpresent() || mp->get_ifpresent(); +} + +Module_Param* ASN_NULL_template::get_param(Module_Param_Name& param_name) const +{ + Module_Param* mp = NULL; + switch (template_selection) { + case UNINITIALIZED_TEMPLATE: + mp = new Module_Param_Unbound(); + break; + case OMIT_VALUE: + mp = new Module_Param_Omit(); + break; + case ANY_VALUE: + mp = new Module_Param_Any(); + break; + case ANY_OR_OMIT: + mp = new Module_Param_AnyOrNone(); + break; + case SPECIFIC_VALUE: + mp = new Module_Param_Asn_Null(); + break; + case VALUE_LIST: + case COMPLEMENTED_LIST: { + if (template_selection == VALUE_LIST) { + mp = new Module_Param_List_Template(); + } + else { + mp = new Module_Param_ComplementList_Template(); + } + for (size_t i = 0; i < value_list.n_values; ++i) { + mp->add_elem(value_list.list_value[i].get_param(param_name)); + } + break; } + default: + break; + } + if (is_ifpresent) { + mp->set_ifpresent(); + } + return mp; } void ASN_NULL_template::encode_text(Text_Buf& text_buf) const @@ -587,13 +649,13 @@ void ASN_NULL_template::decode_text(Text_Buf& text_buf) } } -boolean ASN_NULL_template::is_present() const +boolean ASN_NULL_template::is_present(boolean legacy /* = FALSE */) const { if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE; - return !match_omit(); + return !match_omit(legacy); } -boolean ASN_NULL_template::match_omit() const +boolean ASN_NULL_template::match_omit(boolean legacy /* = FALSE */) const { if (is_ifpresent) return TRUE; switch (template_selection) { @@ -602,10 +664,14 @@ boolean ASN_NULL_template::match_omit() const return TRUE; case VALUE_LIST: case COMPLEMENTED_LIST: - for (unsigned int i=0; i<value_list.n_values; i++) - if (value_list.list_value[i].match_omit()) - return template_selection==VALUE_LIST; - return template_selection==COMPLEMENTED_LIST; + if (legacy) { + // legacy behavior: 'omit' can appear in the value/complement list + for (unsigned int i=0; i<value_list.n_values; i++) + if (value_list.list_value[i].match_omit()) + return template_selection==VALUE_LIST; + return template_selection==COMPLEMENTED_LIST; + } + // else fall through default: return FALSE; } @@ -613,7 +679,8 @@ boolean ASN_NULL_template::match_omit() const } #ifndef TITAN_RUNTIME_2 -void ASN_NULL_template::check_restriction(template_res t_res, const char* t_name) const +void ASN_NULL_template::check_restriction(template_res t_res, const char* t_name, + boolean legacy /* = FALSE */) const { if (template_selection==UNINITIALIZED_TEMPLATE) return; switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) { @@ -625,7 +692,7 @@ void ASN_NULL_template::check_restriction(template_res t_res, const char* t_name template_selection==SPECIFIC_VALUE)) return; break; case TR_PRESENT: - if (!match_omit()) return; + if (!match_omit(legacy)) return; break; default: return; diff --git a/core/ASN_Null.hh b/core/ASN_Null.hh index dae43d0f8..f2ed45698 100644 --- a/core/ASN_Null.hh +++ b/core/ASN_Null.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -52,7 +52,8 @@ public: inline boolean is_present() const { return is_bound(); } #endif - void set_param(Module_Param& param); + void set_param(Module_Param& param); + Module_Param* get_param(Module_Param_Name& param_name) const; void encode_text(Text_Buf& text_buf) const; void decode_text(Text_Buf& text_buf); @@ -111,33 +112,34 @@ public: ASN_NULL_template& operator=(const OPTIONAL<ASN_NULL>& other_value); ASN_NULL_template& operator=(const ASN_NULL_template& other_value); - boolean match(asn_null_type other_value) const; - boolean match(const ASN_NULL& other_value) const; + boolean match(asn_null_type other_value, boolean legacy = FALSE) const; + boolean match(const ASN_NULL& other_value, boolean legacy = FALSE) const; asn_null_type valueof() const; void set_type(template_sel template_type, unsigned int list_length); ASN_NULL_template& list_item(unsigned int list_index); void log() const; - void log_match(const ASN_NULL& match_value) const; + void log_match(const ASN_NULL& match_value, boolean legacy = FALSE) const; void set_param(Module_Param& param); + Module_Param* get_param(Module_Param_Name& param_name) const; void encode_text(Text_Buf& text_buf) const; void decode_text(Text_Buf& text_buf); - boolean is_present() const; - boolean match_omit() const; + boolean is_present(boolean legacy = FALSE) const; + boolean match_omit(boolean legacy = FALSE) const; #ifdef TITAN_RUNTIME_2 void valueofv(Base_Type* value) const { *(static_cast<ASN_NULL*>(value)) = valueof(); } void set_value(template_sel other_value) { *this = other_value; } void copy_value(const Base_Type* other_value) { *this = *(static_cast<const ASN_NULL*>(other_value)); } Base_Template* clone() const { return new ASN_NULL_template(*this); } const TTCN_Typedescriptor_t* get_descriptor() const { return &ASN_NULL_descr_; } - boolean matchv(const Base_Type* other_value) const { return match(*(static_cast<const ASN_NULL*>(other_value))); } - void log_matchv(const Base_Type* match_value) const { log_match(*(static_cast<const ASN_NULL*>(match_value))); } + boolean matchv(const Base_Type* other_value, boolean legacy) const { return match(*(static_cast<const ASN_NULL*>(other_value)), legacy); } + void log_matchv(const Base_Type* match_value, boolean legacy) const { log_match(*(static_cast<const ASN_NULL*>(match_value)), legacy); } #else - void check_restriction(template_res t_res, const char* t_name=NULL) const; + void check_restriction(template_res t_res, const char* t_name=NULL, boolean legacy = FALSE) const; #endif }; diff --git a/core/Addfunc.cc b/core/Addfunc.cc index 8d913443e..7e08a64ee 100644 --- a/core/Addfunc.cc +++ b/core/Addfunc.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/core/Addfunc.hh b/core/Addfunc.hh index 9bfe0bf49..f3e10b681 100644 --- a/core/Addfunc.hh +++ b/core/Addfunc.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/core/Array.cc b/core/Array.cc index a3794c836..06966d9b2 100644 --- a/core/Array.cc +++ b/core/Array.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/core/Array.hh b/core/Array.hh index bb34bb2a3..7a96c9d40 100644 --- a/core/Array.hh +++ b/core/Array.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -211,6 +211,7 @@ public: int lengthof() const; void set_param(Module_Param& param); + Module_Param* get_param(Module_Param_Name& param_name) const; #ifdef TITAN_RUNTIME_2 boolean is_equal(const Base_Type* other_value) const { return *this == *(static_cast<const VALUE_ARRAY*>(other_value)); } @@ -373,22 +374,26 @@ void VALUE_ARRAY<T_type,array_size,index_offset>::set_param( return; } - param.basic_check(Module_Param::BC_VALUE, "array value"); - switch (param.get_type()) { + param.basic_check(Module_Param::BC_VALUE, "array value"); + Module_Param_Ptr mp = ¶m; + if (param.get_type() == Module_Param::MP_Reference) { + mp = param.get_referenced_param(); + } + switch (mp->get_type()) { case Module_Param::MP_Value_List: - if (param.get_size()!=array_size) { - param.error("The array value has incorrect number of elements: %lu was expected instead of %lu.", (unsigned long)param.get_size(), (unsigned long)array_size); + if (mp->get_size()!=array_size) { + param.error("The array value has incorrect number of elements: %lu was expected instead of %lu.", (unsigned long)mp->get_size(), (unsigned long)array_size); } - for (size_t i=0; i<param.get_size(); ++i) { - Module_Param* const curr = param.get_elem(i); + for (size_t i=0; i<mp->get_size(); ++i) { + Module_Param* const curr = mp->get_elem(i); if (curr->get_type()!=Module_Param::MP_NotUsed) { array_elements[i].set_param(*curr); } } break; case Module_Param::MP_Indexed_List: - for (size_t i=0; i<param.get_size(); ++i) { - Module_Param* const curr = param.get_elem(i); + for (size_t i=0; i<mp->get_size(); ++i) { + Module_Param* const curr = mp->get_elem(i); array_elements[curr->get_id()->get_index()].set_param(*curr); } break; @@ -397,6 +402,38 @@ void VALUE_ARRAY<T_type,array_size,index_offset>::set_param( } } +template <typename T_type, unsigned int array_size, int index_offset> +Module_Param* VALUE_ARRAY<T_type,array_size,index_offset>::get_param + (Module_Param_Name& param_name) const +{ + if (!is_bound()) { + return new Module_Param_Unbound(); + } + if (param_name.next_name()) { + // Haven't reached the end of the module parameter name + // => the name refers to one of the elements, not to the whole array + char* param_field = param_name.get_current_name(); + if (param_field[0] < '0' || param_field[0] > '9') { + TTCN_error("Unexpected record field name in module parameter reference, " + "expected a valid array index"); + } + unsigned int param_index = -1; + sscanf(param_field, "%u", ¶m_index); + if (param_index >= array_size) { + TTCN_error("Invalid array index: %u. The array only has %u elements.", param_index, array_size); + } + return array_elements[param_index].get_param(param_name); + } + Vector<Module_Param*> values; + for (int i = 0; i < array_size; ++i) { + values.push_back(array_elements[i].get_param(param_name)); + } + Module_Param_Value_List* mp = new Module_Param_Value_List(); + mp->add_list_with_implicit_ids(&values); + values.clear(); + return mp; +} + template <typename T_type, unsigned int array_size, int index_offset> void VALUE_ARRAY<T_type,array_size,index_offset>::encode_text (Text_Buf& text_buf) const @@ -622,10 +659,11 @@ public: private: static boolean match_function_specific( const Base_Type *value_ptr, int value_index, - const Restricted_Length_Template *template_ptr, int template_index); + const Restricted_Length_Template *template_ptr, int template_index, + boolean legacy); public: boolean match(const VALUE_ARRAY<T_value_type, array_size, index_offset>& - other_value) const; + other_value, boolean legacy = FALSE) const; boolean is_value() const; VALUE_ARRAY<T_value_type, array_size, index_offset> valueof() const; @@ -635,15 +673,16 @@ public: void log() const; void log_match(const VALUE_ARRAY<T_value_type, array_size, index_offset>& - match_value) const; + match_value, boolean legacy = FALSE) const; void set_param(Module_Param& param); + Module_Param* get_param(Module_Param_Name& param_name) const; void encode_text(Text_Buf& text_buf) const; void decode_text(Text_Buf& text_buf); - boolean is_present() const; - boolean match_omit() const; + boolean is_present(boolean legacy = FALSE) const; + boolean match_omit(boolean legacy = FALSE) const; #ifdef TITAN_RUNTIME_2 void valueofv(Base_Type* value) const { *(static_cast<VALUE_ARRAY<T_value_type, array_size, index_offset>*>(value)) = valueof(); } @@ -651,10 +690,10 @@ public: void copy_value(const Base_Type* other_value) { *this = *(static_cast<const VALUE_ARRAY<T_value_type, array_size, index_offset>*>(other_value)); } Base_Template* clone() const { return new TEMPLATE_ARRAY(*this); } const TTCN_Typedescriptor_t* get_descriptor() const { TTCN_error("Internal error: TEMPLATE_ARRAY<>::get_descriptor() called."); } - boolean matchv(const Base_Type* other_value) const { return match(*(static_cast<const VALUE_ARRAY<T_value_type, array_size, index_offset>*>(other_value))); } - void log_matchv(const Base_Type* match_value) const { log_match(*(static_cast<const VALUE_ARRAY<T_value_type, array_size, index_offset>*>(match_value))); } + boolean matchv(const Base_Type* other_value, boolean legacy) const { return match(*(static_cast<const VALUE_ARRAY<T_value_type, array_size, index_offset>*>(other_value)), legacy); } + void log_matchv(const Base_Type* match_value, boolean legacy) const { log_match(*(static_cast<const VALUE_ARRAY<T_value_type, array_size, index_offset>*>(match_value)), legacy); } #else - void check_restriction(template_res t_res, const char* t_name=NULL) const; + void check_restriction(template_res t_res, const char* t_name=NULL, boolean legacy = FALSE) const; #endif }; @@ -1212,14 +1251,14 @@ template <typename T_value_type, typename T_template_type, boolean TEMPLATE_ARRAY<T_value_type,T_template_type,array_size,index_offset>:: match_function_specific(const Base_Type *value_ptr, int value_index, const Restricted_Length_Template *template_ptr, - int template_index) + int template_index, boolean legacy) { if (value_index >= 0) return ((const TEMPLATE_ARRAY*)template_ptr)-> single_value.value_elements[template_index]-> match( ((const VALUE_ARRAY<T_value_type,array_size,index_offset>*)value_ptr) - ->array_element(value_index)); + ->array_element(value_index), legacy); else return ((const TEMPLATE_ARRAY*)template_ptr)-> single_value.value_elements[template_index]->is_any_or_omit(); @@ -1229,14 +1268,14 @@ template <typename T_value_type, typename T_template_type, unsigned int array_size, int index_offset> boolean TEMPLATE_ARRAY<T_value_type,T_template_type,array_size,index_offset>:: match(const VALUE_ARRAY<T_value_type, array_size, index_offset>& - other_value) const + other_value, boolean legacy) const { if (!match_length(array_size)) return FALSE; switch (template_selection) { case SPECIFIC_VALUE: return match_permutation_array(&other_value, array_size, this, single_value.n_elements, - match_function_specific); + match_function_specific, legacy); case OMIT_VALUE: return FALSE; case ANY_VALUE: @@ -1246,7 +1285,7 @@ match(const VALUE_ARRAY<T_value_type, array_size, index_offset>& case COMPLEMENTED_LIST: for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) - if (value_list.list_value[list_count].match(other_value)) + if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST; return template_selection == COMPLEMENTED_LIST; default: @@ -1368,10 +1407,10 @@ template <typename T_value_type, typename T_template_type, unsigned int array_size, int index_offset> void TEMPLATE_ARRAY<T_value_type,T_template_type,array_size,index_offset>:: log_match(const VALUE_ARRAY<T_value_type, array_size, index_offset>& - match_value) const + match_value, boolean legacy) const { if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){ - if(match(match_value)){ + if(match(match_value, legacy)){ TTCN_Logger::print_logmatch_buffer(); TTCN_Logger::log_event_str(" matched"); }else{ @@ -1381,10 +1420,10 @@ log_match(const VALUE_ARRAY<T_value_type, array_size, index_offset>& for (unsigned int elem_count = 0; elem_count < array_size; elem_count++) { if(!single_value.value_elements[elem_count]-> - match(match_value.array_element(elem_count))){ + match(match_value.array_element(elem_count), legacy)){ TTCN_Logger::log_logmatch_info("[%d]", elem_count); single_value.value_elements[elem_count]-> - log_match(match_value.array_element(elem_count)); + log_match(match_value.array_element(elem_count), legacy); TTCN_Logger::set_logmatch_buffer_len(previous_size); } } @@ -1404,7 +1443,8 @@ log_match(const VALUE_ARRAY<T_value_type, array_size, index_offset>& TTCN_Logger::log_event_str("{ "); for (unsigned int elem_count = 0; elem_count < array_size; elem_count++) { if (elem_count > 0) TTCN_Logger::log_event_str(", "); - single_value.value_elements[elem_count]->log_match(match_value.array_element(elem_count)); + single_value.value_elements[elem_count]->log_match( + match_value.array_element(elem_count), legacy); } TTCN_Logger::log_event_str(" }"); log_match_length(array_size); @@ -1412,7 +1452,7 @@ log_match(const VALUE_ARRAY<T_value_type, array_size, index_offset>& match_value.log(); TTCN_Logger::log_event_str(" with "); log(); - if (match(match_value)) TTCN_Logger::log_event_str(" matched"); + if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched"); else TTCN_Logger::log_event_str(" unmatched"); } } @@ -1439,7 +1479,13 @@ void TEMPLATE_ARRAY<T_value_type,T_template_type,array_size,index_offset>::set_p } param.basic_check(Module_Param::BC_TEMPLATE, "array template"); - switch (param.get_type()) { + + Module_Param_Ptr mp = ¶m; + if (param.get_type() == Module_Param::MP_Reference) { + mp = param.get_referenced_param(); + } + + switch (mp->get_type()) { case Module_Param::MP_Omit: *this = OMIT_VALUE; break; @@ -1450,31 +1496,98 @@ void TEMPLATE_ARRAY<T_value_type,T_template_type,array_size,index_offset>::set_p *this = ANY_OR_OMIT; break; case Module_Param::MP_List_Template: - case Module_Param::MP_ComplementList_Template: - set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, param.get_size()); - for (size_t i=0; i<param.get_size(); i++) { - list_item(i).set_param(*param.get_elem(i)); + case Module_Param::MP_ComplementList_Template: { + TEMPLATE_ARRAY<T_value_type,T_template_type,array_size,index_offset> temp; + temp.set_type(mp->get_type() == Module_Param::MP_List_Template ? + VALUE_LIST : COMPLEMENTED_LIST, mp->get_size()); + for (size_t i=0; i<mp->get_size(); i++) { + temp.list_item(i).set_param(*mp->get_elem(i)); } - break; + *this = temp; + break; } case Module_Param::MP_Value_List: - set_size(param.get_size()); - for (size_t i=0; i<param.get_size(); ++i) { - Module_Param* const curr = param.get_elem(i); + set_size(mp->get_size()); + for (size_t i=0; i<mp->get_size(); ++i) { + Module_Param* const curr = mp->get_elem(i); if (curr->get_type()!=Module_Param::MP_NotUsed) { (*this)[(int)i+index_offset].set_param(*curr); } } break; case Module_Param::MP_Indexed_List: - for (size_t i=0; i<param.get_size(); ++i) { - Module_Param* const curr = param.get_elem(i); + for (size_t i=0; i<mp->get_size(); ++i) { + Module_Param* const curr = mp->get_elem(i); (*this)[curr->get_id()->get_index()].set_param(*curr); } break; default: param.type_error("array template"); } - is_ifpresent = param.get_ifpresent(); + is_ifpresent = param.get_ifpresent() || mp->get_ifpresent(); +} + +template <typename T_value_type, typename T_template_type, + unsigned int array_size, int index_offset> +Module_Param* TEMPLATE_ARRAY<T_value_type,T_template_type,array_size,index_offset>:: + get_param(Module_Param_Name& param_name) const +{ + if (param_name.next_name()) { + // Haven't reached the end of the module parameter name + // => the name refers to one of the elements, not to the whole record of + char* param_field = param_name.get_current_name(); + if (param_field[0] < '0' || param_field[0] > '9') { + TTCN_error("Unexpected record field name in module parameter reference, " + "expected a valid array index"); + } + unsigned int param_index = -1; + sscanf(param_field, "%u", ¶m_index); + if (param_index >= array_size) { + TTCN_error("Invalid array index: %u. The array only has %u elements.", param_index, array_size); + } + return single_value.value_elements[param_index]->get_param(param_name); + } + Module_Param* mp = NULL; + switch (template_selection) { + case UNINITIALIZED_TEMPLATE: + mp = new Module_Param_Unbound(); + break; + case OMIT_VALUE: + mp = new Module_Param_Omit(); + break; + case ANY_VALUE: + mp = new Module_Param_Any(); + break; + case ANY_OR_OMIT: + mp = new Module_Param_AnyOrNone(); + break; + case SPECIFIC_VALUE: { + Vector<Module_Param*> values; + for (int i = 0; i < array_size; ++i) { + values.push_back(single_value.value_elements[i]->get_param(param_name)); + } + mp = new Module_Param_Value_List(); + mp->add_list_with_implicit_ids(&values); + values.clear(); + break; } + case VALUE_LIST: + case COMPLEMENTED_LIST: { + if (template_selection == VALUE_LIST) { + mp = new Module_Param_List_Template(); + } + else { + mp = new Module_Param_ComplementList_Template(); + } + for (size_t i = 0; i < value_list.n_values; ++i) { + mp->add_elem(value_list.list_value[i].get_param(param_name)); + } + break; } + default: + break; + } + if (is_ifpresent) { + mp->set_ifpresent(); + } + return mp; } template <typename T_value_type, typename T_template_type, @@ -1550,16 +1663,16 @@ decode_text(Text_Buf& text_buf) template <typename T_value_type, typename T_template_type, unsigned int array_size, int index_offset> boolean TEMPLATE_ARRAY<T_value_type,T_template_type,array_size,index_offset>:: -is_present() const +is_present(boolean legacy /* = FALSE */) const { if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE; - return !match_omit(); + return !match_omit(legacy); } template <typename T_value_type, typename T_template_type, unsigned int array_size, int index_offset> boolean TEMPLATE_ARRAY<T_value_type,T_template_type,array_size,index_offset>:: -match_omit() const +match_omit(boolean legacy /* = FALSE */) const { if (is_ifpresent) return TRUE; switch (template_selection) { @@ -1582,7 +1695,7 @@ match_omit() const template <typename T_value_type, typename T_template_type, unsigned int array_size, int index_offset> void TEMPLATE_ARRAY<T_value_type,T_template_type,array_size,index_offset>:: -check_restriction(template_res t_res, const char* t_name) const +check_restriction(template_res t_res, const char* t_name, boolean legacy /* = FALSE */) const { if (template_selection==UNINITIALIZED_TEMPLATE) return; switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) { @@ -1594,7 +1707,7 @@ check_restriction(template_res t_res, const char* t_name) const single_value.value_elements[i]->check_restriction(t_res, t_name ? t_name : "array"); return; case TR_PRESENT: - if (!match_omit()) return; + if (!match_omit(legacy)) return; break; default: return; @@ -1614,7 +1727,8 @@ answer recursive_permutation_match(const Base_Type *value_ptr, unsigned int template_size, unsigned int permutation_index, match_function_t match_function, - unsigned int& shift_size) + unsigned int& shift_size, + boolean legacy) { unsigned int nof_permutations = template_ptr->get_number_of_permutations(); if (permutation_index > nof_permutations) @@ -1649,7 +1763,7 @@ answer recursive_permutation_match(const Base_Type *value_ptr, template_ptr->get_permutation_start(permutation_index); if (permutation_begins || - match_function(value_ptr, -1, template_ptr, template_start_index)) + match_function(value_ptr, -1, template_ptr, template_start_index, legacy)) { unsigned int smallest_possible_size; unsigned int largest_possible_size; @@ -1671,7 +1785,7 @@ answer recursive_permutation_match(const Base_Type *value_ptr, for(unsigned int i = 0; i < permutation_size; i++) { if(match_function(value_ptr, -1, template_ptr, - i + template_start_index)) + i + template_start_index, legacy)) { has_asterisk = TRUE; }else{ @@ -1743,7 +1857,7 @@ answer recursive_permutation_match(const Base_Type *value_ptr, boolean found = match_set_of_internal(value_ptr, value_start_index, temp_size, template_ptr, template_start_index, permutation_size, - match_function, SUPERSET, &x, pair_list,old_temp_size); + match_function, SUPERSET, &x, pair_list, old_temp_size, legacy); if(found) { @@ -1799,7 +1913,7 @@ answer recursive_permutation_match(const Base_Type *value_ptr, template_size - permutation_size, permutation_index, - match_function, shift_size); + match_function, shift_size, legacy); }else{ //try with the next permutation result = recursive_permutation_match(value_ptr,value_start_index+i, @@ -1808,7 +1922,7 @@ answer recursive_permutation_match(const Base_Type *value_ptr, permutation_size, template_size - permutation_size, permutation_index + 1, - match_function, shift_size); + match_function, shift_size, legacy); } if(result == SUCCESS) @@ -1857,19 +1971,19 @@ answer recursive_permutation_match(const Base_Type *value_ptr, unsigned int i = 0; do{ good = match_function(value_ptr, value_start_index + i, - template_ptr, template_start_index + i); + template_ptr, template_start_index + i, legacy); i++; //bad stop: something can't be matched //half bad half good stop: the end of values is reached //good stop: matching on the full distance or till an asterisk }while(good && i < value_size && i < distance && !match_function(value_ptr, -1, template_ptr, - template_start_index + i)); + template_start_index + i, legacy)); //if we matched on the full distance or till an asterisk if(good && (i == distance || match_function(value_ptr, -1, template_ptr, - template_start_index + i))) + template_start_index + i, legacy))) { //reached the end of the templates if(i == template_size) @@ -1891,7 +2005,7 @@ answer recursive_permutation_match(const Base_Type *value_ptr, template_start_index + i, template_size - i, permutation_index, - match_function, shift_size); + match_function, shift_size, legacy); } }else{ //something bad happened, so we have to check how bad the situation is @@ -1910,7 +2024,7 @@ answer recursive_permutation_match(const Base_Type *value_ptr, do{ good = match_function(value_ptr, value_start_index + i + shift_size, - template_ptr, template_start_index + i); + template_ptr, template_start_index + i, legacy); shift_size++; }while(!good && i + shift_size < value_size); @@ -1933,7 +2047,8 @@ boolean match_permutation_array(const Base_Type *value_ptr, int value_size, const TEMPLATE_ARRAY<T_value_type,T_template_type,array_size,index_offset>* template_ptr, int template_size, - match_function_t match_function) + match_function_t match_function, + boolean legacy) { if (value_ptr == NULL || value_size < 0 || template_ptr == NULL || template_size < 0 || @@ -1944,18 +2059,18 @@ boolean match_permutation_array(const Base_Type *value_ptr, // use the simplified algorithm if the template does not contain permutation if (nof_permutations == 0) return match_array(value_ptr, value_size, - template_ptr, template_size, match_function); + template_ptr, template_size, match_function, legacy); // use 'set of' matching if all template elements are grouped into one // permutation if (nof_permutations == 1 && template_ptr->get_permutation_start(0) == 0 && template_ptr->get_permutation_end(0) == (unsigned int)(template_size - 1)) return match_set_of(value_ptr, value_size, template_ptr, template_size, - match_function); + match_function, legacy); unsigned int shift_size = 0; return recursive_permutation_match(value_ptr, 0, value_size, template_ptr, - 0, template_size, 0, match_function, shift_size) == SUCCESS; + 0, template_size, 0, match_function, shift_size, legacy) == SUCCESS; } #endif diff --git a/core/BER.cc b/core/BER.cc index a3a25dde4..bae774e0c 100644 --- a/core/BER.cc +++ b/core/BER.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/core/BER.hh b/core/BER.hh index bf318635c..2e70ef1be 100644 --- a/core/BER.hh +++ b/core/BER.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/core/Basetype.cc b/core/Basetype.cc index c64c2f767..37511128f 100644 --- a/core/Basetype.cc +++ b/core/Basetype.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -1140,26 +1140,26 @@ const TTCN_Typedescriptor_t ObjectDescriptor_descr_={"ObjectDescriptor", &ObjectDescriptor_ber_, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::GRAPHICSTRING}; const TTCN_Typedescriptor_t UTF8String_descr_={"UTF8String", &UTF8String_ber_, - NULL, NULL, &UTF8String_xer_, NULL, NULL, TTCN_Typedescriptor_t::UTF8STRING}; + NULL, NULL, &UTF8String_xer_, &UTF8String_json_, NULL, TTCN_Typedescriptor_t::UTF8STRING}; const TTCN_Typedescriptor_t ASN_ROID_descr_={"RELATIVE-OID", &ASN_ROID_ber_, NULL, NULL, &ASN_ROID_xer_, &ASN_ROID_json_, NULL, TTCN_Typedescriptor_t::ROID}; const TTCN_Typedescriptor_t NumericString_descr_={"NumericString", - &NumericString_ber_, NULL, NULL, &NumericString_xer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE}; + &NumericString_ber_, NULL, NULL, &NumericString_xer_, &NumericString_json_, NULL, TTCN_Typedescriptor_t::DONTCARE}; const TTCN_Typedescriptor_t PrintableString_descr_={"PrintableString", - &PrintableString_ber_, NULL, NULL, &PrintableString_xer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE}; + &PrintableString_ber_, NULL, NULL, &PrintableString_xer_, &PrintableString_json_, NULL, TTCN_Typedescriptor_t::DONTCARE}; const TTCN_Typedescriptor_t TeletexString_descr_={"TeletexString", - &TeletexString_ber_, NULL, NULL, &TeletexString_xer_, NULL, NULL, TTCN_Typedescriptor_t::TELETEXSTRING}; + &TeletexString_ber_, NULL, NULL, &TeletexString_xer_, &TeletexString_json_, NULL, TTCN_Typedescriptor_t::TELETEXSTRING}; const TTCN_Typedescriptor_t& T61String_descr_=TeletexString_descr_; const TTCN_Typedescriptor_t VideotexString_descr_={"VideotexString", - &VideotexString_ber_, NULL, NULL, &VideotexString_xer_, NULL, NULL, TTCN_Typedescriptor_t::VIDEOTEXSTRING}; + &VideotexString_ber_, NULL, NULL, &VideotexString_xer_, &VideotexString_json_, NULL, TTCN_Typedescriptor_t::VIDEOTEXSTRING}; const TTCN_Typedescriptor_t IA5String_descr_={"IA5String", &IA5String_ber_, - NULL, NULL, &IA5String_xer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE}; + NULL, NULL, &IA5String_xer_, &IA5String_json_, NULL, TTCN_Typedescriptor_t::DONTCARE}; const TTCN_Typedescriptor_t ASN_GeneralizedTime_descr_={"GeneralizedTime", &ASN_GeneralizedTime_ber_, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE}; @@ -1168,19 +1168,19 @@ const TTCN_Typedescriptor_t ASN_UTCTime_descr_={"UTCTime", &ASN_UTCTime_ber_, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE}; const TTCN_Typedescriptor_t GraphicString_descr_={"GraphicString", - &GraphicString_ber_, NULL, NULL, &GraphicString_xer_, NULL, NULL, TTCN_Typedescriptor_t::GRAPHICSTRING}; + &GraphicString_ber_, NULL, NULL, &GraphicString_xer_, &GraphicString_json_, NULL, TTCN_Typedescriptor_t::GRAPHICSTRING}; const TTCN_Typedescriptor_t VisibleString_descr_={"VisibleString", - &VisibleString_ber_, NULL, NULL, &VisibleString_xer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE}; + &VisibleString_ber_, NULL, NULL, &VisibleString_xer_, &VisibleString_json_, NULL, TTCN_Typedescriptor_t::DONTCARE}; const TTCN_Typedescriptor_t& ISO646String_descr_=VisibleString_descr_; const TTCN_Typedescriptor_t GeneralString_descr_={"GeneralString", - &GeneralString_ber_, NULL, NULL, &GeneralString_xer_, NULL, NULL, TTCN_Typedescriptor_t::GENERALSTRING}; + &GeneralString_ber_, NULL, NULL, &GeneralString_xer_, &GeneralString_json_, NULL, TTCN_Typedescriptor_t::GENERALSTRING}; const TTCN_Typedescriptor_t UniversalString_descr_={"UniversalString", - &UniversalString_ber_, NULL, NULL, &UniversalString_xer_, NULL, NULL, TTCN_Typedescriptor_t::UNIVERSALSTRING}; + &UniversalString_ber_, NULL, NULL, &UniversalString_xer_, &UniversalString_json_, NULL, TTCN_Typedescriptor_t::UNIVERSALSTRING}; const TTCN_Typedescriptor_t BMPString_descr_={"BMPString", &BMPString_ber_, - NULL, NULL, &BMPString_xer_, NULL, NULL, TTCN_Typedescriptor_t::BMPSTRING}; + NULL, NULL, &BMPString_xer_, &BMPString_json_, NULL, TTCN_Typedescriptor_t::BMPSTRING}; diff --git a/core/Basetype.hh b/core/Basetype.hh index 76323a4e0..9eb970c7d 100644 --- a/core/Basetype.hh +++ b/core/Basetype.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -27,6 +27,7 @@ struct XERdescriptor_t; struct TTCN_JSONdescriptor_t; class XmlReaderWrap; class Module_Param; +class Module_Param_Name; struct embed_values_enc_struct_t; struct embed_values_dec_struct_t; @@ -152,7 +153,16 @@ public: XERdescriptor_t const& xd, unsigned int flavor); #ifdef TITAN_RUNTIME_2 + /** Initialize this object (or one of its fields/elements) with a + * module parameter value. The module parameter may contain references to + * other module parameters or module parameter expressions, which are processed + * by this method to calculated the final result. + * @param param module parameter value (its ID specifies which object is to be set) */ virtual void set_param(Module_Param& param) = 0; + /** Create a module parameter value equivalent to this object (or one of its + * fields/elements) + * @param param_name module parameter ID, specifies which object to convert */ + virtual Module_Param* get_param(Module_Param_Name& param_name) const = 0; /** Whether the type is a sequence-of. * @return \c FALSE */ virtual boolean is_seof() const { return FALSE; } @@ -737,6 +747,7 @@ public: int lengthof() const; virtual void log() const; virtual void set_param(Module_Param& param); + virtual Module_Param* get_param(Module_Param_Name& param_name) const; virtual void set_implicit_omit(); virtual void encode_text(Text_Buf& text_buf) const; virtual void decode_text(Text_Buf& text_buf); @@ -886,6 +897,7 @@ public: virtual void clean_up(); virtual void log() const; virtual void set_param(Module_Param& param); + virtual Module_Param* get_param(Module_Param_Name& param_name) const; virtual void set_implicit_omit(); int size_of() const; @@ -967,7 +979,8 @@ public: virtual boolean is_bound() const { return bound_flag; } virtual void clean_up() { bound_flag = FALSE; } virtual void log() const; - virtual void set_param(Module_Param& param); + virtual void set_param(Module_Param& param); + virtual Module_Param* get_param(Module_Param_Name& param_name) const; int size_of() const { return 0; } virtual void encode_text(Text_Buf& text_buf) const; diff --git a/core/Bitstring.cc b/core/Bitstring.cc index d55b1fa8e..a178fb2d9 100644 --- a/core/Bitstring.cc +++ b/core/Bitstring.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -542,26 +542,63 @@ void BITSTRING::log() const void BITSTRING::set_param(Module_Param& param) { param.basic_check(Module_Param::BC_VALUE|Module_Param::BC_LIST, "bitstring value"); - if (param.get_type()!=Module_Param::MP_Bitstring) param.type_error("bitstring value"); - switch (param.get_operation_type()) { - case Module_Param::OT_ASSIGN: - clean_up(); - init_struct(param.get_string_size()); - memcpy(val_ptr->bits_ptr, param.get_string_data(), (val_ptr->n_bits + 7) / 8); - clear_unused_bits(); + Module_Param_Ptr mp = ¶m; + if (param.get_type() == Module_Param::MP_Reference) { + mp = param.get_referenced_param(); + } + switch (mp->get_type()) { + case Module_Param::MP_Bitstring: + switch (param.get_operation_type()) { + case Module_Param::OT_ASSIGN: + clean_up(); + init_struct(mp->get_string_size()); + memcpy(val_ptr->bits_ptr, mp->get_string_data(), (val_ptr->n_bits + 7) / 8); + clear_unused_bits(); + break; + case Module_Param::OT_CONCAT: + if (is_bound()) { + *this = *this + BITSTRING(mp->get_string_size(), (unsigned char*)mp->get_string_data()); + } else { + *this = BITSTRING(mp->get_string_size(), (unsigned char*)mp->get_string_data()); + } + break; + default: + TTCN_error("Internal error: BITSTRING::set_param()"); + } break; - case Module_Param::OT_CONCAT: - if (is_bound()) { - *this = *this + BITSTRING(param.get_string_size(), (unsigned char*)param.get_string_data()); - } else { - *this = BITSTRING(param.get_string_size(), (unsigned char*)param.get_string_data()); + case Module_Param::MP_Expression: + if (mp->get_expr_type() == Module_Param::EXPR_CONCATENATE) { + BITSTRING operand1, operand2; + operand1.set_param(*mp->get_operand1()); + operand2.set_param(*mp->get_operand2()); + if (param.get_operation_type() == Module_Param::OT_CONCAT) { + *this = *this + operand1 + operand2; + } + else { + *this = operand1 + operand2; + } + } + else { + param.expr_type_error("a bitstring"); } break; default: - TTCN_error("Internal error: BITSTRING::set_param()"); + param.type_error("bitstring value"); + break; } } +Module_Param* BITSTRING::get_param(Module_Param_Name& /* param_name */) const +{ + if (!is_bound()) { + return new Module_Param_Unbound(); + } + int n_bytes = (val_ptr->n_bits + 7) / 8; + unsigned char* val_cpy = (unsigned char *)Malloc(n_bytes); + memcpy(val_cpy, val_ptr->bits_ptr, n_bytes); + return new Module_Param_Bitstring(val_ptr->n_bits, val_cpy); +} + void BITSTRING::encode_text(Text_Buf& text_buf) const { must_bound("Text encoder: Encoding an unbound bitstring value."); @@ -1619,7 +1656,8 @@ const BITSTRING_ELEMENT BITSTRING_template::operator[](const INTEGER& index_valu return (*this)[(int)index_value]; } -boolean BITSTRING_template::match(const BITSTRING& other_value) const +boolean BITSTRING_template::match(const BITSTRING& other_value, + boolean /* legacy */) const { if (!other_value.is_bound()) return FALSE; if (!match_length(other_value.val_ptr->n_bits)) return FALSE; @@ -1768,7 +1806,8 @@ void BITSTRING_template::log() const log_ifpresent(); } -void BITSTRING_template::log_match(const BITSTRING& match_value) const +void BITSTRING_template::log_match(const BITSTRING& match_value, + boolean /* legacy */) const { if (TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity() && TTCN_Logger::get_logmatch_buffer_len() != 0) { @@ -1784,7 +1823,11 @@ void BITSTRING_template::log_match(const BITSTRING& match_value) const void BITSTRING_template::set_param(Module_Param& param) { param.basic_check(Module_Param::BC_TEMPLATE|Module_Param::BC_LIST, "bitstring template"); - switch (param.get_type()) { + Module_Param_Ptr mp = ¶m; + if (param.get_type() == Module_Param::MP_Reference) { + mp = param.get_referenced_param(); + } + switch (mp->get_type()) { case Module_Param::MP_Omit: *this = OMIT_VALUE; break; @@ -1795,23 +1838,88 @@ void BITSTRING_template::set_param(Module_Param& param) { *this = ANY_OR_OMIT; break; case Module_Param::MP_List_Template: - case Module_Param::MP_ComplementList_Template: - set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, param.get_size()); - for (size_t i=0; i<param.get_size(); i++) { - list_item(i).set_param(*param.get_elem(i)); + case Module_Param::MP_ComplementList_Template: { + BITSTRING_template temp; + temp.set_type(mp->get_type() == Module_Param::MP_List_Template ? + VALUE_LIST : COMPLEMENTED_LIST, mp->get_size()); + for (size_t i=0; i<mp->get_size(); i++) { + temp.list_item(i).set_param(*mp->get_elem(i)); } - break; + *this = temp; + break; } case Module_Param::MP_Bitstring: - *this = BITSTRING(param.get_string_size(), (unsigned char*)param.get_string_data()); + *this = BITSTRING(mp->get_string_size(), (unsigned char*)mp->get_string_data()); break; case Module_Param::MP_Bitstring_Template: - *this = BITSTRING_template(param.get_string_size(), (unsigned char*)param.get_string_data()); + *this = BITSTRING_template(mp->get_string_size(), (unsigned char*)mp->get_string_data()); + break; + case Module_Param::MP_Expression: + if (mp->get_expr_type() == Module_Param::EXPR_CONCATENATE) { + BITSTRING operand1, operand2; + operand1.set_param(*mp->get_operand1()); + operand2.set_param(*mp->get_operand2()); + *this = operand1 + operand2; + } + else { + param.expr_type_error("a bitstring"); + } break; default: param.type_error("bitstring template"); } - is_ifpresent = param.get_ifpresent(); - set_length_range(param); + is_ifpresent = param.get_ifpresent() || mp->get_ifpresent(); + if (param.get_length_restriction() != NULL) { + set_length_range(param); + } + else { + set_length_range(*mp); + } +} + +Module_Param* BITSTRING_template::get_param(Module_Param_Name& param_name) const +{ + Module_Param* mp = NULL; + switch (template_selection) { + case UNINITIALIZED_TEMPLATE: + mp = new Module_Param_Unbound(); + break; + case OMIT_VALUE: + mp = new Module_Param_Omit(); + break; + case ANY_VALUE: + mp = new Module_Param_Any(); + break; + case ANY_OR_OMIT: + mp = new Module_Param_AnyOrNone(); + break; + case SPECIFIC_VALUE: + mp = single_value.get_param(param_name); + break; + case VALUE_LIST: + case COMPLEMENTED_LIST: { + if (template_selection == VALUE_LIST) { + mp = new Module_Param_List_Template(); + } + else { + mp = new Module_Param_ComplementList_Template(); + } + for (size_t i = 0; i < value_list.n_values; ++i) { + mp->add_elem(value_list.list_value[i].get_param(param_name)); + } + break; } + case STRING_PATTERN: { + unsigned char* val_cpy = (unsigned char*)Malloc(pattern_value->n_elements); + memcpy(val_cpy, pattern_value->elements_ptr, pattern_value->n_elements); + mp = new Module_Param_Bitstring_Template(pattern_value->n_elements, val_cpy); + break; } + default: + break; + } + if (is_ifpresent) { + mp->set_ifpresent(); + } + mp->set_length_restriction(get_length_range()); + return mp; } void BITSTRING_template::encode_text(Text_Buf& text_buf) const @@ -1874,13 +1982,13 @@ void BITSTRING_template::decode_text(Text_Buf& text_buf) } } -boolean BITSTRING_template::is_present() const +boolean BITSTRING_template::is_present(boolean legacy /* = FALSE */) const { if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE; - return !match_omit(); + return !match_omit(legacy); } -boolean BITSTRING_template::match_omit() const +boolean BITSTRING_template::match_omit(boolean legacy /* = FALSE */) const { if (is_ifpresent) return TRUE; switch (template_selection) { @@ -1889,10 +1997,14 @@ boolean BITSTRING_template::match_omit() const return TRUE; case VALUE_LIST: case COMPLEMENTED_LIST: - for (unsigned int i=0; i<value_list.n_values; i++) - if (value_list.list_value[i].match_omit()) - return template_selection==VALUE_LIST; - return template_selection==COMPLEMENTED_LIST; + if (legacy) { + // legacy behavior: 'omit' can appear in the value/complement list + for (unsigned int i=0; i<value_list.n_values; i++) + if (value_list.list_value[i].match_omit()) + return template_selection==VALUE_LIST; + return template_selection==COMPLEMENTED_LIST; + } + // else fall through default: return FALSE; } @@ -1900,7 +2012,8 @@ boolean BITSTRING_template::match_omit() const } #ifndef TITAN_RUNTIME_2 -void BITSTRING_template::check_restriction(template_res t_res, const char* t_name) const +void BITSTRING_template::check_restriction(template_res t_res, const char* t_name, + boolean legacy /* = FALSE */) const { if (template_selection==UNINITIALIZED_TEMPLATE) return; switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) { @@ -1912,7 +2025,7 @@ void BITSTRING_template::check_restriction(template_res t_res, const char* t_nam template_selection==SPECIFIC_VALUE)) return; break; case TR_PRESENT: - if (!match_omit()) return; + if (!match_omit(legacy)) return; break; default: return; diff --git a/core/Bitstring.hh b/core/Bitstring.hh index f10616150..b890333a9 100644 --- a/core/Bitstring.hh +++ b/core/Bitstring.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -135,6 +135,8 @@ public: #endif void set_param(Module_Param& param); + Module_Param* get_param(Module_Param_Name& param_name) const; + void encode_text(Text_Buf& text_buf) const; void decode_text(Text_Buf& text_buf); @@ -269,7 +271,7 @@ public: const BITSTRING_ELEMENT operator[](int index_value) const; const BITSTRING_ELEMENT operator[](const INTEGER& index_value) const; - boolean match(const BITSTRING& other_value) const; + boolean match(const BITSTRING& other_value, boolean legacy = FALSE) const; const BITSTRING& valueof() const; int lengthof() const; @@ -278,25 +280,26 @@ public: BITSTRING_template& list_item(unsigned int list_index); void log() const; - void log_match(const BITSTRING& match_value) const; + void log_match(const BITSTRING& match_value, boolean legacy = FALSE) const; void set_param(Module_Param& param); + Module_Param* get_param(Module_Param_Name& param_name) const; void encode_text(Text_Buf& text_buf) const; void decode_text(Text_Buf& text_buf); - boolean is_present() const; - boolean match_omit() const; + boolean is_present(boolean legacy = FALSE) const; + boolean match_omit(boolean legacy = FALSE) const; #ifdef TITAN_RUNTIME_2 void valueofv(Base_Type* value) const { *(static_cast<BITSTRING*>(value)) = valueof(); } void set_value(template_sel other_value) { *this = other_value; } void copy_value(const Base_Type* other_value) { *this = *(static_cast<const BITSTRING*>(other_value)); } Base_Template* clone() const { return new BITSTRING_template(*this); } const TTCN_Typedescriptor_t* get_descriptor() const { return &BITSTRING_descr_; } - boolean matchv(const Base_Type* other_value) const { return match(*(static_cast<const BITSTRING*>(other_value))); } - void log_matchv(const Base_Type* match_value) const { log_match(*(static_cast<const BITSTRING*>(match_value))); } + boolean matchv(const Base_Type* other_value, boolean legacy) const { return match(*(static_cast<const BITSTRING*>(other_value)), legacy); } + void log_matchv(const Base_Type* match_value, boolean legacy) const { log_match(*(static_cast<const BITSTRING*>(match_value)), legacy); } #else - void check_restriction(template_res t_res, const char* t_name=NULL) const; + void check_restriction(template_res t_res, const char* t_name=NULL, boolean legacy = FALSE) const; #endif }; diff --git a/core/Boolean.cc b/core/Boolean.cc index 210ff8576..179643c7a 100644 --- a/core/Boolean.cc +++ b/core/Boolean.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -163,9 +163,21 @@ void BOOLEAN::decode_text(Text_Buf& text_buf) void BOOLEAN::set_param(Module_Param& param) { param.basic_check(Module_Param::BC_VALUE, "boolean value"); - if (param.get_type()!=Module_Param::MP_Boolean) param.type_error("boolean value"); + Module_Param_Ptr mp = ¶m; + if (param.get_type() == Module_Param::MP_Reference) { + mp = param.get_referenced_param(); + } + if (mp->get_type()!=Module_Param::MP_Boolean) param.type_error("boolean value"); bound_flag = TRUE; - boolean_value = param.get_boolean(); + boolean_value = mp->get_boolean(); +} + +Module_Param* BOOLEAN::get_param(Module_Param_Name& /* param_name */) const +{ + if (!is_bound()) { + return new Module_Param_Unbound(); + } + return new Module_Param_Boolean(boolean_value); } void BOOLEAN::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, @@ -903,7 +915,8 @@ BOOLEAN_template& BOOLEAN_template::operator= return *this; } -boolean BOOLEAN_template::match(boolean other_value) const +boolean BOOLEAN_template::match(boolean other_value, + boolean /* legacy */) const { switch (template_selection) { case SPECIFIC_VALUE: @@ -925,7 +938,8 @@ boolean BOOLEAN_template::match(boolean other_value) const return FALSE; } -boolean BOOLEAN_template::match(const BOOLEAN& other_value) const +boolean BOOLEAN_template::match(const BOOLEAN& other_value, + boolean /* legacy */) const { if (!other_value.is_bound()) return FALSE; return match(other_value.boolean_value); @@ -984,7 +998,8 @@ void BOOLEAN_template::log() const log_ifpresent(); } -void BOOLEAN_template::log_match(const BOOLEAN& match_value) const +void BOOLEAN_template::log_match(const BOOLEAN& match_value, + boolean /* legacy */) const { if (TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity() && TTCN_Logger::get_logmatch_buffer_len() != 0) { @@ -1000,7 +1015,11 @@ void BOOLEAN_template::log_match(const BOOLEAN& match_value) const void BOOLEAN_template::set_param(Module_Param& param) { param.basic_check(Module_Param::BC_TEMPLATE, "boolean template"); - switch (param.get_type()) { + Module_Param_Ptr mp = ¶m; + if (param.get_type() == Module_Param::MP_Reference) { + mp = param.get_referenced_param(); + } + switch (mp->get_type()) { case Module_Param::MP_Omit: *this = OMIT_VALUE; break; @@ -1011,19 +1030,62 @@ void BOOLEAN_template::set_param(Module_Param& param) { *this = ANY_OR_OMIT; break; case Module_Param::MP_List_Template: - case Module_Param::MP_ComplementList_Template: - set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, param.get_size()); - for (size_t i=0; i<param.get_size(); i++) { - list_item(i).set_param(*param.get_elem(i)); + case Module_Param::MP_ComplementList_Template: { + BOOLEAN_template temp; + temp.set_type(mp->get_type() == Module_Param::MP_List_Template ? + VALUE_LIST : COMPLEMENTED_LIST, mp->get_size()); + for (size_t i=0; i<mp->get_size(); i++) { + temp.list_item(i).set_param(*mp->get_elem(i)); } - break; + *this = temp; + break; } case Module_Param::MP_Boolean: - *this = param.get_boolean(); + *this = mp->get_boolean(); break; default: param.type_error("boolean template"); } - is_ifpresent = param.get_ifpresent(); + is_ifpresent = param.get_ifpresent() || mp->get_ifpresent(); +} + +Module_Param* BOOLEAN_template::get_param(Module_Param_Name& param_name) const +{ + Module_Param* mp = NULL; + switch (template_selection) { + case UNINITIALIZED_TEMPLATE: + mp = new Module_Param_Unbound(); + break; + case OMIT_VALUE: + mp = new Module_Param_Omit(); + break; + case ANY_VALUE: + mp = new Module_Param_Any(); + break; + case ANY_OR_OMIT: + mp = new Module_Param_AnyOrNone(); + break; + case SPECIFIC_VALUE: + mp = new Module_Param_Boolean(single_value); + break; + case VALUE_LIST: + case COMPLEMENTED_LIST: { + if (template_selection == VALUE_LIST) { + mp = new Module_Param_List_Template(); + } + else { + mp = new Module_Param_ComplementList_Template(); + } + for (size_t i = 0; i < value_list.n_values; ++i) { + mp->add_elem(value_list.list_value[i].get_param(param_name)); + } + break; } + default: + break; + } + if (is_ifpresent) { + mp->set_ifpresent(); + } + return mp; } void BOOLEAN_template::encode_text(Text_Buf& text_buf) const @@ -1085,13 +1147,13 @@ void BOOLEAN_template::decode_text(Text_Buf& text_buf) } } -boolean BOOLEAN_template::is_present() const +boolean BOOLEAN_template::is_present(boolean legacy /* = FALSE */) const { if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE; - return !match_omit(); + return !match_omit(legacy); } -boolean BOOLEAN_template::match_omit() const +boolean BOOLEAN_template::match_omit(boolean legacy /* = FALSE */) const { if (is_ifpresent) return TRUE; switch (template_selection) { @@ -1100,10 +1162,14 @@ boolean BOOLEAN_template::match_omit() const return TRUE; case VALUE_LIST: case COMPLEMENTED_LIST: - for (unsigned int i=0; i<value_list.n_values; i++) - if (value_list.list_value[i].match_omit()) - return template_selection==VALUE_LIST; - return template_selection==COMPLEMENTED_LIST; + if (legacy) { + // legacy behavior: 'omit' can appear in the value/complement list + for (unsigned int i=0; i<value_list.n_values; i++) + if (value_list.list_value[i].match_omit()) + return template_selection==VALUE_LIST; + return template_selection==COMPLEMENTED_LIST; + } + // else fall through default: return FALSE; } @@ -1111,7 +1177,8 @@ boolean BOOLEAN_template::match_omit() const } #ifndef TITAN_RUNTIME_2 -void BOOLEAN_template::check_restriction(template_res t_res, const char* t_name) const +void BOOLEAN_template::check_restriction(template_res t_res, const char* t_name, + boolean legacy /* = FALSE */) const { if (template_selection==UNINITIALIZED_TEMPLATE) return; switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) { @@ -1123,7 +1190,7 @@ void BOOLEAN_template::check_restriction(template_res t_res, const char* t_name) template_selection==SPECIFIC_VALUE)) return; break; case TR_PRESENT: - if (!match_omit()) return; + if (!match_omit(legacy)) return; break; default: return; diff --git a/core/Boolean.hh b/core/Boolean.hh index 0807ea524..2a7a60e66 100644 --- a/core/Boolean.hh +++ b/core/Boolean.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -71,6 +71,7 @@ public: void log() const; void set_param(Module_Param& param); + Module_Param* get_param(Module_Param_Name& param_name) const; void encode_text(Text_Buf& text_buf) const; void decode_text(Text_Buf& text_buf); @@ -156,33 +157,34 @@ public: BOOLEAN_template& operator=(const OPTIONAL<BOOLEAN>& other_value); BOOLEAN_template& operator=(const BOOLEAN_template& other_value); - boolean match(boolean other_value) const; - boolean match(const BOOLEAN& other_value) const; + boolean match(boolean other_value, boolean legacy = FALSE) const; + boolean match(const BOOLEAN& other_value, boolean legacy = FALSE) const; boolean valueof() const; void set_type(template_sel template_type, unsigned int list_length); BOOLEAN_template& list_item(unsigned int list_index); void log() const; - void log_match(const BOOLEAN& match_value) const; + void log_match(const BOOLEAN& match_value, boolean legacy = FALSE) const; void set_param(Module_Param& param); + Module_Param* get_param(Module_Param_Name& param_name) const; void encode_text(Text_Buf& text_buf) const; void decode_text(Text_Buf& text_buf); - boolean is_present() const; - boolean match_omit() const; + boolean is_present(boolean legacy = FALSE) const; + boolean match_omit(boolean legacy = FALSE) const; #ifdef TITAN_RUNTIME_2 void valueofv(Base_Type* value) const { *(static_cast<BOOLEAN*>(value)) = valueof(); } void set_value(template_sel other_value) { *this = other_value; } void copy_value(const Base_Type* other_value) { *this = *(static_cast<const BOOLEAN*>(other_value)); } Base_Template* clone() const { return new BOOLEAN_template(*this); } const TTCN_Typedescriptor_t* get_descriptor() const { return &BOOLEAN_descr_; } - boolean matchv(const Base_Type* other_value) const { return match(*(static_cast<const BOOLEAN*>(other_value))); } - void log_matchv(const Base_Type* match_value) const { log_match(*(static_cast<const BOOLEAN*>(match_value))); } + boolean matchv(const Base_Type* other_value, boolean legacy) const { return match(*(static_cast<const BOOLEAN*>(other_value)), legacy); } + void log_matchv(const Base_Type* match_value, boolean legacy) const { log_match(*(static_cast<const BOOLEAN*>(match_value)), legacy); } #else - void check_restriction(template_res t_res, const char* t_name=NULL) const; + void check_restriction(template_res t_res, const char* t_name=NULL, boolean legacy = FALSE) const; #endif }; diff --git a/core/Charstring.cc b/core/Charstring.cc index 180fc91fd..5171a656b 100644 --- a/core/Charstring.cc +++ b/core/Charstring.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -626,10 +626,14 @@ void CHARSTRING::log() const } } -void CHARSTRING::set_param(Module_Param& param) { +boolean CHARSTRING::set_param_internal(Module_Param& param, boolean allow_pattern) { + boolean is_pattern = FALSE; param.basic_check(Module_Param::BC_VALUE|Module_Param::BC_LIST, "charstring value"); - - switch (param.get_type()) { + Module_Param_Ptr mp = ¶m; + if (param.get_type() == Module_Param::MP_Reference) { + mp = param.get_referenced_param(); + } + switch (mp->get_type()) { case Module_Param::MP_Universal_Charstring: case Module_Param::MP_Charstring: switch (param.get_operation_type()) { @@ -639,7 +643,7 @@ void CHARSTRING::set_param(Module_Param& param) { case Module_Param::OT_CONCAT: { // The universal charstring will decode the string value if it is UTF-8 encoded UNIVERSAL_CHARSTRING ucs; - ucs.set_param(param); + ucs.set_param(*mp); if (ucs.charstring) { // No special characters were found if (is_bound()) { @@ -671,9 +675,47 @@ void CHARSTRING::set_param(Module_Param& param) { TTCN_error("Internal error: CHARSTRING::set_param()"); } break; + case Module_Param::MP_Expression: + if (mp->get_expr_type() == Module_Param::EXPR_CONCATENATE) { + // only allow string patterns for the first operand + CHARSTRING operand1, operand2; + is_pattern = operand1.set_param_internal(*mp->get_operand1(), allow_pattern); + operand2.set_param(*mp->get_operand2()); + if (param.get_operation_type() == Module_Param::OT_CONCAT) { + *this = *this + operand1 + operand2; + } + else { + *this = operand1 + operand2; + } + } + else { + param.expr_type_error("a charstring"); + } + break; + case Module_Param::MP_Pattern: + if (allow_pattern) { + *this = CHARSTRING(mp->get_pattern()); + is_pattern = TRUE; + break; + } + // else fall through default: param.type_error("charstring value"); + break; } + return is_pattern; +} + +void CHARSTRING::set_param(Module_Param& param) { + set_param_internal(param, FALSE); +} + +Module_Param* CHARSTRING::get_param(Module_Param_Name& /* param_name */) const +{ + if (!is_bound()) { + return new Module_Param_Unbound(); + } + return new Module_Param_Charstring(val_ptr->n_chars, mcopystr(val_ptr->chars_ptr)); } void CHARSTRING::encode_text(Text_Buf& text_buf) const @@ -2124,7 +2166,8 @@ const CHARSTRING_ELEMENT CHARSTRING_template::operator[](const INTEGER& index_va return (*this)[(int)index_value]; } -boolean CHARSTRING_template::match(const CHARSTRING& other_value) const +boolean CHARSTRING_template::match(const CHARSTRING& other_value, + boolean /* legacy */) const { if (!other_value.is_bound()) return FALSE; int value_length = other_value.lengthof(); @@ -2504,7 +2547,8 @@ void CHARSTRING_template::log() const log_ifpresent(); } -void CHARSTRING_template::log_match(const CHARSTRING& match_value) const +void CHARSTRING_template::log_match(const CHARSTRING& match_value, + boolean /* legacy */) const { if (TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity() && TTCN_Logger::get_logmatch_buffer_len() != 0) { @@ -2520,7 +2564,11 @@ void CHARSTRING_template::log_match(const CHARSTRING& match_value) const void CHARSTRING_template::set_param(Module_Param& param) { param.basic_check(Module_Param::BC_TEMPLATE|Module_Param::BC_LIST, "charstring template"); - switch (param.get_type()) { + Module_Param_Ptr mp = ¶m; + if (param.get_type() == Module_Param::MP_Reference) { + mp = param.get_referenced_param(); + } + switch (mp->get_type()) { case Module_Param::MP_Omit: *this = OMIT_VALUE; break; @@ -2531,18 +2579,21 @@ void CHARSTRING_template::set_param(Module_Param& param) { *this = ANY_OR_OMIT; break; case Module_Param::MP_List_Template: - case Module_Param::MP_ComplementList_Template: - set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, param.get_size()); - for (size_t i=0; i<param.get_size(); i++) { - list_item(i).set_param(*param.get_elem(i)); + case Module_Param::MP_ComplementList_Template: { + CHARSTRING_template temp; + temp.set_type(mp->get_type() == Module_Param::MP_List_Template ? + VALUE_LIST : COMPLEMENTED_LIST, mp->get_size()); + for (size_t i=0; i<mp->get_size(); i++) { + temp.list_item(i).set_param(*mp->get_elem(i)); } - break; + *this = temp; + break; } case Module_Param::MP_Charstring: - *this = CHARSTRING(param.get_string_size(), (char*)param.get_string_data()); + *this = CHARSTRING(mp->get_string_size(), (char*)mp->get_string_data()); break; case Module_Param::MP_StringRange: { - universal_char lower_uchar = param.get_lower_uchar(); - universal_char upper_uchar = param.get_upper_uchar(); + universal_char lower_uchar = mp->get_lower_uchar(); + universal_char upper_uchar = mp->get_upper_uchar(); if (!lower_uchar.is_char()) param.error("Lower bound of char range cannot be a multiple-byte character"); if (!upper_uchar.is_char()) param.error("Upper bound of char range cannot be a multiple-byte character"); clean_up(); @@ -2554,15 +2605,90 @@ void CHARSTRING_template::set_param(Module_Param& param) { } break; case Module_Param::MP_Pattern: clean_up(); - single_value = CHARSTRING(param.get_pattern()); + single_value = CHARSTRING(mp->get_pattern()); pattern_value.regexp_init = FALSE; set_selection(STRING_PATTERN); break; + case Module_Param::MP_Expression: + if (mp->get_expr_type() == Module_Param::EXPR_CONCATENATE) { + // only allow string patterns for the first operand + CHARSTRING operand1, operand2, result; + boolean is_pattern = operand1.set_param_internal(*mp->get_operand1(), TRUE); + operand2.set_param(*mp->get_operand2()); + result = operand1 + operand2; + if (is_pattern) { + clean_up(); + single_value = result; + pattern_value.regexp_init = FALSE; + set_selection(STRING_PATTERN); + } + else { + *this = result; + } + } + else { + param.expr_type_error("a charstring"); + } + break; default: param.type_error("charstring template"); } - is_ifpresent = param.get_ifpresent(); - set_length_range(param); + is_ifpresent = param.get_ifpresent() || mp->get_ifpresent(); + if (param.get_length_restriction() != NULL) { + set_length_range(param); + } + else { + set_length_range(*mp); + } +} + +Module_Param* CHARSTRING_template::get_param(Module_Param_Name& param_name) const +{ + Module_Param* mp = NULL; + switch (template_selection) { + case UNINITIALIZED_TEMPLATE: + mp = new Module_Param_Unbound(); + break; + case OMIT_VALUE: + mp = new Module_Param_Omit(); + break; + case ANY_VALUE: + mp = new Module_Param_Any(); + break; + case ANY_OR_OMIT: + mp = new Module_Param_AnyOrNone(); + break; + case SPECIFIC_VALUE: + mp = single_value.get_param(param_name); + break; + case VALUE_LIST: + case COMPLEMENTED_LIST: { + if (template_selection == VALUE_LIST) { + mp = new Module_Param_List_Template(); + } + else { + mp = new Module_Param_ComplementList_Template(); + } + for (size_t i = 0; i < value_list.n_values; ++i) { + mp->add_elem(value_list.list_value[i].get_param(param_name)); + } + break; } + case VALUE_RANGE: { + universal_char lower_bound = { 0, 0, 0, (unsigned char)value_range.min_value }; + universal_char upper_bound = { 0, 0, 0, (unsigned char)value_range.max_value }; + mp = new Module_Param_StringRange(lower_bound, upper_bound); + break; } + case STRING_PATTERN: + mp = new Module_Param_Pattern(mcopystr(single_value)); + break; + default: + break; + } + if (is_ifpresent) { + mp->set_ifpresent(); + } + mp->set_length_restriction(get_length_range()); + return mp; } void CHARSTRING_template::encode_text(Text_Buf& text_buf) const @@ -2634,13 +2760,13 @@ void CHARSTRING_template::decode_text(Text_Buf& text_buf) } } -boolean CHARSTRING_template::is_present() const +boolean CHARSTRING_template::is_present(boolean legacy /* = FALSE */) const { if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE; - return !match_omit(); + return !match_omit(legacy); } -boolean CHARSTRING_template::match_omit() const +boolean CHARSTRING_template::match_omit(boolean legacy /* = FALSE */) const { if (is_ifpresent) return TRUE; switch (template_selection) { @@ -2649,10 +2775,14 @@ boolean CHARSTRING_template::match_omit() const return TRUE; case VALUE_LIST: case COMPLEMENTED_LIST: - for (unsigned int i=0; i<value_list.n_values; i++) - if (value_list.list_value[i].match_omit()) - return template_selection==VALUE_LIST; - return template_selection==COMPLEMENTED_LIST; + if (legacy) { + // legacy behavior: 'omit' can appear in the value/complement list + for (unsigned int i=0; i<value_list.n_values; i++) + if (value_list.list_value[i].match_omit()) + return template_selection==VALUE_LIST; + return template_selection==COMPLEMENTED_LIST; + } + // else fall through default: return FALSE; } @@ -2660,7 +2790,8 @@ boolean CHARSTRING_template::match_omit() const } #ifndef TITAN_RUNTIME_2 -void CHARSTRING_template::check_restriction(template_res t_res, const char* t_name) const +void CHARSTRING_template::check_restriction(template_res t_res, const char* t_name, + boolean legacy /* = FALSE */) const { if (template_selection==UNINITIALIZED_TEMPLATE) return; switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) { @@ -2672,7 +2803,7 @@ void CHARSTRING_template::check_restriction(template_res t_res, const char* t_na template_selection==SPECIFIC_VALUE)) return; break; case TR_PRESENT: - if (!match_omit()) return; + if (!match_omit(legacy)) return; break; default: return; diff --git a/core/Charstring.hh b/core/Charstring.hh index 4ca62b41b..c12e7c794 100644 --- a/core/Charstring.hh +++ b/core/Charstring.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -50,6 +50,7 @@ class CHARSTRING : public Base_Type { friend class UNIVERSAL_CHARSTRING; friend class UNIVERSAL_CHARSTRING_ELEMENT; friend class TTCN_Buffer; + friend class CHARSTRING_template; friend boolean operator==(const char* string_value, const CHARSTRING& other_value); @@ -84,6 +85,12 @@ class CHARSTRING : public Base_Type { void copy_value(); CHARSTRING(int n_chars); + /** An extended version of set_param(), which also accepts string patterns if + * the second parameter is set (needed by CHARSTRING_template to concatenate + * string patterns). + * @return TRUE, if the module parameter was a string pattern, otherwise FALSE */ + boolean set_param_internal(Module_Param& param, boolean allow_pattern); + public: /** Construct an unbound CHARSTRING object */ CHARSTRING(); @@ -174,6 +181,7 @@ public: * @note UFT-8 strings will be decoded. If the decoding results in multi-octet * characters an error will be thrown. */ void set_param(Module_Param& param); + Module_Param* get_param(Module_Param_Name& param_name) const; void encode_text(Text_Buf& text_buf) const; void decode_text(Text_Buf& text_buf); @@ -386,7 +394,7 @@ public: const CHARSTRING_ELEMENT operator[](int index_value) const; const CHARSTRING_ELEMENT operator[](const INTEGER& index_value) const; - boolean match(const CHARSTRING& other_value) const; + boolean match(const CHARSTRING& other_value, boolean legacy = FALSE) const; const CHARSTRING& valueof() const; int lengthof() const; @@ -398,25 +406,26 @@ public: void set_max(const CHARSTRING& max_value); void log() const; - void log_match(const CHARSTRING& match_value) const; + void log_match(const CHARSTRING& match_value, boolean legacy = FALSE) const; void set_param(Module_Param& param); + Module_Param* get_param(Module_Param_Name& param_name) const; void encode_text(Text_Buf& text_buf) const; void decode_text(Text_Buf& text_buf); - boolean is_present() const; - boolean match_omit() const; + boolean is_present(boolean legacy = FALSE) const; + boolean match_omit(boolean legacy = FALSE) const; #ifdef TITAN_RUNTIME_2 void valueofv(Base_Type* value) const { *(static_cast<CHARSTRING*>(value)) = valueof(); } void set_value(template_sel other_value) { *this = other_value; } void copy_value(const Base_Type* other_value) { *this = *(static_cast<const CHARSTRING*>(other_value)); } Base_Template* clone() const { return new CHARSTRING_template(*this); } const TTCN_Typedescriptor_t* get_descriptor() const { return &CHARSTRING_descr_; } - boolean matchv(const Base_Type* other_value) const { return match(*(static_cast<const CHARSTRING*>(other_value))); } - void log_matchv(const Base_Type* match_value) const { log_match(*(static_cast<const CHARSTRING*>(match_value))); } + boolean matchv(const Base_Type* other_value, boolean legacy) const { return match(*(static_cast<const CHARSTRING*>(other_value)), legacy); } + void log_matchv(const Base_Type* match_value, boolean legacy) const { log_match(*(static_cast<const CHARSTRING*>(match_value)), legacy); } #else - void check_restriction(template_res t_res, const char* t_name=NULL) const; + void check_restriction(template_res t_res, const char* t_name=NULL, boolean legacy = FALSE) const; #endif /** Returns the single_value member diff --git a/core/Communication.cc b/core/Communication.cc index 4c1506f01..b5b502557 100644 --- a/core/Communication.cc +++ b/core/Communication.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/core/Communication.hh b/core/Communication.hh index 6c6dd17ca..eee68f2b9 100644 --- a/core/Communication.hh +++ b/core/Communication.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/core/Component.cc b/core/Component.cc index 66f3604ed..cbf0dd4da 100644 --- a/core/Component.cc +++ b/core/Component.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -124,11 +124,15 @@ void COMPONENT::kill() const void COMPONENT::set_param(Module_Param& param) { param.basic_check(Module_Param::BC_VALUE, "component reference (integer or null) value"); + Module_Param_Ptr mp = ¶m; + if (param.get_type() == Module_Param::MP_Reference) { + mp = param.get_referenced_param(); + } if (Ttcn_String_Parsing::happening()) { // accept all component values in case it's a string2ttcn operation - switch (param.get_type()) { + switch (mp->get_type()) { case Module_Param::MP_Integer: - component_value = (component)param.get_integer()->get_val(); + component_value = (component)mp->get_integer()->get_val(); break; case Module_Param::MP_Ttcn_Null: component_value = NULL_COMPREF; @@ -145,13 +149,21 @@ void COMPONENT::set_param(Module_Param& param) { } else { // only accept the null value if it's a module parameter - if (Module_Param::MP_Ttcn_Null != param.get_type()) { + if (Module_Param::MP_Ttcn_Null != mp->get_type()) { param.error("Only the 'null' value is allowed for module parameters of type 'component'."); } component_value = NULL_COMPREF; } } +Module_Param* COMPONENT::get_param(Module_Param_Name& /* param_name */) const +{ + if (!is_bound()) { + return new Module_Param_Unbound(); + } + return new Module_Param_Ttcn_Null(); +} + void COMPONENT::encode_text(Text_Buf& text_buf) const { if (component_value == UNBOUND_COMPREF) TTCN_error("Text encoder: Encoding " @@ -508,7 +520,8 @@ COMPONENT_template& COMPONENT_template::operator= return *this; } -boolean COMPONENT_template::match(component other_value) const +boolean COMPONENT_template::match(component other_value, + boolean /* legacy */) const { switch (template_selection) { case SPECIFIC_VALUE: @@ -531,7 +544,8 @@ boolean COMPONENT_template::match(component other_value) const return FALSE; } -boolean COMPONENT_template::match(const COMPONENT& other_value) const +boolean COMPONENT_template::match(const COMPONENT& other_value, + boolean /* legacy */) const { if (other_value.component_value == UNBOUND_COMPREF) TTCN_error("Matching an unbound component reference with a template."); @@ -607,7 +621,8 @@ void COMPONENT_template::log() const log_ifpresent(); } -void COMPONENT_template::log_match(const COMPONENT& match_value) const +void COMPONENT_template::log_match(const COMPONENT& match_value, + boolean /* legacy */) const { if (TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity() && TTCN_Logger::get_logmatch_buffer_len() != 0) { @@ -623,7 +638,11 @@ void COMPONENT_template::log_match(const COMPONENT& match_value) const void COMPONENT_template::set_param(Module_Param& param) { param.basic_check(Module_Param::BC_TEMPLATE, "component reference (integer or null) template"); - switch (param.get_type()) { + Module_Param_Ptr mp = ¶m; + if (param.get_type() == Module_Param::MP_Reference) { + mp = param.get_referenced_param(); + } + switch (mp->get_type()) { case Module_Param::MP_Omit: *this = OMIT_VALUE; break; @@ -634,14 +653,17 @@ void COMPONENT_template::set_param(Module_Param& param) { *this = ANY_OR_OMIT; break; case Module_Param::MP_List_Template: - case Module_Param::MP_ComplementList_Template: - set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, param.get_size()); - for (size_t i=0; i<param.get_size(); i++) { - list_item(i).set_param(*param.get_elem(i)); + case Module_Param::MP_ComplementList_Template: { + COMPONENT_template temp; + temp.set_type(mp->get_type() == Module_Param::MP_List_Template ? + VALUE_LIST : COMPLEMENTED_LIST, mp->get_size()); + for (size_t i=0; i<mp->get_size(); i++) { + temp.list_item(i).set_param(*mp->get_elem(i)); } - break; + *this = temp; + break; } case Module_Param::MP_Integer: - *this = (component)param.get_integer()->get_val(); + *this = (component)mp->get_integer()->get_val(); break; case Module_Param::MP_Ttcn_Null: *this = NULL_COMPREF; @@ -655,7 +677,60 @@ void COMPONENT_template::set_param(Module_Param& param) { default: param.type_error("component reference (integer or null) template"); } - is_ifpresent = param.get_ifpresent(); + is_ifpresent = param.get_ifpresent() || mp->get_ifpresent(); +} + +Module_Param* COMPONENT_template::get_param(Module_Param_Name& param_name) const +{ + Module_Param* mp = NULL; + switch (template_selection) { + case UNINITIALIZED_TEMPLATE: + mp = new Module_Param_Unbound(); + break; + case OMIT_VALUE: + mp = new Module_Param_Omit(); + break; + case ANY_VALUE: + mp = new Module_Param_Any(); + break; + case ANY_OR_OMIT: + mp = new Module_Param_AnyOrNone(); + break; + case SPECIFIC_VALUE: + switch (single_value) { + case NULL_COMPREF: + mp = new Module_Param_Ttcn_Null(); + break; + case MTC_COMPREF: + mp = new Module_Param_Ttcn_mtc(); + break; + case SYSTEM_COMPREF: + mp = new Module_Param_Ttcn_system(); + break; + default: + mp = new Module_Param_Integer(new int_val_t(single_value)); + break; + } + break; + case VALUE_LIST: + case COMPLEMENTED_LIST: { + if (template_selection == VALUE_LIST) { + mp = new Module_Param_List_Template(); + } + else { + mp = new Module_Param_ComplementList_Template(); + } + for (size_t i = 0; i < value_list.n_values; ++i) { + mp->add_elem(value_list.list_value[i].get_param(param_name)); + } + break; } + default: + break; + } + if (is_ifpresent) { + mp->set_ifpresent(); + } + return mp; } void COMPONENT_template::encode_text(Text_Buf& text_buf) const @@ -706,13 +781,13 @@ void COMPONENT_template::decode_text(Text_Buf& text_buf) } } -boolean COMPONENT_template::is_present() const +boolean COMPONENT_template::is_present(boolean legacy /* = FALSE */) const { if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE; - return !match_omit(); + return !match_omit(legacy); } -boolean COMPONENT_template::match_omit() const +boolean COMPONENT_template::match_omit(boolean legacy /* = FALSE */) const { if (is_ifpresent) return TRUE; switch (template_selection) { @@ -721,10 +796,14 @@ boolean COMPONENT_template::match_omit() const return TRUE; case VALUE_LIST: case COMPLEMENTED_LIST: - for (unsigned int i=0; i<value_list.n_values; i++) - if (value_list.list_value[i].match_omit()) - return template_selection==VALUE_LIST; - return template_selection==COMPLEMENTED_LIST; + if (legacy) { + // legacy behavior: 'omit' can appear in the value/complement list + for (unsigned int i=0; i<value_list.n_values; i++) + if (value_list.list_value[i].match_omit()) + return template_selection==VALUE_LIST; + return template_selection==COMPLEMENTED_LIST; + } + // else fall through default: return FALSE; } @@ -732,7 +811,8 @@ boolean COMPONENT_template::match_omit() const } #ifndef TITAN_RUNTIME_2 -void COMPONENT_template::check_restriction(template_res t_res, const char* t_name) const +void COMPONENT_template::check_restriction(template_res t_res, const char* t_name, + boolean legacy /* = FALSE */) const { if (template_selection==UNINITIALIZED_TEMPLATE) return; switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) { @@ -744,7 +824,7 @@ void COMPONENT_template::check_restriction(template_res t_res, const char* t_nam template_selection==SPECIFIC_VALUE)) return; break; case TR_PRESENT: - if (!match_omit()) return; + if (!match_omit(legacy)) return; break; default: return; diff --git a/core/Component.hh b/core/Component.hh index f6c1cfa41..1e1da3c56 100644 --- a/core/Component.hh +++ b/core/Component.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -74,6 +74,7 @@ public: void kill() const; void set_param(Module_Param& param); + Module_Param* get_param(Module_Param_Name& param_name) const; void encode_text(Text_Buf& text_buf) const; void decode_text(Text_Buf& text_buf); @@ -140,33 +141,34 @@ public: COMPONENT_template& operator=(const OPTIONAL<COMPONENT>& other_value); COMPONENT_template& operator=(const COMPONENT_template& other_value); - boolean match(component other_value) const; - boolean match(const COMPONENT& other_value) const; + boolean match(component other_value, boolean legacy = FALSE) const; + boolean match(const COMPONENT& other_value, boolean legacy = FALSE) const; component valueof() const; void set_type(template_sel template_type, unsigned int list_length); COMPONENT_template& list_item(unsigned int list_index); void log() const; - void log_match(const COMPONENT& match_value) const; + void log_match(const COMPONENT& match_value, boolean legacy = FALSE) const; void set_param(Module_Param& param); + Module_Param* get_param(Module_Param_Name& param_name) const; void encode_text(Text_Buf& text_buf) const; void decode_text(Text_Buf& text_buf); - boolean is_present() const; - boolean match_omit() const; + boolean is_present(boolean legacy = FALSE) const; + boolean match_omit(boolean legacy = FALSE) const; #ifdef TITAN_RUNTIME_2 void valueofv(Base_Type* value) const { *(static_cast<COMPONENT*>(value)) = valueof(); } void set_value(template_sel other_value) { *this = other_value; } void copy_value(const Base_Type* other_value) { *this = *(static_cast<const COMPONENT*>(other_value)); } Base_Template* clone() const { return new COMPONENT_template(*this); } const TTCN_Typedescriptor_t* get_descriptor() const { return &COMPONENT_descr_; } - boolean matchv(const Base_Type* other_value) const { return match(*(static_cast<const COMPONENT*>(other_value))); } - void log_matchv(const Base_Type* match_value) const { log_match(*(static_cast<const COMPONENT*>(match_value))); } + boolean matchv(const Base_Type* other_value, boolean legacy) const { return match(*(static_cast<const COMPONENT*>(other_value)), legacy); } + void log_matchv(const Base_Type* match_value, boolean legacy) const { log_match(*(static_cast<const COMPONENT*>(match_value)), legacy); } #else - void check_restriction(template_res t_res, const char* t_name=NULL) const; + void check_restriction(template_res t_res, const char* t_name=NULL, boolean legacy = FALSE) const; #endif inline boolean is_component() { return TRUE; } diff --git a/core/Default.cc b/core/Default.cc index 81a3dcb7b..ebf355b87 100644 --- a/core/Default.cc +++ b/core/Default.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -139,10 +139,22 @@ void DEFAULT::log() const void DEFAULT::set_param(Module_Param& param) { param.basic_check(Module_Param::BC_VALUE, "default reference (null) value"); - if (param.get_type()!=Module_Param::MP_Ttcn_Null) param.type_error("default reference (null) value"); + Module_Param_Ptr mp = ¶m; + if (param.get_type() == Module_Param::MP_Reference) { + mp = param.get_referenced_param(); + } + if (mp->get_type()!=Module_Param::MP_Ttcn_Null) param.type_error("default reference (null) value"); default_ptr = NULL; } +Module_Param* DEFAULT::get_param(Module_Param_Name& /* param_name */) const +{ + if (!is_bound()) { + return new Module_Param_Unbound(); + } + return new Module_Param_Ttcn_Null(); +} + void DEFAULT::encode_text(Text_Buf&) const { TTCN_error("Default references cannot be sent to other test components."); @@ -328,13 +340,15 @@ DEFAULT_template& DEFAULT_template::operator= return *this; } -boolean DEFAULT_template::match(component other_value) const +boolean DEFAULT_template::match(component other_value, + boolean /* legacy */) const { if (other_value == NULL_COMPREF) return FALSE; return match((Default_Base*)NULL); } -boolean DEFAULT_template::match(Default_Base *other_value) const +boolean DEFAULT_template::match(Default_Base *other_value, + boolean /* legacy */) const { if (other_value == UNBOUND_DEFAULT) return FALSE; switch (template_selection) { @@ -358,7 +372,8 @@ boolean DEFAULT_template::match(Default_Base *other_value) const return FALSE; } -boolean DEFAULT_template::match(const DEFAULT& other_value) const +boolean DEFAULT_template::match(const DEFAULT& other_value, + boolean /* legacy */) const { if (!other_value.is_bound()) return FALSE; return match(other_value.default_ptr); @@ -418,7 +433,8 @@ void DEFAULT_template::log() const log_ifpresent(); } -void DEFAULT_template::log_match(const DEFAULT& match_value) const +void DEFAULT_template::log_match(const DEFAULT& match_value, + boolean /* legacy */) const { if (TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity() && TTCN_Logger::get_logmatch_buffer_len() != 0) { @@ -434,7 +450,11 @@ void DEFAULT_template::log_match(const DEFAULT& match_value) const void DEFAULT_template::set_param(Module_Param& param) { param.basic_check(Module_Param::BC_TEMPLATE, "default reference (null) template"); - switch (param.get_type()) { + Module_Param_Ptr mp = ¶m; + if (param.get_type() == Module_Param::MP_Reference) { + mp = param.get_referenced_param(); + } + switch (mp->get_type()) { case Module_Param::MP_Omit: *this = OMIT_VALUE; break; @@ -445,19 +465,62 @@ void DEFAULT_template::set_param(Module_Param& param) { *this = ANY_OR_OMIT; break; case Module_Param::MP_List_Template: - case Module_Param::MP_ComplementList_Template: - set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, param.get_size()); - for (size_t i=0; i<param.get_size(); i++) { - list_item(i).set_param(*param.get_elem(i)); + case Module_Param::MP_ComplementList_Template: { + DEFAULT_template temp; + temp.set_type(mp->get_type() == Module_Param::MP_List_Template ? + VALUE_LIST : COMPLEMENTED_LIST, mp->get_size()); + for (size_t i=0; i<mp->get_size(); i++) { + temp.list_item(i).set_param(*mp->get_elem(i)); } - break; + *this = temp; + break; } case Module_Param::MP_Ttcn_Null: *this = DEFAULT(NULL_COMPREF); break; default: param.type_error("default reference (null) template"); } - is_ifpresent = param.get_ifpresent(); + is_ifpresent = param.get_ifpresent() || mp->get_ifpresent(); +} + +Module_Param* DEFAULT_template::get_param(Module_Param_Name& param_name) const +{ + Module_Param* mp = NULL; + switch (template_selection) { + case UNINITIALIZED_TEMPLATE: + mp = new Module_Param_Unbound(); + break; + case OMIT_VALUE: + mp = new Module_Param_Omit(); + break; + case ANY_VALUE: + mp = new Module_Param_Any(); + break; + case ANY_OR_OMIT: + mp = new Module_Param_AnyOrNone(); + break; + case SPECIFIC_VALUE: + mp = new Module_Param_Ttcn_Null(); + break; + case VALUE_LIST: + case COMPLEMENTED_LIST: { + if (template_selection == VALUE_LIST) { + mp = new Module_Param_List_Template(); + } + else { + mp = new Module_Param_ComplementList_Template(); + } + for (size_t i = 0; i < value_list.n_values; ++i) { + mp->add_elem(value_list.list_value[i].get_param(param_name)); + } + break; } + default: + break; + } + if (is_ifpresent) { + mp->set_ifpresent(); + } + return mp; } void DEFAULT_template::encode_text(Text_Buf&) const @@ -472,13 +535,13 @@ void DEFAULT_template::decode_text(Text_Buf&) "components."); } -boolean DEFAULT_template::is_present() const +boolean DEFAULT_template::is_present(boolean legacy /* = FALSE */) const { if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE; - return !match_omit(); + return !match_omit(legacy); } -boolean DEFAULT_template::match_omit() const +boolean DEFAULT_template::match_omit(boolean legacy /* = FALSE */) const { if (is_ifpresent) return TRUE; switch (template_selection) { @@ -487,10 +550,14 @@ boolean DEFAULT_template::match_omit() const return TRUE; case VALUE_LIST: case COMPLEMENTED_LIST: - for (unsigned int i=0; i<value_list.n_values; i++) - if (value_list.list_value[i].match_omit()) - return template_selection==VALUE_LIST; - return template_selection==COMPLEMENTED_LIST; + if (legacy) { + // legacy behavior: 'omit' can appear in the value/complement list + for (unsigned int i=0; i<value_list.n_values; i++) + if (value_list.list_value[i].match_omit()) + return template_selection==VALUE_LIST; + return template_selection==COMPLEMENTED_LIST; + } + // else fall through default: return FALSE; } @@ -498,7 +565,8 @@ boolean DEFAULT_template::match_omit() const } #ifndef TITAN_RUNTIME_2 -void DEFAULT_template::check_restriction(template_res t_res, const char* t_name) const +void DEFAULT_template::check_restriction(template_res t_res, const char* t_name, + boolean legacy /* = FALSE */) const { if (template_selection==UNINITIALIZED_TEMPLATE) return; switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) { @@ -510,7 +578,7 @@ void DEFAULT_template::check_restriction(template_res t_res, const char* t_name) template_selection==SPECIFIC_VALUE)) return; break; case TR_PRESENT: - if (!match_omit()) return; + if (!match_omit(legacy)) return; break; default: return; diff --git a/core/Default.hh b/core/Default.hh index 0230edba6..da8ccb49d 100644 --- a/core/Default.hh +++ b/core/Default.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -84,6 +84,7 @@ public: #endif void set_param(Module_Param& param); + Module_Param* get_param(Module_Param_Name& param_name) const; void encode_text(Text_Buf& text_buf) const; void decode_text(Text_Buf& text_buf); @@ -130,34 +131,35 @@ public: DEFAULT_template& operator=(const OPTIONAL<DEFAULT>& other_value); DEFAULT_template& operator=(const DEFAULT_template& other_value); - boolean match(component other_value) const; - boolean match(Default_Base *other_value) const; - boolean match(const DEFAULT& other_value) const; + boolean match(component other_value, boolean legacy = FALSE) const; + boolean match(Default_Base *other_value, boolean legacy = FALSE) const; + boolean match(const DEFAULT& other_value, boolean legacy = FALSE) const; Default_Base *valueof() const; void set_type(template_sel template_type, unsigned int list_length); DEFAULT_template& list_item(unsigned int list_index); void log() const; - void log_match(const DEFAULT& match_value) const; + void log_match(const DEFAULT& match_value, boolean legacy = FALSE) const; void set_param(Module_Param& param); + Module_Param* get_param(Module_Param_Name& param_name) const; void encode_text(Text_Buf& text_buf) const; void decode_text(Text_Buf& text_buf); - boolean is_present() const; - boolean match_omit() const; + boolean is_present(boolean legacy = FALSE) const; + boolean match_omit(boolean legacy = FALSE) const; #ifdef TITAN_RUNTIME_2 void valueofv(Base_Type* value) const { *(static_cast<DEFAULT*>(value)) = valueof(); } void set_value(template_sel other_value) { *this = other_value; } void copy_value(const Base_Type* other_value) { *this = *(static_cast<const DEFAULT*>(other_value)); } Base_Template* clone() const { return new DEFAULT_template(*this); } const TTCN_Typedescriptor_t* get_descriptor() const { return &DEFAULT_descr_; } - boolean matchv(const Base_Type* other_value) const { return match(*(static_cast<const DEFAULT*>(other_value))); } - void log_matchv(const Base_Type* match_value) const { log_match(*(static_cast<const DEFAULT*>(match_value))); } + boolean matchv(const Base_Type* other_value, boolean legacy) const { return match(*(static_cast<const DEFAULT*>(other_value)), legacy); } + void log_matchv(const Base_Type* match_value, boolean legacy) const { log_match(*(static_cast<const DEFAULT*>(match_value)), legacy); } #else - void check_restriction(template_res t_res, const char* t_name=NULL) const; + void check_restriction(template_res t_res, const char* t_name=NULL, boolean legacy = FALSE) const; #endif }; diff --git a/core/Encdec.cc b/core/Encdec.cc index cc4b0649b..4307bff83 100644 --- a/core/Encdec.cc +++ b/core/Encdec.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -797,6 +797,7 @@ local_fieldorder==ORDER_MSB?"M":"L" if(local_fieldorder==ORDER_MSB){ unsigned int num_bytes = (len+7) / 8; unsigned int active_bits_in_last = len % 8; + if(!active_bits_in_last) active_bits_in_last=8; for(unsigned int a=0; a < num_bytes; a++){ prt[a]&=REVERSE_BITS(mask1); unsigned char sa = s[a]; @@ -820,6 +821,10 @@ local_fieldorder==ORDER_MSB?"M":"L" } else{ // start from octet boundary memcpy(data_ptr+buf_len, s, (len+7)/8*sizeof(unsigned char)); + if(local_fieldorder==ORDER_MSB && new_bit_pos){ + data_ptr[new_size-1]<<=(8-new_bit_pos); + + } } } else{ // bitorder==ORDER_MSB diff --git a/core/Encdec.hh b/core/Encdec.hh index 871687fbc..4400f4e62 100644 --- a/core/Encdec.hh +++ b/core/Encdec.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/core/Error.cc b/core/Error.cc index f8792e7f1..5443e3eed 100644 --- a/core/Error.cc +++ b/core/Error.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -9,6 +9,7 @@ #include "TitanLoggerApi.hh" #include <stdarg.h> +#include <stdint.h> #include "../common/memory.h" #include "Logger.hh" @@ -232,16 +233,18 @@ int print_address(void *pc, void * usrarg) if (status == 0) func = demangled; if (TTCN_Logger::is_logger_up()) { - TTCN_Logger::log_event("%s:%s+0x%x\n", + TTCN_Logger::log_event("%s:%s+%p\n", lib, func, - (unsigned int)pc - (unsigned int)info.dli_saddr); + (void *)((uintptr_t)pc - (uintptr_t)info.dli_saddr) + ); } else { - fprintf(stderr, "%s:%s+0x%x\n", + fprintf(stderr, "%s:%s+%p\n", lib, func, - (unsigned int)pc - (unsigned int)info.dli_saddr); + (void *)((uintptr_t)pc - (uintptr_t)info.dli_saddr) + ); } if (status == 0) free(demangled); diff --git a/core/Error.hh b/core/Error.hh index 9f3b80c88..f3a026d84 100644 --- a/core/Error.hh +++ b/core/Error.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/core/Event_Handler.hh b/core/Event_Handler.hh index dd838f1e8..7aa09df40 100644 --- a/core/Event_Handler.hh +++ b/core/Event_Handler.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/core/Fd_And_Timeout_User.hh b/core/Fd_And_Timeout_User.hh index d56631a41..2a21532ff 100644 --- a/core/Fd_And_Timeout_User.hh +++ b/core/Fd_And_Timeout_User.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/core/Float.cc b/core/Float.cc index 59d6a43cf..ea3f06b0a 100644 --- a/core/Float.cc +++ b/core/Float.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -244,9 +244,67 @@ void FLOAT::log() const void FLOAT::set_param(Module_Param& param) { param.basic_check(Module_Param::BC_VALUE, "float value"); - if (param.get_type()!=Module_Param::MP_Float) param.type_error("float value"); - bound_flag = TRUE; - float_value = param.get_float(); + Module_Param_Ptr mp = ¶m; + if (param.get_type() == Module_Param::MP_Reference) { + mp = param.get_referenced_param(); + } + switch (mp->get_type()) { + case Module_Param::MP_Float: { + clean_up(); + bound_flag = TRUE; + float_value = mp->get_float(); + break; } + case Module_Param::MP_Expression: + switch (mp->get_expr_type()) { + case Module_Param::EXPR_NEGATE: { + FLOAT operand; + operand.set_param(*mp->get_operand1()); + *this = - operand; + break; } + case Module_Param::EXPR_ADD: { + FLOAT operand1, operand2; + operand1.set_param(*mp->get_operand1()); + operand2.set_param(*mp->get_operand2()); + *this = operand1 + operand2; + break; } + case Module_Param::EXPR_SUBTRACT: { + FLOAT operand1, operand2; + operand1.set_param(*mp->get_operand1()); + operand2.set_param(*mp->get_operand2()); + *this = operand1 - operand2; + break; } + case Module_Param::EXPR_MULTIPLY: { + FLOAT operand1, operand2; + operand1.set_param(*mp->get_operand1()); + operand2.set_param(*mp->get_operand2()); + *this = operand1 * operand2; + break; } + case Module_Param::EXPR_DIVIDE: { + FLOAT operand1, operand2; + operand1.set_param(*mp->get_operand1()); + operand2.set_param(*mp->get_operand2()); + if (operand2 == 0.0) { + param.error("Floating point division by zero."); + } + *this = operand1 / operand2; + break; } + default: + param.expr_type_error("a float"); + break; + } + break; + default: + param.type_error("float value"); + break; + } +} + +Module_Param* FLOAT::get_param(Module_Param_Name& /* param_name */) const +{ + if (!bound_flag) { + return new Module_Param_Unbound(); + } + return new Module_Param_Float(float_value); } void FLOAT::encode_text(Text_Buf& text_buf) const @@ -1195,11 +1253,12 @@ FLOAT_template& FLOAT_template::operator=(const FLOAT_template& other_value) return *this; } -boolean FLOAT_template::match(double other_value) const +boolean FLOAT_template::match(double other_value, boolean /* legacy */) const { switch (template_selection) { case SPECIFIC_VALUE: - return single_value == other_value; + return single_value == other_value || // check if they're both NaN + (single_value != single_value && other_value != other_value); case OMIT_VALUE: return FALSE; case ANY_VALUE: @@ -1222,7 +1281,7 @@ boolean FLOAT_template::match(double other_value) const return FALSE; } -boolean FLOAT_template::match(const FLOAT& other_value) const +boolean FLOAT_template::match(const FLOAT& other_value, boolean /* legacy */) const { if (!other_value.is_bound()) return FALSE; return match(other_value.float_value); @@ -1337,7 +1396,8 @@ void FLOAT_template::log() const log_ifpresent(); } -void FLOAT_template::log_match(const FLOAT& match_value) const +void FLOAT_template::log_match(const FLOAT& match_value, + boolean /* legacy */) const { if (TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity() && TTCN_Logger::get_logmatch_buffer_len() != 0) { @@ -1353,7 +1413,11 @@ void FLOAT_template::log_match(const FLOAT& match_value) const void FLOAT_template::set_param(Module_Param& param) { param.basic_check(Module_Param::BC_TEMPLATE, "float template"); - switch (param.get_type()) { + Module_Param_Ptr mp = ¶m; + if (param.get_type() == Module_Param::MP_Reference) { + mp = param.get_referenced_param(); + } + switch (mp->get_type()) { case Module_Param::MP_Omit: *this = OMIT_VALUE; break; @@ -1364,24 +1428,111 @@ void FLOAT_template::set_param(Module_Param& param) { *this = ANY_OR_OMIT; break; case Module_Param::MP_List_Template: - case Module_Param::MP_ComplementList_Template: - set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, param.get_size()); - for (size_t i=0; i<param.get_size(); i++) { - list_item(i).set_param(*param.get_elem(i)); + case Module_Param::MP_ComplementList_Template: { + FLOAT_template temp; + temp.set_type(mp->get_type() == Module_Param::MP_List_Template ? + VALUE_LIST : COMPLEMENTED_LIST, mp->get_size()); + for (size_t i=0; i<mp->get_size(); i++) { + temp.list_item(i).set_param(*mp->get_elem(i)); } - break; + *this = temp; + break; } case Module_Param::MP_Float: - *this = param.get_float(); + *this = mp->get_float(); break; case Module_Param::MP_FloatRange: set_type(VALUE_RANGE); - if (param.has_lower_float()) set_min(param.get_lower_float()); - if (param.has_upper_float()) set_max(param.get_upper_float()); + if (mp->has_lower_float()) set_min(mp->get_lower_float()); + if (mp->has_upper_float()) set_max(mp->get_upper_float()); + break; + case Module_Param::MP_Expression: + switch (mp->get_expr_type()) { + case Module_Param::EXPR_NEGATE: { + FLOAT operand; + operand.set_param(*mp->get_operand1()); + *this = - operand; + break; } + case Module_Param::EXPR_ADD: { + FLOAT operand1, operand2; + operand1.set_param(*mp->get_operand1()); + operand2.set_param(*mp->get_operand2()); + *this = operand1 + operand2; + break; } + case Module_Param::EXPR_SUBTRACT: { + FLOAT operand1, operand2; + operand1.set_param(*mp->get_operand1()); + operand2.set_param(*mp->get_operand2()); + *this = operand1 - operand2; + break; } + case Module_Param::EXPR_MULTIPLY: { + FLOAT operand1, operand2; + operand1.set_param(*mp->get_operand1()); + operand2.set_param(*mp->get_operand2()); + *this = operand1 * operand2; + break; } + case Module_Param::EXPR_DIVIDE: { + FLOAT operand1, operand2; + operand1.set_param(*mp->get_operand1()); + operand2.set_param(*mp->get_operand2()); + if (operand2 == 0.0) { + param.error("Floating point division by zero."); + } + *this = operand1 / operand2; + break; } + default: + param.expr_type_error("a float"); + break; + } break; default: param.type_error("float template"); } - is_ifpresent = param.get_ifpresent(); + is_ifpresent = param.get_ifpresent() || mp->get_ifpresent(); +} + +Module_Param* FLOAT_template::get_param(Module_Param_Name& param_name) const +{ + Module_Param* mp = NULL; + switch (template_selection) { + case UNINITIALIZED_TEMPLATE: + mp = new Module_Param_Unbound(); + break; + case OMIT_VALUE: + mp = new Module_Param_Omit(); + break; + case ANY_VALUE: + mp = new Module_Param_Any(); + break; + case ANY_OR_OMIT: + mp = new Module_Param_AnyOrNone(); + break; + case SPECIFIC_VALUE: + mp = new Module_Param_Float(single_value); + break; + case VALUE_LIST: + case COMPLEMENTED_LIST: { + if (template_selection == VALUE_LIST) { + mp = new Module_Param_List_Template(); + } + else { + mp = new Module_Param_ComplementList_Template(); + } + for (size_t i = 0; i < value_list.n_values; ++i) { + mp->add_elem(value_list.list_value[i].get_param(param_name)); + } + break; } + case VALUE_RANGE: + mp = new Module_Param_FloatRange( + value_range.min_value, value_range.min_is_present, + value_range.max_value, value_range.max_is_present); + break; + default: + break; + } + if (is_ifpresent) { + mp->set_ifpresent(); + } + return mp; } void FLOAT_template::encode_text(Text_Buf& text_buf) const @@ -1448,13 +1599,13 @@ void FLOAT_template::decode_text(Text_Buf& text_buf) } } -boolean FLOAT_template::is_present() const +boolean FLOAT_template::is_present(boolean legacy /* = FALSE */) const { if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE; - return !match_omit(); + return !match_omit(legacy); } -boolean FLOAT_template::match_omit() const +boolean FLOAT_template::match_omit(boolean legacy /* = FALSE */) const { if (is_ifpresent) return TRUE; switch (template_selection) { @@ -1463,10 +1614,14 @@ boolean FLOAT_template::match_omit() const return TRUE; case VALUE_LIST: case COMPLEMENTED_LIST: - for (unsigned int i=0; i<value_list.n_values; i++) - if (value_list.list_value[i].match_omit()) - return template_selection==VALUE_LIST; - return template_selection==COMPLEMENTED_LIST; + if (legacy) { + // legacy behavior: 'omit' can appear in the value/complement list + for (unsigned int i=0; i<value_list.n_values; i++) + if (value_list.list_value[i].match_omit()) + return template_selection==VALUE_LIST; + return template_selection==COMPLEMENTED_LIST; + } + // else fall through default: return FALSE; } @@ -1474,7 +1629,8 @@ boolean FLOAT_template::match_omit() const } #ifndef TITAN_RUNTIME_2 -void FLOAT_template::check_restriction(template_res t_res, const char* t_name) const +void FLOAT_template::check_restriction(template_res t_res, const char* t_name, + boolean legacy /* = FALSE */) const { if (template_selection==UNINITIALIZED_TEMPLATE) return; switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) { @@ -1486,7 +1642,7 @@ void FLOAT_template::check_restriction(template_res t_res, const char* t_name) c template_selection==SPECIFIC_VALUE)) return; break; case TR_PRESENT: - if (!match_omit()) return; + if (!match_omit(legacy)) return; break; default: return; diff --git a/core/Float.hh b/core/Float.hh index 18e6faa35..01b162f45 100644 --- a/core/Float.hh +++ b/core/Float.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -14,13 +14,6 @@ #include "Error.hh" #include "ttcn3float.hh" -/* TTCN-3 float values that have absolute value smaller than this - are displayed in exponential notation. */ -#define MIN_DECIMAL_FLOAT 1.0E-4 -/* TTCN-3 float values that have absolute value larger or equal than this - are displayed in exponential notation. */ -#define MAX_DECIMAL_FLOAT 1.0E+10 - class Module_Param; // float value class @@ -111,6 +104,7 @@ public: #endif void set_param(Module_Param& param); + Module_Param* get_param(Module_Param_Name& param_name) const; void encode_text(Text_Buf& text_buf) const; void decode_text(Text_Buf& text_buf); @@ -212,8 +206,8 @@ public: FLOAT_template& operator=(const OPTIONAL<FLOAT>& other_value); FLOAT_template& operator=(const FLOAT_template& other_value); - boolean match(double other_value) const; - boolean match(const FLOAT& other_value) const; + boolean match(double other_value, boolean legacy = FALSE) const; + boolean match(const FLOAT& other_value, boolean legacy = FALSE) const; void set_type(template_sel template_type, unsigned int list_length = 0); FLOAT_template& list_item(unsigned int list_index); @@ -226,25 +220,26 @@ public: double valueof() const; void log() const; - void log_match(const FLOAT& match_value) const; + void log_match(const FLOAT& match_value, boolean legacy = FALSE) const; void set_param(Module_Param& param); + Module_Param* get_param(Module_Param_Name& param_name) const; void encode_text(Text_Buf& text_buf) const; void decode_text(Text_Buf& text_buf); - boolean is_present() const; - boolean match_omit() const; + boolean is_present(boolean legacy = FALSE) const; + boolean match_omit(boolean legacy = FALSE) const; #ifdef TITAN_RUNTIME_2 void valueofv(Base_Type* value) const { *(static_cast<FLOAT*>(value)) = valueof(); } void set_value(template_sel other_value) { *this = other_value; } void copy_value(const Base_Type* other_value) { *this = *(static_cast<const FLOAT*>(other_value)); } Base_Template* clone() const { return new FLOAT_template(*this); } const TTCN_Typedescriptor_t* get_descriptor() const { return &FLOAT_descr_; } - boolean matchv(const Base_Type* other_value) const { return match(*(static_cast<const FLOAT*>(other_value))); } - void log_matchv(const Base_Type* match_value) const { log_match(*(static_cast<const FLOAT*>(match_value))); } + boolean matchv(const Base_Type* other_value, boolean legacy) const { return match(*(static_cast<const FLOAT*>(other_value)), legacy); } + void log_matchv(const Base_Type* match_value, boolean legacy) const { log_match(*(static_cast<const FLOAT*>(match_value)), legacy); } #else - void check_restriction(template_res t_res, const char* t_name=NULL) const; + void check_restriction(template_res t_res, const char* t_name=NULL, boolean legacy = FALSE) const; #endif }; diff --git a/core/Hexstring.cc b/core/Hexstring.cc index 27c7e4af4..c61c13f4c 100644 --- a/core/Hexstring.cc +++ b/core/Hexstring.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -582,25 +582,62 @@ void HEXSTRING::decode_text(Text_Buf& text_buf) void HEXSTRING::set_param(Module_Param& param) { param.basic_check(Module_Param::BC_VALUE|Module_Param::BC_LIST, "hexstring value"); - if (param.get_type()!=Module_Param::MP_Hexstring) param.type_error("hexstring value"); - switch (param.get_operation_type()) { - case Module_Param::OT_ASSIGN: { - clean_up(); - int n_nibbles = param.get_string_size(); - init_struct(n_nibbles); - memcpy(val_ptr->nibbles_ptr, param.get_string_data(), (n_nibbles + 1) / 2); - clear_unused_nibble(); - } break; - case Module_Param::OT_CONCAT: - if (is_bound()) { - *this = *this + HEXSTRING(param.get_string_size(), (unsigned char*)param.get_string_data()); - } else { - *this = HEXSTRING(param.get_string_size(), (unsigned char*)param.get_string_data()); + Module_Param_Ptr mp = ¶m; + if (param.get_type() == Module_Param::MP_Reference) { + mp = param.get_referenced_param(); + } + switch (mp->get_type()) { + case Module_Param::MP_Hexstring: + switch (param.get_operation_type()) { + case Module_Param::OT_ASSIGN: { + clean_up(); + int n_nibbles = mp->get_string_size(); + init_struct(n_nibbles); + memcpy(val_ptr->nibbles_ptr, mp->get_string_data(), (n_nibbles + 1) / 2); + clear_unused_nibble(); + } break; + case Module_Param::OT_CONCAT: + if (is_bound()) { + *this = *this + HEXSTRING(mp->get_string_size(), (unsigned char*)mp->get_string_data()); + } else { + *this = HEXSTRING(mp->get_string_size(), (unsigned char*)mp->get_string_data()); + } + break; + default: + TTCN_error("Internal error: HEXSTRING::set_param()"); + } + break; + case Module_Param::MP_Expression: + if (mp->get_expr_type() == Module_Param::EXPR_CONCATENATE) { + HEXSTRING operand1, operand2; + operand1.set_param(*mp->get_operand1()); + operand2.set_param(*mp->get_operand2()); + if (param.get_operation_type() == Module_Param::OT_CONCAT) { + *this = *this + operand1 + operand2; + } + else { + *this = operand1 + operand2; + } + } + else { + param.expr_type_error("a hexstring"); } break; default: - TTCN_error("Internal error: HEXSTRING::set_param()"); - } + param.type_error("hexstring value"); + break; + } +} + +Module_Param* HEXSTRING::get_param(Module_Param_Name& /* param_name */) const +{ + if (!is_bound()) { + return new Module_Param_Unbound(); + } + int n_bytes = (val_ptr->n_nibbles + 1) / 2; + unsigned char* val_cpy = (unsigned char *)Malloc(n_bytes); + memcpy(val_cpy, val_ptr->nibbles_ptr, n_bytes); + return new Module_Param_Hexstring(val_ptr->n_nibbles, val_cpy); } void HEXSTRING::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, @@ -1507,7 +1544,8 @@ const HEXSTRING_ELEMENT HEXSTRING_template::operator[](const INTEGER& index_valu return (*this)[(int)index_value]; } -boolean HEXSTRING_template::match(const HEXSTRING& other_value) const +boolean HEXSTRING_template::match(const HEXSTRING& other_value, + boolean /* legacy */) const { if (!other_value.is_bound()) return FALSE; if (!match_length(other_value.val_ptr->n_nibbles)) return FALSE; @@ -1658,7 +1696,8 @@ void HEXSTRING_template::log() const log_ifpresent(); } -void HEXSTRING_template::log_match(const HEXSTRING& match_value) const +void HEXSTRING_template::log_match(const HEXSTRING& match_value, + boolean /* legacy */) const { if (TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity() && TTCN_Logger::get_logmatch_buffer_len() != 0) { @@ -1676,7 +1715,11 @@ void HEXSTRING_template::log_match(const HEXSTRING& match_value) const void HEXSTRING_template::set_param(Module_Param& param) { param.basic_check(Module_Param::BC_TEMPLATE|Module_Param::BC_LIST, "hexstring template"); - switch (param.get_type()) { + Module_Param_Ptr mp = ¶m; + if (param.get_type() == Module_Param::MP_Reference) { + mp = param.get_referenced_param(); + } + switch (mp->get_type()) { case Module_Param::MP_Omit: *this = OMIT_VALUE; break; @@ -1687,23 +1730,88 @@ void HEXSTRING_template::set_param(Module_Param& param) { *this = ANY_OR_OMIT; break; case Module_Param::MP_List_Template: - case Module_Param::MP_ComplementList_Template: - set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, param.get_size()); - for (size_t i=0; i<param.get_size(); i++) { - list_item(i).set_param(*param.get_elem(i)); + case Module_Param::MP_ComplementList_Template: { + HEXSTRING_template temp; + temp.set_type(mp->get_type() == Module_Param::MP_List_Template ? + VALUE_LIST : COMPLEMENTED_LIST, mp->get_size()); + for (size_t i=0; i<mp->get_size(); i++) { + temp.list_item(i).set_param(*mp->get_elem(i)); } - break; + *this = temp; + break; } case Module_Param::MP_Hexstring: - *this = HEXSTRING(param.get_string_size(), (unsigned char*)param.get_string_data()); + *this = HEXSTRING(mp->get_string_size(), (unsigned char*)mp->get_string_data()); break; case Module_Param::MP_Hexstring_Template: - *this = HEXSTRING_template(param.get_string_size(), (unsigned char*)param.get_string_data()); + *this = HEXSTRING_template(mp->get_string_size(), (unsigned char*)mp->get_string_data()); + break; + case Module_Param::MP_Expression: + if (mp->get_expr_type() == Module_Param::EXPR_CONCATENATE) { + HEXSTRING operand1, operand2; + operand1.set_param(*mp->get_operand1()); + operand2.set_param(*mp->get_operand2()); + *this = operand1 + operand2; + } + else { + param.expr_type_error("a bitstring"); + } break; default: param.type_error("hexstring template"); } - is_ifpresent = param.get_ifpresent(); - set_length_range(param); + is_ifpresent = param.get_ifpresent() || mp->get_ifpresent(); + if (param.get_length_restriction() != NULL) { + set_length_range(param); + } + else { + set_length_range(*mp); + } +} + +Module_Param* HEXSTRING_template::get_param(Module_Param_Name& param_name) const +{ + Module_Param* mp = NULL; + switch (template_selection) { + case UNINITIALIZED_TEMPLATE: + mp = new Module_Param_Unbound(); + break; + case OMIT_VALUE: + mp = new Module_Param_Omit(); + break; + case ANY_VALUE: + mp = new Module_Param_Any(); + break; + case ANY_OR_OMIT: + mp = new Module_Param_AnyOrNone(); + break; + case SPECIFIC_VALUE: + mp = single_value.get_param(param_name); + break; + case VALUE_LIST: + case COMPLEMENTED_LIST: { + if (template_selection == VALUE_LIST) { + mp = new Module_Param_List_Template(); + } + else { + mp = new Module_Param_ComplementList_Template(); + } + for (size_t i = 0; i < value_list.n_values; ++i) { + mp->add_elem(value_list.list_value[i].get_param(param_name)); + } + break; } + case STRING_PATTERN: { + unsigned char* val_cpy = (unsigned char*)Malloc(pattern_value->n_elements); + memcpy(val_cpy, pattern_value->elements_ptr, pattern_value->n_elements); + mp = new Module_Param_Hexstring_Template(pattern_value->n_elements, val_cpy); + break; } + default: + break; + } + if (is_ifpresent) { + mp->set_ifpresent(); + } + mp->set_length_restriction(get_length_range()); + return mp; } void HEXSTRING_template::encode_text(Text_Buf& text_buf) const @@ -1767,13 +1875,13 @@ void HEXSTRING_template::decode_text(Text_Buf& text_buf) } } -boolean HEXSTRING_template::is_present() const +boolean HEXSTRING_template::is_present(boolean legacy /* = FALSE */) const { if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE; - return !match_omit(); + return !match_omit(legacy); } -boolean HEXSTRING_template::match_omit() const +boolean HEXSTRING_template::match_omit(boolean legacy /* = FALSE */) const { if (is_ifpresent) return TRUE; switch (template_selection) { @@ -1782,10 +1890,14 @@ boolean HEXSTRING_template::match_omit() const return TRUE; case VALUE_LIST: case COMPLEMENTED_LIST: - for (unsigned int i = 0; i < value_list.n_values; i++) - if (value_list.list_value[i].match_omit()) return template_selection - == VALUE_LIST; - return template_selection == COMPLEMENTED_LIST; + if (legacy) { + // legacy behavior: 'omit' can appear in the value/complement list + for (unsigned int i = 0; i < value_list.n_values; i++) + if (value_list.list_value[i].match_omit()) return template_selection + == VALUE_LIST; + return template_selection == COMPLEMENTED_LIST; + } + // else fall through default: return FALSE; } @@ -1793,7 +1905,8 @@ boolean HEXSTRING_template::match_omit() const } #ifndef TITAN_RUNTIME_2 -void HEXSTRING_template::check_restriction(template_res t_res, const char* t_name) const +void HEXSTRING_template::check_restriction(template_res t_res, const char* t_name, + boolean legacy /* = FALSE */) const { if (template_selection==UNINITIALIZED_TEMPLATE) return; switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) { @@ -1805,7 +1918,7 @@ void HEXSTRING_template::check_restriction(template_res t_res, const char* t_nam template_selection==SPECIFIC_VALUE)) return; break; case TR_PRESENT: - if (!match_omit()) return; + if (!match_omit(legacy)) return; break; default: return; diff --git a/core/Hexstring.hh b/core/Hexstring.hh index 1fd91e888..7f1ff249d 100644 --- a/core/Hexstring.hh +++ b/core/Hexstring.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -107,6 +107,8 @@ public: void log() const; void set_param(Module_Param& param); + Module_Param* get_param(Module_Param_Name& param_name) const; + void encode_text(Text_Buf& text_buf) const; void decode_text(Text_Buf& text_buf); void encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, @@ -224,7 +226,7 @@ public: const HEXSTRING_ELEMENT operator[](int index_value) const; const HEXSTRING_ELEMENT operator[](const INTEGER& index_value) const; - boolean match(const HEXSTRING& other_value) const; + boolean match(const HEXSTRING& other_value, boolean legacy = FALSE) const; const HEXSTRING& valueof() const; int lengthof() const; @@ -233,25 +235,26 @@ public: HEXSTRING_template& list_item(unsigned int list_index); void log() const; - void log_match(const HEXSTRING& match_value) const; + void log_match(const HEXSTRING& match_value, boolean legacy = FALSE) const; void set_param(Module_Param& param); + Module_Param* get_param(Module_Param_Name& param_name) const; void encode_text(Text_Buf& text_buf) const; void decode_text(Text_Buf& text_buf); - boolean is_present() const; - boolean match_omit() const; + boolean is_present(boolean legacy = FALSE) const; + boolean match_omit(boolean legacy = FALSE) const; #ifdef TITAN_RUNTIME_2 void valueofv(Base_Type* value) const { *(static_cast<HEXSTRING*>(value)) = valueof(); } void set_value(template_sel other_value) { *this = other_value; } void copy_value(const Base_Type* other_value) { *this = *(static_cast<const HEXSTRING*>(other_value)); } Base_Template* clone() const { return new HEXSTRING_template(*this); } const TTCN_Typedescriptor_t* get_descriptor() const { return &HEXSTRING_descr_; } - boolean matchv(const Base_Type* other_value) const { return match(*(static_cast<const HEXSTRING*>(other_value))); } - void log_matchv(const Base_Type* match_value) const { log_match(*(static_cast<const HEXSTRING*>(match_value))); } + boolean matchv(const Base_Type* other_value, boolean legacy) const { return match(*(static_cast<const HEXSTRING*>(other_value)), legacy); } + void log_matchv(const Base_Type* match_value, boolean legacy) const { log_match(*(static_cast<const HEXSTRING*>(match_value)), legacy); } #else - void check_restriction(template_res t_res, const char* t_name=NULL) const; + void check_restriction(template_res t_res, const char* t_name=NULL, boolean legacy = FALSE) const; #endif }; diff --git a/core/ILoggerPlugin.hh b/core/ILoggerPlugin.hh index 670ba2ba3..84508658c 100644 --- a/core/ILoggerPlugin.hh +++ b/core/ILoggerPlugin.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/core/Integer.cc b/core/Integer.cc index b99752758..4d1100fdd 100644 --- a/core/Integer.cc +++ b/core/Integer.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -641,18 +641,78 @@ void INTEGER::log() const void INTEGER::set_param(Module_Param& param) { param.basic_check(Module_Param::BC_VALUE, "integer value"); - if (param.get_type()!=Module_Param::MP_Integer) param.type_error("integer value"); - clean_up(); - bound_flag = TRUE; - const int_val_t* const int_val = param.get_integer(); - native_flag = int_val->is_native(); - if (likely(native_flag)){ - val.native = int_val->get_val(); - } else { - val.openssl = BN_dup(int_val->get_val_openssl()); + Module_Param_Ptr mp = ¶m; + if (param.get_type() == Module_Param::MP_Reference) { + mp = param.get_referenced_param(); + } + switch (mp->get_type()) { + case Module_Param::MP_Integer: { + clean_up(); + bound_flag = TRUE; + const int_val_t* const int_val = mp->get_integer(); + native_flag = int_val->is_native(); + if (likely(native_flag)){ + val.native = int_val->get_val(); + } else { + val.openssl = BN_dup(int_val->get_val_openssl()); + } + break; } + case Module_Param::MP_Expression: + switch (mp->get_expr_type()) { + case Module_Param::EXPR_NEGATE: { + INTEGER operand; + operand.set_param(*mp->get_operand1()); + *this = - operand; + break; } + case Module_Param::EXPR_ADD: { + INTEGER operand1, operand2; + operand1.set_param(*mp->get_operand1()); + operand2.set_param(*mp->get_operand2()); + *this = operand1 + operand2; + break; } + case Module_Param::EXPR_SUBTRACT: { + INTEGER operand1, operand2; + operand1.set_param(*mp->get_operand1()); + operand2.set_param(*mp->get_operand2()); + *this = operand1 - operand2; + break; } + case Module_Param::EXPR_MULTIPLY: { + INTEGER operand1, operand2; + operand1.set_param(*mp->get_operand1()); + operand2.set_param(*mp->get_operand2()); + *this = operand1 * operand2; + break; } + case Module_Param::EXPR_DIVIDE: { + INTEGER operand1, operand2; + operand1.set_param(*mp->get_operand1()); + operand2.set_param(*mp->get_operand2()); + if (operand2 == 0) { + param.error("Integer division by zero."); + } + *this = operand1 / operand2; + break; } + default: + param.expr_type_error("an integer"); + break; + } + break; + default: + param.type_error("integer value"); + break; } } +Module_Param* INTEGER::get_param(Module_Param_Name& /* param_name */) const +{ + if (!bound_flag) { + return new Module_Param_Unbound(); + } + if (native_flag) { + return new Module_Param_Integer(new int_val_t(val.native)); + } + return new Module_Param_Integer(new int_val_t(BN_dup(val.openssl))); +} + void INTEGER::encode_text(Text_Buf& text_buf) const { must_bound("Text encoder: Encoding an unbound integer value."); @@ -1029,11 +1089,14 @@ int INTEGER::TEXT_encode(const TTCN_Typedescriptor_t& p_td, return encoded_length; } +unsigned char INTX_MASKS[] = { 0 /*dummy*/, 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF }; + int INTEGER::RAW_encode(const TTCN_Typedescriptor_t& p_td, RAW_enc_tree& myleaf) const { if (!native_flag) return RAW_encode_openssl(p_td, myleaf); unsigned char *bc; - int length = (p_td.raw->fieldlength + 7) / 8; // in bytes + int length; // total length, in bytes + int val_bits = 0, len_bits = 0; // only for IntX int value = val.native; boolean neg_sgbit = (value < 0) && (p_td.raw->comp == SG_SG_BIT); if (!is_bound()) { @@ -1047,11 +1110,6 @@ int INTEGER::RAW_encode(const TTCN_Typedescriptor_t& p_td, RAW_enc_tree& myleaf) INTEGER big_value(to_openssl(val.native)); // too big for native return big_value.RAW_encode_openssl(p_td, myleaf); } - if (min_bits(value) > p_td.raw->fieldlength) { - TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_LEN_ERR, - "There are insufficient bits to encode '%s' : ", p_td.name); - value = 0; // substitute with zero - } if ((value < 0) && (p_td.raw->comp == SG_NO)) { TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_SIGN_ERR, "Unsigned encoding of a negative number: %s", p_td.name); @@ -1060,28 +1118,118 @@ int INTEGER::RAW_encode(const TTCN_Typedescriptor_t& p_td, RAW_enc_tree& myleaf) if (neg_sgbit) value = -value; //myleaf.ext_bit=EXT_BIT_NO; if (myleaf.must_free) Free(myleaf.body.leaf.data_ptr); + if (p_td.raw->fieldlength == RAW_INTX) { // IntX (variable length) + val_bits = (p_td.raw->comp != SG_NO); // bits needed to store the value + int v2 = value; + if (v2 < 0 && p_td.raw->comp == SG_2COMPL) { + v2 = ~v2; + } + do { + v2 >>= 1; + ++val_bits; + } + while (v2 != 0); + len_bits = 1 + val_bits / 8; // bits needed to store the length + if (val_bits % 8 + len_bits % 8 > 8) { + // the remainder of the value bits and the length bits do not fit into + // an octet => an extra octet is needed and the length must be increased + ++len_bits; + } + length = (len_bits + val_bits + 7) / 8; + if (len_bits % 8 == 0 && val_bits % 8 != 0) { + // special case: the value can be stored on 8k - 1 octets plus the partial octet + // - len_bits = 8k is not enough, since there's no partial octet in that case + // and the length would then be followed by 8k octets (and it only indicates + // 8k - 1 further octets) + // - len_bits = 8k + 1 is too much, since there are only 8k - 1 octets + // following the partial octet (and 8k are indicated) + // solution: len_bits = 8k + 1 and insert an extra empty octet + ++len_bits; + ++length; + } + } + else { // not IntX, use the field length + length = (p_td.raw->fieldlength + 7) / 8; + if (min_bits(value) > p_td.raw->fieldlength) { + TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_LEN_ERR, + "There are insufficient bits to encode '%s' : ", p_td.name); + value = 0; // substitute with zero + } + } if (length > RAW_INT_ENC_LENGTH) { // does not fit in the small buffer myleaf.body.leaf.data_ptr = bc = (unsigned char*)Malloc(length * sizeof(*bc)); myleaf.must_free = TRUE; myleaf.data_ptr_used = TRUE; } else bc = myleaf.body.leaf.data_array; - for (int a = 0; a < length; a++) { - bc[a] = value & 0xFF; - value >>= 8; + if (p_td.raw->fieldlength == RAW_INTX) { + int i = 0; + // treat the empty space between the value and the length as if it was part + // of the value, too + val_bits = length * 8 - len_bits; + // first, encode the value + do { + bc[i] = value & INTX_MASKS[val_bits > 8 ? 8 : val_bits]; + ++i; + value >>= 8; + val_bits -= 8; + } + while (val_bits > 0); + if (neg_sgbit) { + // the sign bit is the first bit after the length + unsigned char mask = 0x80 >> len_bits % 8; + bc[i - 1] |= mask; + } + // second, encode the length (ignore the last zero) + --len_bits; + if (val_bits != 0) { + // the remainder of the length is in the same octet as the remainder of the + // value => step back onto it + --i; + } + else { + // the remainder of the length is in a separate octet + bc[i] = 0; + } + // insert the length's partial octet + unsigned char mask = 0x80; + for (int j = 0; j < len_bits % 8; ++j) { + bc[i] |= mask; + mask >>= 1; + } + if (len_bits % 8 > 0 || val_bits != 0) { + // there was a partial octet => step onto the first full octet + ++i; + } + // insert the length's full octets + while (len_bits >= 8) { + // octets containing only ones in the length + bc[i] = 0xFF; + ++i; + len_bits -= 8; + } + myleaf.length = length * 8; } - if (neg_sgbit) { - unsigned char mask = 0x01 << (p_td.raw->fieldlength - 1) % 8; - bc[length - 1] |= mask; + else { + for (int a = 0; a < length; a++) { + bc[a] = value & 0xFF; + value >>= 8; + } + if (neg_sgbit) { + unsigned char mask = 0x01 << (p_td.raw->fieldlength - 1) % 8; + bc[length - 1] |= mask; + } + myleaf.length = p_td.raw->fieldlength; } - return myleaf.length = p_td.raw->fieldlength; + return myleaf.length; } int INTEGER::RAW_encode_openssl(const TTCN_Typedescriptor_t& p_td, RAW_enc_tree& myleaf) const { unsigned char *bc = NULL; - int length = (p_td.raw->fieldlength + 7) / 8; + int length; // total length, in bytes + int val_bits = 0, len_bits = 0; // only for IntX BIGNUM *D = BN_new(); BN_copy(D, val.openssl); boolean neg_sgbit = (D->neg) && (p_td.raw->comp == SG_SG_BIT); @@ -1091,14 +1239,6 @@ int INTEGER::RAW_encode_openssl(const TTCN_Typedescriptor_t& p_td, BN_clear(D); neg_sgbit = FALSE; } - if (min_bits(D) > p_td.raw->fieldlength) { - TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_LEN_ERR, - "There are insufficient bits to encode '%s': ", p_td.name); - // `tmp = -((-tmp) & BitMaskTable[min_bits(tmp)]);' doesn't make any sense - // at all for negative values. Just simply clear the value. - BN_clear(D); - neg_sgbit = FALSE; - } if ((D->neg) && (p_td.raw->comp == SG_NO)) { TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_SIGN_ERR, "Unsigned encoding of a negative number: %s", p_td.name); @@ -1109,6 +1249,38 @@ int INTEGER::RAW_encode_openssl(const TTCN_Typedescriptor_t& p_td, // sign is stored separately from the number. Default encoding of negative // values in 2's complement form. if (myleaf.must_free) Free(myleaf.body.leaf.data_ptr); + if (p_td.raw->fieldlength == RAW_INTX) { + val_bits = BN_num_bits(D) + (p_td.raw->comp != SG_NO); // bits needed to store the value + len_bits = 1 + val_bits / 8; // bits needed to store the length + if (val_bits % 8 + len_bits % 8 > 8) { + // the remainder of the value bits and the length bits do not fit into + // an octet => an extra octet is needed and the length must be increased + ++len_bits; + } + length = (len_bits + val_bits + 7) / 8; + if (len_bits % 8 == 0 && val_bits % 8 != 0) { + // special case: the value can be stored on 8k - 1 octets plus the partial octet + // - len_bits = 8k is not enough, since there's no partial octet in that case + // and the length would then be followed by 8k octets (and it only indicates + // 8k - 1 further octets) + // - len_bits = 8k + 1 is too much, since there are only 8k - 1 octets + // following the partial octet (and 8k are indicated) + // solution: len_bits = 8k + 1 and insert an extra empty octet + ++len_bits; + ++length; + } + } + else { + length = (p_td.raw->fieldlength + 7) / 8; + if (min_bits(D) > p_td.raw->fieldlength) { + TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_LEN_ERR, + "There are insufficient bits to encode '%s': ", p_td.name); + // `tmp = -((-tmp) & BitMaskTable[min_bits(tmp)]);' doesn't make any sense + // at all for negative values. Just simply clear the value. + BN_clear(D); + neg_sgbit = FALSE; + } + } if (length > RAW_INT_ENC_LENGTH) { myleaf.body.leaf.data_ptr = bc = (unsigned char *)Malloc(length * sizeof(*bc)); @@ -1124,18 +1296,69 @@ int INTEGER::RAW_encode_openssl(const TTCN_Typedescriptor_t& p_td, for (int a = 0; a < D->dmax; a++) D->d[a] = ~D->d[a]; BN_add_word(D, 1); } - int num_bytes = BN_num_bytes(D); - for (int a = 0; a < length; a++) { - if (twos_compl && num_bytes - 1 < a) bc[a] = 0xff; - else bc[a] = (D->top ? D->d[0] : 0) & 0xff; - BN_rshift(D, D, 8); + if (p_td.raw->fieldlength == RAW_INTX) { + int i = 0; + // treat the empty space between the value and the length as if it was part + // of the value, too + val_bits = length * 8 - len_bits; + // first, encode the value + do { + bc[i] = (D->top ? D->d[0] : (twos_compl ? 0xFF : 0)) & INTX_MASKS[val_bits > 8 ? 8 : val_bits]; + ++i; + BN_rshift(D, D, 8); + val_bits -= 8; + } + while (val_bits > 0); + if (neg_sgbit) { + // the sign bit is the first bit after the length + unsigned char mask = 0x80 >> len_bits % 8; + bc[i - 1] |= mask; + } + // second, encode the length (ignore the last zero) + --len_bits; + if (val_bits != 0) { + // the remainder of the length is in the same octet as the remainder of the + // value => step back onto it + --i; + } + else { + // the remainder of the length is in a separate octet + bc[i] = 0; + } + // insert the length's partial octet + unsigned char mask = 0x80; + for (int j = 0; j < len_bits % 8; ++j) { + bc[i] |= mask; + mask >>= 1; + } + if (len_bits % 8 > 0 || val_bits != 0) { + // there was a partial octet => step onto the first full octet + ++i; + } + // insert the length's full octets + while (len_bits >= 8) { + // octets containing only ones in the length + bc[i] = 0xFF; + ++i; + len_bits -= 8; + } + myleaf.length = length * 8; } - if (neg_sgbit) { - unsigned char mask = 0x01 << (p_td.raw->fieldlength - 1) % 8; - bc[length - 1] |= mask; + else { + int num_bytes = BN_num_bytes(D); + for (int a = 0; a < length; a++) { + if (twos_compl && num_bytes - 1 < a) bc[a] = 0xff; + else bc[a] = (D->top ? D->d[0] : 0) & 0xff; + BN_rshift(D, D, 8); + } + if (neg_sgbit) { + unsigned char mask = 0x01 << (p_td.raw->fieldlength - 1) % 8; + bc[length - 1] |= mask; + } + BN_free(D); + myleaf.length = p_td.raw->fieldlength; } - BN_free(D); - return myleaf.length = p_td.raw->fieldlength; + return myleaf.length; } int INTEGER::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& buff, @@ -1145,44 +1368,118 @@ int INTEGER::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& buff, bound_flag = FALSE; int prepaddlength = buff.increase_pos_padd(p_td.raw->prepadding); limit -= prepaddlength; - int decode_length = p_td.raw->fieldlength; + RAW_coding_par cp; + boolean orders = FALSE; + if (p_td.raw->bitorderinoctet == ORDER_MSB) orders = TRUE; + if (p_td.raw->bitorderinfield == ORDER_MSB) orders = !orders; + cp.bitorder = orders ? ORDER_MSB : ORDER_LSB; + orders = FALSE; + if (p_td.raw->byteorder == ORDER_MSB) orders = TRUE; + if (p_td.raw->bitorderinfield == ORDER_MSB) orders = !orders; + cp.byteorder = orders ? ORDER_MSB : ORDER_LSB; + cp.fieldorder = p_td.raw->fieldorder; + cp.hexorder = ORDER_LSB; + int decode_length = 0; + int len_bits = 0; // only for IntX (amount of bits used to store the length) + unsigned char len_data = 0; // only for IntX (an octet used to store the length) + int partial_octet_bits = 0; // only for IntX (amount of value bits in the partial octet) + if (p_td.raw->fieldlength == RAW_INTX) { + // extract the length + do { + // check if at least 8 bits are available in the buffer + if (8 > limit) { + if (!no_err) { + TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_LEN_ERR, + "There are not enough bits in the buffer to decode the length of IntX " + "type %s (needed: %d, found: %d).", p_td.name, len_bits + 8, + len_bits + limit); + } + return -TTCN_EncDec::ET_LEN_ERR; + } + else { + limit -= 8; + } + int nof_unread_bits = buff.unread_len_bit(); + if (nof_unread_bits < 8) { + if (!no_err) { + TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_INCOMPL_MSG, + "There are not enough bits in the buffer to decode the length of IntX " + "type %s (needed: %d, found: %d).", p_td.name, len_bits + 8, + len_bits + nof_unread_bits); + } + return -TTCN_EncDec::ET_INCOMPL_MSG; + } + + // extract the next length octet (or partial length octet) + buff.get_b(8, &len_data, cp, top_bit_ord); + unsigned char mask = 0x80; + do { + ++len_bits; + if (len_data & mask) { + mask >>= 1; + } + else { + // the first zero signals the end of the length + // the rest of the bits in the octet are part of the value + partial_octet_bits = (8 - len_bits % 8) % 8; + + // decode_length only stores the amount of bits in full octets needed + // by the value, the bits in the partial octet are stored by len_data + decode_length = 8 * (len_bits - 1); + break; + } + } + while (len_bits % 8 != 0); + } + while (decode_length == 0 && partial_octet_bits == 0); + } + else { + // not IntX, use the static field length + decode_length = p_td.raw->fieldlength; + } if (decode_length > limit) { - if (no_err) return -TTCN_EncDec::ET_LEN_ERR; - TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_LEN_ERR, - "There are not enough bits in the buffer to decode type %s (needed: %d, " - "found: %d).", p_td.name, decode_length, limit); + if (!no_err) { + TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_LEN_ERR, + "There are not enough bits in the buffer to decode%s type %s (needed: %d, " + "found: %d).", p_td.raw->fieldlength == RAW_INTX ? " the value of IntX" : "", + p_td.name, decode_length, limit); + } + if (no_err || p_td.raw->fieldlength == RAW_INTX) { + return -TTCN_EncDec::ET_LEN_ERR; + } decode_length = limit; } int nof_unread_bits = buff.unread_len_bit(); if (decode_length > nof_unread_bits) { - if (no_err) return -TTCN_EncDec::ET_INCOMPL_MSG; - TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_INCOMPL_MSG, - "There are not enough bits in the buffer to decode type %s (needed: %d, " - "found: %d).", p_td.name, decode_length, nof_unread_bits); + if (!no_err) { + TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_INCOMPL_MSG, + "There are not enough bits in the buffer to decode%s type %s (needed: %d, " + "found: %d).", p_td.raw->fieldlength == RAW_INTX ? " the value of IntX" : "", + p_td.name, decode_length, nof_unread_bits); + } + if (no_err || p_td.raw->fieldlength == RAW_INTX) { + return -TTCN_EncDec::ET_INCOMPL_MSG; + } decode_length = nof_unread_bits; } clean_up(); if (decode_length < 0) return -1; - else if (decode_length == 0) { + else if (decode_length == 0 && partial_octet_bits == 0) { native_flag = TRUE; val.native = 0; } else { int tmp = 0; int twos_compl = 0; - unsigned char *data = (unsigned char *) Malloc((decode_length + 7) / 8); - RAW_coding_par cp; - boolean orders = FALSE; - if (p_td.raw->bitorderinoctet == ORDER_MSB) orders = TRUE; - if (p_td.raw->bitorderinfield == ORDER_MSB) orders = !orders; - cp.bitorder = orders ? ORDER_MSB : ORDER_LSB; - orders = FALSE; - if (p_td.raw->byteorder == ORDER_MSB) orders = TRUE; - if (p_td.raw->bitorderinfield == ORDER_MSB) orders = !orders; - cp.byteorder = orders ? ORDER_MSB : ORDER_LSB; - cp.fieldorder = p_td.raw->fieldorder; - cp.hexorder = ORDER_LSB; + unsigned char *data = (unsigned char *) Malloc( + (decode_length + partial_octet_bits + 7) / 8); buff.get_b((size_t) decode_length, data, cp, top_bit_ord); + if (partial_octet_bits != 0) { + // in case there are value bits in the last length octet (only for IntX), + // these need to be appended to the extracted data + data[decode_length / 8] = len_data; + decode_length += partial_octet_bits; + } int end_pos = decode_length; int idx = (end_pos - 1) / 8; boolean negativ_num = FALSE; @@ -1261,7 +1558,7 @@ int INTEGER::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& buff, } end: decode_length += buff.increase_pos_padd(p_td.raw->padding); bound_flag = TRUE; - return decode_length + prepaddlength; + return decode_length + prepaddlength + len_bits; } int INTEGER::XER_encode(const XERdescriptor_t& p_td, TTCN_Buffer& p_buf, @@ -1747,7 +2044,7 @@ INTEGER_template& INTEGER_template::operator= return *this; } -boolean INTEGER_template::match(int other_value) const +boolean INTEGER_template::match(int other_value, boolean /* legacy */) const { switch (template_selection) { case SPECIFIC_VALUE: @@ -1787,7 +2084,8 @@ boolean INTEGER_template::match(int other_value) const return FALSE; } -boolean INTEGER_template::match(const INTEGER& other_value) const +boolean INTEGER_template::match(const INTEGER& other_value, + boolean /* legacy */) const { if (!other_value.is_bound()) return FALSE; switch (template_selection) { @@ -2001,7 +2299,8 @@ void INTEGER_template::log() const log_ifpresent(); } -void INTEGER_template::log_match(const INTEGER& match_value) const +void INTEGER_template::log_match(const INTEGER& match_value, + boolean /* legacy */) const { if (TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity() && TTCN_Logger::get_logmatch_buffer_len() != 0) { @@ -2017,7 +2316,11 @@ void INTEGER_template::log_match(const INTEGER& match_value) const void INTEGER_template::set_param(Module_Param& param) { param.basic_check(Module_Param::BC_TEMPLATE, "integer template"); - switch (param.get_type()) { + Module_Param_Ptr mp = ¶m; + if (param.get_type() == Module_Param::MP_Reference) { + mp = param.get_referenced_param(); + } + switch (mp->get_type()) { case Module_Param::MP_Omit: *this = OMIT_VALUE; break; @@ -2028,34 +2331,142 @@ void INTEGER_template::set_param(Module_Param& param) { *this = ANY_OR_OMIT; break; case Module_Param::MP_List_Template: - case Module_Param::MP_ComplementList_Template: - set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, param.get_size()); - for (size_t i=0; i<param.get_size(); i++) { - list_item(i).set_param(*param.get_elem(i)); + case Module_Param::MP_ComplementList_Template: { + INTEGER_template temp; + temp.set_type(mp->get_type() == Module_Param::MP_List_Template ? + VALUE_LIST : COMPLEMENTED_LIST, mp->get_size()); + for (size_t i=0; i<mp->get_size(); i++) { + temp.list_item(i).set_param(*mp->get_elem(i)); } - break; + *this = temp; + break; } case Module_Param::MP_Integer: { INTEGER tmp; - tmp.set_val(*param.get_integer()); + tmp.set_val(*mp->get_integer()); *this = tmp; } break; case Module_Param::MP_IntRange: { set_type(VALUE_RANGE); - if (param.get_lower_int()!=NULL) { + if (mp->get_lower_int()!=NULL) { INTEGER tmp; - tmp.set_val(*param.get_lower_int()); + tmp.set_val(*mp->get_lower_int()); set_min(tmp); } - if (param.get_upper_int()!=NULL) { + if (mp->get_upper_int()!=NULL) { INTEGER tmp; - tmp.set_val(*param.get_upper_int()); + tmp.set_val(*mp->get_upper_int()); set_max(tmp); } } break; + case Module_Param::MP_Expression: + switch (mp->get_expr_type()) { + case Module_Param::EXPR_NEGATE: { + INTEGER operand; + operand.set_param(*mp->get_operand1()); + *this = - operand; + break; } + case Module_Param::EXPR_ADD: { + INTEGER operand1, operand2; + operand1.set_param(*mp->get_operand1()); + operand2.set_param(*mp->get_operand2()); + *this = operand1 + operand2; + break; } + case Module_Param::EXPR_SUBTRACT: { + INTEGER operand1, operand2; + operand1.set_param(*mp->get_operand1()); + operand2.set_param(*mp->get_operand2()); + *this = operand1 - operand2; + break; } + case Module_Param::EXPR_MULTIPLY: { + INTEGER operand1, operand2; + operand1.set_param(*mp->get_operand1()); + operand2.set_param(*mp->get_operand2()); + *this = operand1 * operand2; + break; } + case Module_Param::EXPR_DIVIDE: { + INTEGER operand1, operand2; + operand1.set_param(*mp->get_operand1()); + operand2.set_param(*mp->get_operand2()); + if (operand2 == 0) { + param.error("Integer division by zero."); + } + *this = operand1 / operand2; + break; } + default: + param.expr_type_error("an integer"); + break; + } + break; default: param.type_error("integer template"); } - is_ifpresent = param.get_ifpresent(); + is_ifpresent = param.get_ifpresent() || mp->get_ifpresent(); +} + +Module_Param* INTEGER_template::get_param(Module_Param_Name& param_name) const +{ + Module_Param* mp = NULL; + switch (template_selection) { + case UNINITIALIZED_TEMPLATE: + mp = new Module_Param_Unbound(); + break; + case OMIT_VALUE: + mp = new Module_Param_Omit(); + break; + case ANY_VALUE: + mp = new Module_Param_Any(); + break; + case ANY_OR_OMIT: + mp = new Module_Param_AnyOrNone(); + break; + case SPECIFIC_VALUE: + if (likely(int_val.native_flag)) { + mp = new Module_Param_Integer(new int_val_t(int_val.val.native)); + } + else { + mp = new Module_Param_Integer(new int_val_t(BN_dup(int_val.val.openssl))); + } + break; + case VALUE_LIST: + case COMPLEMENTED_LIST: { + if (template_selection == VALUE_LIST) { + mp = new Module_Param_List_Template(); + } + else { + mp = new Module_Param_ComplementList_Template(); + } + for (size_t i = 0; i < value_list.n_values; ++i) { + mp->add_elem(value_list.list_value[i].get_param(param_name)); + } + break; } + case VALUE_RANGE: { + int_val_t* lower_bound = NULL; + int_val_t* upper_bound = NULL; + if (value_range.min_is_present) { + if (value_range.min_value.native_flag) { + lower_bound = new int_val_t(value_range.min_value.val.native); + } + else { + lower_bound = new int_val_t(BN_dup(value_range.min_value.val.openssl)); + } + } + if (value_range.max_is_present) { + if (value_range.max_value.native_flag) { + upper_bound = new int_val_t(value_range.max_value.val.native); + } + else { + upper_bound = new int_val_t(BN_dup(value_range.max_value.val.openssl)); + } + } + mp = new Module_Param_IntRange(lower_bound, upper_bound); + break; } + default: + break; + } + if (is_ifpresent) { + mp->set_ifpresent(); + } + return mp; } void INTEGER_template::encode_text(Text_Buf& text_buf) const @@ -2140,13 +2551,13 @@ void INTEGER_template::decode_text(Text_Buf& text_buf) } } -boolean INTEGER_template::is_present() const +boolean INTEGER_template::is_present(boolean legacy /* = FALSE */) const { if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE; - return !match_omit(); + return !match_omit(legacy); } -boolean INTEGER_template::match_omit() const +boolean INTEGER_template::match_omit(boolean legacy /* = FALSE */) const { if (is_ifpresent) return TRUE; switch (template_selection) { @@ -2155,10 +2566,14 @@ boolean INTEGER_template::match_omit() const return TRUE; case VALUE_LIST: case COMPLEMENTED_LIST: - for (unsigned int i=0; i<value_list.n_values; i++) - if (value_list.list_value[i].match_omit()) - return template_selection==VALUE_LIST; - return template_selection==COMPLEMENTED_LIST; + if (legacy) { + // legacy behavior: 'omit' can appear in the value/complement list + for (unsigned int i=0; i<value_list.n_values; i++) + if (value_list.list_value[i].match_omit()) + return template_selection==VALUE_LIST; + return template_selection==COMPLEMENTED_LIST; + } + // else fall through default: return FALSE; } @@ -2166,7 +2581,8 @@ boolean INTEGER_template::match_omit() const } #ifndef TITAN_RUNTIME_2 -void INTEGER_template::check_restriction(template_res t_res, const char* t_name) const +void INTEGER_template::check_restriction(template_res t_res, const char* t_name, + boolean legacy /* = FALSE */) const { if (template_selection==UNINITIALIZED_TEMPLATE) return; switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) { @@ -2178,7 +2594,7 @@ void INTEGER_template::check_restriction(template_res t_res, const char* t_name) template_selection==SPECIFIC_VALUE)) return; break; case TR_PRESENT: - if (!match_omit()) return; + if (!match_omit(legacy)) return; break; default: return; diff --git a/core/Integer.hh b/core/Integer.hh index bf6ec359c..54cf6478d 100644 --- a/core/Integer.hh +++ b/core/Integer.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -129,6 +129,7 @@ public: #endif void set_param(Module_Param& param); + Module_Param* get_param(Module_Param_Name& param_name) const; void encode_text(Text_Buf& text_buf) const; void decode_text(Text_Buf& text_buf); @@ -256,8 +257,8 @@ public: INTEGER_template& operator=(const OPTIONAL<INTEGER>& other_value); INTEGER_template& operator=(const INTEGER_template& other_value); - boolean match(int other_value) const; - boolean match(const INTEGER& other_value) const; + boolean match(int other_value, boolean legacy = FALSE) const; + boolean match(const INTEGER& other_value, boolean legacy = FALSE) const; INTEGER valueof() const; /** Sets the template type. @@ -307,15 +308,16 @@ public: void set_max(const INTEGER& max_value); void log() const; - void log_match(const INTEGER& match_value) const; + void log_match(const INTEGER& match_value, boolean legacy = FALSE) const; void set_param(Module_Param& param); + Module_Param* get_param(Module_Param_Name& param_name) const; void encode_text(Text_Buf& text_buf) const; void decode_text(Text_Buf& text_buf); - boolean is_present() const; - boolean match_omit() const; + boolean is_present(boolean legacy = FALSE) const; + boolean match_omit(boolean legacy = FALSE) const; #ifdef TITAN_RUNTIME_2 void valueofv(Base_Type* value) const { *(static_cast<INTEGER*>(value)) = valueof(); } @@ -323,10 +325,10 @@ public: void copy_value(const Base_Type* other_value) { *this = *(static_cast<const INTEGER*>(other_value)); } Base_Template* clone() const { return new INTEGER_template(*this); } const TTCN_Typedescriptor_t* get_descriptor() const { return &INTEGER_descr_; } - boolean matchv(const Base_Type* other_value) const { return match(*(static_cast<const INTEGER*>(other_value))); } - void log_matchv(const Base_Type* match_value) const { log_match(*(static_cast<const INTEGER*>(match_value))); } + boolean matchv(const Base_Type* other_value, boolean legacy) const { return match(*(static_cast<const INTEGER*>(other_value)), legacy); } + void log_matchv(const Base_Type* match_value, boolean legacy) const { log_match(*(static_cast<const INTEGER*>(match_value)), legacy); } #else - void check_restriction(template_res t_res, const char* t_name=NULL) const; + void check_restriction(template_res t_res, const char* t_name=NULL, boolean legacy = FALSE) const; #endif }; diff --git a/core/JSON.cc b/core/JSON.cc index ad429c413..11a426347 100644 --- a/core/JSON.cc +++ b/core/JSON.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/core/JSON.hh b/core/JSON.hh index 6c9357d69..662884b44 100644 --- a/core/JSON.hh +++ b/core/JSON.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -15,15 +15,15 @@ struct TTCN_JSONdescriptor_t { /** Encoding only. * true : use the null literal to encode omitted fields in records or sets - * example: { field1 : value1, field2 : null, field3 : value3 } + * example: { "field1" : value1, "field2" : null, "field3" : value3 } * false : skip both the field name and the value if a field is omitted - * example: { field1 : value1, field3 : value3 } + * example: { "field1" : value1, "field3" : value3 } * The decoder will always accept both variants. */ boolean omit_as_null; /** An alias for the name of the field (in a record, set or union). * Encoding: this alias will appear instead of the name of the field - * Decoding: the decoder will look for this alias instead of the field's real name*/ + * Decoding: the decoder will look for this alias instead of the field's real name */ const char* alias; /** If set, the union will be encoded as a JSON value instead of a JSON object @@ -34,13 +34,20 @@ struct TTCN_JSONdescriptor_t boolean as_value; /** Decoding only. - * Fields that don't appear in the JSON code will have this value assigned to - * them. */ + * Fields that don't appear in the JSON code will decode this value instead. */ const char* default_value; + + /** If set, encodes unbound fields of records and sets as null and inserts a + * meta info field into the JSON object specifying that the field is unbound. + * The decoder sets the field to unbound if the meta info field is present and + * the field's value in the JSON code is either null or a valid value for that + * field. + * Example: { "field1" : null, "metainfo field1" : "unbound" } */ + boolean metainfo_unbound; }; -/** This macro makes sure that error and warning messages will only be displayed - * if the silent flag is not set. */ +/** This macro makes sure that coding errors will only be displayed if the silent + * flag is not set. */ #define JSON_ERROR if(!p_silent) TTCN_EncDec_ErrorContext::error // JSON descriptors for base types @@ -78,12 +85,24 @@ enum json_decode_error { /** The JSON tokeniser couldn't extract a valid token (JSON_TOKEN_ERROR) or the * format of the data extracted is invalid. In either case, this is a fatal * error and the decoding cannot continue. - * @note This error code is always preceeded by a dynamic test case error, if the + * @note This error code is always preceeded by a decoding error, if the * caller receives this code, it means that decoding error behavior is (at least * partially) set to warnings. */ JSON_ERROR_FATAL = -2 }; +/** JSON meta info states during decoding */ +enum json_metainfo_t { + /** The field does not have meta info enabled */ + JSON_METAINFO_NOT_APPLICABLE, + /** Initial state if meta info is enabled for the field */ + JSON_METAINFO_NONE, + /** The field's value is set to null, but no meta info was received for the field yet */ + JSON_METAINFO_NEEDED, + /** Meta info received: the field is unbound */ + JSON_METAINFO_UNBOUND +}; + // JSON decoding error messages #define JSON_DEC_BAD_TOKEN_ERROR "Failed to extract valid token, invalid JSON format%s" #define JSON_DEC_FORMAT_ERROR "Invalid JSON %s format, expecting %s value" @@ -97,6 +116,9 @@ enum json_decode_error { #define JSON_DEC_MISSING_FIELD_ERROR "No JSON data found for field '%s'" #define JSON_DEC_STATIC_OBJECT_END_TOKEN_ERROR "Invalid JSON token, expecting JSON object end mark%s" #define JSON_DEC_AS_VALUE_ERROR "Extracted JSON %s could not be decoded by any field of the union" +#define JSON_DEC_METAINFO_NAME_ERROR "Meta info provided for non-existent field '%s'" +#define JSON_DEC_METAINFO_VALUE_ERROR "Invalid meta info for field '%s'" +#define JSON_DEC_METAINFO_NOT_APPLICABLE "Meta info not applicable to field '%s'" #endif /* JSON_HH_ */ diff --git a/core/LegacyLogger.cc b/core/LegacyLogger.cc index 8fc5e90a0..782b6cc23 100644 --- a/core/LegacyLogger.cc +++ b/core/LegacyLogger.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/core/LegacyLogger.hh b/core/LegacyLogger.hh index c5e13f7eb..ec88fa7e8 100644 --- a/core/LegacyLogger.hh +++ b/core/LegacyLogger.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/core/Logger.cc b/core/Logger.cc index 03752d141..ceda4d050 100644 --- a/core/Logger.cc +++ b/core/Logger.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/core/Logger.hh b/core/Logger.hh index 60ab5a6f2..66056175e 100644 --- a/core/Logger.hh +++ b/core/Logger.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/core/LoggerPlugin.cc b/core/LoggerPlugin.cc index ac5a5ec96..250cca4f0 100644 --- a/core/LoggerPlugin.cc +++ b/core/LoggerPlugin.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/core/LoggerPlugin.hh b/core/LoggerPlugin.hh index 8b39ea507..18f6cbf4f 100644 --- a/core/LoggerPlugin.hh +++ b/core/LoggerPlugin.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/core/LoggerPluginManager.cc b/core/LoggerPluginManager.cc index 9558b470f..86055b602 100644 --- a/core/LoggerPluginManager.cc +++ b/core/LoggerPluginManager.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/core/LoggerPluginManager.hh b/core/LoggerPluginManager.hh index 221d087b3..1c2542951 100644 --- a/core/LoggerPluginManager.hh +++ b/core/LoggerPluginManager.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/core/LoggerPlugin_dynamic.cc b/core/LoggerPlugin_dynamic.cc index 5d5a2d8dc..5c2afc7a4 100644 --- a/core/LoggerPlugin_dynamic.cc +++ b/core/LoggerPlugin_dynamic.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/core/LoggerPlugin_static.cc b/core/LoggerPlugin_static.cc index d8aa336d2..6b373721a 100644 --- a/core/LoggerPlugin_static.cc +++ b/core/LoggerPlugin_static.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/core/LoggingBits.cc b/core/LoggingBits.cc index 4d7cf40f9..7787a647c 100644 --- a/core/LoggingBits.cc +++ b/core/LoggingBits.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/core/LoggingBits.hh b/core/LoggingBits.hh index e7b99fb63..1a44df928 100644 --- a/core/LoggingBits.hh +++ b/core/LoggingBits.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/core/LoggingParam.hh b/core/LoggingParam.hh index ebdf04f09..7dd2c7ec0 100644 --- a/core/LoggingParam.hh +++ b/core/LoggingParam.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/core/Makefile b/core/Makefile index ce0f040b6..3b3cde411 100644 --- a/core/Makefile +++ b/core/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 @@ -85,12 +85,12 @@ Module_list.cc Objid.cc Octetstring.cc Parallel_main.cc Port.cc RAW.cc \ Runtime.cc Single_main.cc Snapshot.cc Struct_of.cc Template.cc TEXT.cc \ Textbuf.cc Timer.cc Param_Types.cc Universal_charstring.cc \ Verdicttype.cc XER.cc XmlReader.cc TitanLoggerControlImpl.cc TCov.cc JSON.cc \ -Profiler.cc $(RT2_SOURCES) +Profiler.cc ProfilerTools.cc ProfMerge_main.cc $(RT2_SOURCES) # Keep GENERATED_SOURCES at the beginning. This may speed up parallel builds # by starting early the compilation of the largest files. SOURCES := $(GENERATED_SOURCES) $(STATIC_SOURCES) - + ifeq ($(FUNCTION_TEST_RUNTIME), yes) RT2_SUFFIX := -rt2 @@ -124,6 +124,9 @@ endif OBJECTS := $(patsubst %.cc,%.o,$(patsubst %.c,%.o,$(SOURCES))) + +PROFMERGE_OBJECTS := ProfMerge_main.o ProfilerTools.profmerge.o \ + ../common/JSON_Tokenizer.o ../common/memory.o COMMON_OBJECTS := $(addprefix ../common/, memory.o pattern_la.o pattern_p.o \ config_preproc.o config_preproc_la.o config_preproc_p.tab.o \ @@ -136,6 +139,7 @@ endif ifeq ($(LICENSING), yes) COMMON_OBJECTS += ../common/license.o + PROFMERGE_OBJECTS += ../common/license.o endif ifdef REGEX_DIR @@ -146,10 +150,10 @@ ifeq ($(USAGE_STATS), yes) COMMON_OBJECTS += ../common/usage_stats.o endif -LIBRARY_OBJECTS_NOMAIN := $(filter-out Single_main.o Parallel_main.o, \ +LIBRARY_OBJECTS_NOMAIN := $(filter-out Single_main.o Parallel_main.o ProfMerge_main.o, \ $(OBJECTS)) $(COMMON_OBJECTS) -TOBECLEANED := LoggerPlugin_static.o LoggerPlugin_dynamic.o +TOBECLEANED := LoggerPlugin_static.o LoggerPlugin_dynamic.o ProfilerTools.profmerge.o DEPFILES := $(patsubst %.cc,%.d,$(patsubst %.c,%.d,$(SOURCES))) @@ -163,7 +167,7 @@ Port.hh Event_Handler.hh Struct_of.hh Array.hh Optional.hh Textbuf.hh Encdec.hh Module_list.hh Parameters.h Addfunc.hh RAW.hh BER.hh TEXT.hh ASN_Null.hh \ ASN_Any.hh ASN_External.hh ASN_EmbeddedPDV.hh ASN_CharacterString.hh XER.hh \ XmlReader.hh cversion.h TitanLoggerControl.ttcn TitanLoggerApi.xsd Vector.hh \ -JSON.hh Profiler.hh RefdIndex.hh +JSON.hh Profiler.hh RefdIndex.hh ProfilerTools.hh # Copied during "make install" ifdef REGEX_DIR @@ -175,6 +179,9 @@ LIBRARY := libttcn3$(RT2_SUFFIX).a PARALLEL_LIBRARY := libttcn3$(RT2_SUFFIX)-parallel.a SHAREDLIB := libttcn3$(RT2_SUFFIX)-dynamic.so PARALLEL_SHAREDLIB := libttcn3$(RT2_SUFFIX)-parallel-dynamic.so + +# Executables +PROGRAMS := ttcn3_profmerge$(EXESUFFIX) TARGETS := $(LIBRARY) $(PARALLEL_LIBRARY) @@ -200,18 +207,16 @@ ifneq ($(FUNCTION_TEST_RUNTIME), yes) endif # Only for testing the consistency of libraries: -#PROGRAMS := - -PROGRAMS := single$(RT2_SUFFIX)$(EXESUFFIX) parallel$(RT2_SUFFIX)$(EXESUFFIX) +TEST_PROGRAMS := single$(RT2_SUFFIX)$(EXESUFFIX) parallel$(RT2_SUFFIX)$(EXESUFFIX) ifeq ($(DYNAMIC_LINKING), yes) -PROGRAMS += single$(RT2_SUFFIX)-dynamic$(EXESUFFIX) parallel$(RT2_SUFFIX)-dynamic$(EXESUFFIX) +TEST_PROGRAMS += single$(RT2_SUFFIX)-dynamic$(EXESUFFIX) parallel$(RT2_SUFFIX)-dynamic$(EXESUFFIX) endif ifneq ($(FUNCTION_TEST_RUNTIME), yes) -PROGRAMS += gccversion$(EXESUFFIX) +TEST_PROGRAMS += gccversion$(EXESUFFIX) endif -TOBECLEANED += $(PROGRAMS) cversion.h $(GENERATED_MODULES) +TOBECLEANED += $(TEST_PROGRAMS) cversion.h $(GENERATED_MODULES) ifdef REGEX_DIR CPPFLAGS += -I$(REGEX_DIR)/include @@ -226,12 +231,14 @@ endif CPPFLAGS += -I$(COMMON_DIR) +MANPAGES := ttcn3_profmerge.1 + # # # # # # # # # targets -all: $(TARGETS) $(PROGRAMS) +all: $(TARGETS) $(PROGRAMS) $(TEST_PROGRAMS) run: all # Verify that the executables are runnable. - for p in $(filter-out gccversion%,$(PROGRAMS)); do echo $$p; LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH ./$$p -l; if [ $$? -ne 0 ] ; then exit $$?; fi done + for p in $(filter-out gccversion%,$(TEST_PROGRAMS)); do echo $$p; LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH ./$$p -l; if [ $$? -ne 0 ] ; then exit $$?; fi done # xsd -> ttcn $(GENERATED_MODULES): $(SCHEMAS) ../xsdconvert/xsd2ttcn$(EXESUFFIX) @@ -239,7 +246,7 @@ $(GENERATED_MODULES): $(SCHEMAS) ../xsdconvert/xsd2ttcn$(EXESUFFIX) sed -e 's/XSD.String/charstring/g;s/XSD.AnySimpleType/charstring/g;s/XSD.Integer/integer/g;s/XSD.Float/float/g;s/XSD.Double/float/g;s/XSD.Boolean/boolean/g;s/import from XSD all;//g' TitanLoggerApi.ttcn >TitanLoggerApi.ttcn_ mv TitanLoggerApi.ttcn_ TitanLoggerApi.ttcn -install: $(TARGETS) +install: $(TARGETS) $(PROGRAMS) ifeq ($(DYNAMIC_LINKING), yes) ifeq ($(DEBUG), no) $(STRIP) $(SHAREDLIB) $(PARALLEL_SHAREDLIB) @@ -250,6 +257,10 @@ endif ifneq ($(FUNCTION_TEST_RUNTIME), yes) mkdir -p $(INCDIR) cp $(HEADERS) $(INCDIR) + mkdir -p $(BINDIR) + cp $(PROGRAMS) $(BINDIR) + mkdir -p $(MANDIR)/man1 + cp $(MANPAGES) $(MANDIR)/man1 ifeq ($(DYNAMIC_LINKING), yes) ifneq ($(OPENSSL_DIR), default) (cd $(OPENSSL_DIR)/lib && tar -cf - libcrypto.so*) |\ @@ -277,6 +288,9 @@ parallel$(RT2_SUFFIX)$(EXESUFFIX): $(PARALLEL_LIBRARY) parallel$(RT2_SUFFIX)-dynamic$(EXESUFFIX): Parallel_main.o $(PARALLEL_SHAREDLIB) $(CXX) $(LDFLAGS) -o $@ $^ -lcrypto $($(PLATFORM)_LIBS) + +ttcn3_profmerge$(EXESUFFIX): $(PROFMERGE_OBJECTS) + $(CXX) $(LDFLAGS) -o $@ $^ $(LICENSE_LIBS) $($(PLATFORM)_LIBS) # # # # static link libraries $(LIBRARY): $(LIBRARY_OBJECTS_NOMAIN) LoggerPlugin_static.o Single_main.o @@ -368,7 +382,7 @@ $(PREGENERATED_SOURCES).compiled:: $(PREGENERATOR_MODULES) mkdir -p $(APIDIR) ../compiler2/compiler$(EXESUFFIX) -F $(TTCN_COMPILER_FLAGS) $^ - $? touch $@ - + include ../Makefile.genrules # These are not in STATIC_SOURCES, so vpath is not created for them diff --git a/core/Message_types.hh b/core/Message_types.hh index df5d0d460..a3f05eb8e 100644 --- a/core/Message_types.hh +++ b/core/Message_types.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/core/Module_list.cc b/core/Module_list.cc index e6f19ba6c..50fddbefe 100644 --- a/core/Module_list.cc +++ b/core/Module_list.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -189,6 +189,62 @@ void Module_List::set_param(Module_Param& param) } } +Module_Param* Module_List::get_param(Module_Param_Name& param_name) +{ + // The first segment in the parameter name can either be the module name, + // or the module parameter name - both must be checked + const char* const first_name = param_name.get_current_name(); + const char* second_name = NULL; + Module_Param* param = NULL; + + // Check if the first name segment is an existing module name + TTCN_Module *module_ptr = lookup_module(first_name); + if (module_ptr != NULL && module_ptr->get_param_func != NULL && param_name.next_name()) { + param = module_ptr->get_param_func(param_name); + if (param == NULL) { + second_name = param_name.get_current_name(); // for error messages + } + } + + // If not found, check if the first name segment was the module parameter name + // (even if it matched a module name) + if (param == NULL) { + param_name.next_name(-1); // set the position back to the first segment + for (TTCN_Module *list_iter = list_head; list_iter != NULL; + list_iter = list_iter->list_next) { + if (list_iter->get_param_func != NULL) { + param = list_iter->get_param_func(param_name); + if (param != NULL) { + break; + } + } + } + } + + // Still not found -> error + if (param == NULL) { + if (module_ptr == NULL) { + TTCN_error("Referenced module parameter cannot be found. Module `%s' does not exist, " + "and no parameter with name `%s' exists in any module.", + first_name, first_name); + } else if (module_ptr->get_param_func == NULL) { + TTCN_error("Referenced module parameter cannot be found. Module `%s' does not have " + "parameters, and no parameter with name `%s' exists in other modules.", + first_name, first_name); + } else { + TTCN_error("Referenced module parameter cannot be found. No parameter with name `%s' " + "exists in module `%s', and no parameter with name `%s' exists in any module.", + second_name, first_name, first_name); + } + } + else if (param->get_type() == Module_Param::MP_Unbound) { + delete param; + TTCN_error("Referenced module parameter '%s' is unbound.", param_name.get_str()); + } + + return param; +} + void Module_List::log_param() { for (TTCN_Module *list_iter = list_head; list_iter != NULL; @@ -669,6 +725,7 @@ TTCN_Module::TTCN_Module(const char *par_module_name, const namespace_t *par_namespaces, init_func_t par_post_init_func, set_param_func_t par_set_param_func, + get_param_func_t par_get_param_func, log_param_func_t par_log_param_func, initialize_component_func_t par_initialize_component_func, start_func_t par_start_func, @@ -692,6 +749,7 @@ TTCN_Module::TTCN_Module(const char *par_module_name, , pre_init_called(FALSE) , post_init_called(FALSE) , set_param_func(par_set_param_func) +, get_param_func(par_get_param_func) , log_param_func(par_log_param_func) , initialize_component_func(par_initialize_component_func) , start_func(par_start_func) @@ -731,6 +789,7 @@ TTCN_Module::TTCN_Module(const char *par_module_name, , pre_init_called(FALSE) , post_init_called(FALSE) , set_param_func(NULL) +, get_param_func(NULL) , log_param_func(NULL) , initialize_component_func(NULL) , start_func(NULL) diff --git a/core/Module_list.hh b/core/Module_list.hh index 76613cedd..72c34bbd0 100644 --- a/core/Module_list.hh +++ b/core/Module_list.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -14,6 +14,7 @@ class Text_Buf; class TTCN_Module; class Module_Param; +class Module_Param_Name; class ModuleVersion; struct namespace_t; @@ -38,6 +39,7 @@ public: const char *component_type, boolean init_base_comps); static void set_param(Module_Param& param); + static Module_Param* get_param(Module_Param_Name& param_name); static void log_param(); static void execute_control(const char *module_name); @@ -90,6 +92,7 @@ public: enum module_type_enum { TTCN3_MODULE, ASN1_MODULE, CPLUSPLUS_MODULE }; typedef void (*init_func_t)(); typedef boolean (*set_param_func_t)(Module_Param& param); + typedef Module_Param* (*get_param_func_t)(Module_Param_Name& param_name); typedef void (*log_param_func_t)(); typedef boolean (*initialize_component_func_t)(const char *component_type, boolean init_base_comps); @@ -120,6 +123,7 @@ private: init_func_t pre_init_func, post_init_func; boolean pre_init_called, post_init_called; set_param_func_t set_param_func; + get_param_func_t get_param_func; log_param_func_t log_param_func; initialize_component_func_t initialize_component_func; start_func_t start_func; @@ -151,6 +155,7 @@ public: const namespace_t *par_namespaces, init_func_t par_post_init_func, set_param_func_t par_set_param_func, + get_param_func_t par_get_param_func, log_param_func_t par_log_param_func, initialize_component_func_t par_initialize_component_func, start_func_t par_start_func, diff --git a/core/Objid.cc b/core/Objid.cc index 79fe281c0..77a06a2e7 100644 --- a/core/Objid.cc +++ b/core/Objid.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -215,11 +215,25 @@ void OBJID::log() const void OBJID::set_param(Module_Param& param) { param.basic_check(Module_Param::BC_VALUE, "objid value"); - if (param.get_type()!=Module_Param::MP_Objid) param.type_error("objid value"); + Module_Param_Ptr mp = ¶m; + if (param.get_type() == Module_Param::MP_Reference) { + mp = param.get_referenced_param(); + } + if (mp->get_type()!=Module_Param::MP_Objid) param.type_error("objid value"); if (sizeof(objid_element)!=sizeof(int)) TTCN_error("Internal error: OBJID::set_param()"); clean_up(); - init_struct(param.get_string_size()); - memcpy(val_ptr->components_ptr, param.get_string_data(), val_ptr->n_components * sizeof(objid_element)); + init_struct(mp->get_string_size()); + memcpy(val_ptr->components_ptr, mp->get_string_data(), val_ptr->n_components * sizeof(objid_element)); +} + +Module_Param* OBJID::get_param(Module_Param_Name& /* param_name */) const +{ + if (!is_bound()) { + return new Module_Param_Unbound(); + } + int* val_cpy = (int *)Malloc(val_ptr->n_components); + memcpy(val_cpy, val_ptr->components_ptr, val_ptr->n_components * sizeof(int)); + return new Module_Param_Objid(val_ptr->n_components, val_cpy); } void OBJID::encode_text(Text_Buf& text_buf) const @@ -742,7 +756,7 @@ OBJID_template& OBJID_template::operator=(const OBJID_template& other_value) return *this; } -boolean OBJID_template::match(const OBJID& other_value) const +boolean OBJID_template::match(const OBJID& other_value, boolean /* legacy */) const { if (!other_value.is_bound()) return FALSE; switch (template_selection) { @@ -854,7 +868,8 @@ void OBJID_template::log() const log_ifpresent(); } -void OBJID_template::log_match(const OBJID& match_value) const +void OBJID_template::log_match(const OBJID& match_value, + boolean /* legacy */) const { if (TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity() && TTCN_Logger::get_logmatch_buffer_len() != 0) { @@ -870,7 +885,11 @@ void OBJID_template::log_match(const OBJID& match_value) const void OBJID_template::set_param(Module_Param& param) { param.basic_check(Module_Param::BC_TEMPLATE, "objid template"); - switch (param.get_type()) { + Module_Param_Ptr mp = ¶m; + if (param.get_type() == Module_Param::MP_Reference) { + mp = param.get_referenced_param(); + } + switch (mp->get_type()) { case Module_Param::MP_Omit: *this = OMIT_VALUE; break; @@ -881,15 +900,18 @@ void OBJID_template::set_param(Module_Param& param) { *this = ANY_OR_OMIT; break; case Module_Param::MP_List_Template: - case Module_Param::MP_ComplementList_Template: - set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, param.get_size()); - for (size_t i=0; i<param.get_size(); i++) { - list_item(i).set_param(*param.get_elem(i)); + case Module_Param::MP_ComplementList_Template: { + OBJID_template temp; + temp.set_type(mp->get_type() == Module_Param::MP_List_Template ? + VALUE_LIST : COMPLEMENTED_LIST, mp->get_size()); + for (size_t i=0; i<mp->get_size(); i++) { + temp.list_item(i).set_param(*mp->get_elem(i)); } - break; + *this = temp; + break; } case Module_Param::MP_Objid: if (sizeof(OBJID::objid_element)!=sizeof(int)) TTCN_error("Internal error: OBJID_template::set_param()"); - *this = OBJID(param.get_string_size(), (OBJID::objid_element*)param.get_string_data()); + *this = OBJID(mp->get_string_size(), (OBJID::objid_element*)mp->get_string_data()); break; //case Module_Param::MP_Objid_Template: // TODO @@ -897,7 +919,47 @@ void OBJID_template::set_param(Module_Param& param) { default: param.type_error("objid template"); } - is_ifpresent = param.get_ifpresent(); + is_ifpresent = param.get_ifpresent() || mp->get_ifpresent(); +} + +Module_Param* OBJID_template::get_param(Module_Param_Name& param_name) const +{ + Module_Param* mp = NULL; + switch (template_selection) { + case UNINITIALIZED_TEMPLATE: + mp = new Module_Param_Unbound(); + break; + case OMIT_VALUE: + mp = new Module_Param_Omit(); + break; + case ANY_VALUE: + mp = new Module_Param_Any(); + break; + case ANY_OR_OMIT: + mp = new Module_Param_AnyOrNone(); + break; + case SPECIFIC_VALUE: + mp = single_value.get_param(param_name); + break; + case VALUE_LIST: + case COMPLEMENTED_LIST: { + if (template_selection == VALUE_LIST) { + mp = new Module_Param_List_Template(); + } + else { + mp = new Module_Param_ComplementList_Template(); + } + for (size_t i = 0; i < value_list.n_values; ++i) { + mp->add_elem(value_list.list_value[i].get_param(param_name)); + } + break; } + default: + break; + } + if (is_ifpresent) { + mp->set_ifpresent(); + } + return mp; } void OBJID_template::encode_text(Text_Buf& text_buf) const @@ -948,13 +1010,13 @@ void OBJID_template::decode_text(Text_Buf& text_buf) } } -boolean OBJID_template::is_present() const +boolean OBJID_template::is_present(boolean legacy /* = FALSE */) const { if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE; - return !match_omit(); + return !match_omit(legacy); } -boolean OBJID_template::match_omit() const +boolean OBJID_template::match_omit(boolean legacy /* = FALSE */) const { if (is_ifpresent) return TRUE; switch (template_selection) { @@ -963,10 +1025,14 @@ boolean OBJID_template::match_omit() const return TRUE; case VALUE_LIST: case COMPLEMENTED_LIST: - for (unsigned int i=0; i<value_list.n_values; i++) - if (value_list.list_value[i].match_omit()) - return template_selection==VALUE_LIST; - return template_selection==COMPLEMENTED_LIST; + if (legacy) { + // legacy behavior: 'omit' can appear in the value/complement list + for (unsigned int i=0; i<value_list.n_values; i++) + if (value_list.list_value[i].match_omit()) + return template_selection==VALUE_LIST; + return template_selection==COMPLEMENTED_LIST; + } + // else fall through default: return FALSE; } @@ -974,7 +1040,8 @@ boolean OBJID_template::match_omit() const } #ifndef TITAN_RUNTIME_2 -void OBJID_template::check_restriction(template_res t_res, const char* t_name) const +void OBJID_template::check_restriction(template_res t_res, const char* t_name, + boolean legacy /* = FALSE */) const { if (template_selection==UNINITIALIZED_TEMPLATE) return; switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) { @@ -986,7 +1053,7 @@ void OBJID_template::check_restriction(template_res t_res, const char* t_name) c template_selection==SPECIFIC_VALUE)) return; break; case TR_PRESENT: - if (!match_omit()) return; + if (!match_omit(legacy)) return; break; default: return; diff --git a/core/Objid.hh b/core/Objid.hh index b2b7489c9..0a51d1eb7 100644 --- a/core/Objid.hh +++ b/core/Objid.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -71,7 +71,10 @@ public: #endif void log() const; + void set_param(Module_Param& param); + Module_Param* get_param(Module_Param_Name& param_name) const; + void encode_text(Text_Buf& text_buf) const; void decode_text(Text_Buf& text_buf); @@ -126,7 +129,7 @@ public: OBJID_template& operator=(const OPTIONAL<OBJID>& other_value); OBJID_template& operator=(const OBJID_template& other_value); - boolean match(const OBJID& other_value) const; + boolean match(const OBJID& other_value, boolean legacy = FALSE) const; const OBJID& valueof() const; int size_of() const; @@ -135,25 +138,26 @@ public: OBJID_template& list_item(unsigned int list_index); void log() const; - void log_match(const OBJID& match_value) const; + void log_match(const OBJID& match_value, boolean legacy = FALSE) const; void set_param(Module_Param& param); + Module_Param* get_param(Module_Param_Name& param_name) const; void encode_text(Text_Buf& text_buf) const; void decode_text(Text_Buf& text_buf); - boolean is_present() const; - boolean match_omit() const; + boolean is_present(boolean legacy = FALSE) const; + boolean match_omit(boolean legacy = FALSE) const; #ifdef TITAN_RUNTIME_2 void valueofv(Base_Type* value) const { *(static_cast<OBJID*>(value)) = valueof(); } void set_value(template_sel other_value) { *this = other_value; } void copy_value(const Base_Type* other_value) { *this = *(static_cast<const OBJID*>(other_value)); } Base_Template* clone() const { return new OBJID_template(*this); } const TTCN_Typedescriptor_t* get_descriptor() const { return &OBJID_descr_; } - boolean matchv(const Base_Type* other_value) const { return match(*(static_cast<const OBJID*>(other_value))); } - void log_matchv(const Base_Type* match_value) const { log_match(*(static_cast<const OBJID*>(match_value))); } + boolean matchv(const Base_Type* other_value, boolean legacy) const { return match(*(static_cast<const OBJID*>(other_value)), legacy); } + void log_matchv(const Base_Type* match_value, boolean legacy) const { log_match(*(static_cast<const OBJID*>(match_value)), legacy); } #else - void check_restriction(template_res t_res, const char* t_name=NULL) const; + void check_restriction(template_res t_res, const char* t_name=NULL, boolean legacy = FALSE) const; #endif }; diff --git a/core/Octetstring.cc b/core/Octetstring.cc index 644ca5096..55c0090fb 100644 --- a/core/Octetstring.cc +++ b/core/Octetstring.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -499,23 +499,59 @@ void OCTETSTRING::log() const void OCTETSTRING::set_param(Module_Param& param) { param.basic_check(Module_Param::BC_VALUE|Module_Param::BC_LIST, "octetstring value"); - if (param.get_type()!=Module_Param::MP_Octetstring) param.type_error("octetstring value"); - switch (param.get_operation_type()) { - case Module_Param::OT_ASSIGN: - clean_up(); - init_struct(param.get_string_size()); - memcpy(val_ptr->octets_ptr, param.get_string_data(), val_ptr->n_octets); + Module_Param_Ptr mp = ¶m; + if (param.get_type() == Module_Param::MP_Reference) { + mp = param.get_referenced_param(); + } + switch (mp->get_type()) { + case Module_Param::MP_Octetstring: + switch (param.get_operation_type()) { + case Module_Param::OT_ASSIGN: + clean_up(); + init_struct(mp->get_string_size()); + memcpy(val_ptr->octets_ptr, mp->get_string_data(), val_ptr->n_octets); + break; + case Module_Param::OT_CONCAT: + if (is_bound()) { + *this += OCTETSTRING(mp->get_string_size(), (unsigned char*)mp->get_string_data()); + } else { + *this = OCTETSTRING(mp->get_string_size(), (unsigned char*)mp->get_string_data()); + } + break; + default: + TTCN_error("Internal error: OCTETSTRING::set_param()"); + } break; - case Module_Param::OT_CONCAT: - if (is_bound()) { - *this += OCTETSTRING(param.get_string_size(), (unsigned char*)param.get_string_data()); - } else { - *this = OCTETSTRING(param.get_string_size(), (unsigned char*)param.get_string_data()); + case Module_Param::MP_Expression: + if (mp->get_expr_type() == Module_Param::EXPR_CONCATENATE) { + OCTETSTRING operand1, operand2; + operand1.set_param(*mp->get_operand1()); + operand2.set_param(*mp->get_operand2()); + if (param.get_operation_type() == Module_Param::OT_CONCAT) { + *this = *this + operand1 + operand2; + } + else { + *this = operand1 + operand2; + } + } + else { + param.expr_type_error("a octetstring"); } break; default: - TTCN_error("Internal error: OCTETSTRING::set_param()"); + param.type_error("octetstring value"); + break; + } +} + +Module_Param* OCTETSTRING::get_param(Module_Param_Name& /* param_name */) const +{ + if (!is_bound()) { + return new Module_Param_Unbound(); } + unsigned char* val_cpy = (unsigned char *)Malloc(val_ptr->n_octets); + memcpy(val_cpy, val_ptr->octets_ptr, val_ptr->n_octets); + return new Module_Param_Octetstring(val_ptr->n_octets, val_cpy); } void OCTETSTRING::encode_text(Text_Buf& text_buf) const @@ -1734,7 +1770,8 @@ const OCTETSTRING_ELEMENT OCTETSTRING_template::operator[](const INTEGER& index_ return (*this)[(int)index_value]; } -boolean OCTETSTRING_template::match(const OCTETSTRING& other_value) const +boolean OCTETSTRING_template::match(const OCTETSTRING& other_value, + boolean /* legacy */) const { if (!other_value.is_bound()) return FALSE; if (!match_length(other_value.val_ptr->n_octets)) return FALSE; @@ -1883,7 +1920,8 @@ void OCTETSTRING_template::log() const log_ifpresent(); } -void OCTETSTRING_template::log_match(const OCTETSTRING& match_value) const +void OCTETSTRING_template::log_match(const OCTETSTRING& match_value, + boolean /* legacy */) const { if (TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity() && TTCN_Logger::get_logmatch_buffer_len() != 0) { @@ -1899,7 +1937,11 @@ void OCTETSTRING_template::log_match(const OCTETSTRING& match_value) const void OCTETSTRING_template::set_param(Module_Param& param) { param.basic_check(Module_Param::BC_TEMPLATE|Module_Param::BC_LIST, "octetstring template"); - switch (param.get_type()) { + Module_Param_Ptr mp = ¶m; + if (param.get_type() == Module_Param::MP_Reference) { + mp = param.get_referenced_param(); + } + switch (mp->get_type()) { case Module_Param::MP_Omit: *this = OMIT_VALUE; break; @@ -1910,23 +1952,90 @@ void OCTETSTRING_template::set_param(Module_Param& param) { *this = ANY_OR_OMIT; break; case Module_Param::MP_List_Template: - case Module_Param::MP_ComplementList_Template: - set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, param.get_size()); - for (size_t i=0; i<param.get_size(); i++) { - list_item(i).set_param(*param.get_elem(i)); + case Module_Param::MP_ComplementList_Template: { + OCTETSTRING_template temp; + temp.set_type(mp->get_type() == Module_Param::MP_List_Template ? + VALUE_LIST : COMPLEMENTED_LIST, mp->get_size()); + for (size_t i=0; i<mp->get_size(); i++) { + temp.list_item(i).set_param(*mp->get_elem(i)); } - break; + *this = temp; + break; } case Module_Param::MP_Octetstring: - *this = OCTETSTRING(param.get_string_size(), (unsigned char*)param.get_string_data()); + *this = OCTETSTRING(mp->get_string_size(), (unsigned char*)mp->get_string_data()); break; case Module_Param::MP_Octetstring_Template: - *this = OCTETSTRING_template(param.get_string_size(), (unsigned short*)param.get_string_data()); + *this = OCTETSTRING_template(mp->get_string_size(), (unsigned short*)mp->get_string_data()); + break; + case Module_Param::MP_Expression: + if (mp->get_expr_type() == Module_Param::EXPR_CONCATENATE) { + OCTETSTRING operand1, operand2; + operand1.set_param(*mp->get_operand1()); + operand2.set_param(*mp->get_operand2()); + *this = operand1 + operand2; + } + else { + param.expr_type_error("a bitstring"); + } break; default: param.type_error("octetstring template"); } - is_ifpresent = param.get_ifpresent(); - set_length_range(param); + is_ifpresent = param.get_ifpresent() || mp->get_ifpresent(); + if (param.get_length_restriction() != NULL) { + set_length_range(param); + } + else { + set_length_range(*mp); + } +} + +Module_Param* OCTETSTRING_template::get_param(Module_Param_Name& param_name) const +{ + Module_Param* mp = NULL; + switch (template_selection) { + case UNINITIALIZED_TEMPLATE: + mp = new Module_Param_Unbound(); + break; + case OMIT_VALUE: + mp = new Module_Param_Omit(); + break; + case ANY_VALUE: + mp = new Module_Param_Any(); + break; + case ANY_OR_OMIT: + mp = new Module_Param_AnyOrNone(); + break; + case SPECIFIC_VALUE: + mp = single_value.get_param(param_name); + break; + case VALUE_LIST: + case COMPLEMENTED_LIST: { + if (template_selection == VALUE_LIST) { + mp = new Module_Param_List_Template(); + } + else { + mp = new Module_Param_ComplementList_Template(); + } + for (size_t i = 0; i < value_list.n_values; ++i) { + mp->add_elem(value_list.list_value[i].get_param(param_name)); + } + break; } + case STRING_PATTERN: { + unsigned short* val_cpy = (unsigned short*)Malloc(pattern_value->n_elements * + sizeof(unsigned short)); + memcpy(val_cpy, pattern_value->elements_ptr, pattern_value->n_elements * + sizeof(unsigned short)); + mp = new Module_Param_Octetstring_Template(pattern_value->n_elements, val_cpy); + break; } + default: + break; + } + if (is_ifpresent) { + mp->set_ifpresent(); + } + mp->set_length_restriction(get_length_range()); + return mp; } void OCTETSTRING_template::encode_text(Text_Buf& text_buf) const @@ -1992,13 +2101,13 @@ void OCTETSTRING_template::decode_text(Text_Buf& text_buf) } } -boolean OCTETSTRING_template::is_present() const +boolean OCTETSTRING_template::is_present(boolean legacy /* = FALSE */) const { if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE; - return !match_omit(); + return !match_omit(legacy); } -boolean OCTETSTRING_template::match_omit() const +boolean OCTETSTRING_template::match_omit(boolean legacy /* = FALSE */) const { if (is_ifpresent) return TRUE; switch (template_selection) { @@ -2007,10 +2116,14 @@ boolean OCTETSTRING_template::match_omit() const return TRUE; case VALUE_LIST: case COMPLEMENTED_LIST: - for (unsigned int i=0; i<value_list.n_values; i++) - if (value_list.list_value[i].match_omit()) - return template_selection==VALUE_LIST; - return template_selection==COMPLEMENTED_LIST; + if (legacy) { + // legacy behavior: 'omit' can appear in the value/complement list + for (unsigned int i=0; i<value_list.n_values; i++) + if (value_list.list_value[i].match_omit()) + return template_selection==VALUE_LIST; + return template_selection==COMPLEMENTED_LIST; + } + // else fall through default: return FALSE; } @@ -2018,7 +2131,8 @@ boolean OCTETSTRING_template::match_omit() const } #ifndef TITAN_RUNTIME_2 -void OCTETSTRING_template::check_restriction(template_res t_res, const char* t_name) const +void OCTETSTRING_template::check_restriction(template_res t_res, const char* t_name, + boolean legacy /* = FALSE */) const { if (template_selection==UNINITIALIZED_TEMPLATE) return; switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) { @@ -2030,7 +2144,7 @@ void OCTETSTRING_template::check_restriction(template_res t_res, const char* t_n template_selection==SPECIFIC_VALUE)) return; break; case TR_PRESENT: - if (!match_omit()) return; + if (!match_omit(legacy)) return; break; default: return; diff --git a/core/Octetstring.hh b/core/Octetstring.hh index bb1428aab..20d4b73c1 100644 --- a/core/Octetstring.hh +++ b/core/Octetstring.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -113,6 +113,7 @@ public: void log() const; void set_param(Module_Param& param); + Module_Param* get_param(Module_Param_Name& param_name) const; void encode_text(Text_Buf& text_buf) const; void decode_text(Text_Buf& text_buf); @@ -249,7 +250,7 @@ public: const OCTETSTRING_ELEMENT operator[](int index_value) const; const OCTETSTRING_ELEMENT operator[](const INTEGER& index_value) const; - boolean match(const OCTETSTRING& other_value) const; + boolean match(const OCTETSTRING& other_value, boolean legacy = FALSE) const; const OCTETSTRING& valueof() const; int lengthof() const; @@ -258,25 +259,26 @@ public: OCTETSTRING_template& list_item(unsigned int list_index); void log() const; - void log_match(const OCTETSTRING& match_value) const; + void log_match(const OCTETSTRING& match_value, boolean legacy = FALSE) const; void set_param(Module_Param& param); + Module_Param* get_param(Module_Param_Name& param_name) const; void encode_text(Text_Buf& text_buf) const; void decode_text(Text_Buf& text_buf); - boolean is_present() const; - boolean match_omit() const; + boolean is_present(boolean legacy = FALSE) const; + boolean match_omit(boolean legacy = FALSE) const; #ifdef TITAN_RUNTIME_2 void valueofv(Base_Type* value) const { *(static_cast<OCTETSTRING*>(value)) = valueof(); } void set_value(template_sel other_value) { *this = other_value; } void copy_value(const Base_Type* other_value) { *this = *(static_cast<const OCTETSTRING*>(other_value)); } Base_Template* clone() const { return new OCTETSTRING_template(*this); } const TTCN_Typedescriptor_t* get_descriptor() const { return &OCTETSTRING_descr_; } - boolean matchv(const Base_Type* other_value) const { return match(*(static_cast<const OCTETSTRING*>(other_value))); } - void log_matchv(const Base_Type* match_value) const { log_match(*(static_cast<const OCTETSTRING*>(match_value))); } + boolean matchv(const Base_Type* other_value, boolean legacy) const { return match(*(static_cast<const OCTETSTRING*>(other_value)), legacy); } + void log_matchv(const Base_Type* match_value, boolean legacy) const { log_match(*(static_cast<const OCTETSTRING*>(match_value)), legacy); } #else - void check_restriction(template_res t_res, const char* t_name=NULL) const; + void check_restriction(template_res t_res, const char* t_name=NULL, boolean legacy = FALSE) const; #endif }; diff --git a/core/Optional.hh b/core/Optional.hh index 3ac4d32fa..8e1dc2bd9 100644 --- a/core/Optional.hh +++ b/core/Optional.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -254,6 +254,7 @@ public: void log() const; void set_param(Module_Param& param); + Module_Param* get_param(Module_Param_Name& param_name) const; void encode_text(Text_Buf& text_buf) const; void decode_text(Text_Buf& text_buf); @@ -403,6 +404,9 @@ OPTIONAL<T_type>::OPTIONAL(template_sel other_value) template<typename T_type> OPTIONAL<T_type>::OPTIONAL(const OPTIONAL& other_value) : Base_Type(other_value) +#ifdef TITAN_RUNTIME_2 + , RefdIndexInterface(other_value) +#endif , optional_value(NULL) , optional_selection(other_value.optional_selection) #ifdef TITAN_RUNTIME_2 @@ -739,6 +743,23 @@ void OPTIONAL<T_type>::set_param(Module_Param& param) { optional_value->set_param(param); } +template <typename T_type> +Module_Param* OPTIONAL<T_type>::get_param(Module_Param_Name& param_name) const +{ +#ifdef TITAN_RUNTIME_2 + switch (get_selection()) { +#else + switch (optional_selection) { +#endif + case OPTIONAL_PRESENT: + return optional_value->get_param(param_name); + case OPTIONAL_OMIT: + return new Module_Param_Omit(); + default: + return new Module_Param_Unbound(); + } +} + template<typename T_type> void OPTIONAL<T_type>::encode_text(Text_Buf& text_buf) const { @@ -1034,6 +1055,9 @@ OPTIONAL<T_type>::XER_decode(const XERdescriptor_t& p_td, XmlReaderWrap& reader, set_to_present(); //success = reader.Read(); // move to next thing TODO should it loop till an element ? optional_value->XER_decode(p_td, reader, flavor, emb_val); + if (!optional_value->is_bound()) { + set_to_omit(); + } } else break; // it's not us, bail diff --git a/core/Parallel_main.cc b/core/Parallel_main.cc index 2f6bdd22e..775f291a4 100644 --- a/core/Parallel_main.cc +++ b/core/Parallel_main.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -40,7 +40,6 @@ const char * stored_argv = "Unidentified program"; void signal_handler(int signum) { - int retval; time_t now=time(0); char ts[60]; ts[0]='\0'; @@ -49,12 +48,6 @@ void signal_handler(int signum) if(tmp==NULL){ fprintf(stderr,"<Unknown> %s: %s\n",stored_argv, signum==SIGABRT?"Abort was called":"Segmentation fault occurred"); } else { -/* retval = write(STDERR_FILENO, stored_argv, strlen(stored_argv)); - retval = write(STDERR_FILENO, segfault , sizeof(segfault)-1); // sizeof includes \0 - fflush(stderr); - (void)retval; -*/ - retval=strftime(ts,60,"%F %T",tmp); fprintf(stderr,"%s %s: %s\n",ts,stored_argv,signum==SIGABRT?"Abort was called":"Segmentation fault occurred"); } fflush(stderr); diff --git a/core/Param_Types.cc b/core/Param_Types.cc index 67011c3ed..847bf3bfc 100644 --- a/core/Param_Types.cc +++ b/core/Param_Types.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -25,6 +25,7 @@ #include "Charstring.hh" #include "Universal_charstring.hh" #include "Logger.hh" +#include "Module_list.hh" size_t Module_Param_Id::get_index() const { @@ -73,6 +74,10 @@ char* Module_Param_Index::get_str() const { return mprintf("[%lu]", (unsigned long)index); } +char* Module_Param_CustomName::get_str() const { + return mcopystr(name); +} + void Module_Param_Length_Restriction::log() const { TTCN_Logger::log_event(" length(%lu", (unsigned long)min); if (min!=max) { @@ -241,6 +246,164 @@ char* Module_Param::get_enumerated() const { return NULL; } +Module_Param_Ptr Module_Param::get_referenced_param() const { + TTCN_error("Internal error: Module_Param::get_referenced_param()"); + return NULL; +} + +Module_Param::expression_operand_t Module_Param::get_expr_type() const { + TTCN_error("Internal error: Module_Param::get_expr_type()"); + return EXPR_ERROR; +} + +const char* Module_Param::get_expr_type_str() const { + TTCN_error("Internal error: Module_Param::get_expr_type_str()"); + return NULL; +} + +Module_Param* Module_Param::get_operand1() const { + TTCN_error("Internal error: Module_Param::get_operand1()"); + return NULL; +} + +Module_Param* Module_Param::get_operand2() const { + TTCN_error("Internal error: Module_Param::get_operand2()"); + return NULL; +} + +Module_Param_Ptr::Module_Param_Ptr(Module_Param* p) { + ptr = new module_param_ptr_struct; + ptr->mp_ptr = p; + ptr->temporary = FALSE; + ptr->ref_count = 1; +} + + +Module_Param_Ptr::Module_Param_Ptr(const Module_Param_Ptr& r) +: ptr(r.ptr) { + ++ptr->ref_count; +} + +void Module_Param_Ptr::clean_up() { + if (ptr->ref_count == 1) { + if (ptr->temporary) { + delete ptr->mp_ptr; + } + delete ptr; + } + else { + --ptr->ref_count; + } +} + +Module_Param_Ptr& Module_Param_Ptr::operator=(const Module_Param_Ptr& r) { + clean_up(); + ptr = r.ptr; + ++ptr->ref_count; + return *this; +} + +Module_Param_Reference::Module_Param_Reference(Module_Param_Name* p): mp_ref(p) { + if (mp_ref == NULL) { + TTCN_error("Internal error: Module_Param_Reference::Module_Param_Reference()"); + } +} + +Module_Param_Ptr Module_Param_Reference::get_referenced_param() const { + mp_ref->reset(); + Module_Param_Ptr ptr = Module_List::get_param(*mp_ref); + ptr.set_temporary(); + return ptr; +} + +char* Module_Param_Reference::get_enumerated() const { + if (mp_ref->is_single_name()) { + return mp_ref->get_current_name(); + } + return NULL; +} + +void Module_Param_Reference::log_value() const { + TTCN_Logger::log_event_str(mp_ref->get_str()); +} + +void Module_Param_Unbound::log_value() const { + TTCN_Logger::log_event_str("<unbound>"); +} + +Module_Param_Expression::Module_Param_Expression(expression_operand_t p_type, + Module_Param* p_op1, Module_Param* p_op2) +: expr_type(p_type), operand1(p_op1), operand2(p_op2) { + if (operand1 == NULL || operand2 == NULL) { + TTCN_error("Internal error: Module_Param_Expression::Module_Param_Expression()"); + } + operand1->set_parent(this); + operand2->set_parent(this); +} + +Module_Param_Expression::Module_Param_Expression(Module_Param* p_op) +: expr_type(EXPR_NEGATE), operand1(p_op), operand2(NULL) { + if (operand1 == NULL) { + TTCN_error("Internal error: Module_Param_Expression::Module_Param_Expression()"); + } + operand1->set_parent(this); +} + +Module_Param_Expression::~Module_Param_Expression() { + delete operand1; + if (operand2 != NULL) { + delete operand2; + } +} + +const char* Module_Param_Expression::get_expr_type_str() const { + switch (expr_type) { + case EXPR_ADD: + return "Adding (+)"; + case EXPR_SUBTRACT: + return "Subtracting (-)"; + case EXPR_MULTIPLY: + return "Multiplying (*)"; + case EXPR_DIVIDE: + return "Dividing (/)"; + case EXPR_NEGATE: + return "Negating (-)"; + case EXPR_CONCATENATE: + return "Concatenating (&)"; + default: + return NULL; + } +} + +void Module_Param_Expression::log_value() const { + if (expr_type == EXPR_NEGATE) { + TTCN_Logger::log_event_str("- "); + } + operand1->log_value(); + switch (expr_type) { + case EXPR_ADD: + TTCN_Logger::log_event_str(" + "); + break; + case EXPR_SUBTRACT: + TTCN_Logger::log_event_str(" - "); + break; + case EXPR_MULTIPLY: + TTCN_Logger::log_event_str(" * "); + break; + case EXPR_DIVIDE: + TTCN_Logger::log_event_str(" / "); + break; + case EXPR_CONCATENATE: + TTCN_Logger::log_event_str(" & "); + break; + default: + break; + } + if (expr_type != EXPR_NEGATE) { + operand2->log_value(); + } +} + void Module_Param_NotUsed::log_value() const { TTCN_Logger::log_event_str("-"); } @@ -442,11 +605,19 @@ char* Module_Param::get_param_context() const { void Module_Param::error(const char* err_msg, ...) const { if (Ttcn_String_Parsing::happening()) { - char* exception_str = mcopystr("Error while setting parameter field '"); - char* param_ctx = get_param_context(); + char* exception_str = mcopystr("Error while setting "); + char* param_ctx; + if (id && id->is_custom()) { + param_ctx = mputstr(id->get_str(), " in module parameter"); + } + else { + char* tmp = get_param_context(); + param_ctx = mprintf("parameter field '%s'", tmp ? tmp : "<NULL pointer>"); + Free(tmp); + } exception_str = mputstr(exception_str, param_ctx); Free(param_ctx); - exception_str = mputstr(exception_str, "': "); + exception_str = mputstr(exception_str, ": "); va_list p_var; va_start(p_var, err_msg); char* error_msg_str = mprintf_va_list(err_msg, p_var); @@ -464,13 +635,23 @@ void Module_Param::error(const char* err_msg, ...) const { case OT_CONCAT: TTCN_Logger::log_event_str("concatenating"); break; default: TTCN_Logger::log_event_str("???"); } - TTCN_Logger::log_event_str(" parameter field '"); - char* param_ctx = get_param_context(); - TTCN_Logger::log_event_str(param_ctx); - Free(param_ctx); + TTCN_Logger::log_event_str(" "); + if (id && id->is_custom()) { + char* custom_ctx = id->get_str(); + TTCN_Logger::log_event_str(custom_ctx); + Free(custom_ctx); + TTCN_Logger::log_event_str(" in module parameter"); + } + else { + TTCN_Logger::log_event_str("parameter field '"); + char* param_ctx = get_param_context(); + TTCN_Logger::log_event_str(param_ctx); + Free(param_ctx); + TTCN_Logger::log_event_str("'"); + } switch (operation_type) { - case OT_ASSIGN: TTCN_Logger::log_event_str("' to '"); break; - case OT_CONCAT: TTCN_Logger::log_event_str("' and '"); break; + case OT_ASSIGN: TTCN_Logger::log_event_str(" to '"); break; + case OT_CONCAT: TTCN_Logger::log_event_str(" and '"); break; default: TTCN_Logger::log_event_str("' ??? '"); } log(false); @@ -484,4 +665,20 @@ void Module_Param::error(const char* err_msg, ...) const { throw TC_Error(); } +void Module_Param::type_error(const char* expected, const char* type_name /* = NULL */) const { + const Module_Param* reporter = this; + // if it's an expression, find its head and use that to report the error + // (since that's the only parameter with a valid name) + while (reporter->parent != NULL && reporter->parent->get_type() == MP_Expression) { + reporter = reporter->parent; + } + // either use this parameter's or the referenced parameter's type string + // (but never the head's type string) + reporter->error("Type mismatch: %s or reference to %s was expected%s%s instead of %s%s.", + expected, expected, + (type_name != NULL) ? " for type " : "", (type_name != NULL) ? type_name : "", + (get_type() == MP_Reference) ? "reference to " : "", + (get_type() == MP_Reference) ? get_referenced_param()->get_type_str() : get_type_str()); +} + bool Ttcn_String_Parsing::string_parsing = false; diff --git a/core/Param_Types.hh b/core/Param_Types.hh index 2086d4c2f..84e6aeba3 100644 --- a/core/Param_Types.hh +++ b/core/Param_Types.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -40,8 +40,6 @@ struct param_charstring_t { struct param_universal_charstring_t { int n_uchars; universal_char *uchars_ptr; - int n_quads; - int *quad_positions; }; /////////////////////////////////////////////////////////////////////////////// @@ -54,6 +52,7 @@ public: virtual ~Module_Param_Id() {} virtual bool is_explicit() const = 0; virtual bool is_index() const { return false; } + virtual bool is_custom() const { return false; } virtual size_t get_index() const; virtual char* get_name() const; virtual char* get_current_name() const; @@ -79,6 +78,8 @@ public: pos += offset; return true; } + void reset() { pos = 0; } + boolean is_single_name() const { return names.size() == 1; } char* get_str() const; }; @@ -103,6 +104,23 @@ public: char* get_str() const; }; +/** Custom module parameter name class, used in Module_Param instances that aren't + * actual module parameters (length boundaries, array indexes and character codes in + * quadruples use temporary Module_Param instances to allow the use of expressions + * and references to module parameters). + * Errors reported in these cases will contain the custom text set in this class, + * instead of the regular error message header. */ +class Module_Param_CustomName : public Module_Param_Id { + char* name; // owned expstring_t +public: + Module_Param_CustomName(char* p): name(p) {} + ~Module_Param_CustomName() { Free(name); } + char* get_name() const { return name; } + bool is_explicit() const { return true; } + char* get_str() const; + bool is_custom() const { return true; } +}; + /////////////////////////////////////////////////////////////////////////////// class Module_Param_Length_Restriction { @@ -125,6 +143,9 @@ public: /////////////////////////////////////////////////////////////////////////////// +// forward declaration +class Module_Param_Ptr; + class Module_Param { Module_Param(const Module_Param& p); // copy constructor disabled Module_Param& operator=(const Module_Param& p); // assignment disabled @@ -164,7 +185,10 @@ public: MP_ComplementList_Template, MP_Superset_Template, MP_Subset_Template, - MP_Permutation_Template + MP_Permutation_Template, + MP_Reference, + MP_Unbound, + MP_Expression }; enum operation_type_t { OT_ASSIGN, OT_CONCAT }; enum basic_check_bits_t { // used to parametrize basic_check() @@ -172,6 +196,15 @@ public: BC_LIST = 0x01, // list values and templates BC_TEMPLATE = 0x02 // templates }; + enum expression_operand_t { // expression types for MP_Expression + EXPR_ERROR, // for reporting errors + EXPR_ADD, + EXPR_SUBTRACT, + EXPR_MULTIPLY, + EXPR_DIVIDE, + EXPR_CONCATENATE, + EXPR_NEGATE // only operand1 is used + }; protected: operation_type_t operation_type; @@ -207,13 +240,13 @@ public: void error(const char* err, ...) const __attribute__ ((__format__ (__printf__, 2, 3), __noreturn__)); - inline void type_error(const char* expected) const - __attribute__ ((__noreturn__)) { - error("Type mismatch: %s was expected instead of %s.", expected, get_type_str()); - } - inline void type_error(const char* cfg_type, const char* real_type) const + void type_error(const char* expected, const char* type_name = NULL) const + __attribute__ ((__noreturn__)); + + inline void expr_type_error(const char* type_name) const __attribute__ ((__noreturn__)) { - error("Type mismatch: %s was expected for type %s instead of %s.", cfg_type, real_type, get_type_str()); + error("%s is not allowed in %s expression.", + get_expr_type_str(), type_name); } // check and error report function for operation type, ifpresent and length restriction @@ -242,6 +275,81 @@ public: virtual char* get_pattern() const; virtual verdicttype get_verdict() const; virtual char* get_enumerated() const; + virtual Module_Param_Ptr get_referenced_param() const; + virtual expression_operand_t get_expr_type() const; + virtual const char* get_expr_type_str() const; + virtual Module_Param* get_operand1() const; + virtual Module_Param* get_operand2() const; +}; + +/** Smart pointer class for Module_Param instances + * Uses a reference counter so the Module_Param object is never copied. + * Deletes the object (if it's temporary), when the reference counter reaches zero. */ +class Module_Param_Ptr { + struct module_param_ptr_struct { + Module_Param* mp_ptr; + boolean temporary; + int ref_count; + } *ptr; + void clean_up(); +public: + Module_Param_Ptr(Module_Param* p); + Module_Param_Ptr(const Module_Param_Ptr& r); + ~Module_Param_Ptr() { clean_up(); } + Module_Param_Ptr& operator=(const Module_Param_Ptr& r); + void set_temporary() { ptr->temporary = TRUE; } + Module_Param& operator*() { return *ptr->mp_ptr; } + Module_Param* operator->() { return ptr->mp_ptr; } +}; + +/** Module parameter reference (and enumerated value) + * Stores a reference to another module parameter, that can be retrieved with the + * method get_referenced_param(). + * @note Enumerated values are stored as references (with only 1 name segment), + * since the parser cannot distinguish them. */ +class Module_Param_Reference : public Module_Param { + Module_Param_Name* mp_ref; +public: + type_t get_type() const { return MP_Reference; } + Module_Param_Reference(Module_Param_Name* p); + ~Module_Param_Reference() { delete mp_ref; } + Module_Param_Ptr get_referenced_param() const; + char* get_enumerated() const; + const char* get_type_str() const { return "module parameter reference"; } + void log_value() const; +}; + +/** Unbound module parameter + * This cannot be created by the parser, only by get_referenced_param(), when + * the referenced module parameter is unbound. */ +class Module_Param_Unbound : public Module_Param { + type_t get_type() const { return MP_Unbound; } + const char* get_type_str() const { return "<unbound>"; } + void log_value() const; +}; + +/** Module parameter expression + * Contains an unprocessed module parameter expression with one or two operands. + * Expression types: + * with 2 operands: +, -, *, /, & + * with 1 operand: - (unary + is handled by the parser). */ +class Module_Param_Expression : public Module_Param { +private: + expression_operand_t expr_type; + Module_Param* operand1; + Module_Param* operand2; +public: + Module_Param_Expression(expression_operand_t p_type, Module_Param* p_op1, + Module_Param* p_op2); + Module_Param_Expression(Module_Param* p_op); + ~Module_Param_Expression(); + expression_operand_t get_expr_type() const { return expr_type; } + const char* get_expr_type_str() const; + Module_Param* get_operand1() const { return operand1; } + Module_Param* get_operand2() const { return operand2; } + type_t get_type() const { return MP_Expression; } + const char* get_type_str() const { return "expression"; } + void log_value() const; }; class Module_Param_NotUsed : public Module_Param { @@ -352,19 +460,12 @@ public: }; class Module_Param_Universal_Charstring : public Module_Param_String<universal_char> { - /** Number of characters in this string that were added with the quadruple notation */ - int n_quads; - /** Positions of quadruple characters in the string */ - int* quad_positions; public: type_t get_type() const { return MP_Universal_Charstring; } - Module_Param_Universal_Charstring(int p_n, universal_char* p_c, int p_nq, int* p_qp) - : Module_Param_String<universal_char>(p_n, p_c), n_quads(p_nq), quad_positions(p_qp) {} - ~Module_Param_Universal_Charstring() { Free(quad_positions); } + Module_Param_Universal_Charstring(int p_n, universal_char* p_c) + : Module_Param_String<universal_char>(p_n, p_c) {} const char* get_type_str() const { return "universal charstring"; } void log_value() const; - int get_nof_quads() const { return n_quads; } - int get_quad_pos(int p_idx) const { return quad_positions[p_idx]; } }; class Module_Param_Enumerated : public Module_Param { diff --git a/core/Parameters.h b/core/Parameters.h index 572a751f1..ba730953b 100644 --- a/core/Parameters.h +++ b/core/Parameters.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/core/Port.cc b/core/Port.cc index 4b1f08bb3..fc22f55ec 100644 --- a/core/Port.cc +++ b/core/Port.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/core/Port.hh b/core/Port.hh index e763192d9..35d2e5123 100644 --- a/core/Port.hh +++ b/core/Port.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/core/ProfMerge_main.cc b/core/ProfMerge_main.cc new file mode 100644 index 000000000..8504ae315 --- /dev/null +++ b/core/ProfMerge_main.cc @@ -0,0 +1,231 @@ +/////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2000-2015 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 +/////////////////////////////////////////////////////////////////////////////// + +#include <stdlib.h> +#include <stdio.h> +#include <stdarg.h> +#include <getopt.h> +#include <string.h> +#include "ProfilerTools.hh" +#include "version_internal.h" + +#ifdef LICENSE +#include "license.h" +#endif + +/** the name of the executable */ +const char* program_name; + +/** error flag, set automatically when an error occurs */ +boolean erroneous = FALSE; + +/** prints usage information */ +void usage() +{ + fprintf(stderr, + "usage: %s [-pc] [-o file] [-s file] [-f filter] db_file1 [db_file2 ...]\n" + " or %s -v\n\n" + "options:\n" + " -p: discard profiling data\n" + " -c: discard code coverage data\n" + " -o file: write merged database into file\n" + " -s file: generate statistics file from merged database\n" + " -f filter: filter the generated statistics file (the filter is a hexadecimal number)\n" + " -v: show version\n", program_name, program_name); +} + +/** displays an error message and sets the erroneous flag */ +void error(const char *fmt, ...) +{ + fprintf(stderr, "%s: error: ", program_name); + va_list parameters; + va_start(parameters, fmt); + vfprintf(stderr, fmt, parameters); + va_end(parameters); + putc('\n', stderr); + fflush(stderr); + erroneous = TRUE; +} + +/** checks if the specified file exists */ +boolean file_exists(const char* p_filename) +{ + FILE* file = fopen(p_filename, "r"); + if (NULL != file) { + fclose(file); + return TRUE; + } + return FALSE; +} + + +int main(int argc, char* argv[]) +{ + // store the executable name + program_name = argv[0]; + + // initialize variables for command line options + const char* out_file = NULL; + const char* stats_file = NULL; + boolean disable_profiler = FALSE; + boolean disable_coverage = FALSE; + unsigned int stats_flags = Profiler_Tools::STATS_ALL; + boolean has_stats_flag = FALSE; + boolean print_version = FALSE; + + if (1 == argc) { + // no command line options + usage(); + return EXIT_FAILURE; + } + + for (;;) { + // read the next command line option (and its argument) + int c = getopt(argc, argv, "o:s:pcf:v"); + if (-1 == c) { + break; + } + switch (c) { + case 'o': // output database file + out_file = optarg; + break; + case 's': // statistics file + stats_file = optarg; + break; + case 'p': + disable_profiler = TRUE; + break; + case 'c': + disable_coverage = TRUE; + break; + case 'f': { // statistics filter (hex number) + has_stats_flag = TRUE; + size_t len = strlen(optarg); + size_t start = 0; + if (len > STATS_MAX_HEX_DIGITS) { + // the rest of the bits are not needed, and stats_flags might run out of bits + start = len - STATS_MAX_HEX_DIGITS; + } + stats_flags = 0; + // extract the hex digits from the argument + for (size_t i = start; i < len; ++i) { + stats_flags *= 16; + if ('0' <= optarg[i] && '9' >= optarg[i]) { + stats_flags += optarg[i] - '0'; + } + else if ('a' <= optarg[i] && 'f' >= optarg[i]) { + stats_flags += optarg[i] - 'a' + 10; + } + else if ('A' <= optarg[i] && 'F' >= optarg[i]) { + stats_flags += optarg[i] - 'A' + 10; + } + else { + error("Invalid statistics filter. Expected hexadecimal value."); + return EXIT_FAILURE; + } + } + break; } + case 'v': + print_version = TRUE; + break; + default: + usage(); + return EXIT_FAILURE; + } + } + + if (print_version) { + // no other flags are allowed when printing version info + if (disable_profiler || disable_coverage || has_stats_flag || + NULL != out_file || NULL != stats_file) { + usage(); + return EXIT_FAILURE; + } + else { + fputs("Profiler and Code Coverage Merge Tool for the TTCN-3 Test Executor\n" + "Product number: " PRODUCT_NUMBER "\n" + "Build date: " __DATE__ " " __TIME__ "\n" + "Compiled with: " C_COMPILER_VERSION "\n\n" + COPYRIGHT_STRING "\n\n", stderr); +#ifdef LICENSE + print_license_info(); +#endif + return EXIT_SUCCESS; + } + } + + if (optind == argc) { + error("No input files specified."); + usage(); + return EXIT_FAILURE; + } + + if (disable_profiler && disable_coverage) { + error("Both profiling and code coverage data are discarded, nothing to do."); + return EXIT_FAILURE; + } + + if (NULL == out_file && NULL == stats_file) { + error("No output files specified (either the output database file or the " + "statistics file must be set)."); + usage(); + return EXIT_FAILURE; + } + + if (has_stats_flag && NULL == stats_file) { + fprintf(stderr, "Notify: No statistics file specified, the statistics filter " + "will be ignored."); + } + + // create the local database + Profiler_Tools::profiler_db_t profiler_db; + + for (int i = optind; i < argc; i++) { + // import each input file's contents into the local database + fprintf(stderr, "Notify: Importing database file '%s'...\n", argv[i]); + Profiler_Tools::import_data(profiler_db, argv[i], FALSE, error); + if (erroneous) { + // an import failed -> exit + return EXIT_FAILURE; + } + } + + boolean out_file_success = TRUE; + if (NULL != out_file) { + // print the local database into the output file + boolean update = file_exists(out_file); + Profiler_Tools::export_data(profiler_db, out_file, disable_profiler, + disable_coverage, error); + out_file_success = !erroneous; + if (out_file_success) { + fprintf(stderr, "Notify: Database file '%s' was %s.\n", out_file, + update ? "updated" : "generated"); + } + } + + boolean stats_file_success = TRUE; + if (NULL != stats_file) { + // reset the error flag, in case export_data failed + erroneous = FALSE; + // print the statistics into the designated file + boolean update = file_exists(stats_file); + Profiler_Tools::print_stats(profiler_db, stats_file, disable_profiler, + disable_coverage, stats_flags, error); + stats_file_success = !erroneous; + if (stats_file_success) { + fprintf(stderr, "Notify: Statistics file '%s' was %s.\n", stats_file, + update ? "updated" : "generated"); + } + } + + // return an error code if printing either output file failed + return (out_file_success && stats_file_success) ? EXIT_SUCCESS : EXIT_FAILURE; +} + +// this is needed by version.h +reffer::reffer(const char*) {} diff --git a/core/Profiler.cc b/core/Profiler.cc index e9d3b9f8d..061f9d19d 100644 --- a/core/Profiler.cc +++ b/core/Profiler.cc @@ -10,81 +10,12 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> -#include "JSON_Tokenizer.hh" +#include <unistd.h> +#include <pwd.h> #include "memory.h" #include "Runtime.hh" -#include <unistd.h> #include "Component.hh" -//////////////////////////////////// -//////// timeval operations //////// -//////////////////////////////////// - -/** Reads a timeval value from the given string. The parameter must contain the - * string representation of a real number with 6 digits after the decimal dot. */ -static timeval string2timeval(const char* str) -{ - // read and store the first part (atoi will read until the decimal dot) - long int sec = atoi(str); - timeval tv; - tv.tv_sec = sec; - - do { - // step over each digit - sec /= 10; - ++str; - } - while (sec > 9); - - // step over the decimal dot and read the second part of the number - tv.tv_usec = atoi(str + 1); - return tv; -} - -/** Returns the string representation of a real number (with 6 digits after the - * decimal dot) equivalent to the timeval parameter. - * The returned character pointer needs to be freed. */ -static char* timeval2string(timeval tv) -{ - // convert the first part and set the second part to all zeros - char* str = mprintf("%ld.000000", tv.tv_sec); - - // go through each digit of the second part and add them to the zeros in the string - size_t pos = mstrlen(str) - 1; - while (tv.tv_usec > 0) { - str[pos] += tv.tv_usec % 10; - tv.tv_usec /= 10; - --pos; - } - return str; -} - -/** Adds the two timeval parameters together and returns the result. */ -static timeval add_timeval(const timeval operand1, const timeval operand2) -{ - timeval tv; - tv.tv_usec = operand1.tv_usec + operand2.tv_usec; - tv.tv_sec = operand1.tv_sec + operand2.tv_sec; - if (tv.tv_usec >= 1000000) { - ++tv.tv_sec; - tv.tv_usec -= 1000000; - } - return tv; -} - -/** Subtracts the second timeval parameter from the first one and returns the result. */ -static timeval subtract_timeval(const timeval operand1, const timeval operand2) -{ - timeval tv; - tv.tv_usec = operand1.tv_usec - operand2.tv_usec; - tv.tv_sec = operand1.tv_sec - operand2.tv_sec; - if (tv.tv_usec < 0) { - --tv.tv_sec; - tv.tv_usec += 1000000; - } - return tv; -} - //////////////////////////////////// ////////// TTCN3_Profiler ////////// //////////////////////////////////// @@ -93,7 +24,7 @@ TTCN3_Profiler ttcn3_prof; TTCN3_Profiler::TTCN3_Profiler() : stopped(FALSE), disable_profiler(FALSE), disable_coverage(FALSE) -, aggregate_data(FALSE), disable_stats(FALSE), stats_flags(STATS_ALL) +, aggregate_data(FALSE), disable_stats(FALSE), stats_flags(Profiler_Tools::STATS_ALL) { database_filename = mcopystr("profiler.db"); stats_filename = mcopystr("profiler.stats"); @@ -102,7 +33,8 @@ TTCN3_Profiler::TTCN3_Profiler() TTCN3_Profiler::~TTCN3_Profiler() { - if (!profiler_db.empty() && (!disable_profiler || !disable_coverage)) { + if (!profiler_db.empty() && !TTCN_Runtime::is_undefined() && + (!disable_profiler || !disable_coverage)) { if (aggregate_data && (TTCN_Runtime::is_single() || TTCN_Runtime::is_hc())) { // import the data from the previous run import_data(); @@ -110,9 +42,8 @@ TTCN3_Profiler::~TTCN3_Profiler() if (TTCN_Runtime::is_hc()) { // import the data gathered by the other processes (the import function // waits for them to finish exporting) - import_data(MTC_COMPREF); - for (size_t i = 0; i < ptc_list.size(); ++i) { - import_data(ptc_list[i]); + for (size_t i = 0; i < component_list.size(); ++i) { + import_data(component_list[i]); } } export_data(); @@ -143,7 +74,7 @@ void TTCN3_Profiler::stop() if (!stopped) { if (NULL != prev_file) { // update the previous line's time - timeval elapsed = subtract_timeval(get_time(), prev_time); + timeval elapsed = Profiler_Tools::subtract_timeval(get_time(), prev_time); add_line_time(elapsed, get_element(prev_file), prev_line); TTCN3_Stack_Depth::update_stack_elapsed(elapsed); } @@ -161,10 +92,54 @@ void TTCN3_Profiler::set_disable_coverage(boolean p_disable_coverage) disable_coverage = p_disable_coverage; } +// handles metacharacters in the database or statistics file name +static char* finalize_filename(const char* p_filename_skeleton) +{ + size_t len = strlen(p_filename_skeleton); + size_t next_idx = 0; + char* ret_val = NULL; + for (size_t i = 0; i < len - 1; ++i) { + if ('%' == p_filename_skeleton[i]) { + ret_val = mputstrn(ret_val, p_filename_skeleton + next_idx, i - next_idx); + switch (p_filename_skeleton[i + 1]) { + case 'e': // %e -> executable name + ret_val = mputstr(ret_val, TTCN_Logger::get_executable_name()); + break; + case 'h': // %h -> host name + ret_val = mputstr(ret_val, TTCN_Runtime::get_host_name()); + break; + case 'p': // %p -> process ID + ret_val = mputprintf(ret_val, "%ld", (long)getpid()); + break; + case 'l': { // %l -> login name + setpwent(); + struct passwd *p = getpwuid(getuid()); + if (NULL != p) { + ret_val = mputstr(ret_val, p->pw_name); + } + endpwent(); + break; } + case '%': // %% -> single % + ret_val = mputc(ret_val, '%'); + break; + default: // unknown sequence -> leave it as it is + ret_val = mputstrn(ret_val, p_filename_skeleton + i, 2); + break; + } + next_idx = i + 2; + ++i; + } + } + if (next_idx < len) { + ret_val = mputstr(ret_val, p_filename_skeleton + next_idx); + } + return ret_val; +} + void TTCN3_Profiler::set_database_filename(const char* p_database_filename) { Free(database_filename); - database_filename = mcopystr(p_database_filename); + database_filename = finalize_filename(p_database_filename); } void TTCN3_Profiler::set_aggregate_data(boolean p_aggregate_data) @@ -175,7 +150,7 @@ void TTCN3_Profiler::set_aggregate_data(boolean p_aggregate_data) void TTCN3_Profiler::set_stats_filename(const char* p_stats_filename) { Free(stats_filename); - stats_filename = mcopystr(p_stats_filename); + stats_filename = finalize_filename(p_stats_filename); } void TTCN3_Profiler::set_disable_stats(boolean p_disable_stats) @@ -203,17 +178,11 @@ boolean TTCN3_Profiler::is_running() const return !stopped; } -void TTCN3_Profiler::add_ptc(component p_comp_ref) +void TTCN3_Profiler::add_component(component p_comp_ref) { - ptc_list.push_back(p_comp_ref); + component_list.push_back(p_comp_ref); } -#define IMPORT_FORMAT_ERROR(cond) \ - if (cond) { \ - TTCN_warning("Database format is invalid. Profiler and/or code coverage data will not be loaded."); \ - return; \ - } - void TTCN3_Profiler::import_data(component p_comp_ref /* = NULL_COMPREF */) { char* file_name = NULL; @@ -231,240 +200,14 @@ void TTCN3_Profiler::import_data(component p_comp_ref /* = NULL_COMPREF */) file_name = mprintf("%s.%d", database_filename, p_comp_ref); } - // open the file, if it exists - int file_size = 0; - FILE* file = fopen(file_name, "r"); - if (NULL != file) { - // get the file size - fseek(file, 0, SEEK_END); - file_size = ftell(file); - } - while (0 == file_size) { - if (NULL_COMPREF == p_comp_ref) { - // no data from the previous run - return; - } - // as for the process-specific database files: keep reading until it appears - if (NULL != file) { - fclose(file); - } - usleep(1000); - file = fopen(file_name, "r"); - if (NULL != file) { - // refresh the file size - fseek(file, 0, SEEK_END); - file_size = ftell(file); - } - } - - // rewind the file (the file pointer has been moved to the end of the file to - // calculate its size) - rewind(file); - - // read the entire file into a character buffer - char* buffer = (char*)Malloc(file_size); - fread(buffer, 1, file_size, file); - fclose(file); + Profiler_Tools::import_data(profiler_db, file_name, NULL_COMPREF != p_comp_ref, + TTCN_warning); if (NULL_COMPREF != p_comp_ref) { // the process-specific database file is no longer needed remove(file_name); Free(file_name); } - - // initialize a JSON tokenizer with the buffer - JSON_Tokenizer json(buffer, file_size); - Free(buffer); - - // attempt to read tokens from the buffer - // if the format is invalid, abort the importing process - json_token_t token = JSON_TOKEN_NONE; - char* value = NULL; - size_t value_len = 0; - - // start of main array - json.get_next_token(&token, NULL, NULL); - IMPORT_FORMAT_ERROR(JSON_TOKEN_ARRAY_START != token); - - // read objects (one for each TTCN-3 file), until the main array end mark is reached - json.get_next_token(&token, NULL, NULL); - while (JSON_TOKEN_OBJECT_START == token) { - size_t file_index = 0; - - // file name: - json.get_next_token(&token, &value, &value_len); - IMPORT_FORMAT_ERROR(JSON_TOKEN_NAME != token || value_len != 4 || - 0 != strncmp(value, "file", value_len)); - - // read the file name and see if its record already exists - json.get_next_token(&token, &value, &value_len); - IMPORT_FORMAT_ERROR(JSON_TOKEN_STRING != token); - for (file_index = 0; file_index < profiler_db.size(); ++file_index) { - if (strlen(profiler_db[file_index].filename) == value_len - 2 && - 0 == strncmp(profiler_db[file_index].filename, value + 1, value_len - 2)) { - break; - } - } - - // insert a new element if the file was not found - if (profiler_db.size() == file_index) { - profiler_db_item_t item; - item.filename = mcopystrn(value + 1, value_len - 2); - profiler_db.push_back(item); - } - - // functions: - json.get_next_token(&token, &value, &value_len); - IMPORT_FORMAT_ERROR(JSON_TOKEN_NAME != token || value_len != 9 || - 0 != strncmp(value, "functions", value_len)); - - // read and store the functions (an array of objects, same as before) - json.get_next_token(&token, NULL, NULL); - IMPORT_FORMAT_ERROR(JSON_TOKEN_ARRAY_START != token); - json.get_next_token(&token, NULL, NULL); - while (JSON_TOKEN_OBJECT_START == token) { - size_t function_index = 0; - - // function name: - json.get_next_token(&token, &value, &value_len); - IMPORT_FORMAT_ERROR(JSON_TOKEN_NAME != token || value_len != 4 || - 0 != strncmp(value, "name", value_len)); - - // read the function name, it will be checked later - json.get_next_token(&token, &value, &value_len); - IMPORT_FORMAT_ERROR(JSON_TOKEN_STRING != token); - char* function_name = mcopystrn(value + 1, value_len - 2); - - // function start line: - json.get_next_token(&token, &value, &value_len); - IMPORT_FORMAT_ERROR(JSON_TOKEN_NAME != token || value_len != 10 || - 0 != strncmp(value, "start line", value_len)); - - // read the start line and check if the function already exists - json.get_next_token(&token, &value, &value_len); - IMPORT_FORMAT_ERROR(JSON_TOKEN_NUMBER != token); - int start_line = atoi(value); - for (function_index = 0; function_index < profiler_db[file_index].functions.size(); ++function_index) { - if (profiler_db[file_index].functions[function_index].lineno == start_line && - 0 == strcmp(profiler_db[file_index].functions[function_index].name, function_name)) { - break; - } - } - - // insert a new element if the function was not found - if (profiler_db[file_index].functions.size() == function_index) { - profiler_db_item_t::profiler_function_data_t func_data; - func_data.name = function_name; - func_data.lineno = start_line; - func_data.exec_count = 0; - func_data.total_time.tv_sec = 0; - func_data.total_time.tv_usec = 0; - profiler_db[file_index].functions.push_back(func_data); - } - - // function execution count: - json.get_next_token(&token, &value, &value_len); - IMPORT_FORMAT_ERROR(JSON_TOKEN_NAME != token || value_len != 15 || - 0 != strncmp(value, "execution count", value_len)); - - // read the execution count and add it to the current data - json.get_next_token(&token, &value, &value_len); - IMPORT_FORMAT_ERROR(JSON_TOKEN_NUMBER != token); - profiler_db[file_index].functions[function_index].exec_count += atoi(value); - - // total function execution time: - json.get_next_token(&token, &value, &value_len); - IMPORT_FORMAT_ERROR(JSON_TOKEN_NAME != token || value_len != 10 || - 0 != strncmp(value, "total time", value_len)); - - // read the total time and add it to the current data - // note: the database contains a real number, this needs to be split into 2 integers - json.get_next_token(&token, &value, &value_len); - IMPORT_FORMAT_ERROR(JSON_TOKEN_NUMBER != token); - profiler_db[file_index].functions[function_index].total_time = add_timeval( - profiler_db[file_index].functions[function_index].total_time, string2timeval(value)); - - // end of the function's object - json.get_next_token(&token, NULL, NULL); - IMPORT_FORMAT_ERROR(JSON_TOKEN_OBJECT_END != token); - - // read the next token (either the start of another object or the function array end) - json.get_next_token(&token, NULL, NULL); - } - - // function array end - IMPORT_FORMAT_ERROR(JSON_TOKEN_ARRAY_END != token); - - // lines: - json.get_next_token(&token, &value, &value_len); - IMPORT_FORMAT_ERROR(JSON_TOKEN_NAME != token || value_len != 5 || - 0 != strncmp(value, "lines", value_len)); - - // read and store the lines (an array of objects, same as before) - json.get_next_token(&token, NULL, NULL); - IMPORT_FORMAT_ERROR(JSON_TOKEN_ARRAY_START != token); - json.get_next_token(&token, NULL, NULL); - while (JSON_TOKEN_OBJECT_START == token) { - int line_index = 0; - - // line number: - json.get_next_token(&token, &value, &value_len); - IMPORT_FORMAT_ERROR(JSON_TOKEN_NAME != token || value_len != 6 || - 0 != strncmp(value, "number", value_len)); - - // read the line number and check if the line already exists - json.get_next_token(&token, &value, &value_len); - IMPORT_FORMAT_ERROR(JSON_TOKEN_NUMBER != token); - int lineno = atoi(value); - IMPORT_FORMAT_ERROR(lineno < 0); - line_index = get_line(file_index, lineno); - if (-1 == line_index) { - create_line(file_index, lineno); - line_index = profiler_db[file_index].lines.size() - 1; - } - - // line execution count: - json.get_next_token(&token, &value, &value_len); - IMPORT_FORMAT_ERROR(JSON_TOKEN_NAME != token || value_len != 15 || - 0 != strncmp(value, "execution count", value_len)); - - // read the execution count and add it to the current data - json.get_next_token(&token, &value, &value_len); - IMPORT_FORMAT_ERROR(JSON_TOKEN_NUMBER != token); - profiler_db[file_index].lines[line_index].exec_count += atoi(value); - - // total line execution time: - json.get_next_token(&token, &value, &value_len); - IMPORT_FORMAT_ERROR(JSON_TOKEN_NAME != token || value_len != 10 || - 0 != strncmp(value, "total time", value_len)); - - // read the total time and add it to the current data - json.get_next_token(&token, &value, &value_len); - IMPORT_FORMAT_ERROR(JSON_TOKEN_NUMBER != token); - profiler_db[file_index].lines[line_index].total_time = add_timeval( - profiler_db[file_index].lines[line_index].total_time, string2timeval(value)); - - // end of the line's object - json.get_next_token(&token, NULL, NULL); - IMPORT_FORMAT_ERROR(JSON_TOKEN_OBJECT_END != token); - - // read the next token (either the start of another object or the line array end) - json.get_next_token(&token, NULL, NULL); - } - - // line array end - IMPORT_FORMAT_ERROR(JSON_TOKEN_ARRAY_END != token); - - // end of the file's object - json.get_next_token(&token, NULL, NULL); - IMPORT_FORMAT_ERROR(JSON_TOKEN_OBJECT_END != token); - - // read the next token (either the start of another object or the main array end) - json.get_next_token(&token, NULL, NULL); - } - - // main array end - IMPORT_FORMAT_ERROR(JSON_TOKEN_ARRAY_END != token); } void TTCN3_Profiler::export_data() @@ -484,178 +227,12 @@ void TTCN3_Profiler::export_data() file_name = mprintf("%s.%d", database_filename, (component)self); } - // check whether the file can be opened for writing - FILE* file = fopen(file_name, "w"); - if (NULL == file) { - TTCN_warning("Could not open file '%s' for writing. Profiler and/or code coverage " - "data will not be saved.", file_name); - if (file_name != database_filename) { - Free(file_name); - } - return; - } + Profiler_Tools::export_data(profiler_db, file_name, disable_profiler, + disable_coverage, TTCN_warning); if (file_name != database_filename) { Free(file_name); } - - // use the JSON tokenizer to create a JSON document from the database - JSON_Tokenizer json(true); - - // main array, contains an element for each file - json.put_next_token(JSON_TOKEN_ARRAY_START, NULL); - for (size_t i = 0; i < profiler_db.size(); ++i) { - - // each file's data is stored in an object - json.put_next_token(JSON_TOKEN_OBJECT_START, NULL); - - // store the file name - json.put_next_token(JSON_TOKEN_NAME, "file"); - char* file_name_str = mprintf("\"%s\"", profiler_db[i].filename); - json.put_next_token(JSON_TOKEN_STRING, file_name_str); - Free(file_name_str); - - // store the function data in an array (one element for each function) - json.put_next_token(JSON_TOKEN_NAME, "functions"); - json.put_next_token(JSON_TOKEN_ARRAY_START, NULL); - for (size_t j = 0; j < profiler_db[i].functions.size(); ++j) { - // only store functions with actual data - if ((0 != profiler_db[i].functions[j].total_time.tv_sec && - 0 != profiler_db[i].functions[j].total_time.tv_usec) || - 0 != profiler_db[i].functions[j].exec_count) { - - // the data is stored in an object for each function - json.put_next_token(JSON_TOKEN_OBJECT_START, NULL); - - // store the function name - json.put_next_token(JSON_TOKEN_NAME, "name"); - char* func_name_str = mprintf("\"%s\"", profiler_db[i].functions[j].name); - json.put_next_token(JSON_TOKEN_STRING, func_name_str); - Free(func_name_str); - - // store the function start line - json.put_next_token(JSON_TOKEN_NAME, "start line"); - char* start_line_str = mprintf("%d", profiler_db[i].functions[j].lineno); - json.put_next_token(JSON_TOKEN_NUMBER, start_line_str); - Free(start_line_str); - - // store the function execution count - json.put_next_token(JSON_TOKEN_NAME, "execution count"); - char* exec_count_str = mprintf("%d", disable_coverage ? 0 : - profiler_db[i].functions[j].exec_count); - json.put_next_token(JSON_TOKEN_NUMBER, exec_count_str); - Free(exec_count_str); - - // store the function's total execution time - json.put_next_token(JSON_TOKEN_NAME, "total time"); - if (disable_profiler) { - json.put_next_token(JSON_TOKEN_NUMBER, "0.000000"); - } - else { - char* total_time_str = timeval2string(profiler_db[i].functions[j].total_time); - json.put_next_token(JSON_TOKEN_NUMBER, total_time_str); - Free(total_time_str); - } - - // end of function object - json.put_next_token(JSON_TOKEN_OBJECT_END, NULL); - } - } - - // end of function data array - json.put_next_token(JSON_TOKEN_ARRAY_END, NULL); - - // store the line data in an array (one element for each line with useful data) - json.put_next_token(JSON_TOKEN_NAME, "lines"); - json.put_next_token(JSON_TOKEN_ARRAY_START, NULL); - for (size_t j = 0; j < profiler_db[i].lines.size(); ++j) { - // only store lines with actual data - if ((0 != profiler_db[i].lines[j].total_time.tv_sec && - 0 != profiler_db[i].lines[j].total_time.tv_usec) || - 0 != profiler_db[i].lines[j].exec_count) { - - // store line data in an object - json.put_next_token(JSON_TOKEN_OBJECT_START, NULL); - - // store the line number - json.put_next_token(JSON_TOKEN_NAME, "number"); - char* line_number_str = mprintf("%d", profiler_db[i].lines[j].lineno); - json.put_next_token(JSON_TOKEN_NUMBER, line_number_str); - Free(line_number_str); - - // store the line execution count - json.put_next_token(JSON_TOKEN_NAME, "execution count"); - char* exec_count_str = mprintf("%d", disable_coverage ? 0 : - profiler_db[i].lines[j].exec_count); - json.put_next_token(JSON_TOKEN_NUMBER, exec_count_str); - Free(exec_count_str); - - // store the line's total execution time - json.put_next_token(JSON_TOKEN_NAME, "total time"); - if (disable_profiler) { - json.put_next_token(JSON_TOKEN_NUMBER, "0.000000"); - } - else { - char* total_time_str = timeval2string(profiler_db[i].lines[j].total_time); - json.put_next_token(JSON_TOKEN_NUMBER, total_time_str); - Free(total_time_str); - } - - // end of this line's object - json.put_next_token(JSON_TOKEN_OBJECT_END, NULL); - } - } - - // end of line data array - json.put_next_token(JSON_TOKEN_ARRAY_END, NULL); - - // end of this file's object - json.put_next_token(JSON_TOKEN_OBJECT_END, NULL); - } - - // end of main array - json.put_next_token(JSON_TOKEN_ARRAY_END, NULL); - - // write the JSON document into the file - fprintf(file, "%s\n", json.get_buffer()); - fclose(file); -} - -// Structure for one code line or function, used by print_stats for sorting -struct stats_data_t { - const char* filename; // not owned - const char* funcname; // not owned, NULL for code lines that don't start a function - int lineno; - timeval total_time; - int exec_count; -}; - -// Compare function for sorting stats data based on total execution time (descending) -int stats_data_cmp_time(const void* p_left, const void* p_right) { - const stats_data_t* p_left_data = (stats_data_t*)p_left; - const stats_data_t* p_right_data = (stats_data_t*)p_right; - if (p_left_data->total_time.tv_sec > p_right_data->total_time.tv_sec) return -1; - if (p_left_data->total_time.tv_sec < p_right_data->total_time.tv_sec) return 1; - if (p_left_data->total_time.tv_usec > p_right_data->total_time.tv_usec) return -1; - if (p_left_data->total_time.tv_usec < p_right_data->total_time.tv_usec) return 1; - return 0; -} - -// Compare function for sorting stats data based on execution count (descending) -int stats_data_cmp_count(const void* p_left, const void* p_right) { - return ((stats_data_t*)p_right)->exec_count - ((stats_data_t*)p_left)->exec_count; -} - -// Compare function for sorting stats data based on total time per execution count (descending) -int stats_data_cmp_avg(const void* p_left, const void* p_right) { - const stats_data_t* p_left_data = (stats_data_t*)p_left; - const stats_data_t* p_right_data = (stats_data_t*)p_right; - double left_time = p_left_data->total_time.tv_sec + p_left_data->total_time.tv_usec / 1000000.0; - double right_time = p_right_data->total_time.tv_sec + p_right_data->total_time.tv_usec / 1000000.0; - double diff = (right_time / p_right_data->exec_count) - (left_time / p_left_data->exec_count); - if (diff < 0) return -1; - if (diff > 0) return 1; - return 0; } void TTCN3_Profiler::print_stats() @@ -664,882 +241,8 @@ void TTCN3_Profiler::print_stats() return; } - // title - char* title_str = mprintf( - "##################################################\n" - "%s## TTCN-3 %s%s%sstatistics ##%s\n" - "##################################################\n\n\n" - , disable_profiler ? "#######" : (disable_coverage ? "#########" : "") - , disable_profiler ? "" : "profiler " - , (disable_profiler || disable_coverage) ? "" : "and " - , disable_coverage ? "" : "code coverage " - , disable_profiler ? "######" : (disable_coverage ? "#########" : "")); - - char* line_func_count_str = NULL; - if (stats_flags & STATS_NUMBER_OF_LINES) { - line_func_count_str = mcopystr( - "--------------------------------------\n" - "- Number of code lines and functions -\n" - "--------------------------------------\n"); - } - - // line data - char* line_data_str = NULL; - if (stats_flags & STATS_LINE_DATA_RAW) { - line_data_str = mprintf( - "-------------------------------------------------\n" - "%s- Code line data (%s%s%s) -%s\n" - "-------------------------------------------------\n" - , disable_profiler ? "-------" : (disable_coverage ? "---------" : "") - , disable_profiler ? "" : "total time" - , (disable_profiler || disable_coverage) ? "" : " / " - , disable_coverage ? "" : "execution count" - , disable_profiler ? "------" : (disable_coverage ? "---------" : "")); - } - - // average time / exec count for lines - char* line_avg_str = NULL; - if (!disable_coverage && !disable_profiler && (stats_flags & STATS_LINE_AVG_RAW)) { - line_avg_str = mcopystr( - "-------------------------------------------\n" - "- Average time / execution for code lines -\n" - "-------------------------------------------\n"); - } - - // function data - char* func_data_str = NULL; - if (stats_flags & STATS_FUNC_DATA_RAW) { - func_data_str = mprintf( - "------------------------------------------------\n" - "%s- Function data (%s%s%s) -%s\n" - "------------------------------------------------\n" - , disable_profiler ? "-------" : (disable_coverage ? "---------" : "") - , disable_profiler ? "" : "total time" - , (disable_profiler || disable_coverage) ? "" : " / " - , disable_coverage ? "" : "execution count" - , disable_profiler ? "------" : (disable_coverage ? "---------" : "")); - } - - // average time / exec count for functions - char* func_avg_str = NULL; - if (!disable_coverage && !disable_profiler && (stats_flags & STATS_FUNC_AVG_RAW)) { - func_avg_str = mcopystr( - "------------------------------------------\n" - "- Average time / execution for functions -\n" - "------------------------------------------\n"); - } - - char* line_time_sorted_mod_str = NULL; - if (!disable_profiler && (stats_flags & STATS_LINE_TIMES_SORTED_BY_MOD)) { - line_time_sorted_mod_str = mcopystr( - "------------------------------------------------\n" - "- Total time of code lines, sorted, per module -\n" - "------------------------------------------------\n"); - } - - char* line_count_sorted_mod_str = NULL; - if (!disable_coverage && (stats_flags & STATS_LINE_COUNT_SORTED_BY_MOD)) { - line_count_sorted_mod_str = mcopystr( - "-----------------------------------------------------\n" - "- Execution count of code lines, sorted, per module -\n" - "-----------------------------------------------------\n"); - } - - char* line_avg_sorted_mod_str = NULL; - if (!disable_profiler && !disable_coverage && (stats_flags & STATS_LINE_AVG_SORTED_BY_MOD)) { - line_avg_sorted_mod_str = mcopystr( - "--------------------------------------------------------------\n" - "- Average time / execution of code lines, sorted, per module -\n" - "--------------------------------------------------------------\n"); - } - - char* line_time_sorted_tot_str = NULL; - if (!disable_profiler && (stats_flags & STATS_LINE_TIMES_SORTED_TOTAL)) { - line_time_sorted_tot_str = mcopystr( - "-------------------------------------------\n" - "- Total time of code lines, sorted, total -\n" - "-------------------------------------------\n"); - } - - char* line_count_sorted_tot_str = NULL; - if (!disable_coverage && (stats_flags & STATS_LINE_COUNT_SORTED_TOTAL)) { - line_count_sorted_tot_str = mcopystr( - "------------------------------------------------\n" - "- Execution count of code lines, sorted, total -\n" - "------------------------------------------------\n"); - } - - char* line_avg_sorted_tot_str = NULL; - if (!disable_profiler && !disable_coverage && (stats_flags & STATS_LINE_AVG_SORTED_TOTAL)) { - line_avg_sorted_tot_str = mcopystr( - "---------------------------------------------------------\n" - "- Average time / execution of code lines, sorted, total -\n" - "---------------------------------------------------------\n"); - } - - char* func_time_sorted_mod_str = NULL; - if (!disable_profiler && (stats_flags & STATS_FUNC_TIMES_SORTED_BY_MOD)) { - func_time_sorted_mod_str = mcopystr( - "-----------------------------------------------\n" - "- Total time of functions, sorted, per module -\n" - "-----------------------------------------------\n"); - } - - char* func_count_sorted_mod_str = NULL; - if (!disable_coverage && (stats_flags & STATS_FUNC_COUNT_SORTED_BY_MOD)) { - func_count_sorted_mod_str = mcopystr( - "----------------------------------------------------\n" - "- Execution count of functions, sorted, per module -\n" - "----------------------------------------------------\n"); - } - - char* func_avg_sorted_mod_str = NULL; - if (!disable_profiler && !disable_coverage && (stats_flags & STATS_FUNC_AVG_SORTED_BY_MOD)) { - func_avg_sorted_mod_str = mcopystr( - "-------------------------------------------------------------\n" - "- Average time / execution of functions, sorted, per module -\n" - "-------------------------------------------------------------\n"); - } - - char* func_time_sorted_tot_str = NULL; - if (!disable_profiler && (stats_flags & STATS_FUNC_TIMES_SORTED_TOTAL)) { - func_time_sorted_tot_str = mcopystr( - "------------------------------------------\n" - "- Total time of functions, sorted, total -\n" - "------------------------------------------\n"); - } - - char* func_count_sorted_tot_str = NULL; - if (!disable_coverage && (stats_flags & STATS_FUNC_COUNT_SORTED_TOTAL)) { - func_count_sorted_tot_str = mcopystr( - "-----------------------------------------------\n" - "- Execution count of functions, sorted, total -\n" - "-----------------------------------------------\n"); - } - - char* func_avg_sorted_tot_str = NULL; - if (!disable_profiler && !disable_coverage && (stats_flags & STATS_FUNC_AVG_SORTED_TOTAL)) { - func_avg_sorted_tot_str = mcopystr( - "--------------------------------------------------------\n" - "- Average time / execution of functions, sorted, total -\n" - "--------------------------------------------------------\n"); - } - - char* line_time_sorted_top10_str = NULL; - if (!disable_profiler && (stats_flags & STATS_TOP10_LINE_TIMES)) { - line_time_sorted_top10_str = mcopystr( - "------------------------------------\n" - "- Total time of code lines, top 10 -\n" - "------------------------------------\n"); - } - - char* line_count_sorted_top10_str = NULL; - if (!disable_coverage && (stats_flags & STATS_TOP10_LINE_COUNT)) { - line_count_sorted_top10_str = mcopystr( - "-----------------------------------------\n" - "- Execution count of code lines, top 10 -\n" - "-----------------------------------------\n"); - } - - char* line_avg_sorted_top10_str = NULL; - if (!disable_profiler && !disable_coverage && (stats_flags & STATS_TOP10_LINE_AVG)) { - line_avg_sorted_top10_str = mcopystr( - "--------------------------------------------------\n" - "- Average time / execution of code lines, top 10 -\n" - "--------------------------------------------------\n"); - } - - char* func_time_sorted_top10_str = NULL; - if (!disable_profiler && (stats_flags & STATS_TOP10_FUNC_TIMES)) { - func_time_sorted_top10_str = mcopystr( - "-----------------------------------\n" - "- Total time of functions, top 10 -\n" - "-----------------------------------\n"); - } - - char* func_count_sorted_top10_str = NULL; - if (!disable_coverage && (stats_flags & STATS_TOP10_FUNC_COUNT)) { - func_count_sorted_top10_str = mcopystr( - "----------------------------------------\n" - "- Execution count of functions, top 10 -\n" - "----------------------------------------\n"); - } - - char* func_avg_sorted_top10_str = NULL; - if (!disable_profiler && !disable_coverage && (stats_flags & STATS_TOP10_FUNC_AVG)) { - func_avg_sorted_top10_str = mcopystr( - "-------------------------------------------------\n" - "- Average time / execution of functions, top 10 -\n" - "-------------------------------------------------\n"); - } - - char* unused_lines_str = NULL; - char* unused_func_str = NULL; - if (!disable_coverage && (stats_flags & STATS_UNUSED_LINES)) { - unused_lines_str = mcopystr( - "---------------------\n" - "- Unused code lines -\n" - "---------------------\n"); - } - if (!disable_coverage && (stats_flags & STATS_UNUSED_FUNC)) { - unused_func_str = mcopystr( - "--------------------\n" - "- Unused functions -\n" - "--------------------\n"); - } - - // variables for counting totals, and for determining the amount of unused lines/functions - size_t total_code_lines = 0; - size_t total_functions = 0; - size_t used_code_lines = 0; - size_t used_functions = 0; - - // cached sizes of statistics data segments, needed to determine whether a separator - // is needed or not - size_t line_data_str_len = mstrlen(line_data_str); - size_t func_data_str_len = mstrlen(func_data_str); - size_t unused_lines_str_len = mstrlen(unused_lines_str); - size_t unused_func_str_len = mstrlen(unused_func_str); - size_t line_avg_str_len = mstrlen(line_avg_str); - size_t func_avg_str_len = mstrlen(func_avg_str); - - // cycle through the database and gather the necessary data - for (size_t i = 0; i < profiler_db.size(); ++i) { - if (i > 0) { - // add separators between files (only add them if the previous file actually added something) - if ((stats_flags & STATS_LINE_DATA_RAW) && line_data_str_len != mstrlen(line_data_str)) { - line_data_str = mputstr(line_data_str, "-------------------------------------------------\n"); - line_data_str_len = mstrlen(line_data_str); - } - if ((stats_flags & STATS_FUNC_DATA_RAW) && func_data_str_len != mstrlen(func_data_str)) { - func_data_str = mputstr(func_data_str, "------------------------------------------------\n"); - func_data_str_len = mstrlen(func_data_str); - } - if (!disable_coverage) { - if ((stats_flags & STATS_UNUSED_LINES) && unused_lines_str_len != mstrlen(unused_lines_str)) { - unused_lines_str = mputstr(unused_lines_str, "---------------------\n"); - unused_lines_str_len = mstrlen(unused_lines_str); - } - if ((stats_flags & STATS_UNUSED_FUNC) && unused_func_str_len != mstrlen(unused_func_str)) { - unused_func_str = mputstr(unused_func_str, "--------------------\n"); - unused_func_str_len = mstrlen(unused_func_str); - } - if (!disable_profiler) { - if ((stats_flags & STATS_LINE_AVG_RAW) && line_avg_str_len != mstrlen(line_avg_str)) { - line_avg_str = mputstr(line_avg_str, "-------------------------------------------\n"); - line_avg_str_len = mstrlen(line_avg_str); - } - if ((stats_flags & STATS_FUNC_AVG_RAW) && func_avg_str_len != mstrlen(func_avg_str)) { - func_avg_str = mputstr(func_avg_str, "------------------------------------------\n"); - func_avg_str_len = mstrlen(func_avg_str); - } - } - } - } - - // lines - for (size_t j = 0; j < profiler_db[i].lines.size(); ++j) { - // line specification (including function name for the function's start line) - char* line_spec_str = mprintf("%s:%d", profiler_db[i].filename, - profiler_db[i].lines[j].lineno); - int func = get_function(i, profiler_db[i].lines[j].lineno); - if (-1 != func) { - line_spec_str = mputprintf(line_spec_str, " [%s]", profiler_db[i].functions[func].name); - } - line_spec_str = mputstrn(line_spec_str, "\n", 1); - - if (disable_coverage || 0 != profiler_db[i].lines[j].exec_count) { - if (!disable_profiler) { - if (stats_flags & STATS_LINE_DATA_RAW) { - char* total_time_str = timeval2string(profiler_db[i].lines[j].total_time); - line_data_str = mputprintf(line_data_str, "%ss", total_time_str); - Free(total_time_str); - } - if (!disable_coverage) { - if (stats_flags & STATS_LINE_DATA_RAW) { - line_data_str = mputstrn(line_data_str, "\t/\t", 3); - } - if (stats_flags & STATS_LINE_AVG_RAW) { - double avg = (profiler_db[i].lines[j].total_time.tv_sec + - profiler_db[i].lines[j].total_time.tv_usec / 1000000.0) / - profiler_db[i].lines[j].exec_count; - char* total_time_str = timeval2string(profiler_db[i].lines[j].total_time); - line_avg_str = mputprintf(line_avg_str, "%.6lfs\t(%ss / %d)", - avg, total_time_str, profiler_db[i].lines[j].exec_count); - Free(total_time_str); - } - } - } - if (!disable_coverage && (stats_flags & STATS_LINE_DATA_RAW)) { - line_data_str = mputprintf(line_data_str, "%d", profiler_db[i].lines[j].exec_count); - } - - // add the line spec string to the other strings - if (stats_flags & STATS_LINE_DATA_RAW) { - line_data_str = mputprintf(line_data_str, "\t%s", line_spec_str); - } - if (!disable_profiler && !disable_coverage && (stats_flags & STATS_LINE_AVG_RAW)) { - line_avg_str = mputprintf(line_avg_str, "\t%s", line_spec_str); - } - ++used_code_lines; - } - else if (stats_flags & STATS_UNUSED_LINES) { - // unused line - unused_lines_str = mputstr(unused_lines_str, line_spec_str); - } - Free(line_spec_str); - } - - // functions - for (size_t j = 0; j < profiler_db[i].functions.size(); ++j) { - // functions specification - char* func_spec_str = mprintf("%s:%d [%s]\n", profiler_db[i].filename, - profiler_db[i].functions[j].lineno, profiler_db[i].functions[j].name); - - if (disable_coverage || 0 != profiler_db[i].functions[j].exec_count) { - if (!disable_profiler) { - if (stats_flags & STATS_FUNC_DATA_RAW) { - char* total_time_str = timeval2string(profiler_db[i].functions[j].total_time); - func_data_str = mputprintf(func_data_str, "%ss", total_time_str); - Free(total_time_str); - } - if (!disable_coverage) { - if (stats_flags & STATS_FUNC_DATA_RAW) { - func_data_str = mputstrn(func_data_str, "\t/\t", 3); - } - if (stats_flags & STATS_FUNC_AVG_RAW) { - double avg = (profiler_db[i].functions[j].total_time.tv_sec + - profiler_db[i].functions[j].total_time.tv_usec / 1000000.0) / - profiler_db[i].functions[j].exec_count; - char* total_time_str = timeval2string(profiler_db[i].functions[j].total_time); - func_avg_str = mputprintf(func_avg_str, "%.6lfs\t(%ss / %d)", - avg, total_time_str, profiler_db[i].functions[j].exec_count); - Free(total_time_str); - } - } - } - if (!disable_coverage && (stats_flags & STATS_FUNC_DATA_RAW)) { - func_data_str = mputprintf(func_data_str, "%d", profiler_db[i].functions[j].exec_count); - } - - // add the line spec string to the other strings - if (stats_flags & STATS_FUNC_DATA_RAW) { - func_data_str = mputprintf(func_data_str, "\t%s", func_spec_str); - } - if (!disable_profiler && !disable_coverage && (stats_flags & STATS_FUNC_AVG_RAW)) { - func_avg_str = mputprintf(func_avg_str, "\t%s", func_spec_str); - } - - ++used_functions; - } - else if (stats_flags & STATS_UNUSED_FUNC) { - // unused function - unused_func_str = mputprintf(unused_func_str, func_spec_str); - } - Free(func_spec_str); - } - - // number of lines and functions - if (stats_flags & STATS_NUMBER_OF_LINES) { - line_func_count_str = mputprintf(line_func_count_str, "%s:\t%lu lines,\t%lu functions\n", - profiler_db[i].filename, profiler_db[i].lines.size(), profiler_db[i].functions.size()); - } - total_code_lines += profiler_db[i].lines.size(); - total_functions += profiler_db[i].functions.size(); - } - if (stats_flags & STATS_NUMBER_OF_LINES) { - line_func_count_str = mputprintf(line_func_count_str, - "--------------------------------------\n" - "Total:\t%lu lines,\t%lu functions\n", total_code_lines, total_functions); - } - - if (stats_flags & (STATS_TOP10_ALL_DATA | STATS_ALL_DATA_SORTED)) { - // copy code line and function info into stats_data_t containers for sorting - stats_data_t* code_line_stats = (stats_data_t*)Malloc(used_code_lines * sizeof(stats_data_t)); - stats_data_t* function_stats = (stats_data_t*)Malloc(used_functions * sizeof(stats_data_t)); - int line_index = 0; - int func_index = 0; - - for (size_t i = 0; i < profiler_db.size(); ++i) { - for (size_t j = 0; j < profiler_db[i].lines.size(); ++j) { - if (disable_coverage || 0 != profiler_db[i].lines[j].exec_count) { - code_line_stats[line_index].filename = profiler_db[i].filename; - code_line_stats[line_index].funcname = NULL; - code_line_stats[line_index].lineno = profiler_db[i].lines[j].lineno; - code_line_stats[line_index].total_time = profiler_db[i].lines[j].total_time; - code_line_stats[line_index].exec_count = profiler_db[i].lines[j].exec_count; - int func = get_function(i, profiler_db[i].lines[j].lineno); - if (-1 != func) { - code_line_stats[line_index].funcname = profiler_db[i].functions[func].name; - } - ++line_index; - } - } - for (size_t j = 0; j < profiler_db[i].functions.size(); ++j) { - if (disable_coverage || 0 != profiler_db[i].functions[j].exec_count) { - function_stats[func_index].filename = profiler_db[i].filename; - function_stats[func_index].funcname = profiler_db[i].functions[j].name; - function_stats[func_index].lineno = profiler_db[i].functions[j].lineno; - function_stats[func_index].total_time = profiler_db[i].functions[j].total_time; - function_stats[func_index].exec_count = profiler_db[i].functions[j].exec_count; - ++func_index; - } - } - } - - if (!disable_profiler) { - // sort the code lines and functions by total time - qsort(code_line_stats, used_code_lines, sizeof(stats_data_t), &stats_data_cmp_time); - qsort(function_stats, used_functions, sizeof(stats_data_t), &stats_data_cmp_time); - - if (stats_flags & (STATS_LINE_TIMES_SORTED_TOTAL | STATS_TOP10_LINE_TIMES)) { - // cycle through the sorted code lines and gather the necessary data - for (size_t i = 0; i < used_code_lines; ++i) { - char* total_time_str = timeval2string(code_line_stats[i].total_time); - char* the_data = mprintf("%ss\t%s:%d", total_time_str, - code_line_stats[i].filename, code_line_stats[i].lineno); - Free(total_time_str); - if (NULL != code_line_stats[i].funcname) { - the_data = mputprintf(the_data, " [%s]", code_line_stats[i].funcname); - } - the_data = mputstrn(the_data, "\n", 1); - if (stats_flags & STATS_LINE_TIMES_SORTED_TOTAL) { - line_time_sorted_tot_str = mputstr(line_time_sorted_tot_str, the_data); - } - if (i < 10 && (stats_flags & STATS_TOP10_LINE_TIMES)) { - line_time_sorted_top10_str = mputprintf(line_time_sorted_top10_str, - "%2lu.\t%s", i + 1, the_data); - } - Free(the_data); - } - } - - if (stats_flags & (STATS_FUNC_TIMES_SORTED_TOTAL | STATS_TOP10_FUNC_TIMES)) { - // cycle through the sorted functions and gather the necessary data - for (size_t i = 0; i < used_functions; ++i) { - char* total_time_str = timeval2string(function_stats[i].total_time); - char* the_data = mprintf("%ss\t%s:%d [%s]\n", total_time_str, - function_stats[i].filename, function_stats[i].lineno, function_stats[i].funcname); - Free(total_time_str); - if (stats_flags & STATS_FUNC_TIMES_SORTED_TOTAL) { - func_time_sorted_tot_str = mputstr(func_time_sorted_tot_str, the_data); - } - if (i < 10 && (stats_flags & STATS_TOP10_FUNC_TIMES)) { - func_time_sorted_top10_str = mputprintf(func_time_sorted_top10_str, - "%2lu.\t%s", i + 1, the_data); - } - Free(the_data); - } - } - - if (stats_flags & (STATS_LINE_TIMES_SORTED_BY_MOD | STATS_FUNC_TIMES_SORTED_BY_MOD)) { - // cached string lengths, to avoid multiple separators after each other - size_t line_time_sorted_mod_str_len = mstrlen(line_time_sorted_mod_str); - size_t func_time_sorted_mod_str_len = mstrlen(func_time_sorted_mod_str); - - // cycle through the sorted statistics and gather the necessary data per module - for (size_t i = 0; i < profiler_db.size(); ++i) { - if (i > 0) { - if ((stats_flags & STATS_LINE_TIMES_SORTED_BY_MOD) && - line_time_sorted_mod_str_len != mstrlen(line_time_sorted_mod_str)) { - line_time_sorted_mod_str = mputstr(line_time_sorted_mod_str, - "------------------------------------------------\n"); - line_time_sorted_mod_str_len = mstrlen(line_time_sorted_mod_str); - } - if ((stats_flags & STATS_FUNC_TIMES_SORTED_BY_MOD) && - func_time_sorted_mod_str_len != mstrlen(func_time_sorted_mod_str)) { - func_time_sorted_mod_str = mputstr(func_time_sorted_mod_str, - "-----------------------------------------------\n"); - func_time_sorted_mod_str_len = mstrlen(func_time_sorted_mod_str); - } - } - if (stats_flags & STATS_LINE_TIMES_SORTED_BY_MOD) { - for (size_t j = 0; j < used_code_lines; ++j) { - if (0 == strcmp(code_line_stats[j].filename, profiler_db[i].filename)) { - char* total_time_str = timeval2string(code_line_stats[j].total_time); - line_time_sorted_mod_str = mputprintf(line_time_sorted_mod_str, - "%ss\t%s:%d", total_time_str, code_line_stats[j].filename, - code_line_stats[j].lineno); - Free(total_time_str); - if (NULL != code_line_stats[j].funcname) { - line_time_sorted_mod_str = mputprintf(line_time_sorted_mod_str, - " [%s]", code_line_stats[j].funcname); - } - line_time_sorted_mod_str = mputstrn(line_time_sorted_mod_str, "\n", 1); - } - } - } - if (stats_flags & STATS_FUNC_TIMES_SORTED_BY_MOD) { - for (size_t j = 0; j < used_functions; ++j) { - if (0 == strcmp(function_stats[j].filename, profiler_db[i].filename)) { - char* total_time_str = timeval2string(function_stats[j].total_time); - func_time_sorted_mod_str = mputprintf(func_time_sorted_mod_str, - "%ss\t%s:%d [%s]\n", total_time_str, function_stats[j].filename, - function_stats[j].lineno, function_stats[j].funcname); - Free(total_time_str); - } - } - } - } - } - } - - if (!disable_coverage) { - // sort the code lines and functions by execution count - qsort(code_line_stats, used_code_lines, sizeof(stats_data_t), &stats_data_cmp_count); - qsort(function_stats, used_functions, sizeof(stats_data_t), &stats_data_cmp_count); - - if (stats_flags & (STATS_LINE_COUNT_SORTED_TOTAL | STATS_TOP10_LINE_COUNT)) { - // cycle through the sorted code lines and gather the necessary data - for (size_t i = 0; i < used_code_lines; ++i) { - char* the_data = mprintf("%d\t%s:%d", code_line_stats[i].exec_count, - code_line_stats[i].filename, code_line_stats[i].lineno); - if (NULL != code_line_stats[i].funcname) { - the_data = mputprintf(the_data, " [%s]", code_line_stats[i].funcname); - } - the_data = mputstrn(the_data, "\n", 1); - if (stats_flags & STATS_LINE_COUNT_SORTED_TOTAL) { - line_count_sorted_tot_str = mputstr(line_count_sorted_tot_str, the_data); - } - if (i < 10 && (stats_flags & STATS_TOP10_LINE_COUNT)) { - line_count_sorted_top10_str = mputprintf(line_count_sorted_top10_str, - "%2lu.\t%s", i + 1, the_data); - } - Free(the_data); - } - } - - if (stats_flags & (STATS_FUNC_COUNT_SORTED_TOTAL | STATS_TOP10_FUNC_COUNT)) { - // cycle through the sorted functions and gather the necessary data - for (size_t i = 0; i < used_functions; ++i) { - char* the_data = mprintf("%d\t%s:%d [%s]\n", - function_stats[i].exec_count, function_stats[i].filename, - function_stats[i].lineno, function_stats[i].funcname); - if (stats_flags & STATS_FUNC_COUNT_SORTED_TOTAL) { - func_count_sorted_tot_str = mputstr(func_count_sorted_tot_str, the_data); - } - if (i < 10 && (stats_flags & STATS_TOP10_FUNC_COUNT)) { - func_count_sorted_top10_str = mputprintf(func_count_sorted_top10_str, - "%2lu.\t%s", i + 1, the_data); - } - Free(the_data); - } - } - - if (stats_flags & (STATS_LINE_COUNT_SORTED_BY_MOD | STATS_FUNC_COUNT_SORTED_BY_MOD)) { - // cached string lengths, to avoid multiple separators after each other - size_t line_count_sorted_mod_str_len = mstrlen(line_count_sorted_mod_str); - size_t func_count_sorted_mod_str_len = mstrlen(func_count_sorted_mod_str); - - // cycle through the sorted statistics and gather the necessary data per module - for (size_t i = 0; i < profiler_db.size(); ++i) { - if (i > 0) { - if ((stats_flags & STATS_LINE_COUNT_SORTED_BY_MOD) && - line_count_sorted_mod_str_len != mstrlen(line_count_sorted_mod_str)) { - line_count_sorted_mod_str = mputstr(line_count_sorted_mod_str, - "-----------------------------------------------------\n"); - line_count_sorted_mod_str_len = mstrlen(line_count_sorted_mod_str); - } - if ((stats_flags & STATS_FUNC_COUNT_SORTED_BY_MOD) && - func_count_sorted_mod_str_len != mstrlen(func_count_sorted_mod_str)) { - func_count_sorted_mod_str = mputstr(func_count_sorted_mod_str, - "----------------------------------------------------\n"); - func_count_sorted_mod_str_len = mstrlen(func_count_sorted_mod_str); - } - } - if (stats_flags & STATS_LINE_COUNT_SORTED_BY_MOD) { - for (size_t j = 0; j < used_code_lines; ++j) { - if (0 == strcmp(code_line_stats[j].filename, profiler_db[i].filename)) { - line_count_sorted_mod_str = mputprintf(line_count_sorted_mod_str, - "%d\t%s:%d", code_line_stats[j].exec_count, code_line_stats[j].filename, - code_line_stats[j].lineno); - if (NULL != code_line_stats[j].funcname) { - line_count_sorted_mod_str = mputprintf(line_count_sorted_mod_str, - " [%s]", code_line_stats[j].funcname); - } - line_count_sorted_mod_str = mputstrn(line_count_sorted_mod_str, "\n", 1); - } - } - } - if (stats_flags & STATS_FUNC_COUNT_SORTED_BY_MOD) { - for (size_t j = 0; j < used_functions; ++j) { - if (0 == strcmp(function_stats[j].filename, profiler_db[i].filename)) { - func_count_sorted_mod_str = mputprintf(func_count_sorted_mod_str, - "%d\t%s:%d [%s]\n", function_stats[j].exec_count, function_stats[j].filename, - function_stats[j].lineno, function_stats[j].funcname); - } - } - } - } - } - } - - if (!disable_profiler && !disable_coverage) { - // sort the code lines and functions by average time / execution - qsort(code_line_stats, used_code_lines, sizeof(stats_data_t), &stats_data_cmp_avg); - qsort(function_stats, used_functions, sizeof(stats_data_t), &stats_data_cmp_avg); - - if (stats_flags & (STATS_LINE_AVG_SORTED_TOTAL | STATS_TOP10_LINE_AVG)) { - // cycle through the sorted code lines and gather the necessary data - for (size_t i = 0; i < used_code_lines; ++i) { - double avg = (code_line_stats[i].total_time.tv_sec + - code_line_stats[i].total_time.tv_usec / 1000000.0) / - code_line_stats[i].exec_count; - char* total_time_str = timeval2string(code_line_stats[i].total_time); - char* the_data = mprintf("%.6lfs\t(%ss / %d)\t%s:%d", - avg, total_time_str, code_line_stats[i].exec_count, - code_line_stats[i].filename, code_line_stats[i].lineno); - Free(total_time_str); - if (NULL != code_line_stats[i].funcname) { - the_data = mputprintf(the_data, " [%s]", code_line_stats[i].funcname); - } - the_data = mputstrn(the_data, "\n", 1); - if (stats_flags & STATS_LINE_AVG_SORTED_TOTAL) { - line_avg_sorted_tot_str = mputstr(line_avg_sorted_tot_str, the_data); - } - if (i < 10 && (stats_flags & STATS_TOP10_LINE_AVG)) { - line_avg_sorted_top10_str = mputprintf(line_avg_sorted_top10_str, - "%2lu.\t%s", i + 1, the_data); - } - Free(the_data); - } - } - - if (stats_flags & (STATS_FUNC_AVG_SORTED_TOTAL | STATS_TOP10_FUNC_AVG)) { - // cycle through the sorted functions and gather the necessary data - for (size_t i = 0; i < used_functions; ++i) { - double avg = (function_stats[i].total_time.tv_sec + - function_stats[i].total_time.tv_usec / 1000000.0) / - function_stats[i].exec_count; - char* total_time_str = timeval2string(function_stats[i].total_time); - char* the_data = mprintf("%.6lfs\t(%ss / %d)\t%s:%d [%s]\n", - avg, total_time_str, function_stats[i].exec_count, - function_stats[i].filename, function_stats[i].lineno, function_stats[i].funcname); - Free(total_time_str); - if (stats_flags & STATS_FUNC_AVG_SORTED_TOTAL) { - func_avg_sorted_tot_str = mputstr(func_avg_sorted_tot_str, the_data); - } - if (i < 10 && (stats_flags & STATS_TOP10_FUNC_AVG)) { - func_avg_sorted_top10_str = mputprintf(func_avg_sorted_top10_str, - "%2lu.\t%s", i + 1, the_data); - } - Free(the_data); - } - } - - if (stats_flags & (STATS_LINE_AVG_SORTED_BY_MOD | STATS_FUNC_AVG_SORTED_BY_MOD)) { - // cached string lengths, to avoid multiple separators after each other - size_t line_avg_sorted_mod_str_len = mstrlen(line_avg_sorted_mod_str); - size_t func_avg_sorted_mod_str_len = mstrlen(func_avg_sorted_mod_str); - - // cycle through the sorted statistics and gather the necessary data per module - for (size_t i = 0; i < profiler_db.size(); ++i) { - if (i > 0) { - if ((stats_flags & STATS_LINE_AVG_SORTED_BY_MOD) && - line_avg_sorted_mod_str_len != mstrlen(line_avg_sorted_mod_str)) { - line_avg_sorted_mod_str = mputstr(line_avg_sorted_mod_str, - "--------------------------------------------------------------\n"); - line_avg_sorted_mod_str_len = mstrlen(line_avg_sorted_mod_str); - } - if ((stats_flags & STATS_FUNC_AVG_SORTED_BY_MOD) && - func_avg_sorted_mod_str_len != mstrlen(func_avg_sorted_mod_str)) { - func_avg_sorted_mod_str = mputstr(func_avg_sorted_mod_str, - "-------------------------------------------------------------\n"); - func_avg_sorted_mod_str_len = mstrlen(func_avg_sorted_mod_str); - } - } - if (stats_flags & STATS_LINE_AVG_SORTED_BY_MOD) { - for (size_t j = 0; j < used_code_lines; ++j) { - if (0 == strcmp(code_line_stats[j].filename, profiler_db[i].filename)) { - double avg = (code_line_stats[j].total_time.tv_sec + - code_line_stats[j].total_time.tv_usec / 1000000.0) / - code_line_stats[j].exec_count; - char* total_time_str = timeval2string(code_line_stats[j].total_time); - line_avg_sorted_mod_str = mputprintf(line_avg_sorted_mod_str, - "%.6lfs\t(%ss / %d)\t%s:%d", - avg, total_time_str, code_line_stats[j].exec_count, - code_line_stats[j].filename, code_line_stats[j].lineno); - Free(total_time_str); - if (NULL != code_line_stats[j].funcname) { - line_avg_sorted_mod_str = mputprintf(line_avg_sorted_mod_str, - " [%s]", code_line_stats[j].funcname); - } - line_avg_sorted_mod_str = mputstrn(line_avg_sorted_mod_str, "\n", 1); - } - } - } - if (stats_flags & STATS_FUNC_AVG_SORTED_BY_MOD) { - for (size_t j = 0; j < used_functions; ++j) { - if (0 == strcmp(function_stats[j].filename, profiler_db[i].filename)) { - double avg = (function_stats[j].total_time.tv_sec + - function_stats[j].total_time.tv_usec / 1000000.0) / - function_stats[j].exec_count; - char* total_time_str = timeval2string(function_stats[j].total_time); - func_avg_sorted_mod_str = mputprintf(func_avg_sorted_mod_str, - "%.6lfs\t(%ss / %d)\t%s:%d [%s]\n", - avg, total_time_str, function_stats[j].exec_count, - function_stats[j].filename, function_stats[j].lineno, function_stats[j].funcname); - Free(total_time_str); - } - } - } - } - } - } - - // free the stats data - Free(code_line_stats); - Free(function_stats); - } - - // add new lines at the end of each segment - if (stats_flags & STATS_NUMBER_OF_LINES) { - line_func_count_str = mputstrn(line_func_count_str, "\n", 1); - } - if (stats_flags & STATS_LINE_DATA_RAW) { - line_data_str = mputstrn(line_data_str, "\n", 1); - } - if (stats_flags & STATS_FUNC_DATA_RAW) { - func_data_str = mputstrn(func_data_str, "\n", 1); - } - if (!disable_profiler) { - if (stats_flags & STATS_LINE_TIMES_SORTED_BY_MOD) { - line_time_sorted_mod_str = mputstrn(line_time_sorted_mod_str, "\n", 1); - } - if (stats_flags & STATS_LINE_TIMES_SORTED_TOTAL) { - line_time_sorted_tot_str = mputstrn(line_time_sorted_tot_str, "\n", 1); - } - if (stats_flags & STATS_FUNC_TIMES_SORTED_BY_MOD) { - func_time_sorted_mod_str = mputstrn(func_time_sorted_mod_str, "\n", 1); - } - if (stats_flags & STATS_FUNC_TIMES_SORTED_TOTAL) { - func_time_sorted_tot_str = mputstrn(func_time_sorted_tot_str, "\n", 1); - } - if (stats_flags & STATS_TOP10_LINE_TIMES) { - line_time_sorted_top10_str = mputstrn(line_time_sorted_top10_str, "\n", 1); - } - if (stats_flags & STATS_TOP10_FUNC_TIMES) { - func_time_sorted_top10_str = mputstrn(func_time_sorted_top10_str, "\n", 1); - } - if (!disable_coverage) { - if (stats_flags & STATS_LINE_AVG_RAW) { - line_avg_str = mputstrn(line_avg_str, "\n", 1); - } - if (stats_flags & STATS_LINE_AVG_RAW) { - func_avg_str = mputstrn(func_avg_str, "\n", 1); - } - if (stats_flags & STATS_LINE_AVG_SORTED_BY_MOD) { - line_avg_sorted_mod_str = mputstrn(line_avg_sorted_mod_str, "\n", 1); - } - if (stats_flags & STATS_LINE_AVG_SORTED_TOTAL) { - line_avg_sorted_tot_str = mputstrn(line_avg_sorted_tot_str, "\n", 1); - } - if (stats_flags & STATS_FUNC_AVG_SORTED_BY_MOD) { - func_avg_sorted_mod_str = mputstrn(func_avg_sorted_mod_str, "\n", 1); - } - if (stats_flags & STATS_FUNC_AVG_SORTED_TOTAL) { - func_avg_sorted_tot_str = mputstrn(func_avg_sorted_tot_str, "\n", 1); - } - if (stats_flags & STATS_TOP10_LINE_AVG) { - line_avg_sorted_top10_str = mputstrn(line_avg_sorted_top10_str, "\n", 1); - } - if (stats_flags & STATS_TOP10_FUNC_AVG) { - func_avg_sorted_top10_str = mputstrn(func_avg_sorted_top10_str, "\n", 1); - } - } - } - if (!disable_coverage) { - if (stats_flags & STATS_LINE_COUNT_SORTED_BY_MOD) { - line_count_sorted_mod_str = mputstrn(line_count_sorted_mod_str, "\n", 1); - } - if (stats_flags & STATS_LINE_COUNT_SORTED_TOTAL) { - line_count_sorted_tot_str = mputstrn(line_count_sorted_tot_str, "\n", 1); - } - if (stats_flags & STATS_FUNC_COUNT_SORTED_BY_MOD) { - func_count_sorted_mod_str = mputstrn(func_count_sorted_mod_str, "\n", 1); - } - if (stats_flags & STATS_FUNC_COUNT_SORTED_TOTAL) { - func_count_sorted_tot_str = mputstrn(func_count_sorted_tot_str, "\n", 1); - } - if (stats_flags & STATS_TOP10_LINE_COUNT) { - line_count_sorted_top10_str = mputstrn(line_count_sorted_top10_str, "\n", 1); - } - if (stats_flags & STATS_TOP10_FUNC_COUNT) { - func_count_sorted_top10_str = mputstrn(func_count_sorted_top10_str, "\n", 1); - } - if (stats_flags & STATS_UNUSED_LINES) { - unused_lines_str = mputstrn(unused_lines_str, "\n", 1); - } - if (stats_flags & STATS_UNUSED_FUNC) { - unused_func_str = mputstrn(unused_func_str, "\n", 1); - } - } - - // write the statistics to the specified file - FILE* file = fopen(stats_filename, "w"); - if (NULL == file) { - TTCN_warning("Could not open file '%s' for writing. Profiler and/or code coverage " - "statistics will not be saved.", stats_filename); - return; - } - // by now the strings for all disabled statistics entries should be null - fprintf(file, "%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s" - , title_str - , (NULL != line_func_count_str) ? line_func_count_str : "" - , (NULL != line_data_str) ? line_data_str : "" - , (NULL != line_avg_str) ? line_avg_str : "" - , (NULL != func_data_str) ? func_data_str : "" - , (NULL != func_avg_str) ? func_avg_str : "" - , (NULL != line_time_sorted_mod_str) ? line_time_sorted_mod_str : "" - , (NULL != line_time_sorted_tot_str) ? line_time_sorted_tot_str : "" - , (NULL != func_time_sorted_mod_str) ? func_time_sorted_mod_str : "" - , (NULL != func_time_sorted_tot_str) ? func_time_sorted_tot_str : "" - , (NULL != line_count_sorted_mod_str) ? line_count_sorted_mod_str : "" - , (NULL != line_count_sorted_tot_str) ? line_count_sorted_tot_str : "" - , (NULL != func_count_sorted_mod_str) ? func_count_sorted_mod_str : "" - , (NULL != func_count_sorted_tot_str) ? func_count_sorted_tot_str : "" - , (NULL != line_avg_sorted_mod_str) ? line_avg_sorted_mod_str : "" - , (NULL != line_avg_sorted_tot_str) ? line_avg_sorted_tot_str : "" - , (NULL != func_avg_sorted_mod_str) ? func_avg_sorted_mod_str : "" - , (NULL != func_avg_sorted_tot_str) ? func_avg_sorted_tot_str : "" - , (NULL != line_time_sorted_top10_str) ? line_time_sorted_top10_str : "" - , (NULL != func_time_sorted_top10_str) ? func_time_sorted_top10_str : "" - , (NULL != line_count_sorted_top10_str) ? line_count_sorted_top10_str : "" - , (NULL != func_count_sorted_top10_str) ? func_count_sorted_top10_str : "" - , (NULL != line_avg_sorted_top10_str) ? line_avg_sorted_top10_str : "" - , (NULL != func_avg_sorted_top10_str) ? func_avg_sorted_top10_str : "" - , (NULL != unused_lines_str) ? unused_lines_str : "" - , (NULL != unused_func_str) ? unused_func_str : ""); - - fclose(file); - - // free the strings - Free(title_str); - Free(line_func_count_str); - Free(line_data_str); - Free(line_avg_str); - Free(func_data_str); - Free(func_avg_str); - Free(line_time_sorted_mod_str); - Free(line_time_sorted_tot_str); - Free(func_time_sorted_mod_str); - Free(func_time_sorted_tot_str); - Free(line_count_sorted_mod_str); - Free(line_count_sorted_tot_str); - Free(func_count_sorted_mod_str); - Free(func_count_sorted_tot_str); - Free(line_avg_sorted_mod_str); - Free(line_avg_sorted_tot_str); - Free(func_avg_sorted_mod_str); - Free(func_avg_sorted_tot_str); - Free(line_time_sorted_top10_str); - Free(func_time_sorted_top10_str); - Free(line_count_sorted_top10_str); - Free(func_count_sorted_top10_str); - Free(line_avg_sorted_top10_str); - Free(func_avg_sorted_top10_str); - Free(unused_lines_str); - Free(unused_func_str); + Profiler_Tools::print_stats(profiler_db, stats_filename, disable_profiler, + disable_coverage, stats_flags, TTCN_warning); } void TTCN3_Profiler::reset() @@ -1592,7 +295,7 @@ void TTCN3_Profiler::execute_line(const char* filename, int lineno) if (!stopped) { if (!disable_profiler && NULL != prev_file) { // this line is in the same function as the previous one, measure the time difference - timeval elapsed = subtract_timeval(get_time(), prev_time); + timeval elapsed = Profiler_Tools::subtract_timeval(get_time(), prev_time); // add the elapsed time to the total time of the previous line add_line_time(elapsed, get_element(prev_file), prev_line); @@ -1625,7 +328,7 @@ int TTCN3_Profiler::get_element(const char* filename) } } - profiler_db_item_t item; + Profiler_Tools::profiler_db_item_t item; item.filename = mcopystr(filename); profiler_db.push_back(item); return profiler_db.size() - 1; @@ -1633,43 +336,22 @@ int TTCN3_Profiler::get_element(const char* filename) int TTCN3_Profiler::get_function(int element, int lineno) { - for (size_t i = 0; i < profiler_db[element].functions.size(); ++i) { - if (profiler_db[element].functions[i].lineno == lineno) { - return i; - } - } - return -1; + return Profiler_Tools::get_function(profiler_db, element, lineno); } void TTCN3_Profiler::create_function(int element, int lineno, const char* function_name) { - profiler_db_item_t::profiler_function_data_t func_data; - func_data.lineno = lineno; - func_data.total_time.tv_sec = 0; - func_data.total_time.tv_usec = 0; - func_data.exec_count = 0; - func_data.name = mcopystr(function_name); - profiler_db[element].functions.push_back(func_data); + Profiler_Tools::create_function(profiler_db, element, lineno, function_name); } int TTCN3_Profiler::get_line(int element, int lineno) { - for (size_t i = 0; i < profiler_db[element].lines.size(); ++i) { - if (profiler_db[element].lines[i].lineno == lineno) { - return i; - } - } - return -1; + return Profiler_Tools::get_line(profiler_db, element, lineno); } void TTCN3_Profiler::create_line(int element, int lineno) { - profiler_db_item_t::profiler_line_data_t line_data; - line_data.lineno = lineno; - line_data.total_time.tv_sec = 0; - line_data.total_time.tv_usec = 0; - line_data.exec_count = 0; - profiler_db[element].lines.push_back(line_data); + Profiler_Tools::create_line(profiler_db, element, lineno); } void TTCN3_Profiler::add_line_time(timeval elapsed, int element, int lineno) @@ -1677,7 +359,7 @@ void TTCN3_Profiler::add_line_time(timeval elapsed, int element, int lineno) if (0 == lineno) { return; } - profiler_db[element].lines[get_line(element, lineno)].total_time = add_timeval( + profiler_db[element].lines[get_line(element, lineno)].total_time = Profiler_Tools::add_timeval( profiler_db[element].lines[get_line(element, lineno)].total_time, elapsed); } @@ -1687,7 +369,7 @@ void TTCN3_Profiler::add_function_time(timeval elapsed, int element, int lineno) if (-1 == func) { return; } - profiler_db[element].functions[func].total_time = add_timeval( + profiler_db[element].functions[func].total_time = Profiler_Tools::add_timeval( profiler_db[element].functions[func].total_time, elapsed); } @@ -1697,7 +379,7 @@ void TTCN3_Profiler::update_last() return; } - timeval elapsed = subtract_timeval(get_time(), prev_time); + timeval elapsed = Profiler_Tools::subtract_timeval(get_time(), prev_time); int element = get_element(prev_file); @@ -1839,7 +521,8 @@ void TTCN3_Stack_Depth::update_stack_elapsed(timeval elapsed) // the function/caller pair appears for the first time (marked by 'first_call') for(int i = 0; i <= current_depth; ++i) { if (call_stack_timer_db[i].first_call) { - call_stack_timer_db[i].elapsed = add_timeval(call_stack_timer_db[i].elapsed, elapsed); + call_stack_timer_db[i].elapsed = Profiler_Tools::add_timeval( + call_stack_timer_db[i].elapsed, elapsed); } } } diff --git a/core/Profiler.hh b/core/Profiler.hh index 67b4081a1..cf8a9fb62 100644 --- a/core/Profiler.hh +++ b/core/Profiler.hh @@ -9,9 +9,7 @@ #ifndef PROFILER_HH #define PROFILER_HH -#include "Vector.hh" -#include "Types.h" -#include <sys/time.h> +#include "ProfilerTools.hh" /** This class performs profiling and code coverage on lines and functions in * TTCN-3 code (requires the -z compiler option). @@ -19,79 +17,6 @@ class TTCN3_Profiler { public: - /** Database entry for one file */ - struct profiler_db_item_t { - /** Database entry for one line */ - struct profiler_line_data_t { - /** Line number */ - int lineno; - /** The line's total execution time */ - timeval total_time; - /** The number of times this line was executed */ - int exec_count; - }; - /** Database entry for one function (including test cases, alt steps, the control part, etc.) */ - struct profiler_function_data_t { - /** Function name (owned) */ - char* name; - /** Function starting line */ - int lineno; - /** The function's total execution time */ - timeval total_time; - /** The number of times this function was executed */ - int exec_count; - }; - /** TTCN-3 File name (relative path, owned) */ - char* filename; - /** Contains database entries for all the lines in this file */ - Vector<profiler_line_data_t> lines; - /** Contains database entries for all the functions in this file */ - Vector<profiler_function_data_t> functions; - }; - - enum profiler_stats_flag_t { - // flags for each statistics entry - STATS_NUMBER_OF_LINES = 0x0000001, - STATS_LINE_DATA_RAW = 0x0000002, - STATS_FUNC_DATA_RAW = 0x0000004, - STATS_LINE_AVG_RAW = 0x0000008, - STATS_FUNC_AVG_RAW = 0x0000010, - STATS_LINE_TIMES_SORTED_BY_MOD = 0x0000020, - STATS_FUNC_TIMES_SORTED_BY_MOD = 0x0000040, - STATS_LINE_TIMES_SORTED_TOTAL = 0x0000080, - STATS_FUNC_TIMES_SORTED_TOTAL = 0x0000100, - STATS_LINE_COUNT_SORTED_BY_MOD = 0x0000200, - STATS_FUNC_COUNT_SORTED_BY_MOD = 0x0000400, - STATS_LINE_COUNT_SORTED_TOTAL = 0x0000800, - STATS_FUNC_COUNT_SORTED_TOTAL = 0x0001000, - STATS_LINE_AVG_SORTED_BY_MOD = 0x0002000, - STATS_FUNC_AVG_SORTED_BY_MOD = 0x0004000, - STATS_LINE_AVG_SORTED_TOTAL = 0x0008000, - STATS_FUNC_AVG_SORTED_TOTAL = 0x0010000, - STATS_TOP10_LINE_TIMES = 0x0020000, - STATS_TOP10_FUNC_TIMES = 0x0040000, - STATS_TOP10_LINE_COUNT = 0x0080000, - STATS_TOP10_FUNC_COUNT = 0x0100000, - STATS_TOP10_LINE_AVG = 0x0200000, - STATS_TOP10_FUNC_AVG = 0x0400000, - STATS_UNUSED_LINES = 0x0800000, - STATS_UNUSED_FUNC = 0x1000000, - // grouped entries - STATS_ALL_RAW_DATA = 0x000001E, - STATS_LINE_DATA_SORTED_BY_MOD = 0x0002220, - STATS_FUNC_DATA_SORTED_BY_MOD = 0x0004440, - STATS_LINE_DATA_SORTED_TOTAL = 0x0008880, - STATS_FUNC_DATA_SORTED_TOTAL = 0x0011100, - STATS_LINE_DATA_SORTED = 0x000AAA0, - STATS_FUNC_DATA_SORTED = 0x0015540, - STATS_ALL_DATA_SORTED = 0x001FFE0, - STATS_TOP10_LINE_DATA = 0x02A0000, - STATS_TOP10_FUNC_DATA = 0x0540000, - STATS_TOP10_ALL_DATA = 0x07E0000, - STATS_UNUSED_DATA = 0x1800000, - STATS_ALL = 0x1FFFFFF - }; - /** Constructor */ TTCN3_Profiler(); /** Destructor @@ -131,8 +56,8 @@ public: /** Returns true if the profiler is currently running (not stopped) */ boolean is_running() const; - /** Stores the component reference of a newly created PTC (in parallel mode only) */ - void add_ptc(component p_comp_ref); + /** Stores the component reference of a newly created PTC or MTC (in parallel mode only) */ + void add_component(component p_comp_ref); /** Adds the data from the database file to the local database */ void import_data(component p_comp_ref = NULL_COMPREF); @@ -167,7 +92,7 @@ public: void create_line(int element, int lineno); /** Adds elapsed time to the specified TTCN-3 code line's total time */ void add_line_time(timeval elapsed, int element, int lineno); - /** Adds elapsed time to the specified TTCN-3 function's total time*/ + /** Adds elapsed time to the specified TTCN-3 function's total time */ void add_function_time(timeval elapsed, int element, int lineno); /** Called when a TTCN-3 function's execution ends - stores data */ void update_last(); @@ -199,12 +124,12 @@ private: /** The number of the previously executed line */ int prev_line; /** The local database */ - Vector<profiler_db_item_t> profiler_db; + Profiler_Tools::profiler_db_t profiler_db; /** The stack length at the previously executed line */ int prev_stack_len; - /** Contains the component references of all PTCs (only relevant in the Host + /** Contains the component references of the other processes (only relevant in the Host * Controller's process, in parallel mode) */ - Vector<component> ptc_list; + Vector<component> component_list; }; /** The global TTCN3_Profiler object diff --git a/core/ProfilerTools.cc b/core/ProfilerTools.cc new file mode 100644 index 000000000..9c56ef9b2 --- /dev/null +++ b/core/ProfilerTools.cc @@ -0,0 +1,1412 @@ +/////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2000-2015 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 +/////////////////////////////////////////////////////////////////////////////// + +#include "ProfilerTools.hh" +#include "JSON_Tokenizer.hh" +#include "memory.h" +#include <string.h> +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> + +namespace Profiler_Tools { + + //////////////////////////////////// + //////// timeval operations //////// + //////////////////////////////////// + + timeval string2timeval(const char* str) + { + // read and store the first part (atoi will read until the decimal dot) + long int sec = atoi(str); + timeval tv; + tv.tv_sec = sec; + + do { + // step over each digit + sec /= 10; + ++str; + } + while (sec > 9); + + // step over the decimal dot and read the second part of the number + tv.tv_usec = atoi(str + 1); + return tv; + } + + char* timeval2string(timeval tv) + { + // convert the first part and set the second part to all zeros + char* str = mprintf("%ld.000000", tv.tv_sec); + + // go through each digit of the second part and add them to the zeros in the string + size_t pos = mstrlen(str) - 1; + while (tv.tv_usec > 0) { + str[pos] += tv.tv_usec % 10; + tv.tv_usec /= 10; + --pos; + } + return str; + } + + timeval add_timeval(const timeval operand1, const timeval operand2) + { + timeval tv; + tv.tv_usec = operand1.tv_usec + operand2.tv_usec; + tv.tv_sec = operand1.tv_sec + operand2.tv_sec; + if (tv.tv_usec >= 1000000) { + ++tv.tv_sec; + tv.tv_usec -= 1000000; + } + return tv; + } + + timeval subtract_timeval(const timeval operand1, const timeval operand2) + { + timeval tv; + tv.tv_usec = operand1.tv_usec - operand2.tv_usec; + tv.tv_sec = operand1.tv_sec - operand2.tv_sec; + if (tv.tv_usec < 0) { + --tv.tv_sec; + tv.tv_usec += 1000000; + } + return tv; + } + + //////////////////////////////////// + ///// profiler data operations ///// + //////////////////////////////////// + + int get_function(const profiler_db_t& p_db, int p_element, int p_lineno) + { + for (size_t i = 0; i < p_db[p_element].functions.size(); ++i) { + if (p_db[p_element].functions[i].lineno == p_lineno) { + return i; + } + } + return -1; + } + + void create_function(profiler_db_t& p_db, int p_element, int p_lineno, + const char* p_function_name) + { + profiler_db_item_t::profiler_function_data_t func_data; + func_data.lineno = p_lineno; + func_data.total_time.tv_sec = 0; + func_data.total_time.tv_usec = 0; + func_data.exec_count = 0; + func_data.name = mcopystr(p_function_name); + p_db[p_element].functions.push_back(func_data); + } + + int get_line(const profiler_db_t& p_db, int p_element, int p_lineno) + { + for (size_t i = 0; i < p_db[p_element].lines.size(); ++i) { + if (p_db[p_element].lines[i].lineno == p_lineno) { + return i; + } + } + return -1; + } + + void create_line(profiler_db_t& p_db, int p_element, int p_lineno) + { + profiler_db_item_t::profiler_line_data_t line_data; + line_data.lineno = p_lineno; + line_data.total_time.tv_sec = 0; + line_data.total_time.tv_usec = 0; + line_data.exec_count = 0; + p_db[p_element].lines.push_back(line_data); + } + +#define IMPORT_FORMAT_ERROR(cond) \ + if (cond) { \ + p_error_function("Failed to load profiling and/or code coverage database. Invalid format."); \ + return; \ + } + + void import_data(profiler_db_t& p_db, const char* p_filename, boolean p_wait, + void (*p_error_function)(const char*, ...)) + { + // open the file, if it exists + int file_size = 0; + FILE* file = fopen(p_filename, "r"); + if (NULL != file) { + // get the file size + fseek(file, 0, SEEK_END); + file_size = ftell(file); + } + while (0 == file_size) { + if (!p_wait) { + return; + } + // keep reading until the file appears (and is not empty) + if (NULL != file) { + fclose(file); + } + usleep(1000); + file = fopen(p_filename, "r"); + if (NULL != file) { + // refresh the file size + fseek(file, 0, SEEK_END); + file_size = ftell(file); + } + } + + // rewind the file (the file pointer has been moved to the end of the file to + // calculate its size) + rewind(file); + + // read the entire file into a character buffer + char* buffer = (char*)Malloc(file_size); + int bytes_read = fread(buffer, 1, file_size, file); + fclose(file); + if (bytes_read != file_size) { + p_error_function("Error reading database file."); + return; + } + + // initialize a JSON tokenizer with the buffer + JSON_Tokenizer json(buffer, file_size); + Free(buffer); + + // attempt to read tokens from the buffer + // if the format is invalid, abort the importing process + json_token_t token = JSON_TOKEN_NONE; + char* value = NULL; + size_t value_len = 0; + + // start of main array + json.get_next_token(&token, NULL, NULL); + IMPORT_FORMAT_ERROR(JSON_TOKEN_ARRAY_START != token); + + // read objects (one for each TTCN-3 file), until the main array end mark is reached + json.get_next_token(&token, NULL, NULL); + while (JSON_TOKEN_OBJECT_START == token) { + size_t file_index = 0; + + // file name: + json.get_next_token(&token, &value, &value_len); + IMPORT_FORMAT_ERROR(JSON_TOKEN_NAME != token || value_len != 4 || + 0 != strncmp(value, "file", value_len)); + + // read the file name and see if its record already exists + json.get_next_token(&token, &value, &value_len); + IMPORT_FORMAT_ERROR(JSON_TOKEN_STRING != token); + for (file_index = 0; file_index < p_db.size(); ++file_index) { + if (strlen(p_db[file_index].filename) == value_len - 2 && + 0 == strncmp(p_db[file_index].filename, value + 1, value_len - 2)) { + break; + } + } + + // insert a new element if the file was not found + if (p_db.size() == file_index) { + profiler_db_item_t item; + item.filename = mcopystrn(value + 1, value_len - 2); + p_db.push_back(item); + } + + // functions: + json.get_next_token(&token, &value, &value_len); + IMPORT_FORMAT_ERROR(JSON_TOKEN_NAME != token || value_len != 9 || + 0 != strncmp(value, "functions", value_len)); + + // read and store the functions (an array of objects, same as before) + json.get_next_token(&token, NULL, NULL); + IMPORT_FORMAT_ERROR(JSON_TOKEN_ARRAY_START != token); + json.get_next_token(&token, NULL, NULL); + while (JSON_TOKEN_OBJECT_START == token) { + size_t function_index = 0; + + // function name: + json.get_next_token(&token, &value, &value_len); + IMPORT_FORMAT_ERROR(JSON_TOKEN_NAME != token || value_len != 4 || + 0 != strncmp(value, "name", value_len)); + + // read the function name, it will be checked later + json.get_next_token(&token, &value, &value_len); + IMPORT_FORMAT_ERROR(JSON_TOKEN_STRING != token); + char* function_name = mcopystrn(value + 1, value_len - 2); + + // function start line: + json.get_next_token(&token, &value, &value_len); + IMPORT_FORMAT_ERROR(JSON_TOKEN_NAME != token || value_len != 10 || + 0 != strncmp(value, "start line", value_len)); + + // read the start line and check if the function already exists + json.get_next_token(&token, &value, &value_len); + IMPORT_FORMAT_ERROR(JSON_TOKEN_NUMBER != token); + int start_line = atoi(value); + for (function_index = 0; function_index < p_db[file_index].functions.size(); ++function_index) { + if (p_db[file_index].functions[function_index].lineno == start_line && + 0 == strcmp(p_db[file_index].functions[function_index].name, function_name)) { + break; + } + } + + // insert a new element if the function was not found + if (p_db[file_index].functions.size() == function_index) { + profiler_db_item_t::profiler_function_data_t func_data; + func_data.name = function_name; + func_data.lineno = start_line; + func_data.exec_count = 0; + func_data.total_time.tv_sec = 0; + func_data.total_time.tv_usec = 0; + p_db[file_index].functions.push_back(func_data); + } + + // function execution count: + json.get_next_token(&token, &value, &value_len); + IMPORT_FORMAT_ERROR(JSON_TOKEN_NAME != token || value_len != 15 || + 0 != strncmp(value, "execution count", value_len)); + + // read the execution count and add it to the current data + json.get_next_token(&token, &value, &value_len); + IMPORT_FORMAT_ERROR(JSON_TOKEN_NUMBER != token); + p_db[file_index].functions[function_index].exec_count += atoi(value); + + // total function execution time: + json.get_next_token(&token, &value, &value_len); + IMPORT_FORMAT_ERROR(JSON_TOKEN_NAME != token || value_len != 10 || + 0 != strncmp(value, "total time", value_len)); + + // read the total time and add it to the current data + // note: the database contains a real number, this needs to be split into 2 integers + json.get_next_token(&token, &value, &value_len); + IMPORT_FORMAT_ERROR(JSON_TOKEN_NUMBER != token); + p_db[file_index].functions[function_index].total_time = add_timeval( + p_db[file_index].functions[function_index].total_time, string2timeval(value)); + + // end of the function's object + json.get_next_token(&token, NULL, NULL); + IMPORT_FORMAT_ERROR(JSON_TOKEN_OBJECT_END != token); + + // read the next token (either the start of another object or the function array end) + json.get_next_token(&token, NULL, NULL); + } + + // function array end + IMPORT_FORMAT_ERROR(JSON_TOKEN_ARRAY_END != token); + + // lines: + json.get_next_token(&token, &value, &value_len); + IMPORT_FORMAT_ERROR(JSON_TOKEN_NAME != token || value_len != 5 || + 0 != strncmp(value, "lines", value_len)); + + // read and store the lines (an array of objects, same as before) + json.get_next_token(&token, NULL, NULL); + IMPORT_FORMAT_ERROR(JSON_TOKEN_ARRAY_START != token); + json.get_next_token(&token, NULL, NULL); + while (JSON_TOKEN_OBJECT_START == token) { + int line_index = 0; + + // line number: + json.get_next_token(&token, &value, &value_len); + IMPORT_FORMAT_ERROR(JSON_TOKEN_NAME != token || value_len != 6 || + 0 != strncmp(value, "number", value_len)); + + // read the line number and check if the line already exists + json.get_next_token(&token, &value, &value_len); + IMPORT_FORMAT_ERROR(JSON_TOKEN_NUMBER != token); + int lineno = atoi(value); + IMPORT_FORMAT_ERROR(lineno < 0); + line_index = get_line(p_db, file_index, lineno); + if (-1 == line_index) { + create_line(p_db, file_index, lineno); + line_index = p_db[file_index].lines.size() - 1; + } + + // line execution count: + json.get_next_token(&token, &value, &value_len); + IMPORT_FORMAT_ERROR(JSON_TOKEN_NAME != token || value_len != 15 || + 0 != strncmp(value, "execution count", value_len)); + + // read the execution count and add it to the current data + json.get_next_token(&token, &value, &value_len); + IMPORT_FORMAT_ERROR(JSON_TOKEN_NUMBER != token); + p_db[file_index].lines[line_index].exec_count += atoi(value); + + // total line execution time: + json.get_next_token(&token, &value, &value_len); + IMPORT_FORMAT_ERROR(JSON_TOKEN_NAME != token || value_len != 10 || + 0 != strncmp(value, "total time", value_len)); + + // read the total time and add it to the current data + json.get_next_token(&token, &value, &value_len); + IMPORT_FORMAT_ERROR(JSON_TOKEN_NUMBER != token); + p_db[file_index].lines[line_index].total_time = add_timeval( + p_db[file_index].lines[line_index].total_time, string2timeval(value)); + + // end of the line's object + json.get_next_token(&token, NULL, NULL); + IMPORT_FORMAT_ERROR(JSON_TOKEN_OBJECT_END != token); + + // read the next token (either the start of another object or the line array end) + json.get_next_token(&token, NULL, NULL); + } + + // line array end + IMPORT_FORMAT_ERROR(JSON_TOKEN_ARRAY_END != token); + + // end of the file's object + json.get_next_token(&token, NULL, NULL); + IMPORT_FORMAT_ERROR(JSON_TOKEN_OBJECT_END != token); + + // read the next token (either the start of another object or the main array end) + json.get_next_token(&token, NULL, NULL); + } + + // main array end + IMPORT_FORMAT_ERROR(JSON_TOKEN_ARRAY_END != token); + } + + void export_data(profiler_db_t& p_db, const char* p_filename, + boolean p_disable_profiler, boolean p_disable_coverage, + void (*p_error_function)(const char*, ...)) + { + // check whether the file can be opened for writing + FILE* file = fopen(p_filename, "w"); + if (NULL == file) { + p_error_function("Could not open file '%s' for writing. Profiling and/or code coverage " + "data will not be saved.", p_filename); + return; + } + + // use the JSON tokenizer to create a JSON document from the database + JSON_Tokenizer json(true); + + // main array, contains an element for each file + json.put_next_token(JSON_TOKEN_ARRAY_START, NULL); + for (size_t i = 0; i < p_db.size(); ++i) { + + // each file's data is stored in an object + json.put_next_token(JSON_TOKEN_OBJECT_START, NULL); + + // store the file name + json.put_next_token(JSON_TOKEN_NAME, "file"); + char* p_filename_str = mprintf("\"%s\"", p_db[i].filename); + json.put_next_token(JSON_TOKEN_STRING, p_filename_str); + Free(p_filename_str); + + // store the function data in an array (one element for each function) + json.put_next_token(JSON_TOKEN_NAME, "functions"); + json.put_next_token(JSON_TOKEN_ARRAY_START, NULL); + for (size_t j = 0; j < p_db[i].functions.size(); ++j) { + + // the data is stored in an object for each function + json.put_next_token(JSON_TOKEN_OBJECT_START, NULL); + + // store the function name + json.put_next_token(JSON_TOKEN_NAME, "name"); + char* func_name_str = mprintf("\"%s\"", p_db[i].functions[j].name); + json.put_next_token(JSON_TOKEN_STRING, func_name_str); + Free(func_name_str); + + // store the function start line + json.put_next_token(JSON_TOKEN_NAME, "start line"); + char* start_line_str = mprintf("%d", p_db[i].functions[j].lineno); + json.put_next_token(JSON_TOKEN_NUMBER, start_line_str); + Free(start_line_str); + + // store the function execution count + json.put_next_token(JSON_TOKEN_NAME, "execution count"); + char* exec_count_str = mprintf("%d", p_disable_coverage ? 0 : + p_db[i].functions[j].exec_count); + json.put_next_token(JSON_TOKEN_NUMBER, exec_count_str); + Free(exec_count_str); + + // store the function's total execution time + json.put_next_token(JSON_TOKEN_NAME, "total time"); + if (p_disable_profiler) { + json.put_next_token(JSON_TOKEN_NUMBER, "0.000000"); + } + else { + char* total_time_str = timeval2string(p_db[i].functions[j].total_time); + json.put_next_token(JSON_TOKEN_NUMBER, total_time_str); + Free(total_time_str); + } + + // end of function object + json.put_next_token(JSON_TOKEN_OBJECT_END, NULL); + } + + // end of function data array + json.put_next_token(JSON_TOKEN_ARRAY_END, NULL); + + // store the line data in an array (one element for each line with useful data) + json.put_next_token(JSON_TOKEN_NAME, "lines"); + json.put_next_token(JSON_TOKEN_ARRAY_START, NULL); + for (size_t j = 0; j < p_db[i].lines.size(); ++j) { + + // store line data in an object + json.put_next_token(JSON_TOKEN_OBJECT_START, NULL); + + // store the line number + json.put_next_token(JSON_TOKEN_NAME, "number"); + char* line_number_str = mprintf("%d", p_db[i].lines[j].lineno); + json.put_next_token(JSON_TOKEN_NUMBER, line_number_str); + Free(line_number_str); + + // store the line execution count + json.put_next_token(JSON_TOKEN_NAME, "execution count"); + char* exec_count_str = mprintf("%d", p_disable_coverage ? 0 : + p_db[i].lines[j].exec_count); + json.put_next_token(JSON_TOKEN_NUMBER, exec_count_str); + Free(exec_count_str); + + // store the line's total execution time + json.put_next_token(JSON_TOKEN_NAME, "total time"); + if (p_disable_profiler) { + json.put_next_token(JSON_TOKEN_NUMBER, "0.000000"); + } + else { + char* total_time_str = timeval2string(p_db[i].lines[j].total_time); + json.put_next_token(JSON_TOKEN_NUMBER, total_time_str); + Free(total_time_str); + } + + // end of this line's object + json.put_next_token(JSON_TOKEN_OBJECT_END, NULL); + } + + // end of line data array + json.put_next_token(JSON_TOKEN_ARRAY_END, NULL); + + // end of this file's object + json.put_next_token(JSON_TOKEN_OBJECT_END, NULL); + } + + // end of main array + json.put_next_token(JSON_TOKEN_ARRAY_END, NULL); + + // write the JSON document into the file + fprintf(file, "%s\n", json.get_buffer()); + fclose(file); + } + + // Structure for one code line or function, used by print_stats for sorting + struct stats_data_t { + const char* filename; // not owned + const char* funcname; // not owned, NULL for code lines that don't start a function + int lineno; + timeval total_time; + int exec_count; + }; + + // Compare function for sorting stats data based on total execution time (descending) + int stats_data_cmp_time(const void* p_left, const void* p_right) { + const stats_data_t* p_left_data = (stats_data_t*)p_left; + const stats_data_t* p_right_data = (stats_data_t*)p_right; + if (p_left_data->total_time.tv_sec > p_right_data->total_time.tv_sec) return -1; + if (p_left_data->total_time.tv_sec < p_right_data->total_time.tv_sec) return 1; + if (p_left_data->total_time.tv_usec > p_right_data->total_time.tv_usec) return -1; + if (p_left_data->total_time.tv_usec < p_right_data->total_time.tv_usec) return 1; + return 0; + } + + // Compare function for sorting stats data based on execution count (descending) + int stats_data_cmp_count(const void* p_left, const void* p_right) { + return ((stats_data_t*)p_right)->exec_count - ((stats_data_t*)p_left)->exec_count; + } + + // Compare function for sorting stats data based on total time per execution count (descending) + int stats_data_cmp_avg(const void* p_left, const void* p_right) { + const stats_data_t* p_left_data = (stats_data_t*)p_left; + const stats_data_t* p_right_data = (stats_data_t*)p_right; + double left_time = p_left_data->total_time.tv_sec + p_left_data->total_time.tv_usec / 1000000.0; + double right_time = p_right_data->total_time.tv_sec + p_right_data->total_time.tv_usec / 1000000.0; + double diff = (right_time / p_right_data->exec_count) - (left_time / p_left_data->exec_count); + if (diff < 0) return -1; + if (diff > 0) return 1; + return 0; + } + + void print_stats(profiler_db_t& p_db, const char* p_filename, + boolean p_disable_profiler, boolean p_disable_coverage, + unsigned int p_flags, void (*p_error_function)(const char*, ...)) + { + // title + char* title_str = mprintf( + "##################################################\n" + "%s## TTCN-3 %s%s%sstatistics ##%s\n" + "##################################################\n\n\n" + , p_disable_profiler ? "#######" : (p_disable_coverage ? "#########" : "") + , p_disable_profiler ? "" : "profiler " + , (p_disable_profiler || p_disable_coverage) ? "" : "and " + , p_disable_coverage ? "" : "code coverage " + , p_disable_profiler ? "######" : (p_disable_coverage ? "#########" : "")); + + char* line_func_count_str = NULL; + if (p_flags & STATS_NUMBER_OF_LINES) { + line_func_count_str = mcopystr( + "--------------------------------------\n" + "- Number of code lines and functions -\n" + "--------------------------------------\n"); + } + + // line data + char* line_data_str = NULL; + if (p_flags & STATS_LINE_DATA_RAW) { + line_data_str = mprintf( + "-------------------------------------------------\n" + "%s- Code line data (%s%s%s) -%s\n" + "-------------------------------------------------\n" + , p_disable_profiler ? "-------" : (p_disable_coverage ? "---------" : "") + , p_disable_profiler ? "" : "total time" + , (p_disable_profiler || p_disable_coverage) ? "" : " / " + , p_disable_coverage ? "" : "execution count" + , p_disable_profiler ? "------" : (p_disable_coverage ? "---------" : "")); + } + + // average time / exec count for lines + char* line_avg_str = NULL; + if (!p_disable_coverage && !p_disable_profiler && (p_flags & STATS_LINE_AVG_RAW)) { + line_avg_str = mcopystr( + "-------------------------------------------\n" + "- Average time / execution for code lines -\n" + "-------------------------------------------\n"); + } + + // function data + char* func_data_str = NULL; + if (p_flags & STATS_FUNC_DATA_RAW) { + func_data_str = mprintf( + "------------------------------------------------\n" + "%s- Function data (%s%s%s) -%s\n" + "------------------------------------------------\n" + , p_disable_profiler ? "-------" : (p_disable_coverage ? "---------" : "") + , p_disable_profiler ? "" : "total time" + , (p_disable_profiler || p_disable_coverage) ? "" : " / " + , p_disable_coverage ? "" : "execution count" + , p_disable_profiler ? "------" : (p_disable_coverage ? "---------" : "")); + } + + // average time / exec count for functions + char* func_avg_str = NULL; + if (!p_disable_coverage && !p_disable_profiler && (p_flags & STATS_FUNC_AVG_RAW)) { + func_avg_str = mcopystr( + "------------------------------------------\n" + "- Average time / execution for functions -\n" + "------------------------------------------\n"); + } + + char* line_time_sorted_mod_str = NULL; + if (!p_disable_profiler && (p_flags & STATS_LINE_TIMES_SORTED_BY_MOD)) { + line_time_sorted_mod_str = mcopystr( + "------------------------------------------------\n" + "- Total time of code lines, sorted, per module -\n" + "------------------------------------------------\n"); + } + + char* line_count_sorted_mod_str = NULL; + if (!p_disable_coverage && (p_flags & STATS_LINE_COUNT_SORTED_BY_MOD)) { + line_count_sorted_mod_str = mcopystr( + "-----------------------------------------------------\n" + "- Execution count of code lines, sorted, per module -\n" + "-----------------------------------------------------\n"); + } + + char* line_avg_sorted_mod_str = NULL; + if (!p_disable_profiler && !p_disable_coverage && (p_flags & STATS_LINE_AVG_SORTED_BY_MOD)) { + line_avg_sorted_mod_str = mcopystr( + "--------------------------------------------------------------\n" + "- Average time / execution of code lines, sorted, per module -\n" + "--------------------------------------------------------------\n"); + } + + char* line_time_sorted_tot_str = NULL; + if (!p_disable_profiler && (p_flags & STATS_LINE_TIMES_SORTED_TOTAL)) { + line_time_sorted_tot_str = mcopystr( + "-------------------------------------------\n" + "- Total time of code lines, sorted, total -\n" + "-------------------------------------------\n"); + } + + char* line_count_sorted_tot_str = NULL; + if (!p_disable_coverage && (p_flags & STATS_LINE_COUNT_SORTED_TOTAL)) { + line_count_sorted_tot_str = mcopystr( + "------------------------------------------------\n" + "- Execution count of code lines, sorted, total -\n" + "------------------------------------------------\n"); + } + + char* line_avg_sorted_tot_str = NULL; + if (!p_disable_profiler && !p_disable_coverage && (p_flags & STATS_LINE_AVG_SORTED_TOTAL)) { + line_avg_sorted_tot_str = mcopystr( + "---------------------------------------------------------\n" + "- Average time / execution of code lines, sorted, total -\n" + "---------------------------------------------------------\n"); + } + + char* func_time_sorted_mod_str = NULL; + if (!p_disable_profiler && (p_flags & STATS_FUNC_TIMES_SORTED_BY_MOD)) { + func_time_sorted_mod_str = mcopystr( + "-----------------------------------------------\n" + "- Total time of functions, sorted, per module -\n" + "-----------------------------------------------\n"); + } + + char* func_count_sorted_mod_str = NULL; + if (!p_disable_coverage && (p_flags & STATS_FUNC_COUNT_SORTED_BY_MOD)) { + func_count_sorted_mod_str = mcopystr( + "----------------------------------------------------\n" + "- Execution count of functions, sorted, per module -\n" + "----------------------------------------------------\n"); + } + + char* func_avg_sorted_mod_str = NULL; + if (!p_disable_profiler && !p_disable_coverage && (p_flags & STATS_FUNC_AVG_SORTED_BY_MOD)) { + func_avg_sorted_mod_str = mcopystr( + "-------------------------------------------------------------\n" + "- Average time / execution of functions, sorted, per module -\n" + "-------------------------------------------------------------\n"); + } + + char* func_time_sorted_tot_str = NULL; + if (!p_disable_profiler && (p_flags & STATS_FUNC_TIMES_SORTED_TOTAL)) { + func_time_sorted_tot_str = mcopystr( + "------------------------------------------\n" + "- Total time of functions, sorted, total -\n" + "------------------------------------------\n"); + } + + char* func_count_sorted_tot_str = NULL; + if (!p_disable_coverage && (p_flags & STATS_FUNC_COUNT_SORTED_TOTAL)) { + func_count_sorted_tot_str = mcopystr( + "-----------------------------------------------\n" + "- Execution count of functions, sorted, total -\n" + "-----------------------------------------------\n"); + } + + char* func_avg_sorted_tot_str = NULL; + if (!p_disable_profiler && !p_disable_coverage && (p_flags & STATS_FUNC_AVG_SORTED_TOTAL)) { + func_avg_sorted_tot_str = mcopystr( + "--------------------------------------------------------\n" + "- Average time / execution of functions, sorted, total -\n" + "--------------------------------------------------------\n"); + } + + char* line_time_sorted_top10_str = NULL; + if (!p_disable_profiler && (p_flags & STATS_TOP10_LINE_TIMES)) { + line_time_sorted_top10_str = mcopystr( + "------------------------------------\n" + "- Total time of code lines, top 10 -\n" + "------------------------------------\n"); + } + + char* line_count_sorted_top10_str = NULL; + if (!p_disable_coverage && (p_flags & STATS_TOP10_LINE_COUNT)) { + line_count_sorted_top10_str = mcopystr( + "-----------------------------------------\n" + "- Execution count of code lines, top 10 -\n" + "-----------------------------------------\n"); + } + + char* line_avg_sorted_top10_str = NULL; + if (!p_disable_profiler && !p_disable_coverage && (p_flags & STATS_TOP10_LINE_AVG)) { + line_avg_sorted_top10_str = mcopystr( + "--------------------------------------------------\n" + "- Average time / execution of code lines, top 10 -\n" + "--------------------------------------------------\n"); + } + + char* func_time_sorted_top10_str = NULL; + if (!p_disable_profiler && (p_flags & STATS_TOP10_FUNC_TIMES)) { + func_time_sorted_top10_str = mcopystr( + "-----------------------------------\n" + "- Total time of functions, top 10 -\n" + "-----------------------------------\n"); + } + + char* func_count_sorted_top10_str = NULL; + if (!p_disable_coverage && (p_flags & STATS_TOP10_FUNC_COUNT)) { + func_count_sorted_top10_str = mcopystr( + "----------------------------------------\n" + "- Execution count of functions, top 10 -\n" + "----------------------------------------\n"); + } + + char* func_avg_sorted_top10_str = NULL; + if (!p_disable_profiler && !p_disable_coverage && (p_flags & STATS_TOP10_FUNC_AVG)) { + func_avg_sorted_top10_str = mcopystr( + "-------------------------------------------------\n" + "- Average time / execution of functions, top 10 -\n" + "-------------------------------------------------\n"); + } + + char* unused_lines_str = NULL; + char* unused_func_str = NULL; + if (!p_disable_coverage && (p_flags & STATS_UNUSED_LINES)) { + unused_lines_str = mcopystr( + "---------------------\n" + "- Unused code lines -\n" + "---------------------\n"); + } + if (!p_disable_coverage && (p_flags & STATS_UNUSED_FUNC)) { + unused_func_str = mcopystr( + "--------------------\n" + "- Unused functions -\n" + "--------------------\n"); + } + + // variables for counting totals, and for determining the amount of unused lines/functions + size_t total_code_lines = 0; + size_t total_functions = 0; + size_t used_code_lines = 0; + size_t used_functions = 0; + + // cached sizes of statistics data segments, needed to determine whether a separator + // is needed or not + size_t line_data_str_len = mstrlen(line_data_str); + size_t func_data_str_len = mstrlen(func_data_str); + size_t unused_lines_str_len = mstrlen(unused_lines_str); + size_t unused_func_str_len = mstrlen(unused_func_str); + size_t line_avg_str_len = mstrlen(line_avg_str); + size_t func_avg_str_len = mstrlen(func_avg_str); + + // cycle through the database and gather the necessary data + for (size_t i = 0; i < p_db.size(); ++i) { + if (i > 0) { + // add separators between files (only add them if the previous file actually added something) + if ((p_flags & STATS_LINE_DATA_RAW) && line_data_str_len != mstrlen(line_data_str)) { + line_data_str = mputstr(line_data_str, "-------------------------------------------------\n"); + line_data_str_len = mstrlen(line_data_str); + } + if ((p_flags & STATS_FUNC_DATA_RAW) && func_data_str_len != mstrlen(func_data_str)) { + func_data_str = mputstr(func_data_str, "------------------------------------------------\n"); + func_data_str_len = mstrlen(func_data_str); + } + if (!p_disable_coverage) { + if ((p_flags & STATS_UNUSED_LINES) && unused_lines_str_len != mstrlen(unused_lines_str)) { + unused_lines_str = mputstr(unused_lines_str, "---------------------\n"); + unused_lines_str_len = mstrlen(unused_lines_str); + } + if ((p_flags & STATS_UNUSED_FUNC) && unused_func_str_len != mstrlen(unused_func_str)) { + unused_func_str = mputstr(unused_func_str, "--------------------\n"); + unused_func_str_len = mstrlen(unused_func_str); + } + if (!p_disable_profiler) { + if ((p_flags & STATS_LINE_AVG_RAW) && line_avg_str_len != mstrlen(line_avg_str)) { + line_avg_str = mputstr(line_avg_str, "-------------------------------------------\n"); + line_avg_str_len = mstrlen(line_avg_str); + } + if ((p_flags & STATS_FUNC_AVG_RAW) && func_avg_str_len != mstrlen(func_avg_str)) { + func_avg_str = mputstr(func_avg_str, "------------------------------------------\n"); + func_avg_str_len = mstrlen(func_avg_str); + } + } + } + } + + // lines + for (size_t j = 0; j < p_db[i].lines.size(); ++j) { + // line specification (including function name for the function's start line) + char* line_spec_str = mprintf("%s:%d", p_db[i].filename, + p_db[i].lines[j].lineno); + int func = get_function(p_db, i, p_db[i].lines[j].lineno); + if (-1 != func) { + line_spec_str = mputprintf(line_spec_str, " [%s]", p_db[i].functions[func].name); + } + line_spec_str = mputstrn(line_spec_str, "\n", 1); + + if (p_disable_coverage || 0 != p_db[i].lines[j].exec_count) { + if (!p_disable_profiler) { + if (p_flags & STATS_LINE_DATA_RAW) { + char* total_time_str = timeval2string(p_db[i].lines[j].total_time); + line_data_str = mputprintf(line_data_str, "%ss", total_time_str); + Free(total_time_str); + } + if (!p_disable_coverage) { + if (p_flags & STATS_LINE_DATA_RAW) { + line_data_str = mputstrn(line_data_str, "\t/\t", 3); + } + if (p_flags & STATS_LINE_AVG_RAW) { + double avg = (p_db[i].lines[j].total_time.tv_sec + + p_db[i].lines[j].total_time.tv_usec / 1000000.0) / + p_db[i].lines[j].exec_count; + char* total_time_str = timeval2string(p_db[i].lines[j].total_time); + line_avg_str = mputprintf(line_avg_str, "%.6lfs\t(%ss / %d)", + avg, total_time_str, p_db[i].lines[j].exec_count); + Free(total_time_str); + } + } + } + if (!p_disable_coverage && (p_flags & STATS_LINE_DATA_RAW)) { + line_data_str = mputprintf(line_data_str, "%d", p_db[i].lines[j].exec_count); + } + + // add the line spec string to the other strings + if (p_flags & STATS_LINE_DATA_RAW) { + line_data_str = mputprintf(line_data_str, "\t%s", line_spec_str); + } + if (!p_disable_profiler && !p_disable_coverage && (p_flags & STATS_LINE_AVG_RAW)) { + line_avg_str = mputprintf(line_avg_str, "\t%s", line_spec_str); + } + ++used_code_lines; + } + else if (p_flags & STATS_UNUSED_LINES) { + // unused line + unused_lines_str = mputstr(unused_lines_str, line_spec_str); + } + Free(line_spec_str); + } + + // functions + for (size_t j = 0; j < p_db[i].functions.size(); ++j) { + // functions specification + char* func_spec_str = mprintf("%s:%d [%s]\n", p_db[i].filename, + p_db[i].functions[j].lineno, p_db[i].functions[j].name); + + if (p_disable_coverage || 0 != p_db[i].functions[j].exec_count) { + if (!p_disable_profiler) { + if (p_flags & STATS_FUNC_DATA_RAW) { + char* total_time_str = timeval2string(p_db[i].functions[j].total_time); + func_data_str = mputprintf(func_data_str, "%ss", total_time_str); + Free(total_time_str); + } + if (!p_disable_coverage) { + if (p_flags & STATS_FUNC_DATA_RAW) { + func_data_str = mputstrn(func_data_str, "\t/\t", 3); + } + if (p_flags & STATS_FUNC_AVG_RAW) { + double avg = (p_db[i].functions[j].total_time.tv_sec + + p_db[i].functions[j].total_time.tv_usec / 1000000.0) / + p_db[i].functions[j].exec_count; + char* total_time_str = timeval2string(p_db[i].functions[j].total_time); + func_avg_str = mputprintf(func_avg_str, "%.6lfs\t(%ss / %d)", + avg, total_time_str, p_db[i].functions[j].exec_count); + Free(total_time_str); + } + } + } + if (!p_disable_coverage && (p_flags & STATS_FUNC_DATA_RAW)) { + func_data_str = mputprintf(func_data_str, "%d", p_db[i].functions[j].exec_count); + } + + // add the line spec string to the other strings + if (p_flags & STATS_FUNC_DATA_RAW) { + func_data_str = mputprintf(func_data_str, "\t%s", func_spec_str); + } + if (!p_disable_profiler && !p_disable_coverage && (p_flags & STATS_FUNC_AVG_RAW)) { + func_avg_str = mputprintf(func_avg_str, "\t%s", func_spec_str); + } + + ++used_functions; + } + else if (p_flags & STATS_UNUSED_FUNC) { + // unused function + unused_func_str = mputstr(unused_func_str, func_spec_str); + } + Free(func_spec_str); + } + + // number of lines and functions + if (p_flags & STATS_NUMBER_OF_LINES) { + line_func_count_str = mputprintf(line_func_count_str, "%s:\t%lu lines,\t%lu functions\n", + p_db[i].filename, p_db[i].lines.size(), p_db[i].functions.size()); + } + total_code_lines += p_db[i].lines.size(); + total_functions += p_db[i].functions.size(); + } + if (p_flags & STATS_NUMBER_OF_LINES) { + line_func_count_str = mputprintf(line_func_count_str, + "--------------------------------------\n" + "Total:\t%lu lines,\t%lu functions\n", total_code_lines, total_functions); + } + + if (p_flags & (STATS_TOP10_ALL_DATA | STATS_ALL_DATA_SORTED)) { + // copy code line and function info into stats_data_t containers for sorting + stats_data_t* code_line_stats = (stats_data_t*)Malloc(used_code_lines * sizeof(stats_data_t)); + stats_data_t* function_stats = (stats_data_t*)Malloc(used_functions * sizeof(stats_data_t)); + int line_index = 0; + int func_index = 0; + + for (size_t i = 0; i < p_db.size(); ++i) { + for (size_t j = 0; j < p_db[i].lines.size(); ++j) { + if (p_disable_coverage || 0 != p_db[i].lines[j].exec_count) { + code_line_stats[line_index].filename = p_db[i].filename; + code_line_stats[line_index].funcname = NULL; + code_line_stats[line_index].lineno = p_db[i].lines[j].lineno; + code_line_stats[line_index].total_time = p_db[i].lines[j].total_time; + code_line_stats[line_index].exec_count = p_db[i].lines[j].exec_count; + int func = get_function(p_db, i, p_db[i].lines[j].lineno); + if (-1 != func) { + code_line_stats[line_index].funcname = p_db[i].functions[func].name; + } + ++line_index; + } + } + for (size_t j = 0; j < p_db[i].functions.size(); ++j) { + if (p_disable_coverage || 0 != p_db[i].functions[j].exec_count) { + function_stats[func_index].filename = p_db[i].filename; + function_stats[func_index].funcname = p_db[i].functions[j].name; + function_stats[func_index].lineno = p_db[i].functions[j].lineno; + function_stats[func_index].total_time = p_db[i].functions[j].total_time; + function_stats[func_index].exec_count = p_db[i].functions[j].exec_count; + ++func_index; + } + } + } + + if (!p_disable_profiler) { + // sort the code lines and functions by total time + qsort(code_line_stats, used_code_lines, sizeof(stats_data_t), &stats_data_cmp_time); + qsort(function_stats, used_functions, sizeof(stats_data_t), &stats_data_cmp_time); + + if (p_flags & (STATS_LINE_TIMES_SORTED_TOTAL | STATS_TOP10_LINE_TIMES)) { + // cycle through the sorted code lines and gather the necessary data + for (size_t i = 0; i < used_code_lines; ++i) { + char* total_time_str = timeval2string(code_line_stats[i].total_time); + char* the_data = mprintf("%ss\t%s:%d", total_time_str, + code_line_stats[i].filename, code_line_stats[i].lineno); + Free(total_time_str); + if (NULL != code_line_stats[i].funcname) { + the_data = mputprintf(the_data, " [%s]", code_line_stats[i].funcname); + } + the_data = mputstrn(the_data, "\n", 1); + if (p_flags & STATS_LINE_TIMES_SORTED_TOTAL) { + line_time_sorted_tot_str = mputstr(line_time_sorted_tot_str, the_data); + } + if (i < 10 && (p_flags & STATS_TOP10_LINE_TIMES)) { + line_time_sorted_top10_str = mputprintf(line_time_sorted_top10_str, + "%2lu.\t%s", i + 1, the_data); + } + Free(the_data); + } + } + + if (p_flags & (STATS_FUNC_TIMES_SORTED_TOTAL | STATS_TOP10_FUNC_TIMES)) { + // cycle through the sorted functions and gather the necessary data + for (size_t i = 0; i < used_functions; ++i) { + char* total_time_str = timeval2string(function_stats[i].total_time); + char* the_data = mprintf("%ss\t%s:%d [%s]\n", total_time_str, + function_stats[i].filename, function_stats[i].lineno, function_stats[i].funcname); + Free(total_time_str); + if (p_flags & STATS_FUNC_TIMES_SORTED_TOTAL) { + func_time_sorted_tot_str = mputstr(func_time_sorted_tot_str, the_data); + } + if (i < 10 && (p_flags & STATS_TOP10_FUNC_TIMES)) { + func_time_sorted_top10_str = mputprintf(func_time_sorted_top10_str, + "%2lu.\t%s", i + 1, the_data); + } + Free(the_data); + } + } + + if (p_flags & (STATS_LINE_TIMES_SORTED_BY_MOD | STATS_FUNC_TIMES_SORTED_BY_MOD)) { + // cached string lengths, to avoid multiple separators after each other + size_t line_time_sorted_mod_str_len = mstrlen(line_time_sorted_mod_str); + size_t func_time_sorted_mod_str_len = mstrlen(func_time_sorted_mod_str); + + // cycle through the sorted statistics and gather the necessary data per module + for (size_t i = 0; i < p_db.size(); ++i) { + if (i > 0) { + if ((p_flags & STATS_LINE_TIMES_SORTED_BY_MOD) && + line_time_sorted_mod_str_len != mstrlen(line_time_sorted_mod_str)) { + line_time_sorted_mod_str = mputstr(line_time_sorted_mod_str, + "------------------------------------------------\n"); + line_time_sorted_mod_str_len = mstrlen(line_time_sorted_mod_str); + } + if ((p_flags & STATS_FUNC_TIMES_SORTED_BY_MOD) && + func_time_sorted_mod_str_len != mstrlen(func_time_sorted_mod_str)) { + func_time_sorted_mod_str = mputstr(func_time_sorted_mod_str, + "-----------------------------------------------\n"); + func_time_sorted_mod_str_len = mstrlen(func_time_sorted_mod_str); + } + } + if (p_flags & STATS_LINE_TIMES_SORTED_BY_MOD) { + for (size_t j = 0; j < used_code_lines; ++j) { + if (0 == strcmp(code_line_stats[j].filename, p_db[i].filename)) { + char* total_time_str = timeval2string(code_line_stats[j].total_time); + line_time_sorted_mod_str = mputprintf(line_time_sorted_mod_str, + "%ss\t%s:%d", total_time_str, code_line_stats[j].filename, + code_line_stats[j].lineno); + Free(total_time_str); + if (NULL != code_line_stats[j].funcname) { + line_time_sorted_mod_str = mputprintf(line_time_sorted_mod_str, + " [%s]", code_line_stats[j].funcname); + } + line_time_sorted_mod_str = mputstrn(line_time_sorted_mod_str, "\n", 1); + } + } + } + if (p_flags & STATS_FUNC_TIMES_SORTED_BY_MOD) { + for (size_t j = 0; j < used_functions; ++j) { + if (0 == strcmp(function_stats[j].filename, p_db[i].filename)) { + char* total_time_str = timeval2string(function_stats[j].total_time); + func_time_sorted_mod_str = mputprintf(func_time_sorted_mod_str, + "%ss\t%s:%d [%s]\n", total_time_str, function_stats[j].filename, + function_stats[j].lineno, function_stats[j].funcname); + Free(total_time_str); + } + } + } + } + } + } + + if (!p_disable_coverage) { + // sort the code lines and functions by execution count + qsort(code_line_stats, used_code_lines, sizeof(stats_data_t), &stats_data_cmp_count); + qsort(function_stats, used_functions, sizeof(stats_data_t), &stats_data_cmp_count); + + if (p_flags & (STATS_LINE_COUNT_SORTED_TOTAL | STATS_TOP10_LINE_COUNT)) { + // cycle through the sorted code lines and gather the necessary data + for (size_t i = 0; i < used_code_lines; ++i) { + char* the_data = mprintf("%d\t%s:%d", code_line_stats[i].exec_count, + code_line_stats[i].filename, code_line_stats[i].lineno); + if (NULL != code_line_stats[i].funcname) { + the_data = mputprintf(the_data, " [%s]", code_line_stats[i].funcname); + } + the_data = mputstrn(the_data, "\n", 1); + if (p_flags & STATS_LINE_COUNT_SORTED_TOTAL) { + line_count_sorted_tot_str = mputstr(line_count_sorted_tot_str, the_data); + } + if (i < 10 && (p_flags & STATS_TOP10_LINE_COUNT)) { + line_count_sorted_top10_str = mputprintf(line_count_sorted_top10_str, + "%2lu.\t%s", i + 1, the_data); + } + Free(the_data); + } + } + + if (p_flags & (STATS_FUNC_COUNT_SORTED_TOTAL | STATS_TOP10_FUNC_COUNT)) { + // cycle through the sorted functions and gather the necessary data + for (size_t i = 0; i < used_functions; ++i) { + char* the_data = mprintf("%d\t%s:%d [%s]\n", + function_stats[i].exec_count, function_stats[i].filename, + function_stats[i].lineno, function_stats[i].funcname); + if (p_flags & STATS_FUNC_COUNT_SORTED_TOTAL) { + func_count_sorted_tot_str = mputstr(func_count_sorted_tot_str, the_data); + } + if (i < 10 && (p_flags & STATS_TOP10_FUNC_COUNT)) { + func_count_sorted_top10_str = mputprintf(func_count_sorted_top10_str, + "%2lu.\t%s", i + 1, the_data); + } + Free(the_data); + } + } + + if (p_flags & (STATS_LINE_COUNT_SORTED_BY_MOD | STATS_FUNC_COUNT_SORTED_BY_MOD)) { + // cached string lengths, to avoid multiple separators after each other + size_t line_count_sorted_mod_str_len = mstrlen(line_count_sorted_mod_str); + size_t func_count_sorted_mod_str_len = mstrlen(func_count_sorted_mod_str); + + // cycle through the sorted statistics and gather the necessary data per module + for (size_t i = 0; i < p_db.size(); ++i) { + if (i > 0) { + if ((p_flags & STATS_LINE_COUNT_SORTED_BY_MOD) && + line_count_sorted_mod_str_len != mstrlen(line_count_sorted_mod_str)) { + line_count_sorted_mod_str = mputstr(line_count_sorted_mod_str, + "-----------------------------------------------------\n"); + line_count_sorted_mod_str_len = mstrlen(line_count_sorted_mod_str); + } + if ((p_flags & STATS_FUNC_COUNT_SORTED_BY_MOD) && + func_count_sorted_mod_str_len != mstrlen(func_count_sorted_mod_str)) { + func_count_sorted_mod_str = mputstr(func_count_sorted_mod_str, + "----------------------------------------------------\n"); + func_count_sorted_mod_str_len = mstrlen(func_count_sorted_mod_str); + } + } + if (p_flags & STATS_LINE_COUNT_SORTED_BY_MOD) { + for (size_t j = 0; j < used_code_lines; ++j) { + if (0 == strcmp(code_line_stats[j].filename, p_db[i].filename)) { + line_count_sorted_mod_str = mputprintf(line_count_sorted_mod_str, + "%d\t%s:%d", code_line_stats[j].exec_count, code_line_stats[j].filename, + code_line_stats[j].lineno); + if (NULL != code_line_stats[j].funcname) { + line_count_sorted_mod_str = mputprintf(line_count_sorted_mod_str, + " [%s]", code_line_stats[j].funcname); + } + line_count_sorted_mod_str = mputstrn(line_count_sorted_mod_str, "\n", 1); + } + } + } + if (p_flags & STATS_FUNC_COUNT_SORTED_BY_MOD) { + for (size_t j = 0; j < used_functions; ++j) { + if (0 == strcmp(function_stats[j].filename, p_db[i].filename)) { + func_count_sorted_mod_str = mputprintf(func_count_sorted_mod_str, + "%d\t%s:%d [%s]\n", function_stats[j].exec_count, function_stats[j].filename, + function_stats[j].lineno, function_stats[j].funcname); + } + } + } + } + } + } + + if (!p_disable_profiler && !p_disable_coverage) { + // sort the code lines and functions by average time / execution + qsort(code_line_stats, used_code_lines, sizeof(stats_data_t), &stats_data_cmp_avg); + qsort(function_stats, used_functions, sizeof(stats_data_t), &stats_data_cmp_avg); + + if (p_flags & (STATS_LINE_AVG_SORTED_TOTAL | STATS_TOP10_LINE_AVG)) { + // cycle through the sorted code lines and gather the necessary data + for (size_t i = 0; i < used_code_lines; ++i) { + double avg = (code_line_stats[i].total_time.tv_sec + + code_line_stats[i].total_time.tv_usec / 1000000.0) / + code_line_stats[i].exec_count; + char* total_time_str = timeval2string(code_line_stats[i].total_time); + char* the_data = mprintf("%.6lfs\t(%ss / %d)\t%s:%d", + avg, total_time_str, code_line_stats[i].exec_count, + code_line_stats[i].filename, code_line_stats[i].lineno); + Free(total_time_str); + if (NULL != code_line_stats[i].funcname) { + the_data = mputprintf(the_data, " [%s]", code_line_stats[i].funcname); + } + the_data = mputstrn(the_data, "\n", 1); + if (p_flags & STATS_LINE_AVG_SORTED_TOTAL) { + line_avg_sorted_tot_str = mputstr(line_avg_sorted_tot_str, the_data); + } + if (i < 10 && (p_flags & STATS_TOP10_LINE_AVG)) { + line_avg_sorted_top10_str = mputprintf(line_avg_sorted_top10_str, + "%2lu.\t%s", i + 1, the_data); + } + Free(the_data); + } + } + + if (p_flags & (STATS_FUNC_AVG_SORTED_TOTAL | STATS_TOP10_FUNC_AVG)) { + // cycle through the sorted functions and gather the necessary data + for (size_t i = 0; i < used_functions; ++i) { + double avg = (function_stats[i].total_time.tv_sec + + function_stats[i].total_time.tv_usec / 1000000.0) / + function_stats[i].exec_count; + char* total_time_str = timeval2string(function_stats[i].total_time); + char* the_data = mprintf("%.6lfs\t(%ss / %d)\t%s:%d [%s]\n", + avg, total_time_str, function_stats[i].exec_count, + function_stats[i].filename, function_stats[i].lineno, function_stats[i].funcname); + Free(total_time_str); + if (p_flags & STATS_FUNC_AVG_SORTED_TOTAL) { + func_avg_sorted_tot_str = mputstr(func_avg_sorted_tot_str, the_data); + } + if (i < 10 && (p_flags & STATS_TOP10_FUNC_AVG)) { + func_avg_sorted_top10_str = mputprintf(func_avg_sorted_top10_str, + "%2lu.\t%s", i + 1, the_data); + } + Free(the_data); + } + } + + if (p_flags & (STATS_LINE_AVG_SORTED_BY_MOD | STATS_FUNC_AVG_SORTED_BY_MOD)) { + // cached string lengths, to avoid multiple separators after each other + size_t line_avg_sorted_mod_str_len = mstrlen(line_avg_sorted_mod_str); + size_t func_avg_sorted_mod_str_len = mstrlen(func_avg_sorted_mod_str); + + // cycle through the sorted statistics and gather the necessary data per module + for (size_t i = 0; i < p_db.size(); ++i) { + if (i > 0) { + if ((p_flags & STATS_LINE_AVG_SORTED_BY_MOD) && + line_avg_sorted_mod_str_len != mstrlen(line_avg_sorted_mod_str)) { + line_avg_sorted_mod_str = mputstr(line_avg_sorted_mod_str, + "--------------------------------------------------------------\n"); + line_avg_sorted_mod_str_len = mstrlen(line_avg_sorted_mod_str); + } + if ((p_flags & STATS_FUNC_AVG_SORTED_BY_MOD) && + func_avg_sorted_mod_str_len != mstrlen(func_avg_sorted_mod_str)) { + func_avg_sorted_mod_str = mputstr(func_avg_sorted_mod_str, + "-------------------------------------------------------------\n"); + func_avg_sorted_mod_str_len = mstrlen(func_avg_sorted_mod_str); + } + } + if (p_flags & STATS_LINE_AVG_SORTED_BY_MOD) { + for (size_t j = 0; j < used_code_lines; ++j) { + if (0 == strcmp(code_line_stats[j].filename, p_db[i].filename)) { + double avg = (code_line_stats[j].total_time.tv_sec + + code_line_stats[j].total_time.tv_usec / 1000000.0) / + code_line_stats[j].exec_count; + char* total_time_str = timeval2string(code_line_stats[j].total_time); + line_avg_sorted_mod_str = mputprintf(line_avg_sorted_mod_str, + "%.6lfs\t(%ss / %d)\t%s:%d", + avg, total_time_str, code_line_stats[j].exec_count, + code_line_stats[j].filename, code_line_stats[j].lineno); + Free(total_time_str); + if (NULL != code_line_stats[j].funcname) { + line_avg_sorted_mod_str = mputprintf(line_avg_sorted_mod_str, + " [%s]", code_line_stats[j].funcname); + } + line_avg_sorted_mod_str = mputstrn(line_avg_sorted_mod_str, "\n", 1); + } + } + } + if (p_flags & STATS_FUNC_AVG_SORTED_BY_MOD) { + for (size_t j = 0; j < used_functions; ++j) { + if (0 == strcmp(function_stats[j].filename, p_db[i].filename)) { + double avg = (function_stats[j].total_time.tv_sec + + function_stats[j].total_time.tv_usec / 1000000.0) / + function_stats[j].exec_count; + char* total_time_str = timeval2string(function_stats[j].total_time); + func_avg_sorted_mod_str = mputprintf(func_avg_sorted_mod_str, + "%.6lfs\t(%ss / %d)\t%s:%d [%s]\n", + avg, total_time_str, function_stats[j].exec_count, + function_stats[j].filename, function_stats[j].lineno, function_stats[j].funcname); + Free(total_time_str); + } + } + } + } + } + } + + // free the stats data + Free(code_line_stats); + Free(function_stats); + } + + // add new lines at the end of each segment + if (p_flags & STATS_NUMBER_OF_LINES) { + line_func_count_str = mputstrn(line_func_count_str, "\n", 1); + } + if (p_flags & STATS_LINE_DATA_RAW) { + line_data_str = mputstrn(line_data_str, "\n", 1); + } + if (p_flags & STATS_FUNC_DATA_RAW) { + func_data_str = mputstrn(func_data_str, "\n", 1); + } + if (!p_disable_profiler) { + if (p_flags & STATS_LINE_TIMES_SORTED_BY_MOD) { + line_time_sorted_mod_str = mputstrn(line_time_sorted_mod_str, "\n", 1); + } + if (p_flags & STATS_LINE_TIMES_SORTED_TOTAL) { + line_time_sorted_tot_str = mputstrn(line_time_sorted_tot_str, "\n", 1); + } + if (p_flags & STATS_FUNC_TIMES_SORTED_BY_MOD) { + func_time_sorted_mod_str = mputstrn(func_time_sorted_mod_str, "\n", 1); + } + if (p_flags & STATS_FUNC_TIMES_SORTED_TOTAL) { + func_time_sorted_tot_str = mputstrn(func_time_sorted_tot_str, "\n", 1); + } + if (p_flags & STATS_TOP10_LINE_TIMES) { + line_time_sorted_top10_str = mputstrn(line_time_sorted_top10_str, "\n", 1); + } + if (p_flags & STATS_TOP10_FUNC_TIMES) { + func_time_sorted_top10_str = mputstrn(func_time_sorted_top10_str, "\n", 1); + } + if (!p_disable_coverage) { + if (p_flags & STATS_LINE_AVG_RAW) { + line_avg_str = mputstrn(line_avg_str, "\n", 1); + } + if (p_flags & STATS_LINE_AVG_RAW) { + func_avg_str = mputstrn(func_avg_str, "\n", 1); + } + if (p_flags & STATS_LINE_AVG_SORTED_BY_MOD) { + line_avg_sorted_mod_str = mputstrn(line_avg_sorted_mod_str, "\n", 1); + } + if (p_flags & STATS_LINE_AVG_SORTED_TOTAL) { + line_avg_sorted_tot_str = mputstrn(line_avg_sorted_tot_str, "\n", 1); + } + if (p_flags & STATS_FUNC_AVG_SORTED_BY_MOD) { + func_avg_sorted_mod_str = mputstrn(func_avg_sorted_mod_str, "\n", 1); + } + if (p_flags & STATS_FUNC_AVG_SORTED_TOTAL) { + func_avg_sorted_tot_str = mputstrn(func_avg_sorted_tot_str, "\n", 1); + } + if (p_flags & STATS_TOP10_LINE_AVG) { + line_avg_sorted_top10_str = mputstrn(line_avg_sorted_top10_str, "\n", 1); + } + if (p_flags & STATS_TOP10_FUNC_AVG) { + func_avg_sorted_top10_str = mputstrn(func_avg_sorted_top10_str, "\n", 1); + } + } + } + if (!p_disable_coverage) { + if (p_flags & STATS_LINE_COUNT_SORTED_BY_MOD) { + line_count_sorted_mod_str = mputstrn(line_count_sorted_mod_str, "\n", 1); + } + if (p_flags & STATS_LINE_COUNT_SORTED_TOTAL) { + line_count_sorted_tot_str = mputstrn(line_count_sorted_tot_str, "\n", 1); + } + if (p_flags & STATS_FUNC_COUNT_SORTED_BY_MOD) { + func_count_sorted_mod_str = mputstrn(func_count_sorted_mod_str, "\n", 1); + } + if (p_flags & STATS_FUNC_COUNT_SORTED_TOTAL) { + func_count_sorted_tot_str = mputstrn(func_count_sorted_tot_str, "\n", 1); + } + if (p_flags & STATS_TOP10_LINE_COUNT) { + line_count_sorted_top10_str = mputstrn(line_count_sorted_top10_str, "\n", 1); + } + if (p_flags & STATS_TOP10_FUNC_COUNT) { + func_count_sorted_top10_str = mputstrn(func_count_sorted_top10_str, "\n", 1); + } + if (p_flags & STATS_UNUSED_LINES) { + unused_lines_str = mputstrn(unused_lines_str, "\n", 1); + } + if (p_flags & STATS_UNUSED_FUNC) { + unused_func_str = mputstrn(unused_func_str, "\n", 1); + } + } + + // write the statistics to the specified file + FILE* file = fopen(p_filename, "w"); + if (NULL == file) { + p_error_function("Could not open file '%s' for writing. Profiling and/or " + "code coverage statistics will not be saved.", p_filename); + return; + } + // by now the strings for all disabled statistics entries should be null + fprintf(file, "%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s" + , title_str + , (NULL != line_func_count_str) ? line_func_count_str : "" + , (NULL != line_data_str) ? line_data_str : "" + , (NULL != line_avg_str) ? line_avg_str : "" + , (NULL != func_data_str) ? func_data_str : "" + , (NULL != func_avg_str) ? func_avg_str : "" + , (NULL != line_time_sorted_mod_str) ? line_time_sorted_mod_str : "" + , (NULL != line_time_sorted_tot_str) ? line_time_sorted_tot_str : "" + , (NULL != func_time_sorted_mod_str) ? func_time_sorted_mod_str : "" + , (NULL != func_time_sorted_tot_str) ? func_time_sorted_tot_str : "" + , (NULL != line_count_sorted_mod_str) ? line_count_sorted_mod_str : "" + , (NULL != line_count_sorted_tot_str) ? line_count_sorted_tot_str : "" + , (NULL != func_count_sorted_mod_str) ? func_count_sorted_mod_str : "" + , (NULL != func_count_sorted_tot_str) ? func_count_sorted_tot_str : "" + , (NULL != line_avg_sorted_mod_str) ? line_avg_sorted_mod_str : "" + , (NULL != line_avg_sorted_tot_str) ? line_avg_sorted_tot_str : "" + , (NULL != func_avg_sorted_mod_str) ? func_avg_sorted_mod_str : "" + , (NULL != func_avg_sorted_tot_str) ? func_avg_sorted_tot_str : "" + , (NULL != line_time_sorted_top10_str) ? line_time_sorted_top10_str : "" + , (NULL != func_time_sorted_top10_str) ? func_time_sorted_top10_str : "" + , (NULL != line_count_sorted_top10_str) ? line_count_sorted_top10_str : "" + , (NULL != func_count_sorted_top10_str) ? func_count_sorted_top10_str : "" + , (NULL != line_avg_sorted_top10_str) ? line_avg_sorted_top10_str : "" + , (NULL != func_avg_sorted_top10_str) ? func_avg_sorted_top10_str : "" + , (NULL != unused_lines_str) ? unused_lines_str : "" + , (NULL != unused_func_str) ? unused_func_str : ""); + + fclose(file); + + // free the strings + Free(title_str); + Free(line_func_count_str); + Free(line_data_str); + Free(line_avg_str); + Free(func_data_str); + Free(func_avg_str); + Free(line_time_sorted_mod_str); + Free(line_time_sorted_tot_str); + Free(func_time_sorted_mod_str); + Free(func_time_sorted_tot_str); + Free(line_count_sorted_mod_str); + Free(line_count_sorted_tot_str); + Free(func_count_sorted_mod_str); + Free(func_count_sorted_tot_str); + Free(line_avg_sorted_mod_str); + Free(line_avg_sorted_tot_str); + Free(func_avg_sorted_mod_str); + Free(func_avg_sorted_tot_str); + Free(line_time_sorted_top10_str); + Free(func_time_sorted_top10_str); + Free(line_count_sorted_top10_str); + Free(func_count_sorted_top10_str); + Free(line_avg_sorted_top10_str); + Free(func_avg_sorted_top10_str); + Free(unused_lines_str); + Free(unused_func_str); + } + +} // namespace diff --git a/core/ProfilerTools.hh b/core/ProfilerTools.hh new file mode 100644 index 000000000..fe95d6ad7 --- /dev/null +++ b/core/ProfilerTools.hh @@ -0,0 +1,163 @@ +/////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2000-2015 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 +/////////////////////////////////////////////////////////////////////////////// + +#ifndef PROFILERTOOLS_HH +#define PROFILERTOOLS_HH + +#include "Vector.hh" +#include "Types.h" +#include <sys/time.h> + +namespace Profiler_Tools { + + /** Reads a timeval value from the given string. The parameter must contain the + * string representation of a real number with 6 digits after the decimal dot. */ + extern timeval string2timeval(const char* str); + + /** Returns the string representation of a real number (with 6 digits after the + * decimal dot) equivalent to the timeval parameter. + * The returned character pointer needs to be freed. */ + extern char* timeval2string(timeval tv); + + /** Adds the two timeval parameters together and returns the result. */ + extern timeval add_timeval(const timeval operand1, const timeval operand2); + + /** Subtracts the second timeval parameter from the first one and returns the result. */ + extern timeval subtract_timeval(const timeval operand1, const timeval operand2); + + /** Database entry for one file */ + struct profiler_db_item_t { + /** Database entry for one line */ + struct profiler_line_data_t { + /** Line number */ + int lineno; + /** The line's total execution time */ + timeval total_time; + /** The number of times this line was executed */ + int exec_count; + }; + /** Database entry for one function (including test cases, alt steps, the control part, etc.) */ + struct profiler_function_data_t { + /** Function name (owned) */ + char* name; + /** Function starting line */ + int lineno; + /** The function's total execution time */ + timeval total_time; + /** The number of times this function was executed */ + int exec_count; + }; + /** TTCN-3 File name (relative path, owned) */ + char* filename; + /** Contains database entries for all the lines in this file */ + Vector<profiler_line_data_t> lines; + /** Contains database entries for all the functions in this file */ + Vector<profiler_function_data_t> functions; + }; + + /** Profiler database type */ + typedef Vector<profiler_db_item_t> profiler_db_t; + + enum profiler_stats_flag_t { + // flags for each statistics entry + STATS_NUMBER_OF_LINES = 0x0000001, + STATS_LINE_DATA_RAW = 0x0000002, + STATS_FUNC_DATA_RAW = 0x0000004, + STATS_LINE_AVG_RAW = 0x0000008, + STATS_FUNC_AVG_RAW = 0x0000010, + STATS_LINE_TIMES_SORTED_BY_MOD = 0x0000020, + STATS_FUNC_TIMES_SORTED_BY_MOD = 0x0000040, + STATS_LINE_TIMES_SORTED_TOTAL = 0x0000080, + STATS_FUNC_TIMES_SORTED_TOTAL = 0x0000100, + STATS_LINE_COUNT_SORTED_BY_MOD = 0x0000200, + STATS_FUNC_COUNT_SORTED_BY_MOD = 0x0000400, + STATS_LINE_COUNT_SORTED_TOTAL = 0x0000800, + STATS_FUNC_COUNT_SORTED_TOTAL = 0x0001000, + STATS_LINE_AVG_SORTED_BY_MOD = 0x0002000, + STATS_FUNC_AVG_SORTED_BY_MOD = 0x0004000, + STATS_LINE_AVG_SORTED_TOTAL = 0x0008000, + STATS_FUNC_AVG_SORTED_TOTAL = 0x0010000, + STATS_TOP10_LINE_TIMES = 0x0020000, + STATS_TOP10_FUNC_TIMES = 0x0040000, + STATS_TOP10_LINE_COUNT = 0x0080000, + STATS_TOP10_FUNC_COUNT = 0x0100000, + STATS_TOP10_LINE_AVG = 0x0200000, + STATS_TOP10_FUNC_AVG = 0x0400000, + STATS_UNUSED_LINES = 0x0800000, + STATS_UNUSED_FUNC = 0x1000000, + // grouped entries + STATS_ALL_RAW_DATA = 0x000001E, + STATS_LINE_DATA_SORTED_BY_MOD = 0x0002220, + STATS_FUNC_DATA_SORTED_BY_MOD = 0x0004440, + STATS_LINE_DATA_SORTED_TOTAL = 0x0008880, + STATS_FUNC_DATA_SORTED_TOTAL = 0x0011100, + STATS_LINE_DATA_SORTED = 0x000AAA0, + STATS_FUNC_DATA_SORTED = 0x0015540, + STATS_ALL_DATA_SORTED = 0x001FFE0, + STATS_TOP10_LINE_DATA = 0x02A0000, + STATS_TOP10_FUNC_DATA = 0x0540000, + STATS_TOP10_ALL_DATA = 0x07E0000, + STATS_UNUSED_DATA = 0x1800000, + STATS_ALL = 0x1FFFFFF + }; + +#define STATS_MAX_HEX_DIGITS 7 + + /** Returns the index of a TTCN-3 function's entry in the specified database + * @param p_db profiler database + * @param p_element index of the file (where the function is declared) + * @param p_lineno function start line */ + extern int get_function(const profiler_db_t& p_db, int p_element, int p_lineno); + + /** Creates a new TTCN-3 function entry and inserts it in the specified database + * @param p_db profiler database + * @param p_element file entry's index + * @param p_lineno function start line + * @param p_function_name name of the function */ + extern void create_function(profiler_db_t& p_db, int p_element, int p_lineno, + const char* p_function_name); + + /** Returns the index of a TTCN-3 code line's entry in the specified database */ + extern int get_line(const profiler_db_t& p_db, int p_element, int p_lineno); + + /** Creates a new TTCN-3 code line entry and inserts it into the specified database */ + extern void create_line(profiler_db_t& p_db, int p_element, int p_lineno); + + /** Adds the data from the database file to the local database + * @param p_db local database + * @param p_filename database file name + * @param p_wait waits for the file to appear if it doesn't exist + * @param p_error_function callback function for displaying error messages */ + extern void import_data(profiler_db_t& p_db, const char* p_filename, + boolean p_wait, void (*p_error_function)(const char*, ...)); + + /** Writes the local database to the database file (overwrites the file) + * @param p_db local database + * @param p_filename database file name + * @param p_disable_profiler discard profiling data + * @param p_disable_coverage discard code coverage data + * @param p_error_function callback function for displaying error messages */ + extern void export_data(profiler_db_t& p_db, const char* p_filename, + boolean p_disable_profiler, boolean p_disable_coverage, + void (*p_error_function)(const char*, ...)); + + /** Calculates and prints statistics from the gathered data + * @param p_db local database + * @param p_filename database file name + * @param p_disable_profiler discard profiling data + * @param p_disable_coverage discard code coverage data + * @param p_flags statistics filter (determines which statistics entries are printed) + * @param p_error_function callback function for displaying error messages */ + extern void print_stats(profiler_db_t& p_db, const char* p_filename, + boolean p_disable_profiler, boolean p_disable_coverage, + unsigned int p_flags, void (*p_error_function)(const char*, ...)); + +} + +#endif /* PROFILERTOOLS_HH */ + diff --git a/core/RAW.cc b/core/RAW.cc index 72947e8b8..aaa1b6494 100644 --- a/core/RAW.cc +++ b/core/RAW.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/core/RAW.hh b/core/RAW.hh index c7328f457..6bd656552 100644 --- a/core/RAW.hh +++ b/core/RAW.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -17,6 +17,8 @@ typedef bignum_st BIGNUM; #define RAW_INT_ENC_LENGTH 4 #define REVERSE_BITS(b) (BitReverseTable[(b)&0xFF]) +#define RAW_INTX -1 + /** * \defgroup RAW RAW-related stuff. * diff --git a/core/RInt.cc b/core/RInt.cc index 3c4a94f73..f0dd541c7 100644 --- a/core/RInt.cc +++ b/core/RInt.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/core/RInt.hh b/core/RInt.hh index 1101061aa..07548085d 100644 --- a/core/RInt.hh +++ b/core/RInt.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/core/Runtime.cc b/core/Runtime.cc index 25e07bb9d..527bf66d4 100644 --- a/core/Runtime.cc +++ b/core/Runtime.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -2260,6 +2260,9 @@ void TTCN_Runtime::process_create_mtc() "state."); return; } + + // let the HC's TTCN-3 Profiler know of the MTC + ttcn3_prof.add_component(MTC_COMPREF); // clean Emergency log buffer before fork, to avoid duplication TTCN_Logger::ring_buffer_dump(false); @@ -2307,7 +2310,7 @@ void TTCN_Runtime::process_create_ptc(component component_reference, } // let the HC's TTCN-3 Profiler know of this new PTC - ttcn3_prof.add_ptc(component_reference); + ttcn3_prof.add_component(component_reference); // clean Emergency log buffer before fork, to avoid duplication TTCN_Logger::ring_buffer_dump(false); diff --git a/core/Runtime.hh b/core/Runtime.hh index 929f5d27f..f91103121 100644 --- a/core/Runtime.hh +++ b/core/Runtime.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -99,6 +99,8 @@ public: inline static boolean is_single() { return executor_state >= SINGLE_CONTROLPART && executor_state <= SINGLE_TESTCASE; } + inline static boolean is_undefined() /* e.g.: when listing test cases (<EXE> -l) */ + { return executor_state == UNDEFINED_STATE; } static boolean is_idle(); inline static boolean is_overloaded() { return executor_state == HC_OVERLOADED || diff --git a/core/Single_main.cc b/core/Single_main.cc index 0c2430675..c6e4bcbae 100644 --- a/core/Single_main.cc +++ b/core/Single_main.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/core/Snapshot.cc b/core/Snapshot.cc index 42e32a7d6..0f1f79b5e 100644 --- a/core/Snapshot.cc +++ b/core/Snapshot.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/core/Snapshot.hh b/core/Snapshot.hh index c253796b7..f9cb4d4a9 100644 --- a/core/Snapshot.hh +++ b/core/Snapshot.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/core/String_struct.hh b/core/String_struct.hh index 416ae3a90..0ada30e45 100644 --- a/core/String_struct.hh +++ b/core/String_struct.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/core/Struct_of.cc b/core/Struct_of.cc index 0acdf99ec..85001a9e5 100644 --- a/core/Struct_of.cc +++ b/core/Struct_of.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -149,7 +149,7 @@ boolean compare_set_of(const Base_Type *left_ptr, int left_size, boolean match_array(const Base_Type *value_ptr, int value_size, const Restricted_Length_Template *template_ptr, int template_size, - match_function_t match_function) + match_function_t match_function, boolean legacy) { if (value_ptr == NULL || value_size < 0 || template_ptr == NULL || template_size < 0) @@ -164,7 +164,7 @@ boolean match_array(const Base_Type *value_ptr, int value_size, //We matched if the remaining templates are // asterisks while(template_index < template_size && - match_function(value_ptr, -1, template_ptr, template_index)) + match_function(value_ptr, -1, template_ptr, template_index, legacy)) template_index++; return template_index == template_size; @@ -182,12 +182,14 @@ boolean match_array(const Base_Type *value_ptr, int value_size, // and there are limited number of templates and values for(;;) { - if(match_function(value_ptr, -1, template_ptr, template_index)) + if(match_function(value_ptr, -1, template_ptr, template_index, legacy)) { //if we found an asterisk we administer it, and step in the template last_asterisk = template_index++; last_value_to_asterisk = value_index; - }else if(match_function(value_ptr,value_index,template_ptr,template_index)) + } + else if(match_function(value_ptr, value_index, template_ptr, template_index, + legacy)) { //if we found a matching pair we step in both value_index++; @@ -210,7 +212,7 @@ boolean match_array(const Base_Type *value_ptr, int value_size, //value_index != value_size at this point so it is pointless // to check it in the if statement //At the end of the template - if(match_function(value_ptr, -1, template_ptr, template_index-1)) { + if(match_function(value_ptr, -1, template_ptr, template_index-1, legacy)) { //if the templates last element is an asterisk it eats up the values return TRUE; } else if (last_asterisk == -1){ @@ -228,7 +230,7 @@ boolean match_array(const Base_Type *value_ptr, int value_size, //At the end of the value we matched if the remaining templates are // asterisks while(template_index < template_size && - match_function(value_ptr, -1, template_ptr, template_index)) + match_function(value_ptr, -1, template_ptr, template_index, legacy)) template_index++; return template_index == template_size; @@ -264,6 +266,7 @@ class Matching_Table { int *template_index_table; edge_status **edge_matrix; boolean *covered_vector; //tells if a value is covered + boolean legacy; //if the value is covered, then tells by whom it is covered int *covered_index_vector; @@ -282,7 +285,7 @@ public: Matching_Table(const Base_Type *par_value_ptr, int par_value_start, int par_value_size,const Restricted_Length_Template *par_template_ptr, int par_template_start, int par_template_size, - match_function_t par_match_function) + match_function_t par_match_function, boolean par_legacy) { match_function = par_match_function; value_size = par_value_size; @@ -290,6 +293,7 @@ public: template_start = par_template_start; value_ptr = par_value_ptr; template_ptr = par_template_ptr; + legacy = par_legacy; n_asterisks = 0; nof_covered = 0;//to get rid of the linear summing @@ -299,7 +303,7 @@ public: // locating the asterisks in the template for (int i = 0; i < par_template_size; i++) { - if(match_function(value_ptr, -1,template_ptr, par_template_start+i)) + if(match_function(value_ptr, -1,template_ptr, par_template_start+i, legacy)) n_asterisks++; else template_index_table[i - n_asterisks] = i; } @@ -352,7 +356,7 @@ public: { if (match_function(value_ptr, value_start + value_index, template_ptr, - template_start + template_index_table[template_index])) + template_start + template_index_table[template_index], legacy)) { edge_matrix[template_index][value_index] = EDGE; }else{ @@ -589,11 +593,11 @@ boolean match_set_of_internal(const Base_Type *value_ptr, match_function_t match_function, type_of_matching match_type, int* number_of_uncovered, int* pair_list, - unsigned int number_of_checked) + unsigned int number_of_checked, boolean legacy) { Matching_Table table(value_ptr, value_start, value_size, template_ptr, template_start, template_size, - match_function); + match_function, legacy); // we have to use the reduced length of the template // (not counting the asterisks) @@ -863,7 +867,8 @@ static answer recursive_permutation_match(const Base_Type *value_ptr, unsigned int template_size, unsigned int permutation_index, match_function_t match_function, - unsigned int& shift_size) + unsigned int& shift_size, + boolean legacy) { unsigned int nof_permutations = template_ptr->get_number_of_permutations(); if (permutation_index > nof_permutations) @@ -898,7 +903,7 @@ static answer recursive_permutation_match(const Base_Type *value_ptr, template_ptr->get_permutation_start(permutation_index); if (permutation_begins || - match_function(value_ptr, -1, template_ptr, template_start_index)) + match_function(value_ptr, -1, template_ptr, template_start_index, legacy)) { unsigned int smallest_possible_size; unsigned int largest_possible_size; @@ -920,7 +925,7 @@ static answer recursive_permutation_match(const Base_Type *value_ptr, for(unsigned int i = 0; i < permutation_size; i++) { if(match_function(value_ptr, -1, template_ptr, - i + template_start_index)) + i + template_start_index, legacy)) { has_asterisk = TRUE; }else{ @@ -992,7 +997,7 @@ static answer recursive_permutation_match(const Base_Type *value_ptr, boolean found = match_set_of_internal(value_ptr, value_start_index, temp_size, template_ptr, template_start_index, permutation_size, - match_function, SUPERSET, &x, pair_list,old_temp_size); + match_function, SUPERSET, &x, pair_list,old_temp_size, legacy); if(found) { @@ -1048,7 +1053,7 @@ static answer recursive_permutation_match(const Base_Type *value_ptr, template_size - permutation_size, permutation_index, - match_function, shift_size); + match_function, shift_size, legacy); }else{ //try with the next permutation result = recursive_permutation_match(value_ptr,value_start_index+i, @@ -1057,7 +1062,7 @@ static answer recursive_permutation_match(const Base_Type *value_ptr, permutation_size, template_size - permutation_size, permutation_index + 1, - match_function, shift_size); + match_function, shift_size, legacy); } if(result == SUCCESS) @@ -1106,19 +1111,19 @@ static answer recursive_permutation_match(const Base_Type *value_ptr, unsigned int i = 0; do{ good = match_function(value_ptr, value_start_index + i, - template_ptr, template_start_index + i); + template_ptr, template_start_index + i, legacy); i++; //bad stop: something can't be matched //half bad half good stop: the end of values is reached //good stop: matching on the full distance or till an asterisk }while(good && i < value_size && i < distance && !match_function(value_ptr, -1, template_ptr, - template_start_index + i)); + template_start_index + i, legacy)); //if we matched on the full distance or till an asterisk if(good && (i == distance || match_function(value_ptr, -1, template_ptr, - template_start_index + i))) + template_start_index + i, legacy))) { //reached the end of the templates if(i == template_size) @@ -1140,7 +1145,7 @@ static answer recursive_permutation_match(const Base_Type *value_ptr, template_start_index + i, template_size - i, permutation_index, - match_function, shift_size); + match_function, shift_size, legacy); } }else{ //something bad happened, so we have to check how bad the situation is @@ -1159,7 +1164,7 @@ static answer recursive_permutation_match(const Base_Type *value_ptr, do{ good = match_function(value_ptr, value_start_index + i + shift_size, - template_ptr, template_start_index + i); + template_ptr, template_start_index + i, legacy); shift_size++; }while(!good && i + shift_size < value_size); @@ -1186,7 +1191,7 @@ instead of slower recursive_permutation_match. */ boolean match_record_of(const Base_Type *value_ptr, int value_size, const Record_Of_Template *template_ptr, - int template_size, match_function_t match_function) + int template_size, match_function_t match_function, boolean legacy) { if (value_ptr == NULL || value_size < 0 || template_ptr == NULL || template_size < 0 || @@ -1197,23 +1202,23 @@ boolean match_record_of(const Base_Type *value_ptr, int value_size, // use the simplified algorithm if the template does not contain permutation if (nof_permutations == 0) return match_array(value_ptr, value_size, - template_ptr, template_size, match_function); + template_ptr, template_size, match_function, legacy); // use 'set of' matching if all template elements are grouped into one // permutation if (nof_permutations == 1 && template_ptr->get_permutation_start(0) == 0 && template_ptr->get_permutation_end(0) == (unsigned int)(template_size - 1)) return match_set_of(value_ptr, value_size, template_ptr, template_size, - match_function); + match_function, legacy); unsigned int shift_size = 0; return recursive_permutation_match(value_ptr, 0, value_size, template_ptr, - 0, template_size, 0, match_function, shift_size) == SUCCESS; + 0, template_size, 0, match_function, shift_size, legacy) == SUCCESS; } boolean match_set_of(const Base_Type *value_ptr, int value_size, const Restricted_Length_Template *template_ptr, - int template_size, match_function_t match_function) + int template_size, match_function_t match_function, boolean legacy) { if (value_ptr == NULL || value_size < 0 || template_ptr == NULL || template_size < 0) @@ -1233,14 +1238,14 @@ boolean match_set_of(const Base_Type *value_ptr, int value_size, TTCN_error("Internal error: match_set_of: invalid matching type."); } return match_set_of_internal(value_ptr, 0, value_size, template_ptr, 0, - template_size, match_function, match_type, NULL, NULL, 0); + template_size, match_function, match_type, NULL, NULL, 0, legacy); } void log_match_heuristics(const Base_Type *value_ptr, int value_size, const Restricted_Length_Template *template_ptr, int template_size, match_function_t match_function, - log_function_t log_function) + log_function_t log_function, boolean legacy) { if (value_ptr == NULL || value_size < 0 || template_ptr == NULL || template_size < 0 || @@ -1259,7 +1264,7 @@ void log_match_heuristics(const Base_Type *value_ptr, int value_size, { // If j == -1, check whether the template element is an asterisk. // There is no problem if an asterisk has no matching pair. - if (match_function(value_ptr, -1, template_ptr, i)) + if (match_function(value_ptr, -1, template_ptr, i, legacy)) { asterisks_found++; } @@ -1294,7 +1299,7 @@ void log_match_heuristics(const Base_Type *value_ptr, int value_size, boolean pair_found = FALSE; for (int j = 0; j < template_size; j++) { - if (match_function(value_ptr, i, template_ptr, j)) + if (match_function(value_ptr, i, template_ptr, j, legacy)) { pair_found = TRUE; break; @@ -1310,7 +1315,7 @@ void log_match_heuristics(const Base_Type *value_ptr, int value_size, else value_found = TRUE; - log_function(value_ptr, NULL, i, 0); + log_function(value_ptr, NULL, i, 0, legacy); TTCN_Logger::log_event(" at index %d", i); } nof_unmatched_values++; @@ -1334,7 +1339,7 @@ void log_match_heuristics(const Base_Type *value_ptr, int value_size, // pair for (int j = -1; j < value_size; j++) { - if (match_function(value_ptr, j, template_ptr, i)) + if (match_function(value_ptr, j, template_ptr, i, legacy)) { pair_found = TRUE; break; @@ -1349,7 +1354,7 @@ void log_match_heuristics(const Base_Type *value_ptr, int value_size, else template_found = TRUE; - log_function(NULL, template_ptr, 0, i); + log_function(NULL, template_ptr, 0, i, legacy); TTCN_Logger::log_event(" at index %d", i); } nof_unmatched_templates++; @@ -1365,7 +1370,7 @@ void log_match_heuristics(const Base_Type *value_ptr, int value_size, { for (int j = 0; j < template_size; j++) { - if (match_function(value_ptr, i, template_ptr, j)) + if (match_function(value_ptr, i, template_ptr, j, legacy)) { if (pair_found) TTCN_Logger::log_char(','); @@ -1391,7 +1396,7 @@ void log_match_heuristics(const Base_Type *value_ptr, int value_size, { if(unmatched_templates[j]){ TTCN_Logger::log_logmatch_info("[%d <-> %d]", i, j); - log_function(value_ptr, template_ptr, i, j); + log_function(value_ptr, template_ptr, i, j, legacy); TTCN_Logger::set_logmatch_buffer_len(previous_size); } @@ -1411,7 +1416,7 @@ void log_match_heuristics(const Base_Type *value_ptr, int value_size, if('{' == sep){ sep = ','; } - log_function(value_ptr, template_ptr, i, j); + log_function(value_ptr, template_ptr, i, j, legacy); TTCN_Logger::log_event_str(" }"); } } diff --git a/core/Struct_of.hh b/core/Struct_of.hh index 49cce39ff..90f285cf4 100644 --- a/core/Struct_of.hh +++ b/core/Struct_of.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -34,10 +34,11 @@ typedef boolean (*compare_function_t)(const Base_Type *left_ptr, int left_index, #endif typedef boolean (*match_function_t)(const Base_Type *value_ptr, int value_index, - const Restricted_Length_Template *template_ptr, int template_index); + const Restricted_Length_Template *template_ptr, int template_index, boolean legacy); typedef void (*log_function_t)(const Base_Type *value_ptr, - const Restricted_Length_Template *template_ptr, int index_value, int index_template); + const Restricted_Length_Template *template_ptr, int index_value, + int index_template, boolean legacy); #ifdef TITAN_RUNTIME_2 extern boolean compare_set_of(const Record_Of_Type *left_ptr, int left_size, @@ -51,19 +52,19 @@ extern boolean compare_set_of(const Base_Type *left_ptr, int left_size, extern boolean match_array(const Base_Type *value_ptr, int value_size, const Restricted_Length_Template *template_ptr, int template_size, - match_function_t match_function); + match_function_t match_function, boolean legacy); extern boolean match_record_of(const Base_Type *value_ptr, int value_size, const Record_Of_Template *template_ptr, int template_size, - match_function_t match_function); + match_function_t match_function, boolean legacy); extern boolean match_set_of(const Base_Type *value_ptr, int value_size, const Restricted_Length_Template *template_ptr, int template_size, - match_function_t match_function); + match_function_t match_function, boolean legacy); extern void log_match_heuristics(const Base_Type *value_ptr, int value_size, const Restricted_Length_Template *template_ptr, int template_size, - match_function_t match_function, log_function_t log_function); + match_function_t match_function, log_function_t log_function, boolean legacy); boolean match_set_of_internal(const Base_Type *value_ptr, int value_start, int value_size, @@ -72,6 +73,6 @@ boolean match_set_of_internal(const Base_Type *value_ptr, match_function_t match_function, type_of_matching match_type, int* number_of_uncovered, int* pair_list, - unsigned int number_of_checked); + unsigned int number_of_checked, boolean legacy); #endif diff --git a/core/TCov.cc b/core/TCov.cc index 1cca55d78..e8bd03cf0 100644 --- a/core/TCov.cc +++ b/core/TCov.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/core/TCov.hh b/core/TCov.hh index 3fc93683e..bf121de50 100644 --- a/core/TCov.hh +++ b/core/TCov.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/core/TEXT.cc b/core/TEXT.cc index d0b57c4a4..f36264302 100644 --- a/core/TEXT.cc +++ b/core/TEXT.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/core/TEXT.hh b/core/TEXT.hh index 7a2483310..e094212f2 100644 --- a/core/TEXT.hh +++ b/core/TEXT.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/core/TTCN3.hh b/core/TTCN3.hh index 6fb4305eb..5cd837282 100644 --- a/core/TTCN3.hh +++ b/core/TTCN3.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/core/Template.cc b/core/Template.cc index ff3aa0610..2777ead0b 100644 --- a/core/Template.cc +++ b/core/Template.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -17,7 +17,8 @@ #ifdef TITAN_RUNTIME_2 #include "Integer.hh" -void Base_Template::check_restriction(template_res t_res, const char* t_name) const +void Base_Template::check_restriction(template_res t_res, const char* t_name, + boolean legacy /* = FALSE */) const { if (template_selection==UNINITIALIZED_TEMPLATE) return; switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) { @@ -29,7 +30,7 @@ void Base_Template::check_restriction(template_res t_res, const char* t_name) co template_selection==SPECIFIC_VALUE)) return; break; case TR_PRESENT: - if (!match_omit()) return; + if (!match_omit(legacy)) return; break; default: return; @@ -140,6 +141,12 @@ void Base_Template::set_param(Module_Param& /*param*/) TTCN_error("Internal error: Base_Template::set_param()"); } +Module_Param* Base_Template::get_param(Module_Param_Name& /* param_name */) const +{ + TTCN_error("Internal error: Base_Template::get_param()"); + return NULL; +} + Restricted_Length_Template::Restricted_Length_Template() { length_restriction_type = NO_LENGTH_RESTRICTION; @@ -391,6 +398,24 @@ void Restricted_Length_Template::set_length_range(const Module_Param& param) } } +Module_Param_Length_Restriction* Restricted_Length_Template::get_length_range() const +{ + if (length_restriction_type == NO_LENGTH_RESTRICTION) { + return NULL; + } + Module_Param_Length_Restriction* mp_res = new Module_Param_Length_Restriction(); + if (length_restriction_type == SINGLE_LENGTH_RESTRICTION) { + mp_res->set_single(length_restriction.single_length); + } + else { + mp_res->set_min(length_restriction.range_length.min_length); + if (length_restriction.range_length.max_length_set) { + mp_res->set_max(length_restriction.range_length.max_length); + } + } + return mp_res; +} + void Restricted_Length_Template::set_single_length(int single_length) { length_restriction_type = SINGLE_LENGTH_RESTRICTION; @@ -487,12 +512,13 @@ void Record_Of_Template::set_selection(const Record_Of_Template& other_value) boolean Record_Of_Template::match_function_specific( const Base_Type *value_ptr, int value_index, - const Restricted_Length_Template *template_ptr, int template_index) + const Restricted_Length_Template *template_ptr, int template_index, + boolean legacy) { const Record_Of_Template* rec_tmpl_ptr = static_cast<const Record_Of_Template*>(template_ptr); if (value_index >= 0) { const Record_Of_Type* recof_ptr = static_cast<const Record_Of_Type*>(value_ptr); - return rec_tmpl_ptr->single_value.value_elements[template_index]->matchv(recof_ptr->get_at(value_index)); + return rec_tmpl_ptr->single_value.value_elements[template_index]->matchv(recof_ptr->get_at(value_index), legacy); } else { return rec_tmpl_ptr->single_value.value_elements[template_index]->is_any_or_omit(); } @@ -942,7 +968,8 @@ int Record_Of_Template::n_elem() const "template of type %s.", get_descriptor()->name); } -boolean Record_Of_Template::matchv(const Base_Type* other_value) const +boolean Record_Of_Template::matchv(const Base_Type* other_value, + boolean legacy) const { const Record_Of_Type* other_recof = static_cast<const Record_Of_Type*>(other_value); if (!other_value->is_bound()) return FALSE; @@ -950,7 +977,8 @@ boolean Record_Of_Template::matchv(const Base_Type* other_value) const if (!match_length(value_length)) return FALSE; switch (template_selection) { case SPECIFIC_VALUE: - return match_record_of(other_recof, value_length, this, single_value.n_elements, match_function_specific); + return match_record_of(other_recof, value_length, this, + single_value.n_elements, match_function_specific, legacy); case OMIT_VALUE: return FALSE; case ANY_VALUE: @@ -959,7 +987,7 @@ boolean Record_Of_Template::matchv(const Base_Type* other_value) const case VALUE_LIST: case COMPLEMENTED_LIST: for (int list_count = 0; list_count < value_list.n_values; list_count++) - if (value_list.list_value[list_count]->matchv(other_value)) + if (value_list.list_value[list_count]->matchv(other_value, legacy)) return template_selection == VALUE_LIST; return template_selection == COMPLEMENTED_LIST; default: @@ -1041,10 +1069,10 @@ void Record_Of_Template::log() const if (err_descr) err_descr->log(); } -void Record_Of_Template::log_matchv(const Base_Type* match_value) const +void Record_Of_Template::log_matchv(const Base_Type* match_value, boolean legacy) const { if (TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()) { - if (matchv(match_value)) { + if (matchv(match_value, legacy)) { TTCN_Logger::print_logmatch_buffer(); TTCN_Logger::log_event_str(" matched"); } else { @@ -1054,9 +1082,9 @@ void Record_Of_Template::log_matchv(const Base_Type* match_value) const single_value.n_elements == recof_value->size_of()) { size_t previous_size = TTCN_Logger::get_logmatch_buffer_len(); for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) { - if(!single_value.value_elements[elem_count]->matchv(recof_value->get_at(elem_count))){ + if(!single_value.value_elements[elem_count]->matchv(recof_value->get_at(elem_count), legacy)){ TTCN_Logger::log_logmatch_info("[%d]", elem_count); - single_value.value_elements[elem_count]->log_matchv(recof_value->get_at(elem_count)); + single_value.value_elements[elem_count]->log_matchv(recof_value->get_at(elem_count), legacy); TTCN_Logger::set_logmatch_buffer_len(previous_size); } } @@ -1077,7 +1105,7 @@ void Record_Of_Template::log_matchv(const Base_Type* match_value) const TTCN_Logger::log_event_str("{ "); for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) { if (elem_count > 0) TTCN_Logger::log_event_str(", "); - single_value.value_elements[elem_count]->log_matchv(recof_value->get_at(elem_count)); + single_value.value_elements[elem_count]->log_matchv(recof_value->get_at(elem_count), legacy); } TTCN_Logger::log_event_str(" }"); log_match_length(single_value.n_elements); @@ -1085,7 +1113,7 @@ void Record_Of_Template::log_matchv(const Base_Type* match_value) const match_value->log(); TTCN_Logger::log_event_str(" with "); log(); - if (matchv(match_value)) TTCN_Logger::log_event_str(" matched"); + if (matchv(match_value, legacy)) TTCN_Logger::log_event_str(" matched"); else TTCN_Logger::log_event_str(" unmatched"); } } @@ -1151,13 +1179,13 @@ void Record_Of_Template::decode_text(Text_Buf& text_buf) } } -boolean Record_Of_Template::is_present() const +boolean Record_Of_Template::is_present(boolean legacy /* = FALSE */) const { if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE; - return !match_omit(); + return !match_omit(legacy); } -boolean Record_Of_Template::match_omit() const +boolean Record_Of_Template::match_omit(boolean legacy /* = FALSE */) const { if (is_ifpresent) return TRUE; switch (template_selection) { @@ -1166,10 +1194,14 @@ boolean Record_Of_Template::match_omit() const return TRUE; case VALUE_LIST: case COMPLEMENTED_LIST: - for (int i=0; i<value_list.n_values; i++) - if (value_list.list_value[i]->match_omit()) - return template_selection==VALUE_LIST; - return template_selection==COMPLEMENTED_LIST; + if (legacy) { + // legacy behavior: 'omit' can appear in the value/complement list + for (int i=0; i<value_list.n_values; i++) + if (value_list.list_value[i]->match_omit()) + return template_selection==VALUE_LIST; + return template_selection==COMPLEMENTED_LIST; + } + // else fall through default: return FALSE; } @@ -1194,7 +1226,13 @@ void Record_Of_Template::set_param(Module_Param& param) } param.basic_check(Module_Param::BC_TEMPLATE|Module_Param::BC_LIST, "record of template"); - switch (param.get_type()) { + + Module_Param_Ptr mp = ¶m; + if (param.get_type() == Module_Param::MP_Reference) { + mp = param.get_referenced_param(); + } + + switch (mp->get_type()) { case Module_Param::MP_Omit: set_value(OMIT_VALUE); break; @@ -1205,17 +1243,24 @@ void Record_Of_Template::set_param(Module_Param& param) set_value(ANY_OR_OMIT); break; case Module_Param::MP_List_Template: - case Module_Param::MP_ComplementList_Template: - set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, param.get_size()); - for (size_t i=0; i<param.get_size(); i++) { - get_list_item(i)->set_param(*param.get_elem(i)); + case Module_Param::MP_ComplementList_Template: { + Record_Of_Template** list_items = (Record_Of_Template**) + allocate_pointers(mp->get_size()); + for (size_t i = 0; i < mp->get_size(); i++) { + list_items[i] = create(); + list_items[i]->set_param(*mp->get_elem(i)); } - break; + clean_up(); + template_selection = mp->get_type() == Module_Param::MP_List_Template ? + VALUE_LIST : COMPLEMENTED_LIST; + value_list.n_values = mp->get_size(); + value_list.list_value = list_items; + break; } case Module_Param::MP_Value_List: { - set_size(param.get_size()); // at least this size if there are no permutation elements, if there are then get_at() will automatically resize + set_size(mp->get_size()); // at least this size if there are no permutation elements, if there are then get_at() will automatically resize int curr_idx = 0; // current index into this - for (size_t i=0; i<param.get_size(); ++i) { - Module_Param* const curr = param.get_elem(i); + for (size_t i=0; i<mp->get_size(); ++i) { + Module_Param* const curr = mp->get_elem(i); switch (curr->get_type()) { case Module_Param::MP_NotUsed: // skip this element @@ -1239,19 +1284,85 @@ void Record_Of_Template::set_param(Module_Param& param) } break; case Module_Param::MP_Indexed_List: if (template_selection!=SPECIFIC_VALUE) set_size(0); - for (size_t i=0; i<param.get_size(); ++i) { - Module_Param* const current = param.get_elem(i); + for (size_t i=0; i<mp->get_size(); ++i) { + Module_Param* const current = mp->get_elem(i); get_at((int)current->get_id()->get_index())->set_param(*current); } break; default: param.type_error("record of template", get_descriptor()->name); } - is_ifpresent = param.get_ifpresent(); - set_length_range(param); + is_ifpresent = param.get_ifpresent() || mp->get_ifpresent(); + if (param.get_length_restriction() != NULL) { + set_length_range(param); + } + else { + set_length_range(*mp); + } } -void Record_Of_Template::check_restriction(template_res t_res, const char* t_name) const +Module_Param* Record_Of_Template::get_param(Module_Param_Name& param_name) const +{ + if (param_name.next_name()) { + // Haven't reached the end of the module parameter name + // => the name refers to one of the elements, not to the whole record of + char* param_field = param_name.get_current_name(); + if (param_field[0] < '0' || param_field[0] > '9') { + TTCN_error("Unexpected record field name in module parameter reference, " + "expected a valid index for record of template type `%s'", + get_descriptor()->name); + } + int param_index = -1; + sscanf(param_field, "%d", ¶m_index); + return get_at(param_index)->get_param(param_name); + } + Module_Param* mp = NULL; + switch (template_selection) { + case UNINITIALIZED_TEMPLATE: + mp = new Module_Param_Unbound(); + break; + case OMIT_VALUE: + mp = new Module_Param_Omit(); + break; + case ANY_VALUE: + mp = new Module_Param_Any(); + break; + case ANY_OR_OMIT: + mp = new Module_Param_AnyOrNone(); + break; + case SPECIFIC_VALUE: { + Vector<Module_Param*> values; + for (int i = 0; i < single_value.n_elements; ++i) { + values.push_back(single_value.value_elements[i]->get_param(param_name)); + } + mp = new Module_Param_Value_List(); + mp->add_list_with_implicit_ids(&values); + values.clear(); + break; } + case VALUE_LIST: + case COMPLEMENTED_LIST: { + if (template_selection == VALUE_LIST) { + mp = new Module_Param_List_Template(); + } + else { + mp = new Module_Param_ComplementList_Template(); + } + for (int i = 0; i < value_list.n_values; ++i) { + mp->add_elem(value_list.list_value[i]->get_param(param_name)); + } + break; } + default: + break; + } + if (is_ifpresent) { + mp->set_ifpresent(); + } + mp->set_length_restriction(get_length_range()); + return mp; +} + +void Record_Of_Template::check_restriction(template_res t_res, const char* t_name, + boolean legacy /* = FALSE */) const { if (template_selection==UNINITIALIZED_TEMPLATE) return; switch ((t_name && (t_res==TR_VALUE)) ? TR_OMIT : t_res) { @@ -1264,7 +1375,7 @@ void Record_Of_Template::check_restriction(template_res t_res, const char* t_nam single_value.value_elements[i]->check_restriction(t_res, t_name ? t_name : get_descriptor()->name); return; case TR_PRESENT: - if (!match_omit()) return; + if (!match_omit(legacy)) return; break; default: return; @@ -1631,12 +1742,13 @@ int Set_Of_Template::n_elem() const boolean Set_Of_Template::match_function_specific( const Base_Type *value_ptr, int value_index, - const Restricted_Length_Template *template_ptr, int template_index) + const Restricted_Length_Template *template_ptr, int template_index, + boolean legacy) { const Set_Of_Template* set_tmpl_ptr = static_cast<const Set_Of_Template*>(template_ptr); if (value_index >= 0) { const Record_Of_Type* recof_ptr = static_cast<const Record_Of_Type*>(value_ptr); - return set_tmpl_ptr->single_value.value_elements[template_index]->matchv(recof_ptr->get_at(value_index)); + return set_tmpl_ptr->single_value.value_elements[template_index]->matchv(recof_ptr->get_at(value_index), legacy); } else { return set_tmpl_ptr->single_value.value_elements[template_index]->is_any_or_omit(); } @@ -1644,12 +1756,13 @@ boolean Set_Of_Template::match_function_specific( boolean Set_Of_Template::match_function_set( const Base_Type *value_ptr, int value_index, - const Restricted_Length_Template *template_ptr, int template_index) + const Restricted_Length_Template *template_ptr, int template_index, + boolean legacy) { const Set_Of_Template* set_tmpl_ptr = static_cast<const Set_Of_Template*>(template_ptr); if (value_index >= 0) { const Record_Of_Type* recof_ptr = static_cast<const Record_Of_Type*>(value_ptr); - return set_tmpl_ptr->single_value.value_elements[template_index]->matchv(recof_ptr->get_at(value_index)); + return set_tmpl_ptr->single_value.value_elements[template_index]->matchv(recof_ptr->get_at(value_index), legacy); } else { return set_tmpl_ptr->single_value.value_elements[template_index]->is_any_or_omit(); } @@ -1657,19 +1770,20 @@ boolean Set_Of_Template::match_function_set( void Set_Of_Template::log_function( const Base_Type *value_ptr, const Restricted_Length_Template *template_ptr, - int index_value, int index_template) + int index_value, int index_template, boolean legacy) { const Set_Of_Template* set_tmpl_ptr = static_cast<const Set_Of_Template*>(template_ptr); const Record_Of_Type* recof_ptr = static_cast<const Record_Of_Type*>(value_ptr); if (value_ptr != NULL && template_ptr != NULL) - set_tmpl_ptr->single_value.value_elements[index_template]->log_matchv(recof_ptr->get_at(index_value)); + set_tmpl_ptr->single_value.value_elements[index_template]->log_matchv(recof_ptr->get_at(index_value), legacy); else if (value_ptr != NULL) recof_ptr->get_at(index_value)->log(); else if (template_ptr != NULL) set_tmpl_ptr->single_value.value_elements[index_template]->log(); } -boolean Set_Of_Template::matchv(const Base_Type* other_value) const +boolean Set_Of_Template::matchv(const Base_Type* other_value, + boolean legacy) const { const Record_Of_Type* other_recof = static_cast<const Record_Of_Type*>(other_value); if (!other_recof->is_bound()) @@ -1680,7 +1794,7 @@ boolean Set_Of_Template::matchv(const Base_Type* other_value) const switch (template_selection) { case SPECIFIC_VALUE: return match_set_of(other_recof, value_length, this, - single_value.n_elements, match_function_specific); + single_value.n_elements, match_function_specific, legacy); case OMIT_VALUE: return FALSE; case ANY_VALUE: @@ -1689,13 +1803,13 @@ boolean Set_Of_Template::matchv(const Base_Type* other_value) const case VALUE_LIST: case COMPLEMENTED_LIST: for (int list_count = 0; list_count < value_list.n_values; list_count++) - if (value_list.list_value[list_count]->matchv(other_recof)) + if (value_list.list_value[list_count]->matchv(other_recof, legacy)) return template_selection == VALUE_LIST; return template_selection == COMPLEMENTED_LIST; case SUPERSET_MATCH: case SUBSET_MATCH: return match_set_of(other_recof, value_length, this, - single_value.n_elements, match_function_set); + single_value.n_elements, match_function_set, legacy); default: TTCN_error("Matching with an uninitialized/unsupported template of type %s.", get_descriptor()->name); @@ -1820,17 +1934,18 @@ void Set_Of_Template::log() const if (err_descr) err_descr->log(); } -void Set_Of_Template::log_matchv(const Base_Type* match_value) const +void Set_Of_Template::log_matchv(const Base_Type* match_value, boolean legacy) const { if (TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()) { - if (matchv(match_value)) { + if (matchv(match_value, legacy)) { TTCN_Logger::print_logmatch_buffer(); TTCN_Logger::log_event_str(" matched"); } else { size_t previous_size = TTCN_Logger::get_logmatch_buffer_len(); if (template_selection == SPECIFIC_VALUE) { const Record_Of_Type* setof_value = static_cast<const Record_Of_Type*>(match_value); - log_match_heuristics(setof_value, setof_value->size_of(), this, single_value.n_elements, match_function_specific, log_function); + log_match_heuristics(setof_value, setof_value->size_of(), this, + single_value.n_elements, match_function_specific, log_function, legacy); } else { if (previous_size != 0) { TTCN_Logger::print_logmatch_buffer(); @@ -1847,12 +1962,13 @@ void Set_Of_Template::log_matchv(const Base_Type* match_value) const match_value->log(); TTCN_Logger::log_event_str(" with "); log(); - if (matchv(match_value)) TTCN_Logger::log_event_str(" matched"); + if (matchv(match_value, legacy)) TTCN_Logger::log_event_str(" matched"); else { TTCN_Logger::log_event_str(" unmatched"); if (template_selection == SPECIFIC_VALUE) { const Record_Of_Type* setof_value = static_cast<const Record_Of_Type*>(match_value); - log_match_heuristics(setof_value, setof_value->size_of(), this, single_value.n_elements, match_function_specific, log_function); + log_match_heuristics(setof_value, setof_value->size_of(), this, + single_value.n_elements, match_function_specific, log_function, legacy); } } } @@ -1922,13 +2038,13 @@ void Set_Of_Template::decode_text(Text_Buf& text_buf) } } -boolean Set_Of_Template::is_present() const +boolean Set_Of_Template::is_present(boolean legacy /* = FALSE */) const { if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE; - return !match_omit(); + return !match_omit(legacy); } -boolean Set_Of_Template::match_omit() const +boolean Set_Of_Template::match_omit(boolean legacy /* = FALSE */) const { if (is_ifpresent) return TRUE; switch (template_selection) { @@ -1937,10 +2053,14 @@ boolean Set_Of_Template::match_omit() const return TRUE; case VALUE_LIST: case COMPLEMENTED_LIST: - for (int i=0; i<value_list.n_values; i++) - if (value_list.list_value[i]->match_omit()) - return template_selection==VALUE_LIST; - return template_selection==COMPLEMENTED_LIST; + if (legacy) { + // legacy behavior: 'omit' can appear in the value/complement list + for (int i=0; i<value_list.n_values; i++) + if (value_list.list_value[i]->match_omit()) + return template_selection==VALUE_LIST; + return template_selection==COMPLEMENTED_LIST; + } + // else fall through default: return FALSE; } @@ -1965,7 +2085,13 @@ void Set_Of_Template::set_param(Module_Param& param) } param.basic_check(Module_Param::BC_TEMPLATE|Module_Param::BC_LIST, "set of template"); - switch (param.get_type()) { + + Module_Param_Ptr mp = ¶m; + if (param.get_type() == Module_Param::MP_Reference) { + mp = param.get_referenced_param(); + } + + switch (mp->get_type()) { case Module_Param::MP_Omit: set_value(OMIT_VALUE); break; @@ -1976,16 +2102,23 @@ void Set_Of_Template::set_param(Module_Param& param) set_value(ANY_OR_OMIT); break; case Module_Param::MP_List_Template: - case Module_Param::MP_ComplementList_Template: - set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, param.get_size()); - for (size_t i=0; i<param.get_size(); i++) { - get_list_item(i)->set_param(*param.get_elem(i)); + case Module_Param::MP_ComplementList_Template: { + Set_Of_Template** list_items = (Set_Of_Template**) + allocate_pointers(mp->get_size()); + for (size_t i = 0; i < mp->get_size(); i++) { + list_items[i] = create(); + list_items[i]->set_param(*mp->get_elem(i)); } - break; + clean_up(); + template_selection = mp->get_type() == Module_Param::MP_List_Template ? + VALUE_LIST : COMPLEMENTED_LIST; + value_list.n_values = mp->get_size(); + value_list.list_value = list_items; + break; } case Module_Param::MP_Value_List: - set_size(param.get_size()); - for (size_t i=0; i<param.get_size(); ++i) { - Module_Param* const curr = param.get_elem(i); + set_size(mp->get_size()); + for (size_t i=0; i<mp->get_size(); ++i) { + Module_Param* const curr = mp->get_elem(i); if (curr->get_type()!=Module_Param::MP_NotUsed) { get_at(i)->set_param(*curr); } @@ -1993,26 +2126,92 @@ void Set_Of_Template::set_param(Module_Param& param) break; case Module_Param::MP_Indexed_List: if (template_selection!=SPECIFIC_VALUE) set_size(0); - for (size_t i=0; i<param.get_size(); ++i) { - Module_Param* const current = param.get_elem(i); + for (size_t i=0; i<mp->get_size(); ++i) { + Module_Param* const current = mp->get_elem(i); get_at((int)current->get_id()->get_index())->set_param(*current); } break; case Module_Param::MP_Superset_Template: case Module_Param::MP_Subset_Template: - set_type(param.get_type()==Module_Param::MP_Superset_Template ? SUPERSET_MATCH : SUBSET_MATCH, param.get_size()); - for (size_t i=0; i<param.get_size(); i++) { - get_set_item((int)i)->set_param(*param.get_elem(i)); + set_type(mp->get_type()==Module_Param::MP_Superset_Template ? SUPERSET_MATCH : SUBSET_MATCH, mp->get_size()); + for (size_t i=0; i<mp->get_size(); i++) { + get_set_item((int)i)->set_param(*mp->get_elem(i)); } break; default: param.type_error("set of template", get_descriptor()->name); } - is_ifpresent = param.get_ifpresent(); - set_length_range(param); + is_ifpresent = param.get_ifpresent() || mp->get_ifpresent(); + if (param.get_length_restriction() != NULL) { + set_length_range(param); + } + else { + set_length_range(*mp); + } +} + +Module_Param* Set_Of_Template::get_param(Module_Param_Name& param_name) const +{ + if (param_name.next_name()) { + // Haven't reached the end of the module parameter name + // => the name refers to one of the elements, not to the whole record of + char* param_field = param_name.get_current_name(); + if (param_field[0] < '0' || param_field[0] > '9') { + TTCN_error("Unexpected record field name in module parameter reference, " + "expected a valid index for set of template type `%s'", + get_descriptor()->name); + } + int param_index = -1; + sscanf(param_field, "%d", ¶m_index); + return get_at(param_index)->get_param(param_name); + } + Module_Param* mp = NULL; + switch (template_selection) { + case UNINITIALIZED_TEMPLATE: + mp = new Module_Param_Unbound(); + break; + case OMIT_VALUE: + mp = new Module_Param_Omit(); + break; + case ANY_VALUE: + mp = new Module_Param_Any(); + break; + case ANY_OR_OMIT: + mp = new Module_Param_AnyOrNone(); + break; + case SPECIFIC_VALUE: { + Vector<Module_Param*> values; + for (int i = 0; i < single_value.n_elements; ++i) { + values.push_back(single_value.value_elements[i]->get_param(param_name)); + } + mp = new Module_Param_Value_List(); + mp->add_list_with_implicit_ids(&values); + values.clear(); + break; } + case VALUE_LIST: + case COMPLEMENTED_LIST: { + if (template_selection == VALUE_LIST) { + mp = new Module_Param_List_Template(); + } + else { + mp = new Module_Param_ComplementList_Template(); + } + for (int i = 0; i < value_list.n_values; ++i) { + mp->add_elem(value_list.list_value[i]->get_param(param_name)); + } + break; } + default: + break; + } + if (is_ifpresent) { + mp->set_ifpresent(); + } + mp->set_length_restriction(get_length_range()); + return mp; } -void Set_Of_Template::check_restriction(template_res t_res, const char* t_name) const +void Set_Of_Template::check_restriction(template_res t_res, const char* t_name, + boolean legacy /* = FALSE */) const { if (template_selection==UNINITIALIZED_TEMPLATE) return; switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) { @@ -2025,7 +2224,7 @@ void Set_Of_Template::check_restriction(template_res t_res, const char* t_name) single_value.value_elements[i]->check_restriction(t_res, t_name ? t_name : get_descriptor()->name); return; case TR_PRESENT: - if (!match_omit()) return; + if (!match_omit(legacy)) return; break; default: return; @@ -2307,7 +2506,8 @@ void Record_Template::log() const if (err_descr) err_descr->log(); } -boolean Record_Template::matchv(const Base_Type* other_value) const +boolean Record_Template::matchv(const Base_Type* other_value, + boolean legacy) const { switch (template_selection) { case ANY_VALUE: @@ -2325,8 +2525,8 @@ boolean Record_Template::matchv(const Base_Type* other_value) const const Base_Type* elem_value = other_rec->get_at(elem_count); if (!elem_value->is_bound()) return FALSE; boolean elem_match = is_optional ? - ( elem_value->ispresent() ? elem_tmpl->matchv(elem_value->get_opt_value()) : elem_tmpl->match_omit() ) : - elem_tmpl->matchv(other_rec->get_at(elem_count)); + ( elem_value->ispresent() ? elem_tmpl->matchv(elem_value->get_opt_value(), legacy) : elem_tmpl->match_omit(legacy) ) : + elem_tmpl->matchv(other_rec->get_at(elem_count), legacy); if (!elem_match) return FALSE; if (is_optional) next_optional_idx++; } @@ -2334,7 +2534,7 @@ boolean Record_Template::matchv(const Base_Type* other_value) const case VALUE_LIST: case COMPLEMENTED_LIST: for (int list_count = 0; list_count < value_list.n_values; list_count++) - if (value_list.list_value[list_count]->matchv(other_value)) return template_selection == VALUE_LIST; + if (value_list.list_value[list_count]->matchv(other_value, legacy)) return template_selection == VALUE_LIST; return template_selection == COMPLEMENTED_LIST; default: TTCN_error("Matching an uninitialized/unsupported template of type %s.", get_descriptor()->name); @@ -2342,10 +2542,10 @@ boolean Record_Template::matchv(const Base_Type* other_value) const return FALSE; } -void Record_Template::log_matchv(const Base_Type* match_value) const +void Record_Template::log_matchv(const Base_Type* match_value, boolean legacy) const { if (TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()) { - if (matchv(match_value)) { + if (matchv(match_value, legacy)) { TTCN_Logger::print_logmatch_buffer(); TTCN_Logger::log_event_str(" matched"); } else { @@ -2360,13 +2560,13 @@ void Record_Template::log_matchv(const Base_Type* match_value) const const Base_Type* elem_value = match_rec->get_at(elem_count); if (is_optional) { if (elem_value->ispresent()) { - if (!elem_tmpl->matchv(elem_value->get_opt_value())) { + if (!elem_tmpl->matchv(elem_value->get_opt_value(), legacy)) { TTCN_Logger::log_logmatch_info(".%s", fld_name(elem_count)); - elem_tmpl->log_matchv(elem_value->get_opt_value()); + elem_tmpl->log_matchv(elem_value->get_opt_value(), legacy); TTCN_Logger::set_logmatch_buffer_len(previous_size); } } else { - if (!elem_tmpl->match_omit()) { + if (!elem_tmpl->match_omit(legacy)) { TTCN_Logger::log_logmatch_info(".%s := omit with ", fld_name(elem_count)); TTCN_Logger::print_logmatch_buffer(); elem_tmpl->log(); @@ -2375,9 +2575,9 @@ void Record_Template::log_matchv(const Base_Type* match_value) const } } } else {//mandatory - if (!elem_tmpl->matchv(elem_value)) { + if (!elem_tmpl->matchv(elem_value, legacy)) { TTCN_Logger::log_logmatch_info(".%s", fld_name(elem_count)); - elem_tmpl->log_matchv(elem_value); + elem_tmpl->log_matchv(elem_value, legacy); TTCN_Logger::set_logmatch_buffer_len(previous_size); } }//if @@ -2405,15 +2605,15 @@ void Record_Template::log_matchv(const Base_Type* match_value) const TTCN_Logger::log_event_str(fld_name(elem_count)); TTCN_Logger::log_event_str(" := "); if (is_optional) { - if (elem_value->ispresent()) elem_tmpl->log_matchv(elem_value->get_opt_value()); + if (elem_value->ispresent()) elem_tmpl->log_matchv(elem_value->get_opt_value(), legacy); else { TTCN_Logger::log_event_str("omit with "); elem_tmpl->log(); - if (elem_tmpl->match_omit()) TTCN_Logger::log_event_str(" matched"); + if (elem_tmpl->match_omit(legacy)) TTCN_Logger::log_event_str(" matched"); else TTCN_Logger::log_event_str(" unmatched"); } } else { - elem_tmpl->log_matchv(elem_value); + elem_tmpl->log_matchv(elem_value, legacy); } if (is_optional) next_optional_idx++; } @@ -2422,7 +2622,7 @@ void Record_Template::log_matchv(const Base_Type* match_value) const match_value->log(); TTCN_Logger::log_event_str(" with "); log(); - if (matchv(match_value)) TTCN_Logger::log_event_str(" matched"); + if (matchv(match_value, legacy)) TTCN_Logger::log_event_str(" matched"); else TTCN_Logger::log_event_str(" unmatched"); } } @@ -2481,13 +2681,13 @@ void Record_Template::decode_text(Text_Buf& text_buf) } } -boolean Record_Template::is_present() const +boolean Record_Template::is_present(boolean legacy /*= FALSE*/) const { if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE; - return !match_omit(); + return !match_omit(legacy); } -boolean Record_Template::match_omit() const +boolean Record_Template::match_omit(boolean legacy /*= FALSE*/) const { if (is_ifpresent) return TRUE; switch (template_selection) { @@ -2496,9 +2696,13 @@ boolean Record_Template::match_omit() const return TRUE; case VALUE_LIST: case COMPLEMENTED_LIST: - for (int i=0; i<value_list.n_values; i++) - if (value_list.list_value[i]->match_omit()) return template_selection==VALUE_LIST; - return template_selection==COMPLEMENTED_LIST; + if (legacy) { + // legacy behavior: 'omit' can appear in the value/complement list + for (int i=0; i<value_list.n_values; i++) + if (value_list.list_value[i]->match_omit()) return template_selection==VALUE_LIST; + return template_selection==COMPLEMENTED_LIST; + } + // else fall through default: return FALSE; } @@ -2528,7 +2732,13 @@ void Record_Template::set_param(Module_Param& param) } param.basic_check(Module_Param::BC_TEMPLATE, "record/set template"); - switch (param.get_type()) { + + Module_Param_Ptr mp = ¶m; + if (param.get_type() == Module_Param::MP_Reference) { + mp = param.get_referenced_param(); + } + + switch (mp->get_type()) { case Module_Param::MP_Omit: set_value(OMIT_VALUE); break; @@ -2539,28 +2749,35 @@ void Record_Template::set_param(Module_Param& param) set_value(ANY_OR_OMIT); break; case Module_Param::MP_List_Template: - case Module_Param::MP_ComplementList_Template: - set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, param.get_size()); - for (size_t i=0; i<param.get_size(); i++) { - get_list_item(i)->set_param(*param.get_elem(i)); + case Module_Param::MP_ComplementList_Template: { + Record_Template** list_items = (Record_Template**) + allocate_pointers(mp->get_size()); + for (size_t i = 0; i < mp->get_size(); i++) { + list_items[i] = create(); + list_items[i]->set_param(*mp->get_elem(i)); } - break; + clean_up(); + template_selection = mp->get_type() == Module_Param::MP_List_Template ? + VALUE_LIST : COMPLEMENTED_LIST; + value_list.n_values = mp->get_size(); + value_list.list_value = list_items; + break; } case Module_Param::MP_Value_List: set_specific(); - if (single_value.n_elements<(int)param.get_size()) { - param.error("Record/set template of type %s has %d fields but list value has %d fields", get_descriptor()->name, single_value.n_elements, (int)param.get_size()); + if (single_value.n_elements<(int)mp->get_size()) { + param.error("Record/set template of type %s has %d fields but list value has %d fields", get_descriptor()->name, single_value.n_elements, (int)mp->get_size()); } - for (size_t i=0; i<param.get_size(); i++) { - Module_Param* mp = param.get_elem(i); - if (mp->get_type()!=Module_Param::MP_NotUsed) { - get_at((int)i)->set_param(*mp); + for (size_t i=0; i<mp->get_size(); i++) { + Module_Param* mp_field = mp->get_elem(i); + if (mp_field->get_type()!=Module_Param::MP_NotUsed) { + get_at((int)i)->set_param(*mp_field); } } break; case Module_Param::MP_Assignment_List: set_specific(); - for (size_t i=0; i<param.get_size(); ++i) { - Module_Param* const current = param.get_elem(i); + for (size_t i=0; i<mp->get_size(); ++i) { + Module_Param* const current = mp->get_elem(i); bool found = false; for (int j=0; j<single_value.n_elements; ++j) { if (!strcmp(fld_name(j), current->get_id()->get_name())) { @@ -2579,10 +2796,73 @@ void Record_Template::set_param(Module_Param& param) default: param.type_error("record/set template", get_descriptor()->name); } - is_ifpresent = param.get_ifpresent(); + is_ifpresent = param.get_ifpresent() || mp->get_ifpresent(); } -void Record_Template::check_restriction(template_res t_res, const char* t_name) const +Module_Param* Record_Template::get_param(Module_Param_Name& param_name) const +{ + if (param_name.next_name()) { + // Haven't reached the end of the module parameter name + // => the name refers to one of the fields, not to the whole record + char* param_field = param_name.get_current_name(); + if (param_field[0] >= '0' && param_field[0] <= '9') { + TTCN_error("Unexpected array index in module parameter reference, " + "expected a valid field name for record/set template type `%s'", + get_descriptor()->name); + } + for (int field_idx = 0; field_idx < single_value.n_elements; field_idx++) { + if (strcmp(fld_name(field_idx), param_field) == 0) { + return get_at(field_idx)->get_param(param_name); + } + } + TTCN_error("Field `%s' not found in record/set type `%s'", + param_field, get_descriptor()->name); + } + Module_Param* mp = NULL; + switch (template_selection) { + case UNINITIALIZED_TEMPLATE: + mp = new Module_Param_Unbound(); + break; + case OMIT_VALUE: + mp = new Module_Param_Omit(); + break; + case ANY_VALUE: + mp = new Module_Param_Any(); + break; + case ANY_OR_OMIT: + mp = new Module_Param_AnyOrNone(); + break; + case SPECIFIC_VALUE: { + mp = new Module_Param_Assignment_List(); + for (int i = 0; i < single_value.n_elements; ++i) { + Module_Param* mp_field = get_at(i)->get_param(param_name); + mp_field->set_id(new Module_Param_FieldName(mcopystr(fld_name(i)))); + mp->add_elem(mp_field); + } + break; } + case VALUE_LIST: + case COMPLEMENTED_LIST: { + if (template_selection == VALUE_LIST) { + mp = new Module_Param_List_Template(); + } + else { + mp = new Module_Param_ComplementList_Template(); + } + for (int i = 0; i < value_list.n_values; ++i) { + mp->add_elem(value_list.list_value[i]->get_param(param_name)); + } + break; } + default: + break; + } + if (is_ifpresent) { + mp->set_ifpresent(); + } + return mp; +} + +void Record_Template::check_restriction(template_res t_res, const char* t_name, + boolean legacy /* = FALSE */) const { if (template_selection==UNINITIALIZED_TEMPLATE) return; switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) { @@ -2595,7 +2875,7 @@ void Record_Template::check_restriction(template_res t_res, const char* t_name) single_value.value_elements[i]->check_restriction(t_res, t_name ? t_name : get_descriptor()->name); return; case TR_PRESENT: - if (!match_omit()) return; + if (!match_omit(legacy)) return; break; default: return; @@ -2780,7 +3060,8 @@ void Empty_Record_Template::log() const log_ifpresent(); } -boolean Empty_Record_Template::matchv(const Base_Type* other_value) const +boolean Empty_Record_Template::matchv(const Base_Type* other_value, + boolean legacy) const { switch (template_selection) { case ANY_VALUE: @@ -2793,7 +3074,7 @@ boolean Empty_Record_Template::matchv(const Base_Type* other_value) const case VALUE_LIST: case COMPLEMENTED_LIST: for (int list_count = 0; list_count < value_list.n_values; list_count++) - if (value_list.list_value[list_count]->matchv(other_value)) return template_selection == VALUE_LIST; + if (value_list.list_value[list_count]->matchv(other_value, legacy)) return template_selection == VALUE_LIST; return template_selection == COMPLEMENTED_LIST; default: TTCN_error("Matching an uninitialized/unsupported template of type %s.", get_descriptor()->name); @@ -2801,12 +3082,12 @@ boolean Empty_Record_Template::matchv(const Base_Type* other_value) const return FALSE; } -void Empty_Record_Template::log_matchv(const Base_Type* match_value) const +void Empty_Record_Template::log_matchv(const Base_Type* match_value, boolean legacy) const { match_value->log(); TTCN_Logger::log_event_str(" with "); log(); - if (matchv(match_value)) TTCN_Logger::log_event_str(" matched"); + if (matchv(match_value, legacy)) TTCN_Logger::log_event_str(" matched"); else TTCN_Logger::log_event_str(" unmatched"); } @@ -2854,13 +3135,13 @@ void Empty_Record_Template::decode_text(Text_Buf& text_buf) } } -boolean Empty_Record_Template::is_present() const +boolean Empty_Record_Template::is_present(boolean legacy /*= FALSE*/) const { if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE; - return !match_omit(); + return !match_omit(legacy); } -boolean Empty_Record_Template::match_omit() const +boolean Empty_Record_Template::match_omit(boolean legacy /* = FALSE */) const { if (is_ifpresent) return TRUE; switch (template_selection) { @@ -2869,9 +3150,13 @@ boolean Empty_Record_Template::match_omit() const return TRUE; case VALUE_LIST: case COMPLEMENTED_LIST: - for (int i=0; i<value_list.n_values; i++) - if (value_list.list_value[i]->match_omit()) return template_selection==VALUE_LIST; - return template_selection==COMPLEMENTED_LIST; + if (legacy) { + // legacy behavior: 'omit' can appear in the value/complement list + for (int i=0; i<value_list.n_values; i++) + if (value_list.list_value[i]->match_omit()) return template_selection==VALUE_LIST; + return template_selection==COMPLEMENTED_LIST; + } + // else fall through default: return FALSE; } @@ -2881,7 +3166,11 @@ boolean Empty_Record_Template::match_omit() const void Empty_Record_Template::set_param(Module_Param& param) { param.basic_check(Module_Param::BC_TEMPLATE, "empty record/set template"); - switch (param.get_type()) { + Module_Param_Ptr mp = ¶m; + if (param.get_type() == Module_Param::MP_Reference) { + mp = param.get_referenced_param(); + } + switch (mp->get_type()) { case Module_Param::MP_Omit: set_value(OMIT_VALUE); break; @@ -2892,20 +3181,69 @@ void Empty_Record_Template::set_param(Module_Param& param) set_value(ANY_OR_OMIT); break; case Module_Param::MP_List_Template: - case Module_Param::MP_ComplementList_Template: - set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, param.get_size()); - for (size_t i=0; i<param.get_size(); i++) { - get_list_item(i)->set_param(*param.get_elem(i)); + case Module_Param::MP_ComplementList_Template: { + Empty_Record_Template** list_items = (Empty_Record_Template**) + allocate_pointers(mp->get_size()); + for (size_t i = 0; i < mp->get_size(); i++) { + list_items[i] = create(); + list_items[i]->set_param(*mp->get_elem(i)); } - break; + clean_up(); + template_selection = mp->get_type() == Module_Param::MP_List_Template ? + VALUE_LIST : COMPLEMENTED_LIST; + value_list.n_values = mp->get_size(); + value_list.list_value = list_items; + break; } case Module_Param::MP_Value_List: - if (param.get_size()==0) set_value(SPECIFIC_VALUE); + if (mp->get_size()==0) { + set_selection(SPECIFIC_VALUE); + } else param.type_error("empty record/set template", get_descriptor()->name); break; default: param.type_error("empty record/set template", get_descriptor()->name); } - is_ifpresent = param.get_ifpresent(); + is_ifpresent = param.get_ifpresent() || mp->get_ifpresent(); +} + +Module_Param* Empty_Record_Template::get_param(Module_Param_Name& param_name) const +{ + Module_Param* mp = NULL; + switch (template_selection) { + case UNINITIALIZED_TEMPLATE: + mp = new Module_Param_Unbound(); + break; + case OMIT_VALUE: + mp = new Module_Param_Omit(); + break; + case ANY_VALUE: + mp = new Module_Param_Any(); + break; + case ANY_OR_OMIT: + mp = new Module_Param_AnyOrNone(); + break; + case SPECIFIC_VALUE: + mp = new Module_Param_Value_List(); + break; + case VALUE_LIST: + case COMPLEMENTED_LIST: { + if (template_selection == VALUE_LIST) { + mp = new Module_Param_List_Template(); + } + else { + mp = new Module_Param_ComplementList_Template(); + } + for (int i = 0; i < value_list.n_values; ++i) { + mp->add_elem(value_list.list_value[i]->get_param(param_name)); + } + break; } + default: + break; + } + if (is_ifpresent) { + mp->set_ifpresent(); + } + return mp; } #endif diff --git a/core/Template.hh b/core/Template.hh index 9b3a0d192..a40610b2d 100644 --- a/core/Template.hh +++ b/core/Template.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -19,6 +19,8 @@ struct Erroneous_descriptor_t; class Text_Buf; class Module_Param; +class Module_Param_Name; +class Module_Param_Length_Restriction; enum template_sel { UNINITIALIZED_TEMPLATE = -1, @@ -83,7 +85,22 @@ public: /** return the name of template restriction \a tr */ static const char* get_res_name(template_res tr); + /** Initialize this object (or one of its fields/elements) with a + * module parameter value. The module parameter may contain references to + * other module parameters or module parameter expressions, which are processed + * by this method to calculated the final result. + * @note Sets the 'ifpresent' flag if either the reference (if any) or the + * (referenced) module parameter value have their 'ifpresent' flag + * @note If both the reference (if any) and the (referenced) module parameter + * have a length restriction, then the reference's length restriction is used. + * @note A temporary object is used when setting VALUE_LIST or COMPLEMENT_LIST + * templates, as the list of templates might contain a reference to this object. + * @param param module parameter value (its ID specifies which object is to be set) */ VIRTUAL_IF_RUNTIME_2 void set_param(Module_Param& param); + /** Create a module parameter value equivalent to this object (or one of its + * fields/elements) + * @param param_name module parameter ID, specifies which object to convert */ + VIRTUAL_IF_RUNTIME_2 Module_Param* get_param(Module_Param_Name& param_name) const; /** not a component by default (component templates will return true) */ inline boolean is_component() { return FALSE; } @@ -100,15 +117,16 @@ public: virtual void log() const = 0; // virtual functions for match and log_match - virtual boolean matchv(const Base_Type* other_value) const = 0; - virtual void log_matchv(const Base_Type* match_value) const = 0; + virtual boolean matchv(const Base_Type* other_value, boolean legacy) const = 0; + virtual void log_matchv(const Base_Type* match_value, boolean legacy) const = 0; virtual void encode_text(Text_Buf& text_buf) const = 0; virtual void decode_text(Text_Buf& text_buf) = 0; - virtual boolean is_present() const = 0; - virtual boolean match_omit() const = 0; + virtual boolean is_present(boolean legacy = FALSE) const = 0; + virtual boolean match_omit(boolean legacy = FALSE) const = 0; - virtual void check_restriction(template_res t_res, const char* t_name=NULL) const; + virtual void check_restriction(template_res t_res, const char* t_name=NULL, + boolean legacy = FALSE) const; virtual ~Base_Template() { } #endif @@ -156,6 +174,7 @@ protected: void decode_text_restricted(Text_Buf& text_buf); void set_length_range(const Module_Param& param); + Module_Param_Length_Restriction* get_length_range() const; public: @@ -264,8 +283,8 @@ protected: public: void log() const; - boolean matchv(const Base_Type* other_value) const; - void log_matchv(const Base_Type* match_value) const; + boolean matchv(const Base_Type* other_value, boolean legacy) const; + void log_matchv(const Base_Type* match_value, boolean legacy) const; /** create an instance of this */ virtual Set_Of_Template* create() const = 0; /** create an instance of the element class */ @@ -274,23 +293,26 @@ public: // used for both set of and record of types static boolean match_function_specific( const Base_Type *value_ptr, int value_index, - const Restricted_Length_Template *template_ptr, int template_index); + const Restricted_Length_Template *template_ptr, int template_index, + boolean legacy); // 2 static functions only for set of types static boolean match_function_set( const Base_Type *value_ptr, int value_index, - const Restricted_Length_Template *template_ptr, int template_index); + const Restricted_Length_Template *template_ptr, int template_index, + boolean legacy); static void log_function(const Base_Type *value_ptr, const Restricted_Length_Template *template_ptr, - int index_value, int index_template); + int index_value, int index_template, boolean legacy); void encode_text(Text_Buf& text_buf) const; void decode_text(Text_Buf& text_buf); - boolean is_present() const; - boolean match_omit() const; + boolean is_present(boolean legacy = FALSE) const; + boolean match_omit(boolean legacy = FALSE) const; void set_param(Module_Param& param); + Module_Param* get_param(Module_Param_Name& param_name) const; - void check_restriction(template_res t_res, const char* t_name=NULL) const; + void check_restriction(template_res t_res, const char* t_name=NULL, boolean legacy = FALSE) const; void set_err_descr(Erroneous_descriptor_t* p_err_descr) { err_descr=p_err_descr; } }; @@ -373,8 +395,8 @@ public: int n_elem() const; void log() const; - boolean matchv(const Base_Type* other_value) const; - void log_matchv(const Base_Type* match_value) const; + boolean matchv(const Base_Type* other_value, boolean legacy) const; + void log_matchv(const Base_Type* match_value, boolean legacy) const; /** create an instance of this */ virtual Record_Of_Template* create() const = 0; /** create an instance of the element class */ @@ -383,16 +405,17 @@ public: // used for both set of and record of types static boolean match_function_specific( const Base_Type *value_ptr, int value_index, - const Restricted_Length_Template *template_ptr, int template_index); + const Restricted_Length_Template *template_ptr, int template_index, boolean legacy); void encode_text(Text_Buf& text_buf) const; void decode_text(Text_Buf& text_buf); - boolean is_present() const; - boolean match_omit() const; + boolean is_present(boolean legacy = FALSE) const; + boolean match_omit(boolean legacy = FALSE) const; void set_param(Module_Param& param); + Module_Param* get_param(Module_Param_Name& param_name) const; - void check_restriction(template_res t_res, const char* t_name=NULL) const; + void check_restriction(template_res t_res, const char* t_name=NULL, boolean legacy = FALSE) const; void set_err_descr(Erroneous_descriptor_t* p_err_descr) { err_descr=p_err_descr; } }; @@ -452,17 +475,18 @@ public: void log() const; - boolean matchv(const Base_Type* other_value) const; - void log_matchv(const Base_Type* match_value) const; + boolean matchv(const Base_Type* other_value, boolean legacy) const; + void log_matchv(const Base_Type* match_value, boolean legacy) const; void encode_text(Text_Buf& text_buf) const; void decode_text(Text_Buf& text_buf); - boolean is_present() const; - boolean match_omit() const; + boolean is_present(boolean legacy = FALSE) const; + boolean match_omit(boolean legacy = FALSE) const; void set_param(Module_Param& param); + Module_Param* get_param(Module_Param_Name& param_name) const; - void check_restriction(template_res t_res, const char* t_name=NULL) const; + void check_restriction(template_res t_res, const char* t_name=NULL, boolean legacy = FALSE) const; void set_err_descr(Erroneous_descriptor_t* p_err_descr) { err_descr=p_err_descr; } }; @@ -507,15 +531,16 @@ public: void log() const; - boolean matchv(const Base_Type* other_value) const; - void log_matchv(const Base_Type* match_value) const; + boolean matchv(const Base_Type* other_value, boolean legacy) const; + void log_matchv(const Base_Type* match_value, boolean legacy) const; void encode_text(Text_Buf& text_buf) const; void decode_text(Text_Buf& text_buf); - boolean is_present() const; - boolean match_omit() const; + boolean is_present(boolean legacy = FALSE) const; + boolean match_omit(boolean legacy = FALSE) const; void set_param(Module_Param& param); + Module_Param* get_param(Module_Param_Name& param_name) const; }; #undef VIRTUAL_IF_RUNTIME_2 diff --git a/core/Textbuf.cc b/core/Textbuf.cc index 4d88b73d5..b8a4b2f65 100644 --- a/core/Textbuf.cc +++ b/core/Textbuf.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -200,8 +200,33 @@ boolean Text_Buf::safe_pull_int(int_val_t& value) */ void Text_Buf::push_double(double value) { - Reallocate(buf_len + 32); - buf_len += sprintf((char*)data_ptr + buf_begin + buf_len, "%.16g ", value); + Reallocate(buf_len + 8); + union{ + double d; + unsigned char c[8]; + } m; + m.d=value; + unsigned char *st=(unsigned char *)data_ptr + buf_begin + buf_len; +#if defined __sparc__ || defined __sparc + st[0]=m.c[0]; + st[1]=m.c[1]; + st[2]=m.c[2]; + st[3]=m.c[3]; + st[4]=m.c[4]; + st[5]=m.c[5]; + st[6]=m.c[6]; + st[7]=m.c[7]; +#else + st[0]=m.c[7]; + st[1]=m.c[6]; + st[2]=m.c[5]; + st[3]=m.c[4]; + st[4]=m.c[3]; + st[5]=m.c[2]; + st[6]=m.c[1]; + st[7]=m.c[0]; +#endif + buf_len += 8; } /** Extract a double precision floating point number @@ -212,27 +237,35 @@ void Text_Buf::push_double(double value) */ double Text_Buf::pull_double() { - int buf_end = buf_begin + buf_len; - const char *char_ptr = (const char*)data_ptr; - // check for the proper format (printed in ascii, followed by a space) - if (buf_pos >= buf_end) TTCN_error("Text decoder: Decoding of float failed. " + if (buf_pos + 8 > buf_begin + buf_len) TTCN_error("Text decoder: Decoding of float failed. " "(End of buffer reached)"); - else if (char_ptr[buf_pos] == ' ') TTCN_error("Text decoder: Decoding of " - "float failed. (No data before the end marker)"); - int end_pos = buf_pos + 1; - for ( ; ; end_pos++) { - if (end_pos >= buf_end) TTCN_error("Text decoder: Decoding of float " - "failed. (Missing end marker)"); - else if (char_ptr[end_pos] == ' ') break; - } - // perform the decoding - errno = 0; - double ret_val = atof(char_ptr + buf_pos); - if (ret_val == 0.0 && errno != 0) TTCN_error("Text decoder: Decoding of " - "float failed."); - // increment the read pointer - buf_pos = end_pos + 1; - return ret_val; + const unsigned char *st = (unsigned char *)data_ptr+buf_pos; + + union{ + double d; + unsigned char c[8]; + } m; +#if defined __sparc__ || defined __sparc + m.c[0]=st[0]; + m.c[1]=st[1]; + m.c[2]=st[2]; + m.c[3]=st[3]; + m.c[4]=st[4]; + m.c[5]=st[5]; + m.c[6]=st[6]; + m.c[7]=st[7]; +#else + m.c[0]=st[7]; + m.c[1]=st[6]; + m.c[2]=st[5]; + m.c[3]=st[4]; + m.c[4]=st[3]; + m.c[5]=st[2]; + m.c[6]=st[1]; + m.c[7]=st[0]; +#endif +buf_pos += 8; +return m.d; } /** Write a fixed number of bytes in the buffer. diff --git a/core/Textbuf.hh b/core/Textbuf.hh index debeed2c7..f755eb474 100644 --- a/core/Textbuf.hh +++ b/core/Textbuf.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/core/Timer.cc b/core/Timer.cc index 97d82bfc6..26a338a49 100644 --- a/core/Timer.cc +++ b/core/Timer.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/core/Timer.hh b/core/Timer.hh index 953445164..56bef8d79 100644 --- a/core/Timer.hh +++ b/core/Timer.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/core/TitanLoggerApi.xsd b/core/TitanLoggerApi.xsd index f742ad667..8956dc8e8 100644 --- a/core/TitanLoggerApi.xsd +++ b/core/TitanLoggerApi.xsd @@ -1,6 +1,6 @@ <?xml version="1.0"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/core/TitanLoggerControl.ttcn b/core/TitanLoggerControl.ttcn index 8e0dcd4df..7a4f2dce8 100644 --- a/core/TitanLoggerControl.ttcn +++ b/core/TitanLoggerControl.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/core/TitanLoggerControlImpl.cc b/core/TitanLoggerControlImpl.cc index c7edcdbcd..dce76c66d 100644 --- a/core/TitanLoggerControlImpl.cc +++ b/core/TitanLoggerControlImpl.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/core/Types.h b/core/Types.h index 9c93a8677..6ef22e6ee 100644 --- a/core/Types.h +++ b/core/Types.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/core/Universal_charstring.cc b/core/Universal_charstring.cc index 9b7f53444..a2070229f 100644 --- a/core/Universal_charstring.cc +++ b/core/Universal_charstring.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -933,10 +933,14 @@ UNIVERSAL_CHARSTRING UNIVERSAL_CHARSTRING::from_UTF8_buffer(TTCN_Buffer& p_buff) } } -void UNIVERSAL_CHARSTRING::set_param(Module_Param& param) { +boolean UNIVERSAL_CHARSTRING::set_param_internal(Module_Param& param, boolean allow_pattern) { + boolean is_pattern = FALSE; param.basic_check(Module_Param::BC_VALUE|Module_Param::BC_LIST, "universal charstring value"); - - switch (param.get_type()) { + Module_Param_Ptr mp = ¶m; + if (param.get_type() == Module_Param::MP_Reference) { + mp = param.get_referenced_param(); + } + switch (mp->get_type()) { case Module_Param::MP_Charstring: { switch (param.get_operation_type()) { case Module_Param::OT_ASSIGN: @@ -944,7 +948,7 @@ void UNIVERSAL_CHARSTRING::set_param(Module_Param& param) { // no break case Module_Param::OT_CONCAT: { TTCN_Buffer buff; - buff.put_s(param.get_string_size(), (unsigned char*)param.get_string_data()); + buff.put_s(mp->get_string_size(), (unsigned char*)mp->get_string_data()); if (is_bound()) { *this = *this + from_UTF8_buffer(buff); } else { @@ -960,60 +964,61 @@ void UNIVERSAL_CHARSTRING::set_param(Module_Param& param) { case Module_Param::OT_ASSIGN: clean_up(); // no break - case Module_Param::OT_CONCAT: { - const Module_Param_Universal_Charstring* ucs_param = dynamic_cast<const Module_Param_Universal_Charstring*>(¶m); - if (0 != ucs_param) { - // The Module_Param_Universal_Charstring class also contains the positions - // of all characters added in quadruple form (in char(g,p,r,c) form) - // The strings between these positions need to be decoded if they are - // in UTF-8 format (the quad characters shouldn't be decoded). - int nof_quads = ucs_param->get_nof_quads(); - universal_char* uchars = (universal_char*)ucs_param->get_string_data(); - for (int i = 0; i < nof_quads + 1; ++i) { - // Each iteration processes the string before a quad and the quad itself - // the last iteration processes the string after the last quad - // ex. "ccccccQccccccccQcccccccc" => 2 quads at positions 6 and 15 - // iterations: <-1st-><--2nd--><--3rd-> - int start_pos = (i == 0) ? 0 : ucs_param->get_quad_pos(i - 1) + 1; - int end_pos = (i == nof_quads) ? ucs_param->get_string_size() : ucs_param->get_quad_pos(i); - if (end_pos > start_pos) { - TTCN_Buffer buff; - for (int j = start_pos; j < end_pos; ++j) { - buff.put_c(uchars[j].uc_cell); - } - if (is_bound()) { - // Add the string before the quad character - *this = *this + from_UTF8_buffer(buff); - } else { - *this = from_UTF8_buffer(buff); - } - } - if (i != nof_quads) { - // Add the quad character itself - if (is_bound()) { - *this = *this + uchars[end_pos]; - } else { - *this = UNIVERSAL_CHARSTRING(uchars[end_pos]); - } - } - } + case Module_Param::OT_CONCAT: + if (is_bound()) { + *this = *this + UNIVERSAL_CHARSTRING(mp->get_string_size(), (universal_char*)mp->get_string_data()); } else { - // plan B (should never happen) - if (is_bound()) { - *this = *this + UNIVERSAL_CHARSTRING(param.get_string_size(), (universal_char*)param.get_string_data()); - } else { - init_struct(param.get_string_size()); - memcpy(val_ptr->uchars_ptr, param.get_string_data(), val_ptr->n_uchars * sizeof(universal_char)); - } + *this = UNIVERSAL_CHARSTRING(mp->get_string_size(), (universal_char*)mp->get_string_data()); } - break; } + break; default: TTCN_error("Internal error: UNIVERSAL_CHARSTRING::set_param()"); } break; } + case Module_Param::MP_Expression: + if (mp->get_expr_type() == Module_Param::EXPR_CONCATENATE) { + UNIVERSAL_CHARSTRING operand1, operand2; + is_pattern = operand1.set_param_internal(*mp->get_operand1(), allow_pattern); + operand2.set_param(*mp->get_operand2()); + if (param.get_operation_type() == Module_Param::OT_CONCAT) { + *this = *this + operand1 + operand2; + } + else { + *this = operand1 + operand2; + } + } + else { + param.expr_type_error("a universal charstring"); + } + break; + case Module_Param::MP_Pattern: + if (allow_pattern) { + *this = CHARSTRING(mp->get_pattern()); + is_pattern = TRUE; + break; + } + // else fall through default: param.type_error("universal charstring value"); } + return is_pattern; +} + +void UNIVERSAL_CHARSTRING::set_param(Module_Param& param) { + set_param_internal(param, FALSE); +} + +Module_Param* UNIVERSAL_CHARSTRING::get_param(Module_Param_Name& param_name) const +{ + if (!is_bound()) { + return new Module_Param_Unbound(); + } + if (charstring) { + return cstr.get_param(param_name); + } + universal_char* val_cpy = (universal_char*)Malloc(val_ptr->n_uchars * sizeof(universal_char)); + memcpy(val_cpy, val_ptr->uchars_ptr, val_ptr->n_uchars * sizeof(universal_char)); + return new Module_Param_Universal_Charstring(val_ptr->n_uchars, val_cpy); } void UNIVERSAL_CHARSTRING::encode_text(Text_Buf& text_buf) const @@ -3800,7 +3805,7 @@ const UNIVERSAL_CHARSTRING_ELEMENT UNIVERSAL_CHARSTRING_template::operator[](con } boolean UNIVERSAL_CHARSTRING_template::match - (const UNIVERSAL_CHARSTRING& other_value) const + (const UNIVERSAL_CHARSTRING& other_value, boolean /* legacy */) const { if (!other_value.is_bound()) return FALSE; int value_length = other_value.lengthof(); @@ -4061,7 +4066,7 @@ void UNIVERSAL_CHARSTRING_template::log() const } void UNIVERSAL_CHARSTRING_template::log_match - (const UNIVERSAL_CHARSTRING& match_value) const + (const UNIVERSAL_CHARSTRING& match_value, boolean /* legacy */) const { if (TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity() && TTCN_Logger::get_logmatch_buffer_len() != 0) { @@ -4077,7 +4082,11 @@ void UNIVERSAL_CHARSTRING_template::log_match void UNIVERSAL_CHARSTRING_template::set_param(Module_Param& param) { param.basic_check(Module_Param::BC_TEMPLATE|Module_Param::BC_LIST, "universal charstring template"); - switch (param.get_type()) { + Module_Param_Ptr mp = ¶m; + if (param.get_type() == Module_Param::MP_Reference) { + mp = param.get_referenced_param(); + } + switch (mp->get_type()) { case Module_Param::MP_Omit: *this = OMIT_VALUE; break; @@ -4088,21 +4097,24 @@ void UNIVERSAL_CHARSTRING_template::set_param(Module_Param& param) { *this = ANY_OR_OMIT; break; case Module_Param::MP_List_Template: - case Module_Param::MP_ComplementList_Template: - set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, param.get_size()); - for (size_t i=0; i<param.get_size(); i++) { - list_item(i).set_param(*param.get_elem(i)); + case Module_Param::MP_ComplementList_Template: { + UNIVERSAL_CHARSTRING_template temp; + temp.set_type(mp->get_type() == Module_Param::MP_List_Template ? + VALUE_LIST : COMPLEMENTED_LIST, mp->get_size()); + for (size_t i=0; i<mp->get_size(); i++) { + temp.list_item(i).set_param(*mp->get_elem(i)); } - break; + *this = temp; + break; } case Module_Param::MP_Charstring: - *this = CHARSTRING(param.get_string_size(), (char*)param.get_string_data()); + *this = CHARSTRING(mp->get_string_size(), (char*)mp->get_string_data()); break; case Module_Param::MP_Universal_Charstring: - *this = UNIVERSAL_CHARSTRING(param.get_string_size(), (universal_char*)param.get_string_data()); + *this = UNIVERSAL_CHARSTRING(mp->get_string_size(), (universal_char*)mp->get_string_data()); break; case Module_Param::MP_StringRange: { - universal_char lower_uchar = param.get_lower_uchar(); - universal_char upper_uchar = param.get_upper_uchar(); + universal_char lower_uchar = mp->get_lower_uchar(); + universal_char upper_uchar = mp->get_upper_uchar(); clean_up(); set_selection(VALUE_RANGE); value_range.min_is_set = TRUE; @@ -4112,15 +4124,92 @@ void UNIVERSAL_CHARSTRING_template::set_param(Module_Param& param) { } break; case Module_Param::MP_Pattern: clean_up(); - pattern_string = new CHARSTRING(param.get_pattern()); + pattern_string = new CHARSTRING(mp->get_pattern()); pattern_value.regexp_init = FALSE; set_selection(STRING_PATTERN); break; + case Module_Param::MP_Expression: + if (mp->get_expr_type() == Module_Param::EXPR_CONCATENATE) { + UNIVERSAL_CHARSTRING operand1, operand2, result; + boolean is_pattern = operand1.set_param_internal(*mp->get_operand1(), TRUE); + operand2.set_param(*mp->get_operand2()); + result = operand1 + operand2; + if (is_pattern) { + clean_up(); + if (result.charstring) { + pattern_string = new CHARSTRING(result.cstr); + } + else { + pattern_string = new CHARSTRING(result.get_stringRepr_for_pattern()); + } + pattern_value.regexp_init = FALSE; + set_selection(STRING_PATTERN); + } + else { + *this = result; + } + } + else { + param.expr_type_error("a charstring"); + } + break; default: param.type_error("universal charstring template"); } - is_ifpresent = param.get_ifpresent(); - set_length_range(param); + is_ifpresent = param.get_ifpresent() || mp->get_ifpresent(); + if (param.get_length_restriction() != NULL) { + set_length_range(param); + } + else { + set_length_range(*mp); + } +} + +Module_Param* UNIVERSAL_CHARSTRING_template::get_param(Module_Param_Name& param_name) const +{ + Module_Param* mp = NULL; + switch (template_selection) { + case UNINITIALIZED_TEMPLATE: + mp = new Module_Param_Unbound(); + break; + case OMIT_VALUE: + mp = new Module_Param_Omit(); + break; + case ANY_VALUE: + mp = new Module_Param_Any(); + break; + case ANY_OR_OMIT: + mp = new Module_Param_AnyOrNone(); + break; + case SPECIFIC_VALUE: + mp = single_value.get_param(param_name); + break; + case VALUE_LIST: + case COMPLEMENTED_LIST: { + if (template_selection == VALUE_LIST) { + mp = new Module_Param_List_Template(); + } + else { + mp = new Module_Param_ComplementList_Template(); + } + for (size_t i = 0; i < value_list.n_values; ++i) { + mp->add_elem(value_list.list_value[i].get_param(param_name)); + } + break; } + case VALUE_RANGE: + mp = new Module_Param_StringRange(value_range.min_value, value_range.max_value); + break; + case STRING_PATTERN: + mp = new Module_Param_Pattern(mcopystr(*pattern_string)); + break; + default: + break; + } + if (is_ifpresent) { + mp->set_ifpresent(); + } + mp->set_length_restriction(get_length_range()); + return mp; } void UNIVERSAL_CHARSTRING_template::encode_text(Text_Buf& text_buf) const @@ -4205,13 +4294,13 @@ void UNIVERSAL_CHARSTRING_template::decode_text(Text_Buf& text_buf) } } -boolean UNIVERSAL_CHARSTRING_template::is_present() const +boolean UNIVERSAL_CHARSTRING_template::is_present(boolean legacy /* = FALSE */) const { if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE; - return !match_omit(); + return !match_omit(legacy); } -boolean UNIVERSAL_CHARSTRING_template::match_omit() const +boolean UNIVERSAL_CHARSTRING_template::match_omit(boolean legacy /* = FALSE */) const { if (is_ifpresent) return TRUE; switch (template_selection) { @@ -4220,10 +4309,14 @@ boolean UNIVERSAL_CHARSTRING_template::match_omit() const return TRUE; case VALUE_LIST: case COMPLEMENTED_LIST: - for (unsigned int i=0; i<value_list.n_values; i++) - if (value_list.list_value[i].match_omit()) - return template_selection==VALUE_LIST; - return template_selection==COMPLEMENTED_LIST; + if (legacy) { + // legacy behavior: 'omit' can appear in the value/complement list + for (unsigned int i=0; i<value_list.n_values; i++) + if (value_list.list_value[i].match_omit()) + return template_selection==VALUE_LIST; + return template_selection==COMPLEMENTED_LIST; + } + // else fall through default: return FALSE; } @@ -4232,7 +4325,7 @@ boolean UNIVERSAL_CHARSTRING_template::match_omit() const #ifndef TITAN_RUNTIME_2 void UNIVERSAL_CHARSTRING_template::check_restriction(template_res t_res, - const char* t_name) const + const char* t_name, boolean legacy) const { if (template_selection==UNINITIALIZED_TEMPLATE) return; switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) { @@ -4244,7 +4337,7 @@ void UNIVERSAL_CHARSTRING_template::check_restriction(template_res t_res, template_selection==SPECIFIC_VALUE)) return; break; case TR_PRESENT: - if (!match_omit()) return; + if (!match_omit(legacy)) return; break; default: return; diff --git a/core/Universal_charstring.hh b/core/Universal_charstring.hh index 5d2e66a61..a6dd30cff 100644 --- a/core/Universal_charstring.hh +++ b/core/Universal_charstring.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -92,6 +92,12 @@ class UNIVERSAL_CHARSTRING : public Base_Type { void init_struct(int n_uchars); void copy_value(); UNIVERSAL_CHARSTRING(int n_uchars, bool cstring = false); + + /** An extended version of set_param(), which also accepts string patterns if + * the second parameter is set (needed by UNIVERSAL_CHARSTRING_template to + * concatenate string patterns). + * @return TRUE, if the module parameter was a string pattern, otherwise FALSE */ + boolean set_param_internal(Module_Param& param, boolean allow_pattern); public: @@ -303,6 +309,7 @@ public: * @note UFT-8 strings (whose characters were not in quadruple notation) will * be decoded */ void set_param(Module_Param& param); + Module_Param* get_param(Module_Param_Name& param_name) const; void encode_text(Text_Buf& text_buf) const; void decode_text(Text_Buf& text_buf); @@ -548,7 +555,7 @@ public: const UNIVERSAL_CHARSTRING_ELEMENT operator[] (const INTEGER& index_value) const; - boolean match(const UNIVERSAL_CHARSTRING& other_value) const; + boolean match(const UNIVERSAL_CHARSTRING& other_value, boolean legacy = FALSE) const; const UNIVERSAL_CHARSTRING& valueof() const; int lengthof() const; @@ -560,15 +567,16 @@ public: void set_max(const UNIVERSAL_CHARSTRING& max_value); void log() const; - void log_match(const UNIVERSAL_CHARSTRING& match_value) const; + void log_match(const UNIVERSAL_CHARSTRING& match_value, boolean legacy = FALSE) const; void set_param(Module_Param& param); + Module_Param* get_param(Module_Param_Name& param_name) const; void encode_text(Text_Buf& text_buf) const; void decode_text(Text_Buf& text_buf); - boolean is_present() const; - boolean match_omit() const; + boolean is_present(boolean legacy = FALSE) const; + boolean match_omit(boolean legacy = FALSE) const; #ifdef TITAN_RUNTIME_2 void valueofv(Base_Type* value) const { *(static_cast<UNIVERSAL_CHARSTRING*>(value)) = valueof(); } @@ -576,10 +584,10 @@ public: void copy_value(const Base_Type* other_value) { *this = *(static_cast<const UNIVERSAL_CHARSTRING*>(other_value)); } Base_Template* clone() const { return new UNIVERSAL_CHARSTRING_template(*this); } const TTCN_Typedescriptor_t* get_descriptor() const { return &UNIVERSAL_CHARSTRING_descr_; } - boolean matchv(const Base_Type* other_value) const { return match(*(static_cast<const UNIVERSAL_CHARSTRING*>(other_value))); } - void log_matchv(const Base_Type* match_value) const { log_match(*(static_cast<const UNIVERSAL_CHARSTRING*>(match_value))); } + boolean matchv(const Base_Type* other_value, boolean legacy) const { return match(*(static_cast<const UNIVERSAL_CHARSTRING*>(other_value)), legacy); } + void log_matchv(const Base_Type* match_value, boolean legacy) const { log_match(*(static_cast<const UNIVERSAL_CHARSTRING*>(match_value)), legacy); } #else - void check_restriction(template_res t_res, const char* t_name=NULL) const; + void check_restriction(template_res t_res, const char* t_name=NULL, boolean legacy = FALSE) const; #endif const CHARSTRING& get_single_value() const; diff --git a/core/VIRAG.asn b/core/VIRAG.asn index 65f868526..1a2ab9beb 100644 --- a/core/VIRAG.asn +++ b/core/VIRAG.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/core/Vector.hh b/core/Vector.hh index a439f913b..8f5ed5551 100644 --- a/core/Vector.hh +++ b/core/Vector.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -11,7 +11,23 @@ #include <stddef.h> +#ifndef PROF_MERGE #include "Error.hh" +#else +// there's no point in including Error.hh and all the includes that come with it +// when building the profiler merge tool, just use this simple error function +#include <stdio.h> +#include <stdarg.h> +void TTCN_error(const char *fmt, ...) +{ + va_list parameters; + va_start(parameters, fmt); + vfprintf(stderr, fmt, parameters); + va_end(parameters); + putc('\n', stderr); + fflush(stderr); +} +#endif // Not invented here template<typename T> diff --git a/core/Verdicttype.cc b/core/Verdicttype.cc index e8ba46055..d74aff451 100644 --- a/core/Verdicttype.cc +++ b/core/Verdicttype.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -95,12 +95,24 @@ void VERDICTTYPE::log() const void VERDICTTYPE::set_param(Module_Param& param) { param.basic_check(Module_Param::BC_VALUE, "verdict value"); - if (param.get_type()!=Module_Param::MP_Verdict) param.type_error("verdict value"); - const verdicttype verdict = param.get_verdict(); + Module_Param_Ptr mp = ¶m; + if (param.get_type() == Module_Param::MP_Reference) { + mp = param.get_referenced_param(); + } + if (mp->get_type()!=Module_Param::MP_Verdict) param.type_error("verdict value"); + const verdicttype verdict = mp->get_verdict(); if (!IS_VALID(verdict)) param.error("Internal error: invalid verdict value (%d).", verdict); verdict_value = verdict; } +Module_Param* VERDICTTYPE::get_param(Module_Param_Name& /* param_name */) const +{ + if (!is_bound()) { + return new Module_Param_Unbound(); + } + return new Module_Param_Verdict(verdict_value); +} + void VERDICTTYPE::encode_text(Text_Buf& text_buf) const { if (!is_bound()) @@ -547,7 +559,8 @@ VERDICTTYPE_template& VERDICTTYPE_template::operator= return *this; } -boolean VERDICTTYPE_template::match(verdicttype other_value) const +boolean VERDICTTYPE_template::match(verdicttype other_value, + boolean /* legacy */) const { if (!IS_VALID(other_value)) TTCN_error("Matching a verdict template with " "an invalid value (%d).", other_value); @@ -571,7 +584,8 @@ boolean VERDICTTYPE_template::match(verdicttype other_value) const return FALSE; } -boolean VERDICTTYPE_template::match(const VERDICTTYPE& other_value) const +boolean VERDICTTYPE_template::match(const VERDICTTYPE& other_value, + boolean /* legacy */) const { if (!other_value.is_bound()) return FALSE; return match(other_value.verdict_value); @@ -635,7 +649,8 @@ void VERDICTTYPE_template::log() const log_ifpresent(); } -void VERDICTTYPE_template::log_match(const VERDICTTYPE& match_value) const +void VERDICTTYPE_template::log_match(const VERDICTTYPE& match_value, + boolean /* legacy */) const { if (TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity() && TTCN_Logger::get_logmatch_buffer_len() != 0) { @@ -651,7 +666,11 @@ void VERDICTTYPE_template::log_match(const VERDICTTYPE& match_value) const void VERDICTTYPE_template::set_param(Module_Param& param) { param.basic_check(Module_Param::BC_TEMPLATE, "verdict template"); - switch (param.get_type()) { + Module_Param_Ptr mp = ¶m; + if (param.get_type() == Module_Param::MP_Reference) { + mp = param.get_referenced_param(); + } + switch (mp->get_type()) { case Module_Param::MP_Omit: *this = OMIT_VALUE; break; @@ -662,19 +681,62 @@ void VERDICTTYPE_template::set_param(Module_Param& param) { *this = ANY_OR_OMIT; break; case Module_Param::MP_List_Template: - case Module_Param::MP_ComplementList_Template: - set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, param.get_size()); - for (size_t i=0; i<param.get_size(); i++) { - list_item(i).set_param(*param.get_elem(i)); + case Module_Param::MP_ComplementList_Template: { + VERDICTTYPE_template temp; + temp.set_type(mp->get_type() == Module_Param::MP_List_Template ? + VALUE_LIST : COMPLEMENTED_LIST, mp->get_size()); + for (size_t i=0; i<mp->get_size(); i++) { + temp.list_item(i).set_param(*mp->get_elem(i)); } - break; + *this = temp; + break; } case Module_Param::MP_Verdict: - *this = param.get_verdict(); + *this = mp->get_verdict(); break; default: param.type_error("verdict template"); } - is_ifpresent = param.get_ifpresent(); + is_ifpresent = param.get_ifpresent() || mp->get_ifpresent(); +} + +Module_Param* VERDICTTYPE_template::get_param(Module_Param_Name& param_name) const +{ + Module_Param* mp = NULL; + switch (template_selection) { + case UNINITIALIZED_TEMPLATE: + mp = new Module_Param_Unbound(); + break; + case OMIT_VALUE: + mp = new Module_Param_Omit(); + break; + case ANY_VALUE: + mp = new Module_Param_Any(); + break; + case ANY_OR_OMIT: + mp = new Module_Param_AnyOrNone(); + break; + case SPECIFIC_VALUE: + mp = new Module_Param_Verdict(single_value); + break; + case VALUE_LIST: + case COMPLEMENTED_LIST: { + if (template_selection == VALUE_LIST) { + mp = new Module_Param_List_Template(); + } + else { + mp = new Module_Param_ComplementList_Template(); + } + for (size_t i = 0; i < value_list.n_values; ++i) { + mp->add_elem(value_list.list_value[i].get_param(param_name)); + } + break; } + default: + break; + } + if (is_ifpresent) { + mp->set_ifpresent(); + } + return mp; } void VERDICTTYPE_template::encode_text(Text_Buf& text_buf) const @@ -728,13 +790,13 @@ void VERDICTTYPE_template::decode_text(Text_Buf& text_buf) } } -boolean VERDICTTYPE_template::is_present() const +boolean VERDICTTYPE_template::is_present(boolean legacy /* = FALSE */) const { if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE; - return !match_omit(); + return !match_omit(legacy); } -boolean VERDICTTYPE_template::match_omit() const +boolean VERDICTTYPE_template::match_omit(boolean legacy /* = FALSE */) const { if (is_ifpresent) return TRUE; switch (template_selection) { @@ -743,10 +805,14 @@ boolean VERDICTTYPE_template::match_omit() const return TRUE; case VALUE_LIST: case COMPLEMENTED_LIST: - for (unsigned int i=0; i<value_list.n_values; i++) - if (value_list.list_value[i].match_omit()) - return template_selection==VALUE_LIST; - return template_selection==COMPLEMENTED_LIST; + if (legacy) { + // legacy behavior: 'omit' can appear in the value/complement list + for (unsigned int i=0; i<value_list.n_values; i++) + if (value_list.list_value[i].match_omit()) + return template_selection==VALUE_LIST; + return template_selection==COMPLEMENTED_LIST; + } + // else fall through default: return FALSE; } @@ -754,7 +820,8 @@ boolean VERDICTTYPE_template::match_omit() const } #ifndef TITAN_RUNTIME_2 -void VERDICTTYPE_template::check_restriction(template_res t_res, const char* t_name) const +void VERDICTTYPE_template::check_restriction(template_res t_res, const char* t_name, + boolean legacy /* = FALSE */) const { if (template_selection==UNINITIALIZED_TEMPLATE) return; switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) { @@ -766,7 +833,7 @@ void VERDICTTYPE_template::check_restriction(template_res t_res, const char* t_n template_selection==SPECIFIC_VALUE)) return; break; case TR_PRESENT: - if (!match_omit()) return; + if (!match_omit(legacy)) return; break; default: return; diff --git a/core/Verdicttype.hh b/core/Verdicttype.hh index 4ea1a52c1..0faba13bd 100644 --- a/core/Verdicttype.hh +++ b/core/Verdicttype.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -71,6 +71,7 @@ public: void log() const; void set_param(Module_Param& param); + Module_Param* get_param(Module_Param_Name& param_name) const; void encode_text(Text_Buf& text_buf) const; void decode_text(Text_Buf& text_buf); @@ -143,33 +144,34 @@ public: VERDICTTYPE_template& operator=(const OPTIONAL<VERDICTTYPE>& other_value); VERDICTTYPE_template& operator=(const VERDICTTYPE_template& other_value); - boolean match(verdicttype other_value) const; - boolean match(const VERDICTTYPE& other_value) const; + boolean match(verdicttype other_value, boolean legacy = FALSE) const; + boolean match(const VERDICTTYPE& other_value, boolean legacy = FALSE) const; verdicttype valueof() const; void set_type(template_sel template_type, unsigned int list_length); VERDICTTYPE_template& list_item(unsigned int list_index); void log() const; - void log_match(const VERDICTTYPE& match_value) const; + void log_match(const VERDICTTYPE& match_value, boolean legacy = FALSE) const; void set_param(Module_Param& param); + Module_Param* get_param(Module_Param_Name& param_name) const; void encode_text(Text_Buf& text_buf) const; void decode_text(Text_Buf& text_buf); - boolean is_present() const; - boolean match_omit() const; + boolean is_present(boolean legacy = FALSE) const; + boolean match_omit(boolean legacy = FALSE) const; #ifdef TITAN_RUNTIME_2 void valueofv(Base_Type* value) const {*(static_cast<VERDICTTYPE*>(value)) = valueof();} void set_value(template_sel other_value) {*this = other_value;} void copy_value(const Base_Type* other_value) {*this = *(static_cast<const VERDICTTYPE*>(other_value));} Base_Template* clone() const {return new VERDICTTYPE_template(*this);} const TTCN_Typedescriptor_t* get_descriptor() const {return &VERDICTTYPE_descr_;} - boolean matchv(const Base_Type* other_value) const {return match(*(static_cast<const VERDICTTYPE*>(other_value)));} - void log_matchv(const Base_Type* match_value) const {log_match(*(static_cast<const VERDICTTYPE*>(match_value)));} + boolean matchv(const Base_Type* other_value, boolean legacy) const {return match(*(static_cast<const VERDICTTYPE*>(other_value)), legacy);} + void log_matchv(const Base_Type* match_value, boolean legacy) const {log_match(*(static_cast<const VERDICTTYPE*>(match_value)), legacy);} #else - void check_restriction(template_res t_res, const char* t_name=NULL) const; + void check_restriction(template_res t_res, const char* t_name=NULL, boolean legacy = FALSE) const; #endif }; diff --git a/core/XER.cc b/core/XER.cc index 5fa5effe6..03259a0b1 100644 --- a/core/XER.cc +++ b/core/XER.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/core/XER.hh b/core/XER.hh index 78262afc4..181f6afe3 100644 --- a/core/XER.hh +++ b/core/XER.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/core/XmlReader.cc b/core/XmlReader.cc index 4f602ae55..3b0da21a3 100644 --- a/core/XmlReader.cc +++ b/core/XmlReader.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/core/XmlReader.hh b/core/XmlReader.hh index 5a0b8dc3d..c6c480fd4 100644 --- a/core/XmlReader.hh +++ b/core/XmlReader.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/core/config_process.l b/core/config_process.l index dafbf2d1d..aba858461 100644 --- a/core/config_process.l +++ b/core/config_process.l @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 @@ -303,11 +303,19 @@ TTCNSTRINGPARSING_COMPONENT "$#&&&(#TTCNSTRINGPARSING_COMPONENT$#&&^#% " {NUMBER} { yylval.int_val = new int_val_t(yytext); + if (YY_START == SC_MODULE_PARAMETERS) { + // return a different token for module parameters so it doesn't conflict with references + return MPNumber; + } return Number; } {FLOAT} { yylval.float_val = atof(yytext); + if (YY_START == SC_MODULE_PARAMETERS) { + // return a different token for module parameters so it doesn't conflict with references + return MPFloat; + } return Float; } @@ -421,6 +429,10 @@ TTCNSTRINGPARSING_COMPONENT "$#&&&(#TTCNSTRINGPARSING_COMPONENT$#&&^#% " break; default: set_ret_val_cstr(cstring); + if (caller_state == SC_MODULE_PARAMETERS) { + // return a different token for module parameters so it doesn't conflict with references + return MPCstring; + } return Cstring; } @@ -474,6 +486,10 @@ TTCNSTRINGPARSING_COMPONENT "$#&&&(#TTCNSTRINGPARSING_COMPONENT$#&&^#% " BEGIN(caller_state); if (caller_state!=SC_DEFINE) { set_ret_val_cstr(cstring); + if (caller_state == SC_MODULE_PARAMETERS) { + // return a different token for module parameters so it doesn't conflict with references + return MPCstring; + } return Cstring; } @@ -1000,155 +1016,155 @@ LOG_ALL { /* statistics filters */ [Nn]umber[Oo]f[Ll]ines { - yylval.uint_val = TTCN3_Profiler::STATS_NUMBER_OF_LINES; + yylval.uint_val = Profiler_Tools::STATS_NUMBER_OF_LINES; return ProfilerStatsFlag; } [Ll]ine[Dd]ata[Rr]aw { - yylval.uint_val = TTCN3_Profiler::STATS_LINE_DATA_RAW; + yylval.uint_val = Profiler_Tools::STATS_LINE_DATA_RAW; return ProfilerStatsFlag; } [Ff]unc[Dd]ata[Rr]aw { - yylval.uint_val = TTCN3_Profiler::STATS_FUNC_DATA_RAW; + yylval.uint_val = Profiler_Tools::STATS_FUNC_DATA_RAW; return ProfilerStatsFlag; } [Ll]ine[Aa]vg[Rr]aw { - yylval.uint_val = TTCN3_Profiler::STATS_LINE_AVG_RAW; + yylval.uint_val = Profiler_Tools::STATS_LINE_AVG_RAW; return ProfilerStatsFlag; } [Ff]unc[Aa]vg[Rr]aw { - yylval.uint_val = TTCN3_Profiler::STATS_FUNC_AVG_RAW; + yylval.uint_val = Profiler_Tools::STATS_FUNC_AVG_RAW; return ProfilerStatsFlag; } [Ll]ine[Tt]imes[Ss]orted[Bb]y[Mm]od { - yylval.uint_val = TTCN3_Profiler::STATS_LINE_TIMES_SORTED_BY_MOD; + yylval.uint_val = Profiler_Tools::STATS_LINE_TIMES_SORTED_BY_MOD; return ProfilerStatsFlag; } [Ff]unc[Tt]imes[Ss]orted[Bb]y[Mm]od { - yylval.uint_val = TTCN3_Profiler::STATS_FUNC_TIMES_SORTED_BY_MOD; + yylval.uint_val = Profiler_Tools::STATS_FUNC_TIMES_SORTED_BY_MOD; return ProfilerStatsFlag; } [Ll]ine[Tt]imes[Ss]orted[Tt]otal { - yylval.uint_val = TTCN3_Profiler::STATS_LINE_TIMES_SORTED_TOTAL; + yylval.uint_val = Profiler_Tools::STATS_LINE_TIMES_SORTED_TOTAL; return ProfilerStatsFlag; } [Ff]unc[Tt]imes[Ss]orted[Tt]otal { - yylval.uint_val = TTCN3_Profiler::STATS_FUNC_TIMES_SORTED_TOTAL; + yylval.uint_val = Profiler_Tools::STATS_FUNC_TIMES_SORTED_TOTAL; return ProfilerStatsFlag; } [Ll]ine[Cc]ount[Ss]orted[Bb]y[Mm]od { - yylval.uint_val = TTCN3_Profiler::STATS_LINE_COUNT_SORTED_BY_MOD; + yylval.uint_val = Profiler_Tools::STATS_LINE_COUNT_SORTED_BY_MOD; return ProfilerStatsFlag; } [Ff]unc[Cc]ount[Ss]orted[Bb]y[Mm]od { - yylval.uint_val = TTCN3_Profiler::STATS_FUNC_COUNT_SORTED_BY_MOD; + yylval.uint_val = Profiler_Tools::STATS_FUNC_COUNT_SORTED_BY_MOD; return ProfilerStatsFlag; } [Ll]ine[Cc]ount[Ss]orted[Tt]otal { - yylval.uint_val = TTCN3_Profiler::STATS_LINE_COUNT_SORTED_TOTAL; + yylval.uint_val = Profiler_Tools::STATS_LINE_COUNT_SORTED_TOTAL; return ProfilerStatsFlag; } [Ff]unc[Cc]ount[Ss]orted[Tt]otal { - yylval.uint_val = TTCN3_Profiler::STATS_FUNC_COUNT_SORTED_TOTAL; + yylval.uint_val = Profiler_Tools::STATS_FUNC_COUNT_SORTED_TOTAL; return ProfilerStatsFlag; } [Ll]ine[Aa]vg[Ss]orted[Bb]y[Mm]od { - yylval.uint_val = TTCN3_Profiler::STATS_LINE_AVG_SORTED_BY_MOD; + yylval.uint_val = Profiler_Tools::STATS_LINE_AVG_SORTED_BY_MOD; return ProfilerStatsFlag; } [Ff]unc[Aa]vg[Ss]orted[Bb]y[Mm]od { - yylval.uint_val = TTCN3_Profiler::STATS_FUNC_AVG_SORTED_BY_MOD; + yylval.uint_val = Profiler_Tools::STATS_FUNC_AVG_SORTED_BY_MOD; return ProfilerStatsFlag; } [Ll]ine[Aa]vg[Ss]orted[Tt]otal { - yylval.uint_val = TTCN3_Profiler::STATS_LINE_AVG_SORTED_TOTAL; + yylval.uint_val = Profiler_Tools::STATS_LINE_AVG_SORTED_TOTAL; return ProfilerStatsFlag; } [Ff]unc[Aa]vg[Ss]orted[Tt]otal { - yylval.uint_val = TTCN3_Profiler::STATS_FUNC_AVG_SORTED_TOTAL; + yylval.uint_val = Profiler_Tools::STATS_FUNC_AVG_SORTED_TOTAL; return ProfilerStatsFlag; } [Tt]op10[Ll]ine[Tt]imes { - yylval.uint_val = TTCN3_Profiler::STATS_TOP10_LINE_TIMES; + yylval.uint_val = Profiler_Tools::STATS_TOP10_LINE_TIMES; return ProfilerStatsFlag; } [Tt]op10[Ff]unc[Tt]imes { - yylval.uint_val = TTCN3_Profiler::STATS_TOP10_FUNC_TIMES; + yylval.uint_val = Profiler_Tools::STATS_TOP10_FUNC_TIMES; return ProfilerStatsFlag; } [Tt]op10[Ll]ine[Cc]ount { - yylval.uint_val = TTCN3_Profiler::STATS_TOP10_LINE_COUNT; + yylval.uint_val = Profiler_Tools::STATS_TOP10_LINE_COUNT; return ProfilerStatsFlag; } [Tt]op10[Ff]unc[Cc]ount { - yylval.uint_val = TTCN3_Profiler::STATS_TOP10_FUNC_COUNT; + yylval.uint_val = Profiler_Tools::STATS_TOP10_FUNC_COUNT; return ProfilerStatsFlag; } [Tt]op10[Ll]ine[Aa]vg { - yylval.uint_val = TTCN3_Profiler::STATS_TOP10_LINE_AVG; + yylval.uint_val = Profiler_Tools::STATS_TOP10_LINE_AVG; return ProfilerStatsFlag; } [Tt]op10[Ff]unc[Aa]vg { - yylval.uint_val = TTCN3_Profiler::STATS_TOP10_FUNC_AVG; + yylval.uint_val = Profiler_Tools::STATS_TOP10_FUNC_AVG; return ProfilerStatsFlag; } [Uu]nused[Ll]ines { - yylval.uint_val = TTCN3_Profiler::STATS_UNUSED_LINES; + yylval.uint_val = Profiler_Tools::STATS_UNUSED_LINES; return ProfilerStatsFlag; } [Uu]nused[Ff]unc { - yylval.uint_val = TTCN3_Profiler::STATS_UNUSED_FUNC; + yylval.uint_val = Profiler_Tools::STATS_UNUSED_FUNC; return ProfilerStatsFlag; } [Aa]ll[Rr]aw[Dd]ata { - yylval.uint_val = TTCN3_Profiler::STATS_ALL_RAW_DATA; + yylval.uint_val = Profiler_Tools::STATS_ALL_RAW_DATA; return ProfilerStatsFlag; } [Ll]ine[Dd]ata[Ss]orted[Bb]y[Mm]od { - yylval.uint_val = TTCN3_Profiler::STATS_LINE_DATA_SORTED_BY_MOD; + yylval.uint_val = Profiler_Tools::STATS_LINE_DATA_SORTED_BY_MOD; return ProfilerStatsFlag; } [Ff]unc[Dd]ata[Ss]orted[Bb]y[Mm]od { - yylval.uint_val = TTCN3_Profiler::STATS_FUNC_DATA_SORTED_BY_MOD; + yylval.uint_val = Profiler_Tools::STATS_FUNC_DATA_SORTED_BY_MOD; return ProfilerStatsFlag; } [Ll]ine[Dd]ata[Ss]orted[Tt]otal { - yylval.uint_val = TTCN3_Profiler::STATS_LINE_DATA_SORTED_TOTAL; + yylval.uint_val = Profiler_Tools::STATS_LINE_DATA_SORTED_TOTAL; return ProfilerStatsFlag; } [Ff]unc[Dd]ata[Ss]orted[Tt]otal { - yylval.uint_val = TTCN3_Profiler::STATS_FUNC_DATA_SORTED_TOTAL; + yylval.uint_val = Profiler_Tools::STATS_FUNC_DATA_SORTED_TOTAL; return ProfilerStatsFlag; } [Ll]ine[Dd]ata[Ss]orted { - yylval.uint_val = TTCN3_Profiler::STATS_LINE_DATA_SORTED; + yylval.uint_val = Profiler_Tools::STATS_LINE_DATA_SORTED; return ProfilerStatsFlag; } [Ff]unc[Dd]ata[Ss]orted { - yylval.uint_val = TTCN3_Profiler::STATS_FUNC_DATA_SORTED; + yylval.uint_val = Profiler_Tools::STATS_FUNC_DATA_SORTED; return ProfilerStatsFlag; } [Aa]ll[Dd]ata[Ss]orted { - yylval.uint_val = TTCN3_Profiler::STATS_ALL_DATA_SORTED; + yylval.uint_val = Profiler_Tools::STATS_ALL_DATA_SORTED; return ProfilerStatsFlag; } [Tt]op10[Ll]ine[Dd]ata { - yylval.uint_val = TTCN3_Profiler::STATS_TOP10_LINE_DATA; + yylval.uint_val = Profiler_Tools::STATS_TOP10_LINE_DATA; return ProfilerStatsFlag; } [Tt]op10[Ff]unc[Dd]ata { - yylval.uint_val = TTCN3_Profiler::STATS_TOP10_FUNC_DATA; + yylval.uint_val = Profiler_Tools::STATS_TOP10_FUNC_DATA; return ProfilerStatsFlag; } [Tt]op10[Aa]ll[Dd]ata { - yylval.uint_val = TTCN3_Profiler::STATS_TOP10_ALL_DATA; + yylval.uint_val = Profiler_Tools::STATS_TOP10_ALL_DATA; return ProfilerStatsFlag; } [Uu]nused[Dd]ata { - yylval.uint_val = TTCN3_Profiler::STATS_UNUSED_DATA; + yylval.uint_val = Profiler_Tools::STATS_UNUSED_DATA; return ProfilerStatsFlag; } [Aa]ll { - yylval.uint_val = TTCN3_Profiler::STATS_ALL; + yylval.uint_val = Profiler_Tools::STATS_ALL; return ProfilerStatsFlag; } } @@ -1181,7 +1197,7 @@ LOG_ALL { <SC_MODULE_PARAMETERS>{ASN1LOWERIDENTIFIER} { yylval.str_val = mcopystr(yytext); - for (int i = 0; i < yyleng; i++) { + for (size_t i = 0; i < yyleng; i++) { if (yylval.str_val[i] == '-') yylval.str_val[i] = '_'; } TTCN_warning("In line %d of configuration file: `%s' is not a valid TTCN-3 " @@ -1202,7 +1218,7 @@ LOG_ALL { char* comp_num_str = mcopystrn(yytext + pos + 1, len - pos - 1); yylval.int_val = new int_val_t(comp_num_str); Free(comp_num_str); - return Number; + return MPNumber; } {MACRO_BOOL} { @@ -1258,6 +1274,10 @@ LOG_ALL { "this context."); yylval.int_val = new int_val_t((RInt)0); } + if (YY_START == SC_MODULE_PARAMETERS) { + // return a different token for module parameters so it doesn't conflict with references + return MPNumber; + } return Number; } @@ -1286,6 +1306,10 @@ LOG_ALL { "this context."); yylval.float_val = 0.0; } + if (YY_START == SC_MODULE_PARAMETERS) { + // return a different token for module parameters so it doesn't conflict with references + return MPFloat; + } return Float; } @@ -1335,6 +1359,10 @@ LOG_ALL { "this context."); yylval.charstring_val.n_chars = 0; yylval.charstring_val.chars_ptr = memptystr(); + if (YY_START == SC_MODULE_PARAMETERS) { + // return a different token for module parameters so it doesn't conflict with references + return MPCstring; + } return Cstring; } @@ -1351,6 +1379,10 @@ LOG_ALL { yylval.charstring_val.n_chars=0; yylval.charstring_val.chars_ptr=memptystr(); Free(macroname); + if (YY_START == SC_MODULE_PARAMETERS) { + // return a different token for module parameters so it doesn't conflict with references + return MPCstring; + } return Cstring; } @@ -1364,6 +1396,10 @@ LOG_ALL { yylval.charstring_val.chars_ptr=(char*)Malloc(macrolen+1); memcpy(yylval.charstring_val.chars_ptr, macrovalue, macrolen+1); Free(macroname); + if (YY_START == SC_MODULE_PARAMETERS) { + // return a different token for module parameters so it doesn't conflict with references + return MPCstring; + } return Cstring; } } diff --git a/core/config_process.y b/core/config_process.y index 28dce692f..37e0d81e2 100644 --- a/core/config_process.y +++ b/core/config_process.y @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 @@ -181,8 +181,8 @@ string_map_t *config_defines; %token EndTestCase %token <str_val> Identifier %token <str_val> ASN1LowerIdentifier "ASN.1 identifier beginning with a lowercase letter" -%token <int_val> Number -%token <float_val> Float +%token <int_val> Number MPNumber "integer value" +%token <float_val> Float MPFloat "float value" %token <bool_val> BooleanValue "true or false" %token <verdict_val> VerdictValue %token <bitstring_val> Bstring "bit string value" @@ -191,7 +191,7 @@ string_map_t *config_defines; %token <str_val> BstringMatch "bit string template" %token <str_val> HstringMatch "hex string template" %token <str_val> OstringMatch "octet string template" -%token <charstring_val> Cstring "charstring value" +%token <charstring_val> Cstring MPCstring "charstring value" %token DNSName "hostname" /* a single bit */ %token <logseverity_val> LoggingBit @@ -236,10 +236,8 @@ string_map_t *config_defines; %type <objid_val> ObjIdValue ObjIdComponentList %type <int_val> ObjIdComponent NumberForm NameAndNumberForm -%type <universal_charstring_val> UniversalCharstringValue - seqUniversalCharstringFragment UniversalCharstringFragment +%type <universal_charstring_val> UniversalCharstringValue UniversalCharstringFragment %type <universal_char_val> Quadruple -%type <str_val> EnumeratedValue %type <str_val> LoggerPluginId %type <logging_plugins> LoggerPlugin LoggerPluginList @@ -270,9 +268,10 @@ string_map_t *config_defines; %type <str_val> FieldName %type <module_param_val> ParameterValue SimpleParameterValue ParameterValueOrNotUsedSymbol FieldValue ArrayItem IndexItem IndexItemList FieldValueList ArrayItemList CompoundValue IntegerRange FloatRange StringRange + ParameterExpression ParameterReference %type <module_param_list> TemplateItemList %type <module_param_length_restriction> LengthMatch -%type <str_val> PatternChunk PatternChunkList +%type <str_val> PatternChunk %type <int_native> IndexItemIndex LengthBound %type <uint_val> ProfilerStatsFlags @@ -280,7 +279,6 @@ string_map_t *config_defines; ArrayRef ASN1LowerIdentifier Command -EnumeratedValue FieldName Identifier LogFileName @@ -289,7 +287,6 @@ TestportName TestportParameterName TestportParameterValue PatternChunk -PatternChunkList BstringMatch HstringMatch OstringMatch @@ -312,9 +309,9 @@ OctetstringValue %destructor { Free($$.chars_ptr); } Cstring +MPCstring -%destructor { Free($$.uchars_ptr); Free($$.quad_positions); } -seqUniversalCharstringFragment +%destructor { Free($$.uchars_ptr); } UniversalCharstringFragment UniversalCharstringValue @@ -328,6 +325,7 @@ ExecuteItem IntegerValue NameAndNumberForm Number +MPNumber NumberForm ObjIdComponent ParameterValue @@ -343,6 +341,8 @@ IndexItem IntegerRange FloatRange StringRange +ParameterExpression +ParameterReference %destructor { delete $$; } LengthMatch @@ -354,18 +354,18 @@ TemplateItemList ParameterName ParameterNameSegment +%left '&' /* to avoid shift/reduce conflicts */ %left '+' '-' %left '*' '/' %left UnarySign -%expect 2 +%expect 1 /* -2 conflicts in two distinct states. -When seeing a '*' token after an integer or float value in section -[MODULE_PARAMETERS] parser cannot decide whether the token is a multiplication -operator (shift) or it refers to all modules in the next module parameter -(reduce). +1 conflict: +When seeing a '*' token after a module parameter expression the parser cannot +decide whether the token is a multiplication operator (shift) or it refers to +all modules in the next module parameter (reduce). */ %% @@ -433,11 +433,10 @@ ParameterNameSegment: $$ = $1; $$->push_back($3); } -| ParameterNameSegment '[' Number ']' +| ParameterNameSegment IndexItemIndex { $$ = $1; - $$->push_back($3->as_string()); - delete $3; + $$->push_back(mprintf("%d", $2)); } | Identifier { @@ -447,21 +446,21 @@ ParameterNameSegment: ; ParameterValue: - SimpleParameterValue + ParameterExpression { $$ = $1; } -| SimpleParameterValue LengthMatch +| ParameterExpression LengthMatch { $$ = $1; $$->set_length_restriction($2); } -| SimpleParameterValue IfpresentKeyword +| ParameterExpression IfpresentKeyword { $$ = $1; $$->set_ifpresent(); } -| SimpleParameterValue LengthMatch IfpresentKeyword +| ParameterExpression LengthMatch IfpresentKeyword { $$ = $1; $$->set_length_restriction($2); @@ -492,27 +491,69 @@ LengthMatch: ; LengthBound: - IntegerValue + ParameterExpression { - if (!$1->is_native()) { + $1->set_id(new Module_Param_CustomName(mcopystr("length bound"))); + INTEGER tmp; + tmp.set_param(*$1); + if (!tmp.get_val().is_native()) { config_process_error("bignum length restriction bound."); $$ = 0; - } else if ($1->is_negative()) { + } else if (tmp.get_val().is_negative()) { config_process_error("negative length restriction bound."); $$ = 0; } else { - $$ = $1->get_val(); + $$ = tmp; } delete $1; } ; +// one global rule for expressions in module parameters +// the expression's result will be calculated by set_param() +ParameterExpression: + SimpleParameterValue { $$ = $1; } +| ParameterReference { $$ = $1; } +| '(' ParameterExpression ')' { $$ = $2; } +| '+' ParameterExpression %prec UnarySign { $$ = $2; } +| '-' ParameterExpression %prec UnarySign { $$ = new Module_Param_Expression($2); } +| ParameterExpression '+' ParameterExpression + { + $$ = new Module_Param_Expression(Module_Param::EXPR_ADD, $1, $3); + } +| ParameterExpression '-' ParameterExpression + { + $$ = new Module_Param_Expression(Module_Param::EXPR_SUBTRACT, $1, $3); + } +| ParameterExpression '*' ParameterExpression + { + $$ = new Module_Param_Expression(Module_Param::EXPR_MULTIPLY, $1, $3); + } +| ParameterExpression '/' ParameterExpression + { + $$ = new Module_Param_Expression(Module_Param::EXPR_DIVIDE, $1, $3); + } +| ParameterExpression '&' ParameterExpression + { + $$ = new Module_Param_Expression(Module_Param::EXPR_CONCATENATE, $1, $3); + } +; + +ParameterReference: + // enumerated values are also treated as references by the parser, + // these will be sorted out later during set_param() + ParameterNameSegment + { + $$ = new Module_Param_Reference(new Module_Param_Name(*$1)); + } +; + SimpleParameterValue: - IntegerValue + MPNumber { $$ = new Module_Param_Integer($1); } -| FloatValue +| MPFloat { $$ = new Module_Param_Float($1); } @@ -540,17 +581,13 @@ SimpleParameterValue: { $$ = new Module_Param_Octetstring($1.n_octets, $1.octets_ptr); } -| Cstring +| MPCstring { $$ = new Module_Param_Charstring($1.n_chars, $1.chars_ptr); } | UniversalCharstringValue { - $$ = new Module_Param_Universal_Charstring($1.n_uchars, $1.uchars_ptr, $1.n_quads, $1.quad_positions); - } -| EnumeratedValue - { - $$ = new Module_Param_Enumerated($1); + $$ = new Module_Param_Universal_Charstring($1.n_uchars, $1.uchars_ptr); } | OmitKeyword { @@ -592,7 +629,7 @@ SimpleParameterValue: { $$ = $1; } -| PatternKeyword PatternChunkList +| PatternKeyword PatternChunk { $$ = new Module_Param_Pattern($2); } @@ -665,21 +702,8 @@ SimpleParameterValue: } ; -PatternChunkList: - PatternChunk - { - $$ = $1; - } -| PatternChunkList '&' PatternChunk - { - $$ = $1; - $$ = mputstr($$, $3); - Free($3); - } -; - PatternChunk: - Cstring + MPCstring { $$ = mcopystr($1.chars_ptr); Free($1.chars_ptr); @@ -691,30 +715,30 @@ PatternChunk: ; IntegerRange: - '(' '-' InfinityKeyword DotDot IntegerValue ')' + '(' '-' InfinityKeyword DotDot MPNumber ')' { $$ = new Module_Param_IntRange(NULL, $5); } -| '(' IntegerValue DotDot IntegerValue ')' +| '(' MPNumber DotDot MPNumber ')' { $$ = new Module_Param_IntRange($2, $4); } -| '(' IntegerValue DotDot InfinityKeyword ')' +| '(' MPNumber DotDot InfinityKeyword ')' { $$ = new Module_Param_IntRange($2, NULL); } ; FloatRange: - '(' '-' InfinityKeyword DotDot FloatValue ')' + '(' '-' InfinityKeyword DotDot MPFloat ')' { $$ = new Module_Param_FloatRange(0.0, false, $5, true); } -| '(' FloatValue DotDot FloatValue ')' +| '(' MPFloat DotDot MPFloat ')' { $$ = new Module_Param_FloatRange($2, true, $4, true); } -| '(' FloatValue DotDot InfinityKeyword ')' +| '(' MPFloat DotDot InfinityKeyword ')' { $$ = new Module_Param_FloatRange($2, true, 0.0, false); } @@ -739,12 +763,11 @@ StringRange: } Free($2.uchars_ptr); Free($4.uchars_ptr); - Free($2.quad_positions); - Free($4.quad_positions); $$ = new Module_Param_StringRange(lower, upper); } ; +// integers outside of the [MODULE_PARAMETERS] section IntegerValue: Number { $$ = $1; } | '(' IntegerValue ')' { $$ = $2; } @@ -801,6 +824,7 @@ IntegerValue: } ; +// floats outside of the [MODULE_PARAMETERS] section FloatValue: Float { $$ = $1; } | '(' FloatValue ')' { $$ = $2; } @@ -846,11 +870,11 @@ ObjIdComponent: ; NumberForm: - Number { $$ = $1; } + MPNumber { $$ = $1; } ; NameAndNumberForm: - Identifier '(' Number ')' + Identifier '(' MPNumber ')' { Free($1); $$ = $3; @@ -858,149 +882,28 @@ NameAndNumberForm: ; BitstringValue: - Bstring -{ - $$ = $1; -} - | BitstringValue ConcatOp Bstring -{ - $$.n_bits = $1.n_bits + $3.n_bits; - int n_bytes_1 = ($1.n_bits+7)/8; - int n_bytes_3 = ($3.n_bits+7)/8; - int n_bytes = ($$.n_bits+7)/8; - $$.bits_ptr = (unsigned char *)Realloc($1.bits_ptr, n_bytes); - int n_rem_1 = $1.n_bits % 8; // remainder bits - if (n_rem_1!=0) { - for (int i=n_bytes_1; i<n_bytes; i++) { - unsigned char S3_byte = $3.bits_ptr[i-n_bytes_1]; - $$.bits_ptr[i-1] |= S3_byte << n_rem_1; - $$.bits_ptr[i] = S3_byte >> (8-n_rem_1); - } - if (n_bytes_1+n_bytes_3>n_bytes) - $$.bits_ptr[n_bytes-1] |= $3.bits_ptr[n_bytes_3-1] << n_rem_1; - } else { - memcpy($$.bits_ptr + n_bytes_1, $3.bits_ptr, n_bytes_3); - } - Free($3.bits_ptr); -} + Bstring { $$ = $1; } ; HexstringValue: - Hstring -{ - $$ = $1; -} - | HexstringValue ConcatOp Hstring -{ - $$.n_nibbles = $1.n_nibbles + $3.n_nibbles; - int n_bytes = ($$.n_nibbles + 1) / 2; - $$.nibbles_ptr = (unsigned char *)Realloc($1.nibbles_ptr, n_bytes); - int n_bytes_1 = ($1.n_nibbles + 1) / 2; - int n_bytes_3 = ($3.n_nibbles + 1) / 2; - if ($1.n_nibbles % 2) { - for (int i=n_bytes_1; i<n_bytes; i++) { - unsigned char S3_byte = $3.nibbles_ptr[i - n_bytes_1]; - $$.nibbles_ptr[i - 1] |= S3_byte << 4; - $$.nibbles_ptr[i] = S3_byte >> 4; - } - if ($3.n_nibbles % 2) - $$.nibbles_ptr[n_bytes - 1] |= $3.nibbles_ptr[n_bytes_3 - 1] << 4; - } else { - memcpy($$.nibbles_ptr + n_bytes_1, $3.nibbles_ptr, n_bytes_3); - } - Free($3.nibbles_ptr); -} + Hstring { $$ = $1; } ; OctetstringValue: - Ostring -{ - $$ = $1; -} - | OctetstringValue ConcatOp Ostring -{ - $$.n_octets = $1.n_octets + $3.n_octets; - $$.octets_ptr = (unsigned char *)Realloc($1.octets_ptr, $$.n_octets); - memcpy($$.octets_ptr + $1.n_octets, $3.octets_ptr, $3.n_octets); - Free($3.octets_ptr); -} + Ostring { $$ = $1; } ; UniversalCharstringValue: - Cstring seqUniversalCharstringFragment -{ - $$.n_uchars = $1.n_chars + $2.n_uchars; - $$.uchars_ptr = (universal_char*) - Malloc($$.n_uchars * sizeof(universal_char)); - for (int i = 0; i < $1.n_chars; i++) { - $$.uchars_ptr[i].uc_group = 0; - $$.uchars_ptr[i].uc_plane = 0; - $$.uchars_ptr[i].uc_row = 0; - $$.uchars_ptr[i].uc_cell = $1.chars_ptr[i]; - } - memcpy($$.uchars_ptr + $1.n_chars, $2.uchars_ptr, - $2.n_uchars * sizeof(universal_char)); - $$.n_quads = $2.n_quads; - $$.quad_positions = (int*)Malloc($$.n_quads * sizeof(int)); - for (int i = 0; i < $$.n_quads; i++) { - $$.quad_positions[i] = $2.quad_positions[i] + $1.n_chars; - } - Free($1.chars_ptr); - Free($2.uchars_ptr); - Free($2.quad_positions); -} - | Quadruple + Quadruple { $$.n_uchars = 1; $$.uchars_ptr = (universal_char*)Malloc(sizeof(universal_char)); $$.uchars_ptr[0] = $1; - $$.n_quads = 1; - $$.quad_positions = (int*)Malloc(sizeof(int)); - $$.quad_positions[0] = 0; -} - | Quadruple seqUniversalCharstringFragment -{ - $$.n_uchars = $2.n_uchars + 1; - $$.uchars_ptr = (universal_char*) - Malloc($$.n_uchars * sizeof(universal_char)); - $$.uchars_ptr[0] = $1; - memcpy($$.uchars_ptr + 1, $2.uchars_ptr, - $2.n_uchars * sizeof(universal_char)); - $$.n_quads = $2.n_quads + 1; - $$.quad_positions = (int*)Malloc($$.n_quads * sizeof(int)); - $$.quad_positions[0] = 0; - for (int i = 0; i < $2.n_quads; i++) { - $$.quad_positions[i + 1] = $2.quad_positions[i] + 1; - } - Free($2.uchars_ptr); - Free($2.quad_positions); -} -; - -seqUniversalCharstringFragment: - ConcatOp UniversalCharstringFragment -{ - $$ = $2; -} - | seqUniversalCharstringFragment ConcatOp UniversalCharstringFragment -{ - $$.n_uchars = $1.n_uchars + $3.n_uchars; - $$.uchars_ptr = (universal_char*) - Realloc($1.uchars_ptr, $$.n_uchars * sizeof(universal_char)); - memcpy($$.uchars_ptr + $1.n_uchars, $3.uchars_ptr, - $3.n_uchars * sizeof(universal_char)); - $$.n_quads = $1.n_quads + $3.n_quads; - $$.quad_positions = (int*)Realloc($1.quad_positions, $$.n_quads * sizeof(int)); - for (int i = 0; i < $3.n_quads; i++) { - $$.quad_positions[$1.n_quads + i] = $3.quad_positions[i] + $1.n_uchars; - } - Free($3.uchars_ptr); - Free($3.quad_positions); } ; UniversalCharstringFragment: - Cstring + MPCstring { $$.n_uchars = $1.n_chars; $$.uchars_ptr = (universal_char*) @@ -1011,8 +914,6 @@ UniversalCharstringFragment: $$.uchars_ptr[i].uc_row = 0; $$.uchars_ptr[i].uc_cell = $1.chars_ptr[i]; } - $$.n_quads = 0; - $$.quad_positions = 0; Free($1.chars_ptr); } | Quadruple @@ -1020,51 +921,57 @@ UniversalCharstringFragment: $$.n_uchars = 1; $$.uchars_ptr = (universal_char*)Malloc(sizeof(universal_char)); $$.uchars_ptr[0] = $1; - $$.n_quads = 1; - $$.quad_positions = (int*)Malloc(sizeof(int)); - $$.quad_positions[0] = 0; } ; Quadruple: - CharKeyword '(' IntegerValue ',' IntegerValue ',' IntegerValue ',' - IntegerValue ')' -{ - if (*$3 < 0 || *$3 > 127) { - char *s = $3->as_string(); + CharKeyword '(' ParameterExpression ',' ParameterExpression ',' + ParameterExpression ',' ParameterExpression ')' +{ + $3->set_id(new Module_Param_CustomName(mcopystr("quadruple group"))); + $5->set_id(new Module_Param_CustomName(mcopystr("quadruple plane"))); + $7->set_id(new Module_Param_CustomName(mcopystr("quadruple row"))); + $9->set_id(new Module_Param_CustomName(mcopystr("quadruple cell"))); + INTEGER g, p, r, c; + g.set_param(*$3); + p.set_param(*$5); + r.set_param(*$7); + c.set_param(*$9); + if (g < 0 || g > 127) { + char *s = g.get_val().as_string(); config_process_error_f("The first number of quadruple (group) must be " "within the range 0 .. 127 instead of %s.", s); Free(s); - $$.uc_group = *$3 < 0 ? 0 : 127; + $$.uc_group = g < 0 ? 0 : 127; } else { - $$.uc_group = $3->get_val(); + $$.uc_group = g; } - if (*$5 < 0 || *$5 > 255) { - char *s = $5->as_string(); + if (p < 0 || p > 255) { + char *s = p.get_val().as_string(); config_process_error_f("The second number of quadruple (plane) must be " "within the range 0 .. 255 instead of %s.", s); Free(s); - $$.uc_plane = *$5 < 0 ? 0 : 255; + $$.uc_plane = p < 0 ? 0 : 255; } else { - $$.uc_plane = $5->get_val(); + $$.uc_plane = p; } - if (*$7 < 0 || *$7 > 255) { - char *s = $7->as_string(); + if (r < 0 || r > 255) { + char *s = r.get_val().as_string(); config_process_error_f("The third number of quadruple (row) must be " "within the range 0 .. 255 instead of %s.", s); Free(s); - $$.uc_row = *$7 < 0 ? 0 : 255; + $$.uc_row = r < 0 ? 0 : 255; } else { - $$.uc_row = $7->get_val(); + $$.uc_row = r; } - if (*$9 < 0 || *$9 > 255) { - char *s = $9->as_string(); + if (c < 0 || c > 255) { + char *s = c.get_val().as_string(); config_process_error_f("The fourth number of quadruple (cell) must be " "within the range 0 .. 255 instead of %s.", s); Free(s); - $$.uc_cell = *$9 < 0 ? 0 : 255; + $$.uc_cell = c < 0 ? 0 : 255; } else { - $$.uc_cell = $9->get_val(); + $$.uc_cell = c; } delete $3; delete $5; @@ -1073,28 +980,20 @@ Quadruple: } ; -ConcatOp: - '&' -; - +// character strings outside of the [MODULE_PARAMETERS] section StringValue: Cstring { $$ = mcopystr($1.chars_ptr); Free($1.chars_ptr); } - | StringValue ConcatOp Cstring + | StringValue '&' Cstring { $$ = mputstr($1, $3.chars_ptr); Free($3.chars_ptr); } ; -EnumeratedValue: - Identifier { $$ = $1; } - | ASN1LowerIdentifier { $$ = $1; } -; - CompoundValue: '{' '}' { @@ -1112,7 +1011,7 @@ CompoundValue: { $$ = $2; } -| '(' ParameterValue ',' TemplateItemList ')' /* at least 2 elements to avoid shift/reduce conflicts with IntegerValue and FloatValue rules */ +| '(' ParameterValue ',' TemplateItemList ')' /* at least 2 elements to avoid shift/reduce conflicts with the ParameterExpression rule */ { $$ = new Module_Param_List_Template(); $2->set_id(new Module_Param_Index($$->get_size(),false)); @@ -1246,16 +1145,19 @@ IndexItem: ; IndexItemIndex: - '[' IntegerValue ']' + '[' ParameterExpression ']' { - if (!$2->is_native()) { - config_process_error("bignum index."); // todo - } - if ($2->is_negative()) { - config_process_error("negative index."); // todo - } - $$ = $2->get_val(); - delete $2; + $2->set_id(new Module_Param_CustomName(mcopystr("array index"))); + INTEGER tmp; + tmp.set_param(*$2); + if (!tmp.get_val().is_native()) { + config_process_error("bignum index."); // todo + } + if (tmp.get_val().is_negative()) { + config_process_error("negative index."); // todo + } + $$ = tmp; + delete $2; } ; diff --git a/core/gccversion.c b/core/gccversion.c index ee87f5736..18cdfd942 100644 --- a/core/gccversion.c +++ b/core/gccversion.c @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/core/license_gen.c b/core/license_gen.c index c945a6c1e..2c0a20d11 100644 --- a/core/license_gen.c +++ b/core/license_gen.c @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/core/simplify.pl b/core/simplify.pl index 612f12c5c..e56384e61 100644 --- a/core/simplify.pl +++ b/core/simplify.pl @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/core/ttcn3_profmerge.1 b/core/ttcn3_profmerge.1 new file mode 100644 index 000000000..f91b84121 --- /dev/null +++ b/core/ttcn3_profmerge.1 @@ -0,0 +1,98 @@ +.TH ttcn3_profmerge 1 "August 2015" "Ericsson Telecom AB" "TTCN-3 Tools" +.SH NAME +ttcn3_profmerge \- TTCN-3 profiler and code coverage merge tool +.SH SYNOPSIS +.B ttcn3_profmerge +.RB "[ " \-pc +.RB "] [ " \-o +.I "file" +.RB "] [ " \-s +.IR "file" " ]" +.RB "[ " \-f +.IR "filter" " ]" +.IR db_file1 " [" +.IR db_file2 " ... ]" +.br +or +.br +.B ttcn3_profmerge +.B \-v +.SH DESCRIPTION +This manual page is a quick reference for the TTCN-3 profmerge utility of +the TTCN-3 Test Executor. The +.B ttcn3_profmerge +utility, which can be found in +.I $TTCN3_DIR/bin, +merges all input files (profiler databases) given in the command argument into a +single output file. It can also generate profiler statistics from the merged +database. +.br +Since there are two possible outputs, neither of them are written to the standard output. +.br +It is useful for test suites that are run on multiple Host Controllers (in parallel mode). +.SH OPTIONS +Available command line switches are: +.TP 10 +.B \-p +Discards profiler data from the merged database. All execution times will be set to zero in +the output database file, and statistics related to execution times will not be generated (both +profiler and code coverage data cannot be discarded, since there would be no data left). +.TP +.B \-c +Discards code coverage data from the merged database. All execution counts will be set to zero in +the output database file, and statistics related to execution counts will not be generated (both +profiler and code coverage data cannot be discarded, since there would be no data left). +.TP +.BI \-o " file" +Prints the output (merged) database to the specified +.IR file \. +At least one output file (this or the statistics file) must be set. +.TP +.BI \-s " file" +Prints statistics for the merged database into the specified +.IR file \. +At least one output file (this or the output database file) must be set. +.TP +.BI \-f " filter" +Specifies which statistics entries are generated. The +.I filter +is a hexadecimal number, the last 25 bits each correspond to the 25 entries +in the statistics file (the least significant bit corresponds to the first entry, +and so on). The filter is ignored if the statistics file is not set. +.TP +.B \-v +Prints +.I version +and license key information and exits. +.SH ENVIRONMENT VARIABLES +.TP +.SM +TTCN3_DIR +The installation directory where the uncompressed binary package of the +TTCN-3 Test Executor can be found. +.TP +.SM +TTCN3_LICENSE_FILE +Points to the +.I file +.RB ( NB: +.I not +the directory) that contains the personalized license key for the +current user or host. +.SH BUGS +None known at this time +.LP +.SH SEE ALSO +The +.B Programmer's Technical Reference for the TTCN-3 +.B Test Executor. +.SH AUTHOR +This manpage is written by Botond Baranyi, Ericsson Telecom AB +.br +Copyright (c) 2000-2015 Ericsson Telecom AB +.br +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 +.br +http://www.eclipse.org/legal/epl-v10.html diff --git a/core2/Basetype2.cc b/core2/Basetype2.cc index 189fa743f..41a165dc3 100644 --- a/core2/Basetype2.cc +++ b/core2/Basetype2.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -255,7 +255,8 @@ Record_Of_Type::Record_Of_Type(null_type /*other_value*/) } Record_Of_Type::Record_Of_Type(const Record_Of_Type& other_value) -: Base_Type(other_value), val_ptr(NULL), err_descr(other_value.err_descr), refd_ind_ptr(NULL) +: Base_Type(other_value), RefdIndexInterface(other_value) +, val_ptr(NULL), err_descr(other_value.err_descr), refd_ind_ptr(NULL) { if (!other_value.is_bound()) TTCN_error("Copying an unbound record of/set of value."); @@ -2289,25 +2290,31 @@ void Record_Of_Type::set_param(Module_Param& param) { } param.basic_check(Module_Param::BC_VALUE|Module_Param::BC_LIST, is_set()?"set of value":"record of value"); + + Module_Param_Ptr mp = ¶m; + if (param.get_type() == Module_Param::MP_Reference) { + mp = param.get_referenced_param(); + } + switch (param.get_operation_type()) { case Module_Param::OT_ASSIGN: - if (param.get_type()==Module_Param::MP_Value_List && param.get_size()==0) { + if (mp->get_type()==Module_Param::MP_Value_List && mp->get_size()==0) { set_val(NULL_VALUE); return; } - switch (param.get_type()) { + switch (mp->get_type()) { case Module_Param::MP_Value_List: - set_size(param.get_size()); - for (size_t i=0; i<param.get_size(); ++i) { - Module_Param* const curr = param.get_elem(i); + set_size(mp->get_size()); + for (size_t i=0; i<mp->get_size(); ++i) { + Module_Param* const curr = mp->get_elem(i); if (curr->get_type()!=Module_Param::MP_NotUsed) { get_at(i)->set_param(*curr); } } break; case Module_Param::MP_Indexed_List: - for (size_t i=0; i<param.get_size(); ++i) { - Module_Param* const current = param.get_elem(i); + for (size_t i=0; i<mp->get_size(); ++i) { + Module_Param* const current = mp->get_elem(i); get_at(current->get_id()->get_index())->set_param(*current); } break; @@ -2316,12 +2323,12 @@ void Record_Of_Type::set_param(Module_Param& param) { } break; case Module_Param::OT_CONCAT: - switch (param.get_type()) { + switch (mp->get_type()) { case Module_Param::MP_Value_List: { if (!is_bound()) set_val(NULL_VALUE); int start_idx = lengthof(); - for (size_t i=0; i<param.get_size(); ++i) { - Module_Param* const curr = param.get_elem(i); + for (size_t i=0; i<mp->get_size(); ++i) { + Module_Param* const curr = mp->get_elem(i); if ((curr->get_type()!=Module_Param::MP_NotUsed)) { get_at(start_idx+(int)i)->set_param(*curr); } @@ -2339,6 +2346,34 @@ void Record_Of_Type::set_param(Module_Param& param) { } } +Module_Param* Record_Of_Type::get_param(Module_Param_Name& param_name) const +{ + if (!is_bound()) { + return new Module_Param_Unbound(); + } + if (param_name.next_name()) { + // Haven't reached the end of the module parameter name + // => the name refers to one of the elements, not to the whole record of + char* param_field = param_name.get_current_name(); + if (param_field[0] < '0' || param_field[0] > '9') { + TTCN_error("Unexpected record field name in module parameter reference, " + "expected a valid index for %s type `%s'", + is_set() ? "set of" : "record of", get_descriptor()->name); + } + int param_index = -1; + sscanf(param_field, "%d", ¶m_index); + return get_at(param_index)->get_param(param_name); + } + Vector<Module_Param*> values; + for (int i = 0; i < val_ptr->n_elements; ++i) { + values.push_back(val_ptr->value_elements[i]->get_param(param_name)); + } + Module_Param_Value_List* mp = new Module_Param_Value_List(); + mp->add_list_with_implicit_ids(&values); + values.clear(); + return mp; +} + void Record_Of_Type::set_implicit_omit() { for (int i = 0; i < get_nof_elements(); ++i) { @@ -2474,21 +2509,27 @@ void Record_Type::set_param(Module_Param& param) { } param.basic_check(Module_Param::BC_VALUE, is_set()?"set value":"record value"); - switch (param.get_type()) { + + Module_Param_Ptr mp = ¶m; + if (param.get_type() == Module_Param::MP_Reference) { + mp = param.get_referenced_param(); + } + + switch (mp->get_type()) { case Module_Param::MP_Value_List: - if (get_count()<(int)param.get_size()) { - param.error("%s value of type %s has %d fields but list value has %d fields", is_set()?"Set":"Record", get_descriptor()->name, get_count(), (int)param.get_size()); + if (get_count()<(int)mp->get_size()) { + param.error("%s value of type %s has %d fields but list value has %d fields", is_set()?"Set":"Record", get_descriptor()->name, get_count(), (int)mp->get_size()); } - for (size_t i=0; i<param.get_size(); i++) { - Module_Param* mp = param.get_elem(i); - if (mp->get_type()!=Module_Param::MP_NotUsed) { - get_at((int)i)->set_param(*mp); + for (size_t i=0; i<mp->get_size(); i++) { + Module_Param* mp_elem = mp->get_elem(i); + if (mp_elem->get_type()!=Module_Param::MP_NotUsed) { + get_at((int)i)->set_param(*mp_elem); } } break; case Module_Param::MP_Assignment_List: - for (size_t i=0; i<param.get_size(); ++i) { - Module_Param* const current = param.get_elem(i); + for (size_t i=0; i<mp->get_size(); ++i) { + Module_Param* const current = mp->get_elem(i); bool found = false; for (int j=0; j<get_count(); ++j) { if (!strcmp(fld_name(j), current->get_id()->get_name())) { @@ -2509,6 +2550,38 @@ void Record_Type::set_param(Module_Param& param) { } } +Module_Param* Record_Type::get_param(Module_Param_Name& param_name) const +{ + if (!is_bound()) { + return new Module_Param_Unbound(); + } + if (param_name.next_name()) { + // Haven't reached the end of the module parameter name + // => the name refers to one of the fields, not to the whole record + char* param_field = param_name.get_current_name(); + if (param_field[0] >= '0' && param_field[0] <= '9') { + TTCN_error("Unexpected array index in module parameter reference, " + "expected a valid field name for %s type `%s'", + is_set() ? "set" : "record", get_descriptor()->name); + } + int field_cnt = get_count(); + for (int field_idx = 0; field_idx < field_cnt; field_idx++) { + if (strcmp(fld_name(field_idx), param_field) == 0) { + return get_at(field_idx)->get_param(param_name); + } + } + TTCN_error("Field `%s' not found in %s type `%s'", + param_field, is_set() ? "set" : "record", get_descriptor()->name); + } + Module_Param_Assignment_List* mp = new Module_Param_Assignment_List(); + for (int i = 0; i < get_count(); ++i) { + Module_Param* mp_field = get_at(i)->get_param(param_name); + mp_field->set_id(new Module_Param_FieldName(mcopystr(fld_name(i)))); + mp->add_elem(mp_field); + } + return mp; +} + void Record_Type::set_implicit_omit() { int field_cnt = get_count(); @@ -5167,98 +5240,79 @@ int Record_Type::XER_decode(const XERdescriptor_t& p_td, XmlReaderWrap& reader, get_at(oi)->set_to_omit(); ++n_optionals; } + Record_Of_Type *use_order = static_cast<Record_Of_Type*>(get_at(uo_index)); // Initialize the use_order field to empty. Let it grow on demand. // (setting it to the minimum acceptable size may leave unbound elements // if the XML was incomplete). use_order->set_size(0); - Record_Type *jumbled = this; // the record affected by USE_ORDER - int begin = first_nonattr; - int end = field_cnt; // "one past" - if (p_td.xer_bits & USE_NIL) { - Base_Type *last_optional = get_at(field_cnt-1); - if (!usenil_attribute) { // exer known true - last_optional->set_to_present(); - jumbled = static_cast<Record_Type*>(last_optional->get_opt_value()); - // We will operate on the members of last_optional, - // effectively bypassing last_optional->XER_decode() itself. - begin = 0; - end = jumbled->get_count(); - ec_1.set_msg("%s': ", fld_name(field_cnt-1)); - } - } - if (num_attributes > 0 - && first_nonattr != field_cnt - && i == first_nonattr - 1) { // exer known true - // If there were attributes and their processing just finished, - // the reader is positioned on the start tag of the record. - // Move ahead, unless there are no non-attribute fields. - reader.Read(); - } - // Then, the non-attributes - - // The index runs over the members affected by USE-ORDER. - // This is [first_nonattr,field_cnt) unless USE-NIL is involved, - // in which case it's [0,optional_sequence::field_cnt) - int *seen = new int[end-begin]; - int num_seen = 0; - int last_any_elem = begin - 1; - // The index of the latest embedded value can change outside of this function - // (if the field is a untagged record of), in this case the next value should - // be ignored, as it's already been handled by the record of - int last_embval_index = 0; - for (i = begin; i < end; i++) { - for (success = reader.Ok(); success == 1; success = reader.Read()) { - type = reader.NodeType(); - if (0 != emb_val && reader.NodeType()==XML_READER_TYPE_TEXT) { - UNIVERSAL_CHARSTRING emb_ustr((const char*)reader.Value()); - emb_val->embval_array->get_at(emb_val->embval_index)->set_value(&emb_ustr); + // Nothing to order if there are no child elements + if (!tag_closed) { + Record_Type *jumbled = this; // the record affected by USE_ORDER + int begin = first_nonattr; + int end = field_cnt; // "one past" + if (p_td.xer_bits & USE_NIL) { + Base_Type *last_optional = get_at(field_cnt-1); + if (!usenil_attribute) { // exer known true + last_optional->set_to_present(); + jumbled = static_cast<Record_Type*>(last_optional->get_opt_value()); + // We will operate on the members of last_optional, + // effectively bypassing last_optional->XER_decode() itself. + begin = 0; + end = jumbled->get_count(); + ec_1.set_msg("%s': ", fld_name(field_cnt-1)); } - // The non-attribute components must not be UNTAGGED - if (type == XML_READER_TYPE_ELEMENT) break; - // else if (type==XML_READER_TYPE_END_ELEMENT) panic? } - if (0 != emb_val) { - if (last_embval_index == emb_val->embval_index) { - ++emb_val->embval_index; - } - last_embval_index = emb_val->embval_index; + if (num_attributes > 0 + && first_nonattr != field_cnt + && i == first_nonattr - 1) { // exer known true + // If there were attributes and their processing just finished, + // the reader is positioned on the start tag of the record. + // Move ahead, unless there are no non-attribute fields. + reader.Read(); } - if (success != 1) break; - const char *name = (const char *)reader.LocalName(); - boolean field_name_found = false; - // Find out which member it is. - // FIXME some hashing should be implemented - for (int k = begin; k < end; k++) { - if (!(jumbled->xer_descr(k)->xer_bits & ANY_ELEMENT) && - check_name(name, *jumbled->xer_descr(k), 1)) { - ec_1.set_msg("%s': ", jumbled->fld_name(k)); - - // Check for the same field being decoded twice. - // We can't use the field's is_bound()/is_present(), - // because the field may be bound on input, e.g. for - // prototype(fast) or prototype(backtrack). - int in_dex = k - begin; - for (int o = 0; o < num_seen ;++o) { - if (in_dex == seen[o]) TTCN_EncDec_ErrorContext::error( - TTCN_EncDec::ET_INVAL_MSG, "Duplicate element"); + // Then, the non-attributes + + // The index runs over the members affected by USE-ORDER. + // This is [first_nonattr,field_cnt) unless USE-NIL is involved, + // in which case it's [0,optional_sequence::field_cnt) + int *seen = new int[end-begin]; + int num_seen = 0; + int last_any_elem = begin - 1; + // The index of the latest embedded value can change outside of this function + // (if the field is an untagged record of), in this case the next value should + // be ignored, as it's already been handled by the record of + int last_embval_index = 0; + bool early_exit = false; + for (i = begin; i < end; i++) { + for (success = reader.Ok(); success == 1; success = reader.Read()) { + type = reader.NodeType(); + if (0 != emb_val && reader.NodeType()==XML_READER_TYPE_TEXT) { + UNIVERSAL_CHARSTRING emb_ustr((const char*)reader.Value()); + emb_val->embval_array->get_at(emb_val->embval_index)->set_value(&emb_ustr); + } + // The non-attribute components must not be UNTAGGED + if (type == XML_READER_TYPE_ELEMENT) break; + if (type == XML_READER_TYPE_END_ELEMENT) { + early_exit = true; + break; } - seen[num_seen++] = in_dex; - // Set the next use-order member. - // Non-const get_at creates the object in the record-of. - static_cast<Enum_Type*>(use_order->get_at(i - begin)) - ->from_int(in_dex); - Base_Type *b = jumbled->get_at(k); - b->XER_decode(*jumbled->xer_descr(k), reader, flavor, emb_val); - field_name_found = true; - break; } - } - if (!field_name_found) { - // Check the anyElement fields - for (int k = last_any_elem + 1; k < end; k++) { - if (jumbled->xer_descr(k)->xer_bits & ANY_ELEMENT) { + if (0 != emb_val) { + if (last_embval_index == emb_val->embval_index) { + ++emb_val->embval_index; + } + last_embval_index = emb_val->embval_index; + } + if (success != 1 || early_exit) break; + const char *name = (const char *)reader.LocalName(); + bool field_name_found = false; + // Find out which member it is. + // FIXME some hashing should be implemented + for (int k = begin; k < end; k++) { + if (!(jumbled->xer_descr(k)->xer_bits & ANY_ELEMENT) && + check_name(name, *jumbled->xer_descr(k), 1)) { ec_1.set_msg("%s': ", jumbled->fld_name(k)); // Check for the same field being decoded twice. @@ -5277,44 +5331,77 @@ int Record_Type::XER_decode(const XERdescriptor_t& p_td, XmlReaderWrap& reader, ->from_int(in_dex); Base_Type *b = jumbled->get_at(k); b->XER_decode(*jumbled->xer_descr(k), reader, flavor, emb_val); - last_any_elem = k; + field_name_found = true; break; } } + if (!field_name_found) { + // Check the anyElement fields + for (int k = last_any_elem + 1; k < end; k++) { + if (jumbled->xer_descr(k)->xer_bits & ANY_ELEMENT) { + ec_1.set_msg("%s': ", jumbled->fld_name(k)); + + // Check for the same field being decoded twice. + // We can't use the field's is_bound()/is_present(), + // because the field may be bound on input, e.g. for + // prototype(fast) or prototype(backtrack). + int in_dex = k - begin; + for (int o = 0; o < num_seen ;++o) { + if (in_dex == seen[o]) TTCN_EncDec_ErrorContext::error( + TTCN_EncDec::ET_INVAL_MSG, "Duplicate element"); + } + seen[num_seen++] = in_dex; + // Set the next use-order member. + // Non-const get_at creates the object in the record-of. + static_cast<Enum_Type*>(use_order->get_at(i - begin)) + ->from_int(in_dex); + Base_Type *b = jumbled->get_at(k); + b->XER_decode(*jumbled->xer_descr(k), reader, flavor, emb_val); + last_any_elem = k; + field_name_found = true; + break; + } + } + } + if (!field_name_found) { + TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_INVAL_MSG, + "Bad XML tag '%s' instead of a valid field", name); + break; + } + } // next field + if (0 != emb_val) { + if (reader.NodeType()==XML_READER_TYPE_TEXT) { + UNIVERSAL_CHARSTRING emb_ustr((const char*)reader.Value()); + emb_val->embval_array->get_at(emb_val->embval_index)->set_value(&emb_ustr); + } + if (last_embval_index == emb_val->embval_index) { + ++emb_val->embval_index; + } } - } // next field - if (0 != emb_val) { - if (reader.NodeType()==XML_READER_TYPE_TEXT) { - UNIVERSAL_CHARSTRING emb_ustr((const char*)reader.Value()); - emb_val->embval_array->get_at(emb_val->embval_index)->set_value(&emb_ustr); - } - if (last_embval_index == emb_val->embval_index) { - ++emb_val->embval_index; - } - } - delete [] seen; - ec_1.set_msg(" "); // no active component - ec_0.set_msg(" "); - - // Check that we collected the required number of children - int num_collected = use_order->size_of(); - if (p_td.xer_bits & USE_NIL) { - int expected = usenil_attribute ? 0 : jumbled->get_count(); - if (num_collected != expected) { - TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_INCOMPL_MSG, - "Incorrect number of fields %d, expected %d", - num_collected, expected); + delete [] seen; + ec_1.set_msg(" "); // no active component + ec_0.set_msg(" "); + + // Check that we collected the required number of children + int num_collected = use_order->size_of(); + if (p_td.xer_bits & USE_NIL) { + int expected = usenil_attribute ? 0 : jumbled->get_count(); + if (num_collected != expected) { + TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_INCOMPL_MSG, + "Incorrect number of fields %d, expected %d", + num_collected, expected); + } } - } - else { - if (num_collected < field_cnt - first_nonattr - n_optionals - ||num_collected > field_cnt - first_nonattr) { - TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_INCOMPL_MSG, - "Wrong number of fields! size = %d, expected %d..%d", - use_order->size_of(), field_cnt - first_nonattr - n_optionals, - field_cnt - first_nonattr); + else { + if (num_collected < field_cnt - first_nonattr - n_optionals + ||num_collected > field_cnt - first_nonattr) { + TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_INCOMPL_MSG, + "Wrong number of fields! size = %d, expected %d..%d", + use_order->size_of(), field_cnt - first_nonattr - n_optionals, + field_cnt - first_nonattr); + } } - } + } // not empty element } else { // not USE-ORDER, simpler code if (usenil_attribute) { @@ -5391,7 +5478,15 @@ int Record_Type::XER_decode(const XERdescriptor_t& p_td, XmlReaderWrap& reader, } // if embed-values } // if use-qname - + + // Check if every non-optional field has been set + for (i = 0; i < field_cnt; ++i) { + if (!get_at(i)->is_optional() && !get_at(i)->is_bound()) { + TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_INCOMPL_MSG, + "No data found for non-optional field '%s'", fld_name(i)); + } + } + if (own_tag) { // We had our start tag. Then our fields did their thing. // Now we expect the end tag. And it better be our end tag! @@ -5450,14 +5545,22 @@ int Record_Type::JSON_encode(const TTCN_Typedescriptor_t&, JSON_Tokenizer& p_tok int field_count = get_count(); for(int i = 0; i < field_count; ++i) { + boolean metainfo_unbound = NULL != fld_descr(i)->json && fld_descr(i)->json->metainfo_unbound; if ((NULL != fld_descr(i)->json && fld_descr(i)->json->omit_as_null) || - !get_at(i)->is_optional() || get_at(i)->is_present()) { - if (NULL != fld_descr(i)->json && NULL != fld_descr(i)->json->alias) { - enc_len += p_tok.put_next_token(JSON_TOKEN_NAME, fld_descr(i)->json->alias); - } else { - enc_len += p_tok.put_next_token(JSON_TOKEN_NAME, fld_name(i)); + get_at(i)->is_present() || metainfo_unbound) { + const char* field_name = (NULL != fld_descr(i)->json && NULL != fld_descr(i)->json->alias) ? + fld_descr(i)->json->alias : fld_name(i); + enc_len += p_tok.put_next_token(JSON_TOKEN_NAME, field_name); + if (metainfo_unbound && !get_at(i)->is_bound()) { + enc_len += p_tok.put_next_token(JSON_TOKEN_LITERAL_NULL); + char* metainfo_str = mprintf("metainfo %s", field_name); + enc_len += p_tok.put_next_token(JSON_TOKEN_NAME, metainfo_str); + Free(metainfo_str); + enc_len += p_tok.put_next_token(JSON_TOKEN_STRING, "\"unbound\""); + } + else { + enc_len += get_at(i)->JSON_encode(*fld_descr(i), p_tok); } - enc_len += get_at(i)->JSON_encode(*fld_descr(i), p_tok); } } @@ -5480,6 +5583,13 @@ int Record_Type::JSON_decode(const TTCN_Typedescriptor_t& p_td, JSON_Tokenizer& const int field_count = get_count(); + // initialize meta info states + int* metainfo = new int[field_count]; + for (int i = 0; i < field_count; ++i) { + metainfo[i] = (NULL != fld_descr(i)->json && fld_descr(i)->json->metainfo_unbound) ? + JSON_METAINFO_NONE : JSON_METAINFO_NOT_APPLICABLE; + } + while (true) { // Read name - value token pairs until we reach some other token char* name = 0; @@ -5496,6 +5606,14 @@ int Record_Type::JSON_decode(const TTCN_Typedescriptor_t& p_td, JSON_Tokenizer& break; } else { + // check for meta info + boolean is_metainfo = FALSE; + if (name_len > 9 && 0 == strncmp(name, "metainfo ", 9)) { + name += 9; + name_len -= 9; + is_metainfo = TRUE; + } + // check field name int field_idx; for (field_idx = 0; field_idx < field_count; ++field_idx) { @@ -5513,7 +5631,8 @@ int Record_Type::JSON_decode(const TTCN_Typedescriptor_t& p_td, JSON_Tokenizer& if (field_count == field_idx) { // invalid field name char* name2 = mcopystrn(name, name_len); - JSON_ERROR(TTCN_EncDec::ET_INVAL_MSG, JSON_DEC_INVALID_NAME_ERROR, name2); + JSON_ERROR(TTCN_EncDec::ET_INVAL_MSG, is_metainfo ? + JSON_DEC_METAINFO_NAME_ERROR : JSON_DEC_INVALID_NAME_ERROR, name2); // if this is set to a warning, skip the value of the field dec_len += p_tok.get_next_token(&token, NULL, NULL); if (JSON_TOKEN_NUMBER != token && JSON_TOKEN_STRING != token && @@ -5527,14 +5646,53 @@ int Record_Type::JSON_decode(const TTCN_Typedescriptor_t& p_td, JSON_Tokenizer& continue; } - int ret_val = get_at(field_idx)->JSON_decode(*fld_descr(field_idx), p_tok, p_silent); - if (0 > ret_val) { - if (JSON_ERROR_INVALID_TOKEN) { - JSON_ERROR(TTCN_EncDec::ET_INVAL_MSG, JSON_DEC_FIELD_TOKEN_ERROR, fld_name(field_idx)); + if (is_metainfo) { + if (JSON_METAINFO_NOT_APPLICABLE != metainfo[field_idx]) { + // check meta info + char* info_value = 0; + size_t info_len = 0; + dec_len += p_tok.get_next_token(&token, &info_value, &info_len); + if (JSON_TOKEN_STRING == token && 9 == info_len && + 0 == strncmp(info_value, "\"unbound\"", 9)) { + metainfo[field_idx] = JSON_METAINFO_UNBOUND; + } + else { + JSON_ERROR(TTCN_EncDec::ET_INVAL_MSG, JSON_DEC_METAINFO_VALUE_ERROR, + fld_name(field_idx)); + return JSON_ERROR_FATAL; + } + } + else { + JSON_ERROR(TTCN_EncDec::ET_INVAL_MSG, JSON_DEC_METAINFO_NOT_APPLICABLE, + fld_name(field_idx)); + return JSON_ERROR_FATAL; } - return JSON_ERROR_FATAL; } - dec_len += ret_val; + else { + buf_pos = p_tok.get_buf_pos(); + int ret_val = get_at(field_idx)->JSON_decode(*fld_descr(field_idx), p_tok, p_silent); + if (0 > ret_val) { + if (JSON_ERROR_INVALID_TOKEN == ret_val) { + // undo the last action on the buffer, check if the invalid token was a null token + p_tok.set_buf_pos(buf_pos); + p_tok.get_next_token(&token, NULL, NULL); + if (JSON_TOKEN_LITERAL_NULL == token) { + if (JSON_METAINFO_NONE == metainfo[field_idx]) { + // delay reporting an error for now, there might be meta info later + metainfo[field_idx] = JSON_METAINFO_NEEDED; + continue; + } + else if (JSON_METAINFO_UNBOUND == metainfo[field_idx]) { + // meta info already found + continue; + } + } + JSON_ERROR(TTCN_EncDec::ET_INVAL_MSG, JSON_DEC_FIELD_TOKEN_ERROR, fld_name(field_idx)); + } + return JSON_ERROR_FATAL; + } + dec_len += ret_val; + } } } @@ -5544,10 +5702,17 @@ int Record_Type::JSON_decode(const TTCN_Typedescriptor_t& p_td, JSON_Tokenizer& return JSON_ERROR_FATAL; } - // Check if every field has been set + // Check if every field has been set and handle meta info for (int field_idx = 0; field_idx < field_count; ++field_idx) { Base_Type* field = get_at(field_idx); - if (!field->is_bound()) { + if (JSON_METAINFO_UNBOUND == metainfo[field_idx]) { + field->clean_up(); + } + else if (JSON_METAINFO_NEEDED == metainfo[field_idx]) { + // no meta info was found for this field, report the delayed error + JSON_ERROR(TTCN_EncDec::ET_INVAL_MSG, JSON_DEC_FIELD_TOKEN_ERROR, fld_name(field_idx)); + } + else if (!field->is_bound()) { if (NULL != fld_descr(field_idx)->json && NULL != fld_descr(field_idx)->json->default_value) { get_at(field_idx)->JSON_decode(*fld_descr(field_idx), DUMMY_BUFFER, p_silent); } @@ -5560,6 +5725,8 @@ int Record_Type::JSON_decode(const TTCN_Typedescriptor_t& p_td, JSON_Tokenizer& } } + delete metainfo; + return dec_len; } @@ -5593,12 +5760,24 @@ void Empty_Record_Type::log() const void Empty_Record_Type::set_param(Module_Param& param) { param.basic_check(Module_Param::BC_VALUE, "empty record/set value (i.e. { })"); - if (param.get_type()!=Module_Param::MP_Value_List || param.get_size()>0) { + Module_Param_Ptr mp = ¶m; + if (param.get_type() == Module_Param::MP_Reference) { + mp = param.get_referenced_param(); + } + if (mp->get_type()!=Module_Param::MP_Value_List || mp->get_size()>0) { param.type_error("empty record/set value (i.e. { })", get_descriptor()->name); } bound_flag = TRUE; } +Module_Param* Empty_Record_Type::get_param(Module_Param_Name& /* param_name */) const +{ + if (!is_bound()) { + return new Module_Param_Unbound(); + } + return new Module_Param_Value_List(); +} + void Empty_Record_Type::encode_text(Text_Buf& /*text_buf*/) const { if (!bound_flag) diff --git a/core2/Makefile b/core2/Makefile index a597ae23a..2444bcdf8 100644 --- a/core2/Makefile +++ b/core2/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/doc/parallelarch/Makefile b/doc/parallelarch/Makefile index e7f356851..93c3b0a92 100644 --- a/doc/parallelarch/Makefile +++ b/doc/parallelarch/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/doc/parallelarch/state_mach_conn_endpoint.dot b/doc/parallelarch/state_mach_conn_endpoint.dot index a5fdf6001..564d40680 100644 --- a/doc/parallelarch/state_mach_conn_endpoint.dot +++ b/doc/parallelarch/state_mach_conn_endpoint.dot @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/doc/parallelarch/state_mach_conn_mc.dot b/doc/parallelarch/state_mach_conn_mc.dot index 2d6dde040..68dc9def7 100644 --- a/doc/parallelarch/state_mach_conn_mc.dot +++ b/doc/parallelarch/state_mach_conn_mc.dot @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/doc/parallelarch/state_mach_hc_mc.dot b/doc/parallelarch/state_mach_hc_mc.dot index 08f0e44c4..4d9f199c5 100644 --- a/doc/parallelarch/state_mach_hc_mc.dot +++ b/doc/parallelarch/state_mach_hc_mc.dot @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/doc/parallelarch/state_mach_mapping_mc.dot b/doc/parallelarch/state_mach_mapping_mc.dot index ad8e59102..5c3cfb448 100644 --- a/doc/parallelarch/state_mach_mapping_mc.dot +++ b/doc/parallelarch/state_mach_mapping_mc.dot @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/doc/parallelarch/state_mach_mc.dot b/doc/parallelarch/state_mach_mc.dot index 1622650ca..99c06bd0e 100644 --- a/doc/parallelarch/state_mach_mc.dot +++ b/doc/parallelarch/state_mach_mc.dot @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/doc/parallelarch/state_mach_ptc_mc.dot b/doc/parallelarch/state_mach_ptc_mc.dot index 65585c6a9..0a7a21d77 100644 --- a/doc/parallelarch/state_mach_ptc_mc.dot +++ b/doc/parallelarch/state_mach_ptc_mc.dot @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/etc/Makefile b/etc/Makefile index 68ea35628..fffb344bf 100644 --- a/etc/Makefile +++ b/etc/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/etc/TXDSample.xml b/etc/TXDSample.xml index dc866a4d3..1068532e9 100644 --- a/etc/TXDSample.xml +++ b/etc/TXDSample.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/etc/autotest/freshbuild.sh b/etc/autotest/freshbuild.sh index 774764a1a..7033d8c75 100755 --- a/etc/autotest/freshbuild.sh +++ b/etc/autotest/freshbuild.sh @@ -1,6 +1,6 @@ #!/bin/bash ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/etc/autotest/mountall.sh b/etc/autotest/mountall.sh index 22692fe7f..663edd451 100755 --- a/etc/autotest/mountall.sh +++ b/etc/autotest/mountall.sh @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/etc/autotest/product_handler.py b/etc/autotest/product_handler.py index 60af9e11e..fd1ca579a 100755 --- a/etc/autotest/product_handler.py +++ b/etc/autotest/product_handler.py @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/etc/autotest/titan_builder.py b/etc/autotest/titan_builder.py index b567e2256..ad371a230 100755 --- a/etc/autotest/titan_builder.py +++ b/etc/autotest/titan_builder.py @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/etc/autotest/titan_builder.sh b/etc/autotest/titan_builder.sh index eab3d4ff8..f0510df4a 100755 --- a/etc/autotest/titan_builder.sh +++ b/etc/autotest/titan_builder.sh @@ -1,6 +1,6 @@ #!/bin/bash -x ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/etc/autotest/titan_builder_cfg.py b/etc/autotest/titan_builder_cfg.py index 8c8bcefec..907045893 100755 --- a/etc/autotest/titan_builder_cfg.py +++ b/etc/autotest/titan_builder_cfg.py @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/etc/autotest/titan_publisher.py b/etc/autotest/titan_publisher.py index e4515b7e1..2dcfb51a7 100755 --- a/etc/autotest/titan_publisher.py +++ b/etc/autotest/titan_publisher.py @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/etc/howto/pqb_stats_howto.txt b/etc/howto/pqb_stats_howto.txt index 7f5645b18..fb035bfba 100755 --- a/etc/howto/pqb_stats_howto.txt +++ b/etc/howto/pqb_stats_howto.txt @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/etc/howto/titan_release_howto.txt b/etc/howto/titan_release_howto.txt index 1308de9bb..d361ef8d7 100755 --- a/etc/howto/titan_release_howto.txt +++ b/etc/howto/titan_release_howto.txt @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/etc/scripts/cfg_msg_maker.py b/etc/scripts/cfg_msg_maker.py index cae6bf1ea..907937d41 100644 --- a/etc/scripts/cfg_msg_maker.py +++ b/etc/scripts/cfg_msg_maker.py @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/etc/scripts/stacklogger.pl b/etc/scripts/stacklogger.pl index 4c9178436..d7d12fe35 100644 --- a/etc/scripts/stacklogger.pl +++ b/etc/scripts/stacklogger.pl @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/etc/scripts/tpd_graph_xml2dot.py b/etc/scripts/tpd_graph_xml2dot.py index 6ba8736d8..6003bbc8f 100644 --- a/etc/scripts/tpd_graph_xml2dot.py +++ b/etc/scripts/tpd_graph_xml2dot.py @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/etc/scripts/ttcn3_archive.pl b/etc/scripts/ttcn3_archive.pl index 058f5e34f..2c5f0b86a 100644 --- a/etc/scripts/ttcn3_archive.pl +++ b/etc/scripts/ttcn3_archive.pl @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/etc/solaris/build.sh b/etc/solaris/build.sh index 33edafe5e..8de9dc510 100755 --- a/etc/solaris/build.sh +++ b/etc/solaris/build.sh @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/etc/solaris/get.sh b/etc/solaris/get.sh index b36952e7b..8ffdfdb98 100755 --- a/etc/solaris/get.sh +++ b/etc/solaris/get.sh @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/etc/solaris/path.sh b/etc/solaris/path.sh index 4d15c4b6f..6600e00df 100755 --- a/etc/solaris/path.sh +++ b/etc/solaris/path.sh @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/etc/solaris/titan.sh b/etc/solaris/titan.sh index 7f61f7582..31c996ee9 100755 --- a/etc/solaris/titan.sh +++ b/etc/solaris/titan.sh @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/etc/xsd/Junit.xsd b/etc/xsd/Junit.xsd index 8c31d75ab..028ed8e9b 100644 --- a/etc/xsd/Junit.xsd +++ b/etc/xsd/Junit.xsd @@ -2,7 +2,7 @@ <!-- XML Schema for JunitLogger plugin - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/etc/xsd/TPD.xsd b/etc/xsd/TPD.xsd index d56c8e15f..7d952d119 100644 --- a/etc/xsd/TPD.xsd +++ b/etc/xsd/TPD.xsd @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- -XML Schema for JunitLogger plugin +XML Schema for TITAN_Project_File_Information - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 @@ -104,12 +104,14 @@ XML Schema for JunitLogger plugin <xs:element name="addSourceLineInfo" minOccurs="0" maxOccurs="1" type="xs:boolean" /> <xs:element name="suppressWarnings" minOccurs="0" maxOccurs="1" type="xs:boolean" /> <xs:element name="outParamBoundness" minOccurs="0" maxOccurs="1" type="xs:boolean" /> + <xs:element name="omitInValueList" minOccurs="0" maxOccurs="1" type="xs:boolean" /> <xs:element name="quietly" minOccurs="0" maxOccurs="1" type="xs:boolean" /> <xs:element name="namingRules" minOccurs="0" maxOccurs="1" type="xs:normalizedString" /> <xs:element name="disableSubtypeChecking" minOccurs="0" maxOccurs="1" type="xs:boolean" /> <xs:element name="CxxCompiler" minOccurs="0" maxOccurs="1" type="xs:normalizedString" /> <xs:element name="optimizationLevel" minOccurs="0" maxOccurs="1" type="xs:normalizedString" /> - <xs:element name="otherOptimizationFlags" minOccurs="0" maxOccurs="1" type="xs:string" /> + <xs:element name="otherOptimizationFlags" minOccurs="0" maxOccurs="1" type="xs:string" /> + <xs:element name="profiledFileList" minOccurs="0" maxOccurs="1" type="ResourceType" /> <xs:element name="SolarisSpecificLibraries" minOccurs="0" maxOccurs="1"> <xs:complexType> @@ -168,6 +170,8 @@ XML Schema for JunitLogger plugin </xs:complexType> </xs:element> <xs:element name="disablePredefinedExternalFolder" minOccurs="0" maxOccurs="1" type="xs:boolean" /> + <xs:element name="useGoldLinker" minOccurs="0" maxOccurs="1" type="xs:boolean" /> + <xs:element name="freeTextLinkerOptions" minOccurs="0" maxOccurs="1" type="xs:normalizedString" /> <xs:element name="buildLevel" minOccurs="0" maxOccurs="1" type="xs:string" /> <xs:element name="ProjectSpecificRulesGenerator" minOccurs="0" maxOccurs="1"> <xs:complexType> diff --git a/function_test/BER_EncDec/BER_EncDec_TD.fast_script b/function_test/BER_EncDec/BER_EncDec_TD.fast_script index 49b8a3e8d..cff9a7cd4 100644 --- a/function_test/BER_EncDec/BER_EncDec_TD.fast_script +++ b/function_test/BER_EncDec/BER_EncDec_TD.fast_script @@ -1,5 +1,5 @@ .****************************************************************************** -.* Copyright (c) 2000-2014 Ericsson Telecom AB +.* Copyright (c) 2000-2015 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 diff --git a/function_test/BER_EncDec/BER_EncDec_TD.script b/function_test/BER_EncDec/BER_EncDec_TD.script index 271cbb94d..53ac0e0af 100644 --- a/function_test/BER_EncDec/BER_EncDec_TD.script +++ b/function_test/BER_EncDec/BER_EncDec_TD.script @@ -1,5 +1,5 @@ .****************************************************************************** -.* Copyright (c) 2000-2014 Ericsson Telecom AB +.* Copyright (c) 2000-2015 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 diff --git a/function_test/BER_EncDec/Makefile b/function_test/BER_EncDec/Makefile index d8097b7dd..e3745f7be 100644 --- a/function_test/BER_EncDec/Makefile +++ b/function_test/BER_EncDec/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 @@ -23,6 +23,10 @@ # Set these variables... # +TOP := ../../ +include $(TOP)/Makefile.cfg + + # The path of your TTCN-3 Test Executor installation: # Uncomment this line to override the environment variable. # TTCN3_DIR = @@ -35,7 +39,6 @@ endif # Your C++ compiler: CXX = g++ -XMLDIR = /mnt/TTCN/Tools/libxml2-2.7.1 # Flags for the C++ preprocessor (and makedepend as well): CPPFLAGS = -D$(PLATFORM) -I$(TTCN3_DIR)/include -I$(XMLDIR)/include/libxml2 ifdef RT2 @@ -95,6 +98,7 @@ OBJECTS = Temp.o TempA.o TARGET = Temp ifdef COVERAGE +CPPFLAGS += -fprofile-arcs -ftest-coverage -g CXXFLAGS += -fprofile-arcs -ftest-coverage -g LDFLAGS += -fprofile-arcs -ftest-coverage -g -lgcov endif diff --git a/function_test/BER_EncDec/Temp.cfg b/function_test/BER_EncDec/Temp.cfg index e58216eb8..1cde7caf3 100644 --- a/function_test/BER_EncDec/Temp.cfg +++ b/function_test/BER_EncDec/Temp.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/function_test/Config_Parser/Logging_1_TD.script b/function_test/Config_Parser/Logging_1_TD.script index e3a6a6c07..fbbef50a1 100755 --- a/function_test/Config_Parser/Logging_1_TD.script +++ b/function_test/Config_Parser/Logging_1_TD.script @@ -1,5 +1,5 @@ .****************************************************************************** -.* Copyright (c) 2000-2014 Ericsson Telecom AB +.* Copyright (c) 2000-2015 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 @@ -1575,71 +1575,74 @@ tsp_union := ENUM_1 Temp.control <END_MODULE> -<RESULT COUNT 26> +<RESULT COUNT 24> (?im)Error while setting parameter field 'tsp_integer' <END_RESULT> -<RESULT COUNT 28> +<RESULT COUNT 26> (?im)Error while setting parameter field 'tsp_float' <END_RESULT> -<RESULT COUNT 28> +<RESULT COUNT 26> (?im)Error while setting parameter field 'tsp_boolean' <END_RESULT> -<RESULT COUNT 28> +<RESULT COUNT 26> (?im)Error while setting parameter field 'tsp_objid' <END_RESULT> -<RESULT COUNT 28> +<RESULT COUNT 26> (?im)Error while setting parameter field 'tsp_verdict' <END_RESULT> -<RESULT COUNT 28> +<RESULT COUNT 26> (?im)Error while setting parameter field 'tsp_bitstring' <END_RESULT> -<RESULT COUNT 28> +<RESULT COUNT 26> (?im)Error while setting parameter field 'tsp_hexstring' <END_RESULT> -<RESULT COUNT 28> +<RESULT COUNT 26> (?im)Error while setting parameter field 'tsp_octetstring' <END_RESULT> -<RESULT COUNT 28> +<RESULT COUNT 26> (?im)Error while setting parameter field 'tsp_charstring' <END_RESULT> -<RESULT COUNT 26> +<RESULT COUNT 24> (?im)Error while setting parameter field 'tsp_universal_charstring' <END_RESULT> <RESULT COUNT 28> (?im)Error while setting parameter field 'tsp_enumerated' <END_RESULT> -<RESULT COUNT 28> +<RESULT COUNT 26> (?im)Error while setting parameter field 'tsp_record' <END_RESULT> <RESULT COUNT 2> (?im)Error while setting parameter field 'tsp_record.nonexistent1' <END_RESULT> -<RESULT COUNT 26> +<RESULT COUNT 24> (?im)Error while setting parameter field 'tsp_record_of' <END_RESULT> -<RESULT COUNT 28> +<RESULT COUNT 26> (?im)Error while setting parameter field 'tsp_set' <END_RESULT> <RESULT COUNT 2> (?im)Error while setting parameter field 'tsp_set.nonexistent1' <END_RESULT> -<RESULT COUNT 26> +<RESULT COUNT 24> (?im)Error while setting parameter field 'tsp_set_of' <END_RESULT> -<RESULT COUNT 26> +<RESULT COUNT 24> (?im)Error while setting parameter field 'tsp_anytype' <END_RESULT> <RESULT COUNT 2> (?im)Error while setting parameter field 'tsp_anytype.field3' <END_RESULT> -<RESULT COUNT 26> +<RESULT COUNT 24> (?im)Error while setting parameter field 'tsp_union' <END_RESULT> <RESULT COUNT 2> (?im)Error while setting parameter field 'tsp_union.field3' <END_RESULT> <RESULT COUNT 1> -(?im)Test execution summary: 0 test case was executed. Overall verdict: none +(?im)Test execution summary: 0 test case was executed. Overall verdict: error +<END_RESULT> +<RESULT COUNT 16> +Dynamic test case error: Referenced module parameter cannot be found. <END_RESULT> <RESULT COUNT 1> @@ -1797,7 +1800,7 @@ tsp_anytype &= {integer := 3} [EXECUTE] Temp.control <END_MODULE> -<RESULT COUNT 28> +<RESULT COUNT 26> (?im)Error while concatenating parameter field 'tsp_ROI' <END_RESULT> <RESULT COUNT 4> @@ -1809,7 +1812,7 @@ Temp.control <RESULT COUNT 2> (?im)Error while setting parameter field 'tsp_ROROI\[0\]' <END_RESULT> -<RESULT COUNT 28> +<RESULT COUNT 26> (?im)Error while concatenating parameter field 'tsp_SOI' <END_RESULT> <RESULT COUNT 4> @@ -1863,6 +1866,9 @@ Temp.control <RESULT COUNT 4> (?im)Error while concatenating parameter field 'tsp_anytype' <END_RESULT> +<RESULT COUNT 2> +Dynamic test case error: Referenced module parameter cannot be found. +<END_RESULT> <END_TC> @@ -2208,67 +2214,70 @@ tsp_union := ENUM_1 Temp.control <END_MODULE> -<RESULT COUNT 26> +<RESULT COUNT 24> (?im)Error while setting parameter field 'tsp_integer' <END_RESULT> -<RESULT COUNT 28> +<RESULT COUNT 26> (?im)Error while setting parameter field 'tsp_float' <END_RESULT> -<RESULT COUNT 28> +<RESULT COUNT 26> (?im)Error while setting parameter field 'tsp_boolean' <END_RESULT> -<RESULT COUNT 28> +<RESULT COUNT 26> (?im)Error while setting parameter field 'tsp_objid' <END_RESULT> -<RESULT COUNT 28> +<RESULT COUNT 26> (?im)Error while setting parameter field 'tsp_verdict' <END_RESULT> -<RESULT COUNT 28> +<RESULT COUNT 26> (?im)Error while setting parameter field 'tsp_bitstring' <END_RESULT> -<RESULT COUNT 28> +<RESULT COUNT 26> (?im)Error while setting parameter field 'tsp_hexstring' <END_RESULT> -<RESULT COUNT 28> +<RESULT COUNT 26> (?im)Error while setting parameter field 'tsp_octetstring' <END_RESULT> -<RESULT COUNT 28> +<RESULT COUNT 26> (?im)Error while setting parameter field 'tsp_charstring' <END_RESULT> -<RESULT COUNT 26> +<RESULT COUNT 24> (?im)Error while setting parameter field 'tsp_universal_charstring' <END_RESULT> <RESULT COUNT 28> (?im)Error while setting parameter field 'tsp_enumerated' <END_RESULT> -<RESULT COUNT 28> +<RESULT COUNT 26> (?im)Error while setting parameter field 'tsp_record' <END_RESULT> <RESULT COUNT 2> (?im)Error while setting parameter field 'tsp_record.nonexistent1' <END_RESULT> -<RESULT COUNT 26> +<RESULT COUNT 24> (?im)Error while setting parameter field 'tsp_record_of' <END_RESULT> -<RESULT COUNT 28> +<RESULT COUNT 26> (?im)Error while setting parameter field 'tsp_set' <END_RESULT> <RESULT COUNT 2> (?im)Error while setting parameter field 'tsp_set.nonexistent1' <END_RESULT> -<RESULT COUNT 26> +<RESULT COUNT 24> (?im)Error while setting parameter field 'tsp_set_of' <END_RESULT> -<RESULT COUNT 26> +<RESULT COUNT 24> (?im)Error while setting parameter field 'tsp_anytype' <END_RESULT> -<RESULT COUNT 26> +<RESULT COUNT 24> (?im)Error while setting parameter field 'tsp_union' <END_RESULT> <RESULT COUNT 1> (?im)There were errors during configuring HCs. <END_RESULT> +<RESULT COUNT 16> +Dynamic test case error: Referenced module parameter cannot be found. +<END_RESULT> <RESULT COUNT 1> <END_RESULT> @@ -2425,7 +2434,7 @@ tsp_anytype &= {integer := 3} [EXECUTE] Temp.control <END_MODULE> -<RESULT COUNT 28> +<RESULT COUNT 26> (?im)Error while concatenating parameter field 'tsp_ROI' <END_RESULT> <RESULT COUNT 4> @@ -2437,7 +2446,7 @@ Temp.control <RESULT COUNT 2> (?im)Error while setting parameter field 'tsp_ROROI\[0\]' <END_RESULT> -<RESULT COUNT 28> +<RESULT COUNT 26> (?im)Error while concatenating parameter field 'tsp_SOI' <END_RESULT> <RESULT COUNT 4> @@ -2491,6 +2500,9 @@ Temp.control <RESULT COUNT 4> (?im)Error while concatenating parameter field 'tsp_anytype' <END_RESULT> +<RESULT COUNT 2> +Dynamic test case error: Referenced module parameter cannot be found. +<END_RESULT> <END_TC> diff --git a/function_test/Config_Parser/OrderedInclude.script b/function_test/Config_Parser/OrderedInclude.script index e22683fda..83a4b38f7 100644 --- a/function_test/Config_Parser/OrderedInclude.script +++ b/function_test/Config_Parser/OrderedInclude.script @@ -1,5 +1,5 @@ .****************************************************************************** -.* Copyright (c) 2000-2014 Ericsson Telecom AB +.* Copyright (c) 2000-2015 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 diff --git a/function_test/Config_Parser/PreprocessingCfgFiles_TD.script b/function_test/Config_Parser/PreprocessingCfgFiles_TD.script index 19926d924..6df2d6f6b 100644 --- a/function_test/Config_Parser/PreprocessingCfgFiles_TD.script +++ b/function_test/Config_Parser/PreprocessingCfgFiles_TD.script @@ -1,5 +1,5 @@ .****************************************************************************** -.* Copyright (c) 2000-2014 Ericsson Telecom AB +.* Copyright (c) 2000-2015 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 @@ -1296,8 +1296,8 @@ control{} [EXECUTE] Temp.control <END_MODULE> -<RESULT IF_PASS COUNT 2> -Error while setting parameter field +<RESULT IF_PASS COUNT 1> +Dynamic test case error: Referenced module parameter cannot be found. <END_RESULT> <END_TC> @@ -1327,8 +1327,8 @@ DEF_1:={ f3:=${DEF_1_f} } [MODULE_PARAMETERS] tsp_1 := ${DEF_1} <END_MODULE> -<RESULT IF_PASS COUNT 2> -Error while setting parameter field +<RESULT IF_PASS COUNT 1> +Dynamic test case error: Referenced module parameter cannot be found. <END_RESULT> <END_TC> @@ -1674,8 +1674,8 @@ control{} [EXECUTE] Temp.control <END_MODULE> -<RESULT IF_PASS COUNT 2> -Error while setting parameter field +<RESULT IF_PASS COUNT 1> +Dynamic test case error: Referenced module parameter cannot be found. <END_RESULT> <END_TC> @@ -1705,8 +1705,8 @@ DEF_1:={ f3:=${DEF_1_f} } [MODULE_PARAMETERS] tsp_1 := ${DEF_1} <END_MODULE> -<RESULT IF_PASS COUNT 2> -Error while setting parameter field +<RESULT IF_PASS COUNT 1> +Dynamic test case error: Referenced module parameter cannot be found. <END_RESULT> <END_TC> diff --git a/function_test/Config_Parser/begin_script.sh b/function_test/Config_Parser/begin_script.sh index 834124e97..705346256 100755 --- a/function_test/Config_Parser/begin_script.sh +++ b/function_test/Config_Parser/begin_script.sh @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/function_test/Config_Parser/end_script.sh b/function_test/Config_Parser/end_script.sh index 3b5d7da3f..e0daa87a1 100755 --- a/function_test/Config_Parser/end_script.sh +++ b/function_test/Config_Parser/end_script.sh @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/function_test/Config_Parser/extfunc.cc b/function_test/Config_Parser/extfunc.cc index 8d91d3833..d729ad778 100755 --- a/function_test/Config_Parser/extfunc.cc +++ b/function_test/Config_Parser/extfunc.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/function_test/Makefile b/function_test/Makefile index cf129617b..647ba8a0b 100644 --- a/function_test/Makefile +++ b/function_test/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/function_test/RAW_EncDec/Makefile b/function_test/RAW_EncDec/Makefile index d9c52ebda..0de92d788 100644 --- a/function_test/RAW_EncDec/Makefile +++ b/function_test/RAW_EncDec/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 @@ -20,6 +20,10 @@ # Set these variables... # +TOP := ../../ +include $(TOP)/Makefile.cfg + + # The path of your TTCN-3 Test Executor installation: # Uncomment this line to override the environment variable. # TTCN3_DIR = @@ -32,7 +36,6 @@ endif # Your C++ compiler: CXX = g++ -XMLDIR = /mnt/TTCN/Tools/libxml2-2.7.1 # Flags for the C++ preprocessor (and makedepend as well): CPPFLAGS = -D$(PLATFORM) -I$(TTCN3_DIR)/include -I$(XMLDIR)/include/libxml2 ifdef RT2 @@ -91,6 +94,7 @@ OBJECTS = Temp.o TARGET = Temp ifdef COVERAGE +CPPFLAGS += -fprofile-arcs -ftest-coverage -g CXXFLAGS += -fprofile-arcs -ftest-coverage -g LDFLAGS += -fprofile-arcs -ftest-coverage -g -lgcov endif diff --git a/function_test/RAW_EncDec/RAW_EncDec_TD.fast_script b/function_test/RAW_EncDec/RAW_EncDec_TD.fast_script index fd145b621..87f6e62de 100644 --- a/function_test/RAW_EncDec/RAW_EncDec_TD.fast_script +++ b/function_test/RAW_EncDec/RAW_EncDec_TD.fast_script @@ -1,5 +1,5 @@ .****************************************************************************** -.* Copyright (c) 2000-2014 Ericsson Telecom AB +.* Copyright (c) 2000-2015 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 diff --git a/function_test/RAW_EncDec/RAW_EncDec_TD.script b/function_test/RAW_EncDec/RAW_EncDec_TD.script index 4a9a0314b..b44f99c7e 100644 --- a/function_test/RAW_EncDec/RAW_EncDec_TD.script +++ b/function_test/RAW_EncDec/RAW_EncDec_TD.script @@ -1,5 +1,5 @@ .****************************************************************************** -.* Copyright (c) 2000-2014 Ericsson Telecom AB +.* Copyright (c) 2000-2015 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 diff --git a/function_test/RAW_EncDec/Temp.cfg b/function_test/RAW_EncDec/Temp.cfg index e58216eb8..1cde7caf3 100644 --- a/function_test/RAW_EncDec/Temp.cfg +++ b/function_test/RAW_EncDec/Temp.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/function_test/README.txt b/function_test/README.txt index 489fbbbe9..6eadceae5 100755 --- a/function_test/README.txt +++ b/function_test/README.txt @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/ASN_SA_1_TD.script b/function_test/Semantic_Analyser/ASN_SA_1_TD.script index d3dedc04f..589eb0f50 100644 --- a/function_test/Semantic_Analyser/ASN_SA_1_TD.script +++ b/function_test/Semantic_Analyser/ASN_SA_1_TD.script @@ -1,5 +1,5 @@ .****************************************************************************** -.* Copyright (c) 2000-2014 Ericsson Telecom AB +.* Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/ASN_SA_asn1adhoc_TD.script b/function_test/Semantic_Analyser/ASN_SA_asn1adhoc_TD.script index f4436d6ac..d443f94fb 100644 --- a/function_test/Semantic_Analyser/ASN_SA_asn1adhoc_TD.script +++ b/function_test/Semantic_Analyser/ASN_SA_asn1adhoc_TD.script @@ -1,5 +1,5 @@ .****************************************************************************** -.* Copyright (c) 2000-2014 Ericsson Telecom AB +.* Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/Makefile.semantic b/function_test/Semantic_Analyser/Makefile.semantic index ef604e024..28a394d53 100644 --- a/function_test/Semantic_Analyser/Makefile.semantic +++ b/function_test/Semantic_Analyser/Makefile.semantic @@ -1,11 +1,11 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 ############################################################################### -SADIRS := ver xer encode param +SADIRS := ver xer encode param template_restrictions #$(wildcard TTCN3_[a0-9]* ASN_[a0-9]*) ver xer all run check clean distclean: diff --git a/function_test/Semantic_Analyser/SA_6_TD.script b/function_test/Semantic_Analyser/SA_6_TD.script index bf9a3230b..e5d490210 100644 --- a/function_test/Semantic_Analyser/SA_6_TD.script +++ b/function_test/Semantic_Analyser/SA_6_TD.script @@ -1,5 +1,5 @@ .****************************************************************************** -.* Copyright (c) 2000-2014 Ericsson Telecom AB +.* Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/TTCN3_SA_10_TD.script b/function_test/Semantic_Analyser/TTCN3_SA_10_TD.script index 3d0552ce9..8c5a32aa2 100644 --- a/function_test/Semantic_Analyser/TTCN3_SA_10_TD.script +++ b/function_test/Semantic_Analyser/TTCN3_SA_10_TD.script @@ -1,5 +1,5 @@ .****************************************************************************** -.* Copyright (c) 2000-2014 Ericsson Telecom AB +.* Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/TTCN3_SA_11_TD.script b/function_test/Semantic_Analyser/TTCN3_SA_11_TD.script index 03373a9c4..1dc98c0a9 100644 --- a/function_test/Semantic_Analyser/TTCN3_SA_11_TD.script +++ b/function_test/Semantic_Analyser/TTCN3_SA_11_TD.script @@ -1,5 +1,5 @@ .****************************************************************************** -.* Copyright (c) 2000-2014 Ericsson Telecom AB +.* Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/TTCN3_SA_13_TD.script b/function_test/Semantic_Analyser/TTCN3_SA_13_TD.script index 3011ec228..e3abe004b 100644 --- a/function_test/Semantic_Analyser/TTCN3_SA_13_TD.script +++ b/function_test/Semantic_Analyser/TTCN3_SA_13_TD.script @@ -1,5 +1,5 @@ .****************************************************************************** -.* Copyright (c) 2000-2014 Ericsson Telecom AB +.* Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/TTCN3_SA_1_TD.script b/function_test/Semantic_Analyser/TTCN3_SA_1_TD.script index f4c5b926d..2d389814d 100644 --- a/function_test/Semantic_Analyser/TTCN3_SA_1_TD.script +++ b/function_test/Semantic_Analyser/TTCN3_SA_1_TD.script @@ -1,5 +1,5 @@ .****************************************************************************** -.* Copyright (c) 2000-2014 Ericsson Telecom AB +.* Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/TTCN3_SA_3_TD.script b/function_test/Semantic_Analyser/TTCN3_SA_3_TD.script index 5ced083cd..335156284 100644 --- a/function_test/Semantic_Analyser/TTCN3_SA_3_TD.script +++ b/function_test/Semantic_Analyser/TTCN3_SA_3_TD.script @@ -1,5 +1,5 @@ .****************************************************************************** -.* Copyright (c) 2000-2014 Ericsson Telecom AB +.* Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/TTCN3_SA_4_TD.script b/function_test/Semantic_Analyser/TTCN3_SA_4_TD.script index bde23e488..346ec7d32 100644 --- a/function_test/Semantic_Analyser/TTCN3_SA_4_TD.script +++ b/function_test/Semantic_Analyser/TTCN3_SA_4_TD.script @@ -1,5 +1,5 @@ .****************************************************************************** -.* Copyright (c) 2000-2014 Ericsson Telecom AB +.* Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/TTCN3_SA_5_TD.script b/function_test/Semantic_Analyser/TTCN3_SA_5_TD.script index 86e414e24..f955987ec 100644 --- a/function_test/Semantic_Analyser/TTCN3_SA_5_TD.script +++ b/function_test/Semantic_Analyser/TTCN3_SA_5_TD.script @@ -1,5 +1,5 @@ .****************************************************************************** -.* Copyright (c) 2000-2014 Ericsson Telecom AB +.* Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/TTCN3_SA_6_TD.script b/function_test/Semantic_Analyser/TTCN3_SA_6_TD.script index b86039917..ac36eca81 100644 --- a/function_test/Semantic_Analyser/TTCN3_SA_6_TD.script +++ b/function_test/Semantic_Analyser/TTCN3_SA_6_TD.script @@ -1,5 +1,5 @@ .****************************************************************************** -.* Copyright (c) 2000-2014 Ericsson Telecom AB +.* Copyright (c) 2000-2015 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 @@ -2135,7 +2135,7 @@ template recT r:={ f3:= "aiyyo" } -template recT f modifies r:= ({ f1:= 1, f2:= 0.9 }, omit); +template recT f modifies r:= ({ f1:= 1, f2:= 0.9 }, { f1 := 1, f2 := 0.9, f3 := "pppp" }); } <END_MODULE> @@ -2170,7 +2170,7 @@ template recT r:={ f3:= "aiyyo" } -template recT f modifies r:= complement({ f1:= 1, f2:= 0.9 }, omit); +template recT f modifies r:= complement({ f1:= 1, f2:= 0.9 }, { f1:= 1, f2:= 0.9, f3 := "pppp" }); } <END_MODULE> diff --git a/function_test/Semantic_Analyser/TTCN3_SA_7_TD.script b/function_test/Semantic_Analyser/TTCN3_SA_7_TD.script index 10878ccfc..95ccf1837 100644 --- a/function_test/Semantic_Analyser/TTCN3_SA_7_TD.script +++ b/function_test/Semantic_Analyser/TTCN3_SA_7_TD.script @@ -1,5 +1,5 @@ .****************************************************************************** -.* Copyright (c) 2000-2014 Ericsson Telecom AB +.* Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/TTCN3_SA_9_TD.script b/function_test/Semantic_Analyser/TTCN3_SA_9_TD.script index 9076fc2ca..852673eab 100644 --- a/function_test/Semantic_Analyser/TTCN3_SA_9_TD.script +++ b/function_test/Semantic_Analyser/TTCN3_SA_9_TD.script @@ -1,5 +1,5 @@ .****************************************************************************** -.* Copyright (c) 2000-2014 Ericsson Telecom AB +.* Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/TTCN3_SA_ttcn3adhoc_TD.script b/function_test/Semantic_Analyser/TTCN3_SA_ttcn3adhoc_TD.script index b1daa6a20..af97ca52a 100644 --- a/function_test/Semantic_Analyser/TTCN3_SA_ttcn3adhoc_TD.script +++ b/function_test/Semantic_Analyser/TTCN3_SA_ttcn3adhoc_TD.script @@ -1,5 +1,5 @@ .****************************************************************************** -.* Copyright (c) 2000-2014 Ericsson Telecom AB +.* Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/cw.pl b/function_test/Semantic_Analyser/cw.pl index b9c8a9ab9..02a61ad96 100755 --- a/function_test/Semantic_Analyser/cw.pl +++ b/function_test/Semantic_Analyser/cw.pl @@ -1,6 +1,6 @@ #!/usr/bin/perl -w ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/defpars/HQ30279A.ttcn b/function_test/Semantic_Analyser/defpars/HQ30279A.ttcn index 12bb213e5..bc1b2d842 100644 --- a/function_test/Semantic_Analyser/defpars/HQ30279A.ttcn +++ b/function_test/Semantic_Analyser/defpars/HQ30279A.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/defpars/Makefile b/function_test/Semantic_Analyser/defpars/Makefile index 23587f581..16deb6f81 100644 --- a/function_test/Semantic_Analyser/defpars/Makefile +++ b/function_test/Semantic_Analyser/defpars/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/defpars/bende_fn_SE.ttcn b/function_test/Semantic_Analyser/defpars/bende_fn_SE.ttcn index ed9e4fc55..cbbb4f319 100644 --- a/function_test/Semantic_Analyser/defpars/bende_fn_SE.ttcn +++ b/function_test/Semantic_Analyser/defpars/bende_fn_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/defpars/bende_t_SE.ttcn b/function_test/Semantic_Analyser/defpars/bende_t_SE.ttcn index 6044b41bc..b24649837 100644 --- a/function_test/Semantic_Analyser/defpars/bende_t_SE.ttcn +++ b/function_test/Semantic_Analyser/defpars/bende_t_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/encode/Makefile b/function_test/Semantic_Analyser/encode/Makefile index 23587f581..16deb6f81 100644 --- a/function_test/Semantic_Analyser/encode/Makefile +++ b/function_test/Semantic_Analyser/encode/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/encode/encode_SE.ttcn b/function_test/Semantic_Analyser/encode/encode_SE.ttcn index c96bba94f..409f3bc40 100644 --- a/function_test/Semantic_Analyser/encode/encode_SE.ttcn +++ b/function_test/Semantic_Analyser/encode/encode_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/float/Makefile b/function_test/Semantic_Analyser/float/Makefile index d949776f8..6288f55e0 100644 --- a/function_test/Semantic_Analyser/float/Makefile +++ b/function_test/Semantic_Analyser/float/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/float/subtype_OK.ttcn b/function_test/Semantic_Analyser/float/subtype_OK.ttcn index c7386fc4e..63d71dd5d 100644 --- a/function_test/Semantic_Analyser/float/subtype_OK.ttcn +++ b/function_test/Semantic_Analyser/float/subtype_OK.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/float/subtype_SE.ttcn b/function_test/Semantic_Analyser/float/subtype_SE.ttcn index c56d0f338..afa6ab752 100644 --- a/function_test/Semantic_Analyser/float/subtype_SE.ttcn +++ b/function_test/Semantic_Analyser/float/subtype_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/harness.pl b/function_test/Semantic_Analyser/harness.pl index 6ba82010e..90a2fd69b 100755 --- a/function_test/Semantic_Analyser/harness.pl +++ b/function_test/Semantic_Analyser/harness.pl @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/import_of_iports/A_CYCLIC.ttcn b/function_test/Semantic_Analyser/import_of_iports/A_CYCLIC.ttcn index da3dd1cbd..5ca393a21 100644 --- a/function_test/Semantic_Analyser/import_of_iports/A_CYCLIC.ttcn +++ b/function_test/Semantic_Analyser/import_of_iports/A_CYCLIC.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/import_of_iports/A_SE.ttcn b/function_test/Semantic_Analyser/import_of_iports/A_SE.ttcn index 543e2927f..da310fa76 100644 --- a/function_test/Semantic_Analyser/import_of_iports/A_SE.ttcn +++ b/function_test/Semantic_Analyser/import_of_iports/A_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/import_of_iports/B_APR_SE.ttcn b/function_test/Semantic_Analyser/import_of_iports/B_APR_SE.ttcn index 6202fd575..cc0f4dff3 100644 --- a/function_test/Semantic_Analyser/import_of_iports/B_APR_SE.ttcn +++ b/function_test/Semantic_Analyser/import_of_iports/B_APR_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/import_of_iports/B_APU_SE.ttcn b/function_test/Semantic_Analyser/import_of_iports/B_APU_SE.ttcn index 15560f05a..e9004b044 100644 --- a/function_test/Semantic_Analyser/import_of_iports/B_APU_SE.ttcn +++ b/function_test/Semantic_Analyser/import_of_iports/B_APU_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/import_of_iports/B_CEFR_SE.ttcn b/function_test/Semantic_Analyser/import_of_iports/B_CEFR_SE.ttcn index 72a664081..88440d98d 100644 --- a/function_test/Semantic_Analyser/import_of_iports/B_CEFR_SE.ttcn +++ b/function_test/Semantic_Analyser/import_of_iports/B_CEFR_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/import_of_iports/B_CYCLIC.ttcn b/function_test/Semantic_Analyser/import_of_iports/B_CYCLIC.ttcn index 89f360a94..038937b10 100644 --- a/function_test/Semantic_Analyser/import_of_iports/B_CYCLIC.ttcn +++ b/function_test/Semantic_Analyser/import_of_iports/B_CYCLIC.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/import_of_iports/B_SE.ttcn b/function_test/Semantic_Analyser/import_of_iports/B_SE.ttcn index cf01ed27a..9daf1b1d9 100644 --- a/function_test/Semantic_Analyser/import_of_iports/B_SE.ttcn +++ b/function_test/Semantic_Analyser/import_of_iports/B_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/import_of_iports/C_BPR_SE.ttcn b/function_test/Semantic_Analyser/import_of_iports/C_BPR_SE.ttcn index abd89344b..798879e72 100644 --- a/function_test/Semantic_Analyser/import_of_iports/C_BPR_SE.ttcn +++ b/function_test/Semantic_Analyser/import_of_iports/C_BPR_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/import_of_iports/C_BPU_SE.ttcn b/function_test/Semantic_Analyser/import_of_iports/C_BPU_SE.ttcn index c1d6b6b29..590429207 100644 --- a/function_test/Semantic_Analyser/import_of_iports/C_BPU_SE.ttcn +++ b/function_test/Semantic_Analyser/import_of_iports/C_BPU_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/import_of_iports/C_CYCLIC.ttcn b/function_test/Semantic_Analyser/import_of_iports/C_CYCLIC.ttcn index 8816adfed..da88b239d 100644 --- a/function_test/Semantic_Analyser/import_of_iports/C_CYCLIC.ttcn +++ b/function_test/Semantic_Analyser/import_of_iports/C_CYCLIC.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/import_of_iports/C_FR_SE.ttcn b/function_test/Semantic_Analyser/import_of_iports/C_FR_SE.ttcn index 8e81be7f9..d19e48452 100644 --- a/function_test/Semantic_Analyser/import_of_iports/C_FR_SE.ttcn +++ b/function_test/Semantic_Analyser/import_of_iports/C_FR_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/import_of_iports/C_SE.ttcn b/function_test/Semantic_Analyser/import_of_iports/C_SE.ttcn index 459fbf98a..eff45d72a 100644 --- a/function_test/Semantic_Analyser/import_of_iports/C_SE.ttcn +++ b/function_test/Semantic_Analyser/import_of_iports/C_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/import_of_iports/D_CPR_SE.ttcn b/function_test/Semantic_Analyser/import_of_iports/D_CPR_SE.ttcn index 188fe0ef9..36795f574 100644 --- a/function_test/Semantic_Analyser/import_of_iports/D_CPR_SE.ttcn +++ b/function_test/Semantic_Analyser/import_of_iports/D_CPR_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/import_of_iports/D_CPU_SE.ttcn b/function_test/Semantic_Analyser/import_of_iports/D_CPU_SE.ttcn index e466ab566..23d5c809d 100644 --- a/function_test/Semantic_Analyser/import_of_iports/D_CPU_SE.ttcn +++ b/function_test/Semantic_Analyser/import_of_iports/D_CPU_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/import_of_iports/D_FR_SE.ttcn b/function_test/Semantic_Analyser/import_of_iports/D_FR_SE.ttcn index 1472ca194..04485ce6a 100644 --- a/function_test/Semantic_Analyser/import_of_iports/D_FR_SE.ttcn +++ b/function_test/Semantic_Analyser/import_of_iports/D_FR_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/import_of_iports/D_SE.ttcn b/function_test/Semantic_Analyser/import_of_iports/D_SE.ttcn index 58ef24ef9..ac128646e 100644 --- a/function_test/Semantic_Analyser/import_of_iports/D_SE.ttcn +++ b/function_test/Semantic_Analyser/import_of_iports/D_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/import_of_iports/E_DPR_SE.ttcn b/function_test/Semantic_Analyser/import_of_iports/E_DPR_SE.ttcn index 4a47e2297..092a82822 100644 --- a/function_test/Semantic_Analyser/import_of_iports/E_DPR_SE.ttcn +++ b/function_test/Semantic_Analyser/import_of_iports/E_DPR_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/import_of_iports/E_DPU_SE.ttcn b/function_test/Semantic_Analyser/import_of_iports/E_DPU_SE.ttcn index 7515e0942..1bcc2d87c 100644 --- a/function_test/Semantic_Analyser/import_of_iports/E_DPU_SE.ttcn +++ b/function_test/Semantic_Analyser/import_of_iports/E_DPU_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/import_of_iports/E_FR_SE.ttcn b/function_test/Semantic_Analyser/import_of_iports/E_FR_SE.ttcn index f1a742704..160e6fda3 100644 --- a/function_test/Semantic_Analyser/import_of_iports/E_FR_SE.ttcn +++ b/function_test/Semantic_Analyser/import_of_iports/E_FR_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/import_of_iports/E_SE.ttcn b/function_test/Semantic_Analyser/import_of_iports/E_SE.ttcn index c38040f94..7ec5ddb06 100644 --- a/function_test/Semantic_Analyser/import_of_iports/E_SE.ttcn +++ b/function_test/Semantic_Analyser/import_of_iports/E_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/import_of_iports/Makefile b/function_test/Semantic_Analyser/import_of_iports/Makefile index d949776f8..6288f55e0 100644 --- a/function_test/Semantic_Analyser/import_of_iports/Makefile +++ b/function_test/Semantic_Analyser/import_of_iports/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/options/quitter3.ttcn b/function_test/Semantic_Analyser/options/quitter3.ttcn index 1388bec1c..049c9ece6 100644 --- a/function_test/Semantic_Analyser/options/quitter3.ttcn +++ b/function_test/Semantic_Analyser/options/quitter3.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/options/quitter3Q1.ttcn b/function_test/Semantic_Analyser/options/quitter3Q1.ttcn index e536a7232..5cfd965cb 100644 --- a/function_test/Semantic_Analyser/options/quitter3Q1.ttcn +++ b/function_test/Semantic_Analyser/options/quitter3Q1.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/options/quitter3Q1S.ttcn b/function_test/Semantic_Analyser/options/quitter3Q1S.ttcn index 7dbce4ba1..7d29ac5a3 100644 --- a/function_test/Semantic_Analyser/options/quitter3Q1S.ttcn +++ b/function_test/Semantic_Analyser/options/quitter3Q1S.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/options/quitter3Q2.ttcn b/function_test/Semantic_Analyser/options/quitter3Q2.ttcn index df96649a4..fd3a24669 100644 --- a/function_test/Semantic_Analyser/options/quitter3Q2.ttcn +++ b/function_test/Semantic_Analyser/options/quitter3Q2.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/options/quitter3Q2S.ttcn b/function_test/Semantic_Analyser/options/quitter3Q2S.ttcn index 0603a2277..869d656a3 100644 --- a/function_test/Semantic_Analyser/options/quitter3Q2S.ttcn +++ b/function_test/Semantic_Analyser/options/quitter3Q2S.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/options/quitter3S.ttcn b/function_test/Semantic_Analyser/options/quitter3S.ttcn index 922258a60..b3fd1592b 100644 --- a/function_test/Semantic_Analyser/options/quitter3S.ttcn +++ b/function_test/Semantic_Analyser/options/quitter3S.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/param/Makefile b/function_test/Semantic_Analyser/param/Makefile index 23587f581..16deb6f81 100644 --- a/function_test/Semantic_Analyser/param/Makefile +++ b/function_test/Semantic_Analyser/param/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/param/param_SE.ttcn b/function_test/Semantic_Analyser/param/param_SE.ttcn index f67613bdf..910a6bd67 100644 --- a/function_test/Semantic_Analyser/param/param_SE.ttcn +++ b/function_test/Semantic_Analyser/param/param_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/template_restrictions/.gitignore b/function_test/Semantic_Analyser/template_restrictions/.gitignore new file mode 100644 index 000000000..e2d293255 --- /dev/null +++ b/function_test/Semantic_Analyser/template_restrictions/.gitignore @@ -0,0 +1,2 @@ +!Makefile +!*.ttcn diff --git a/function_test/Semantic_Analyser/template_restrictions/Makefile b/function_test/Semantic_Analyser/template_restrictions/Makefile new file mode 100644 index 000000000..16deb6f81 --- /dev/null +++ b/function_test/Semantic_Analyser/template_restrictions/Makefile @@ -0,0 +1,8 @@ +############################################################################### +# Copyright (c) 2000-2015 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 +############################################################################### +include ../common.mk diff --git a/function_test/Semantic_Analyser/template_restrictions/TempRes_SE.ttcn b/function_test/Semantic_Analyser/template_restrictions/TempRes_SE.ttcn new file mode 100644 index 000000000..9f8b73a42 --- /dev/null +++ b/function_test/Semantic_Analyser/template_restrictions/TempRes_SE.ttcn @@ -0,0 +1,56 @@ +/****************************************************************************** + * Copyright (c) 2000-2015 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 + ******************************************************************************/ +module TempRes_SE { //^In TTCN-3 module// + +type record Rec { + integer i, + float f, + charstring cs, + octetstring os +} + +template (present) Rec t_original(in template (present) integer pt_i) := { //^Referenced template parameter is here$//2 + i := pt_i, //^warning: Inadequate restriction on the referenced template parameter//2 + f := ?, //^Referenced template is here$// + cs := ?, //^Referenced template is here$//2 + os := ? //^Referenced template is here$//2 +} + +template (present) Rec t_modified(in template (present) integer pt_i, in template (present) float pt_f) //^Referenced template parameter is here$// + modifies t_original := { + f := pt_f //^warning: Inadequate restriction on the referenced template parameter// +} + +function f_rec_temp(in template (value) Rec pt_rec_temp) { + log(pt_rec_temp); +} + +template float t_f := (-10.0..-1.0); //^Referenced template is here$// +template charstring t_cs := ("abc", "def") ifpresent; //^Referenced template is here$// + +function f_float_temp() return template (value) float { //^In function definition// + return t_f; //^In return statement// //^error: Restriction on return template does not allow usage of value range match$// +} + +control { //^In control part// + var template (present) charstring vt_cs := "a"; + + var template integer vt_i := 3; //^Referenced template variable is here$// + + f_rec_temp(t_modified(3, f_float_temp())); //^In function instance// //^In actual parameter list of function// \ + //^In parameter #1 for// //^error: Restriction on template formal parameter does not allow usage of any value$//2 + + f_rec_temp(t_original(vt_i)); //^In function instance// //^In actual parameter list of function// \ + //^In parameter #1 for//2 //^In actual parameter list of template// \ + //^warning: Inadequate restriction on the referenced template variable// \ + //^error: Restriction on template formal parameter does not allow usage of any value$//3 + + vt_cs := t_cs; //^In variable assignment:$// //^error: Restriction on template does not allow usage of \`ifpresent\'$// +} + +} diff --git a/function_test/Semantic_Analyser/template_restrictions/t b/function_test/Semantic_Analyser/template_restrictions/t new file mode 100755 index 000000000..3a4b58ec1 --- /dev/null +++ b/function_test/Semantic_Analyser/template_restrictions/t @@ -0,0 +1,9 @@ +#!/usr/bin/perl +# note this is called through "perl -w" +use strict; + +my $self = $0; +$self =~ s!/t!!; + +exec('make check --no-print-directory -s -C ' . $self); + diff --git a/function_test/Semantic_Analyser/ver/CRL_111_222_3_R2D_OK.ttcn b/function_test/Semantic_Analyser/ver/CRL_111_222_3_R2D_OK.ttcn index 3e9418197..8a4b4b069 100644 --- a/function_test/Semantic_Analyser/ver/CRL_111_222_3_R2D_OK.ttcn +++ b/function_test/Semantic_Analyser/ver/CRL_111_222_3_R2D_OK.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/ver/CRL_111_222_R2D_OK.ttcn b/function_test/Semantic_Analyser/ver/CRL_111_222_R2D_OK.ttcn index b9f769fad..a0a5020fe 100644 --- a/function_test/Semantic_Analyser/ver/CRL_111_222_R2D_OK.ttcn +++ b/function_test/Semantic_Analyser/ver/CRL_111_222_R2D_OK.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/ver/Makefile b/function_test/Semantic_Analyser/ver/Makefile index 26596b983..c572344c6 100644 --- a/function_test/Semantic_Analyser/ver/Makefile +++ b/function_test/Semantic_Analyser/ver/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/ver/R2D2_SE.ttcn b/function_test/Semantic_Analyser/ver/R2D2_SE.ttcn index efc218530..23de70334 100644 --- a/function_test/Semantic_Analyser/ver/R2D2_SE.ttcn +++ b/function_test/Semantic_Analyser/ver/R2D2_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/ver/R2D_SE.ttcn b/function_test/Semantic_Analyser/ver/R2D_SE.ttcn index 9d6fef899..ddc23cec9 100644 --- a/function_test/Semantic_Analyser/ver/R2D_SE.ttcn +++ b/function_test/Semantic_Analyser/ver/R2D_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/ver/c3p0_SE.ttcn b/function_test/Semantic_Analyser/ver/c3p0_SE.ttcn index 6c18c5191..9261c58f6 100644 --- a/function_test/Semantic_Analyser/ver/c3p0_SE.ttcn +++ b/function_test/Semantic_Analyser/ver/c3p0_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/ver/dup_ver_SE.ttcn b/function_test/Semantic_Analyser/ver/dup_ver_SE.ttcn index cc2ee339e..ebb2c6f88 100644 --- a/function_test/Semantic_Analyser/ver/dup_ver_SE.ttcn +++ b/function_test/Semantic_Analyser/ver/dup_ver_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/ver/high_titan_SE.ttcn b/function_test/Semantic_Analyser/ver/high_titan_SE.ttcn index e986d513e..4fb408d74 100644 --- a/function_test/Semantic_Analyser/ver/high_titan_SE.ttcn +++ b/function_test/Semantic_Analyser/ver/high_titan_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 @@ -16,8 +16,8 @@ with { // check for the more general /R\d[A-HJ-NS-VX-Z](\d{1,2})?/ /* Test needs to be adjusted for every release !!!!!!! */ - extension "requiresTITAN CRL 113 200/5 R1A"; /* This one must just pass, the next one must just fail */ - extension "requiresTITAN CRL 113 200/5 R9A01"; //^error: This module needs to be compiled with TITAN version (C[RN]L \d+ \d+\/\d+ )?R\d{1,2}[A-HJ-NS-VX-Z](\d{1,2})? or higher; version (C[RN]L \d+ \d+\/\d+ )?R\d{1,2}[A-HJ-NS-VX-Z](\d{1,2})? detected// + extension "requiresTITAN CRL 113 200/5 R4A"; /* This one must just pass, the next one must just fail */ + extension "requiresTITAN CRL 113 200/5 R5A01"; //^error: This module needs to be compiled with TITAN version (C[RN]L \d+ \d+\/\d+ )?R\d{1,2}[A-HJ-NS-VX-Z](\d{1,2})? or higher; version (C[RN]L \d+ \d+\/\d+ )?R\d{1,2}[A-HJ-NS-VX-Z](\d{1,2})? detected// /* The old style RnXnn, without the CRL 113 200 and the suffix, implies major version 1 * Now that Titan is at version 2, the following will always pass: diff --git a/function_test/Semantic_Analyser/ver/importer_SE.ttcn b/function_test/Semantic_Analyser/ver/importer_SE.ttcn index 9fab451f8..db532da1e 100644 --- a/function_test/Semantic_Analyser/ver/importer_SE.ttcn +++ b/function_test/Semantic_Analyser/ver/importer_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/ver/new_ver_SE.ttcn b/function_test/Semantic_Analyser/ver/new_ver_SE.ttcn index 8267c7e80..6c5bf499c 100644 --- a/function_test/Semantic_Analyser/ver/new_ver_SE.ttcn +++ b/function_test/Semantic_Analyser/ver/new_ver_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/ver/notimported_SE.ttcn b/function_test/Semantic_Analyser/ver/notimported_SE.ttcn index b798f7724..6752f7e3e 100644 --- a/function_test/Semantic_Analyser/ver/notimported_SE.ttcn +++ b/function_test/Semantic_Analyser/ver/notimported_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/ver/noversion_SE.ttcn b/function_test/Semantic_Analyser/ver/noversion_SE.ttcn index 7b1374227..336bb81c0 100644 --- a/function_test/Semantic_Analyser/ver/noversion_SE.ttcn +++ b/function_test/Semantic_Analyser/ver/noversion_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/ver/unreleased_SE.ttcn b/function_test/Semantic_Analyser/ver/unreleased_SE.ttcn index bbc017d83..8e7f40c7a 100644 --- a/function_test/Semantic_Analyser/ver/unreleased_SE.ttcn +++ b/function_test/Semantic_Analyser/ver/unreleased_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/ver/ver_OK.ttcn b/function_test/Semantic_Analyser/ver/ver_OK.ttcn index e159b32cb..c44b24c58 100644 --- a/function_test/Semantic_Analyser/ver/ver_OK.ttcn +++ b/function_test/Semantic_Analyser/ver/ver_OK.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/ver/ver_highest_OK.ttcn b/function_test/Semantic_Analyser/ver/ver_highest_OK.ttcn index ae3ff7995..22f0a4495 100644 --- a/function_test/Semantic_Analyser/ver/ver_highest_OK.ttcn +++ b/function_test/Semantic_Analyser/ver/ver_highest_OK.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/ver/ver_newstyle_OK.ttcn b/function_test/Semantic_Analyser/ver/ver_newstyle_OK.ttcn index ea0c78daa..9e640eae4 100644 --- a/function_test/Semantic_Analyser/ver/ver_newstyle_OK.ttcn +++ b/function_test/Semantic_Analyser/ver/ver_newstyle_OK.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/ver/ver_newstyle_per1_template_OK.ttcn b/function_test/Semantic_Analyser/ver/ver_newstyle_per1_template_OK.ttcn index 3c60f7bdc..5df9e2a0e 100644 --- a/function_test/Semantic_Analyser/ver/ver_newstyle_per1_template_OK.ttcn +++ b/function_test/Semantic_Analyser/ver/ver_newstyle_per1_template_OK.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/ver/ver_newstyle_template_OK.ttcn b/function_test/Semantic_Analyser/ver/ver_newstyle_template_OK.ttcn index 1e038fd06..7a90b7124 100644 --- a/function_test/Semantic_Analyser/ver/ver_newstyle_template_OK.ttcn +++ b/function_test/Semantic_Analyser/ver/ver_newstyle_template_OK.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/Makefile b/function_test/Semantic_Analyser/xer/Makefile index d949776f8..6288f55e0 100644 --- a/function_test/Semantic_Analyser/xer/Makefile +++ b/function_test/Semantic_Analyser/xer/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/aa_not_in_record_SE.ttcn b/function_test/Semantic_Analyser/xer/aa_not_in_record_SE.ttcn index ad76f898d..81fe5b939 100644 --- a/function_test/Semantic_Analyser/xer/aa_not_in_record_SE.ttcn +++ b/function_test/Semantic_Analyser/xer/aa_not_in_record_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/aa_not_string_SE.ttcn b/function_test/Semantic_Analyser/xer/aa_not_string_SE.ttcn index 6831b134f..f402ee399 100644 --- a/function_test/Semantic_Analyser/xer/aa_not_string_SE.ttcn +++ b/function_test/Semantic_Analyser/xer/aa_not_string_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/aa_twice_SE.ttcn b/function_test/Semantic_Analyser/xer/aa_twice_SE.ttcn index d4b7a487e..1df2abe1b 100644 --- a/function_test/Semantic_Analyser/xer/aa_twice_SE.ttcn +++ b/function_test/Semantic_Analyser/xer/aa_twice_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/aa_untagged_SE.ttcn b/function_test/Semantic_Analyser/xer/aa_untagged_SE.ttcn index c5d16a723..57f284152 100644 --- a/function_test/Semantic_Analyser/xer/aa_untagged_SE.ttcn +++ b/function_test/Semantic_Analyser/xer/aa_untagged_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/ae_clash_SE.ttcn b/function_test/Semantic_Analyser/xer/ae_clash_SE.ttcn index dcca18e78..1cf912cde 100644 --- a/function_test/Semantic_Analyser/xer/ae_clash_SE.ttcn +++ b/function_test/Semantic_Analyser/xer/ae_clash_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/ae_wrong_type_SE.ttcn b/function_test/Semantic_Analyser/xer/ae_wrong_type_SE.ttcn index 6b64f585d..e43389af2 100644 --- a/function_test/Semantic_Analyser/xer/ae_wrong_type_SE.ttcn +++ b/function_test/Semantic_Analyser/xer/ae_wrong_type_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/atr_not_on_record_SE.ttcn b/function_test/Semantic_Analyser/xer/atr_not_on_record_SE.ttcn index 7aaa2c377..276c2155a 100644 --- a/function_test/Semantic_Analyser/xer/atr_not_on_record_SE.ttcn +++ b/function_test/Semantic_Analyser/xer/atr_not_on_record_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/atr_untagged_SE.ttcn b/function_test/Semantic_Analyser/xer/atr_untagged_SE.ttcn index 642ce2e2c..9a295d3a0 100644 --- a/function_test/Semantic_Analyser/xer/atr_untagged_SE.ttcn +++ b/function_test/Semantic_Analyser/xer/atr_untagged_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/attribs_OK.ttcn b/function_test/Semantic_Analyser/xer/attribs_OK.ttcn index 8dbe9c1f9..e54e781f6 100644 --- a/function_test/Semantic_Analyser/xer/attribs_OK.ttcn +++ b/function_test/Semantic_Analyser/xer/attribs_OK.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/b64_clash_SE.ttcn b/function_test/Semantic_Analyser/xer/b64_clash_SE.ttcn index 6d1376e08..aa2284c25 100644 --- a/function_test/Semantic_Analyser/xer/b64_clash_SE.ttcn +++ b/function_test/Semantic_Analyser/xer/b64_clash_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/b64_wrong_type_SE.ttcn b/function_test/Semantic_Analyser/xer/b64_wrong_type_SE.ttcn index ce124b947..950da56e0 100644 --- a/function_test/Semantic_Analyser/xer/b64_wrong_type_SE.ttcn +++ b/function_test/Semantic_Analyser/xer/b64_wrong_type_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/bogus_SE.ttcn b/function_test/Semantic_Analyser/xer/bogus_SE.ttcn index a6bdb0bc7..c531ba810 100644 --- a/function_test/Semantic_Analyser/xer/bogus_SE.ttcn +++ b/function_test/Semantic_Analyser/xer/bogus_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/decimal_SE.ttcn b/function_test/Semantic_Analyser/xer/decimal_SE.ttcn index 4b0954721..5e041bd0d 100644 --- a/function_test/Semantic_Analyser/xer/decimal_SE.ttcn +++ b/function_test/Semantic_Analyser/xer/decimal_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/dfe_charenc_OK.ttcn b/function_test/Semantic_Analyser/xer/dfe_charenc_OK.ttcn index 466ff2da3..2f0062f3c 100644 --- a/function_test/Semantic_Analyser/xer/dfe_charenc_OK.ttcn +++ b/function_test/Semantic_Analyser/xer/dfe_charenc_OK.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/dfe_clash_SE.ttcn b/function_test/Semantic_Analyser/xer/dfe_clash_SE.ttcn index 877507627..4ab37d48e 100644 --- a/function_test/Semantic_Analyser/xer/dfe_clash_SE.ttcn +++ b/function_test/Semantic_Analyser/xer/dfe_clash_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/dfe_int_OK.ttcn b/function_test/Semantic_Analyser/xer/dfe_int_OK.ttcn index 65508f828..82a683c4a 100644 --- a/function_test/Semantic_Analyser/xer/dfe_int_OK.ttcn +++ b/function_test/Semantic_Analyser/xer/dfe_int_OK.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/disorder_SE.ttcn b/function_test/Semantic_Analyser/xer/disorder_SE.ttcn index df982443f..6bfabedcd 100644 --- a/function_test/Semantic_Analyser/xer/disorder_SE.ttcn +++ b/function_test/Semantic_Analyser/xer/disorder_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/dup_text_SE.ttcn b/function_test/Semantic_Analyser/xer/dup_text_SE.ttcn index 07fe80646..4c7d93eea 100644 --- a/function_test/Semantic_Analyser/xer/dup_text_SE.ttcn +++ b/function_test/Semantic_Analyser/xer/dup_text_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/dupenum_SE.ttcn b/function_test/Semantic_Analyser/xer/dupenum_SE.ttcn index 995095668..e2e176813 100644 --- a/function_test/Semantic_Analyser/xer/dupenum_SE.ttcn +++ b/function_test/Semantic_Analyser/xer/dupenum_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/emb_first_opt_SE.ttcn b/function_test/Semantic_Analyser/xer/emb_first_opt_SE.ttcn index 7f88bd33f..dd5261864 100644 --- a/function_test/Semantic_Analyser/xer/emb_first_opt_SE.ttcn +++ b/function_test/Semantic_Analyser/xer/emb_first_opt_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/emb_first_untag_SE.ttcn b/function_test/Semantic_Analyser/xer/emb_first_untag_SE.ttcn index 8b9f63121..a3435cee1 100644 --- a/function_test/Semantic_Analyser/xer/emb_first_untag_SE.ttcn +++ b/function_test/Semantic_Analyser/xer/emb_first_untag_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/emb_not_record_SE.ttcn b/function_test/Semantic_Analyser/xer/emb_not_record_SE.ttcn index c82e869c0..c6f72c9ea 100644 --- a/function_test/Semantic_Analyser/xer/emb_not_record_SE.ttcn +++ b/function_test/Semantic_Analyser/xer/emb_not_record_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/emb_untag_SE.ttcn b/function_test/Semantic_Analyser/xer/emb_untag_SE.ttcn index ae969d375..24e61adc8 100644 --- a/function_test/Semantic_Analyser/xer/emb_untag_SE.ttcn +++ b/function_test/Semantic_Analyser/xer/emb_untag_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/emb_wrong_first_SE.ttcn b/function_test/Semantic_Analyser/xer/emb_wrong_first_SE.ttcn index 6d2ee007a..f9e35597f 100644 --- a/function_test/Semantic_Analyser/xer/emb_wrong_first_SE.ttcn +++ b/function_test/Semantic_Analyser/xer/emb_wrong_first_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/encdec_OK.ttcn b/function_test/Semantic_Analyser/xer/encdec_OK.ttcn index 538932bb7..47ba47638 100644 --- a/function_test/Semantic_Analyser/xer/encdec_OK.ttcn +++ b/function_test/Semantic_Analyser/xer/encdec_OK.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/ifq_SE.ttcn b/function_test/Semantic_Analyser/xer/ifq_SE.ttcn index be93139a3..7522267f7 100644 --- a/function_test/Semantic_Analyser/xer/ifq_SE.ttcn +++ b/function_test/Semantic_Analyser/xer/ifq_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/list_clash_SE.ttcn b/function_test/Semantic_Analyser/xer/list_clash_SE.ttcn index 365636f00..2815d46ce 100644 --- a/function_test/Semantic_Analyser/xer/list_clash_SE.ttcn +++ b/function_test/Semantic_Analyser/xer/list_clash_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/list_not_recof_SE.ttcn b/function_test/Semantic_Analyser/xer/list_not_recof_SE.ttcn index b215fd33e..5ede61a47 100644 --- a/function_test/Semantic_Analyser/xer/list_not_recof_SE.ttcn +++ b/function_test/Semantic_Analyser/xer/list_not_recof_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/namedup1_SE.ttcn b/function_test/Semantic_Analyser/xer/namedup1_SE.ttcn index 21b0bdac7..cddd73cbc 100644 --- a/function_test/Semantic_Analyser/xer/namedup1_SE.ttcn +++ b/function_test/Semantic_Analyser/xer/namedup1_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/namedup2_SE.ttcn b/function_test/Semantic_Analyser/xer/namedup2_SE.ttcn index d8292ec08..43b31572c 100644 --- a/function_test/Semantic_Analyser/xer/namedup2_SE.ttcn +++ b/function_test/Semantic_Analyser/xer/namedup2_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/no_text_all_SE.ttcn b/function_test/Semantic_Analyser/xer/no_text_all_SE.ttcn index 4f04a3bf3..1b2c91a69 100644 --- a/function_test/Semantic_Analyser/xer/no_text_all_SE.ttcn +++ b/function_test/Semantic_Analyser/xer/no_text_all_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/ns_empty_prefix_dup_OK.ttcn b/function_test/Semantic_Analyser/xer/ns_empty_prefix_dup_OK.ttcn index 4acf7cf85..1e6cf607e 100644 --- a/function_test/Semantic_Analyser/xer/ns_empty_prefix_dup_OK.ttcn +++ b/function_test/Semantic_Analyser/xer/ns_empty_prefix_dup_OK.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/ns_prefix_dup_OK.ttcn b/function_test/Semantic_Analyser/xer/ns_prefix_dup_OK.ttcn index b8472e349..6a955fba4 100644 --- a/function_test/Semantic_Analyser/xer/ns_prefix_dup_OK.ttcn +++ b/function_test/Semantic_Analyser/xer/ns_prefix_dup_OK.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/ns_xml_SE.ttcn b/function_test/Semantic_Analyser/xer/ns_xml_SE.ttcn index 3105b7c64..b341c3550 100644 --- a/function_test/Semantic_Analyser/xer/ns_xml_SE.ttcn +++ b/function_test/Semantic_Analyser/xer/ns_xml_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/qname_SE.ttcn b/function_test/Semantic_Analyser/xer/qname_SE.ttcn index 195d3c8a5..d56f5cf2a 100644 --- a/function_test/Semantic_Analyser/xer/qname_SE.ttcn +++ b/function_test/Semantic_Analyser/xer/qname_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/qname_attr_OK.ttcn b/function_test/Semantic_Analyser/xer/qname_attr_OK.ttcn index 93e84af53..6eabb39e7 100644 --- a/function_test/Semantic_Analyser/xer/qname_attr_OK.ttcn +++ b/function_test/Semantic_Analyser/xer/qname_attr_OK.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/recur_SE.ttcn b/function_test/Semantic_Analyser/xer/recur_SE.ttcn index 561abe37f..037aab716 100644 --- a/function_test/Semantic_Analyser/xer/recur_SE.ttcn +++ b/function_test/Semantic_Analyser/xer/recur_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/soapy.ttcn b/function_test/Semantic_Analyser/xer/soapy.ttcn index fe80cd227..61d3f3b9c 100644 --- a/function_test/Semantic_Analyser/xer/soapy.ttcn +++ b/function_test/Semantic_Analyser/xer/soapy.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/text_clash_use_number_SE.ttcn b/function_test/Semantic_Analyser/xer/text_clash_use_number_SE.ttcn index 52c1163cf..2869b4c4b 100644 --- a/function_test/Semantic_Analyser/xer/text_clash_use_number_SE.ttcn +++ b/function_test/Semantic_Analyser/xer/text_clash_use_number_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/text_no_enum_SE.ttcn b/function_test/Semantic_Analyser/xer/text_no_enum_SE.ttcn index 082a22dbf..7ef2d4c02 100644 --- a/function_test/Semantic_Analyser/xer/text_no_enum_SE.ttcn +++ b/function_test/Semantic_Analyser/xer/text_no_enum_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/text_over_text_SE.ttcn b/function_test/Semantic_Analyser/xer/text_over_text_SE.ttcn index 4590fbbf5..895cff14c 100644 --- a/function_test/Semantic_Analyser/xer/text_over_text_SE.ttcn +++ b/function_test/Semantic_Analyser/xer/text_over_text_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/untag2_SE.ttcn b/function_test/Semantic_Analyser/xer/untag2_SE.ttcn index fdb92c39e..4a1ae274b 100644 --- a/function_test/Semantic_Analyser/xer/untag2_SE.ttcn +++ b/function_test/Semantic_Analyser/xer/untag2_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/untagged_charenc_OK.ttcn b/function_test/Semantic_Analyser/xer/untagged_charenc_OK.ttcn index 37d7123fd..588c8f40b 100644 --- a/function_test/Semantic_Analyser/xer/untagged_charenc_OK.ttcn +++ b/function_test/Semantic_Analyser/xer/untagged_charenc_OK.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/untagged_charenc_another_SE.ttcn b/function_test/Semantic_Analyser/xer/untagged_charenc_another_SE.ttcn index 66216937f..9a5804446 100644 --- a/function_test/Semantic_Analyser/xer/untagged_charenc_another_SE.ttcn +++ b/function_test/Semantic_Analyser/xer/untagged_charenc_another_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/untagged_charenc_optional_SE.ttcn b/function_test/Semantic_Analyser/xer/untagged_charenc_optional_SE.ttcn index 1536b8dca..590a4d11a 100644 --- a/function_test/Semantic_Analyser/xer/untagged_charenc_optional_SE.ttcn +++ b/function_test/Semantic_Analyser/xer/untagged_charenc_optional_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/untagged_noncharenc_SE.ttcn b/function_test/Semantic_Analyser/xer/untagged_noncharenc_SE.ttcn index 84fada1b3..3107f156b 100644 --- a/function_test/Semantic_Analyser/xer/untagged_noncharenc_SE.ttcn +++ b/function_test/Semantic_Analyser/xer/untagged_noncharenc_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/untagged_parent_not_record_SE.ttcn b/function_test/Semantic_Analyser/xer/untagged_parent_not_record_SE.ttcn index ffac6f14e..83ab60ad8 100644 --- a/function_test/Semantic_Analyser/xer/untagged_parent_not_record_SE.ttcn +++ b/function_test/Semantic_Analyser/xer/untagged_parent_not_record_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/untagged_parent_untagged_SE.ttcn b/function_test/Semantic_Analyser/xer/untagged_parent_untagged_SE.ttcn index ab224ded8..dfdf113ac 100644 --- a/function_test/Semantic_Analyser/xer/untagged_parent_untagged_SE.ttcn +++ b/function_test/Semantic_Analyser/xer/untagged_parent_untagged_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/uo_attribonly_SE.ttcn b/function_test/Semantic_Analyser/xer/uo_attribonly_SE.ttcn index 50b9f43b7..b3bc69285 100644 --- a/function_test/Semantic_Analyser/xer/uo_attribonly_SE.ttcn +++ b/function_test/Semantic_Analyser/xer/uo_attribonly_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/uo_no_recof_SE.ttcn b/function_test/Semantic_Analyser/xer/uo_no_recof_SE.ttcn index aeacb8963..97815d2be 100644 --- a/function_test/Semantic_Analyser/xer/uo_no_recof_SE.ttcn +++ b/function_test/Semantic_Analyser/xer/uo_no_recof_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/usenil_clash_SE.ttcn b/function_test/Semantic_Analyser/xer/usenil_clash_SE.ttcn index 529a5cbb6..39bed6888 100644 --- a/function_test/Semantic_Analyser/xer/usenil_clash_SE.ttcn +++ b/function_test/Semantic_Analyser/xer/usenil_clash_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/usenil_comp_clash_SE.ttcn b/function_test/Semantic_Analyser/xer/usenil_comp_clash_SE.ttcn index a612d95c6..9d3b4b93c 100644 --- a/function_test/Semantic_Analyser/xer/usenil_comp_clash_SE.ttcn +++ b/function_test/Semantic_Analyser/xer/usenil_comp_clash_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/usenil_no_controlns_SE.ttcn b/function_test/Semantic_Analyser/xer/usenil_no_controlns_SE.ttcn index 71a23dfc9..85291637a 100644 --- a/function_test/Semantic_Analyser/xer/usenil_no_controlns_SE.ttcn +++ b/function_test/Semantic_Analyser/xer/usenil_no_controlns_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/usenil_no_optional_SE.ttcn b/function_test/Semantic_Analyser/xer/usenil_no_optional_SE.ttcn index 57fa3d694..4d112f3c2 100644 --- a/function_test/Semantic_Analyser/xer/usenil_no_optional_SE.ttcn +++ b/function_test/Semantic_Analyser/xer/usenil_no_optional_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/usenil_not_attr_SE.ttcn b/function_test/Semantic_Analyser/xer/usenil_not_attr_SE.ttcn index 61af359dc..6d5c351ca 100644 --- a/function_test/Semantic_Analyser/xer/usenil_not_attr_SE.ttcn +++ b/function_test/Semantic_Analyser/xer/usenil_not_attr_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/usenil_not_record_SE.ttcn b/function_test/Semantic_Analyser/xer/usenil_not_record_SE.ttcn index 219103fc5..79bcb4e68 100644 --- a/function_test/Semantic_Analyser/xer/usenil_not_record_SE.ttcn +++ b/function_test/Semantic_Analyser/xer/usenil_not_record_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/usetype_clash_SE.ttcn b/function_test/Semantic_Analyser/xer/usetype_clash_SE.ttcn index e03610ef8..e40490dea 100644 --- a/function_test/Semantic_Analyser/xer/usetype_clash_SE.ttcn +++ b/function_test/Semantic_Analyser/xer/usetype_clash_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/usetype_not_union_SE.ttcn b/function_test/Semantic_Analyser/xer/usetype_not_union_SE.ttcn index 1ce861476..7c311d641 100644 --- a/function_test/Semantic_Analyser/xer/usetype_not_union_SE.ttcn +++ b/function_test/Semantic_Analyser/xer/usetype_not_union_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/usetype_with_untagged_SE.ttcn b/function_test/Semantic_Analyser/xer/usetype_with_untagged_SE.ttcn index 39779fc6c..ca6a8317b 100644 --- a/function_test/Semantic_Analyser/xer/usetype_with_untagged_SE.ttcn +++ b/function_test/Semantic_Analyser/xer/usetype_with_untagged_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/usetype_with_usetype_SE.ttcn b/function_test/Semantic_Analyser/xer/usetype_with_usetype_SE.ttcn index 57e9d2610..dc930cad1 100644 --- a/function_test/Semantic_Analyser/xer/usetype_with_usetype_SE.ttcn +++ b/function_test/Semantic_Analyser/xer/usetype_with_usetype_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/useunion_not_union_SE.ttcn b/function_test/Semantic_Analyser/xer/useunion_not_union_SE.ttcn index 549abcab5..c8e0f8bc1 100644 --- a/function_test/Semantic_Analyser/xer/useunion_not_union_SE.ttcn +++ b/function_test/Semantic_Analyser/xer/useunion_not_union_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/useunion_with_non_charenc_SE.ttcn b/function_test/Semantic_Analyser/xer/useunion_with_non_charenc_SE.ttcn index 1531845f0..3476d0403 100644 --- a/function_test/Semantic_Analyser/xer/useunion_with_non_charenc_SE.ttcn +++ b/function_test/Semantic_Analyser/xer/useunion_with_non_charenc_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Semantic_Analyser/xer/useunion_with_useunion_SE.ttcn b/function_test/Semantic_Analyser/xer/useunion_with_useunion_SE.ttcn index 348f9b389..d3346d726 100644 --- a/function_test/Semantic_Analyser/xer/useunion_with_useunion_SE.ttcn +++ b/function_test/Semantic_Analyser/xer/useunion_with_useunion_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/function_test/Text_EncDec/Makefile b/function_test/Text_EncDec/Makefile index 530ae95fd..5235adbe8 100644 --- a/function_test/Text_EncDec/Makefile +++ b/function_test/Text_EncDec/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 @@ -20,6 +20,9 @@ # Set these variables... # +TOP := ../../ +include $(TOP)/Makefile.cfg + # The path of your TTCN-3 Test Executor installation: # Uncomment this line to override the environment variable. # TTCN3_DIR = @@ -32,8 +35,6 @@ endif # Your C++ compiler: CXX = g++ -#superfluous????: -XMLDIR = /mnt/TTCN/Tools/libxml2-2.7.1 # Flags for the C++ preprocessor (and makedepend as well): CPPFLAGS = -D$(PLATFORM) -I$(TTCN3_DIR)/include -I$(XMLDIR)/include/libxml2 ifdef RT2 @@ -92,6 +93,7 @@ OBJECTS = Temp.o TARGET = Temp ifdef COVERAGE +CPPFLAGS += -fprofile-arcs -ftest-coverage -g CXXFLAGS += -fprofile-arcs -ftest-coverage -g LDFLAGS += -fprofile-arcs -ftest-coverage -g -lgcov endif diff --git a/function_test/Text_EncDec/TEXT_1_TD.fast_script b/function_test/Text_EncDec/TEXT_1_TD.fast_script index 9b834137d..b9bb50a0d 100644 --- a/function_test/Text_EncDec/TEXT_1_TD.fast_script +++ b/function_test/Text_EncDec/TEXT_1_TD.fast_script @@ -1,5 +1,5 @@ .****************************************************************************** -.* Copyright (c) 2000-2014 Ericsson Telecom AB +.* Copyright (c) 2000-2015 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 diff --git a/function_test/Text_EncDec/TEXT_1_TD.script b/function_test/Text_EncDec/TEXT_1_TD.script index 3fc1c2b9b..b58ae7758 100644 --- a/function_test/Text_EncDec/TEXT_1_TD.script +++ b/function_test/Text_EncDec/TEXT_1_TD.script @@ -1,5 +1,5 @@ .****************************************************************************** -.* Copyright (c) 2000-2014 Ericsson Telecom AB +.* Copyright (c) 2000-2015 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 diff --git a/function_test/Text_EncDec/Temp.cfg b/function_test/Text_EncDec/Temp.cfg index 78d8025a0..41a513d7a 100644 --- a/function_test/Text_EncDec/Temp.cfg +++ b/function_test/Text_EncDec/Temp.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/function_test/Tools/SAtester.pl b/function_test/Tools/SAtester.pl index 189ad85af..858f10580 100755 --- a/function_test/Tools/SAtester.pl +++ b/function_test/Tools/SAtester.pl @@ -1,6 +1,6 @@ #!/usr/bin/perl -w ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/function_test/XER_EncDec/Makefile b/function_test/XER_EncDec/Makefile index 2d8b8d194..1a226dfd6 100644 --- a/function_test/XER_EncDec/Makefile +++ b/function_test/XER_EncDec/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 @@ -20,6 +20,10 @@ # Set these variables... # +TOP := ../../ +include $(TOP)/Makefile.cfg + + # The path of your TTCN-3 Test Executor installation: # Uncomment this line to override the environment variable. # TTCN3_DIR = @@ -32,7 +36,6 @@ endif # Your C++ compiler: CXX = g++ -XMLDIR = /mnt/TTCN/Tools/libxml2-2.7.1 # Flags for the C++ preprocessor (and makedepend as well): CPPFLAGS = -D$(PLATFORM) -I$(TTCN3_DIR)/include -I$(XMLDIR)/include/libxml2 ifdef RT2 @@ -91,6 +94,7 @@ OBJECTS = Temp.o TARGET = Temp ifdef COVERAGE +CPPFLAGS += -fprofile-arcs -ftest-coverage -g CXXFLAGS += -fprofile-arcs -ftest-coverage -g LDFLAGS += -fprofile-arcs -ftest-coverage -g -lgcov endif diff --git a/function_test/XER_EncDec/Temp.cfg b/function_test/XER_EncDec/Temp.cfg index e58216eb8..1cde7caf3 100644 --- a/function_test/XER_EncDec/Temp.cfg +++ b/function_test/XER_EncDec/Temp.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/function_test/XER_EncDec/XER_EncDec_TD.script b/function_test/XER_EncDec/XER_EncDec_TD.script index e110cb134..31b827cfe 100644 --- a/function_test/XER_EncDec/XER_EncDec_TD.script +++ b/function_test/XER_EncDec/XER_EncDec_TD.script @@ -1,5 +1,5 @@ .****************************************************************************** -.* Copyright (c) 2000-2014 Ericsson Telecom AB +.* Copyright (c) 2000-2015 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 diff --git a/function_test/doc/TTCN3_Executor_TestReport.doc b/function_test/doc/TTCN3_Executor_TestReport.doc old mode 100644 new mode 100755 index 860c9b06e00f2cb20da5ba5a7f7624facfee12c2..0e7faadb85541bc3ef0022491cf0fd580be3fb53 GIT binary patch delta 101472 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 delta 82270 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�fv7b( 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 HTdRKotFybY diff --git a/hello/Makefile b/hello/Makefile index 50b53ea6d..7b03f87f8 100644 --- a/hello/Makefile +++ b/hello/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 @@ -11,7 +11,7 @@ TOP := $(shell cd .. && pwd) include ../Makefile.cfg -DEMOFILES := MyExample.ttcn PCOType.hh PCOType.cc MyExample.cfg +DEMOFILES := MyExample.ttcn PCOType.hh PCOType.cc hello_world.ttcn MyExample.cfg MAKEFILEGENFLAGS := -g ifeq ($(COVERAGE), yes) diff --git a/hello/MyExample.cfg b/hello/MyExample.cfg index 99bc07e8d..ca64e58ef 100644 --- a/hello/MyExample.cfg +++ b/hello/MyExample.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 @@ -12,3 +12,4 @@ ConsoleMask := TTCN_ERROR | TTCN_TESTCASE | TTCN_STATISTICS [EXECUTE] MyExample.control +hello_world.control \ No newline at end of file diff --git a/hello/MyExample.ttcn b/hello/MyExample.ttcn index edead6dfe..899b24161 100644 --- a/hello/MyExample.ttcn +++ b/hello/MyExample.ttcn @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -42,5 +42,6 @@ module MyExample { execute(HelloW()); execute(HelloW2()); + //1 pass, 1 inconc expected } } diff --git a/hello/PCOType.cc b/hello/PCOType.cc index 21e611bbc..c0c0cfc7c 100644 --- a/hello/PCOType.cc +++ b/hello/PCOType.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/hello/PCOType.hh b/hello/PCOType.hh index 798c2fed6..7eb96a329 100644 --- a/hello/PCOType.hh +++ b/hello/PCOType.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/hello/hello_world.ttcn b/hello/hello_world.ttcn new file mode 100644 index 000000000..0a2adb074 --- /dev/null +++ b/hello/hello_world.ttcn @@ -0,0 +1,79 @@ +/////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2000-2015 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 +/////////////////////////////////////////////////////////////////////////////// +module hello_world +{ +//====================== Data Types ====================== +type record of charstring RoC; //unconstrained array of character strings + +//====================== Port Types ====================== +type port MYPORT message { + inout charstring +} with {extension "internal"} + +//====================== Component Types ====================== +type component MYCOMP { + const integer c_MyCompDummyConstant := 42; + var integer v_MyCompDummyVariable1, v_MyCompDummyVariable2 := 1; + timer T_MyCompDummyTimer; + port MYPORT myport +} + +//====================== Constants ====================== +const charstring ws0 := "(\n| )#(0,)" + +//====================== Templates ====================== +//Strings containing the words "hello" and "word", in all small, or +//all capital letters, or small letters with first letter capital; +//exclamation mark is optional; whitespaces allowed +template charstring t_expected := + pattern "{ws0}(((h|H)ello {ws0}(w|W)orld)|HELLO {ws0}WORLD){ws0}!#(0,1){ws0}" + +//====================== Functions ====================== +function f_PTC(charstring pl_toSend) runs on MYCOMP { + myport.send(pl_toSend); +} + +//====================== Testcases ====================== +testcase TC(charstring pl_toSend) runs on MYCOMP { + var charstring vl_received; + var MYCOMP vl_PTC := MYCOMP.create alive; + connect (self:myport,vl_PTC:myport); + vl_PTC.start(f_PTC(pl_toSend)); + T_MyCompDummyTimer.start(5.0); + alt { + [] myport.receive(t_expected)-> value vl_received { + setverdict(pass,"expected message received: ",vl_received) + } + [] myport.receive (charstring:?) -> value vl_received{ + setverdict(fail,"Unexpected message received: ",vl_received) + } + [] T_MyCompDummyTimer.timeout { setverdict(inconc);} + } +} + +//========================================================================= +// Control Part +//========================================================================= +control { + var RoC vl_inputs := { + "HELLO WORLD!", + "hello world", + "Hello World!", + "hello WORLD!", + "hELLO wORLD!", + "helloworld!" + } + var integer i, vl_noStrings := sizeof(vl_inputs); + for (i:=0; i< vl_noStrings; i:=i+1){ + execute (TC(vl_inputs[i]),5.0) + } + + //3 pass, 3 fail expected +} // end of control part + +} // end of module diff --git a/help/Makefile b/help/Makefile index 55bbae00d..4e571c65d 100644 --- a/help/Makefile +++ b/help/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/help/chm_refact.sh b/help/chm_refact.sh index 2492a76be..f27e75a7e 100755 --- a/help/chm_refact.sh +++ b/help/chm_refact.sh @@ -1,6 +1,6 @@ #!/bin/bash ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/help/info/BNF.html b/help/info/BNF.html index db883ca64..6d80dda63 100644 --- a/help/info/BNF.html +++ b/help/info/BNF.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/action.html b/help/info/action.html index c0a495ae0..65b4776af 100644 --- a/help/info/action.html +++ b/help/info/action.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/activate.html b/help/info/activate.html index 8db23380d..890be2c51 100644 --- a/help/info/activate.html +++ b/help/info/activate.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/address.html b/help/info/address.html index f83c98221..7996899ed 100644 --- a/help/info/address.html +++ b/help/info/address.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/alive.html b/help/info/alive.html index 3f45f49b2..4a87914f8 100644 --- a/help/info/alive.html +++ b/help/info/alive.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/all.html b/help/info/all.html index 7c3e10a2b..3d33e3db2 100644 --- a/help/info/all.html +++ b/help/info/all.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/alt.html b/help/info/alt.html index 799a8667b..94be11c3a 100644 --- a/help/info/alt.html +++ b/help/info/alt.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/altstep.html b/help/info/altstep.html index 1fd25e94f..7ffe7ef1e 100644 --- a/help/info/altstep.html +++ b/help/info/altstep.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/and.html b/help/info/and.html index ff6078df6..54ea38a43 100644 --- a/help/info/and.html +++ b/help/info/and.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/and4b.html b/help/info/and4b.html index e8acdd7aa..8619ad7ce 100644 --- a/help/info/and4b.html +++ b/help/info/and4b.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/any.html b/help/info/any.html index c6f480a6c..fc28c9c95 100644 --- a/help/info/any.html +++ b/help/info/any.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/anytype.html b/help/info/anytype.html index 7811d2354..d9f677396 100644 --- a/help/info/anytype.html +++ b/help/info/anytype.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 @@ -23,7 +23,7 @@ <td><a href="../titan_main.html" alt="contents"><img border="0" src="../images/ao.jpg" width="53" height="40"></a></td> <td><a href="../titan_index.html" alt="index"><img border="0" src="../images/up.jpg" width="53" height="40"></a></td> <td><a href="any.html" alt="previous"><img border="0" src="../images/left.jpg" width="53" height="40"></a></td> - <td><a href="bit2hex.html" alt="next"><img border="0" src="../images/right.jpg" width="53" height="40"></a></td> + <td><a href="apply.html" alt="next"><img border="0" src="../images/right.jpg" width="53" height="40"></a></td> </tr> </table> <p><br clear="all"> diff --git a/help/info/apply.html b/help/info/apply.html new file mode 100644 index 000000000..5ed4c752b --- /dev/null +++ b/help/info/apply.html @@ -0,0 +1,71 @@ +<!-- + Copyright (c) 2000-2015 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 + --> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> +<meta http-equiv="Content-Language" content="en-us"> +<title>apply</title> +</head> +<body bgcolor="#DAD3C5" vlink="#0094D2" link="#003258"> +<table align="left" border="0" cellspacing="0" cellpadding="0" valign=top> + <tr> + <td width=105 height=40><a href="https://projects.eclipse.org/projects/tools.titan"><img src="../images/titan_transparent.gif" border=0 width=105 height=40 align="left" alt="Titan"></a></td> + </tr> +</table> +<table border="0" align="right" cellpadding="0" cellspacing="0"> + <tr> + <td><a href="../titan_main.html" alt="contents"><img border="0" src="../images/ao.jpg" width="53" height="40"></a></td> + <td><a href="../titan_index.html" alt="index"><img border="0" src="../images/up.jpg" width="53" height="40"></a></td> + <td><a alt="previous" href="anytype.html"><img border="0" src="../images/left.jpg" width="53" height="40"></a></td> + <td><a alt="next" href="bit2hex.html"><img border="0" src="../images/right.jpg" width="53" height="40"></a></td> + </tr> +</table> +<p><br clear="all"> +</p> +<hr> +<h1>apply</h1> +<hr align="left" width="75%"> +<p>This function is used to call a function, altstep or testcase referenced by a behavior type variable.</p> +<hr align="left" width="50%"> +<p>Related keyword:</p> +<ul> + <li><b><font face="Courier New" size="4" color="#003258"> <a href="type.html">type</a></font></b></li> +</ul> +<hr align="left" width="50%"> +<div align="center"> +<center> +<table border="0" width="90%" bgcolor="#FFB599" cellpadding="4"> + <tr> + <td width="100%"> + <h3 align="center"> + <font face="Courier New" color="#003258" size="5"> + <i>behavior_type_variable</i><b>.apply(</b></font> + <i>arguments</i> + <font face="Courier New" color="#003258" size="5"><b>) </b></font></h3> + </td> + </tr> +</table> +</center> +</div> +<ul> + <li> + <p>The <font face="Courier New" color="#003258" size="4"><b>behavior_type_variable</b></font> denotes a behavior type variable that refers to a function, altstep or testcase.</p> + </li> + <li> + <p>The <font face="Courier New" color="#003258" size="4"><b>arguments</b></font> denotes the argument list of the function, see <a href="function.html"><b>function</b></a>.</p> + </li> + <li> + <p>Details and examples can be found under <a href="type.html#behavior_type"><b>behavior_type</b></a>.</p> + </li> +</ul> + + +<hr align="left" width="50%"> +</body> +</html> diff --git a/help/info/bit2hex.html b/help/info/bit2hex.html index aac0d364e..032ea67bf 100644 --- a/help/info/bit2hex.html +++ b/help/info/bit2hex.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 @@ -22,7 +22,7 @@ <tr> <td><a href="../titan_main.html" alt="contents"><img border="0" src="../images/ao.jpg" width="53" height="40"></a></td> <td><a href="../titan_index.html" alt="index"><img border="0" src="../images/up.jpg" width="53" height="40"></a></td> - <td><a alt="previous" href="anytype.html"><img border="0" src="../images/left.jpg" width="53" height="40"></a></td> + <td><a alt="previous" href="apply.html"><img border="0" src="../images/left.jpg" width="53" height="40"></a></td> <td><a alt="next" href="bit2int.html"><img border="0" src="../images/right.jpg" width="53" height="40"></a></td> </tr> </table> diff --git a/help/info/bit2int.html b/help/info/bit2int.html index 3e472163b..c1a12a60d 100644 --- a/help/info/bit2int.html +++ b/help/info/bit2int.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/bit2oct.html b/help/info/bit2oct.html index c393d0b34..dba42aa86 100644 --- a/help/info/bit2oct.html +++ b/help/info/bit2oct.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/bit2str.html b/help/info/bit2str.html index fa4d2ed3e..e0928c87c 100644 --- a/help/info/bit2str.html +++ b/help/info/bit2str.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/bitstring.html b/help/info/bitstring.html index 566ae405c..fd8e3e270 100644 --- a/help/info/bitstring.html +++ b/help/info/bitstring.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/boolean.html b/help/info/boolean.html index 1be8bd3d5..a01d9c421 100644 --- a/help/info/boolean.html +++ b/help/info/boolean.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/break.html b/help/info/break.html index 2e2851c46..2e72772e7 100644 --- a/help/info/break.html +++ b/help/info/break.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/call.html b/help/info/call.html index a3f3c13d1..146211e19 100644 --- a/help/info/call.html +++ b/help/info/call.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/case.html b/help/info/case.html index e9c66b8e5..22fce52b0 100644 --- a/help/info/case.html +++ b/help/info/case.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/catch.html b/help/info/catch.html index 5a2ee5ad2..afedc1d0e 100644 --- a/help/info/catch.html +++ b/help/info/catch.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/char.html b/help/info/char.html index 5fbcc3033..4ffae2cb1 100644 --- a/help/info/char.html +++ b/help/info/char.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/char2int.html b/help/info/char2int.html index ef527f942..346a2d52e 100644 --- a/help/info/char2int.html +++ b/help/info/char2int.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/char2oct.html b/help/info/char2oct.html index c13a6d691..8cbcc6205 100644 --- a/help/info/char2oct.html +++ b/help/info/char2oct.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/charstring.html b/help/info/charstring.html index 96cd52ccd..57f56d699 100644 --- a/help/info/charstring.html +++ b/help/info/charstring.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/check.html b/help/info/check.html index 96f6a1007..c6c364946 100644 --- a/help/info/check.html +++ b/help/info/check.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/clear.html b/help/info/clear.html index d75ca66fb..19d8c937b 100644 --- a/help/info/clear.html +++ b/help/info/clear.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/complement.html b/help/info/complement.html index faab90845..c72b6335a 100644 --- a/help/info/complement.html +++ b/help/info/complement.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/component.html b/help/info/component.html index 4a09a2785..b0213569e 100644 --- a/help/info/component.html +++ b/help/info/component.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/connect.html b/help/info/connect.html index 3e0b3de01..b999bb54f 100644 --- a/help/info/connect.html +++ b/help/info/connect.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/const.html b/help/info/const.html index 8bae89df5..62599e0d8 100644 --- a/help/info/const.html +++ b/help/info/const.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/continue.html b/help/info/continue.html index 7a4a7a73d..9e64719d2 100644 --- a/help/info/continue.html +++ b/help/info/continue.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/control.html b/help/info/control.html index 8feb427b1..570e9169a 100644 --- a/help/info/control.html +++ b/help/info/control.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/create.html b/help/info/create.html index f9686af8f..9b9770c60 100644 --- a/help/info/create.html +++ b/help/info/create.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/deactivate.html b/help/info/deactivate.html index 04f388c6f..3c9d29d78 100644 --- a/help/info/deactivate.html +++ b/help/info/deactivate.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/decode_base64.html b/help/info/decode_base64.html index f2344584b..bfbd80551 100644 --- a/help/info/decode_base64.html +++ b/help/info/decode_base64.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/decvalue.html b/help/info/decvalue.html index 1d637d985..72727f4f9 100644 --- a/help/info/decvalue.html +++ b/help/info/decvalue.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/default.html b/help/info/default.html index 50fb536e4..7976cfde1 100644 --- a/help/info/default.html +++ b/help/info/default.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 @@ -23,7 +23,7 @@ <td><a href="../titan_main.html" alt="contents"><img border="0" src="../images/ao.jpg" width="53" height="40"></a></td> <td><a href="../titan_index.html" alt="index"><img border="0" src="../images/up.jpg" width="53" height="40"></a></td> <td><a href="decvalue.html" alt="previous"><img border="0" src="../images/left.jpg" width="53" height="40"></a></td> - <td><a href="disconnect.html" alt="next"><img border="0" src="../images/right.jpg" width="53" height="40"></a></td> + <td><a href="derefers.html" alt="next"><img border="0" src="../images/right.jpg" width="53" height="40"></a></td> </tr> </table> <p><br clear="all"> diff --git a/help/info/derefers.html b/help/info/derefers.html new file mode 100644 index 000000000..4044bcf79 --- /dev/null +++ b/help/info/derefers.html @@ -0,0 +1,72 @@ +<!-- + Copyright (c) 2000-2015 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 + --> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> +<meta http-equiv="Content-Language" content="en-us"> +<title>derefers</title> +</head> +<body bgcolor="#DAD3C5" vlink="#0094D2" link="#003258"> +<table align="left" border="0" cellspacing="0" cellpadding="0" valign=top> + <tr> + <td width=105 height=40><a href="https://projects.eclipse.org/projects/tools.titan"><img src="../images/titan_transparent.gif" border=0 width=105 height=40 align="left" alt="Titan"></a></td> + </tr> +</table> +<table border="0" align="right" cellpadding="0" cellspacing="0"> + <tr> + <td><a href="../titan_main.html" alt="contents"><img border="0" src="../images/ao.jpg" width="53" height="40"></a></td> + <td><a href="../titan_index.html" alt="index"><img border="0" src="../images/up.jpg" width="53" height="40"></a></td> + <td><a alt="previous" href="default.html"><img border="0" src="../images/left.jpg" width="53" height="40"></a></td> + <td><a alt="next" href="disconnect.html"><img border="0" src="../images/right.jpg" width="53" height="40"></a></td> + </tr> +</table> +<p><br clear="all"> +</p> +<hr> +<h1>derefers</h1> +<hr align="left" width="75%"> +<p>This function is used to start a behavior function referred by a behavior type variable that refers to a behavior name (reference for function name, altstep name or testcase name).</p> +<hr align="left" width="50%"> +<p>Related keyword:</p> +<ul> + <li><b><font face="Courier New" size="4" color="#003258"> <a href="type.html">type</a></font></b></li> +</ul> +<hr align="left" width="50%"> +<div align="center"> +<center> +<table border="0" width="90%" bgcolor="#FFB599" cellpadding="4"> + <tr> + <td width="100%"> + <h3 align="center"> + <font face="Courier New" color="#003258" size="5"><b>derefers (</b></font> + <i>reference_var</i> + <font face="Courier New" color="#003258" size="5"><b>) (</b></font> + <i>arguments</i> + <font face="Courier New" color="#003258" size="5"><b> ) </b></font></h3> + </td> + </tr> +</table> +</center> +</div> +<ul> + <li> + <p>The <font face="Courier New" color="#003258" size="4"><b>reference_var</b></font> denotes a behavior type variable that refers to a function, an altstep or a testcase.</p> + </li> + <li> + <p>The <font face="Courier New" color="#003258" size="4"><b>arguments</b></font> denotes the argument list of the function, see <a href="function.html"><b>function</b></a>.</p> + </li> + <li> + <p>Details and examples can be found under <a href="type.html#behavior_type"><b>behavior_type</b></a>.</p> + </li> +</ul> + + +<hr align="left" width="50%"> +</body> +</html> diff --git a/help/info/disconnect.html b/help/info/disconnect.html index 524c8ce6f..c009c782e 100644 --- a/help/info/disconnect.html +++ b/help/info/disconnect.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 @@ -22,7 +22,7 @@ <tr> <td><a href="../titan_main.html" alt="contents"><img border="0" src="../images/ao.jpg" width="53" height="40"></a></td> <td><a href="../titan_index.html" alt="index"><img border="0" src="../images/up.jpg" width="53" height="40"></a></td> - <td><a href="default.html" alt="previous"><img border="0" src="../images/left.jpg" width="53" height="40"></a></td> + <td><a href="derefers.html" alt="previous"><img border="0" src="../images/left.jpg" width="53" height="40"></a></td> <td><a href="display.html" alt="next"><img border="0" src="../images/right.jpg" width="53" height="40"></a></td> </tr> </table> diff --git a/help/info/display.html b/help/info/display.html index af5b94d12..044c4e2f5 100644 --- a/help/info/display.html +++ b/help/info/display.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/do.html b/help/info/do.html index 6a42268bb..de3321a34 100644 --- a/help/info/do.html +++ b/help/info/do.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/done.html b/help/info/done.html index 65f27d38c..b1de69501 100644 --- a/help/info/done.html +++ b/help/info/done.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/else.html b/help/info/else.html index 11a1d3fa6..9970a037d 100644 --- a/help/info/else.html +++ b/help/info/else.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/encode.html b/help/info/encode.html index 316b9fba0..e89e8ba7a 100644 --- a/help/info/encode.html +++ b/help/info/encode.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/encode_base64.html b/help/info/encode_base64.html index f967169a0..f750107a5 100644 --- a/help/info/encode_base64.html +++ b/help/info/encode_base64.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/encvalue.html b/help/info/encvalue.html index 22ae99c87..aa075916e 100644 --- a/help/info/encvalue.html +++ b/help/info/encvalue.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/enumerated.html b/help/info/enumerated.html index edbe71edf..376be1931 100644 --- a/help/info/enumerated.html +++ b/help/info/enumerated.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/error.html b/help/info/error.html index 92cd11c75..5c337a5f6 100644 --- a/help/info/error.html +++ b/help/info/error.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/except.html b/help/info/except.html index a33620519..750e46258 100644 --- a/help/info/except.html +++ b/help/info/except.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/exception.html b/help/info/exception.html index fe787908e..fd308ee28 100644 --- a/help/info/exception.html +++ b/help/info/exception.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/execute.html b/help/info/execute.html index 54f67536b..66a2d56d2 100644 --- a/help/info/execute.html +++ b/help/info/execute.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/extension.html b/help/info/extension.html index e8ca4bf32..76ef3954e 100644 --- a/help/info/extension.html +++ b/help/info/extension.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/external.html b/help/info/external.html index 305dbcf4b..7e1a26c79 100644 --- a/help/info/external.html +++ b/help/info/external.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/fail.html b/help/info/fail.html index 30929594a..cd4f57156 100644 --- a/help/info/fail.html +++ b/help/info/fail.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/false.html b/help/info/false.html index 56aa55eef..1c520f8ca 100644 --- a/help/info/false.html +++ b/help/info/false.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/float.html b/help/info/float.html index 5a39aab18..7a922194c 100644 --- a/help/info/float.html +++ b/help/info/float.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/float2int.html b/help/info/float2int.html index a28892773..67f3311c3 100644 --- a/help/info/float2int.html +++ b/help/info/float2int.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/float2str.html b/help/info/float2str.html index 10f6e7a18..32dae049c 100644 --- a/help/info/float2str.html +++ b/help/info/float2str.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/for.html b/help/info/for.html index fa3ce4bea..78215ce48 100644 --- a/help/info/for.html +++ b/help/info/for.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/friend.html b/help/info/friend.html index b36039e2e..44c090261 100644 --- a/help/info/friend.html +++ b/help/info/friend.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/from.html b/help/info/from.html index 637ce41e4..8030f2f3b 100644 --- a/help/info/from.html +++ b/help/info/from.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/function.html b/help/info/function.html index 53b5253d8..ddf95d689 100644 --- a/help/info/function.html +++ b/help/info/function.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/get_stringencoding.html b/help/info/get_stringencoding.html index 2178c723e..159aa95da 100644 --- a/help/info/get_stringencoding.html +++ b/help/info/get_stringencoding.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/getcall.html b/help/info/getcall.html index 5b34f1d44..2eb9693f9 100644 --- a/help/info/getcall.html +++ b/help/info/getcall.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/getreply.html b/help/info/getreply.html index 959df7a0a..2c84e3065 100644 --- a/help/info/getreply.html +++ b/help/info/getreply.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/getverdict.html b/help/info/getverdict.html index 4b3fb660c..0c2fc6bbf 100644 --- a/help/info/getverdict.html +++ b/help/info/getverdict.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/goto.html b/help/info/goto.html index 760f4dc46..43dbe1a2b 100644 --- a/help/info/goto.html +++ b/help/info/goto.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/group.html b/help/info/group.html index cd3c6864d..b1e9d3729 100644 --- a/help/info/group.html +++ b/help/info/group.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/hex2bit.html b/help/info/hex2bit.html index 079d57a67..7c53359dd 100644 --- a/help/info/hex2bit.html +++ b/help/info/hex2bit.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/hex2int.html b/help/info/hex2int.html index 7e9d7cf3a..e5dfe00c5 100644 --- a/help/info/hex2int.html +++ b/help/info/hex2int.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/hex2oct.html b/help/info/hex2oct.html index a8314ad4f..80f7ca323 100644 --- a/help/info/hex2oct.html +++ b/help/info/hex2oct.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/hex2str.html b/help/info/hex2str.html index bce21eeb2..9f9412746 100644 --- a/help/info/hex2str.html +++ b/help/info/hex2str.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/hexstring.html b/help/info/hexstring.html index 166740540..bff732c39 100644 --- a/help/info/hexstring.html +++ b/help/info/hexstring.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/if.html b/help/info/if.html index 4b5701598..31641c833 100644 --- a/help/info/if.html +++ b/help/info/if.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/ifpresent.html b/help/info/ifpresent.html index 4e2edb715..d55420c33 100644 --- a/help/info/ifpresent.html +++ b/help/info/ifpresent.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/import.html b/help/info/import.html index f18446d5c..1930b49a1 100644 --- a/help/info/import.html +++ b/help/info/import.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/in.html b/help/info/in.html index b84fa9799..99ae0abe5 100644 --- a/help/info/in.html +++ b/help/info/in.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/inconc.html b/help/info/inconc.html index e9beb4592..f1310c893 100644 --- a/help/info/inconc.html +++ b/help/info/inconc.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/infinity.html b/help/info/infinity.html index be33dd261..1b477141f 100644 --- a/help/info/infinity.html +++ b/help/info/infinity.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/inout.html b/help/info/inout.html index cffb90114..ec4e94c7c 100644 --- a/help/info/inout.html +++ b/help/info/inout.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/int2bit.html b/help/info/int2bit.html index e94804a39..d8e5320ee 100644 --- a/help/info/int2bit.html +++ b/help/info/int2bit.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/int2char.html b/help/info/int2char.html index 326741de3..c569730d2 100644 --- a/help/info/int2char.html +++ b/help/info/int2char.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 @@ -15,39 +15,54 @@ <body bgcolor="#DAD3C5" vlink="#0094D2" link="#003258"> <table align="left" border="0" cellspacing="0" cellpadding="0" valign=top> <tr> - <td width=105 height=40><a href="https://projects.eclipse.org/projects/tools.titan"><img src="../images/titan_transparent.gif" border=0 width=105 height=40 align="left" alt="Titan"></a></td> + <td width=105 height=40> + <a href="https://projects.eclipse.org/projects/tools.titan"> + <img src="../images/titan_transparent.gif" border=0 width=105 height=40 align="left" alt="Titan"> + </a> + </td> </tr> </table> <table border="0" align="right" cellpadding="0" cellspacing="0"> <tr> - <td><a href="../titan_main.html" alt="contents"><img border="0" src="../images/ao.jpg" width="53" height="40"></a></td> - <td><a href="../titan_index.html" alt="index"><img border="0" src="../images/up.jpg" width="53" height="40"></a></td> - <td><a alt="previous" href="int2bit.html"><img border="0" src="../images/left.jpg" width="53" height="40"></a></td> - <td><a alt="next" href="int2float.html"><img border="0" src="../images/right.jpg" width="53" height="40"></a></td> + <td><a href="../titan_main.html" alt="contents"><img border="0" src="../images/ao.jpg" width="53" height="40"></a></td> + <td><a href="../titan_index.html" alt="index"><img border="0" src="../images/up.jpg" width="53" height="40"></a></td> + <td><a alt="previous" href="int2bit.html"><img border="0" src="../images/left.jpg" width="53" height="40"></a></td> + <td><a alt="next" href="int2enum.html"><img border="0" src="../images/right.jpg" width="53" height="40"></a></td> </tr> </table> -<p><br clear="all"> -</p> -<hr> +<p> <br clear="all"> </p> +<hr/> <h1>int2char</h1> <hr align="left" width="75%"> -<p>This function converts an <b><font face="Courier New">integer</font></b> value in the range of 0 ... 127 (8-bit encoding) into a character value of ISO/IEC 646. The integer value describes the -8-bit encoding of the character. -<hr align="left" width="50%"> +<p>This function converts an + <b><font face="Courier New">integer</font></b> + value in the range of 0 ... 127 (8-bit encoding) into a character value of ISO/IEC 646. The integer value describes the + 8-bit encoding of the character. +<hr align="left" width="50%"/> <p>Related keyword:</p> <ul> <li><b><font face="Courier New" size="4" color="#003258"> <a href="integer.html">integer</a></font></b></li> <li><b><a href="charstring.html"><font face="Courier New" size="4" color="#003258"> charstring</font></a></b></li> </ul> -<hr align="left" width="50%"> +<hr align="left" width="50%"/> <div align="center"> <center> <table border="0" width="90%" bgcolor="#FFB599" cellpadding="4"> <tr> - <td width="100%"> - <h3 align="center"><font face="Courier New" color="#003258" size="5"><b>int2char</b></font><font face="Courier New" color="#003258" size="5"><b>(</b></font><i>integer value</i><font - face="Courier New" color="#003258" size="5"><b>) return charstring</b></font></h3> - </td> + <td width="100%"> + <h3 align="center"> + <font face="Courier New" color="#003258" size="5"> + <b>int2char</b> + </font> + <font face="Courier New" color="#003258" size="5"> + <b>(</b> + </font> + <i>integer value</i> + <font face="Courier New" color="#003258" size="5"> + <b>) return charstring</b> + </font> + </h3> + </td> </tr> </table> </center> @@ -59,9 +74,11 @@ </ul> <hr align="left" width="25%"> <p>Example 1:</p> -<p><font face="Courier New">var charstring MyChar; <br> -... <br> - MyChar := int2char(97); // MyChar will contain the character 'a' </font></p> +<p> +<font face="Courier New"> +var charstring MyChar;<br/> +MyChar := int2char(97); // MyChar will contain the character 'a' +</font></p> <hr align="left" width="25%"> </body> -</html> +</html> \ No newline at end of file diff --git a/help/info/int2enum.html b/help/info/int2enum.html new file mode 100644 index 000000000..279b7409f --- /dev/null +++ b/help/info/int2enum.html @@ -0,0 +1,91 @@ +<!-- + Copyright (c) 2000-2015 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 + --> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> +<meta http-equiv="Content-Language" content="en-us"> +<title>int2enum</title> +</head> +<body bgcolor="#DAD3C5" vlink="#0094D2" link="#003258"> +<table align="left" border="0" cellspacing="0" cellpadding="0" valign=top> + <tr> + <td width=105 height=40><a href="https://projects.eclipse.org/projects/tools.titan"><img src="../images/titan_transparent.gif" border=0 width=105 height=40 align="left" alt="Titan"></a></td> + </tr> +</table> +<table border="0" align="right" cellpadding="0" cellspacing="0"> + <tr> + <td><a href="../titan_main.html" alt="contents"><img border="0" src="../images/ao.jpg" width="53" height="40"></a></td> + <td><a href="../titan_index.html" alt="index"><img border="0" src="../images/up.jpg" width="53" height="40"></a></td> + <td><a alt="previous" href="int2char.html"><img border="0" src="../images/left.jpg" width="53" height="40"></a></td> + <td><a alt="next" href="int2float.html"><img border="0" src="../images/right.jpg" width="53" height="40"></a></td> + </tr> +</table> +<p><br clear="all"> +</p> +<hr> +<h1>int2enum</h1> +<hr align="left" width="75%"/> +<p>This function converts an <b><font face="Courier New">integer</font></b> value into an <b><font face="Courier New">enumerated</font></b> value of a given enumerated type. +<hr align="left" width="50%"/> +<p>Related keyword:</p> +<ul> + <li><b><font face="Courier New" size="4" color="#003258"> <a href="integer.html">integer</a></font></b></li> + <li><b><a href="enumerated.html"><font face="Courier New" size="4" color="#003258">enumerated</font></a></b></li> +</ul> +<hr align="left" width="50%"> +<div align="center"> +<center> +<table border="0" width="90%" bgcolor="#FFB599" cellpadding="4"> + <tr> + <td width="100%"> + <h3 align="center"> + <font face="Courier New" color="#003258" size="5"><b>int2enum ( in integer </b></font> + <i>inpar</i> + <font face="Courier New" color="#003258" size="5"><b> ,out</b></font> + Enumerated_type + <i>outpar</i> + <font face="Courier New" color="#003258" size="5"><b> )</b></font> + </h3> + + </td> + </tr> +</table> +</center> +</div> +<ul> + <li> + <p>The integer value shall be +provided as in parameter "inpar" and the result of the conversion shall be stored in an out parameter "outpar".</p> + </li> + <li> + <p>The type of the out parameter determines the type into which the in parameter is converted.</p> + </li> +</ul> +<hr align="left" width="25%"/> + +<p>Example:</p> +<p> + <font face="Courier New"> + type enumerated MyFirstEnumType { <br/> + Monday, Tuesday, Wednesday, Thursday, Friday <br/> + };<br/> <br/> + type enumerated MySecondEnumType {<br/> + Saturday(-3), Sunday (0), Monday<br/> + };<br/><br/> + //within a dynamic language element:<br/> + var MyFirstEnumType firstEnum := Tuesday;<br/> + var MySecondEnumType secondEnum := Sunday;<br/><br/> + int2enum(0, firstEnum) // firstEnum == Monday<br/> + int2enum(1, secondEnum) // secondEnum == Monday<br/> + </font> +</p> + +<hr align="left" width="25%"/> +</body> +</html> diff --git a/help/info/int2float.html b/help/info/int2float.html index 7af596e52..5d5894290 100644 --- a/help/info/int2float.html +++ b/help/info/int2float.html @@ -1,16 +1,16 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 - --> +--> <html> <head> -<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> -<meta http-equiv="Content-Language" content="en-us"> -<title>int2float</title> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <meta http-equiv="Content-Language" content="en-us"> + <title>int2float</title> </head> <body bgcolor="#DAD3C5" vlink="#0094D2" link="#003258"> <table align="left" border="0" cellspacing="0" cellpadding="0" valign=top> @@ -22,16 +22,15 @@ <tr> <td><a href="../titan_main.html" alt="contents"><img border="0" src="../images/ao.jpg" width="53" height="40"></a></td> <td><a href="../titan_index.html" alt="index"><img border="0" src="../images/up.jpg" width="53" height="40"></a></td> - <td><a alt="previous" href="int2char.html"><img border="0" src="../images/left.jpg" width="53" height="40"></a></td> + <td><a alt="previous" href="int2enum.html"><img border="0" src="../images/left.jpg" width="53" height="40"></a></td> <td><a alt="next" href="int2hex.html"><img border="0" src="../images/right.jpg" width="53" height="40"></a></td> </tr> </table> -<p><br clear="all"> -</p> +<p><br clear="all"></p> <hr> <h1>int2float</h1> <hr align="left" width="75%"> -<p>This function converts an <b><font face="Courier New">integer</font></b> value into a <b><font face="Courier New">float</font></b> value. +<p>This function converts an <b><font face="Courier New">integer</font></b> value into a <b><font face="Courier New">float</font></b> value.</p> <hr align="left" width="50%"> <p>Related keyword:</p> <ul> @@ -56,7 +55,7 @@ <hr align="left" width="25%"> <p>Example 1:</p> <p><font face="Courier New"> const float c_csarnoka := int2float(3); </font></p> -<p>The constant called c_csarnoka will have the floating point value 3.0. +<p>The constant called c_csarnoka will have the floating point value 3.0.</p> <hr align="left" width="25%"> </body> </html> diff --git a/help/info/int2hex.html b/help/info/int2hex.html index 68d077db2..11389da1f 100644 --- a/help/info/int2hex.html +++ b/help/info/int2hex.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/int2oct.html b/help/info/int2oct.html index 8a600ffc9..4ba6fe0fb 100644 --- a/help/info/int2oct.html +++ b/help/info/int2oct.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/int2str.html b/help/info/int2str.html index 11d0b7552..c77578612 100644 --- a/help/info/int2str.html +++ b/help/info/int2str.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/int2unichar.html b/help/info/int2unichar.html index a90ffd38a..7fccc2a62 100644 --- a/help/info/int2unichar.html +++ b/help/info/int2unichar.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/integer.html b/help/info/integer.html index cf4fe5832..0231adef2 100644 --- a/help/info/integer.html +++ b/help/info/integer.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/interleave.html b/help/info/interleave.html index 6f941010f..ee49e8d40 100644 --- a/help/info/interleave.html +++ b/help/info/interleave.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/isbound.html b/help/info/isbound.html index 76a88f74c..178e8040d 100644 --- a/help/info/isbound.html +++ b/help/info/isbound.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/ischosen.html b/help/info/ischosen.html index 480609a6d..87c602f20 100644 --- a/help/info/ischosen.html +++ b/help/info/ischosen.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/ispresent.html b/help/info/ispresent.html index 15b27af7f..eacd01156 100644 --- a/help/info/ispresent.html +++ b/help/info/ispresent.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/isvalue.html b/help/info/isvalue.html index e853f8182..e5cc3608d 100644 --- a/help/info/isvalue.html +++ b/help/info/isvalue.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/kill.html b/help/info/kill.html index cc5a3efab..4b7e8bd73 100644 --- a/help/info/kill.html +++ b/help/info/kill.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/killed.html b/help/info/killed.html index 9c38b856b..4ddc07c60 100644 --- a/help/info/killed.html +++ b/help/info/killed.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/label.html b/help/info/label.html index ea9735075..aba9a5b74 100644 --- a/help/info/label.html +++ b/help/info/label.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/language.html b/help/info/language.html index 065950f50..1b84ebb2a 100644 --- a/help/info/language.html +++ b/help/info/language.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/length.html b/help/info/length.html index 55ce6dc47..1d3c159b5 100644 --- a/help/info/length.html +++ b/help/info/length.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/lengthof.html b/help/info/lengthof.html index ce807f19b..f1cc2cfff 100644 --- a/help/info/lengthof.html +++ b/help/info/lengthof.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/log.html b/help/info/log.html index 61fbb4c73..570a3b515 100644 --- a/help/info/log.html +++ b/help/info/log.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 @@ -23,7 +23,7 @@ <td><a href="../titan_main.html" alt="contents"><img border="0" src="../images/ao.jpg" width="53" height="40"></a></td> <td><a href="../titan_index.html" alt="index"><img border="0" src="../images/up.jpg" width="53" height="40"></a></td> <td><a href="lengthof.html" alt="previous"><img border="0" src="../images/left.jpg" width="53" height="40"></a></td> - <td><a href="map.html" alt="next"><img border="0" src="../images/right.jpg" width="53" height="40"></a></td> + <td><a href="log2str.html" alt="next"><img border="0" src="../images/right.jpg" width="53" height="40"></a></td> </tr> </table> <p><br clear="all"> diff --git a/help/info/log2str.html b/help/info/log2str.html new file mode 100644 index 000000000..99fe3d8df --- /dev/null +++ b/help/info/log2str.html @@ -0,0 +1,67 @@ +<!-- + Copyright (c) 2000-2015 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 + --> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> +<meta http-equiv="Content-Language" content="en-us"> +<title>log2str</title> +</head> +<body bgcolor="#DAD3C5" vlink="#0094D2" link="#003258"> +<table align="left" border="0" cellspacing="0" cellpadding="0" valign=top> + <tr> + <td width=105 height=40><a href="https://projects.eclipse.org/projects/tools.titan"><img src="../images/titan_transparent.gif" border=0 width=105 height=40 align="left" alt="Titan"></a></td> + </tr> +</table> +<table border="0" align="right" cellpadding="0" cellspacing="0"> + <tr> + <td><a href="../titan_main.html" alt="contents"><img border="0" src="../images/ao.jpg" width="53" height="40"></a></td> + <td><a href="../titan_index.html" alt="index"><img border="0" src="../images/up.jpg" width="53" height="40"></a></td> + <td><a href="log.html" alt="previous"><img border="0" src="../images/left.jpg" width="53" height="40"></a></td> + <td><a href="map.html" alt="next"><img border="0" src="../images/right.jpg" width="53" height="40"></a></td> + </tr> +</table> +<p><br clear="all"> +</p> +<hr> +<h1>log2str</h1> +<hr align="left" width="75%"> +<p>The function log2str can be used to log into charstring instead of the log file.</p> +<hr align="left" width="50%"/> +<p>Related keyword:</p> +<ul> + <li><b><font face="Courier New" size="4" color="#003258"> <a href="log.html">log</a></font></b></li> + <li><b><a href="charstring.html"><font face="Courier New" size="4" color="#003258">charstring</font></a></b></li> +</ul> +<hr align="left" width="50%"> +<div align="center"> +<center> +<table border="0" width="90%" bgcolor="#FFB599" cellpadding="4"> + <tr> + <td width="100%"> + <h3 align="center"> + <font face="Courier New" color="#003258" size="5"><b>log2str ( ... ) return charstring"</b></font> + </h3> + </td> + </tr> +</table> +</center> +</div> +<ul> +This function can be parameterized in the same way as the log function.<br/> +It returns a charstring value which contains the log string for all the provided parameters, +but it does not contain the timestamp, severity and call stack information, thus the output does not depend on the runtime configuration file. <br/> +The parameters are interpreted the same way as they are in the log function: +their string values are identical to what the log statement writes to the log file. <br/> +The extra information (timestamp, severity, call stack) not included in the output can be obtained by writing external functions +which use the runtime’s Logger class to obtain the required data. +</ul> +<hr align="left" width="25%"> +<p><a HREF="../info/BNF.html#logstatement">BNF definition</a> of <font face="Courier New">log</font></p> +</body> +</html> diff --git a/help/info/map.html b/help/info/map.html index 49dec2dff..e653df99c 100644 --- a/help/info/map.html +++ b/help/info/map.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/match.html b/help/info/match.html index 9c3d3ff78..9f85d54a9 100644 --- a/help/info/match.html +++ b/help/info/match.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/message.html b/help/info/message.html index 8b7e30702..2d82d81e2 100644 --- a/help/info/message.html +++ b/help/info/message.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/mixed.html b/help/info/mixed.html index d12c001fa..524dbe222 100644 --- a/help/info/mixed.html +++ b/help/info/mixed.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/mod.html b/help/info/mod.html index 6faba2457..a276ed5d7 100644 --- a/help/info/mod.html +++ b/help/info/mod.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/modifies.html b/help/info/modifies.html index e1a838e02..9ff9b9d80 100644 --- a/help/info/modifies.html +++ b/help/info/modifies.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/module.html b/help/info/module.html index 18e53ffeb..279b0e132 100644 --- a/help/info/module.html +++ b/help/info/module.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/modulepar.html b/help/info/modulepar.html index 3f9ac7f33..aab4280a6 100644 --- a/help/info/modulepar.html +++ b/help/info/modulepar.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/mtc.html b/help/info/mtc.html index 5a3a6aa91..5fc7dc13d 100644 --- a/help/info/mtc.html +++ b/help/info/mtc.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/noblock.html b/help/info/noblock.html index 3a757bc1a..daad11437 100644 --- a/help/info/noblock.html +++ b/help/info/noblock.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/none.html b/help/info/none.html index 465844ac6..e24b3f690 100644 --- a/help/info/none.html +++ b/help/info/none.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/not.html b/help/info/not.html index ea6cbd0ac..2119f84e0 100644 --- a/help/info/not.html +++ b/help/info/not.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/not4b.html b/help/info/not4b.html index 23618406f..c9e1c7d63 100644 --- a/help/info/not4b.html +++ b/help/info/not4b.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/nowait.html b/help/info/nowait.html index 70fd3daad..decd5a84f 100644 --- a/help/info/nowait.html +++ b/help/info/nowait.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/null.html b/help/info/null.html index dfafcf236..bbe6ecdc2 100644 --- a/help/info/null.html +++ b/help/info/null.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/objid.html b/help/info/objid.html index 51d3d93d0..38075d892 100644 --- a/help/info/objid.html +++ b/help/info/objid.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/oct2bit.html b/help/info/oct2bit.html index aafecee1d..31c570a60 100644 --- a/help/info/oct2bit.html +++ b/help/info/oct2bit.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/oct2char.html b/help/info/oct2char.html index 5b9a3e4aa..3e98daccb 100644 --- a/help/info/oct2char.html +++ b/help/info/oct2char.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/oct2hex.html b/help/info/oct2hex.html index 9b6981119..0256d5733 100644 --- a/help/info/oct2hex.html +++ b/help/info/oct2hex.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/oct2int.html b/help/info/oct2int.html index d4fe34773..db955fdac 100644 --- a/help/info/oct2int.html +++ b/help/info/oct2int.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/oct2str.html b/help/info/oct2str.html index 665eaf6f4..7b805d895 100644 --- a/help/info/oct2str.html +++ b/help/info/oct2str.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/oct2unichar.html b/help/info/oct2unichar.html index 3d6219cad..4378fe0f3 100644 --- a/help/info/oct2unichar.html +++ b/help/info/oct2unichar.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/octetstring.html b/help/info/octetstring.html index e97382d04..49d2a1411 100644 --- a/help/info/octetstring.html +++ b/help/info/octetstring.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/of.html b/help/info/of.html index 4f42e94e8..7c5874b24 100644 --- a/help/info/of.html +++ b/help/info/of.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/omit.html b/help/info/omit.html index 218fe5426..a8555059b 100644 --- a/help/info/omit.html +++ b/help/info/omit.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/on.html b/help/info/on.html index 944626b78..2c825e80a 100644 --- a/help/info/on.html +++ b/help/info/on.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/operators.html b/help/info/operators.html index 66c7482f4..5906f4ba7 100644 --- a/help/info/operators.html +++ b/help/info/operators.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/optional.html b/help/info/optional.html index 22c315789..c1f8f9ffb 100644 --- a/help/info/optional.html +++ b/help/info/optional.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/or.html b/help/info/or.html index 6da6dfd75..456783500 100644 --- a/help/info/or.html +++ b/help/info/or.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/or4b.html b/help/info/or4b.html index 466adfa00..6f68b995c 100644 --- a/help/info/or4b.html +++ b/help/info/or4b.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/out.html b/help/info/out.html index 0918920e3..c726c9b18 100644 --- a/help/info/out.html +++ b/help/info/out.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/override.html b/help/info/override.html index 13fe624b0..a92d3b39f 100644 --- a/help/info/override.html +++ b/help/info/override.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/param.html b/help/info/param.html index 4dbaebba8..2f3357eb2 100644 --- a/help/info/param.html +++ b/help/info/param.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/pass.html b/help/info/pass.html index 7769f83a0..aa2b1ed07 100644 --- a/help/info/pass.html +++ b/help/info/pass.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/pattern.html b/help/info/pattern.html index ad908538e..5e84d4573 100644 --- a/help/info/pattern.html +++ b/help/info/pattern.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/permutation.html b/help/info/permutation.html index cd95bec87..cf1cff3d5 100644 --- a/help/info/permutation.html +++ b/help/info/permutation.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/port.html b/help/info/port.html index eb29a25f7..94ca88c70 100644 --- a/help/info/port.html +++ b/help/info/port.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/private.html b/help/info/private.html index ddc0686b5..50f893df6 100644 --- a/help/info/private.html +++ b/help/info/private.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/procedure.html b/help/info/procedure.html index 11a0b8153..ad77b9d47 100644 --- a/help/info/procedure.html +++ b/help/info/procedure.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/profiler.html b/help/info/profiler.html index 1f5c2bf29..c8403f13d 100644 --- a/help/info/profiler.html +++ b/help/info/profiler.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/public.html b/help/info/public.html index 7448a817f..0be342d6c 100644 --- a/help/info/public.html +++ b/help/info/public.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/raise.html b/help/info/raise.html index 9873bd089..1bf8a2076 100644 --- a/help/info/raise.html +++ b/help/info/raise.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/read.html b/help/info/read.html index 6fc460256..4f31e1d94 100644 --- a/help/info/read.html +++ b/help/info/read.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/receive.html b/help/info/receive.html index c78d8bd0f..5a5570f53 100644 --- a/help/info/receive.html +++ b/help/info/receive.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/record.html b/help/info/record.html index cf2c635e9..8b9826b59 100644 --- a/help/info/record.html +++ b/help/info/record.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/recursive.html b/help/info/recursive.html index d7aee11e0..702a601ab 100644 --- a/help/info/recursive.html +++ b/help/info/recursive.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 @@ -23,7 +23,7 @@ <td><a href="../titan_main.html" alt="contents"><img border="0" src="../images/ao.jpg" width="53" height="40"></a></td> <td><a href="../titan_index.html" alt="index"><img border="0" src="../images/up.jpg" width="53" height="40"></a></td> <td><a href="record.html" alt="previous"><img border="0" src="../images/left.jpg" width="53" height="40"></a></td> - <td><a href="regexp.html" alt="next"><img border="0" src="../images/right.jpg" width="53" height="40"></a></td> + <td><a href="refers.html" alt="next"><img border="0" src="../images/right.jpg" width="53" height="40"></a></td> </tr> </table> <p><br clear="all"> diff --git a/help/info/refers.html b/help/info/refers.html new file mode 100644 index 000000000..24e6f8d0a --- /dev/null +++ b/help/info/refers.html @@ -0,0 +1,68 @@ +<!-- + Copyright (c) 2000-2015 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 + --> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> +<meta http-equiv="Content-Language" content="en-us"> +<title>refers</title> +</head> +<body bgcolor="#DAD3C5" vlink="#0094D2" link="#003258"> +<table align="left" border="0" cellspacing="0" cellpadding="0" valign=top> + <tr> + <td width=105 height=40><a href="https://projects.eclipse.org/projects/tools.titan"><img src="../images/titan_transparent.gif" border=0 width=105 height=40 align="left" alt="Titan"></a></td> + </tr> +</table> +<table border="0" align="right" cellpadding="0" cellspacing="0"> + <tr> + <td><a href="../titan_main.html" alt="contents"><img border="0" src="../images/ao.jpg" width="53" height="40"></a></td> + <td><a href="../titan_index.html" alt="index"><img border="0" src="../images/up.jpg" width="53" height="40"></a></td> + <td><a alt="previous" href="recursive.html"><img border="0" src="../images/left.jpg" width="53" height="40"></a></td> + <td><a alt="next" href="regexp.html"><img border="0" src="../images/right.jpg" width="53" height="40"></a></td> + </tr> +</table> +<p><br clear="all"> +</p> +<hr> +<h1>refers</h1> +<hr align="left" width="75%"> +<p>This function is used to define a variable having reference for behavior type (reference for function type, altstep type or testcase type).</p> +<hr align="left" width="50%"> +<p>Related keyword:</p> +<ul> + <li><b><font face="Courier New" size="4" color="#003258"> <a href="type.html">type</a></font></b></li> +</ul> +<hr align="left" width="50%"> +<div align="center"> +<center> +<table border="0" width="90%" bgcolor="#FFB599" cellpadding="4"> + <tr> + <td width="100%"> + <h3 align="center"> + <font face="Courier New" color="#003258" size="5"><b>refers</b></font> + <font face="Courier New" color="#003258" size="5"><b>(</b></font> + <i>behavior_name</i> + <font face="Courier New" color="#003258" size="5"><b>) </b></font></h3> + </td> + </tr> +</table> +</center> +</div> +<ul> + <li> + <p>The <font face="Courier New" color="#003258" size="4"><b>behavior_name</b></font> denotes a name of a function, altstep or testcase.</p> + </li> + <li> + <p>Details and examples can be found under <a href="type.html#behavior_type"><b>behavior_type</b></a>.</p> + </li> +</ul> + + +<hr align="left" width="50%"> +</body> +</html> diff --git a/help/info/regexp.html b/help/info/regexp.html index b06763020..e4e533a03 100644 --- a/help/info/regexp.html +++ b/help/info/regexp.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 @@ -22,7 +22,7 @@ <tr> <td><a href="../titan_main.html" alt="contents"><img border="0" src="../images/ao.jpg" width="53" height="40"></a></td> <td><a href="../titan_index.html" alt="index"><img border="0" src="../images/up.jpg" width="53" height="40"></a></td> - <td><a alt="previous" href="recursive.html"><img border="0" src="../images/left.jpg" width="53" height="40"></a></td> + <td><a alt="previous" href="refers.html"><img border="0" src="../images/left.jpg" width="53" height="40"></a></td> <td><a alt="next" href="rem.html"><img border="0" src="../images/right.jpg" width="53" height="40"></a></td> </tr> </table> diff --git a/help/info/rem.html b/help/info/rem.html index 5281b9068..dd450b211 100644 --- a/help/info/rem.html +++ b/help/info/rem.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/remove_bom.html b/help/info/remove_bom.html index 250bd9ce5..4df316c7c 100644 --- a/help/info/remove_bom.html +++ b/help/info/remove_bom.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/repeat.html b/help/info/repeat.html index 375577eb8..8a86e6895 100644 --- a/help/info/repeat.html +++ b/help/info/repeat.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/replace.html b/help/info/replace.html index e13c4ee99..180908847 100644 --- a/help/info/replace.html +++ b/help/info/replace.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/reply.html b/help/info/reply.html index a6a1c0ca1..4f178444a 100644 --- a/help/info/reply.html +++ b/help/info/reply.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/return.html b/help/info/return.html index f75dd79a9..8c6d016fd 100644 --- a/help/info/return.html +++ b/help/info/return.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/rnd.html b/help/info/rnd.html index 2b14697b2..de5d63042 100644 --- a/help/info/rnd.html +++ b/help/info/rnd.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/running.html b/help/info/running.html index 40abdc673..773946296 100644 --- a/help/info/running.html +++ b/help/info/running.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/runs.html b/help/info/runs.html index 81feb494f..48f989544 100644 --- a/help/info/runs.html +++ b/help/info/runs.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/select.html b/help/info/select.html index a633b0f8c..c87410fea 100644 --- a/help/info/select.html +++ b/help/info/select.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/self.html b/help/info/self.html index 8241cfc1e..ecedea1f1 100644 --- a/help/info/self.html +++ b/help/info/self.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/send.html b/help/info/send.html index c7400a78d..3e1bd5d9c 100644 --- a/help/info/send.html +++ b/help/info/send.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/sender.html b/help/info/sender.html index 837fdb0af..e11ac04c7 100644 --- a/help/info/sender.html +++ b/help/info/sender.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/set.html b/help/info/set.html index 791996bd4..fc5a13c62 100644 --- a/help/info/set.html +++ b/help/info/set.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/setverdict.html b/help/info/setverdict.html index ba8e281e0..33fa5f92d 100644 --- a/help/info/setverdict.html +++ b/help/info/setverdict.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/signature.html b/help/info/signature.html index 572affdbd..a16e7b61c 100644 --- a/help/info/signature.html +++ b/help/info/signature.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/sizeof.html b/help/info/sizeof.html index 9d9e49165..db0da42f8 100644 --- a/help/info/sizeof.html +++ b/help/info/sizeof.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/start.html b/help/info/start.html index dec0f968d..b4ddf4c6f 100644 --- a/help/info/start.html +++ b/help/info/start.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/stop.html b/help/info/stop.html index 0bc493c5b..815c2cfe9 100644 --- a/help/info/stop.html +++ b/help/info/stop.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/str2bit.html b/help/info/str2bit.html index 52e7ebcae..45d37e6de 100644 --- a/help/info/str2bit.html +++ b/help/info/str2bit.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/str2float.html b/help/info/str2float.html index a621872e7..c7aa1b69b 100644 --- a/help/info/str2float.html +++ b/help/info/str2float.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/str2hex.html b/help/info/str2hex.html index 8b87335a0..52ac9b6ae 100644 --- a/help/info/str2hex.html +++ b/help/info/str2hex.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/str2int.html b/help/info/str2int.html index fcae067d8..e264e8ab5 100644 --- a/help/info/str2int.html +++ b/help/info/str2int.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/str2oct.html b/help/info/str2oct.html index 8a13767e1..e27f1d50e 100644 --- a/help/info/str2oct.html +++ b/help/info/str2oct.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/subset.html b/help/info/subset.html index 2c699e72c..e09697033 100644 --- a/help/info/subset.html +++ b/help/info/subset.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 @@ -45,7 +45,7 @@ <table border="0" width="90%" bgcolor="#FFB599" cellpadding="4"> <tr> <td width="100%"> - <h3 align="center"><font face="Courier New" color="#003258" size="5"><b>subset{</b></font><i>value_list</i><font face="Courier New" color="#003258" size="5"><b>}</b></font></h3> + <h3 align="center"><font face="Courier New" color="#003258" size="5"><b>subset(</b></font><i>value_list</i><font face="Courier New" color="#003258" size="5"><b>)</b></font></h3> </td> </tr> </table> @@ -56,8 +56,27 @@ <p><i>value_list</i> is a comma separated list containing all the values that are permitted for the concerned field. The field must not contain elements not included in the list.</p> </li> </ul> -<hr align="left" width="25%"> -<hr align="left" width="25%"> +<hr align="left" width="50%"> +<p><a name="Example 1">Example 1</a> +<font face="Courier New"> + <p>type set of integer MySetOfType (0 .. 10); + <p>template MySetOfType MyTemplate1 := subset (1, 2, 3); +</font> +<p>matches any sequence of integers which contains zero or one occurrences of the numbers 1, 2 and 3 in any order and position </p> +<p><a name="Example 2">Example 2</a> +<font face="Courier New"> + <p>template MySetOfType MyTemplate2 := subset (1, 2, ?); +</font> +<p>matches any sequence of integers which contains zero or one occurrences of the numbers 1, 2 and a valid integer value (i.e. between 0 and 10, inclusive) in any order and position </p> +<p><a name="Example 3">Example 3</a> +<font face="Courier New"> + <p>type record of integer RoI; + <p>type set of integer SoI; + <p>template RoI t_RoI1 := {1, 2, ?}; + <p>template SoI t_SoI1 := subset(all from t_RoI1); +</font> +<p>Results in subset(1, 2, ?).</p> +<hr align="left" width="50%"> <p><a HREF="BNF.html#subsetmatch">BNF definition</a> of <font face="Courier New">subset</font></p> </body> </html> diff --git a/help/info/substr.html b/help/info/substr.html index 59bbd3192..fcc490b37 100644 --- a/help/info/substr.html +++ b/help/info/substr.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/superset.html b/help/info/superset.html index 1fec6085f..4695de22a 100644 --- a/help/info/superset.html +++ b/help/info/superset.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 @@ -45,7 +45,7 @@ <table border="0" width="90%" bgcolor="#FFB599" cellpadding="4"> <tr> <td width="100%"> - <h3 align="center"><font face="Courier New" color="#003258" size="5"><b>superset{</b></font><i>value_list</i><font face="Courier New" color="#003258" size="5"><b>}</b></font></h3> + <h3 align="center"><font face="Courier New" color="#003258" size="5"><b>superset(</b></font><i>value_list</i><font face="Courier New" color="#003258" size="5"><b>)</b></font></h3> </td> </tr> </table> @@ -56,8 +56,27 @@ <p><i>value_list</i> is a comma separated list containing all the values that the concerned field must contain. The field may contain elements not included in the list.</p> </li> </ul> -<hr align="left" width="25%"> -<hr align="left" width="25%"> +<hr align="left" width="50%"> +<p><a name="Example 1">Example 1</a> +<font face="Courier New"> + <p>type set of integer MySetOfType (0 .. 10); + <p>template MySetOfType MyTemplate1 := superset (1, 2, 3); +</font> +<p>Matches any sequence of integers which contains at least one occurrences of the numbers 1, 2 and at least one more valid integer value +(i.e. between 0 and 10, inclusively), in any order and position.</p> +<p><a name="Example 2">Example 2</a> +<font face="Courier New"> + <p>template MySetOfType MyTemplate2_AnyValue := superset (1, 2, ?); +</font> +<p>Matches any sequence of integers which contains at least one occurrences of the numbers 1, 2 and at least one more valid integer value.</p> +<p><a name="Example 3">Example 3</a> +<font face="Courier New"> + <p>type record of integer RoI; + <p>type set of integer SoI; + <p>template RoI t_RoI1 := {1, 2, ?}; + <p>template SoI t_SoI1 := superset(all from t_RoI1); +</font> +<p>Results in superset(1, 2, ?) .</p> <p><a HREF="BNF.html#supersetmatch">BNF definition</a> of <font face="Courier New">superset</font></p> </body> </html> diff --git a/help/info/system.html b/help/info/system.html index 178bf1cb9..df1c1cb87 100644 --- a/help/info/system.html +++ b/help/info/system.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/template.html b/help/info/template.html index d9a4e96a3..974622893 100644 --- a/help/info/template.html +++ b/help/info/template.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/testcase.html b/help/info/testcase.html index 77c7a1d2c..52ffeb5a1 100644 --- a/help/info/testcase.html +++ b/help/info/testcase.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/testcasename.html b/help/info/testcasename.html index e30215180..c09374af7 100644 --- a/help/info/testcasename.html +++ b/help/info/testcasename.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/timeout.html b/help/info/timeout.html index d6f5b8aac..17195e72d 100644 --- a/help/info/timeout.html +++ b/help/info/timeout.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/timer.html b/help/info/timer.html index 19009e19c..aadf60503 100644 --- a/help/info/timer.html +++ b/help/info/timer.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/to.html b/help/info/to.html index 6bd354a7b..01a3e5bb5 100644 --- a/help/info/to.html +++ b/help/info/to.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/trigger.html b/help/info/trigger.html index cad631b89..0754052cc 100644 --- a/help/info/trigger.html +++ b/help/info/trigger.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/true.html b/help/info/true.html index 4af0a2f20..5ce2dde64 100644 --- a/help/info/true.html +++ b/help/info/true.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/type.html b/help/info/type.html index 688b6aece..9fe661274 100644 --- a/help/info/type.html +++ b/help/info/type.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 @@ -26,23 +26,57 @@ <td><a href="unichar2char.html" alt="next"><img border="0" src="../images/right.jpg" width="53" height="40"></a></td> </tr> </table> -<p><br clear="all"> -</p> +<p><br clear="all"></p> <hr> <h1>type</h1> <hr align="left" width="75%"> -<p>The keyword is used to specify user-defined structured types. +<p>The keyword is used to specify user-defined +<a href="#type">structured types</a>, +<a href="#subtype">subtypes</a> or +<a href="#behavior_type">behavior types</a> ( +<a href="#function_type">function type</a>, +<a href="#altstep_type">altstep type</a> or +<a href="#testcase_type">testcase type</a>).</p> + +<hr align="left" width="50%"> +<p>Related keyword:</p> +<ul> +<li><b><font face="Courier New" size="4" color="#003258"><a href="record.html">record</a></font></b></li> +<li><b><font face="Courier New" size="4" color="#003258"><a href="union.html">union</a></font></b></li> +<li><b><font face="Courier New" size="4" color="#003258"><a href="set.html">set</a></font></b></li> +<li><b><font face="Courier New" size="4" color="#003258"><a href="enumerated.html">enumerated</a></font></b></li> +<li><b><font face="Courier New" size="4" color="#003258"><a href="port.html">port</a></font></b></li> +<li><b><font face="Courier New" size="4" color="#003258"><a href="component.html">component</a></font></b></li> +<li><b><font face="Courier New" size="4" color="#003258"><a href="function.html">function</a></font></b></li> +<li><b><font face="Courier New" size="4" color="#003258"><a href="altstep.html">altstep</a></font></b></li> +<li><b><font face="Courier New" size="4" color="#003258"><a href="testcase.html">testcase</a></font></b></li> + <li><b><font face="Courier New" size="4" color="#003258"> <a href="refers.html">refers</a></font></b></li> + <li><b><a href="derefers.html"><font face="Courier New" size="4" color="#003258">derefers</font></a></b></li> + <li><b><font face="Courier New" size="4" color="#003258"><a href="apply.html">apply</a></font></b></li> +</ul> + <hr align="left" width="50%"> +<h2> <a name=#type>1. Structured type</a></h2> <div align="center"> <center> <table border="0" width="90%" bgcolor="#FFB599" cellpadding="4"> <tr> <td width="100%"> - <h3 align="center"><font face="Courier New" color="#003258" size="5"><b>type </b></font> ( <font face="Courier New" color="#003258" size="5"><b>record</b></font> | <font face="Courier New" - color="#003258" size="5"> <b>union</b></font> | <font face="Courier New" color="#003258" size="5"> <b>set</b></font> | <font face="Courier New" color="#003258" size="5"> <b>record of</b></font> - | <font face="Courier New" color="#003258" size="5"> <b>set of</b></font> | <font face="Courier New" color="#003258" size="5"> <b>enumerated</b></font> | <font face="Courier New" color="#003258" - size="5"> <b>port</b></font> | <font face="Courier New" color="#003258" size="5"> <b>component</b></font> ) <i>identifier </i> <font face="Courier New" color="#003258" size="5"> <b>{</b></font> - <i> body</i> <font face="Courier New" color="#003258" size="5"> <b>};</b></font></h3> + <h3 align="left"> + <font face="Courier New" color="#003258" size="5"><b>type </b></font> ( + <font face="Courier New" color="#003258" size="5"><b>record</b></font> | + <font face="Courier New" color="#003258" size="5"> <b>union</b></font> | + <font face="Courier New" color="#003258" size="5"> <b>set</b></font> | + <font face="Courier New" color="#003258" size="5"> <b>record of</b></font> | + <font face="Courier New" color="#003258" size="5"> <b>set of</b></font> | + <font face="Courier New" color="#003258" size="5"> <b>enumerated</b></font> | + <font face="Courier New" color="#003258" size="5"> <b>port</b></font> | + <font face="Courier New" color="#003258" size="5"> <b>component</b></font> ) + <i>identifier </i> + <font face="Courier New" color="#003258" size="5"> <b>{</b></font> + <i> body</i> + <font face="Courier New" color="#003258" size="5"> <b>};</b></font> + </h3> </td> </tr> </table> @@ -56,16 +90,19 @@ <p><a href="record.html"><font face="Courier New" color="#003258" size="4"><b>record</b></font></a> denotes an ordered structured type.</p> </li> <li> - <p><a href="union.html"><font face="Courier New" color="#003258" size="4"><b>union</b></font></a> is a structure which can take one and only one of a finite number of known types.</p> + <p><a href="union.html"><font face="Courier New" color="#003258" size="4"><b>union</b></font></a> + is a structure which can take one and only one of a finite number of known types.</p> </li> <li> <p><a href="set.html"><font face="Courier New" color="#003258" size="4"><b>set</b></font></a> denotes an unordered structured type.</p> </li> <li> - <p><a href="record.html"><font face="Courier New" color="#003258" size="4"><b>record of</b></font></a> denotes a record the elements of which are all of the same type.</p> + <p><a href="record.html"><font face="Courier New" color="#003258" size="4"><b>record of</b></font></a> + denotes a record the elements of which are all of the same type.</p> </li> <li> - <p><a href="set.html"><font face="Courier New" color="#003258" size="4"><b>set of</b></font></a> denotes a set the elements of which are all of the same type.</p> + <p><a href="set.html"><font face="Courier New" color="#003258" size="4"><b>set of</b></font></a> + denotes a set the elements of which are all of the same type.</p> </li> <li> <p><a href="enumerated.html"><font face="Courier New" color="#003258" size="4"><b>enumerated</b></font></a> stands for a type that take only a distinct named set of values.</p> @@ -83,21 +120,31 @@ <p><i>body</i> contains the type definition itself. Its content differs from type to type.</p> </li> </ul> -<hr align="left" width="75%" color="#0094D2"> +<hr align="left" width="75%" > +<h2> <a name=#subtype>2. Subtype</a></h2> <p>Another use of the keyword is the subtype definition.</p> <ul> <li>Subtypes define a new constrained type from an already existing parent type.</li> <li>When no constraint is given, it is possible to define type aliases.</li> </ul> -<hr align="left" width="50%" color="#0094D2"> +<hr align="left" width="75%"> <div align="center"> <center> <table border="0" width="90%" bgcolor="#FFB599" cellpadding="4"> <tr> <td width="100%"> - <h3 align="center"><font face="Courier New" color="#003258" size="5"><b>type</b></font> <i>parent_identifier</i> (<i>identifier </i> | <font face="Courier New" color="#003258" - size="5"> <b>address</b></font>) [<i>array_def</i>] [<font face="Courier New" color="#003258" size="5"><b>(</b></font><i>list</i><font face="Courier New" color="#003258" size="5"><b>)</b></font>] - [<i>length</i>] <font face="Courier New" color="#003258" size="5"><b>;</b></font> </h3> + <h3 align="left"> + <font face="Courier New" color="#003258" size="5"><b>type</b></font> + <i>parent_identifier</i> ( + <i>identifier </i> | + <font face="Courier New" color="#003258" size="5"> <b>address</b></font>) [ + <i>array_def</i>] [ + <font face="Courier New" color="#003258" size="5"><b>(</b></font> + <i>list</i> + <font face="Courier New" color="#003258" size="5"><b>)</b></font>] + [<i>length</i>] [ + <font face="Courier New" color="#003258" size="5"><b>;</b></font> ] + </h3> </td> </tr> </table> @@ -130,13 +177,145 @@ </li> </ul> <hr align="left" width="50%"> -<p>Example 1: -<p><font face="Courier New">type enumerated Example {tisdag, fredag, onsdag};</font> +<p>Example 1:</p> +<p><font face="Courier New">type enumerated Example {tisdag, fredag, onsdag};</font></p> <p>The enumerated type called Example containing three elements is defined.</p> -<p>Example 2: -<p><font face="Courier New">type Ex_subt Example (tisdag, onsdag);</font> +<p>Example 2:</p> +<p><font face="Courier New">type Ex_subt Example (tisdag, onsdag);</font></p> <p>The sub-type, called Ex_subt, may contain only two elements of the parent type (called Example).</p> -<hr align="left" width="25%"> + + +<hr align="left" width="75%"/> +<h2> <a name=#behavior_type>3. Behavior type</a></h2> +<p>Another use of the keyword is the behavior type definition.</p> +<p>It introduces a function type, an altstep type or a testcase type.</p> +<ul> + <li> + <p>A function, altstep or testcase has the given type if its formal parameter list, runs on type and returned value type is the same as given in the type definition.</p> + </li> +</ul> +<hr align="left" width="50%"/> +<h3> <a name=#function_type>3.1. Function type</a></h3> +<div align="center"> +<center> +<table border="0" width="90%" bgcolor="#FFB599" cellpadding="4"> + <tr> + <td width="100%"> + <h3 align="left"><font face="Courier New" color="#003258" size="5"><b>type function</b></font> <i>Function_type_name</i> <b>(</b><i> formal_parameter_list </i><b>)</b> [<font face="Courier New" color="#003258" + size="5"> <b>runs on</b></font> <i>component_type_ref </i>] [<font face="Courier New" color="#003258" size="5"><b>return</b></font><i> returned_type</i> ]<font face="Courier New" color="#003258" size="5"><b> </b>[;]</font></h3> + </td> + </tr> +</table> +</center> +</div> +<ul> + <li> + <p>The <font face="Courier New" color="#003258" size="4"><b>type function</b></font> keywords introduce the type definition.</p> + </li> + <li> + <p><i>Function_type_name</i> is the name used to refer to the function type. Must begin with a letter, may contain letters, numbers and underscore characters.</p> + </li> + <li> + <p><i>formal_parameter_list</i> is the list of the formal parameters (arguments). See the definion of <a href="function.html"><font face="Courier New" color="#003258" size="4"><b>function</b></font></a>.</p> + </li> + <li> + <p><i>component_type_ref </i> See the definion of <a href="function.html"><font face="Courier New" color="#003258" size="4"><b>function</b></font></a>.</p> + </li> + <li> + <p><i>returned_type</i> See the definion of <a href="function.html"><font face="Courier New" color="#003258" size="4"><b>function</b></font></a>.</p> + </li> +</ul> +<hr align="left" width="50%"/> +<p>Example 3:</p> +<font face="Courier New"> + <p>type function F_type(in integer pl_i) runs on CT returns charstring; // line 1</p> + <p>function f(in integer pl_ii) runs on CT returns charstring { log(pl_ii);return "Hello" }; // line 2</p> + <p>var F_type v_f := refers(f); // line 3</p> + <p>var CT v_comp := CT.create; // line 4</p> + <p>v_comp.start(derefers(v_f)(1));// line 5</p> + <p>v_f.apply(2); // line 6</p> +</font> + +<p>Line 1: Function type "F_type" is defined. Its parameter is type of integer and it is an "in" parameter. It runs on CT and its return value a charstring.</p> +<p>Line 2: The function f defined here has type of F_type. </p> +<p>Line 3: The function reference variable v_f has a type of function (reference) type F_type and its value is defined here as a reference to function f. +This definition is valid because v_f refers to the same type as f. </p> +<p>Line 5: The behavior function referenced by v_f is started on component v_comp.</p> +<p>Line 6: The function referenced by v_f is called. It is the same as calling f(2).</p> +<hr align="left" width="50%"/> +<h3> <a name=#altstep_type>3.2. Altstep type</a></h3> +<div align="center"> +<table border="0" width="90%" bgcolor="#FFB599" cellpadding="4"> + <tr> + <td width="100%"> + <h3 align="left"> + <font face="Courier New" color="#003258" size="5"><b>type altstep </b></font> + <i> altstep_identifier </i> + <font face="Courier New" color="#003258" size="5"><b>(</b></font> + [<i> altstep_parameter</i> ... ] + <font face="Courier New" color="#003258" size="5"><b>)</b></font> + <font face="Courier New" color="#003258" size="5"><b>runs on</b></font> + <i>component_type_ref</i> [ + <font face="Courier New" color="#003258" size="5"><b>;</b></font>] + </h3> + </td> + </tr> +</table> +</div> +<ul> + <li> + <p>The <font face="Courier New" color="#003258" size="4"><b>type altstep</b></font> keywords introduce the altstep type definition.</p> + </li> + <li> + <p>Details can be found in <a href="altstep.html"><font face="Courier New" color="#003258" size="4"><b>altstep</b></font></a>.</p> + </li> +</ul> +<p>Example 4:</p> +<font face="Courier New"> +<p>type component CT {} </p> +<p>type altstep As_type() runs on CT </p> +<p>altstep as_1() runs on CT {</p> +<p> [else] {}</p> +<p>}</p> +<p>testcase tc() runs on CT {</p> +<p> var As_type v_as := refers(as_1);</p> +<p> v_as.apply(); //same as "as_1();" +<p>};</p> + +</font> +<hr align="left" width="50%"> +<h3> <a name=#testcase_type>3.3. Testcase type</a></h3> +<div align="center"> +<center> +<table border="0" width="90%" bgcolor="#FFB599" cellpadding="4"> + <tr> + <td width="100%"> + <h3 align="left"> + <font face="Courier New" color="#003258" size="5"><b>type testcase</b></font> + <i> testcase_identifier </i> + <font face="Courier New" color="#003258" size="5"><b>(</b></font> [ + <i>testcase_parameters</i> + <b>...</b> ] + <font face="Courier New" color="#003258" size="5"><b>)</b></font> + <font face="Courier New" color="#003258" size="5"><b>runs on</b></font> + <i> component_type_ref </i> [ + <font face="Courier New" color="#003258" size="5"><b>system</b></font> + <i> system_component_type_ref </i>] [ + <font face="Courier New" color="#003258" size="5"><b>;</b></font> ] + </h3> + </td> + </tr> +</table> +</center> +</div> +<ul> + <li> + <p>The <font face="Courier New" color="#003258" size="4"><b>type testcase</b></font> keywords introduce the test case type definition.</p> + </li> + <li> + <p>Details can be found in <a href="testcase.html"><font face="Courier New" color="#003258" size="4"><b>testcase</b></font></a>.</p> + </li> +</ul> <p><a HREF="BNF.html#typedef">BNF definition</a> of <font face="Courier New"> type</font></p> </body> </html> diff --git a/help/info/unichar2char.html b/help/info/unichar2char.html index 9eb1767e6..e2a9be385 100644 --- a/help/info/unichar2char.html +++ b/help/info/unichar2char.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/unichar2int.html b/help/info/unichar2int.html index ea2db0ba3..f1c8effca 100644 --- a/help/info/unichar2int.html +++ b/help/info/unichar2int.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/unichar2oct.html b/help/info/unichar2oct.html index 1dff1e1d3..be3745280 100644 --- a/help/info/unichar2oct.html +++ b/help/info/unichar2oct.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/union.html b/help/info/union.html index fe66f1005..7c0f74bd7 100644 --- a/help/info/union.html +++ b/help/info/union.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/universal.html b/help/info/universal.html index 693f544d0..95130ab74 100644 --- a/help/info/universal.html +++ b/help/info/universal.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/unmap.html b/help/info/unmap.html index 626c8c62a..e3a25c919 100644 --- a/help/info/unmap.html +++ b/help/info/unmap.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/value.html b/help/info/value.html index 65b3a8735..f8110429c 100644 --- a/help/info/value.html +++ b/help/info/value.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/valueof.html b/help/info/valueof.html index 70b6ebd61..dcc6f383c 100644 --- a/help/info/valueof.html +++ b/help/info/valueof.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/var.html b/help/info/var.html index 8f2f58682..d819d2ff6 100644 --- a/help/info/var.html +++ b/help/info/var.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/variant.html b/help/info/variant.html index b953fdb5e..3ecadf566 100644 --- a/help/info/variant.html +++ b/help/info/variant.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/verdicttype.html b/help/info/verdicttype.html index eaf507f2a..d282cef4c 100644 --- a/help/info/verdicttype.html +++ b/help/info/verdicttype.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/while.html b/help/info/while.html index 06afc85e7..8f5e308df 100644 --- a/help/info/while.html +++ b/help/info/while.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/with.html b/help/info/with.html index 5cb194a17..d8f0c0fed 100644 --- a/help/info/with.html +++ b/help/info/with.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/xor.html b/help/info/xor.html index 35df1c72f..297addc18 100644 --- a/help/info/xor.html +++ b/help/info/xor.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/info/xor4b.html b/help/info/xor4b.html index 6915335ba..11f01f2a0 100644 --- a/help/info/xor4b.html +++ b/help/info/xor4b.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/titan.hhc b/help/titan.hhc index 9cbb595ae..e880e0e87 100644 --- a/help/titan.hhc +++ b/help/titan.hhc @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/help/titan.hhp b/help/titan.hhp index d2e5bfc3f..a1300bbd5 100644 --- a/help/titan.hhp +++ b/help/titan.hhp @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/help/titan_index.html b/help/titan_index.html index a35510a29..767e3cc2a 100644 --- a/help/titan_index.html +++ b/help/titan_index.html @@ -1,11 +1,11 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 - --> +--> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> @@ -16,7 +16,7 @@ <body bgcolor="#DAD3C5" vlink="#0094D2" link="#003258"> <table align="left" border="0" cellspacing="0" cellpadding="0" valign=top> <tr> - <td width=105 height=40><a href="https://projects.eclipse.org/projects/tools.titan"><img src="images/titan_transparent.gif" border=0 width=105 height=40 align="left" alt="Titan"></a></td> + <td width=105 height=40><a href="https://projects.eclipse.org/projects/tools.titan"><img src="images/titan_transparent.gif" border=0 width=105 height=40 align="left" alt="Titan"></a></td> </tr> </table> <table border="0" align="right" cellpadding="0" cellspacing="0"> @@ -47,7 +47,7 @@ <td width="17%"><a href="info/and4b.html">and4b</a></td> <td width="17%"><a href="info/any.html">any</a></td> <td width="17%"><a href="info/anytype.html">anytype</a></td> - <td width="17%"> </td> + <td width="17%"><a href="info/apply.html">apply</a></td> <td width="17%"> </td> <td width="17%"> </td> </tr> @@ -92,18 +92,18 @@ <td width="17%"><a href="info/decode_base64.html">decode_base64</a></td> <td width="17%"><a href="info/decvalue.html">decvalue</a></td> <td width="17%"><a href="info/default.html">default</a></td> + <td width="17%"><a href="info/derefers.html">derefers</a></td> <td width="17%"><a href="info/disconnect.html">disconnect</a></td> <td width="17%"><a href="info/display.html">display</a></td> - <td width="17%"><a href="info/do.html">do</a></td> </tr> <tr> + <td width="17%"><a href="info/do.html">do</a></td> <td width="17%"><a href="info/done.html">done</a></td> <td width="17%"> </td> <td width="17%"> </td> <td width="17%"> </td> <td width="17%"> </td> <td width="17%"> </td> - <td width="17%"> </td> </tr> <tr> <td width="17%"><a name="e"></a><a href="info/else.html">else</a></td> @@ -171,20 +171,20 @@ <tr> <td width="17%"><a href="info/int2bit.html">int2bit</a></td> <td width="17%"><a href="info/int2char.html">int2char</a></td> + <td width="17%"><a href="info/int2enum.html">int2enum</a></td> <td width="17%"><a href="info/int2float.html">int2float</a></td> <td width="17%"><a href="info/int2hex.html">int2hex</a></td> <td width="17%"><a href="info/int2oct.html">int2oct</a></td> <td width="17%"><a href="info/int2str.html">int2str</a></td> - <td width="17%"><a href="info/int2unichar.html">int2unichar</a></td> </tr> <tr> + <td width="17%"><a href="info/int2unichar.html">int2unichar</a></td> <td width="17%"><a href="info/integer.html">integer</a></td> <td width="17%"><a href="info/interleave.html">interleave</a></td> <td width="17%"><a href="info/isbound.html">isbound</a></td> <td width="17%"><a href="info/ischosen.html">ischosen</a></td> <td width="17%"><a href="info/ispresent.html">ispresent</a></td> <td width="17%"><a href="info/isvalue.html">isvalue</a></td> - <td width="17%"> </td> </tr> <tr> <td width="17%"><a name="k"></a><a href="info/kill.html">kill</a></td> @@ -201,7 +201,7 @@ <td width="17%"><a href="info/length.html">length</a></td> <td width="17%"><a href="info/lengthof.html">lengthof</a></td> <td width="17%"><a href="info/log.html">log</a></td> - <td width="17%"> </td> + <td width="17%"><a href="info/log2str.html">log2str</a></td> <td width="17%"> </td> </tr> <tr> @@ -282,26 +282,26 @@ <td width="17%"><a href="info/receive.html">receive</a></td> <td width="17%"><a href="info/record.html">record</a></td> <td width="17%"><a href="info/recursive.html">recursive</a></td> - <td width="17%"><a href="info/regexp.html">regexp</a></td> - <td width="17%"><a href="info/rem.html">rem</a></td> + <td width="17%"><a href="info/refers.html">refers</a></td> + <td width="17%"><a href="info/regexp.html">regexp</a></td> </tr> <tr> + <td width="17%"><a href="info/rem.html">rem</a></td> <td width="17%"><a href="info/remove_bom.html">remove_bom</a></td> <td width="17%"><a href="info/repeat.html">repeat</a></td> <td width="17%"><a href="info/replace.html">replace</a></td> <td width="17%"><a href="info/reply.html">reply</a></td> <td width="17%"><a href="info/return.html">return</a></td> <td width="17%"><a href="info/rnd.html">rnd</a></td> - <td width="17%"><a href="info/running.html">running</a></td> </tr> - <tr> + <tr> + <td width="17%"><a href="info/running.html">running</a></td> <td width="17%"><a href="info/runs.html">runs</a></td> <td width="17%"> </td> <td width="17%"> </td> <td width="17%"> </td> <td width="17%"> </td> <td width="17%"> </td> - <td width="17%"> </td> </tr> <tr> <td width="17%"><a href="info/select.html">select</a></td> @@ -384,7 +384,7 @@ <td width="17%"> </td> <td width="17%"> </td> </tr> - <tr> + <tr> <td width="17%"><a name="@"></a><a href="info/profiler.html">@profiler</a></td> <td width="17%"> </td> <td width="17%"> </td> diff --git a/help/titan_main.html b/help/titan_main.html index 1c7e9a32e..9a46fea4e 100644 --- a/help/titan_main.html +++ b/help/titan_main.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 @@ -64,7 +64,7 @@ </ul> </li> <li> - <p align="left"><a href="http://www.ttcn3.org/StandardSuite.htm">TTCN-3 standards</a> + <p align="left"><a href="http://www.ttcn-3.org/index.php/downloads/standards">TTCN-3 standards</a> <ul> <li><a href="http://www.etsi.org/deliver/etsi_es\201800_201899\20187301\04.02.01_60\es_20187301v040201p.pdf" target="_blank">ETSI ES 201 873-1 v4.1.2</a>: TTCN-3 Core Language</li> <li><a href="http://www.etsi.org/deliver/etsi_es\201800_201899\20187304\04.01.01_60\es_20187304v040101p.pdf" target="_blank">ETSI ES 201 873-4 v4.1.1</a>: TTCN-3 Operational Semantics</li> @@ -93,10 +93,10 @@ <p align="left"><a href="docs/userguide.pdf" target="_blank">TITAN User Guide</a> </li> <li> - <p align="left"><a href="docs/Eclipse_Designer_userguide.pdf">TITAN Designer for the Eclipse IDE User Guide</a> + <p align="left"><a href="docs/Eclipse_Designer_userguide.pdf" target="_blank">TITAN Designer for the Eclipse IDE User Guide</a> </li> <li> - <p align="left"><a href="docs/Eclipse_Executor_userguide.pdf">TITAN Executor for the Eclipse IDE User Guide</a> + <p align="left"><a href="docs/Eclipse_Executor_userguide.pdf" target="_blank">TITAN Executor for the Eclipse IDE User Guide</a> </li> <li> <p align="left"><a href="docs/referenceguide.pdf" target="_blank">Programmer's Technical Reference for TITAN</a> @@ -108,7 +108,7 @@ <p align="left"><a href="docs/installationguide.pdf" target="_blank">TITAN Installation Guide</a> </li> <li> - <p align="left"><a href="docs/Eclipse_installationguide.pdf">TITAN Designer and TITAN Executor for the Eclipse IDE Installation Guide</a> + <p align="left"><a href="docs/Eclipse_installationguide.pdf" target="_blank">TITAN Designer and TITAN Executor for the Eclipse IDE Installation Guide</a> </li> <li> <p align="left"><a href="docs/releasenotes.pdf" target="_blank">Release Notes for TITAN</a></p> diff --git a/help/ttcn3_help b/help/ttcn3_help index a81e5aa1a..3db12048a 100644 --- a/help/ttcn3_help +++ b/help/ttcn3_help @@ -2,7 +2,7 @@ # #! /bin/sh -x ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/langviz/Grammar.cc b/langviz/Grammar.cc index 1546fca41..85a60ed81 100644 --- a/langviz/Grammar.cc +++ b/langviz/Grammar.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/langviz/Grammar.hh b/langviz/Grammar.hh index ee8a2ba74..8f3f53ae2 100644 --- a/langviz/Grammar.hh +++ b/langviz/Grammar.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/langviz/Graph.cc b/langviz/Graph.cc index 4ba49f51a..e016cdfac 100644 --- a/langviz/Graph.cc +++ b/langviz/Graph.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/langviz/Graph.hh b/langviz/Graph.hh index 0360892d9..6589fe318 100644 --- a/langviz/Graph.hh +++ b/langviz/Graph.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/langviz/Iterator.cc b/langviz/Iterator.cc index 439787ab6..d2c6e6955 100644 --- a/langviz/Iterator.cc +++ b/langviz/Iterator.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/langviz/Iterator.hh b/langviz/Iterator.hh index 67b1d27da..14a8ea2aa 100644 --- a/langviz/Iterator.hh +++ b/langviz/Iterator.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/langviz/Makefile b/langviz/Makefile index 94cfaecc5..8bb2d87d1 100644 --- a/langviz/Makefile +++ b/langviz/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/langviz/Node.cc b/langviz/Node.cc index 09cde1969..5defb1fd1 100644 --- a/langviz/Node.cc +++ b/langviz/Node.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/langviz/Node.hh b/langviz/Node.hh index d4b41d53d..070604ae9 100644 --- a/langviz/Node.hh +++ b/langviz/Node.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/langviz/Rule.cc b/langviz/Rule.cc index 43ab512fb..40fd5ec68 100644 --- a/langviz/Rule.cc +++ b/langviz/Rule.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/langviz/Rule.hh b/langviz/Rule.hh index 9014a827f..f509bce6d 100644 --- a/langviz/Rule.hh +++ b/langviz/Rule.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/langviz/Symbol.cc b/langviz/Symbol.cc index ab0cf12a7..a04459a0a 100644 --- a/langviz/Symbol.cc +++ b/langviz/Symbol.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/langviz/Symbol.hh b/langviz/Symbol.hh index 5ab761a14..cbfff95cf 100644 --- a/langviz/Symbol.hh +++ b/langviz/Symbol.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/langviz/bison_la.l b/langviz/bison_la.l index be1254b53..c2bfd0d57 100644 --- a/langviz/bison_la.l +++ b/langviz/bison_la.l @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/langviz/bison_p.y b/langviz/bison_p.y index f69d5fdff..8034e12a6 100644 --- a/langviz/bison_p.y +++ b/langviz/bison_p.y @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/langviz/error.c b/langviz/error.c index c5e7133db..bf6bc6637 100644 --- a/langviz/error.c +++ b/langviz/error.c @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/langviz/error.h b/langviz/error.h index d28fa1291..97e6d837e 100644 --- a/langviz/error.h +++ b/langviz/error.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/langviz/main.cc b/langviz/main.cc index 38eb7ae3c..30eaca1d3 100644 --- a/langviz/main.cc +++ b/langviz/main.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/license/Makefile b/license/Makefile index e5de509a1..e2da83ece 100644 --- a/license/Makefile +++ b/license/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/license/Makefile_renew_license b/license/Makefile_renew_license index 2d46dd64e..b6b3eb034 100644 --- a/license/Makefile_renew_license +++ b/license/Makefile_renew_license @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/license/license.dat b/license/license.dat index 6cc561a0b..2b98250a4 100644 --- a/license/license.dat +++ b/license/license.dat @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/license/license_gen.c b/license/license_gen.c index b02c61090..d306ad938 100644 --- a/license/license_gen.c +++ b/license/license_gen.c @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/license/renew_license.c b/license/renew_license.c index bef7c7239..cb45ed7a4 100644 --- a/license/renew_license.c +++ b/license/renew_license.c @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/license/renew_license.html b/license/renew_license.html index 6f3610fc5..c812ae640 100644 --- a/license/renew_license.html +++ b/license/renew_license.html @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/loggerplugins/JUnitLogger/JUnitLogger.cc b/loggerplugins/JUnitLogger/JUnitLogger.cc index d15dc3cea..c5eede8a6 100644 --- a/loggerplugins/JUnitLogger/JUnitLogger.cc +++ b/loggerplugins/JUnitLogger/JUnitLogger.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/loggerplugins/JUnitLogger/JUnitLogger.hh b/loggerplugins/JUnitLogger/JUnitLogger.hh index a40e61434..3c40b6451 100644 --- a/loggerplugins/JUnitLogger/JUnitLogger.hh +++ b/loggerplugins/JUnitLogger/JUnitLogger.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/loggerplugins/JUnitLogger/Makefile b/loggerplugins/JUnitLogger/Makefile index cfb04ebcf..3f137bbe3 100644 --- a/loggerplugins/JUnitLogger/Makefile +++ b/loggerplugins/JUnitLogger/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/loggerplugins/JUnitLogger2/JUnitLogger2.cc b/loggerplugins/JUnitLogger2/JUnitLogger2.cc index 825056ea0..0e38052dc 100644 --- a/loggerplugins/JUnitLogger2/JUnitLogger2.cc +++ b/loggerplugins/JUnitLogger2/JUnitLogger2.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/loggerplugins/JUnitLogger2/JUnitLogger2.hh b/loggerplugins/JUnitLogger2/JUnitLogger2.hh index 702981540..7726f416a 100644 --- a/loggerplugins/JUnitLogger2/JUnitLogger2.hh +++ b/loggerplugins/JUnitLogger2/JUnitLogger2.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/loggerplugins/JUnitLogger2/Makefile b/loggerplugins/JUnitLogger2/Makefile index 98bb5751e..6ec7a0353 100644 --- a/loggerplugins/JUnitLogger2/Makefile +++ b/loggerplugins/JUnitLogger2/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/loggerplugins/Makefile b/loggerplugins/Makefile index 19b40d502..fe83955af 100644 --- a/loggerplugins/Makefile +++ b/loggerplugins/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/loggerplugins/TSTLogger/Makefile b/loggerplugins/TSTLogger/Makefile index 8a0027303..e8ad97527 100644 --- a/loggerplugins/TSTLogger/Makefile +++ b/loggerplugins/TSTLogger/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/loggerplugins/TSTLogger/TSTLogger.cc b/loggerplugins/TSTLogger/TSTLogger.cc index c29a2736e..849bdf5f9 100644 --- a/loggerplugins/TSTLogger/TSTLogger.cc +++ b/loggerplugins/TSTLogger/TSTLogger.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/loggerplugins/TSTLogger/TSTLogger.hh b/loggerplugins/TSTLogger/TSTLogger.hh index f1a522ba0..bb7acc6f8 100644 --- a/loggerplugins/TSTLogger/TSTLogger.hh +++ b/loggerplugins/TSTLogger/TSTLogger.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/makefiles/Makefile.personal.bangjohansen b/makefiles/Makefile.personal.bangjohansen index 39572cc03..94d4d43d6 100644 --- a/makefiles/Makefile.personal.bangjohansen +++ b/makefiles/Makefile.personal.bangjohansen @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/makefiles/Makefile.personal.cygwin15 b/makefiles/Makefile.personal.cygwin15 index abf7365a0..78cd133b9 100644 --- a/makefiles/Makefile.personal.cygwin15 +++ b/makefiles/Makefile.personal.cygwin15 @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/makefiles/Makefile.personal.ehubuux110 b/makefiles/Makefile.personal.ehubuux110 index 93ee3f171..2458f90d9 100644 --- a/makefiles/Makefile.personal.ehubuux110 +++ b/makefiles/Makefile.personal.ehubuux110 @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/makefiles/Makefile.personal.elx1pjld12-hz b/makefiles/Makefile.personal.elx1pjld12-hz new file mode 100644 index 000000000..9a515ba5a --- /dev/null +++ b/makefiles/Makefile.personal.elx1pjld12-hz @@ -0,0 +1,2 @@ +OPENSSL_DIR := default +JDKDIR := /usr/lib/jvm/java-7-openjdk-amd64 \ No newline at end of file diff --git a/makefiles/Makefile.personal.esekilxxen1843.rnd.ericsson.se b/makefiles/Makefile.personal.esekilxxen1843.rnd.ericsson.se index 50e788007..e18daad92 100644 --- a/makefiles/Makefile.personal.esekilxxen1843.rnd.ericsson.se +++ b/makefiles/Makefile.personal.esekilxxen1843.rnd.ericsson.se @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/makefiles/Makefile.personal.esekits1024 b/makefiles/Makefile.personal.esekits1024 index 113334d20..62b75151f 100644 --- a/makefiles/Makefile.personal.esekits1024 +++ b/makefiles/Makefile.personal.esekits1024 @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/makefiles/Makefile.personal.esekits1080 b/makefiles/Makefile.personal.esekits1080 index d84c7e044..0b3b68ae1 100644 --- a/makefiles/Makefile.personal.esekits1080 +++ b/makefiles/Makefile.personal.esekits1080 @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/makefiles/Makefile.personal.esekits3013 b/makefiles/Makefile.personal.esekits3013 index 528fc2bbd..2c71dd524 100644 --- a/makefiles/Makefile.personal.esekits3013 +++ b/makefiles/Makefile.personal.esekits3013 @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/makefiles/Makefile.personal.esekiux5120 b/makefiles/Makefile.personal.esekiux5120 index d84c7e044..0b3b68ae1 100644 --- a/makefiles/Makefile.personal.esekiux5120 +++ b/makefiles/Makefile.personal.esekiux5120 @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/makefiles/Makefile.personal.tcclab1 b/makefiles/Makefile.personal.tcclab1 index 36ccc2e04..3ba7ed714 100644 --- a/makefiles/Makefile.personal.tcclab1 +++ b/makefiles/Makefile.personal.tcclab1 @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/makefiles/Makefile.personal.tcclab2 b/makefiles/Makefile.personal.tcclab2 index 546ab1372..9b9232e67 100644 --- a/makefiles/Makefile.personal.tcclab2 +++ b/makefiles/Makefile.personal.tcclab2 @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 @@ -21,6 +21,8 @@ COMPILERFLAGS += -g LDFLAGS += -g endif +LDFLAGS += -ldl + CC := /usr/bin/gcc CXX := /usr/bin/g++ diff --git a/makefiles/Makefile.personal.tcclab3 b/makefiles/Makefile.personal.tcclab3 index 0ca21ef61..f40c5895e 100644 --- a/makefiles/Makefile.personal.tcclab3 +++ b/makefiles/Makefile.personal.tcclab3 @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/makefiles/Makefile.personal.tcclab4 b/makefiles/Makefile.personal.tcclab4 index fd6d723db..d2bbc4ec8 100644 --- a/makefiles/Makefile.personal.tcclab4 +++ b/makefiles/Makefile.personal.tcclab4 @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/makefiles/Makefile.personal.tcclab5 b/makefiles/Makefile.personal.tcclab5 index 8d49aaf7b..af45888b7 100644 --- a/makefiles/Makefile.personal.tcclab5 +++ b/makefiles/Makefile.personal.tcclab5 @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/makefiles/Makefile.personal.tcclab6 b/makefiles/Makefile.personal.tcclab6 index b4823f176..308300e7c 100644 --- a/makefiles/Makefile.personal.tcclab6 +++ b/makefiles/Makefile.personal.tcclab6 @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/mctr2/Makefile b/mctr2/Makefile index f53225f3d..f293c97bc 100644 --- a/mctr2/Makefile +++ b/mctr2/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/mctr2/cli/Cli.cc b/mctr2/cli/Cli.cc index 709ad165e..101930f98 100644 --- a/mctr2/cli/Cli.cc +++ b/mctr2/cli/Cli.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -10,7 +10,7 @@ // Author: Gecse Roland // mail: ethrge@eth.ericsson.se // -// Copyright Ericsson Telecom AB 2000-2014 +// Copyright (c) 2000-2015 Ericsson Telecom AB // //---------------------------------------------------------------------------- #include "Cli.h" @@ -242,7 +242,7 @@ void Cli::printWelcome() "*************************************************************************\n" "* TTCN-3 Test Executor - Main Controller 2 *\n" "* Version: %-40s *\n" - "* Copyright (c) 2000-2014 Ericsson Telecom AB *\n" + "* Copyright (c) 2000-2015 Ericsson Telecom AB *\n" "* All rights reserved. This program and the accompanying materials *\n" "* are made available under the terms of the Eclipse Public License v1.0 *\n" "* which accompanies this distribution, and is available at *\n" diff --git a/mctr2/cli/Cli.h b/mctr2/cli/Cli.h index 7aa3fb2d5..bd12162ac 100644 --- a/mctr2/cli/Cli.h +++ b/mctr2/cli/Cli.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -10,7 +10,7 @@ // Author: Vilmos Varga // mail: ethvva@eth.ericsson.se // -// Copyright Ericsson Telecom AB 2000-2014 +// Copyright (c) 2000-2015 Ericsson Telecom AB // #ifndef CLI_CLI_H #define CLI_CLI_H diff --git a/mctr2/cli/Makefile b/mctr2/cli/Makefile index cfb8beffc..5d9e47216 100644 --- a/mctr2/cli/Makefile +++ b/mctr2/cli/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/mctr2/cli/config_read.l b/mctr2/cli/config_read.l index 12978bdb7..f9a02b0fa 100644 --- a/mctr2/cli/config_read.l +++ b/mctr2/cli/config_read.l @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 @@ -334,11 +334,17 @@ IPV6 [0-9A-Fa-f:.]+(%[0-9A-Za-z]+)? {NUMBER} { yylval.int_val = NULL; BN_dec2bn(&yylval.int_val, *yytext == '+' ? yytext + 1 : yytext); + if (YY_START == SC_MODULE_PARAMETERS) { + RETURN(MPNumber); + } RETURN(Number); } {FLOAT} { yylval.float_val = atof(yytext); + if (YY_START == SC_MODULE_PARAMETERS) { + RETURN(MPFloat); + } RETURN(Float); } @@ -375,6 +381,9 @@ IPV6 [0-9A-Fa-f:.]+(%[0-9A-Za-z]+)? {CHARSTRING} { yylval.str_val = mcopystrn(yytext, yyleng); + if (YY_START == SC_MODULE_PARAMETERS) { + RETURN(MPCstring); + } RETURN(Cstring); } @@ -656,7 +665,7 @@ WARNING_UNQUALIFIED RETURN(LoggingBit); <SC_MODULE_PARAMETERS>{ASN1LOWERIDENTIFIER} { char *ttcn3_id = (char*)Malloc(yyleng + 1); - for (int i = 0; i < yyleng; i++) { + for (size_t i = 0; i < yyleng; i++) { if (yytext[i] == '-') ttcn3_id[i] = '_'; else ttcn3_id[i] = yytext[i]; } @@ -670,7 +679,7 @@ WARNING_UNQUALIFIED RETURN(LoggingBit); <SC_GROUPS,SC_COMPONENTS,SC_MAIN_CONTROLLER>{DNSNAME}|{IPV6} { yylval.str_val = (char*)Malloc(yyleng + 1); - for (int i = 0; i < yyleng; i++) yylval.str_val[i] = tolower(yytext[i]); + for (size_t i = 0; i < yyleng; i++) yylval.str_val[i] = tolower(yytext[i]); yylval.str_val[yyleng] = '\0'; RETURN(DNSName); } @@ -728,6 +737,9 @@ WARNING_UNQUALIFIED RETURN(LoggingBit); if (whether_update_buffer()) cfg->config_read_buffer = mputprintf(cfg->config_read_buffer, "%s ", int_val_str); OPENSSL_free(int_val_str); + if (YY_START == SC_MODULE_PARAMETERS) { + return MPNumber; + } return Number; } @@ -752,6 +764,9 @@ WARNING_UNQUALIFIED RETURN(LoggingBit); Free(macroname); if (whether_update_buffer()) cfg->config_read_buffer = mputprintf(cfg->config_read_buffer, "%f ", yylval.float_val); + if (YY_START == SC_MODULE_PARAMETERS) { + return MPFloat; + } return Float; } @@ -800,6 +815,9 @@ WARNING_UNQUALIFIED RETURN(LoggingBit); "name `%s'", macroname); yylval.str_val = memptystr(); Free(macroname); + if (YY_START == SC_MODULE_PARAMETERS) { + return MPCstring; + } return Cstring; } @@ -830,6 +848,9 @@ WARNING_UNQUALIFIED RETURN(LoggingBit); } Free(macroname); yylval.str_val = mcopystr(macrovalue); + if (YY_START == SC_MODULE_PARAMETERS) { + return MPCstring; + } return Cstring; } } diff --git a/mctr2/cli/config_read.y b/mctr2/cli/config_read.y index fa787f2a2..d9b03a5a6 100644 --- a/mctr2/cli/config_read.y +++ b/mctr2/cli/config_read.y @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 @@ -130,8 +130,8 @@ static void yyprint(FILE *file, int type, const YYSTYPE& value); %token <str_val> Identifier %token ASN1LowerIdentifier "ASN.1 identifier beginning with a lowercase letter" %token MacroRValue -%token <int_val> Number -%token <float_val> Float +%token <int_val> Number MPNumber "integer value" +%token <float_val> Float MPFloat "float value" %token BooleanValue "true or false" %token VerdictValue %token Bstring "bit string value" @@ -141,6 +141,7 @@ static void yyprint(FILE *file, int type, const YYSTYPE& value); %token HstringMatch "hex string template" %token OstringMatch "octet string template" %token <str_val> Cstring "character string value" +%token <str_val> MPCstring "charstring value" %token <str_val> DNSName "a host name" %token LoggingBit %token LoggingBitCollection @@ -191,6 +192,7 @@ HostName ComponentName ComponentLocation Cstring +MPCstring StringValue LogFileName @@ -203,21 +205,22 @@ ExecuteItem %destructor { BN_free($$); } IntegerValue Number +MPNumber +%left '&' /* to avoid shift/reduce conflicts */ %left '+' '-' %left '*' '/' %left UnarySign -%expect 2 +%expect 1 /* -Source of conflicts (2 S/R): +Source of conflicts (1 S/R): -1.) 2 conflicts in two distinct states -When seeing a '*' token after an integer or float value in section -[MODULE_PARAMETERS] parser cannot decide whether the token is a multiplication -operator (shift) or it refers to all modules in the next module parameter -(reduce). +1.) 1 conflict +When seeing a '*' token after a module parameter expression the parser cannot +decide whether the token is a multiplication operator (shift) or it refers to +all modules in the next module parameter (reduce). The built-in Bison behavior always chooses the shift over the reduce (the * is interpreted as multiplication). @@ -266,15 +269,15 @@ ParameterName: ParameterNameSegment: ParameterNameSegment '.' Identifier { Free($3); } -| ParameterNameSegment '[' Number ']' { BN_free($3); } +| ParameterNameSegment IndexItemIndex | Identifier { Free($1); } ParameterValue: - SimpleParameterValue -| SimpleParameterValue LengthMatch -| SimpleParameterValue IfpresentKeyword -| SimpleParameterValue LengthMatch IfpresentKeyword + ParameterExpression +| ParameterExpression LengthMatch +| ParameterExpression IfpresentKeyword +| ParameterExpression LengthMatch IfpresentKeyword ; LengthMatch: @@ -284,21 +287,37 @@ LengthMatch: ; LengthBound: - IntegerValue { BN_free($1); } + ParameterExpression +; + +ParameterExpression: + SimpleParameterValue +| ParameterReference +| '(' ParameterExpression ')' +| '+' ParameterExpression %prec UnarySign +| '-' ParameterExpression %prec UnarySign +| ParameterExpression '+' ParameterExpression +| ParameterExpression '-' ParameterExpression +| ParameterExpression '*' ParameterExpression +| ParameterExpression '/' ParameterExpression +| ParameterExpression '&' ParameterExpression +; + +ParameterReference: + ParameterNameSegment ; SimpleParameterValue: - IntegerValue { BN_free($1); } -| FloatValue + MPNumber { BN_free($1); } +| MPFloat | BooleanValue | ObjIdValue | VerdictValue | BitstringValue | HexstringValue | OctetstringValue -| Cstring { Free($1); } +| MPCstring { Free($1); } | UniversalCharstringValue -| EnumeratedValue | OmitKeyword | NULLKeyword | nullKeyword @@ -307,7 +326,7 @@ SimpleParameterValue: | IntegerRange | FloatRange | StringRange -| PatternKeyword PatternChunkList +| PatternKeyword PatternChunk | BstringMatch | HstringMatch | OstringMatch @@ -316,26 +335,21 @@ SimpleParameterValue: | SystemKeyword ; -PatternChunkList: - PatternChunk -| PatternChunkList '&' PatternChunk -; - PatternChunk: - Cstring { Free($1); } + MPCstring { Free($1); } | Quadruple ; IntegerRange: - '(' '-' InfinityKeyword DotDot IntegerValue ')' { BN_free($5); } -| '(' IntegerValue DotDot IntegerValue ')' { BN_free($2); BN_free($4); } -| '(' IntegerValue DotDot InfinityKeyword ')' { BN_free($2); } + '(' '-' InfinityKeyword DotDot MPNumber ')' { BN_free($5); } +| '(' MPNumber DotDot MPNumber ')' { BN_free($2); BN_free($4); } +| '(' MPNumber DotDot InfinityKeyword ')' { BN_free($2); } ; FloatRange: - '(' '-' InfinityKeyword DotDot FloatValue ')' -| '(' FloatValue DotDot FloatValue ')' -| '(' FloatValue DotDot InfinityKeyword ')' + '(' '-' InfinityKeyword DotDot MPFloat ')' +| '(' MPFloat DotDot MPFloat ')' +| '(' MPFloat DotDot InfinityKeyword ')' ; StringRange: @@ -426,111 +440,53 @@ ObjIdComponent: ; NumberForm: - Number { BN_free($1); } + MPNumber { BN_free($1); } ; NameAndNumberForm: - Identifier '(' Number ')' { Free($1); BN_free($3); } + Identifier '(' MPNumber ')' { Free($1); BN_free($3); } ; BitstringValue: Bstring - | BitstringValue ConcatOp Bstring ; HexstringValue: Hstring - | HexstringValue ConcatOp Hstring ; OctetstringValue: Ostring - | OctetstringValue ConcatOp Ostring ; UniversalCharstringValue: - Cstring seqUniversalCharstringFragment { Free($1); } - | Quadruple - | Quadruple seqUniversalCharstringFragment -; - -seqUniversalCharstringFragment: - ConcatOp UniversalCharstringFragment - | seqUniversalCharstringFragment ConcatOp UniversalCharstringFragment + Quadruple ; UniversalCharstringFragment: - Cstring { Free($1); } + MPCstring { Free($1); } | Quadruple ; Quadruple: - CharKeyword '(' IntegerValue ',' IntegerValue ',' IntegerValue ',' - IntegerValue ')' -{ - char *int_val_str_1 = BN_bn2dec($3); - char *int_val_str_2 = BN_bn2dec($5); - char *int_val_str_3 = BN_bn2dec($7); - char *int_val_str_4 = BN_bn2dec($9); - BIGNUM *BN_0 = BN_new(); - BN_set_word(BN_0, 0); - BIGNUM *BN_127 = BN_new(); - BN_set_word(BN_127, 127); - BIGNUM *BN_255 = BN_new(); - BN_set_word(BN_255, 255); - if (BN_cmp($3, BN_0) < 0 || BN_cmp($3, BN_127) > 0) - config_read_error("An integer value within range 0 .. 127 was expected " - "as first number of quadruple (group) instead of " - "%s.", int_val_str_1); - if (BN_cmp($5, BN_0) < 0 || BN_cmp($5, BN_255) > 0) - config_read_error("An integer value within range 0 .. 255 was expected " - "as second number of quadruple (plane) instead of %s.", - int_val_str_2); - if (BN_cmp($7, BN_0) < 0 || BN_cmp($7, BN_255) > 0) - config_read_error("An integer value within range 0 .. 255 was expected " - "as third number of quadruple (row) instead of %s.", - int_val_str_3); - if (BN_cmp($9, BN_0) < 0 || BN_cmp($9, BN_255) > 0) - config_read_error("An integer value within range 0 .. 255 was expected " - "as fourth number of quadruple (cell) instead of %d.", - int_val_str_4); - BN_free(BN_0); - BN_free(BN_127); - BN_free(BN_255); - BN_free($3); - BN_free($5); - BN_free($7); - BN_free($9); - OPENSSL_free(int_val_str_1); - OPENSSL_free(int_val_str_2); - OPENSSL_free(int_val_str_3); - OPENSSL_free(int_val_str_4); -} -; - -ConcatOp: - '&' + CharKeyword '(' ParameterExpression ',' ParameterExpression ',' + ParameterExpression ',' ParameterExpression ')' ; StringValue: Cstring { $$ = $1; } - | StringValue ConcatOp Cstring { + | StringValue '&' Cstring { $$ = mputstr($1, $3); Free($3); } ; -EnumeratedValue: - Identifier { Free($1); } - | ASN1LowerIdentifier -; - CompoundValue: '{' '}' | '{' FieldValueList '}' | '{' ArrayItemList '}' | '{' IndexItemList '}' -| '(' ParameterValue ',' TemplateItemList ')' /* at least 2 elements to avoid shift/reduce conflicts with IntegerValue and FloatValue rules */ +| '(' ParameterValue ',' TemplateItemList ')' /* at least 2 elements to avoid shift/reduce conflicts with the ParameterExpression rule */ | ComplementKeyword '(' TemplateItemList ')' | SupersetKeyword '(' TemplateItemList ')' | SubsetKeyword '(' TemplateItemList ')' @@ -580,7 +536,7 @@ IndexItem: ; IndexItemIndex: - '[' IntegerValue ']' { BN_free($2); } + '[' ParameterExpression ']' ; /******************* [LOGGING] section *******************/ diff --git a/mctr2/editline/Makefile b/mctr2/editline/Makefile index e379e884a..67ae8507d 100644 --- a/mctr2/editline/Makefile +++ b/mctr2/editline/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/mctr2/mctr/MainController.cc b/mctr2/mctr/MainController.cc index e5d0ca05d..cfb9919ef 100644 --- a/mctr2/mctr/MainController.cc +++ b/mctr2/mctr/MainController.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -10,7 +10,7 @@ // Author: Janos Zoltan Szabo // mail: tmpjsz@eth.ericsson.se // -// Copyright Ericsson Telecom AB 2000-2014 +// Copyright (c) 2000-2015 Ericsson Telecom AB // //---------------------------------------------------------------------------- diff --git a/mctr2/mctr/MainController.h b/mctr2/mctr/MainController.h index e32a5de3d..ead55f518 100644 --- a/mctr2/mctr/MainController.h +++ b/mctr2/mctr/MainController.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -10,7 +10,7 @@ // Author: Janos Zoltan Szabo // mail: tmpjsz@eth.ericsson.se // -// Copyright Ericsson Telecom AB 2000-2014 +// Copyright (c) 2000-2015 Ericsson Telecom AB // #ifndef MCTR_MAINCONTROLLER_H #define MCTR_MAINCONTROLLER_H diff --git a/mctr2/mctr/Makefile b/mctr2/mctr/Makefile index 75d23ed67..3d86ba94d 100644 --- a/mctr2/mctr/Makefile +++ b/mctr2/mctr/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/mctr2/mctr/MctrError.cc b/mctr2/mctr/MctrError.cc index ca3f9c97e..f0b2b6cf4 100644 --- a/mctr2/mctr/MctrError.cc +++ b/mctr2/mctr/MctrError.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/mctr2/mctr/UserInterface.cc b/mctr2/mctr/UserInterface.cc index 55eaee2d8..88046be41 100644 --- a/mctr2/mctr/UserInterface.cc +++ b/mctr2/mctr/UserInterface.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -10,7 +10,7 @@ // Author: Vilmos Varga // mail: ethvva@eth.ericsson.se // -// Copyright Ericsson Telecom AB 2000-2014 +// Copyright (c) 2000-2015 Ericsson Telecom AB // //---------------------------------------------------------------------------- #include "UserInterface.h" diff --git a/mctr2/mctr/UserInterface.h b/mctr2/mctr/UserInterface.h index c0b384196..c6b297411 100644 --- a/mctr2/mctr/UserInterface.h +++ b/mctr2/mctr/UserInterface.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -10,7 +10,7 @@ // Author: Vilmos Varga // mail: ethvva@eth.ericsson.se // -// Copyright Ericsson Telecom AB 2000-2014 +// Copyright (c) 2000-2015 Ericsson Telecom AB // #ifndef MCTR_USERINTERFACE_H #define MCTR_USERINTERFACE_H diff --git a/mctr2/mctr/config_data.cc b/mctr2/mctr/config_data.cc index 021f67a7f..ae5b29e1b 100644 --- a/mctr2/mctr/config_data.cc +++ b/mctr2/mctr/config_data.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/mctr2/mctr/config_data.h b/mctr2/mctr/config_data.h index 4d568e1c5..072661bd1 100644 --- a/mctr2/mctr/config_data.h +++ b/mctr2/mctr/config_data.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/mctr2/mctr/main.cc b/mctr2/mctr/main.cc index 16c0d0ace..e5a1845a6 100644 --- a/mctr2/mctr/main.cc +++ b/mctr2/mctr/main.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -10,7 +10,7 @@ // Author: Vilmos Varga // mail: ethvva@eth.ericsson.se // -// Copyright Ericsson Telecom AB 2000-2014 +// Copyright (c) 2000-2015 Ericsson Telecom AB // //---------------------------------------------------------------------------- diff --git a/mctr2/mctr/ttcn3_start b/mctr2/mctr/ttcn3_start index 960342c60..3ddc49475 100755 --- a/mctr2/mctr/ttcn3_start +++ b/mctr2/mctr/ttcn3_start @@ -1,7 +1,7 @@ #!/bin/sh ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/parser/Makefile b/parser/Makefile index 8dbee09a9..5b01bd66a 100644 --- a/parser/Makefile +++ b/parser/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/parser/parser.l b/parser/parser.l index 0eb1fa1e0..4091d42b9 100644 --- a/parser/parser.l +++ b/parser/parser.l @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/parser/parser.y b/parser/parser.y index 1936213d0..89ca1e1a0 100644 --- a/parser/parser.y +++ b/parser/parser.y @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 @@ -2961,7 +2961,7 @@ void parse_input() int main(int argc, char *argv[]) { puts("TTCN-3 parser. Complies with BNF v3.0.0\n" - "Copyright Ericsson Telecom AB 2000-2014"); + "Copyright (c) 2000-2015 Ericsson Telecom AB"); if (argc > 1) { int i; for (i = 1; i < argc; i++) { diff --git a/regression_test/ASN1/Makefile b/regression_test/ASN1/Makefile index 01fb895e2..04688fe7f 100644 --- a/regression_test/ASN1/Makefile +++ b/regression_test/ASN1/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test303/Makefile b/regression_test/ASN1/Test303/Makefile index 9db4fcf13..3f46f5dac 100644 --- a/regression_test/ASN1/Test303/Makefile +++ b/regression_test/ASN1/Test303/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test303/Test303A.asn b/regression_test/ASN1/Test303/Test303A.asn index a61999922..9be12a30a 100644 --- a/regression_test/ASN1/Test303/Test303A.asn +++ b/regression_test/ASN1/Test303/Test303A.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test303/Test303T.ttcn b/regression_test/ASN1/Test303/Test303T.ttcn index 62bd51209..05dc8b1ab 100644 --- a/regression_test/ASN1/Test303/Test303T.ttcn +++ b/regression_test/ASN1/Test303/Test303T.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test303/config.cfg b/regression_test/ASN1/Test303/config.cfg index da51cbef0..9196d4c89 100644 --- a/regression_test/ASN1/Test303/config.cfg +++ b/regression_test/ASN1/Test303/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test307/Makefile b/regression_test/ASN1/Test307/Makefile index dc1791387..2939b2341 100644 --- a/regression_test/ASN1/Test307/Makefile +++ b/regression_test/ASN1/Test307/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test307/Test307A.asn b/regression_test/ASN1/Test307/Test307A.asn index d7fc1099c..2ea37467c 100644 --- a/regression_test/ASN1/Test307/Test307A.asn +++ b/regression_test/ASN1/Test307/Test307A.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test307/Test307T.ttcn b/regression_test/ASN1/Test307/Test307T.ttcn index 2326fce8e..ac98a151a 100644 --- a/regression_test/ASN1/Test307/Test307T.ttcn +++ b/regression_test/ASN1/Test307/Test307T.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test308/Makefile b/regression_test/ASN1/Test308/Makefile index 8c8ffa7fa..0177209ef 100644 --- a/regression_test/ASN1/Test308/Makefile +++ b/regression_test/ASN1/Test308/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test308/Test308A.asn b/regression_test/ASN1/Test308/Test308A.asn index 3ac3111da..e6fad5c3b 100644 --- a/regression_test/ASN1/Test308/Test308A.asn +++ b/regression_test/ASN1/Test308/Test308A.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test308/Test308T.ttcn b/regression_test/ASN1/Test308/Test308T.ttcn index 332403bc6..2c117ee28 100644 --- a/regression_test/ASN1/Test308/Test308T.ttcn +++ b/regression_test/ASN1/Test308/Test308T.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test309/Makefile b/regression_test/ASN1/Test309/Makefile index 742e495d2..017f3ccc9 100644 --- a/regression_test/ASN1/Test309/Makefile +++ b/regression_test/ASN1/Test309/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test309/Test309A.asn b/regression_test/ASN1/Test309/Test309A.asn index 7326eeb93..91127a0cd 100644 --- a/regression_test/ASN1/Test309/Test309A.asn +++ b/regression_test/ASN1/Test309/Test309A.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test309/Test309T.ttcn b/regression_test/ASN1/Test309/Test309T.ttcn index 9c6212be1..16b31d0a0 100644 --- a/regression_test/ASN1/Test309/Test309T.ttcn +++ b/regression_test/ASN1/Test309/Test309T.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test310/Makefile b/regression_test/ASN1/Test310/Makefile index 3f274b903..0077e225f 100644 --- a/regression_test/ASN1/Test310/Makefile +++ b/regression_test/ASN1/Test310/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test310/Test310A.asn b/regression_test/ASN1/Test310/Test310A.asn index ccf1b9fc3..a793a378c 100644 --- a/regression_test/ASN1/Test310/Test310A.asn +++ b/regression_test/ASN1/Test310/Test310A.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test310/Test310T.ttcn b/regression_test/ASN1/Test310/Test310T.ttcn index d32f84e63..a16909b4e 100644 --- a/regression_test/ASN1/Test310/Test310T.ttcn +++ b/regression_test/ASN1/Test310/Test310T.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test330/Makefile b/regression_test/ASN1/Test330/Makefile index 15c1c8301..031345bbc 100644 --- a/regression_test/ASN1/Test330/Makefile +++ b/regression_test/ASN1/Test330/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test330/Test330A.asn b/regression_test/ASN1/Test330/Test330A.asn index 443442912..0e79c9993 100644 --- a/regression_test/ASN1/Test330/Test330A.asn +++ b/regression_test/ASN1/Test330/Test330A.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test330/Test330T.ttcn b/regression_test/ASN1/Test330/Test330T.ttcn index 3263ac57e..f744d5642 100644 --- a/regression_test/ASN1/Test330/Test330T.ttcn +++ b/regression_test/ASN1/Test330/Test330T.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test332/Makefile b/regression_test/ASN1/Test332/Makefile index c07711389..486ff21ae 100644 --- a/regression_test/ASN1/Test332/Makefile +++ b/regression_test/ASN1/Test332/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test332/Test332A.asn b/regression_test/ASN1/Test332/Test332A.asn index 0cd6457df..8be5ef92a 100644 --- a/regression_test/ASN1/Test332/Test332A.asn +++ b/regression_test/ASN1/Test332/Test332A.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test332/Test332T.ttcn b/regression_test/ASN1/Test332/Test332T.ttcn index 25edda685..f76f2a0c1 100644 --- a/regression_test/ASN1/Test332/Test332T.ttcn +++ b/regression_test/ASN1/Test332/Test332T.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test338/Makefile b/regression_test/ASN1/Test338/Makefile index b744cd218..7928402ae 100644 --- a/regression_test/ASN1/Test338/Makefile +++ b/regression_test/ASN1/Test338/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test338/Test338A.asn b/regression_test/ASN1/Test338/Test338A.asn index fb389596f..d45fe0f5f 100644 --- a/regression_test/ASN1/Test338/Test338A.asn +++ b/regression_test/ASN1/Test338/Test338A.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test338/Test338T.ttcn b/regression_test/ASN1/Test338/Test338T.ttcn index cc7e9b2ab..965c02087 100644 --- a/regression_test/ASN1/Test338/Test338T.ttcn +++ b/regression_test/ASN1/Test338/Test338T.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test340/Makefile b/regression_test/ASN1/Test340/Makefile index 935d3e914..d138505fa 100644 --- a/regression_test/ASN1/Test340/Makefile +++ b/regression_test/ASN1/Test340/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test340/Test340A.asn b/regression_test/ASN1/Test340/Test340A.asn index c44c2c932..2d5d231ba 100644 --- a/regression_test/ASN1/Test340/Test340A.asn +++ b/regression_test/ASN1/Test340/Test340A.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test340/Test340T.ttcn b/regression_test/ASN1/Test340/Test340T.ttcn index 497d845fd..c970643f9 100644 --- a/regression_test/ASN1/Test340/Test340T.ttcn +++ b/regression_test/ASN1/Test340/Test340T.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test342/Makefile b/regression_test/ASN1/Test342/Makefile index b177b8ea1..12885c7e6 100644 --- a/regression_test/ASN1/Test342/Makefile +++ b/regression_test/ASN1/Test342/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test342/Test342A.asn b/regression_test/ASN1/Test342/Test342A.asn index 5094e72eb..237f20ae8 100644 --- a/regression_test/ASN1/Test342/Test342A.asn +++ b/regression_test/ASN1/Test342/Test342A.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test342/Test342T.ttcn b/regression_test/ASN1/Test342/Test342T.ttcn index 3ea2b1494..3cdbae1bb 100644 --- a/regression_test/ASN1/Test342/Test342T.ttcn +++ b/regression_test/ASN1/Test342/Test342T.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test344/Makefile b/regression_test/ASN1/Test344/Makefile index 21332782a..c2871d26b 100644 --- a/regression_test/ASN1/Test344/Makefile +++ b/regression_test/ASN1/Test344/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test344/Test344A.asn b/regression_test/ASN1/Test344/Test344A.asn index 1cecf78db..bc5c08fef 100644 --- a/regression_test/ASN1/Test344/Test344A.asn +++ b/regression_test/ASN1/Test344/Test344A.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test344/Test344T.ttcn b/regression_test/ASN1/Test344/Test344T.ttcn index 34996eaf1..18766fc92 100644 --- a/regression_test/ASN1/Test344/Test344T.ttcn +++ b/regression_test/ASN1/Test344/Test344T.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test346/Makefile b/regression_test/ASN1/Test346/Makefile index ed189207c..13885d389 100644 --- a/regression_test/ASN1/Test346/Makefile +++ b/regression_test/ASN1/Test346/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test346/Test346A.asn b/regression_test/ASN1/Test346/Test346A.asn index e243ab205..659c22d54 100644 --- a/regression_test/ASN1/Test346/Test346A.asn +++ b/regression_test/ASN1/Test346/Test346A.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test346/Test346T.ttcn b/regression_test/ASN1/Test346/Test346T.ttcn index 2faa380c2..6efb81f11 100644 --- a/regression_test/ASN1/Test346/Test346T.ttcn +++ b/regression_test/ASN1/Test346/Test346T.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test348/Makefile b/regression_test/ASN1/Test348/Makefile index d31b9f68e..a2e9d5345 100644 --- a/regression_test/ASN1/Test348/Makefile +++ b/regression_test/ASN1/Test348/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test348/Test348A.asn b/regression_test/ASN1/Test348/Test348A.asn index 4e344cfec..d09de815a 100644 --- a/regression_test/ASN1/Test348/Test348A.asn +++ b/regression_test/ASN1/Test348/Test348A.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test348/Test348T.ttcn b/regression_test/ASN1/Test348/Test348T.ttcn index 3bd41f053..85840c392 100644 --- a/regression_test/ASN1/Test348/Test348T.ttcn +++ b/regression_test/ASN1/Test348/Test348T.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test350/Makefile b/regression_test/ASN1/Test350/Makefile index bc7aaf197..fa9dd21cb 100644 --- a/regression_test/ASN1/Test350/Makefile +++ b/regression_test/ASN1/Test350/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test350/Test350A.asn b/regression_test/ASN1/Test350/Test350A.asn index 232a371c7..8c6be7520 100644 --- a/regression_test/ASN1/Test350/Test350A.asn +++ b/regression_test/ASN1/Test350/Test350A.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test350/Test350T.ttcn b/regression_test/ASN1/Test350/Test350T.ttcn index 849f166cf..b4d6b934a 100644 --- a/regression_test/ASN1/Test350/Test350T.ttcn +++ b/regression_test/ASN1/Test350/Test350T.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test350/config.cfg b/regression_test/ASN1/Test350/config.cfg index f6dd13c22..3df8932c7 100644 --- a/regression_test/ASN1/Test350/config.cfg +++ b/regression_test/ASN1/Test350/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test352/Makefile b/regression_test/ASN1/Test352/Makefile index f28f96142..8fb1a9939 100644 --- a/regression_test/ASN1/Test352/Makefile +++ b/regression_test/ASN1/Test352/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test352/Test352A.asn b/regression_test/ASN1/Test352/Test352A.asn index e7002b1c9..8ad2d4f1b 100644 --- a/regression_test/ASN1/Test352/Test352A.asn +++ b/regression_test/ASN1/Test352/Test352A.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test352/Test352T.ttcn b/regression_test/ASN1/Test352/Test352T.ttcn index a5cee891f..a32407d2c 100644 --- a/regression_test/ASN1/Test352/Test352T.ttcn +++ b/regression_test/ASN1/Test352/Test352T.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test352/config.cfg b/regression_test/ASN1/Test352/config.cfg index 865ee9caa..47e87e789 100644 --- a/regression_test/ASN1/Test352/config.cfg +++ b/regression_test/ASN1/Test352/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test354/Makefile b/regression_test/ASN1/Test354/Makefile index 0ca5e112d..638ec3ff8 100644 --- a/regression_test/ASN1/Test354/Makefile +++ b/regression_test/ASN1/Test354/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test354/Test354A.asn b/regression_test/ASN1/Test354/Test354A.asn index 1c03b62e2..8a68a6f1a 100644 --- a/regression_test/ASN1/Test354/Test354A.asn +++ b/regression_test/ASN1/Test354/Test354A.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test354/Test354T.ttcn b/regression_test/ASN1/Test354/Test354T.ttcn index e2bc00ea8..8b9d18b09 100644 --- a/regression_test/ASN1/Test354/Test354T.ttcn +++ b/regression_test/ASN1/Test354/Test354T.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test354/config.cfg b/regression_test/ASN1/Test354/config.cfg index e425731d2..506e7d22b 100644 --- a/regression_test/ASN1/Test354/config.cfg +++ b/regression_test/ASN1/Test354/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test356/Makefile b/regression_test/ASN1/Test356/Makefile index 8e01df39e..83bf16841 100644 --- a/regression_test/ASN1/Test356/Makefile +++ b/regression_test/ASN1/Test356/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test356/Test356A.asn b/regression_test/ASN1/Test356/Test356A.asn index aaf687f90..d850eedd1 100644 --- a/regression_test/ASN1/Test356/Test356A.asn +++ b/regression_test/ASN1/Test356/Test356A.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test356/Test356T.ttcn b/regression_test/ASN1/Test356/Test356T.ttcn index 513d8858d..02fec8285 100644 --- a/regression_test/ASN1/Test356/Test356T.ttcn +++ b/regression_test/ASN1/Test356/Test356T.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test356/config.cfg b/regression_test/ASN1/Test356/config.cfg index 708bdd4f0..9bac68f6b 100644 --- a/regression_test/ASN1/Test356/config.cfg +++ b/regression_test/ASN1/Test356/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test358/Makefile b/regression_test/ASN1/Test358/Makefile index 30657213c..f360feae0 100644 --- a/regression_test/ASN1/Test358/Makefile +++ b/regression_test/ASN1/Test358/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test358/Test358A.asn b/regression_test/ASN1/Test358/Test358A.asn index 0abd5a73b..54520ca68 100644 --- a/regression_test/ASN1/Test358/Test358A.asn +++ b/regression_test/ASN1/Test358/Test358A.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test358/Test358T.ttcn b/regression_test/ASN1/Test358/Test358T.ttcn index 5bcee704a..39eb981e7 100644 --- a/regression_test/ASN1/Test358/Test358T.ttcn +++ b/regression_test/ASN1/Test358/Test358T.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test358/config.cfg b/regression_test/ASN1/Test358/config.cfg index 91460bc54..fe679abe1 100644 --- a/regression_test/ASN1/Test358/config.cfg +++ b/regression_test/ASN1/Test358/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test360/Makefile b/regression_test/ASN1/Test360/Makefile index 64cfe6b3e..bfb5c6915 100644 --- a/regression_test/ASN1/Test360/Makefile +++ b/regression_test/ASN1/Test360/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test360/Test360A.asn b/regression_test/ASN1/Test360/Test360A.asn index 8c5a0ee2c..dd2c47f49 100644 --- a/regression_test/ASN1/Test360/Test360A.asn +++ b/regression_test/ASN1/Test360/Test360A.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test360/Test360T.ttcn b/regression_test/ASN1/Test360/Test360T.ttcn index da2a3edc4..e044c5db1 100644 --- a/regression_test/ASN1/Test360/Test360T.ttcn +++ b/regression_test/ASN1/Test360/Test360T.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test360/config.cfg b/regression_test/ASN1/Test360/config.cfg index 5d7cbc9c5..1a182e809 100644 --- a/regression_test/ASN1/Test360/config.cfg +++ b/regression_test/ASN1/Test360/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test38/Makefile b/regression_test/ASN1/Test38/Makefile index d16c388af..72979382b 100644 --- a/regression_test/ASN1/Test38/Makefile +++ b/regression_test/ASN1/Test38/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test38/Test38A.asn b/regression_test/ASN1/Test38/Test38A.asn index 31c48d22f..a4d48cf05 100644 --- a/regression_test/ASN1/Test38/Test38A.asn +++ b/regression_test/ASN1/Test38/Test38A.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/Test38/Test38B.asn b/regression_test/ASN1/Test38/Test38B.asn index e9244f188..b39a0c686 100644 --- a/regression_test/ASN1/Test38/Test38B.asn +++ b/regression_test/ASN1/Test38/Test38B.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/codeGeneration2/Makefile b/regression_test/ASN1/codeGeneration2/Makefile index 84cecab54..74c1b4791 100644 --- a/regression_test/ASN1/codeGeneration2/Makefile +++ b/regression_test/ASN1/codeGeneration2/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/codeGeneration2/Test46.asn b/regression_test/ASN1/codeGeneration2/Test46.asn index edab927f0..9f004d592 100644 --- a/regression_test/ASN1/codeGeneration2/Test46.asn +++ b/regression_test/ASN1/codeGeneration2/Test46.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/codeGeneration2/Test48.asn b/regression_test/ASN1/codeGeneration2/Test48.asn index d66ab6db2..75b1e7f41 100644 --- a/regression_test/ASN1/codeGeneration2/Test48.asn +++ b/regression_test/ASN1/codeGeneration2/Test48.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/codeGeneration2/Test49.asn b/regression_test/ASN1/codeGeneration2/Test49.asn index cc406e4a3..6c8d6d245 100644 --- a/regression_test/ASN1/codeGeneration2/Test49.asn +++ b/regression_test/ASN1/codeGeneration2/Test49.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/codeGeneration2/Test51.asn b/regression_test/ASN1/codeGeneration2/Test51.asn index 4678fdad7..a723f3cfd 100644 --- a/regression_test/ASN1/codeGeneration2/Test51.asn +++ b/regression_test/ASN1/codeGeneration2/Test51.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/codeGeneration2/Test52.asn b/regression_test/ASN1/codeGeneration2/Test52.asn index 41000bee9..c3dc3dfe4 100644 --- a/regression_test/ASN1/codeGeneration2/Test52.asn +++ b/regression_test/ASN1/codeGeneration2/Test52.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/codeGeneration2/Test53.asn b/regression_test/ASN1/codeGeneration2/Test53.asn index c8511706f..0236b7a8d 100644 --- a/regression_test/ASN1/codeGeneration2/Test53.asn +++ b/regression_test/ASN1/codeGeneration2/Test53.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/codeGeneration2/Test54.asn b/regression_test/ASN1/codeGeneration2/Test54.asn index c41559e5a..6a20edde4 100644 --- a/regression_test/ASN1/codeGeneration2/Test54.asn +++ b/regression_test/ASN1/codeGeneration2/Test54.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/codeGeneration2/Test55.asn b/regression_test/ASN1/codeGeneration2/Test55.asn index 514b67cd3..1e33adcd4 100644 --- a/regression_test/ASN1/codeGeneration2/Test55.asn +++ b/regression_test/ASN1/codeGeneration2/Test55.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/codeGeneration2/Test56.asn b/regression_test/ASN1/codeGeneration2/Test56.asn index 71a5d8e3e..823308621 100644 --- a/regression_test/ASN1/codeGeneration2/Test56.asn +++ b/regression_test/ASN1/codeGeneration2/Test56.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/codeGeneration2/Test57.asn b/regression_test/ASN1/codeGeneration2/Test57.asn index b3ec8eaeb..476e2c5fe 100644 --- a/regression_test/ASN1/codeGeneration2/Test57.asn +++ b/regression_test/ASN1/codeGeneration2/Test57.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/codeGeneration2/Test60.asn b/regression_test/ASN1/codeGeneration2/Test60.asn index 59fc7b95a..90bf3e0f3 100644 --- a/regression_test/ASN1/codeGeneration2/Test60.asn +++ b/regression_test/ASN1/codeGeneration2/Test60.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/codeGeneration2/Test61.asn b/regression_test/ASN1/codeGeneration2/Test61.asn index 51c674f48..27c9534f4 100644 --- a/regression_test/ASN1/codeGeneration2/Test61.asn +++ b/regression_test/ASN1/codeGeneration2/Test61.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/codeGeneration2/Test62.asn b/regression_test/ASN1/codeGeneration2/Test62.asn index 2abb5d743..d8ba8920f 100644 --- a/regression_test/ASN1/codeGeneration2/Test62.asn +++ b/regression_test/ASN1/codeGeneration2/Test62.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/codeGeneration2/Test63.asn b/regression_test/ASN1/codeGeneration2/Test63.asn index 35f9e42fc..56b93f615 100644 --- a/regression_test/ASN1/codeGeneration2/Test63.asn +++ b/regression_test/ASN1/codeGeneration2/Test63.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/codeGeneration2/Test64.asn b/regression_test/ASN1/codeGeneration2/Test64.asn index bd292d44d..a4ad18bdf 100644 --- a/regression_test/ASN1/codeGeneration2/Test64.asn +++ b/regression_test/ASN1/codeGeneration2/Test64.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/codeGeneration2/Test65.asn b/regression_test/ASN1/codeGeneration2/Test65.asn index 1d1d4b3eb..1deef2bc1 100644 --- a/regression_test/ASN1/codeGeneration2/Test65.asn +++ b/regression_test/ASN1/codeGeneration2/Test65.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/codeGeneration2/Test66.asn b/regression_test/ASN1/codeGeneration2/Test66.asn index d9ee81d7c..aa3e32f0b 100644 --- a/regression_test/ASN1/codeGeneration2/Test66.asn +++ b/regression_test/ASN1/codeGeneration2/Test66.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/codeGeneration2/Test68.asn b/regression_test/ASN1/codeGeneration2/Test68.asn index 3364b9f3f..58e01ef8b 100644 --- a/regression_test/ASN1/codeGeneration2/Test68.asn +++ b/regression_test/ASN1/codeGeneration2/Test68.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/codeGeneration2/Test71.asn b/regression_test/ASN1/codeGeneration2/Test71.asn index 7779d095a..3ae2fa318 100644 --- a/regression_test/ASN1/codeGeneration2/Test71.asn +++ b/regression_test/ASN1/codeGeneration2/Test71.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/codeGeneration2/Test74.asn b/regression_test/ASN1/codeGeneration2/Test74.asn index a2446f5c7..15d702d3b 100644 --- a/regression_test/ASN1/codeGeneration2/Test74.asn +++ b/regression_test/ASN1/codeGeneration2/Test74.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/codeGeneration2/Test75.asn b/regression_test/ASN1/codeGeneration2/Test75.asn index 8e7482d95..a2c8d8f56 100644 --- a/regression_test/ASN1/codeGeneration2/Test75.asn +++ b/regression_test/ASN1/codeGeneration2/Test75.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/codeGeneration2/Test76.asn b/regression_test/ASN1/codeGeneration2/Test76.asn index ecb563441..9b3d67997 100644 --- a/regression_test/ASN1/codeGeneration2/Test76.asn +++ b/regression_test/ASN1/codeGeneration2/Test76.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/codeGeneration2/Test77.asn b/regression_test/ASN1/codeGeneration2/Test77.asn index 21f5b8c33..260ae9661 100644 --- a/regression_test/ASN1/codeGeneration2/Test77.asn +++ b/regression_test/ASN1/codeGeneration2/Test77.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/codeGeneration2/Test78.asn b/regression_test/ASN1/codeGeneration2/Test78.asn index 15ecb00a9..4d2578f22 100644 --- a/regression_test/ASN1/codeGeneration2/Test78.asn +++ b/regression_test/ASN1/codeGeneration2/Test78.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/codeGeneration2/Test80.asn b/regression_test/ASN1/codeGeneration2/Test80.asn index 845c7d461..a2a351d0c 100644 --- a/regression_test/ASN1/codeGeneration2/Test80.asn +++ b/regression_test/ASN1/codeGeneration2/Test80.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/codeGeneration2/Test81.asn b/regression_test/ASN1/codeGeneration2/Test81.asn index cc0d65426..5cec67051 100644 --- a/regression_test/ASN1/codeGeneration2/Test81.asn +++ b/regression_test/ASN1/codeGeneration2/Test81.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/codeGeneration2/Test83.asn b/regression_test/ASN1/codeGeneration2/Test83.asn index 7b640dcf1..f4aa7fb68 100644 --- a/regression_test/ASN1/codeGeneration2/Test83.asn +++ b/regression_test/ASN1/codeGeneration2/Test83.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/codeGeneration2/Test86.asn b/regression_test/ASN1/codeGeneration2/Test86.asn index f77bb6cff..151ab05ab 100644 --- a/regression_test/ASN1/codeGeneration2/Test86.asn +++ b/regression_test/ASN1/codeGeneration2/Test86.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/codeGeneration2/Test87.asn b/regression_test/ASN1/codeGeneration2/Test87.asn index 7631301d5..7c61c1dd2 100644 --- a/regression_test/ASN1/codeGeneration2/Test87.asn +++ b/regression_test/ASN1/codeGeneration2/Test87.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/enum1/Makefile b/regression_test/ASN1/enum1/Makefile index 94b2e52b4..807a6f8d9 100644 --- a/regression_test/ASN1/enum1/Makefile +++ b/regression_test/ASN1/enum1/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/enum1/Test23.asn b/regression_test/ASN1/enum1/Test23.asn index 8dadba7a3..5225923f3 100644 --- a/regression_test/ASN1/enum1/Test23.asn +++ b/regression_test/ASN1/enum1/Test23.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/enum2/Makefile b/regression_test/ASN1/enum2/Makefile index 848645f61..66cd518c3 100644 --- a/regression_test/ASN1/enum2/Makefile +++ b/regression_test/ASN1/enum2/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/enum2/Test25.asn b/regression_test/ASN1/enum2/Test25.asn index 47b80c556..8c7589b5b 100644 --- a/regression_test/ASN1/enum2/Test25.asn +++ b/regression_test/ASN1/enum2/Test25.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/errorMessages/Makefile b/regression_test/ASN1/errorMessages/Makefile index 4b0e4e9d7..dc5b8640a 100644 --- a/regression_test/ASN1/errorMessages/Makefile +++ b/regression_test/ASN1/errorMessages/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/errorMessages/Test11.asn b/regression_test/ASN1/errorMessages/Test11.asn index d0df00217..cd5233193 100644 --- a/regression_test/ASN1/errorMessages/Test11.asn +++ b/regression_test/ASN1/errorMessages/Test11.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/errorMessages/Test12.asn b/regression_test/ASN1/errorMessages/Test12.asn index d99f9bea2..7bc5f3a70 100644 --- a/regression_test/ASN1/errorMessages/Test12.asn +++ b/regression_test/ASN1/errorMessages/Test12.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/errorMessages/Test13.asn b/regression_test/ASN1/errorMessages/Test13.asn index 05092a23e..a34bdbe29 100644 --- a/regression_test/ASN1/errorMessages/Test13.asn +++ b/regression_test/ASN1/errorMessages/Test13.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/errorMessages/Test14.asn b/regression_test/ASN1/errorMessages/Test14.asn index 7e930ca67..b5c123aa2 100644 --- a/regression_test/ASN1/errorMessages/Test14.asn +++ b/regression_test/ASN1/errorMessages/Test14.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/errorMessages/Test15.asn b/regression_test/ASN1/errorMessages/Test15.asn index 13b28e706..91ac23428 100644 --- a/regression_test/ASN1/errorMessages/Test15.asn +++ b/regression_test/ASN1/errorMessages/Test15.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/errorMessages/Test16.asn b/regression_test/ASN1/errorMessages/Test16.asn index 200bbe377..81dad3eee 100644 --- a/regression_test/ASN1/errorMessages/Test16.asn +++ b/regression_test/ASN1/errorMessages/Test16.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/errorMessages/Test17.asn b/regression_test/ASN1/errorMessages/Test17.asn index 57fd16ee9..bfa4346b1 100644 --- a/regression_test/ASN1/errorMessages/Test17.asn +++ b/regression_test/ASN1/errorMessages/Test17.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/errorMessages/Test18.asn b/regression_test/ASN1/errorMessages/Test18.asn index 4ae0723e5..ee252ff40 100644 --- a/regression_test/ASN1/errorMessages/Test18.asn +++ b/regression_test/ASN1/errorMessages/Test18.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/errorMessages/Test19_1.asn b/regression_test/ASN1/errorMessages/Test19_1.asn index 74a381318..3caeaeaad 100644 --- a/regression_test/ASN1/errorMessages/Test19_1.asn +++ b/regression_test/ASN1/errorMessages/Test19_1.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/errorMessages/Test19_2.asn b/regression_test/ASN1/errorMessages/Test19_2.asn index 8638453b1..f1f1dbcda 100644 --- a/regression_test/ASN1/errorMessages/Test19_2.asn +++ b/regression_test/ASN1/errorMessages/Test19_2.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/errorMessages/Test20.asn b/regression_test/ASN1/errorMessages/Test20.asn index b84c63c8c..3f566cfa7 100644 --- a/regression_test/ASN1/errorMessages/Test20.asn +++ b/regression_test/ASN1/errorMessages/Test20.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/errorMessages/Test21.asn b/regression_test/ASN1/errorMessages/Test21.asn index 976fc8b95..3b1925b82 100644 --- a/regression_test/ASN1/errorMessages/Test21.asn +++ b/regression_test/ASN1/errorMessages/Test21.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/errorMessages/Test22.asn b/regression_test/ASN1/errorMessages/Test22.asn index 31eb55b6a..6c7686eed 100644 --- a/regression_test/ASN1/errorMessages/Test22.asn +++ b/regression_test/ASN1/errorMessages/Test22.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/errorMessages/Test24.asn b/regression_test/ASN1/errorMessages/Test24.asn index d7ceeaf99..b641367b3 100644 --- a/regression_test/ASN1/errorMessages/Test24.asn +++ b/regression_test/ASN1/errorMessages/Test24.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/errorMessages/Test26.asn b/regression_test/ASN1/errorMessages/Test26.asn index 298a57bfc..efd35934b 100644 --- a/regression_test/ASN1/errorMessages/Test26.asn +++ b/regression_test/ASN1/errorMessages/Test26.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/errorMessages/Test28.asn b/regression_test/ASN1/errorMessages/Test28.asn index 78e44eee4..b854717bc 100644 --- a/regression_test/ASN1/errorMessages/Test28.asn +++ b/regression_test/ASN1/errorMessages/Test28.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/errorMessages/Test32.asn b/regression_test/ASN1/errorMessages/Test32.asn index 52da3654f..9bbc229d6 100644 --- a/regression_test/ASN1/errorMessages/Test32.asn +++ b/regression_test/ASN1/errorMessages/Test32.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/errorMessages/Test33.asn b/regression_test/ASN1/errorMessages/Test33.asn index ea20d6b07..7d2e2ece8 100644 --- a/regression_test/ASN1/errorMessages/Test33.asn +++ b/regression_test/ASN1/errorMessages/Test33.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/errorMessages/Test34.asn b/regression_test/ASN1/errorMessages/Test34.asn index 3ac4f6d9b..271eeee3c 100644 --- a/regression_test/ASN1/errorMessages/Test34.asn +++ b/regression_test/ASN1/errorMessages/Test34.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/errorMessages/Test39.asn b/regression_test/ASN1/errorMessages/Test39.asn index b7c3bbcfd..737d87fe1 100644 --- a/regression_test/ASN1/errorMessages/Test39.asn +++ b/regression_test/ASN1/errorMessages/Test39.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/errorMessages/Test40.asn b/regression_test/ASN1/errorMessages/Test40.asn index 0c4a7ac2a..e824b2caa 100644 --- a/regression_test/ASN1/errorMessages/Test40.asn +++ b/regression_test/ASN1/errorMessages/Test40.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/errorMessages/Test41.asn b/regression_test/ASN1/errorMessages/Test41.asn index c1cc36008..4e8686696 100644 --- a/regression_test/ASN1/errorMessages/Test41.asn +++ b/regression_test/ASN1/errorMessages/Test41.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/errorMessages/Test42.asn b/regression_test/ASN1/errorMessages/Test42.asn index 661c904c9..2a0cca26b 100644 --- a/regression_test/ASN1/errorMessages/Test42.asn +++ b/regression_test/ASN1/errorMessages/Test42.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/errorMessages/Test43.asn b/regression_test/ASN1/errorMessages/Test43.asn index a928ebee8..92079fb43 100644 --- a/regression_test/ASN1/errorMessages/Test43.asn +++ b/regression_test/ASN1/errorMessages/Test43.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/errorMessages/Test44.asn b/regression_test/ASN1/errorMessages/Test44.asn index 91a076dcf..ee556a51f 100644 --- a/regression_test/ASN1/errorMessages/Test44.asn +++ b/regression_test/ASN1/errorMessages/Test44.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/errorMessages/Test45.asn b/regression_test/ASN1/errorMessages/Test45.asn index aec56d4cc..587ce22fc 100644 --- a/regression_test/ASN1/errorMessages/Test45.asn +++ b/regression_test/ASN1/errorMessages/Test45.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/errorMessages/Test47.asn b/regression_test/ASN1/errorMessages/Test47.asn index 090ef509f..468764de8 100644 --- a/regression_test/ASN1/errorMessages/Test47.asn +++ b/regression_test/ASN1/errorMessages/Test47.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/errorMessages/Test50.asn b/regression_test/ASN1/errorMessages/Test50.asn index 6d45fda6d..389148399 100644 --- a/regression_test/ASN1/errorMessages/Test50.asn +++ b/regression_test/ASN1/errorMessages/Test50.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/errorMessages/Test67.asn b/regression_test/ASN1/errorMessages/Test67.asn index a7f4b74ed..e2beaa9f2 100644 --- a/regression_test/ASN1/errorMessages/Test67.asn +++ b/regression_test/ASN1/errorMessages/Test67.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/errorMessages/Test69.asn b/regression_test/ASN1/errorMessages/Test69.asn index 8d9a3dc61..b13d68dc6 100644 --- a/regression_test/ASN1/errorMessages/Test69.asn +++ b/regression_test/ASN1/errorMessages/Test69.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/errorMessages/Test70.asn b/regression_test/ASN1/errorMessages/Test70.asn index 1fb7c694f..77d7276f3 100644 --- a/regression_test/ASN1/errorMessages/Test70.asn +++ b/regression_test/ASN1/errorMessages/Test70.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/errorMessages/Test72.asn b/regression_test/ASN1/errorMessages/Test72.asn index d092d1ec2..cf9448be6 100644 --- a/regression_test/ASN1/errorMessages/Test72.asn +++ b/regression_test/ASN1/errorMessages/Test72.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/errorMessages/Test73.asn b/regression_test/ASN1/errorMessages/Test73.asn index 848d6f628..5624dc9f0 100644 --- a/regression_test/ASN1/errorMessages/Test73.asn +++ b/regression_test/ASN1/errorMessages/Test73.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/errorMessages/Test79.asn b/regression_test/ASN1/errorMessages/Test79.asn index b51a1eb75..01da91bf5 100644 --- a/regression_test/ASN1/errorMessages/Test79.asn +++ b/regression_test/ASN1/errorMessages/Test79.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/errorMessages/Test82.asn b/regression_test/ASN1/errorMessages/Test82.asn index 8941244ed..2c6496c85 100644 --- a/regression_test/ASN1/errorMessages/Test82.asn +++ b/regression_test/ASN1/errorMessages/Test82.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/errorMessages/Test84.asn b/regression_test/ASN1/errorMessages/Test84.asn index 396d43af9..b754d509e 100644 --- a/regression_test/ASN1/errorMessages/Test84.asn +++ b/regression_test/ASN1/errorMessages/Test84.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/errorMessages/Test85.asn b/regression_test/ASN1/errorMessages/Test85.asn index f65b2c613..db604c58c 100644 --- a/regression_test/ASN1/errorMessages/Test85.asn +++ b/regression_test/ASN1/errorMessages/Test85.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/errorMessages2/Makefile b/regression_test/ASN1/errorMessages2/Makefile index 665fa795d..ce2723727 100644 --- a/regression_test/ASN1/errorMessages2/Makefile +++ b/regression_test/ASN1/errorMessages2/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/errorMessages2/Test10.asn b/regression_test/ASN1/errorMessages2/Test10.asn index ba6587de4..5944ba3ab 100644 --- a/regression_test/ASN1/errorMessages2/Test10.asn +++ b/regression_test/ASN1/errorMessages2/Test10.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/hyphen/Makefile b/regression_test/ASN1/hyphen/Makefile index ecb5ae810..ea3328251 100644 --- a/regression_test/ASN1/hyphen/Makefile +++ b/regression_test/ASN1/hyphen/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/hyphen/Test284.asn b/regression_test/ASN1/hyphen/Test284.asn index 61b76a539..9c609bf63 100644 --- a/regression_test/ASN1/hyphen/Test284.asn +++ b/regression_test/ASN1/hyphen/Test284.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/keyword/Makefile b/regression_test/ASN1/keyword/Makefile index eba96b57b..4fdfe0f66 100644 --- a/regression_test/ASN1/keyword/Makefile +++ b/regression_test/ASN1/keyword/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/keyword/Test283.asn b/regression_test/ASN1/keyword/Test283.asn index fae76f819..18e342d82 100644 --- a/regression_test/ASN1/keyword/Test283.asn +++ b/regression_test/ASN1/keyword/Test283.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/keyword/Test283T.ttcn b/regression_test/ASN1/keyword/Test283T.ttcn index 25d44bcbc..77f93bc6a 100644 --- a/regression_test/ASN1/keyword/Test283T.ttcn +++ b/regression_test/ASN1/keyword/Test283T.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/parse/Makefile b/regression_test/ASN1/parse/Makefile index 65a99a2ac..536439d24 100644 --- a/regression_test/ASN1/parse/Makefile +++ b/regression_test/ASN1/parse/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/parse/Test1.asn b/regression_test/ASN1/parse/Test1.asn index 74462db3c..e17bc5d89 100644 --- a/regression_test/ASN1/parse/Test1.asn +++ b/regression_test/ASN1/parse/Test1.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/parse/Test1_known_errors.asn b/regression_test/ASN1/parse/Test1_known_errors.asn index 54a6f763d..c591b4d07 100644 --- a/regression_test/ASN1/parse/Test1_known_errors.asn +++ b/regression_test/ASN1/parse/Test1_known_errors.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/parse/Test2.asn b/regression_test/ASN1/parse/Test2.asn index 120cf258e..23a5d05ba 100644 --- a/regression_test/ASN1/parse/Test2.asn +++ b/regression_test/ASN1/parse/Test2.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/parse/Test2_known_errors.asn b/regression_test/ASN1/parse/Test2_known_errors.asn index fbc170464..74a594388 100644 --- a/regression_test/ASN1/parse/Test2_known_errors.asn +++ b/regression_test/ASN1/parse/Test2_known_errors.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/parse/Test3.asn b/regression_test/ASN1/parse/Test3.asn index 4d19a894f..9daab6688 100644 --- a/regression_test/ASN1/parse/Test3.asn +++ b/regression_test/ASN1/parse/Test3.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/parse/Test3_known_errors.asn b/regression_test/ASN1/parse/Test3_known_errors.asn index 263d9981d..a972630bc 100644 --- a/regression_test/ASN1/parse/Test3_known_errors.asn +++ b/regression_test/ASN1/parse/Test3_known_errors.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/parse/Test4.asn b/regression_test/ASN1/parse/Test4.asn index 2090ffc49..d20f2f46f 100644 --- a/regression_test/ASN1/parse/Test4.asn +++ b/regression_test/ASN1/parse/Test4.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/parse/Test4_known_errors.asn b/regression_test/ASN1/parse/Test4_known_errors.asn index 11b7bd8b7..29fb30c1e 100644 --- a/regression_test/ASN1/parse/Test4_known_errors.asn +++ b/regression_test/ASN1/parse/Test4_known_errors.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/transformations/Makefile b/regression_test/ASN1/transformations/Makefile index 42f65bf8a..23e668bdc 100644 --- a/regression_test/ASN1/transformations/Makefile +++ b/regression_test/ASN1/transformations/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/transformations/Test289A.asn b/regression_test/ASN1/transformations/Test289A.asn index 95017a2f2..1ff704f82 100644 --- a/regression_test/ASN1/transformations/Test289A.asn +++ b/regression_test/ASN1/transformations/Test289A.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/transformations/Test289B.asn b/regression_test/ASN1/transformations/Test289B.asn index 5f2937c90..458e1df49 100644 --- a/regression_test/ASN1/transformations/Test289B.asn +++ b/regression_test/ASN1/transformations/Test289B.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/transformations/Test5A.asn b/regression_test/ASN1/transformations/Test5A.asn index 79f42cded..996979015 100644 --- a/regression_test/ASN1/transformations/Test5A.asn +++ b/regression_test/ASN1/transformations/Test5A.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/transformations/Test5B.asn b/regression_test/ASN1/transformations/Test5B.asn index 2c60aaea8..2f438ee2c 100644 --- a/regression_test/ASN1/transformations/Test5B.asn +++ b/regression_test/ASN1/transformations/Test5B.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/transformations/Test6A.asn b/regression_test/ASN1/transformations/Test6A.asn index d9561621b..b25711d2a 100644 --- a/regression_test/ASN1/transformations/Test6A.asn +++ b/regression_test/ASN1/transformations/Test6A.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/transformations/Test6B.asn b/regression_test/ASN1/transformations/Test6B.asn index 240cbcaf3..7b307b425 100644 --- a/regression_test/ASN1/transformations/Test6B.asn +++ b/regression_test/ASN1/transformations/Test6B.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/transformations/Test7A.asn b/regression_test/ASN1/transformations/Test7A.asn index 3d48627d7..0f49a9a48 100644 --- a/regression_test/ASN1/transformations/Test7A.asn +++ b/regression_test/ASN1/transformations/Test7A.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/transformations/Test7B.asn b/regression_test/ASN1/transformations/Test7B.asn index 300b2b6ad..e21915e28 100644 --- a/regression_test/ASN1/transformations/Test7B.asn +++ b/regression_test/ASN1/transformations/Test7B.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/transformations/Test8A.asn b/regression_test/ASN1/transformations/Test8A.asn index 3c917a3f9..ee6297efd 100644 --- a/regression_test/ASN1/transformations/Test8A.asn +++ b/regression_test/ASN1/transformations/Test8A.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/transformations/Test8B.asn b/regression_test/ASN1/transformations/Test8B.asn index 543a07e99..6d93bb8da 100644 --- a/regression_test/ASN1/transformations/Test8B.asn +++ b/regression_test/ASN1/transformations/Test8B.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/transformations/Test9A.asn b/regression_test/ASN1/transformations/Test9A.asn index ebfa712f2..a05684933 100644 --- a/regression_test/ASN1/transformations/Test9A.asn +++ b/regression_test/ASN1/transformations/Test9A.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/ASN1/transformations/Test9B.asn b/regression_test/ASN1/transformations/Test9B.asn index c143c6df7..9bda568ea 100644 --- a/regression_test/ASN1/transformations/Test9B.asn +++ b/regression_test/ASN1/transformations/Test9B.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/BER/Makefile b/regression_test/BER/Makefile index d2ec0e1a1..7bc52f301 100644 --- a/regression_test/BER/Makefile +++ b/regression_test/BER/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/BER/MyPort1.cc b/regression_test/BER/MyPort1.cc index e5cb733ca..c81806624 100644 --- a/regression_test/BER/MyPort1.cc +++ b/regression_test/BER/MyPort1.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/BER/MyPort1.hh b/regression_test/BER/MyPort1.hh index 64184fef4..2f007e12f 100644 --- a/regression_test/BER/MyPort1.hh +++ b/regression_test/BER/MyPort1.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/BER/MyPort2.cc b/regression_test/BER/MyPort2.cc index b04734f9c..a066a8bdc 100644 --- a/regression_test/BER/MyPort2.cc +++ b/regression_test/BER/MyPort2.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/BER/MyPort2.hh b/regression_test/BER/MyPort2.hh index c07f8e450..d02f8a226 100644 --- a/regression_test/BER/MyPort2.hh +++ b/regression_test/BER/MyPort2.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/BER/Regr.cfg b/regression_test/BER/Regr.cfg index 3a47a27e1..a024c7d52 100644 --- a/regression_test/BER/Regr.cfg +++ b/regression_test/BER/Regr.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/BER/Regr.ttcn b/regression_test/BER/Regr.ttcn index b5949d82c..107f9ad0e 100644 --- a/regression_test/BER/Regr.ttcn +++ b/regression_test/BER/Regr.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 @@ -1053,12 +1053,10 @@ module Regr function check_enc_dec(integer int, octetstring expected) { var octetstring encoded_pdu := enc_ber_int(int); if (encoded_pdu == expected) {setverdict(pass);} - else {setverdict(fail, "Encoding failed");} - log(encoded_pdu); + else {setverdict(fail, "Encoding failed, encoded_pdu is ", log2str(encoded_pdu));} var integer decoded := dec_ber_int(encoded_pdu); - log(decoded); if (int == decoded) { setverdict(pass); } - else {setverdict(fail, "decoding failed");} + else {setverdict(fail, "decoding failed, decoded is ", decoded);} } with { extension "transparent" } diff --git a/regression_test/BER/Regr1.asn b/regression_test/BER/Regr1.asn index e18e8764a..191d640ca 100644 --- a/regression_test/BER/Regr1.asn +++ b/regression_test/BER/Regr1.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/BER/Regr2.asn b/regression_test/BER/Regr2.asn index e87e3f5ba..4e15aff66 100644 --- a/regression_test/BER/Regr2.asn +++ b/regression_test/BER/Regr2.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/BER_x682/Makefile b/regression_test/BER_x682/Makefile index 7689c0182..e119d65e6 100644 --- a/regression_test/BER_x682/Makefile +++ b/regression_test/BER_x682/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/BER_x682/MyPort1.cc b/regression_test/BER_x682/MyPort1.cc index c5b412886..1302a3772 100644 --- a/regression_test/BER_x682/MyPort1.cc +++ b/regression_test/BER_x682/MyPort1.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/BER_x682/MyPort1.hh b/regression_test/BER_x682/MyPort1.hh index fc21062d0..21350cf07 100644 --- a/regression_test/BER_x682/MyPort1.hh +++ b/regression_test/BER_x682/MyPort1.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/BER_x682/MyPort2.cc b/regression_test/BER_x682/MyPort2.cc index 519d54257..262a9b29e 100644 --- a/regression_test/BER_x682/MyPort2.cc +++ b/regression_test/BER_x682/MyPort2.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/BER_x682/MyPort2.hh b/regression_test/BER_x682/MyPort2.hh index 626b45f24..21dbadcb0 100644 --- a/regression_test/BER_x682/MyPort2.hh +++ b/regression_test/BER_x682/MyPort2.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/BER_x682/X.cfg b/regression_test/BER_x682/X.cfg index c82fbe08b..3199c0fd7 100644 --- a/regression_test/BER_x682/X.cfg +++ b/regression_test/BER_x682/X.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/BER_x682/X.ttcn b/regression_test/BER_x682/X.ttcn index 04a042302..9df39ecf5 100644 --- a/regression_test/BER_x682/X.ttcn +++ b/regression_test/BER_x682/X.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/BER_x682/X682.asn b/regression_test/BER_x682/X682.asn index e59d2af04..5525b645f 100644 --- a/regression_test/BER_x682/X682.asn +++ b/regression_test/BER_x682/X682.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/BER_x682_wa/Makefile b/regression_test/BER_x682_wa/Makefile index dd0852ae7..6bc310a07 100644 --- a/regression_test/BER_x682_wa/Makefile +++ b/regression_test/BER_x682_wa/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/BER_x682_wa/MyPort1.cc b/regression_test/BER_x682_wa/MyPort1.cc index 6a71e6059..d48edc4ec 100644 --- a/regression_test/BER_x682_wa/MyPort1.cc +++ b/regression_test/BER_x682_wa/MyPort1.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/BER_x682_wa/MyPort1.hh b/regression_test/BER_x682_wa/MyPort1.hh index 80e0788e0..54a302b4f 100644 --- a/regression_test/BER_x682_wa/MyPort1.hh +++ b/regression_test/BER_x682_wa/MyPort1.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/BER_x682_wa/MyPort2.cc b/regression_test/BER_x682_wa/MyPort2.cc index d05ac9971..190c4e179 100644 --- a/regression_test/BER_x682_wa/MyPort2.cc +++ b/regression_test/BER_x682_wa/MyPort2.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/BER_x682_wa/MyPort2.hh b/regression_test/BER_x682_wa/MyPort2.hh index ac8ed1e9a..717334235 100644 --- a/regression_test/BER_x682_wa/MyPort2.hh +++ b/regression_test/BER_x682_wa/MyPort2.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/BER_x682_wa/X.cfg b/regression_test/BER_x682_wa/X.cfg index f322aec1b..39d0e7259 100644 --- a/regression_test/BER_x682_wa/X.cfg +++ b/regression_test/BER_x682_wa/X.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/BER_x682_wa/X.ttcn b/regression_test/BER_x682_wa/X.ttcn index 008bb51c8..a913c0711 100644 --- a/regression_test/BER_x682_wa/X.ttcn +++ b/regression_test/BER_x682_wa/X.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/BER_x682_wa/x682.asn b/regression_test/BER_x682_wa/x682.asn index 234ea98f5..440f8f3e5 100644 --- a/regression_test/BER_x682_wa/x682.asn +++ b/regression_test/BER_x682_wa/x682.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/CRTR00015758/Makefile b/regression_test/CRTR00015758/Makefile index dd28702bc..769db8fdd 100644 --- a/regression_test/CRTR00015758/Makefile +++ b/regression_test/CRTR00015758/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/CRTR00015758/config.cfg b/regression_test/CRTR00015758/config.cfg index 310b5d674..df79fce62 100644 --- a/regression_test/CRTR00015758/config.cfg +++ b/regression_test/CRTR00015758/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/CRTR00015758/no.ttcn b/regression_test/CRTR00015758/no.ttcn index c23e17221..c38b2e330 100644 --- a/regression_test/CRTR00015758/no.ttcn +++ b/regression_test/CRTR00015758/no.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/CRTR00015758/run.cfg b/regression_test/CRTR00015758/run.cfg index c41311a75..9f8fe7e88 100644 --- a/regression_test/CRTR00015758/run.cfg +++ b/regression_test/CRTR00015758/run.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/CRTR00015758/trouble.cfg b/regression_test/CRTR00015758/trouble.cfg index 2e99e00b5..cb5ab8242 100644 --- a/regression_test/CRTR00015758/trouble.cfg +++ b/regression_test/CRTR00015758/trouble.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ERC/Makefile b/regression_test/ERC/Makefile index 0517b0b35..9626b0209 100644 --- a/regression_test/ERC/Makefile +++ b/regression_test/ERC/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ERC/base.cfg b/regression_test/ERC/base.cfg index d6f4cec7f..95daaf97a 100644 --- a/regression_test/ERC/base.cfg +++ b/regression_test/ERC/base.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ERC/config.cfg b/regression_test/ERC/config.cfg index c2b2f55f5..41e2aeb5d 100644 --- a/regression_test/ERC/config.cfg +++ b/regression_test/ERC/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ERC/erc.ttcn b/regression_test/ERC/erc.ttcn index 0185183c3..97863cfc6 100644 --- a/regression_test/ERC/erc.ttcn +++ b/regression_test/ERC/erc.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 @@ -61,7 +61,6 @@ type component empty_comp{}; testcase test_own_config() runs on empty_comp { - log(m_env_test); if(m_float1 == 1.0){setverdict(pass);} else{setverdict(fail);} if(m_boolean1 == true){setverdict(pass);} diff --git a/regression_test/ERC/included1.cfg b/regression_test/ERC/included1.cfg index b72fe6066..217de890f 100644 --- a/regression_test/ERC/included1.cfg +++ b/regression_test/ERC/included1.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ERC/included2.cfg b/regression_test/ERC/included2.cfg index 372f706d6..1654b7182 100644 --- a/regression_test/ERC/included2.cfg +++ b/regression_test/ERC/included2.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ERC/subdir/subdir_config.cfg b/regression_test/ERC/subdir/subdir_config.cfg index c31b2ec4b..cc51bec90 100644 --- a/regression_test/ERC/subdir/subdir_config.cfg +++ b/regression_test/ERC/subdir/subdir_config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/HQ16404/HQ16404.ttcn b/regression_test/HQ16404/HQ16404.ttcn index 61d22a87f..ca2e5f17b 100644 --- a/regression_test/HQ16404/HQ16404.ttcn +++ b/regression_test/HQ16404/HQ16404.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/HQ16404/Makefile b/regression_test/HQ16404/Makefile index b49e9d5cb..fc09ac43d 100644 --- a/regression_test/HQ16404/Makefile +++ b/regression_test/HQ16404/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/HQ16404/config.cfg b/regression_test/HQ16404/config.cfg index 3a48e2e34..fa17414b3 100644 --- a/regression_test/HQ16404/config.cfg +++ b/regression_test/HQ16404/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/Makefile b/regression_test/Makefile index 4b85e6ded..01361d583 100644 --- a/regression_test/Makefile +++ b/regression_test/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 @@ -21,7 +21,7 @@ nonMandatoryPar logFiles logger_control namedActualParameters \ assignmentNotation omitdef anytype RAW implicitMsgEncoding pattern_quadruples \ macros visibility hexstrOper ucharstrOper objidOper CRTR00015758 slider \ XML ipv6 implicitOmit testcase_defparam transparent HQ16404 cfgFile \ -all_from lazyEval tryCatch text2ttcn json junitlogger ttcn2json profiler +all_from lazyEval tryCatch text2ttcn json junitlogger ttcn2json profiler templateOmit ifdef DYN DIRS += loggerplugin diff --git a/regression_test/Makefile.regression b/regression_test/Makefile.regression index 2bf941c70..2b58c9440 100644 --- a/regression_test/Makefile.regression +++ b/regression_test/Makefile.regression @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 @@ -142,6 +142,7 @@ LCOV_DIR := /mnt/TTCN/Tools/lcov-1.7/usr #LCOV=1 ifdef LCOV + CPPFLAGS += -fprofile-arcs -ftest-coverage -g CXXFLAGS += -fprofile-arcs -ftest-coverage -g LDFLAGS += -fprofile-arcs -ftest-coverage -g -lgcov endif diff --git a/regression_test/RAW/Examples/DTAP_RAW_Samples.ttcn b/regression_test/RAW/Examples/DTAP_RAW_Samples.ttcn index 7692739d2..91b4223a9 100644 --- a/regression_test/RAW/Examples/DTAP_RAW_Samples.ttcn +++ b/regression_test/RAW/Examples/DTAP_RAW_Samples.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/RAW/Examples/DTAP_typedefs.ttcn b/regression_test/RAW/Examples/DTAP_typedefs.ttcn index e9b9b1e31..f38a9d126 100644 --- a/regression_test/RAW/Examples/DTAP_typedefs.ttcn +++ b/regression_test/RAW/Examples/DTAP_typedefs.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/RAW/Examples/Makefile b/regression_test/RAW/Examples/Makefile index 2e0565231..34b19e916 100644 --- a/regression_test/RAW/Examples/Makefile +++ b/regression_test/RAW/Examples/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/RAW/Examples/RAW_Test.ttcn b/regression_test/RAW/Examples/RAW_Test.ttcn index 4033690a7..5d66a83df 100644 --- a/regression_test/RAW/Examples/RAW_Test.ttcn +++ b/regression_test/RAW/Examples/RAW_Test.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/RAW/Examples/RAWtest.cfg b/regression_test/RAW/Examples/RAWtest.cfg index c1996488a..f2c642688 100644 --- a/regression_test/RAW/Examples/RAWtest.cfg +++ b/regression_test/RAW/Examples/RAWtest.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/RAW/Examples/SCCP_RAW_Samples.ttcn b/regression_test/RAW/Examples/SCCP_RAW_Samples.ttcn index f37cadd96..db431ad22 100644 --- a/regression_test/RAW/Examples/SCCP_RAW_Samples.ttcn +++ b/regression_test/RAW/Examples/SCCP_RAW_Samples.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/RAW/Examples/SCCP_typedefs.ttcn b/regression_test/RAW/Examples/SCCP_typedefs.ttcn index e36fc6461..123f88bae 100644 --- a/regression_test/RAW/Examples/SCCP_typedefs.ttcn +++ b/regression_test/RAW/Examples/SCCP_typedefs.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/RAW/Examples/general_typedefs.ttcn b/regression_test/RAW/Examples/general_typedefs.ttcn index 02c4bbe76..5586592bb 100644 --- a/regression_test/RAW/Examples/general_typedefs.ttcn +++ b/regression_test/RAW/Examples/general_typedefs.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/RAW/HN25015/General_Types.ttcn b/regression_test/RAW/HN25015/General_Types.ttcn index 2d37b0f9f..ccb5876bd 100644 --- a/regression_test/RAW/HN25015/General_Types.ttcn +++ b/regression_test/RAW/HN25015/General_Types.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/RAW/HN25015/HN25015.ttcn b/regression_test/RAW/HN25015/HN25015.ttcn index 4bceac492..a02ce6db3 100644 --- a/regression_test/RAW/HN25015/HN25015.ttcn +++ b/regression_test/RAW/HN25015/HN25015.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/RAW/HN25015/Makefile b/regression_test/RAW/HN25015/Makefile index 3bfc5f630..e365699be 100644 --- a/regression_test/RAW/HN25015/Makefile +++ b/regression_test/RAW/HN25015/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/RAW/HN25015/SGsAP_Types.ttcn b/regression_test/RAW/HN25015/SGsAP_Types.ttcn index 2eecbc66a..fa7788eaf 100644 --- a/regression_test/RAW/HN25015/SGsAP_Types.ttcn +++ b/regression_test/RAW/HN25015/SGsAP_Types.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/RAW/HN25015/config.cfg b/regression_test/RAW/HN25015/config.cfg index d5f2925de..88e90a96a 100644 --- a/regression_test/RAW/HN25015/config.cfg +++ b/regression_test/RAW/HN25015/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/RAW/HQ26535/GTPv2_Types.ttcn b/regression_test/RAW/HQ26535/GTPv2_Types.ttcn index fa940c124..21f9711de 100644 --- a/regression_test/RAW/HQ26535/GTPv2_Types.ttcn +++ b/regression_test/RAW/HQ26535/GTPv2_Types.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/RAW/HQ26535/General_Types.ttcn b/regression_test/RAW/HQ26535/General_Types.ttcn index a8e7e4665..f61b7b0a7 100644 --- a/regression_test/RAW/HQ26535/General_Types.ttcn +++ b/regression_test/RAW/HQ26535/General_Types.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/RAW/HQ26535/Makefile b/regression_test/RAW/HQ26535/Makefile index a97503229..e6c5e56b2 100644 --- a/regression_test/RAW/HQ26535/Makefile +++ b/regression_test/RAW/HQ26535/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/RAW/HQ26535/gtpctest.ttcn b/regression_test/RAW/HQ26535/gtpctest.ttcn index 1069d1db0..93ecf3194 100644 --- a/regression_test/RAW/HQ26535/gtpctest.ttcn +++ b/regression_test/RAW/HQ26535/gtpctest.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/RAW/HQ49956/Makefile b/regression_test/RAW/HQ49956/Makefile index 56bcbc44f..442a5a598 100644 --- a/regression_test/RAW/HQ49956/Makefile +++ b/regression_test/RAW/HQ49956/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/RAW/HQ49956/Module.ttcn b/regression_test/RAW/HQ49956/Module.ttcn index 7eda0ce1c..b7e1b1b45 100644 --- a/regression_test/RAW/HQ49956/Module.ttcn +++ b/regression_test/RAW/HQ49956/Module.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/RAW/HQ49956/Test.ttcn b/regression_test/RAW/HQ49956/Test.ttcn index 1b48fdfbc..a9e369b9e 100644 --- a/regression_test/RAW/HQ49956/Test.ttcn +++ b/regression_test/RAW/HQ49956/Test.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/RAW/HS16977/HS16977_Constants.ttcn b/regression_test/RAW/HS16977/HS16977_Constants.ttcn index 482966d46..76cf4a213 100644 --- a/regression_test/RAW/HS16977/HS16977_Constants.ttcn +++ b/regression_test/RAW/HS16977/HS16977_Constants.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/RAW/HS16977/HS16977_Test.ttcn b/regression_test/RAW/HS16977/HS16977_Test.ttcn index 3b2fe60a6..15c9faa5f 100644 --- a/regression_test/RAW/HS16977/HS16977_Test.ttcn +++ b/regression_test/RAW/HS16977/HS16977_Test.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/RAW/HS16977/HS16977_Types.ttcn b/regression_test/RAW/HS16977/HS16977_Types.ttcn index b5d73288a..97a6ca92f 100644 --- a/regression_test/RAW/HS16977/HS16977_Types.ttcn +++ b/regression_test/RAW/HS16977/HS16977_Types.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/RAW/HS16977/Makefile b/regression_test/RAW/HS16977/Makefile index 224a13db0..7251b7f3b 100644 --- a/regression_test/RAW/HS16977/Makefile +++ b/regression_test/RAW/HS16977/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/RAW/HS16977/config.cfg b/regression_test/RAW/HS16977/config.cfg index 4b4692c7f..d308ae640 100644 --- a/regression_test/RAW/HS16977/config.cfg +++ b/regression_test/RAW/HS16977/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/RAW/IntX/IntX.ttcn b/regression_test/RAW/IntX/IntX.ttcn new file mode 100644 index 000000000..4286683d8 --- /dev/null +++ b/regression_test/RAW/IntX/IntX.ttcn @@ -0,0 +1,372 @@ +/****************************************************************************** + * Copyright (c) 2000-2015 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 + ******************************************************************************/ + +// Tests for encoding and decoding integers as the ETSI Common Library type "IntX" +// (defined in ETSI TS 103 097) +module IntX { + +/************* Type definitions *************/ +type integer IntX_unsigned with { variant "IntX, COMP(nosign)"; } + +type integer IntX_signed with { variant "IntX, COMP(signbit)"; } + +type integer IntX_compl with { variant "IntX, COMP(2scompl)"; } + +type record of IntX_signed IntXList with { variant ""; } + +type record RecIntX { + integer i, + integer ix, + bitstring bs +} +with { + variant "FIELDORDER(msb)"; + variant(i) "FIELDLENGTH(16), COMP(2scompl), BITORDER(msb)"; + variant(i) "BYTEORDER(first), BITORDERINFIELD(msb)"; + variant(ix) "IntX, COMP(2scompl)"; + variant(bs) "FIELDLENGTH(8)"; +} + +type record RecIntXPartial { + integer i, + integer ix, + bitstring bs +} +with { + variant "FIELDORDER(msb)"; + variant(i) "FIELDLENGTH(12), BITORDER(msb)"; + variant(i) "BYTEORDER(first), BITORDERINFIELD(msb)"; + variant(ix) "IntX"; + variant(bs) "FIELDLENGTH(8)"; +} + +type record RecIntXPadded { + integer i, + integer ix, + bitstring bs, + integer ix2 +} +with { + variant "FIELDORDER(msb), PADDING(6), PADDALL"; + variant(i) "FIELDLENGTH(16), PADDING(5), BITORDER(msb)"; + variant(i) "BYTEORDER(first), BITORDERINFIELD(msb)"; + variant(ix) "IntX, PREPADDING(6)"; + variant(bs) "FIELDLENGTH(8)"; + variant(ix2) "IntX"; +} + +type component CT {} + +/************* Coding functions *************/ +external function f_enc_intx_u(in IntX_unsigned x) return octetstring + with { extension "prototype(convert) encode(RAW)" } + +external function f_dec_intx_u(in octetstring x) return IntX_unsigned + with { extension "prototype(convert) decode(RAW)" } + +external function f_enc_intx_s(in IntX_signed x) return octetstring + with { extension "prototype(convert) encode(RAW)" } + +external function f_dec_intx_s(in octetstring x) return IntX_signed + with { extension "prototype(convert) decode(RAW)" } + +external function f_enc_intx_c(in IntX_compl x) return octetstring + with { extension "prototype(convert) encode(RAW)" } + +external function f_dec_intx_c(in octetstring x) return IntX_compl + with { extension "prototype(convert) decode(RAW)" } + +external function f_enc_intx_list(in IntXList x) return octetstring + with { extension "prototype(convert) encode(RAW)" } + +external function f_dec_intx_list(in octetstring x) return IntXList + with { extension "prototype(convert) decode(RAW)" } + +external function f_enc_intx_rec(in RecIntX x) return octetstring + with { extension "prototype(convert) encode(RAW)" } + +external function f_dec_intx_rec(in octetstring x) return RecIntX + with { extension "prototype(convert) decode(RAW)" } + +external function f_enc_intx_rec_part(in RecIntXPartial x) return octetstring + with { extension "prototype(convert) encode(RAW)" } + +external function f_dec_intx_rec_part(in octetstring x) return RecIntXPartial + with { extension "prototype(convert) decode(RAW)" } + +external function f_enc_intx_rec_padd(in RecIntXPadded x) return octetstring + with { extension "prototype(convert) encode(RAW)" } + +external function f_dec_intx_rec_padd(in octetstring x) return RecIntXPadded + with { extension "prototype(convert) decode(RAW)" } + +/************* Test cases *************/ +testcase tc_intx_unsigned() runs on CT +{ + // one octet + var IntX_unsigned val := 10; + var octetstring enc_val_exp := '0A'O; + var octetstring enc_val := f_enc_intx_u(val); + if (enc_val != enc_val_exp) { + setverdict(fail, "Expected: ", enc_val_exp, ", got: ", enc_val); + } + var IntX_unsigned dec_val := f_dec_intx_u(enc_val_exp); + if (dec_val != val) { + setverdict(fail, "Expected: ", val, ", got: ", dec_val); + } + + // two octets + val := 2184; + enc_val_exp := '8888'O; + enc_val := f_enc_intx_u(val); + if (enc_val != enc_val_exp) { + setverdict(fail, "Expected: ", enc_val_exp, ", got: ", enc_val); + } + dec_val := f_dec_intx_u(enc_val_exp); + if (dec_val != val) { + setverdict(fail, "Expected: ", val, ", got: ", dec_val); + } + + // ten octets + val := 2554246324530855315; + enc_val_exp := 'FF002372817FCA823D93'O; + enc_val := f_enc_intx_u(val); + if (enc_val != enc_val_exp) { + setverdict(fail, "Expected: ", enc_val_exp, ", got: ", enc_val); + } + dec_val := f_dec_intx_u(enc_val_exp); + if (dec_val != val) { + setverdict(fail, "Expected: ", val, ", got: ", dec_val); + } + + // twelve octets + val := 7165932342958243219318534; + enc_val_exp := 'FFC5ED71F8802FC9D0112706'O; + enc_val := f_enc_intx_u(val); + if (enc_val != enc_val_exp) { + setverdict(fail, "Expected: ", enc_val_exp, ", got: ", enc_val); + } + dec_val := f_dec_intx_u(enc_val_exp); + if (dec_val != val) { + setverdict(fail, "Expected: ", val, ", got: ", dec_val); + } + + setverdict(pass); +} + +testcase tc_intx_signed() runs on CT +{ + // one octet + var IntX_signed val := -10; + var octetstring enc_val_exp := '4A'O; + var octetstring enc_val := f_enc_intx_s(val); + if (enc_val != enc_val_exp) { + setverdict(fail, "Expected: ", enc_val_exp, ", got: ", enc_val); + } + var IntX_signed dec_val := f_dec_intx_s(enc_val_exp); + if (dec_val != val) { + setverdict(fail, "Expected: ", val, ", got: ", dec_val); + } + + // two octets + val := -2184; + enc_val_exp := 'A888'O; + enc_val := f_enc_intx_s(val); + if (enc_val != enc_val_exp) { + setverdict(fail, "Expected: ", enc_val_exp, ", got: ", enc_val); + } + dec_val := f_dec_intx_s(enc_val_exp); + if (dec_val != val) { + setverdict(fail, "Expected: ", val, ", got: ", dec_val); + } + + // ten octets + val := -2554246324530855315; + enc_val_exp := 'FF402372817FCA823D93'O; + enc_val := f_enc_intx_s(val); + if (enc_val != enc_val_exp) { + setverdict(fail, "Expected: ", enc_val_exp, ", got: ", enc_val); + } + dec_val := f_dec_intx_s(enc_val_exp); + if (dec_val != val) { + setverdict(fail, "Expected: ", val, ", got: ", dec_val); + } + + // twelve octets + val := -7165932342958243219318534; + enc_val_exp := 'FFD5ED71F8802FC9D0112706'O; + enc_val := f_enc_intx_s(val); + if (enc_val != enc_val_exp) { + setverdict(fail, "Expected: ", enc_val_exp, ", got: ", enc_val); + } + dec_val := f_dec_intx_s(enc_val_exp); + if (dec_val != val) { + setverdict(fail, "Expected: ", val, ", got: ", dec_val); + } + + setverdict(pass); +} + +testcase tc_intx_2scompl() runs on CT +{ + // one octet + var IntX_compl val := -10; + var octetstring enc_val_exp := '76'O; + var octetstring enc_val := f_enc_intx_c(val); + if (enc_val != enc_val_exp) { + setverdict(fail, "Expected: ", enc_val_exp, ", got: ", enc_val); + } + var IntX_compl dec_val := f_dec_intx_c(enc_val_exp); + if (dec_val != val) { + setverdict(fail, "Expected: ", val, ", got: ", dec_val); + } + + // two octets + val := -2184; + enc_val_exp := 'B778'O; + enc_val := f_enc_intx_c(val); + if (enc_val != enc_val_exp) { + setverdict(fail, "Expected: ", enc_val_exp, ", got: ", enc_val); + } + dec_val := f_dec_intx_c(enc_val_exp); + if (dec_val != val) { + setverdict(fail, "Expected: ", val, ", got: ", dec_val); + } + + // ten octets + val := -2554246324530855315; + enc_val_exp := 'FF7FDC8D7E80357DC26D'O; + enc_val := f_enc_intx_c(val); + if (enc_val != enc_val_exp) { + setverdict(fail, "Expected: ", enc_val_exp, ", got: ", enc_val); + } + dec_val := f_dec_intx_c(enc_val_exp); + if (dec_val != val) { + setverdict(fail, "Expected: ", val, ", got: ", dec_val); + } + + // twelve octets + val := -7165932342958243219318534; + enc_val_exp := 'FFDA128E077FD0362FEED8FA'O; + enc_val := f_enc_intx_c(val); + if (enc_val != enc_val_exp) { + setverdict(fail, "Expected: ", enc_val_exp, ", got: ", enc_val); + } + dec_val := f_dec_intx_c(enc_val_exp); + if (dec_val != val) { + setverdict(fail, "Expected: ", val, ", got: ", dec_val); + } + + setverdict(pass); +} + +testcase tc_intx_record_of() runs on CT +{ + // record of IntX + var IntXList val := { 10, -2184, -2554246324530855315, 7165932342958243219318534 }; + var octetstring enc_val_exp := '0AA888FF402372817FCA823D93FFC5ED71F8802FC9D0112706'O; + var octetstring enc_val := f_enc_intx_list(val); + if (enc_val != enc_val_exp) { + setverdict(fail, "Expected: ", enc_val_exp, ", got: ", enc_val); + } + var IntXList dec_val := f_dec_intx_list(enc_val_exp); + if (dec_val != val) { + setverdict(fail, "Expected: ", val, ", got: ", dec_val); + } + setverdict(pass); +} + +testcase tc_intx_record() runs on CT +{ + // record with IntX starting at an octet boundary + var RecIntX val1 := { -10376, -10376, '11001100'B }; + var octetstring enc_val_exp := 'D778DFD778CC'O; + var octetstring enc_val := f_enc_intx_rec(val1); + if (enc_val != enc_val_exp) { + setverdict(fail, "Expected: ", enc_val_exp, ", got: ", enc_val); + } + var RecIntX dec_val1 := f_dec_intx_rec(enc_val_exp); + if (dec_val1 != val1) { + setverdict(fail, "Expected: ", val1, ", got: ", dec_val1); + } + + // record with IntX starting in a partial octet + // (the previous field is encoded in 12 bits) + var RecIntXPartial val2 := { 716, 716, '10101010'B }; + enc_val_exp := '2CC82CCAA0'O; + enc_val := f_enc_intx_rec_part(val2); + if (enc_val != enc_val_exp) { + setverdict(fail, "Expected: ", enc_val_exp, ", got: ", enc_val); + } + var RecIntXPartial dec_val2 := f_dec_intx_rec_part(enc_val_exp); + if (dec_val2 != val2) { + setverdict(fail, "Expected: ", val2, ", got: ", dec_val2); + } + + // record with two IntX fields and padding + // (the first IntX starts after 24 bits, the second one after 54 bits) + var RecIntXPadded val3 := { 716, 716, '10101010'B, 716 }; + enc_val_exp := '02CC0082CC2A820B30'O; + enc_val := f_enc_intx_rec_padd(val3); + if (enc_val != enc_val_exp) { + setverdict(fail, "Expected: ", enc_val_exp, ", got: ", enc_val); + } + var RecIntXPadded dec_val3 := f_dec_intx_rec_padd(enc_val_exp); + if (dec_val3 != val3) { + setverdict(fail, "Expected: ", val3, ", got: ", dec_val3); + } + + setverdict(pass); +} + +testcase tc_intx_decode_error() runs on CT +{ + // negative tests for decoding + // test 1: the last 2 octets from one of the signed IntX tests was removed + var octetstring bad_enc_val := 'FF402372817FCA82'O; + var template charstring msg_template := pattern "*While RAW-decoding type *: There are not enough bits in the buffer to decode the value of IntX type * \(needed: 64, found: 48\)."; + @try { + var IntX_signed ret_val := f_dec_intx_s(bad_enc_val); + setverdict(fail, "Expected dynamic test case error when decoding ", bad_enc_val, + ", got decoded value: ", ret_val); + } + @catch (msg) { + if (not match(msg, msg_template)) { + setverdict(fail, "Expected error: ", msg_template, ", got: ", msg); + } + } + + // test 2: same value, but only the first octet is present (even the length data is incomplete) + bad_enc_val := 'FF'O; + msg_template := pattern "*While RAW-decoding type *: There are not enough bits in the buffer to decode the length of IntX type * \(needed: 16, found: 8\)."; + @try { + var IntX_signed ret_val := f_dec_intx_s(bad_enc_val); + setverdict(fail, "Expected dynamic test case error when decoding ", bad_enc_val, + ", got decoded value: ", ret_val); + } + @catch (msg) { + if (not match(msg, msg_template)) { + setverdict(fail, "Expected error: ", msg_template, ", got: ", msg); + } + } + setverdict(pass); +} + +control { + execute(tc_intx_unsigned()); + execute(tc_intx_signed()); + execute(tc_intx_2scompl()); + execute(tc_intx_record_of()); + execute(tc_intx_record()); + execute(tc_intx_decode_error()); +} + +} +with { + encode "RAW" +} diff --git a/regression_test/RAW/IntX/Makefile b/regression_test/RAW/IntX/Makefile new file mode 100644 index 000000000..245e483ab --- /dev/null +++ b/regression_test/RAW/IntX/Makefile @@ -0,0 +1,135 @@ +############################################################################### +# Copyright (c) 2000-2015 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 +############################################################################### +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 + +# Flags for the C++ preprocessor (and makedepend as well): +#CPPFLAGS += + +# Flags for dependency generation +CXXDEPFLAGS = -MM + +# Flags for the C++ compiler: +#CXXFLAGS += + +# 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 = IntX.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) + +# 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 = IntX$(EXESUFFIX) + + +# +# 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_DIR)/bin/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) + ./$^ + diff --git a/regression_test/RAW/IntX/config.cfg b/regression_test/RAW/IntX/config.cfg new file mode 100644 index 000000000..204d0c1f2 --- /dev/null +++ b/regression_test/RAW/IntX/config.cfg @@ -0,0 +1,14 @@ +############################################################################### +# Copyright (c) 2000-2015 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 +############################################################################### +[LOGGING] +LogFile := "IntX.log" +FileMask := LOG_ALL +ConsoleMask := TTCN_ERROR | TTCN_TESTCASE | TTCN_STATISTICS + +[EXECUTE] +IntX.control diff --git a/regression_test/RAW/Makefile b/regression_test/RAW/Makefile index c92a311c1..77c5e8f52 100644 --- a/regression_test/RAW/Makefile +++ b/regression_test/RAW/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/EXER-whitepaper/AnyAttributes.ttcnpp b/regression_test/XML/EXER-whitepaper/AnyAttributes.ttcnpp index 70c687925..92f19e83b 100644 --- a/regression_test/XML/EXER-whitepaper/AnyAttributes.ttcnpp +++ b/regression_test/XML/EXER-whitepaper/AnyAttributes.ttcnpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/EXER-whitepaper/AnyElement.ttcnpp b/regression_test/XML/EXER-whitepaper/AnyElement.ttcnpp index 6039ee9e9..981f07eae 100644 --- a/regression_test/XML/EXER-whitepaper/AnyElement.ttcnpp +++ b/regression_test/XML/EXER-whitepaper/AnyElement.ttcnpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/EXER-whitepaper/AnyElementOptional.ttcnpp b/regression_test/XML/EXER-whitepaper/AnyElementOptional.ttcnpp index ed899cff5..339847721 100644 --- a/regression_test/XML/EXER-whitepaper/AnyElementOptional.ttcnpp +++ b/regression_test/XML/EXER-whitepaper/AnyElementOptional.ttcnpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/EXER-whitepaper/AnyElementOptional2.ttcnpp b/regression_test/XML/EXER-whitepaper/AnyElementOptional2.ttcnpp index 5401b9df4..fc41c1dde 100644 --- a/regression_test/XML/EXER-whitepaper/AnyElementOptional2.ttcnpp +++ b/regression_test/XML/EXER-whitepaper/AnyElementOptional2.ttcnpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/EXER-whitepaper/Attribute.ttcnpp b/regression_test/XML/EXER-whitepaper/Attribute.ttcnpp index 80a8d9b66..b0e952bc8 100644 --- a/regression_test/XML/EXER-whitepaper/Attribute.ttcnpp +++ b/regression_test/XML/EXER-whitepaper/Attribute.ttcnpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 @@ -39,7 +39,7 @@ DECLARE_EXER_ENCODERS(ProductA, prodA); // Decoder function which treats ET_INVAL_MSG as a warning. // Everything else is still a dynamic testcase error. external function exer_dec_prodA_expect_inval(in octetstring o, out ProductA pa) return integer -with { extension "prototype(backtrack) decode(XER:XER_EXTENDED) errorbehavior(INVAL_MSG:WARNING)" } +with { extension "prototype(backtrack) decode(XER:XER_EXTENDED) errorbehavior(INVAL_MSG:WARNING,INCOMPL_MSG:WARNING)" } const ProductA shoes := { diff --git a/regression_test/XML/EXER-whitepaper/DefaultForEmpty.ttcnpp b/regression_test/XML/EXER-whitepaper/DefaultForEmpty.ttcnpp index 0da6e46b2..bbd9bff99 100644 --- a/regression_test/XML/EXER-whitepaper/DefaultForEmpty.ttcnpp +++ b/regression_test/XML/EXER-whitepaper/DefaultForEmpty.ttcnpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/EXER-whitepaper/EmbedValues.ttcnpp b/regression_test/XML/EXER-whitepaper/EmbedValues.ttcnpp index 47007d004..321c82472 100644 --- a/regression_test/XML/EXER-whitepaper/EmbedValues.ttcnpp +++ b/regression_test/XML/EXER-whitepaper/EmbedValues.ttcnpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/EXER-whitepaper/List.ttcnpp b/regression_test/XML/EXER-whitepaper/List.ttcnpp index 6119f97c4..a80da239e 100644 --- a/regression_test/XML/EXER-whitepaper/List.ttcnpp +++ b/regression_test/XML/EXER-whitepaper/List.ttcnpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/EXER-whitepaper/Makefile b/regression_test/XML/EXER-whitepaper/Makefile index 80c18a7bd..55900f61a 100644 --- a/regression_test/XML/EXER-whitepaper/Makefile +++ b/regression_test/XML/EXER-whitepaper/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/EXER-whitepaper/Name.ttcnpp b/regression_test/XML/EXER-whitepaper/Name.ttcnpp index 09b928110..829f4a819 100644 --- a/regression_test/XML/EXER-whitepaper/Name.ttcnpp +++ b/regression_test/XML/EXER-whitepaper/Name.ttcnpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/EXER-whitepaper/Namespaces.ttcnpp b/regression_test/XML/EXER-whitepaper/Namespaces.ttcnpp index a52fd082e..665ce9ca6 100644 --- a/regression_test/XML/EXER-whitepaper/Namespaces.ttcnpp +++ b/regression_test/XML/EXER-whitepaper/Namespaces.ttcnpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/EXER-whitepaper/NamespacesDup.ttcnpp b/regression_test/XML/EXER-whitepaper/NamespacesDup.ttcnpp index 4e449c71e..1bd5d85bb 100644 --- a/regression_test/XML/EXER-whitepaper/NamespacesDup.ttcnpp +++ b/regression_test/XML/EXER-whitepaper/NamespacesDup.ttcnpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/EXER-whitepaper/Order.ttcnpp b/regression_test/XML/EXER-whitepaper/Order.ttcnpp index dacbdc7a7..e8ec6c4f4 100644 --- a/regression_test/XML/EXER-whitepaper/Order.ttcnpp +++ b/regression_test/XML/EXER-whitepaper/Order.ttcnpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/EXER-whitepaper/Qname.ttcnpp b/regression_test/XML/EXER-whitepaper/Qname.ttcnpp index fa3dc0512..2586529e1 100644 --- a/regression_test/XML/EXER-whitepaper/Qname.ttcnpp +++ b/regression_test/XML/EXER-whitepaper/Qname.ttcnpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/EXER-whitepaper/Text.ttcnpp b/regression_test/XML/EXER-whitepaper/Text.ttcnpp index 2e272505a..df12a9c0b 100644 --- a/regression_test/XML/EXER-whitepaper/Text.ttcnpp +++ b/regression_test/XML/EXER-whitepaper/Text.ttcnpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/EXER-whitepaper/Untagged.ttcnpp b/regression_test/XML/EXER-whitepaper/Untagged.ttcnpp index 180734dfa..281a34498 100644 --- a/regression_test/XML/EXER-whitepaper/Untagged.ttcnpp +++ b/regression_test/XML/EXER-whitepaper/Untagged.ttcnpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/EXER-whitepaper/Untagged1.ttcnpp b/regression_test/XML/EXER-whitepaper/Untagged1.ttcnpp index 4df497aac..1f9545460 100644 --- a/regression_test/XML/EXER-whitepaper/Untagged1.ttcnpp +++ b/regression_test/XML/EXER-whitepaper/Untagged1.ttcnpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/EXER-whitepaper/UseNil.ttcnpp b/regression_test/XML/EXER-whitepaper/UseNil.ttcnpp index 781d9299c..e857b51ce 100644 --- a/regression_test/XML/EXER-whitepaper/UseNil.ttcnpp +++ b/regression_test/XML/EXER-whitepaper/UseNil.ttcnpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/EXER-whitepaper/UseNilSimple.ttcnpp b/regression_test/XML/EXER-whitepaper/UseNilSimple.ttcnpp index cbf030310..3d0a05c7c 100644 --- a/regression_test/XML/EXER-whitepaper/UseNilSimple.ttcnpp +++ b/regression_test/XML/EXER-whitepaper/UseNilSimple.ttcnpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/EXER-whitepaper/UseNumber.ttcnpp b/regression_test/XML/EXER-whitepaper/UseNumber.ttcnpp index 4e335893e..1cbf01d8a 100644 --- a/regression_test/XML/EXER-whitepaper/UseNumber.ttcnpp +++ b/regression_test/XML/EXER-whitepaper/UseNumber.ttcnpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/EXER-whitepaper/UseOrder.ttcnpp b/regression_test/XML/EXER-whitepaper/UseOrder.ttcnpp index 3b3b56146..af514e9e3 100644 --- a/regression_test/XML/EXER-whitepaper/UseOrder.ttcnpp +++ b/regression_test/XML/EXER-whitepaper/UseOrder.ttcnpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/EXER-whitepaper/UseType.ttcnpp b/regression_test/XML/EXER-whitepaper/UseType.ttcnpp index b1be45e13..d7e8ec390 100644 --- a/regression_test/XML/EXER-whitepaper/UseType.ttcnpp +++ b/regression_test/XML/EXER-whitepaper/UseType.ttcnpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/EXER-whitepaper/UseUnion.ttcnpp b/regression_test/XML/EXER-whitepaper/UseUnion.ttcnpp index 97dcbc921..fd43ae81e 100644 --- a/regression_test/XML/EXER-whitepaper/UseUnion.ttcnpp +++ b/regression_test/XML/EXER-whitepaper/UseUnion.ttcnpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/EXER-whitepaper/Whitespace.ttcnpp b/regression_test/XML/EXER-whitepaper/Whitespace.ttcnpp index 0413c3595..611a11694 100644 --- a/regression_test/XML/EXER-whitepaper/Whitespace.ttcnpp +++ b/regression_test/XML/EXER-whitepaper/Whitespace.ttcnpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/EXER-whitepaper/config.cfg b/regression_test/XML/EXER-whitepaper/config.cfg index 6b229b78f..2f2541045 100644 --- a/regression_test/XML/EXER-whitepaper/config.cfg +++ b/regression_test/XML/EXER-whitepaper/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/HM60295/Importer.xsd b/regression_test/XML/HM60295/Importer.xsd index 403b705d2..56d7b110f 100644 --- a/regression_test/XML/HM60295/Importer.xsd +++ b/regression_test/XML/HM60295/Importer.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/HM60295/Makefile b/regression_test/XML/HM60295/Makefile index dad3560c7..005dc9d53 100644 --- a/regression_test/XML/HM60295/Makefile +++ b/regression_test/XML/HM60295/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/HM60295/Schema1.xsd b/regression_test/XML/HM60295/Schema1.xsd index 09b2f38a8..609423ff5 100644 --- a/regression_test/XML/HM60295/Schema1.xsd +++ b/regression_test/XML/HM60295/Schema1.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/HM60295/Schema2.xsd b/regression_test/XML/HM60295/Schema2.xsd index 6e6744a46..3844daa91 100644 --- a/regression_test/XML/HM60295/Schema2.xsd +++ b/regression_test/XML/HM60295/Schema2.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/HM60295/config.cfg b/regression_test/XML/HM60295/config.cfg index ef472421b..7d46f65a7 100644 --- a/regression_test/XML/HM60295/config.cfg +++ b/regression_test/XML/HM60295/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/HM60295/tester.ttcn b/regression_test/XML/HM60295/tester.ttcn index 97d0a3a08..efdd20434 100644 --- a/regression_test/XML/HM60295/tester.ttcn +++ b/regression_test/XML/HM60295/tester.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/HN15589/A.xsd b/regression_test/XML/HN15589/A.xsd index ba9d9497a..f24a048b7 100644 --- a/regression_test/XML/HN15589/A.xsd +++ b/regression_test/XML/HN15589/A.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/HN15589/B.xsd b/regression_test/XML/HN15589/B.xsd index ef1157406..bb62b9d23 100644 --- a/regression_test/XML/HN15589/B.xsd +++ b/regression_test/XML/HN15589/B.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/HN15589/HN15589.ttcnpp b/regression_test/XML/HN15589/HN15589.ttcnpp index 77029b21f..6bde22deb 100644 --- a/regression_test/XML/HN15589/HN15589.ttcnpp +++ b/regression_test/XML/HN15589/HN15589.ttcnpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/HN15589/Makefile b/regression_test/XML/HN15589/Makefile index fb23eeb55..161fc8304 100644 --- a/regression_test/XML/HN15589/Makefile +++ b/regression_test/XML/HN15589/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/HN15589/config.cfg b/regression_test/XML/HN15589/config.cfg index 73821c01f..fcab18e78 100644 --- a/regression_test/XML/HN15589/config.cfg +++ b/regression_test/XML/HN15589/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/HN15589/flipflop-check.xsd b/regression_test/XML/HN15589/flipflop-check.xsd index 569e2a2b5..280f41d7b 100644 --- a/regression_test/XML/HN15589/flipflop-check.xsd +++ b/regression_test/XML/HN15589/flipflop-check.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/HN15589/log2xml.pl b/regression_test/XML/HN15589/log2xml.pl index afa504f8b..56de99458 100644 --- a/regression_test/XML/HN15589/log2xml.pl +++ b/regression_test/XML/HN15589/log2xml.pl @@ -1,6 +1,6 @@ #!/usr/bin/perl -wln ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/HN15589/xsd/XTDL.xsd b/regression_test/XML/HN15589/xsd/XTDL.xsd index a978255e3..48472a7e8 100644 --- a/regression_test/XML/HN15589/xsd/XTDL.xsd +++ b/regression_test/XML/HN15589/xsd/XTDL.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/HN15589/xsd/XTDP-Message.xsd b/regression_test/XML/HN15589/xsd/XTDP-Message.xsd index 84fe47586..d5a41efcd 100644 --- a/regression_test/XML/HN15589/xsd/XTDP-Message.xsd +++ b/regression_test/XML/HN15589/xsd/XTDP-Message.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/HN15589/xtdl.ttcn b/regression_test/XML/HN15589/xtdl.ttcn index b4b8cdcad..d06a375d2 100644 --- a/regression_test/XML/HN15589/xtdl.ttcn +++ b/regression_test/XML/HN15589/xtdl.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/HN15589/xtdp.cfg b/regression_test/XML/HN15589/xtdp.cfg index f28f85d9d..490c56ed0 100644 --- a/regression_test/XML/HN15589/xtdp.cfg +++ b/regression_test/XML/HN15589/xtdp.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/HN15589/xtdp.ttcn b/regression_test/XML/HN15589/xtdp.ttcn index 8fb4935f7..443097e2a 100644 --- a/regression_test/XML/HN15589/xtdp.ttcn +++ b/regression_test/XML/HN15589/xtdp.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/HQ30408/HQ30408.ttcn b/regression_test/XML/HQ30408/HQ30408.ttcn index ac0c233db..79fc98fec 100644 --- a/regression_test/XML/HQ30408/HQ30408.ttcn +++ b/regression_test/XML/HQ30408/HQ30408.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/HQ30408/Makefile b/regression_test/XML/HQ30408/Makefile index 5ba25c479..d807cfbdc 100644 --- a/regression_test/XML/HQ30408/Makefile +++ b/regression_test/XML/HQ30408/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/HR49727/HR49727.ttcn b/regression_test/XML/HR49727/HR49727.ttcn index 5fad79ef5..a5501dfd5 100644 --- a/regression_test/XML/HR49727/HR49727.ttcn +++ b/regression_test/XML/HR49727/HR49727.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/HR49727/Makefile b/regression_test/XML/HR49727/Makefile index 7438714d4..5d97d37fd 100644 --- a/regression_test/XML/HR49727/Makefile +++ b/regression_test/XML/HR49727/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/HR49727/UsefulTtcn3Types.ttcn b/regression_test/XML/HR49727/UsefulTtcn3Types.ttcn index e680ab0eb..bac9ef501 100644 --- a/regression_test/XML/HR49727/UsefulTtcn3Types.ttcn +++ b/regression_test/XML/HR49727/UsefulTtcn3Types.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/HR49727/XSD.ttcn b/regression_test/XML/HR49727/XSD.ttcn index 8ee4fc267..d35abb763 100644 --- a/regression_test/XML/HR49727/XSD.ttcn +++ b/regression_test/XML/HR49727/XSD.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/HR49727/config.cfg b/regression_test/XML/HR49727/config.cfg index e7cb17161..63e7713f7 100644 --- a/regression_test/XML/HR49727/config.cfg +++ b/regression_test/XML/HR49727/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/HR49727/http_jabber_org_protocol_pubsub.ttcn b/regression_test/XML/HR49727/http_jabber_org_protocol_pubsub.ttcn index 132b06a98..0a6c84bec 100644 --- a/regression_test/XML/HR49727/http_jabber_org_protocol_pubsub.ttcn +++ b/regression_test/XML/HR49727/http_jabber_org_protocol_pubsub.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/HR49727/http_jabber_org_protocol_pubsub_event.ttcn b/regression_test/XML/HR49727/http_jabber_org_protocol_pubsub_event.ttcn index ac93b7b73..089625b38 100644 --- a/regression_test/XML/HR49727/http_jabber_org_protocol_pubsub_event.ttcn +++ b/regression_test/XML/HR49727/http_jabber_org_protocol_pubsub_event.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/HR49727/jabber_x_data.ttcn b/regression_test/XML/HR49727/jabber_x_data.ttcn index b1a63b18d..b9bd34dda 100644 --- a/regression_test/XML/HR49727/jabber_x_data.ttcn +++ b/regression_test/XML/HR49727/jabber_x_data.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/HU13380/HU13380.ttcn b/regression_test/XML/HU13380/HU13380.ttcn new file mode 100644 index 000000000..7d5c98aed --- /dev/null +++ b/regression_test/XML/HU13380/HU13380.ttcn @@ -0,0 +1,64 @@ +/****************************************************************************** + * Copyright (c) 2000-2015 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 + ******************************************************************************/ + +// Original TR: +// Omitted optional fields of union type (with the "untagged" coding instruction) +// are not handled by the XER decoder. +// The XER decoder reports a decoding error, if the decoded element does not match +// any of the union's alternatives. It does not consider the possibility, that the +// union might be an (omitted) optional field of a record or set, and decoded +// element might be meant for another field. +module HU13380 { + +type component CT {} + +type record Rec { + integer int1, + union { + charstring abc, + charstring def + } uni optional, + integer int2 +} +with { + variant(uni) "untagged"; +} + +external function f_enc(in Rec x) return octetstring + with { extension "prototype(convert) encode(XER:XER_EXTENDED)" } + +external function f_dec(in octetstring x) return Rec + with { extension "prototype(convert) decode(XER:XER_EXTENDED)" } + +const Rec c_value := { 3, omit, -3 }; +const octetstring c_value_enc := char2oct( + "<Rec>\n" & + "\t<int1>3</int1>\n" & + "\t<int2>-3</int2>\n" & + "</Rec>\n\n"); + +testcase tc_HU13380() runs on CT { + var octetstring v_enc := f_enc(c_value); + if (v_enc != c_value_enc) { + setverdict(fail, "Expected: ", c_value_enc, ", got: ", v_enc); + } + var Rec v_dec := f_dec(c_value_enc); + if (v_dec != c_value) { + setverdict(fail, "Expected: ", c_value, ", got: ", v_dec); + } + setverdict(pass); +} + +control { + execute(tc_HU13380()); +} + +} +with { + encode "XML"; +} diff --git a/regression_test/XML/HU13380/Makefile b/regression_test/XML/HU13380/Makefile new file mode 100644 index 000000000..faadd49a1 --- /dev/null +++ b/regression_test/XML/HU13380/Makefile @@ -0,0 +1,138 @@ +############################################################################### +# Copyright (c) 2000-2015 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 +############################################################################### +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 += + +# 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 = HU13380.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) + +# 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 = HU13380 + +# +# 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) $(LIBRARY) $(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_DIR)/bin/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/HU13380/config.cfg b/regression_test/XML/HU13380/config.cfg new file mode 100644 index 000000000..798fe0b49 --- /dev/null +++ b/regression_test/XML/HU13380/config.cfg @@ -0,0 +1,12 @@ +############################################################################### +# Copyright (c) 2000-2015 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 +############################################################################### +[LOGGING] +LogEventTypes := Detailed + +[EXECUTE] +HU13380 diff --git a/regression_test/XML/Makefile b/regression_test/XML/Makefile index 6d9a50d4b..dfdba8189 100644 --- a/regression_test/XML/Makefile +++ b/regression_test/XML/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 @@ -18,7 +18,7 @@ SHADOWED := XER* TTCNandXML* EXER-whitepaper* XMLqualif* endif XDIRS := $(wildcard $(SHADOWED)) xsdConverter \ -HM60295 HN15589 HQ30408 HR49727 $(RT2_ONLY) \ +HM60295 HN15589 HQ30408 HR49727 HU13380 $(RT2_ONLY) \ XmlWorkflow tpdValidTest # List of fake targets: diff --git a/regression_test/XML/NegativeTest/Makefile b/regression_test/XML/NegativeTest/Makefile index ad7c8150e..51f799871 100644 --- a/regression_test/XML/NegativeTest/Makefile +++ b/regression_test/XML/NegativeTest/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/NegativeTest/ReadXml.ttcn b/regression_test/XML/NegativeTest/ReadXml.ttcn index 8e4d48be2..a8c0b01e9 100644 --- a/regression_test/XML/NegativeTest/ReadXml.ttcn +++ b/regression_test/XML/NegativeTest/ReadXml.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/NegativeTest/ReadXmlImpl.cc b/regression_test/XML/NegativeTest/ReadXmlImpl.cc index e6ae4513e..b19092085 100644 --- a/regression_test/XML/NegativeTest/ReadXmlImpl.cc +++ b/regression_test/XML/NegativeTest/ReadXmlImpl.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/NegativeTest/exer_rec.ttcn b/regression_test/XML/NegativeTest/exer_rec.ttcn index b2ab1d3da..f6ecc3166 100644 --- a/regression_test/XML/NegativeTest/exer_rec.ttcn +++ b/regression_test/XML/NegativeTest/exer_rec.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/NegativeTest/exer_rec_of.ttcn b/regression_test/XML/NegativeTest/exer_rec_of.ttcn index 7a286ec1c..3f616416e 100644 --- a/regression_test/XML/NegativeTest/exer_rec_of.ttcn +++ b/regression_test/XML/NegativeTest/exer_rec_of.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/NegativeTest/exer_uni.ttcn b/regression_test/XML/NegativeTest/exer_uni.ttcn index a5a9b0504..2a4b49c66 100644 --- a/regression_test/XML/NegativeTest/exer_uni.ttcn +++ b/regression_test/XML/NegativeTest/exer_uni.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/NegativeTest/indent.pl b/regression_test/XML/NegativeTest/indent.pl index 4baef465c..bd3de3324 100755 --- a/regression_test/XML/NegativeTest/indent.pl +++ b/regression_test/XML/NegativeTest/indent.pl @@ -1,6 +1,6 @@ #!/usr/bin/perl -wpli.orig ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/NegativeTest/rec.ttcn b/regression_test/XML/NegativeTest/rec.ttcn index 4ddd52168..5e2f1a67b 100644 --- a/regression_test/XML/NegativeTest/rec.ttcn +++ b/regression_test/XML/NegativeTest/rec.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/NegativeTest/rec_of.ttcn b/regression_test/XML/NegativeTest/rec_of.ttcn index 880fa5ef3..894ed1ba6 100644 --- a/regression_test/XML/NegativeTest/rec_of.ttcn +++ b/regression_test/XML/NegativeTest/rec_of.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/NegativeTest/run.cfg b/regression_test/XML/NegativeTest/run.cfg index 5ab03a003..6a2bc0ecd 100644 --- a/regression_test/XML/NegativeTest/run.cfg +++ b/regression_test/XML/NegativeTest/run.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/NegativeTest/runner.ttcn b/regression_test/XML/NegativeTest/runner.ttcn index 3ae40b67b..76c0c1dd3 100644 --- a/regression_test/XML/NegativeTest/runner.ttcn +++ b/regression_test/XML/NegativeTest/runner.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/NegativeTest/uni.ttcn b/regression_test/XML/NegativeTest/uni.ttcn index ba3c428da..d987429fb 100644 --- a/regression_test/XML/NegativeTest/uni.ttcn +++ b/regression_test/XML/NegativeTest/uni.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/TTCNandXML/AnnexB1.ttcn b/regression_test/XML/TTCNandXML/AnnexB1.ttcn index 93f50457d..8363cfb0a 100644 --- a/regression_test/XML/TTCNandXML/AnnexB1.ttcn +++ b/regression_test/XML/TTCNandXML/AnnexB1.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/TTCNandXML/AnnexB1Template.ttcnpp b/regression_test/XML/TTCNandXML/AnnexB1Template.ttcnpp index ec9b90864..3c426209a 100644 --- a/regression_test/XML/TTCNandXML/AnnexB1Template.ttcnpp +++ b/regression_test/XML/TTCNandXML/AnnexB1Template.ttcnpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/TTCNandXML/AnnexB2.ttcn b/regression_test/XML/TTCNandXML/AnnexB2.ttcn index f877007c4..dcea8327b 100644 --- a/regression_test/XML/TTCNandXML/AnnexB2.ttcn +++ b/regression_test/XML/TTCNandXML/AnnexB2.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/TTCNandXML/AnnexB2Template.ttcnpp b/regression_test/XML/TTCNandXML/AnnexB2Template.ttcnpp index dfef33305..8b030e01f 100644 --- a/regression_test/XML/TTCNandXML/AnnexB2Template.ttcnpp +++ b/regression_test/XML/TTCNandXML/AnnexB2Template.ttcnpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/TTCNandXML/AnnexB3.ttcn b/regression_test/XML/TTCNandXML/AnnexB3.ttcn index 3dd31d6a7..3ed93b37e 100644 --- a/regression_test/XML/TTCNandXML/AnnexB3.ttcn +++ b/regression_test/XML/TTCNandXML/AnnexB3.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/TTCNandXML/AnnexB3Template.ttcnpp b/regression_test/XML/TTCNandXML/AnnexB3Template.ttcnpp index 3a3370523..750265952 100644 --- a/regression_test/XML/TTCNandXML/AnnexB3Template.ttcnpp +++ b/regression_test/XML/TTCNandXML/AnnexB3Template.ttcnpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/TTCNandXML/AnnexB4.ttcn b/regression_test/XML/TTCNandXML/AnnexB4.ttcn index 5496ae2e6..303f157d6 100644 --- a/regression_test/XML/TTCNandXML/AnnexB4.ttcn +++ b/regression_test/XML/TTCNandXML/AnnexB4.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/TTCNandXML/AnnexB4Template.ttcnpp b/regression_test/XML/TTCNandXML/AnnexB4Template.ttcnpp index dd1e37662..6c053f3ef 100644 --- a/regression_test/XML/TTCNandXML/AnnexB4Template.ttcnpp +++ b/regression_test/XML/TTCNandXML/AnnexB4Template.ttcnpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/TTCNandXML/AnyStuff.ttcnpp b/regression_test/XML/TTCNandXML/AnyStuff.ttcnpp index 153dd1a61..259a7c0c9 100644 --- a/regression_test/XML/TTCNandXML/AnyStuff.ttcnpp +++ b/regression_test/XML/TTCNandXML/AnyStuff.ttcnpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/TTCNandXML/AttribPath.ttcn b/regression_test/XML/TTCNandXML/AttribPath.ttcn index b81a9999a..c027ab189 100644 --- a/regression_test/XML/TTCNandXML/AttribPath.ttcn +++ b/regression_test/XML/TTCNandXML/AttribPath.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/TTCNandXML/AttribPathTest.ttcnpp b/regression_test/XML/TTCNandXML/AttribPathTest.ttcnpp index 6cc0d80e5..d0457425b 100644 --- a/regression_test/XML/TTCNandXML/AttribPathTest.ttcnpp +++ b/regression_test/XML/TTCNandXML/AttribPathTest.ttcnpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/TTCNandXML/AttributesTest.ttcnpp b/regression_test/XML/TTCNandXML/AttributesTest.ttcnpp index 943360d08..46f6e8ae5 100644 --- a/regression_test/XML/TTCNandXML/AttributesTest.ttcnpp +++ b/regression_test/XML/TTCNandXML/AttributesTest.ttcnpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/TTCNandXML/Base64Test.ttcnpp b/regression_test/XML/TTCNandXML/Base64Test.ttcnpp index d37f3abc7..2341da98e 100644 --- a/regression_test/XML/TTCNandXML/Base64Test.ttcnpp +++ b/regression_test/XML/TTCNandXML/Base64Test.ttcnpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/TTCNandXML/DFEAttribTest.ttcnpp b/regression_test/XML/TTCNandXML/DFEAttribTest.ttcnpp index e9e750679..060d51aa3 100644 --- a/regression_test/XML/TTCNandXML/DFEAttribTest.ttcnpp +++ b/regression_test/XML/TTCNandXML/DFEAttribTest.ttcnpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/TTCNandXML/DFETest.ttcnpp b/regression_test/XML/TTCNandXML/DFETest.ttcnpp index e116ec5fb..2b4678d46 100644 --- a/regression_test/XML/TTCNandXML/DFETest.ttcnpp +++ b/regression_test/XML/TTCNandXML/DFETest.ttcnpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/TTCNandXML/E0.ttcn b/regression_test/XML/TTCNandXML/E0.ttcn index 59a708c52..3b7a6ef65 100644 --- a/regression_test/XML/TTCNandXML/E0.ttcn +++ b/regression_test/XML/TTCNandXML/E0.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/TTCNandXML/EmbedValues.ttcnpp b/regression_test/XML/TTCNandXML/EmbedValues.ttcnpp index f5edaa633..8a7bd5dce 100644 --- a/regression_test/XML/TTCNandXML/EmbedValues.ttcnpp +++ b/regression_test/XML/TTCNandXML/EmbedValues.ttcnpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/TTCNandXML/EnumTest.ttcnpp b/regression_test/XML/TTCNandXML/EnumTest.ttcnpp index e4ad73ee8..9b36aa7b1 100644 --- a/regression_test/XML/TTCNandXML/EnumTest.ttcnpp +++ b/regression_test/XML/TTCNandXML/EnumTest.ttcnpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/TTCNandXML/Flatten.cc b/regression_test/XML/TTCNandXML/Flatten.cc index 8081b7689..fae9808aa 100644 --- a/regression_test/XML/TTCNandXML/Flatten.cc +++ b/regression_test/XML/TTCNandXML/Flatten.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/TTCNandXML/Flattener.ttcn b/regression_test/XML/TTCNandXML/Flattener.ttcn index dc811cd91..f1a1d46c4 100644 --- a/regression_test/XML/TTCNandXML/Flattener.ttcn +++ b/regression_test/XML/TTCNandXML/Flattener.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/TTCNandXML/Makefile b/regression_test/XML/TTCNandXML/Makefile index 8fff1eb67..8e803874c 100644 --- a/regression_test/XML/TTCNandXML/Makefile +++ b/regression_test/XML/TTCNandXML/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/TTCNandXML/Marx.ttcnpp b/regression_test/XML/TTCNandXML/Marx.ttcnpp index 2b6d82439..5c49410d1 100644 --- a/regression_test/XML/TTCNandXML/Marx.ttcnpp +++ b/regression_test/XML/TTCNandXML/Marx.ttcnpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/TTCNandXML/NamespaceDef.ttcn b/regression_test/XML/TTCNandXML/NamespaceDef.ttcn index 9e92711ed..de2d71eef 100644 --- a/regression_test/XML/TTCNandXML/NamespaceDef.ttcn +++ b/regression_test/XML/TTCNandXML/NamespaceDef.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/TTCNandXML/NamespaceTest.ttcnpp b/regression_test/XML/TTCNandXML/NamespaceTest.ttcnpp index 00fd5d59e..664c32161 100644 --- a/regression_test/XML/TTCNandXML/NamespaceTest.ttcnpp +++ b/regression_test/XML/TTCNandXML/NamespaceTest.ttcnpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/TTCNandXML/Regressions.ttcnpp b/regression_test/XML/TTCNandXML/Regressions.ttcnpp index 215cf2839..2ddca34f0 100644 --- a/regression_test/XML/TTCNandXML/Regressions.ttcnpp +++ b/regression_test/XML/TTCNandXML/Regressions.ttcnpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/TTCNandXML/UTF8.ttcn b/regression_test/XML/TTCNandXML/UTF8.ttcn index 5430e5f72..197310424 100644 --- a/regression_test/XML/TTCNandXML/UTF8.ttcn +++ b/regression_test/XML/TTCNandXML/UTF8.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/TTCNandXML/WhitespaceTest.ttcnpp b/regression_test/XML/TTCNandXML/WhitespaceTest.ttcnpp index 9bdea10ae..a138095ae 100644 --- a/regression_test/XML/TTCNandXML/WhitespaceTest.ttcnpp +++ b/regression_test/XML/TTCNandXML/WhitespaceTest.ttcnpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/TTCNandXML/X693amd1.ttcn b/regression_test/XML/TTCNandXML/X693amd1.ttcn index b727f6833..0e87ca36b 100644 --- a/regression_test/XML/TTCNandXML/X693amd1.ttcn +++ b/regression_test/XML/TTCNandXML/X693amd1.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/TTCNandXML/X693amd1Test.ttcnpp b/regression_test/XML/TTCNandXML/X693amd1Test.ttcnpp index 4b2e124ec..7ff5320ec 100644 --- a/regression_test/XML/TTCNandXML/X693amd1Test.ttcnpp +++ b/regression_test/XML/TTCNandXML/X693amd1Test.ttcnpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/TTCNandXML/XSDAttributes.ttcn b/regression_test/XML/TTCNandXML/XSDAttributes.ttcn index caf8c3017..754c204c1 100644 --- a/regression_test/XML/TTCNandXML/XSDAttributes.ttcn +++ b/regression_test/XML/TTCNandXML/XSDAttributes.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/TTCNandXML/config.cfg b/regression_test/XML/TTCNandXML/config.cfg index a3ab0c0d5..7b5fb4ef7 100644 --- a/regression_test/XML/TTCNandXML/config.cfg +++ b/regression_test/XML/TTCNandXML/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XER/AsnValues.asn b/regression_test/XML/XER/AsnValues.asn index a5154c064..1453838f0 100644 --- a/regression_test/XML/XER/AsnValues.asn +++ b/regression_test/XML/XER/AsnValues.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XER/Asntypes.asn b/regression_test/XML/XER/Asntypes.asn index f8d6f3f36..8a2751575 100644 --- a/regression_test/XML/XER/Asntypes.asn +++ b/regression_test/XML/XER/Asntypes.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XER/EmptyUnion.asn b/regression_test/XML/XER/EmptyUnion.asn index 6f34e3e7c..7382865ae 100644 --- a/regression_test/XML/XER/EmptyUnion.asn +++ b/regression_test/XML/XER/EmptyUnion.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XER/Flatten.cc b/regression_test/XML/XER/Flatten.cc index 80f6b8660..78c0971db 100644 --- a/regression_test/XML/XER/Flatten.cc +++ b/regression_test/XML/XER/Flatten.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XER/Makefile b/regression_test/XML/XER/Makefile index 4e5a89639..a14f0cffc 100644 --- a/regression_test/XML/XER/Makefile +++ b/regression_test/XML/XER/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XER/ObjectClass.asn b/regression_test/XML/XER/ObjectClass.asn index 870b4ac06..3df0a16f6 100644 --- a/regression_test/XML/XER/ObjectClass.asn +++ b/regression_test/XML/XER/ObjectClass.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XER/ObjectClassWithSyntax.asn b/regression_test/XML/XER/ObjectClassWithSyntax.asn index 472d5d59a..c0fe24db1 100644 --- a/regression_test/XML/XER/ObjectClassWithSyntax.asn +++ b/regression_test/XML/XER/ObjectClassWithSyntax.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XER/SetValues.asn b/regression_test/XML/XER/SetValues.asn index ef84549aa..c1401c0d5 100644 --- a/regression_test/XML/XER/SetValues.asn +++ b/regression_test/XML/XER/SetValues.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XER/Sets.asn b/regression_test/XML/XER/Sets.asn index c533ae9c0..9c8ff4c09 100644 --- a/regression_test/XML/XER/Sets.asn +++ b/regression_test/XML/XER/Sets.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XER/Txerasntypes.ttcnpp b/regression_test/XML/XER/Txerasntypes.ttcnpp index 4ef5500b1..d6f7d2313 100644 --- a/regression_test/XML/XER/Txerasntypes.ttcnpp +++ b/regression_test/XML/XER/Txerasntypes.ttcnpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XER/Txerbinstr.ttcnpp b/regression_test/XML/XER/Txerbinstr.ttcnpp index 5b7e5a737..9300992d9 100644 --- a/regression_test/XML/XER/Txerbinstr.ttcnpp +++ b/regression_test/XML/XER/Txerbinstr.ttcnpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XER/Txerboolean.ttcnpp b/regression_test/XML/XER/Txerboolean.ttcnpp index e74ed5100..d7191b2e0 100644 --- a/regression_test/XML/XER/Txerboolean.ttcnpp +++ b/regression_test/XML/XER/Txerboolean.ttcnpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XER/Txerenum.ttcnpp b/regression_test/XML/XER/Txerenum.ttcnpp index f2e861b17..5be221366 100644 --- a/regression_test/XML/XER/Txerenum.ttcnpp +++ b/regression_test/XML/XER/Txerenum.ttcnpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XER/Txerfloat.ttcnpp b/regression_test/XML/XER/Txerfloat.ttcnpp index 5ad14bf83..2b2f8844c 100644 --- a/regression_test/XML/XER/Txerfloat.ttcnpp +++ b/regression_test/XML/XER/Txerfloat.ttcnpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XER/Txerint.ttcnpp b/regression_test/XML/XER/Txerint.ttcnpp index 529c1a8db..e385eaedc 100644 --- a/regression_test/XML/XER/Txerint.ttcnpp +++ b/regression_test/XML/XER/Txerint.ttcnpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XER/Txernested.ttcnpp b/regression_test/XML/XER/Txernested.ttcnpp index 914fdbcf7..db9546a68 100644 --- a/regression_test/XML/XER/Txernested.ttcnpp +++ b/regression_test/XML/XER/Txernested.ttcnpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XER/Txerobjclass.ttcnpp b/regression_test/XML/XER/Txerobjclass.ttcnpp index af6299d55..56c74bcde 100644 --- a/regression_test/XML/XER/Txerobjclass.ttcnpp +++ b/regression_test/XML/XER/Txerobjclass.ttcnpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XER/Txersets.ttcnpp b/regression_test/XML/XER/Txersets.ttcnpp index ef35824db..029854956 100644 --- a/regression_test/XML/XER/Txersets.ttcnpp +++ b/regression_test/XML/XER/Txersets.ttcnpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XER/Txerstring.ttcnpp b/regression_test/XML/XER/Txerstring.ttcnpp index 680f7fe76..7a029b678 100644 --- a/regression_test/XML/XER/Txerstring.ttcnpp +++ b/regression_test/XML/XER/Txerstring.ttcnpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XER/checkit.pl b/regression_test/XML/XER/checkit.pl index 893350c80..0a07dbc7f 100755 --- a/regression_test/XML/XER/checkit.pl +++ b/regression_test/XML/XER/checkit.pl @@ -1,6 +1,6 @@ #!/usr/bin/perl -w ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XER/config.cfg b/regression_test/XML/XER/config.cfg index b3829c831..ab96069b4 100644 --- a/regression_test/XML/XER/config.cfg +++ b/regression_test/XML/XER/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XER/junk.ttcn3 b/regression_test/XML/XER/junk.ttcn3 index 7d05ebaa7..b0f0f71b7 100644 --- a/regression_test/XML/XER/junk.ttcn3 +++ b/regression_test/XML/XER/junk.ttcn3 @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XMLqualif/Makefile b/regression_test/XML/XMLqualif/Makefile index 731954826..15e463167 100644 --- a/regression_test/XML/XMLqualif/Makefile +++ b/regression_test/XML/XMLqualif/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XMLqualif/POtest.ttcnpp b/regression_test/XML/XMLqualif/POtest.ttcnpp index 3e2cc3390..6cd66e1d1 100644 --- a/regression_test/XML/XMLqualif/POtest.ttcnpp +++ b/regression_test/XML/XMLqualif/POtest.ttcnpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XMLqualif/config.cfg b/regression_test/XML/XMLqualif/config.cfg index 7c3ce375f..deca5f34e 100644 --- a/regression_test/XML/XMLqualif/config.cfg +++ b/regression_test/XML/XMLqualif/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XMLqualif/globall.xsd b/regression_test/XML/XMLqualif/globall.xsd index c67dcfec9..121cb0792 100644 --- a/regression_test/XML/XMLqualif/globall.xsd +++ b/regression_test/XML/XMLqualif/globall.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XMLqualif/po_qual.xsd b/regression_test/XML/XMLqualif/po_qual.xsd index e7773912b..f1331194f 100644 --- a/regression_test/XML/XMLqualif/po_qual.xsd +++ b/regression_test/XML/XMLqualif/po_qual.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XMLqualif/po_qual_atr.xsd b/regression_test/XML/XMLqualif/po_qual_atr.xsd index 4c263a39b..1a3f240aa 100644 --- a/regression_test/XML/XMLqualif/po_qual_atr.xsd +++ b/regression_test/XML/XMLqualif/po_qual_atr.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XMLqualif/po_qual_both.xsd b/regression_test/XML/XMLqualif/po_qual_both.xsd index 37b9b497b..b5b865e11 100644 --- a/regression_test/XML/XMLqualif/po_qual_both.xsd +++ b/regression_test/XML/XMLqualif/po_qual_both.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XMLqualif/po_qual_default.xml b/regression_test/XML/XMLqualif/po_qual_default.xml index 6156a89bc..c01aa4bb6 100644 --- a/regression_test/XML/XMLqualif/po_qual_default.xml +++ b/regression_test/XML/XMLqualif/po_qual_default.xml @@ -1,6 +1,6 @@ <?xml version="1.0"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XMLqualif/po_qual_explicit.xml b/regression_test/XML/XMLqualif/po_qual_explicit.xml index c400a5e69..13f8528bd 100644 --- a/regression_test/XML/XMLqualif/po_qual_explicit.xml +++ b/regression_test/XML/XMLqualif/po_qual_explicit.xml @@ -1,6 +1,6 @@ <?xml version="1.0"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XMLqualif/po_unqual.xml b/regression_test/XML/XMLqualif/po_unqual.xml index 4db4f20bd..55c17c1ce 100644 --- a/regression_test/XML/XMLqualif/po_unqual.xml +++ b/regression_test/XML/XMLqualif/po_unqual.xml @@ -1,6 +1,6 @@ <?xml version="1.0"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XMLqualif/po_unqual.xsd b/regression_test/XML/XMLqualif/po_unqual.xsd index fe9baed3f..b74a03284 100644 --- a/regression_test/XML/XMLqualif/po_unqual.xsd +++ b/regression_test/XML/XMLqualif/po_unqual.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/Makefile b/regression_test/XML/XmlWorkflow/Makefile index e2693368c..f5b851827 100644 --- a/regression_test/XML/XmlWorkflow/Makefile +++ b/regression_test/XML/XmlWorkflow/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/demo/PIPE.cfg b/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/demo/PIPE.cfg index c86ba02af..3a33e6117 100644 --- a/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/demo/PIPE.cfg +++ b/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/demo/PIPE.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/demo/PIPEasp_Templates.ttcn b/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/demo/PIPEasp_Templates.ttcn index 988bd4824..ead0f96cc 100644 --- a/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/demo/PIPEasp_Templates.ttcn +++ b/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/demo/PIPEasp_Templates.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/demo/PipeTest.prj b/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/demo/PipeTest.prj index 9281cfea6..2957d7841 100644 --- a/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/demo/PipeTest.prj +++ b/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/demo/PipeTest.prj @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/demo/PipeTest.ttcn b/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/demo/PipeTest.ttcn index 1e7ebc2c1..0d7c2b444 100644 --- a/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/demo/PipeTest.ttcn +++ b/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/demo/PipeTest.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/demo/ShellNotice.sh b/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/demo/ShellNotice.sh index 204944ad5..a8792e32e 100644 --- a/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/demo/ShellNotice.sh +++ b/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/demo/ShellNotice.sh @@ -1,6 +1,6 @@ #!/bin/sh ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/demo/ShellQuestionString.sh b/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/demo/ShellQuestionString.sh index b4c6a0cde..ba6b2d34e 100644 --- a/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/demo/ShellQuestionString.sh +++ b/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/demo/ShellQuestionString.sh @@ -1,6 +1,6 @@ #!/bin/sh ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/demo/ShellQuestionYesNo.sh b/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/demo/ShellQuestionYesNo.sh index 56b21f514..3758adf90 100644 --- a/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/demo/ShellQuestionYesNo.sh +++ b/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/demo/ShellQuestionYesNo.sh @@ -1,6 +1,6 @@ #!/bin/sh ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/src/PIPEasp_PT.cc b/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/src/PIPEasp_PT.cc index 2b57a1698..ea6fbf86c 100644 --- a/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/src/PIPEasp_PT.cc +++ b/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/src/PIPEasp_PT.cc @@ -1,5 +1,5 @@ /******************************************************************************* -* Copyright (c) 2000-2014 Ericsson Telecom AB +* Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/src/PIPEasp_PT.hh b/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/src/PIPEasp_PT.hh index df7624021..47c44bb20 100644 --- a/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/src/PIPEasp_PT.hh +++ b/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/src/PIPEasp_PT.hh @@ -1,5 +1,5 @@ /******************************************************************************* -* Copyright (c) 2000-2014 Ericsson Telecom AB +* Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/src/PIPEasp_PortType.ttcn b/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/src/PIPEasp_PortType.ttcn index 1d43b6fa8..afaf5b9a1 100644 --- a/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/src/PIPEasp_PortType.ttcn +++ b/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/src/PIPEasp_PortType.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/src/PIPEasp_Types.ttcn b/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/src/PIPEasp_Types.ttcn index da8ea94df..b63bccda1 100644 --- a/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/src/PIPEasp_Types.ttcn +++ b/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/src/PIPEasp_Types.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/test/Makefile b/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/test/Makefile index 3dc25690b..d5c00ef64 100644 --- a/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/test/Makefile +++ b/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/test/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/test/PIPEasp_PT.cc b/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/test/PIPEasp_PT.cc index 93e93f6be..108e07bae 100644 --- a/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/test/PIPEasp_PT.cc +++ b/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/test/PIPEasp_PT.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/test/PIPEasp_PT.hh b/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/test/PIPEasp_PT.hh index bc2d6f413..fea511d81 100644 --- a/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/test/PIPEasp_PT.hh +++ b/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/test/PIPEasp_PT.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/test/PIPEasp_PortType.ttcn b/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/test/PIPEasp_PortType.ttcn index 1d43b6fa8..afaf5b9a1 100644 --- a/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/test/PIPEasp_PortType.ttcn +++ b/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/test/PIPEasp_PortType.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/test/PIPEasp_Types.ttcn b/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/test/PIPEasp_Types.ttcn index da8ea94df..b63bccda1 100644 --- a/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/test/PIPEasp_Types.ttcn +++ b/regression_test/XML/XmlWorkflow/PIPEasp_CNL113334/test/PIPEasp_Types.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/Tgc/IsTypes.xsd b/regression_test/XML/XmlWorkflow/Tgc/IsTypes.xsd index fa9db7b43..ca3a9f157 100644 --- a/regression_test/XML/XmlWorkflow/Tgc/IsTypes.xsd +++ b/regression_test/XML/XmlWorkflow/Tgc/IsTypes.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/Tgc/Tgc.ttcn b/regression_test/XML/XmlWorkflow/Tgc/Tgc.ttcn index 6536fe26b..1aa80bb2c 100644 --- a/regression_test/XML/XmlWorkflow/Tgc/Tgc.ttcn +++ b/regression_test/XML/XmlWorkflow/Tgc/Tgc.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/Tgc/Tgc.xsd b/regression_test/XML/XmlWorkflow/Tgc/Tgc.xsd index 37f824851..788f9cb29 100644 --- a/regression_test/XML/XmlWorkflow/Tgc/Tgc.xsd +++ b/regression_test/XML/XmlWorkflow/Tgc/Tgc.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/Tgc/UsefulTtcn3Types.ttcn b/regression_test/XML/XmlWorkflow/Tgc/UsefulTtcn3Types.ttcn index e680ab0eb..bac9ef501 100644 --- a/regression_test/XML/XmlWorkflow/Tgc/UsefulTtcn3Types.ttcn +++ b/regression_test/XML/XmlWorkflow/Tgc/UsefulTtcn3Types.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/Tgc/XMLSchema.xsd b/regression_test/XML/XmlWorkflow/Tgc/XMLSchema.xsd index 6962c415b..42f578336 100644 --- a/regression_test/XML/XmlWorkflow/Tgc/XMLSchema.xsd +++ b/regression_test/XML/XmlWorkflow/Tgc/XMLSchema.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/Tgc/XSD.ttcn b/regression_test/XML/XmlWorkflow/Tgc/XSD.ttcn index 8ee4fc267..d35abb763 100644 --- a/regression_test/XML/XmlWorkflow/Tgc/XSD.ttcn +++ b/regression_test/XML/XmlWorkflow/Tgc/XSD.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/Tgc/confd.xsd b/regression_test/XML/XmlWorkflow/Tgc/confd.xsd index 228ef1bde..ba9621f8c 100644 --- a/regression_test/XML/XmlWorkflow/Tgc/confd.xsd +++ b/regression_test/XML/XmlWorkflow/Tgc/confd.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/Tgc/tail_f_com_ns_confd_1_0.ttcn b/regression_test/XML/XmlWorkflow/Tgc/tail_f_com_ns_confd_1_0.ttcn index 6e972e448..51e27e19b 100644 --- a/regression_test/XML/XmlWorkflow/Tgc/tail_f_com_ns_confd_1_0.ttcn +++ b/regression_test/XML/XmlWorkflow/Tgc/tail_f_com_ns_confd_1_0.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/Tgc/www_ericsson_com_is_isco_IsTypes_R4L06_R4AF11.ttcn b/regression_test/XML/XmlWorkflow/Tgc/www_ericsson_com_is_isco_IsTypes_R4L06_R4AF11.ttcn index e22d93d8c..52fb6a9a8 100644 --- a/regression_test/XML/XmlWorkflow/Tgc/www_ericsson_com_is_isco_IsTypes_R4L06_R4AF11.ttcn +++ b/regression_test/XML/XmlWorkflow/Tgc/www_ericsson_com_is_isco_IsTypes_R4L06_R4AF11.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/Tgc/www_ericsson_com_is_isco_Tgc_R6A48_R6H01.ttcn b/regression_test/XML/XmlWorkflow/Tgc/www_ericsson_com_is_isco_Tgc_R6A48_R6H01.ttcn index 0cab59a6b..e1ebd13fb 100644 --- a/regression_test/XML/XmlWorkflow/Tgc/www_ericsson_com_is_isco_Tgc_R6A48_R6H01.ttcn +++ b/regression_test/XML/XmlWorkflow/Tgc/www_ericsson_com_is_isco_Tgc_R6A48_R6H01.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/Tgc/www_w3_org_XML_1998_namespace.ttcn b/regression_test/XML/XmlWorkflow/Tgc/www_w3_org_XML_1998_namespace.ttcn index 5e350fa33..5c199bc92 100644 --- a/regression_test/XML/XmlWorkflow/Tgc/www_w3_org_XML_1998_namespace.ttcn +++ b/regression_test/XML/XmlWorkflow/Tgc/www_w3_org_XML_1998_namespace.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/Tgc/xml.xsd b/regression_test/XML/XmlWorkflow/Tgc/xml.xsd index 303cc6e87..3f57f0870 100644 --- a/regression_test/XML/XmlWorkflow/Tgc/xml.xsd +++ b/regression_test/XML/XmlWorkflow/Tgc/xml.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/MyTypes_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/MyTypes_e.ttcn new file mode 100644 index 000000000..0e2691ebd --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/MyTypes_e.ttcn @@ -0,0 +1,72 @@ +/******************************************************************************* +* Copyright (c) 2000-2015 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/5 R2A +* +* 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 +*******************************************************************************/ +// +// File: MyTypes_e.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Mon Oct 12 10:09:06 2014 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - module_typename_conversion_1.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "MyTypes_e" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module MyTypes { + + +import from XSD all; + + +type XSD.String MyTypes_2 +with { +variant "name as 'MyTypes__'"; +variant "attribute"; +}; + + +type XSD.String MyTypes_1 +with { +variant "name as 'MyTypes_'"; +variant "element"; +}; + + +type record MyTypes_3 +{ + XSD.String myTypes +} +with { +variant "name as 'MyTypes'"; +variant "element"; +variant (myTypes) "name as capitalized"; +}; + + +} +with { +encode "XML"; +variant "namespace as 'MyTypes'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/NoTargetNamespace.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/NoTargetNamespace.ttcn new file mode 100644 index 000000000..d4cb2c755 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/NoTargetNamespace.ttcn @@ -0,0 +1,58 @@ +/******************************************************************************* +* Copyright Ericsson Telecom AB 2015 +* +* XSD to TTCN-3 Translator version: CRL 113 200/5 R3A +* +* 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 +*******************************************************************************/ +// +// File: NoTargetNamespace.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Wed Oct 28 13:59:18 2015 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - attrib_order_c.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "NoTargetNamespace" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module NoTargetNamespace { + + +import from XSD all; + + +type XSD.String AttrNoTargetNamespace +with { +variant "attribute"; +}; + + +type XSD.String AttrNoTargetNamespace2 +with { +variant "attribute"; +}; + + +} +with { +encode "XML"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/XmlTest_imsike_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/XmlTest_imsike_e.ttcn index a5bb5a7d6..f6d07f76f 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/XmlTest_imsike_e.ttcn +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/XmlTest_imsike_e.ttcn @@ -128,7 +128,7 @@ variant (content.bornPlace_list[-]) "useNil"; } with { encode "XML"; -variant "namespace as 'urn:XmlTest.imsike' prefix 'ns'"; +variant "namespace as 'urn:XmlTest.imsike' prefix 'ns50'"; variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; variant "elementFormQualified"; } diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/attribute_in_extension_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/attribute_in_extension_e.ttcn new file mode 100644 index 000000000..1d7189964 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/attribute_in_extension_e.ttcn @@ -0,0 +1,72 @@ +/******************************************************************************* +* Copyright (c) 2000-2015 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/5 R2A +* +* 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 +*******************************************************************************/ +// +// File: attribute_in_extension_e.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Fri May 29 12:56:49 2014 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - attribute_in_extension.xsd +// /* xml version = "1.0" */ +// /* targetnamespace = "attribute_in_extension_e" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module attribute_in_extension { + + +import from XSD all; + + +type record BaseType +{ + XSD.Integer base_variable +} +with { +variant (base_variable) "name as 'Base-variable'"; +}; + + +type record Extending_type +{ + record { + XSD.Integer extension_ optional, + XSD.Integer base_variable + } ext +} +with { +variant "name as 'Extending-type'"; +variant (ext.extension_) "name as 'extension'"; +variant (ext.extension_) "attribute"; +variant (ext.base_variable) "name as 'Base-variable'"; +}; + + +} +with { +encode "XML"; +variant "namespace as 'attribute_in_extension' prefix 'ns45'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +variant "elementFormQualified"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/http_www_example_org_complex_restriction_with_use_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/http_www_example_org_complex_restriction_with_use_e.ttcn new file mode 100644 index 000000000..d290022db --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/http_www_example_org_complex_restriction_with_use_e.ttcn @@ -0,0 +1,117 @@ +/******************************************************************************* +* Copyright (c) 2000-2015 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/4 R3A +* +* 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 +*******************************************************************************/ +// +// File: http_www_example_org_complex_restriction_with_use_e.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Tue Jun 2 06:12:37 2014 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - complex_restriction_with_use.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "http://www.example.org/complex-restriction-with-use/e" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module http_www_example_org_complex_restriction_with_use { + + +import from XSD all; + + +/* The base type is: */ + + +type record PurchaseOrderType +{ + XSD.Date finishDate optional, + XSD.Date orderDate optional, + XSD.Date shipDate optional, + XSD.String shipTo, + XSD.String billTo optional, + XSD.String items +} +with { +variant (finishDate) "attribute"; +variant (orderDate) "attribute"; +variant (shipDate) "attribute"; +}; + + +/* The restricting type is: */ + + +type record RestrictedPurchaseOrderType +{ + XSD.Date finishDate optional, + XSD.Date shipDate, + XSD.String shipTo, + XSD.String billTo, + XSD.String items +} +with { +variant (finishDate) "attribute"; +variant (shipDate) "attribute"; +}; + + +type Testsuite_1 Testsuite +with { +variant "name as uncapitalized"; +variant "element"; +}; + + +type record Testsuite_1 +{ + XSD.Decimal time optional, + record { + } properties +} +with { +variant "name as 'testsuite'"; +variant (time) "attribute"; +}; + + +type record Testsuites +{ + record { + XSD.Decimal time, + record { + } properties + } testsuite +} +with { +variant "name as uncapitalized"; +variant "element"; +variant (testsuite.time) "attribute"; +}; + + +} +with { +encode "XML"; +variant "namespace as 'http://www.example.org/complex-restriction-with-use'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/http_www_example_org_name_conv2_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/http_www_example_org_name_conv2_e.ttcn new file mode 100644 index 000000000..092e2ce29 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/http_www_example_org_name_conv2_e.ttcn @@ -0,0 +1,47 @@ +/******************************************************************************* +* Copyright (c) 2000-2015 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/4 R3A +* +* 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 +*******************************************************************************/ +// +// File: http_www_example_org_name_conv2_e.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Fr Jun 12 11:11:11 2014 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - name_conv_non_alphanumeric.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "http://www.example.org/name_conv2;;;;;;/e" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module http_www_example_org_name_conv2 { + + +import from XSD all; + + +} +with { +encode "XML"; +variant "namespace as 'http://www.example.org/name_conv2;;;;;;'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/http_www_example_org_name_conv3_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/http_www_example_org_name_conv3_e.ttcn new file mode 100644 index 000000000..db65f0357 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/http_www_example_org_name_conv3_e.ttcn @@ -0,0 +1,47 @@ +/******************************************************************************* +* Copyright (c) 2000-2015 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/4 R3A +* +* 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 +*******************************************************************************/ +// +// File: http_www_example_org_name_conv3_e.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Fr Jun 11 11:23:15 2015 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - name_conv_remove_seq_of_low_line.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "http://////////www.example.org/name_conv3////e" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module http_www_example_org_name_conv3 { + + +import from XSD all; + + +} +with { +encode "XML"; +variant "namespace as 'http://////////www.example.org/name_conv3///'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/http_www_example_org_nillable_in_nillable_extension_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/http_www_example_org_nillable_in_nillable_extension_e.ttcn new file mode 100644 index 000000000..b1f8603ff --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/http_www_example_org_nillable_in_nillable_extension_e.ttcn @@ -0,0 +1,92 @@ +/******************************************************************************* +* Copyright (c) 2000-2015 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/4 R3A +* +* 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 +*******************************************************************************/ +// +// File: http_www_example_org_nillable_in_nillable_extension_e.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Thu Jun 4 16:22:29 2014 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - nillable_in_nillable_extension.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "http://www.example.org/nillable/in/nillable/extension/e" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module http_www_example_org_nillable_in_nillable_extension { + + +import from XSD all; + + +type record SeqNillable +{ + XSD.Integer number optional, + record length(0 .. 32) of record { + XSD.Integer content optional + } nillableNumber_list +} +with { +variant (number) "name as capitalized"; +variant (nillableNumber_list) "untagged"; +variant (nillableNumber_list[-]) "name as 'NillableNumber'"; +variant (nillableNumber_list[-]) "useNil"; +}; + + +type record NillableInRecord +{ + XSD.Boolean allow_do_not, + record { + XSD.Integer phoneNumber optional, + record { + XSD.Integer number optional, + record length(0 .. 32) of record { + XSD.Integer content optional + } nillableNumber_list + } content optional + } seqNillableExtended optional +} +with { +variant "element"; +variant (allow_do_not) "name as 'allow-do-not'"; +//variant (allow_do_not) "text 'true' as '1'"; +//variant (allow_do_not) "text 'false' as '0'"; +variant (seqNillableExtended) "name as capitalized"; +variant (seqNillableExtended) "useNil"; +variant (seqNillableExtended.phoneNumber) "name as capitalized"; +variant (seqNillableExtended.phoneNumber) "attribute"; +variant (seqNillableExtended.content.number) "name as capitalized"; +variant (seqNillableExtended.content.nillableNumber_list) "untagged"; +variant (seqNillableExtended.content.nillableNumber_list[-]) "name as 'NillableNumber'"; +variant (seqNillableExtended.content.nillableNumber_list[-]) "useNil"; +}; + + +} +with { +encode "XML"; +variant "namespace as 'http://www.example.org/nillable/in/nillable/extension' prefix 'ns12'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +variant "elementFormQualified"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/http_www_example_org_seq_embeds_seq_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/http_www_example_org_seq_embeds_seq_e.ttcn new file mode 100644 index 000000000..922b7d335 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/http_www_example_org_seq_embeds_seq_e.ttcn @@ -0,0 +1,80 @@ +/******************************************************************************* +* Copyright (c) 2000-2015 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/4 R3A +* +* 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 +*******************************************************************************/ +// +// File: http_www_example_org_seq_embeds_seq_e.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Fri May 29 12:38:08 2014 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - sequence_embeds_sequence.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "http://www.example.org/seq-embeds-seq/e" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module http_www_example_org_seq_embeds_seq { + + +import from XSD all; + + +type record E34b +{ + union { + record { + XSD.String foo, + XSD.String bar, + XSD.String ding, + XSD.String foo_1, + XSD.String bar_1 + } sequence, + XSD.String ding + } choice +} +with { +variant "name as uncapitalized"; +variant (choice) "untagged"; +variant (choice.sequence) "untagged"; +variant (choice.sequence.foo_1) "name as 'foo'"; +variant (choice.sequence.bar_1) "name as 'bar'"; +}; + + +type record E40a +{ + XSD.String foo, + XSD.String bar, + XSD.String ding +} +with { +variant "name as uncapitalized"; +}; + + +} +with { +encode "XML"; +variant "namespace as 'http://www.example.org/seq-embeds-seq'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/http_www_example_org_ttcn_wildcards_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/http_www_example_org_ttcn_wildcards_e.ttcn index 67942d565..e59f45c83 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/http_www_example_org_ttcn_wildcards_e.ttcn +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/http_www_example_org_ttcn_wildcards_e.ttcn @@ -195,6 +195,18 @@ variant (sequence_list[-]) "untagged"; }; +type record MyType +{ + record of XSD.String attr optional, + XSD.String base +} +with { +variant "element"; +variant (attr) "anyAttributes from 'http://www.example.org/ttcn/wildcards'"; +variant (base) "untagged"; +}; + + } with { encode "XML"; diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/http_www_example_org_wildcards_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/http_www_example_org_wildcards_e.ttcn new file mode 100644 index 000000000..cfd317106 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/http_www_example_org_wildcards_e.ttcn @@ -0,0 +1,118 @@ +/******************************************************************************* +* Copyright (c) 2000-2015 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/4 R3A +* +* 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 +*******************************************************************************/ +// +// File: http_www_example_org_wildcards_e.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Mon Jun 1 11:35:23 2015 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - anyattribute_optional.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "http://www.example.org/wildcards/e" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module http_www_example_org_wildcards { + + +import from XSD all; + + +type E45 AnyAttrAnyNamespace +with { +variant "name as uncapitalized"; +variant "element"; +}; + + +type E45b AnyAttrThisNamespace +with { +variant "name as uncapitalized"; +variant "element"; +}; + + +type record E45 +{ + XSD.Date aa optional, + XSD.String attr optional, + XSD.Date bb optional, + record of XSD.String attr_1 optional +} +with { +variant "name as uncapitalized"; +variant (aa) "attribute"; +variant (attr) "attribute"; +variant (bb) "attribute"; +variant (attr_1) "anyAttributes"; +variant (attr_1) "name as 'attr'"; +}; + + +type record E45a +{ + record of XSD.String attr optional +} +with { +variant "name as uncapitalized"; +variant (attr) "anyAttributes except unqualified, 'http://www.example.org/wildcards'"; +}; + + +type record E45b +{ + record of XSD.String attr optional +} +with { +variant "name as uncapitalized"; +variant (attr) "anyAttributes from 'http://www.example.org/wildcards'"; +}; + + +type record E45c +{ + record of XSD.String attr optional +} +with { +variant "name as uncapitalized"; +variant (attr) "anyAttributes from unqualified,'http://www.example.org/attribute'"; +}; + + +type record E45d +{ + record of XSD.String attr optional +} +with { +variant "name as uncapitalized"; +variant (attr) "anyAttributes from 'http://www.example.org/wildcards',unqualified,'http://www.example.org/attribute'"; +}; + + +} +with { +encode "XML"; +variant "namespace as 'http://www.example.org/wildcards' prefix 'this'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/imported_module_1_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/imported_module_1_e.ttcn new file mode 100644 index 000000000..2e00420f0 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/imported_module_1_e.ttcn @@ -0,0 +1,53 @@ +/******************************************************************************* +* Copyright (c) 2000-2015 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/5 R2A +* +* 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 +*******************************************************************************/ +// +// File: imported_module_1.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Thu Oct 8 11:17:39 2014 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - imported_module__e.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "imported_module_1_e" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module imported_module_1 { + + +import from XSD all; + + +type XSD.Integer MyType +with { +variant "element"; +}; + + +} +with { +encode "XML"; +variant "namespace as 'imported_module_'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/imported_module_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/imported_module_e.ttcn new file mode 100644 index 000000000..a9518704a --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/imported_module_e.ttcn @@ -0,0 +1,53 @@ +/******************************************************************************* +* Copyright (c) 2000-2015 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/4 R3A +* +* 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 +*******************************************************************************/ +// +// File: imported_module_e.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Thu Oct 8 11:17:39 2014 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - imported_module.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "imported_module_e" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module imported_module { + + +import from XSD all; + + +type XSD.String MyType +with { +variant "element"; +}; + + +} +with { +encode "XML"; +variant "namespace as 'imported_module' prefix 'ns1'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/module_typename_conversion_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/module_typename_conversion_e.ttcn new file mode 100644 index 000000000..de6cecfcb --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/module_typename_conversion_e.ttcn @@ -0,0 +1,75 @@ +/******************************************************************************* +* Copyright (c) 2000-2015 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/5 R2A +* +* 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 +*******************************************************************************/ +// +// File: module_typename_conversion_e.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Mon Oct 12 10:09:06 2014 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - module_typename_conversion.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "module_typename_conversion_e" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module module_typename_conversion { + + +import from XSD all; + + +import from MyTypes all; + + +type XSD.String MyTypes_2 +with { +variant "name as 'MyTypes__'"; +variant "attribute"; +}; + + +type XSD.String MyTypes_1 +with { +variant "name as 'MyTypes_'"; +variant "element"; +}; + + +type record MyTypes_3 +{ + XSD.String myTypes +} +with { +variant "name as 'MyTypes'"; +variant "element"; +variant (myTypes) "name as capitalized"; +}; + + +} +with { +encode "XML"; +variant "namespace as 'module_typename_conversion'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/name_conversion_extension_attrib_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/name_conversion_extension_attrib_e.ttcn new file mode 100644 index 000000000..355ebc612 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/name_conversion_extension_attrib_e.ttcn @@ -0,0 +1,81 @@ +/******************************************************************************* +* Copyright (c) 2000-2015 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/4 R3A +* +* 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 +*******************************************************************************/ +// +// File: name_conversion_extension_attrib_e.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Fri May 29 12:00:20 2014 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - name_conversion_extension_attrib.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "name_conversion_extension_attrib/e" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module name_conversion_extension_attrib { + + +import from XSD all; + + +type record Ol_name_type +{ + XSD.Integer allow_true_action +} +with { +variant "name as 'Ol-name-type'"; +variant "element"; +variant (allow_true_action) "name as 'allow-true-action'"; +}; + + +type record Ol_actions_type +{ + XSD.Integer do_not_disturb, + record { + Ol_name_type announcement_name, + record { + XSD.Integer allow_true_action + } content optional + } play_segmented_announcement +} +with { +variant "name as 'Ol-actions-type'"; +variant "element"; +variant (do_not_disturb) "name as 'do-not-disturb'"; +variant (play_segmented_announcement) "name as 'play-segmented-announcement'"; +variant (play_segmented_announcement) "useNil"; +variant (play_segmented_announcement.announcement_name) "name as 'announcement-name'"; +variant (play_segmented_announcement.announcement_name) "attribute"; +variant (play_segmented_announcement.content.allow_true_action) "name as 'allow-true-action'"; +}; + + +} +with { +encode "XML"; +variant "namespace as 'name_conversion_extension_attrib'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +variant "elementFormQualified"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/nillable_annotations_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/nillable_annotations_e.ttcn new file mode 100644 index 000000000..8e9752f2b --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/nillable_annotations_e.ttcn @@ -0,0 +1,75 @@ +/******************************************************************************* +* Copyright (c) 2000-2015 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/4 R3A +* +* 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 +*******************************************************************************/ +// +// File: nillable_annotations_e.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Fri May 29 12:15:19 2014 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - nillable_annotations.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "nillable_annotations/e" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module nillable_annotations { + + +import from XSD all; + + +/* SomeComment */ + + +type record Abbreviated_dialing +{ + record { + record { + /* SomeComment */ + XSD.Integer content optional + } abbreviated_dialing_operator_configuration optional, + record { + /* SomeComment */ + XSD.Integer content optional + } abbreviated_dialing_user_configuration optional + } content optional +} +with { +variant "name as 'abbreviated-dialing'"; +variant "useNil"; +variant "element"; +variant (content.abbreviated_dialing_operator_configuration) "name as 'abbreviated-dialing-operator-configuration'"; +variant (content.abbreviated_dialing_operator_configuration) "useNil"; +variant (content.abbreviated_dialing_user_configuration) "name as 'abbreviated-dialing-user-configuration'"; +variant (content.abbreviated_dialing_user_configuration) "useNil"; +}; + + +} +with { +encode "XML"; +variant "namespace as 'nillable_annotations'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +variant "elementFormQualified"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/urn_ietf_params_xml_ns_conference_info_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/urn_ietf_params_xml_ns_conference_info_e.ttcn index 25f20917c..1de1f784a 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/urn_ietf_params_xml_ns_conference_info_e.ttcn +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/urn_ietf_params_xml_ns_conference_info_e.ttcn @@ -57,7 +57,7 @@ type record Conference_type XSD.UnsignedInt attr optional, XSD.AnyURI entity, State_type state optional, - record of XSD.String attr_1, + record of XSD.String attr_1 optional, Conference_description_type conference_description optional, Host_type host_info optional, Conference_state_type conference_state optional, @@ -72,8 +72,8 @@ variant (attr) "attribute"; variant (entity) "attribute"; variant (state) "defaultForEmpty as 'full'"; variant (state) "attribute"; -variant (attr_1) "name as 'attr'"; variant (attr_1) "anyAttributes except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; +variant (attr_1) "name as 'attr'"; variant (conference_description) "name as 'conference-description'"; variant (host_info) "name as 'host-info'"; variant (conference_state) "name as 'conference-state'"; @@ -103,7 +103,7 @@ variant "name as 'state-type'"; type record Conference_description_type { - record of XSD.String attr, + record of XSD.String attr optional, XSD.String display_text optional, XSD.String subject optional, XSD.String free_text optional, @@ -133,7 +133,7 @@ variant (elem_list[-]) "anyElement except unqualified, 'urn:ietf:params:xml:ns:c type record Host_type { - record of XSD.String attr, + record of XSD.String attr optional, XSD.String display_text optional, XSD.AnyURI web_page optional, Uris_type uris optional, @@ -154,7 +154,7 @@ variant (elem_list[-]) "anyElement except unqualified, 'urn:ietf:params:xml:ns:c type record Conference_state_type { - record of XSD.String attr, + record of XSD.String attr optional, XSD.UnsignedInt user_count optional, XSD.Boolean active optional, XSD.Boolean locked optional, @@ -164,6 +164,10 @@ with { variant "name as 'conference-state-type'"; variant (attr) "anyAttributes except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; variant (user_count) "name as 'user-count'"; +//variant (active) "text 'true' as '1'"; +//variant (active) "text 'false' as '0'"; +//variant (locked) "text 'true' as '1'"; +//variant (locked) "text 'false' as '0'"; variant (elem_list) "untagged"; variant (elem_list[-]) "anyElement except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; }; @@ -174,7 +178,7 @@ variant (elem_list[-]) "anyElement except unqualified, 'urn:ietf:params:xml:ns:c type record Conference_media_type { - record of XSD.String attr, + record of XSD.String attr optional, record length(1 .. infinity) of Conference_medium_type entry_list } with { @@ -191,7 +195,7 @@ variant (entry_list[-]) "name as 'entry'"; type record Conference_medium_type { XSD.String label_, - record of XSD.String attr, + record of XSD.String attr optional, XSD.String display_text optional, XSD.String type_, Media_status_type status optional, @@ -215,7 +219,7 @@ variant (elem_list[-]) "anyElement except unqualified, 'urn:ietf:params:xml:ns:c type record Uris_type { State_type state optional, - record of XSD.String attr, + record of XSD.String attr optional, record length(1 .. infinity) of Uri_type entry_list } with { @@ -233,7 +237,7 @@ variant (entry_list[-]) "name as 'entry'"; type record Uri_type { - record of XSD.String attr, + record of XSD.String attr optional, XSD.AnyURI uri, XSD.String display_text optional, XSD.String purpose optional, @@ -265,7 +269,7 @@ variant "list"; type record Users_type { State_type state optional, - record of XSD.String attr, + record of XSD.String attr optional, record of User_type user_list, record of XSD.String elem_list } @@ -288,7 +292,7 @@ type record User_type { XSD.AnyURI entity optional, State_type state optional, - record of XSD.String attr, + record of XSD.String attr optional, XSD.String display_text optional, Uris_type associated_aors optional, User_roles_type roles optional, @@ -318,7 +322,7 @@ variant (elem_list[-]) "anyElement except unqualified, 'urn:ietf:params:xml:ns:c type record User_roles_type { - record of XSD.String attr, + record of XSD.String attr optional, record length(1 .. infinity) of XSD.String entry_list } with { @@ -346,7 +350,7 @@ type record Endpoint_type { XSD.String entity optional, State_type state optional, - record of XSD.String attr, + record of XSD.String attr optional, XSD.String display_text optional, Execution_type referred optional, Endpoint_status_type status optional, @@ -438,7 +442,7 @@ variant "name as 'disconnection-type'"; type record Execution_type { - record of XSD.String attr, + record of XSD.String attr optional, XSD.DateTime when optional, XSD.String reason optional, XSD.AnyURI by optional @@ -454,7 +458,7 @@ variant (attr) "anyAttributes except unqualified, 'urn:ietf:params:xml:ns:confer type record Call_type { - record of XSD.String attr, + record of XSD.String attr optional, union { Sip_dialog_id_type sip, record of XSD.String elem_list @@ -474,7 +478,7 @@ variant (choice.elem_list[-]) "anyElement except unqualified, 'urn:ietf:params:x type record Sip_dialog_id_type { - record of XSD.String attr, + record of XSD.String attr optional, XSD.String display_text optional, XSD.String call_id, XSD.String from_tag, @@ -499,7 +503,7 @@ variant (elem_list[-]) "anyElement except unqualified, 'urn:ietf:params:xml:ns:c type record Media_type { XSD.String id, - record of XSD.String attr, + record of XSD.String attr optional, XSD.String display_text optional, XSD.String type_ optional, XSD.String label_ optional, @@ -541,7 +545,7 @@ variant "name as 'media-status-type'"; type record Sidebars_by_val_type { State_type state optional, - record of XSD.String attr, + record of XSD.String attr optional, record of Conference_type entry_list } with { diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_XmlTest_org_annotation_c_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_XmlTest_org_annotation_c_e.ttcn index 975cd5053..9ccfd41fa 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_XmlTest_org_annotation_c_e.ttcn +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_XmlTest_org_annotation_c_e.ttcn @@ -32,14 +32,13 @@ //------------------------------------------------------------------------------ //////////////////////////////////////////////////////////////////////////////// + module www_XmlTest_org_annotation_c_e { import from XSD all; - - type XSD.PositiveInteger MyInteger1 with { variant "element"; diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_XmlTest_org_annotation_t_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_XmlTest_org_annotation_t_e.ttcn index b3015030c..dd0b42517 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_XmlTest_org_annotation_t_e.ttcn +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_XmlTest_org_annotation_t_e.ttcn @@ -21,7 +21,7 @@ // Generated from file(s): // - XmlTest_annotation.xsd // /* xml version = "1.0" encoding = "UTF-8" */ -// /* targetnamespace = "www.XmlTest.org/annotation" */ +// /* targetnamespace = "www.XmlTest.org/annotation/e" */ //////////////////////////////////////////////////////////////////////////////// // Modification header(s): //----------------------------------------------------------------------------- diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_XmlTest_org_boolean_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_XmlTest_org_boolean_e.ttcn index e11add514..b532fe813 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_XmlTest_org_boolean_e.ttcn +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_XmlTest_org_boolean_e.ttcn @@ -49,9 +49,17 @@ import from XSD all; type XSD.Boolean Result; +//with { +//variant "text 'true' as '1'"; +//variant "text 'false' as '0'"; +//}; type XSD.Boolean Result1; +//with { +//variant "text 'true' as '1'"; +//variant "text 'false' as '0'"; +//}; } diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_XmlTest_org_complex_all_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_XmlTest_org_complex_all_e.ttcn index 97dc03fb4..c92140f55 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_XmlTest_org_complex_all_e.ttcn +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_XmlTest_org_complex_all_e.ttcn @@ -71,13 +71,29 @@ variant (chemistry) "name as capitalized"; type record MySubjects2 { + record of enumerated { + english, + math, + physics, + chemistry, + history + } order, XSD.GYear year optional, - Subject subject + XSD.String english, + XSD.String math, + XSD.String physics, + XSD.String chemistry, + XSD.String history } with { +variant "useOrder"; variant (year) "name as capitalized"; variant (year) "attribute"; -variant (subject) "name as capitalized"; +variant (english) "name as capitalized"; +variant (math) "name as capitalized"; +variant (physics) "name as capitalized"; +variant (chemistry) "name as capitalized"; +variant (history) "name as capitalized"; }; diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_XmlTest_org_complex_include2_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_XmlTest_org_complex_include2_e.ttcn index 4fc592532..546ca189f 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_XmlTest_org_complex_include2_e.ttcn +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_XmlTest_org_complex_include2_e.ttcn @@ -88,7 +88,7 @@ variant (part_list[-].base) "untagged"; } with { encode "XML"; -variant "namespace as 'www.XmlTest.org/complex_include2' prefix 'r'"; +variant "namespace as 'www.XmlTest.org/complex_include2' prefix 'r2'"; variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; variant "elementFormQualified"; } diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_XmlTest_org_element_recordOfElements_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_XmlTest_org_element_recordOfElements_e.ttcn index e4a33cbf2..41f0cf0b4 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_XmlTest_org_element_recordOfElements_e.ttcn +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_XmlTest_org_element_recordOfElements_e.ttcn @@ -19,7 +19,7 @@ // //////////////////////////////////////////////////////////////////////////////// // Generated from file(s): -// - XmlTest_element_recordOfElements.xsd +// - XmlTest_element_recordOfElements_e.xsd // /* xml version = "1.0" */ // /* targetnamespace = "www.XmlTest.org/element_recordOfElements" */ //////////////////////////////////////////////////////////////////////////////// diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_XmlTest_org_list_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_XmlTest_org_list_e.ttcn index 8e96abb3d..9524b1397 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_XmlTest_org_list_e.ttcn +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_XmlTest_org_list_e.ttcn @@ -178,6 +178,8 @@ variant "list"; type record of XSD.Boolean BooleanList with { variant "list"; +//variant "text 'true' as '1'"; +//variant "text 'false' as '0'"; }; diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_XmlTest_org_string_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_XmlTest_org_string_e.ttcn index e04cf6ef3..424592602 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_XmlTest_org_string_e.ttcn +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_XmlTest_org_string_e.ttcn @@ -97,7 +97,7 @@ variant "name as 'Longer-string'"; }; -type Longer_string Longer_stringChild length(5) +type XSD.String Longer_stringChild length(5) with { variant "name as 'Longer-stringChild'"; }; diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_XmlTest_org_union_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_XmlTest_org_union_e.ttcn index 0030f4d09..8ab1aef43 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_XmlTest_org_union_e.ttcn +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_XmlTest_org_union_e.ttcn @@ -55,6 +55,8 @@ with { variant "useUnion"; variant (float_) "name as 'float'"; variant (boolean_) "name as 'boolean'"; +//variant (boolean_) "text 'true' as '1'"; +//variant (boolean_) "text 'false' as '0'"; }; @@ -66,6 +68,8 @@ type union MyUnion2 with { variant "useUnion"; variant (boolean_) "name as 'boolean'"; +//variant (boolean_) "text 'true' as '1'"; +//variant (boolean_) "text 'false' as '0'"; }; @@ -81,11 +85,17 @@ type union MyUnion3 with { variant "useUnion"; variant (boolean_) "name as 'boolean'"; +//variant (boolean_) "text 'true' as '1'"; +//variant (boolean_) "text 'false' as '0'"; variant (float_) "name as 'float'"; }; type XSD.Boolean Result; +//with { +//variant "text 'true' as '1'"; +//variant "text 'false' as '0'"; +//}; type MyUnion1 MyUnion4 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_all_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_all_e.ttcn new file mode 100644 index 000000000..05f58b1bc --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_all_e.ttcn @@ -0,0 +1,175 @@ +/******************************************************************************* +* Copyright (c) 2000-2015 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/5 R2A +* +* 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 +*******************************************************************************/ +// +// File: www_example_org_all_e.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Mon Oct 12 12:27:05 2014 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - all.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "www.example.org/all/e" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module www_example_org_all { + + +import from XSD all; + + +type XSD.Token AttrGlobal +with { +variant "name as uncapitalized"; +variant "attribute"; +}; + + +/* All, mandatory */ + + +type record E29a +{ + record of enumerated { + foo, + bar, + ding + } order, + XSD.Integer foo, + XSD.Float bar, + XSD.String ding +} +with { +variant "name as uncapitalized"; +variant "useOrder"; +}; + + +type record E29aAndAttributes +{ + record of enumerated { + foo, + bar, + ding + } order, + AttrGlobal attrGlobal optional, + XSD.Token attrInGroup1 optional, + XSD.Token attrInGroup2 optional, + XSD.Integer attrLocal optional, + XSD.Integer foo, + XSD.Float bar, + XSD.String ding +} +with { +variant "name as uncapitalized"; +variant "useOrder"; +variant (attrGlobal) "attribute"; +variant (attrInGroup1) "attribute"; +variant (attrInGroup2) "attribute"; +variant (attrLocal) "attribute"; +}; + + +/* All, optional */ + + +type record E29bAndAttributes +{ + record of enumerated { + foo, + bar, + ding + } order, + AttrGlobal attrGlobal optional, + XSD.Token attrInGroup1 optional, + XSD.Token attrInGroup2 optional, + XSD.Integer attrLocal optional, + XSD.Integer foo optional, + XSD.Float bar optional, + XSD.String ding optional +} +with { +variant "name as uncapitalized"; +variant "useOrder"; +variant (attrGlobal) "attribute"; +variant (attrInGroup1) "attribute"; +variant (attrInGroup2) "attribute"; +variant (attrLocal) "attribute"; +}; + + +/* All, some elements are optional */ + + +type record E29cAndAttributes +{ + record of enumerated { + foo, + bar, + ding + } order, + AttrGlobal attrGlobal optional, + XSD.Token attrInGroup1 optional, + XSD.Token attrInGroup2 optional, + XSD.Integer attrLocal optional, + XSD.Integer foo, + XSD.Float bar optional, + XSD.String ding +} +with { +variant "name as uncapitalized"; +variant "useOrder"; +variant (attrGlobal) "attribute"; +variant (attrInGroup1) "attribute"; +variant (attrInGroup2) "attribute"; +variant (attrLocal) "attribute"; +}; + + +type record E29cAndAttributesReferenceOptional +{ + record of enumerated { + foo, + bar, + ding + } order, + XSD.String attr optional, + XSD.Integer foo optional, + XSD.Float bar optional, + XSD.String ding optional +} +with { +variant "name as uncapitalized"; +variant "useOrder"; +variant "element"; +variant (attr) "attribute"; +}; + + +} +with { +encode "XML"; +variant "namespace as 'www.example.org/all' prefix 'this'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_anyattr_in_complex_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_anyattr_in_complex_e.ttcn new file mode 100644 index 000000000..6de7ecf85 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_anyattr_in_complex_e.ttcn @@ -0,0 +1,63 @@ +/******************************************************************************* +* Copyright Ericsson Telecom AB 2014 +* +* XSD to TTCN-3 Translator version: CRL 113 200/5 R2A +* +* 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 +*******************************************************************************/ +// +// File: www_example_org_anyattr_in_complex_e.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Wed Oct 28 13:30:35 2014 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - anyattr_in_compex_e.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "www.example.org/anyattr/in/complex/e" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module www_example_org_anyattr_in_complex { + + +import from XSD all; + + +type record DependentLocalityType +{ + record of record { + record of XSD.String attr optional + } dependentLocalityName_list, + record { + } dependentLocalityNumber optional +} +with { +variant (dependentLocalityName_list) "untagged"; +variant (dependentLocalityName_list[-]) "name as 'DependentLocalityName'"; +variant (dependentLocalityName_list[-].attr) "anyAttributes except unqualified, 'www.example.org/anyattr/in/complex'"; +variant (dependentLocalityNumber) "name as capitalized"; +}; + + +} +with { +encode "XML"; +variant "namespace as 'www.example.org/anyattr/in/complex' prefix 'this'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_anyattrib_single_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_anyattrib_single_e.ttcn new file mode 100644 index 000000000..a6287c127 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_anyattrib_single_e.ttcn @@ -0,0 +1,132 @@ +/******************************************************************************* +* Copyright (c) 2000-2015 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/5 R31 +* +* 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 +*******************************************************************************/ +// +// File: www_example_org_anyattrib_single_e.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Fri Aug 28 10:17:20 2013 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - anyattrib_single.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "www.example.org/anyattrib/single" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module www_example_org_anyattrib_single_e { + + +import from XSD all; + + +type record E25seq +{ + XSD.Token attrInGroup1 optional, + XSD.Token attrInGroup2 optional, + record of XSD.String attr optional, + XSD.String titleElemBase, + XSD.String forenameElemBase, + XSD.String surnameElemBase +} +with { +variant "name as uncapitalized"; +variant (attrInGroup1) "attribute"; +variant (attrInGroup2) "attribute"; +variant (attr) "anyAttributes from 'http://www.w3.org/1999/xhtml','www.example.org/anyattrib/single','www.example.org/anyattrib/single'"; +}; + + +type record E45c +{ + record of XSD.String attr optional +} +with { +variant "name as uncapitalized"; +variant "element"; +variant (attr) "anyAttributes from unqualified,'http://www.example.org/attribute'"; +}; + + +type record E45d +{ + record of XSD.String attr optional +} +with { +variant "name as uncapitalized"; +variant "element"; +variant (attr) "anyAttributes from 'www.example.org/anyattrib/single',unqualified,'http://www.example.org/attribute'"; +}; + + +type record ExtBase +{ + record of XSD.String attr optional, + XSD.String field +} +with { +variant (attr) "anyAttributes from 'www.example.org/anyattrib/single'"; +}; + + +type record MyType +{ + XSD.String ding optional, + record of XSD.String attr optional, + XSD.String field +} +with { +variant "element"; +variant (ding) "attribute"; +variant (attr) "anyAttributes from 'www.example.org/anyattrib/single'"; +}; + + +type record ExtBase2 +{ + record of XSD.String attr optional, + XSD.String field +} +with { +variant (attr) "anyAttributes except unqualified, 'www.example.org/anyattrib/single'"; +}; + + +type record MyType2 +{ + XSD.String ding optional, + record of XSD.String attr optional, + XSD.String field +} +with { +variant "element"; +variant (ding) "attribute"; +variant (attr) "anyAttributes from 'www.example.org/anyattrib/single',unqualified, 'www.example.org/anyattrib/single'"; +}; + + +} +with { +encode "XML"; +variant "namespace as 'www.example.org/anyattrib/single' prefix 'this'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_attr_ext_rest_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_attr_ext_rest_e.ttcn new file mode 100644 index 000000000..52008eca6 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_attr_ext_rest_e.ttcn @@ -0,0 +1,220 @@ +/******************************************************************************* +* Copyright (c) 2000-2015 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 110 200/0 R3A +* +* 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 +*******************************************************************************/ +// +// File: www_example_org_attr_ext_rest.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Fri Aug 26 09:42:11 2011 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - attrib_restriction_extension_e.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "www.example.org/attr/ext/rest" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module www_example_org_attr_ext_rest_e { + + +import from XSD all; + + +type record E25seq +{ + XSD.Integer genderAttrBase optional, + XSD.String titleElemBase, + XSD.String forenameElemBase, + XSD.String surnameElemBase +} +with { +variant "name as uncapitalized"; +variant (genderAttrBase) "attribute"; +}; + + +type record E25seqa +{ + XSD.Integer gender optional, + XSD.Integer genderAttrBase optional, + XSD.String titleElemBase, + XSD.String forenameElemBase, + XSD.String surnameElemBase +} +with { +variant "name as uncapitalized"; +variant (gender) "attribute"; +variant (genderAttrBase) "attribute"; +}; + + +type record E25seqb +{ + XSD.Integer gender optional, + XSD.Integer genderAttrBase optional, + XSD.String titleElemBase, + XSD.String forenameElemBase, + XSD.String surnameElemBase, + XSD.Integer ageElemExt +} +with { +variant "name as uncapitalized"; +variant (gender) "attribute"; +variant (genderAttrBase) "attribute"; +}; + + +type record E25seqc +{ + XSD.Integer gender optional, + XSD.Integer ageElemExt +} +with { +variant "name as uncapitalized"; +variant (gender) "attribute"; +}; + + +type record E25seqd +{ + XSD.Integer gender optional, + XSD.Integer genderAttrBase, + XSD.Integer ageElemExt +} +with { +variant "name as uncapitalized"; +variant (gender) "attribute"; +variant (genderAttrBase) "attribute"; +}; + + +type XSD.String Comment +with { +variant "name as uncapitalized"; +variant "element"; +}; + + +type record PurchaseOrderType +{ + XSD.Date orderDate optional, + XSD.Date shipDate optional, + XSD.String shipTo, + XSD.String billTo, + Comment comment optional +} +with { +variant (orderDate) "attribute"; +variant (shipDate) "attribute"; +}; + + +/* The restricting type is: */ + + +type record RestrictedPurchaseOrderType +{ + XSD.Date shipDate, + XSD.String shipTo, + Comment comment +} +with { +variant (shipDate) "attribute"; +}; + + +type record E23 +{ + XSD.Integer bar optional, + XSD.Integer base optional, + XSD.Float foo optional, + XSD.String base_1 +} +with { +variant "name as uncapitalized"; +variant "element"; +variant (bar) "attribute"; +variant (base) "attribute"; +variant (foo) "attribute"; +variant (base_1) "name as 'base'"; +variant (base_1) "untagged"; +}; + + +type record E24 +{ + XSD.Integer bar optional, + XSD.Integer base optional, + XSD.Float foo optional, + XSD.Integer goo optional, + XSD.String base_1 +} +with { +variant "name as uncapitalized"; +variant "element"; +variant (bar) "attribute"; +variant (base) "attribute"; +variant (foo) "attribute"; +variant (goo) "attribute"; +variant (base_1) "name as 'base'"; +variant (base_1) "untagged"; +}; + + +type record E25 +{ + XSD.Integer bar optional, + XSD.Integer goo, + XSD.String base length(4) +} +with { +variant "name as uncapitalized"; +variant "element"; +variant (bar) "attribute"; +variant (goo) "attribute"; +variant (base) "untagged"; +}; + + +type record E26 +{ + XSD.Integer bar optional, + XSD.Float foo, + XSD.Integer goo, + XSD.String base length(4) +} +with { +variant "name as uncapitalized"; +variant "element"; +variant (bar) "attribute"; +variant (foo) "attribute"; +variant (goo) "attribute"; +variant (base) "untagged"; +}; + + +} +with { +encode "XML"; +variant "namespace as 'www.example.org/attr/ext/rest' prefix 'nss'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_attrib_enum_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_attrib_enum_e.ttcn new file mode 100644 index 000000000..96f71e997 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_attrib_enum_e.ttcn @@ -0,0 +1,59 @@ +/******************************************************************************* +* Copyright Ericsson Telecom AB 2014 +* +* XSD to TTCN-3 Translator version: CRL 113 200/5 R2A +* +* 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 +*******************************************************************************/ +// +// File: www_example_org_attrib_enum_e.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Wed Oct 28 13:49:38 2015 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - attrib_enum_e.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "www.example.org/attrib/enum/e" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module www_example_org_attrib_enum { + + +import from XSD all; + + +type record AttribEnum +{ + enumerated { + first, + second + } attr optional +} +with { +variant (attr) "attribute"; +}; + + +} +with { +encode "XML"; +variant "namespace as 'www.example.org/attrib/enum' prefix 'this'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_attrib_order_a_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_attrib_order_a_e.ttcn new file mode 100644 index 000000000..0bd3ad2ff --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_attrib_order_a_e.ttcn @@ -0,0 +1,115 @@ +/******************************************************************************* +* Copyright (c) 2000-2015 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/7 R3b +* +* 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 +*******************************************************************************/ +// +// File: www_example_org_attrib_order_a_e.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Fri Aug 28 12:53:34 2015 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - attrib_order_a.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "www.example.org/attrib/order/a" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module www_example_org_attrib_order_a_e { + + +import from XSD all; + + +import from www_example_org_attrib_order_b all; + + +import from NoTargetNamespace all; + + +type XSD.String Local1 ("fixed") +with { +variant "name as uncapitalized"; +variant "defaultForEmpty as 'fixed'"; +variant "attribute"; +}; + + +type XSD.String Local2 +with { +variant "name as uncapitalized"; +variant "attribute"; +}; + + +type record E17A +{ + AttrNoTargetNamespace attrNoTargetNamespace optional, + AttrNoTargetNamespace2 attrNoTargetNamespace2 optional, + Lang lang optional, + Local1 local1 optional, + Local2 local2 optional, + Attr1 attr1 optional, + XSD.Float barInAgroup optional, + XSD.Float fooInAgroup optional +} +with { +variant "name as uncapitalized"; +variant (attrNoTargetNamespace) "name as capitalized"; +variant (attrNoTargetNamespace) "attribute"; +variant (attrNoTargetNamespace2) "name as capitalized"; +variant (attrNoTargetNamespace2) "attribute"; +variant (lang) "attribute"; +variant (local1) "attribute"; +variant (local2) "attribute"; +variant (attr1) "name as capitalized"; +variant (attr1) "namespace as 'www.example.org/attrib/order/b' prefix 'A'"; +variant (attr1) "attribute"; +variant (barInAgroup) "namespace as 'www.example.org/attrib/order/b' prefix 'A'"; +variant (barInAgroup) "attribute"; +variant (fooInAgroup) "namespace as 'www.example.org/attrib/order/b' prefix 'A'"; +variant (fooInAgroup) "attribute"; +}; + + +type union Lang +{ + XSD.Language language_, + enumerated { + x + } alt_ +} +with { +variant "name as uncapitalized"; +variant "useUnion"; +variant "attribute"; +variant (language_) "name as 'language'"; +variant (alt_) "name as ''"; +variant (alt_) "text 'x' as ''"; +}; + + +} +with { +encode "XML"; +variant "namespace as 'www.example.org/attrib/order/a' prefix 'this'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_attrib_order_b_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_attrib_order_b_e.ttcn new file mode 100644 index 000000000..478671b81 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_attrib_order_b_e.ttcn @@ -0,0 +1,53 @@ +/******************************************************************************* +* Copyright Ericsson Telecom AB 2014 +* +* XSD to TTCN-3 Translator version: CRL 113 200/5 R2A +* +* 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 +*******************************************************************************/ +// +// File: www_example_org_attrib_order_b.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Wed Oct 28 12:57:20 2014 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - attrib_order_b_e.xsd +// /* xml version = "1.0" */ +// /* targetnamespace = "www.example.org/attrib/order/b/e" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module www_example_org_attrib_order_b { + + +import from XSD all; + + +type XSD.String Attr1 +with { +variant "attribute"; +}; + + +} +with { +encode "XML"; +variant "namespace as 'www.example.org/attrib/order/b' prefix 'A'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_attribgroup_ingroup_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_attribgroup_ingroup_e.ttcn new file mode 100644 index 000000000..cf43d72ac --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_attribgroup_ingroup_e.ttcn @@ -0,0 +1,68 @@ +/******************************************************************************* +* Copyright Ericsson Telecom AB 2014 +* +* XSD to TTCN-3 Translator version: CRL 113 200/5 R2A +* +* 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 +*******************************************************************************/ +// +// File: www_example_org_attribgroup_ingroup_e.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Wed Oct 28 13:37:14 2014 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - attribgroup_ingroup_e.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "www.example.org/attribgroup/ingroup/e" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module www_example_org_attribgroup_ingroup { + + +import from XSD all; + + +type record AttrGroupinGroup +{ + RemoteSchema remoteSchema optional, + XSD.String type_ ("simple") optional +} +with { +variant (remoteSchema) "attribute"; +variant (type_) "form as qualified"; +variant (type_) "name as 'type'"; +variant (type_) "defaultForEmpty as 'simple'"; +variant (type_) "attribute"; +}; + + +type XSD.AnyURI RemoteSchema +with { +variant "name as uncapitalized"; +variant "attribute"; +}; + + +} +with { +encode "XML"; +variant "namespace as 'www.example.org/attribgroup/ingroup' prefix 'this'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_boolean_variant_commented_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_boolean_variant_commented_e.ttcn new file mode 100644 index 000000000..5a10da229 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_boolean_variant_commented_e.ttcn @@ -0,0 +1,131 @@ +/******************************************************************************* +* Copyright Ericsson Telecom AB 2011 +* +* XSD to TTCN-3 Translator version: CRL 113 200/4 R3A +* +* 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 +*******************************************************************************/ +// +// File: www_example_org_boolean_variant_commented_e.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Tue Jul 7 11:01:43 2014 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - boolean_variant_commented.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "www.example.org/boolean/variant/commented/e" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module www_example_org_boolean_variant_commented { + + +import from XSD all; + + +type XSD.Boolean CelsiusBodyTemp +with { +variant "name as uncapitalized"; +//variant "text 'true' as '1'"; +//variant "text 'false' as '0'"; +}; + + +type XSD.Boolean BooleanElement +with { +variant "name as uncapitalized"; +variant "element"; +//variant "text 'true' as '1'"; +//variant "text 'false' as '0'"; +}; + + +type XSD.Boolean BooleanSimple; +//with { +//variant "text 'true' as '1'"; +//variant "text 'false' as '0'"; +//}; + + +type union Union_with_boolean +{ + XSD.String alt_, + XSD.Boolean alt_1, + XSD.Integer alt_2 +} +with { +variant "name as uncapitalized"; +variant "useUnion"; +variant "element"; +variant (alt_) "name as ''"; +variant (alt_1) "name as ''"; +//variant (alt_1) "text 'true' as '1'"; +//variant (alt_1) "text 'false' as '0'"; +variant (alt_2) "name as ''"; +}; + + +type record Seq_with_boolean +{ + XSD.Boolean stupid optional, + XSD.String titleElemBase, + XSD.String forenameElemBase, + XSD.Boolean smart +} +with { +variant "name as uncapitalized"; +variant (stupid) "attribute"; +//variant (stupid) "text 'true' as '1'"; +//variant (stupid) "text 'false' as '0'"; +//variant (smart) "text 'true' as '1'"; +//variant (smart) "text 'false' as '0'"; +}; + + +type record E15b +{ + record of XSD.Boolean foo_list, + XSD.Float bar +} +with { +variant "name as uncapitalized"; +variant (foo_list) "untagged"; +variant (foo_list[-]) "name as 'foo'"; +//variant (foo_list[-]) "text 'true' as '1'"; +//variant (foo_list[-]) "text 'false' as '0'"; +}; + + +type record E15b_2 +{ + XSD.Boolean foo, + XSD.Float bar +}; +//with { +//variant (foo) "text 'true' as '1'"; +//variant (foo) "text 'false' as '0'"; +//}; + + +} +with { +encode "XML"; +variant "namespace as 'www.example.org/boolean/variant/commented'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_comment_placement_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_comment_placement_e.ttcn new file mode 100644 index 000000000..ba8b83766 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_comment_placement_e.ttcn @@ -0,0 +1,95 @@ +/******************************************************************************* +* Copyright (c) 2000-2015 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/4 R3A +* +* 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 +*******************************************************************************/ +// +// File: www_example_org_comment_placement_e.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Thu Aug 6 13:44:05 2015 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - comment_placement.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "www.example.org/comment/placement/e" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module www_example_org_comment_placement { + + +import from XSD all; + + +/* SomeCommentyyy */ +type union E21unnamed +{ + /* SomeCommentyyy */ + XSD.String alt_, + /* SomeCommentss */ + XSD.Float alt_1, + XSD.Integer alt_2 +} +with { +variant "name as uncapitalized"; +variant "useUnion"; +variant "element"; +variant (alt_) "name as ''"; +variant (alt_1) "name as ''"; +variant (alt_2) "name as ''"; +}; + + +/* SomeCommentss */ +type record E39 +{ + union { + /* SomeCommentss */ + XSD.String foo, + /* SomeCommentss */ + XSD.String bar + } choice, + /* SomeCommentss */ + XSD.String ding +} +with { +variant "name as uncapitalized"; +variant (choice) "untagged"; +}; + + +/* SomeComment */ +/* SomeComment2 */ + + +/* SomeComment */ +type XSD.Integer Int +with { +variant "element"; +}; + + +} +with { +encode "XML"; +variant "namespace as 'www.example.org/comment/placement'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_complex_nillable_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_complex_nillable_e.ttcn new file mode 100644 index 000000000..23f6f94eb --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_complex_nillable_e.ttcn @@ -0,0 +1,146 @@ +/******************************************************************************* +* Copyright (c) 2000-2015 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/4 R3A +* +* 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 +*******************************************************************************/ +// +// File: www_example_org_complex_nillable.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Thu Aug 1 13:47:14 2014 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - complex_nillable.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "www.example.org/complex/nillable/e" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module www_example_org_complex_nillable_e { + + +import from XSD all; + + +/* media is a multiple value parameter */ +type record Conditions_type +{ + record { + record { + /* no nilling at the level of identity - use nilling on fcd-caller-identity to remove */ + union { + XSD.String anonymous, + XSD.String identity + } choice + } content optional + } caller_identity optional, + record of record { + XSD.String content optional + } media_list, + record of record { + XSD.String content optional + } status_list, + record { + XSD.String content optional + } identity optional, + record of record { + XSD.String content optional + } request_list +} +with { +variant "name as 'conditions-type'"; +variant (caller_identity) "name as 'caller-identity'"; +variant (caller_identity) "useNil"; +variant (caller_identity.content.choice) "untagged"; +variant (media_list) "untagged"; +variant (media_list[-]) "name as 'media'"; +variant (media_list[-]) "useNil"; +variant (status_list) "untagged"; +variant (status_list[-]) "name as 'status'"; +variant (status_list[-]) "useNil"; +variant (identity) "useNil"; +variant (request_list) "untagged"; +variant (request_list[-]) "name as 'request'"; +variant (request_list[-]) "useNil"; +}; + + +type record Anything_nil +{ + record { + } content optional +} +with { +variant "name as 'anything-nil'"; +variant "useNil"; +variant "element"; +}; + + +type record Anything_nil2 +{ + XSD.AnyType content optional +} +with { +variant "name as 'anything-nil2'"; +variant "useNil"; +variant "element"; +}; + + +type record Common +{ + record length(0 .. 5) of record { + XSD.Integer bar optional, + XSD.String foo length(7) optional, + XSD.Integer goo optional, + record of XSD.String attr optional, + record { + record { + XSD.String content optional + } forename, + record { + XSD.String content optional + } surname, + XSD.String livingAddress + } content optional + } integration_list +} +with { +variant "name as uncapitalized"; +variant "element"; +variant (integration_list) "untagged"; +variant (integration_list[-]) "name as 'integration'"; +variant (integration_list[-]) "useNil"; +variant (integration_list[-].bar) "attribute"; +variant (integration_list[-].foo) "attribute"; +variant (integration_list[-].goo) "attribute"; +variant (integration_list[-].attr) "anyAttributes from 'www.example.org/complex/nillable'"; +variant (integration_list[-].content.forename) "useNil"; +variant (integration_list[-].content.surname) "useNil"; +}; + + +} +with { +encode "XML"; +variant "namespace as 'www.example.org/complex/nillable'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_decimal_fractiondigits_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_decimal_fractiondigits_e.ttcn new file mode 100644 index 000000000..6e69091db --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_decimal_fractiondigits_e.ttcn @@ -0,0 +1,69 @@ +/******************************************************************************* +* Copyright (c) 2000-2015 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/4 R3A +* +* 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 +*******************************************************************************/ +// +// File: www_example_org_decimal_fractiondigits_e.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Mon Jul 3 10:21:10 2011 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - decimal_fractiondigits.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "www.example.org/decimal/fractiondigits/e" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module www_example_org_decimal_fractiondigits { + + +import from XSD all; + + +type XSD.Decimal CelsiusBodyTemp (-9999.0 .. 9999.0) +with { +variant "name as uncapitalized"; +}; + + +type union Union_with_fraction +{ + XSD.Decimal alt_ (-9999.0 .. 9999.0), + XSD.Float alt_1, + XSD.Integer alt_2 +} +with { +variant "name as uncapitalized"; +variant "useUnion"; +variant "element"; +variant (alt_) "name as ''"; +variant (alt_1) "name as ''"; +variant (alt_2) "name as ''"; +}; + + +} +with { +encode "XML"; +variant "namespace as 'www.example.org/decimal/fractiondigits'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_dont_generate_element_substitution_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_dont_generate_element_substitution_e.ttcn new file mode 100644 index 000000000..aa818f4f1 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_dont_generate_element_substitution_e.ttcn @@ -0,0 +1,98 @@ +/******************************************************************************* +* Copyright (c) 2000-2015 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/5 R2A +* +* 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 +*******************************************************************************/ +// +// File: www_example_org_dont_generate_element_substitution_e.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Mon Oct 19 09:38:13 2014 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - dont_generate_element_substitution_e.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "www.example.org/dont/generate/element/substitution/e" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module www_example_org_dont_generate_element_substitution { + + +import from XSD all; + + +type XSD.String Head +with { +variant "name as uncapitalized"; +variant "element"; +}; + + +type record ComplexEnum +{ + XSD.Integer bar optional, + XSD.Float foo optional, + XSD.String base +} +with { +variant "name as uncapitalized"; +variant "element"; +variant (bar) "attribute"; +variant (foo) "attribute"; +variant (base) "untagged"; +}; + + +type record Member2 +{ + XSD.Integer bar optional, + XSD.Float foo optional, + XSD.String unitOfAge optional, + XSD.String base +} +with { +variant "name as uncapitalized"; +variant "element"; +variant (bar) "attribute"; +variant (foo) "attribute"; +variant (unitOfAge) "attribute"; +variant (base) "untagged"; +}; + + +type record Ize +{ + record of Head head_list +} +with { +variant "name as uncapitalized"; +variant "element"; +variant (head_list) "untagged"; +variant (head_list[-]) "name as 'head'"; +}; + + +} +with { +encode "XML"; +variant "namespace as 'www.example.org/dont/generate/element/substitution' prefix 'this'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_enum_field_names_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_enum_field_names_e.ttcn new file mode 100644 index 000000000..ae46f3797 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_enum_field_names_e.ttcn @@ -0,0 +1,61 @@ +/******************************************************************************* +* Copyright (c) 2000-2015 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/4 R3A +* +* 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 +*******************************************************************************/ +// +// File: www_example_org_enum_field_names_e.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Tue Jun 16 10:26:12 2014 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - enum_field_names.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "www.example.org/enum/field/names/e" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module www_example_org_enum_field_names { + + +import from XSD all; + + +type enumerated State +{ + off, + off_1, + on_ +} +with { +variant "text 'off' as capitalized"; +variant "text 'off_1' as 'off'"; +variant "text 'on_' as 'on'"; +variant "name as uncapitalized"; +}; + + +} +with { +encode "XML"; +variant "namespace as 'www.example.org/enum/field/names'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_enumeration_remove_dup_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_enumeration_remove_dup_e.ttcn new file mode 100644 index 000000000..849806af6 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_enumeration_remove_dup_e.ttcn @@ -0,0 +1,123 @@ +/******************************************************************************* +* Copyright (c) 2000-2015 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/4 R3A +* +* 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 +*******************************************************************************/ +// +// File: www_example_org_enumeration_remove_dup_e.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Thu Sep 10 10:11:22 2014 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - enumeration_remove_dup.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "www.example.org/enumeration/remove/dup" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module www_example_org_enumeration_remove_dup_e { + + +import from XSD all; + + +type enumerated State +{ + i, + off, + onn, + x0, + x1, + x2, + x3, + x7 +} +with { +variant "text 'x0' as '0'"; +variant "text 'x1' as '1'"; +variant "text 'x2' as '2'"; +variant "text 'x3' as '3'"; +variant "text 'x7' as '7'"; +variant "name as uncapitalized"; +}; + + +type enumerated State2 +{ + int0(0), + int1(1), + int2(2), + int3(3), + int7(7) +} +with { +variant "useNumber"; +variant "name as uncapitalized"; +}; + + +type enumerated State3 +{ + int7(7) +} +with { +variant "useNumber"; +variant "name as uncapitalized"; +}; + + +type enumerated State4 +{ + int7(7) +} +with { +variant "useNumber"; +variant "name as uncapitalized"; +}; + + +type record State5 +{ + enumerated { + unknown, + controlpart, + testcase_, + altstep_, + function_, + external_function, + template_ + } ent_type +} +with { +variant "name as uncapitalized"; +variant (ent_type) "text 'altstep_' as 'altstep'"; +variant (ent_type) "text 'function_' as 'function'"; +variant (ent_type) "text 'template_' as 'template'"; +variant (ent_type) "text 'testcase_' as 'testcase'"; +}; + + +} +with { +encode "XML"; +variant "namespace as 'www.example.org/enumeration/remove/dup'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_enumeration_restriction_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_enumeration_restriction_e.ttcn new file mode 100644 index 000000000..5a9352094 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_enumeration_restriction_e.ttcn @@ -0,0 +1,157 @@ +/******************************************************************************* +* Copyright (c) 2000-2015 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/4 R3A +* +* 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 +*******************************************************************************/ +// +// File: www_example_org_enumeration_restriction_e.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Mon Jun 29 12:26:00 2014 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - enumeration_restriction.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "www.example.org/enumeration/restriction/e" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module www_example_org_enumeration_restriction { + + +import from XSD all; + + +type union E21unnamed +{ + XSD.Integer alt_, + XSD.Float alt_1, + XSD.String alt_2 +} +with { +variant "name as uncapitalized"; +variant "useUnion"; +variant "element"; +variant (alt_) "name as ''"; +variant (alt_1) "name as ''"; +variant (alt_2) "name as ''"; +}; + + +type E21unnamed E22 ( + {alt_1:=20.400000}, + {alt_2:="small"}, + {alt_:=50} +) +with { +variant "name as uncapitalized"; +}; + + +type union String_int +{ + XSD.String alt_, + XSD.Integer alt_1 +} +with { +variant "useUnion"; +variant "element"; +variant (alt_) "name as ''"; +variant (alt_1) "name as ''"; +}; + + +type String_int Everything_is_string ( + {alt_:="20.4"}, + {alt_:="50"}, + {alt_:="small"} +); + + +type union Mixed_Types +{ + XSD.GDay alt_, + XSD.GYear alt_1, + XSD.GMonth alt_2, + XSD.Float alt_3, + XSD.Date alt_4, + XSD.Time alt_5, + XSD.DateTime alt_6, + XSD.GMonthDay alt_7, + XSD.Duration alt_8, + XSD.GYearMonth alt_9, + XSD.String alt_10 +} +with { +variant "useUnion"; +variant "element"; +variant (alt_) "name as ''"; +variant (alt_1) "name as ''"; +variant (alt_2) "name as ''"; +variant (alt_3) "name as ''"; +variant (alt_4) "name as ''"; +variant (alt_5) "name as ''"; +variant (alt_6) "name as ''"; +variant (alt_7) "name as ''"; +variant (alt_8) "name as ''"; +variant (alt_9) "name as ''"; +variant (alt_10) "name as ''"; +}; + + +type Mixed_Types Mixed_Enum ( + {alt_10:="small"}, + {alt_10:="somestring"}, + {alt_1:="0085"}, + {alt_2:="--05"}, + {alt_3:=20.400000}, + {alt_3:=3.140000}, + {alt_4:="2014-01-01"}, + {alt_5:="05:05:00"}, + {alt_6:="2013-11-23T17:45:56"}, + {alt_7:="--01-03"}, + {alt_8:="P5Y2M10DT15H"}, + {alt_9:="1999-08"}, + {alt_:="---30"} +); + + +type union Only_int +{ + XSD.Integer alt_ +} +with { +variant "useUnion"; +variant "element"; +variant (alt_) "name as ''"; +}; + + +type Only_int Ints ( + {alt_:=14} +); + + +} +with { +encode "XML"; +variant "namespace as 'www.example.org/enumeration/restriction' prefix 'this'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_fixed_value_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_fixed_value_e.ttcn new file mode 100644 index 000000000..b42e50ff8 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_fixed_value_e.ttcn @@ -0,0 +1,161 @@ +/******************************************************************************* +* Copyright (c) 2000-2015 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/5 R1A +* +* 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 +*******************************************************************************/ +// +// File: www_example_org_fixed_value_e.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Mon Sep 7 12:19:26 2011 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - a.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "www.example.org/fixed/value" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module www_example_org_fixed_value { + + +import from XSD all; + + +type XSD.String StringType ("a") +with { +variant "defaultForEmpty as 'a'"; +variant "element"; +}; + + +type XSD.Integer IntegerType (7) +with { +variant "defaultForEmpty as '7'"; +variant "element"; +}; + + +type XSD.Float FloatType (7.0) +with { +variant "defaultForEmpty as '7.0'"; +variant "element"; +}; + + +type XSD.Double DoubleType (7.0) +with { +variant "defaultForEmpty as '7.0'"; +variant "element"; +}; + + +type XSD.Boolean BooleanType (true) +with { +variant "defaultForEmpty as 'true'"; +variant "element"; +//variant "text 'true' as '1'"; +//variant "text 'false' as '0'"; +}; + + +type XSD.Boolean BooleanType2 (false) +with { +variant "defaultForEmpty as '0'"; +variant "element"; +//variant "text 'true' as '1'"; +//variant "text 'false' as '0'"; +}; + + +type XSD.Date DateType ("2011-11-11") +with { +variant "defaultForEmpty as '2011-11-11'"; +variant "element"; +}; + + +type XSD.Time TimeType ("11:11:11") +with { +variant "defaultForEmpty as '11:11:11'"; +variant "element"; +}; + + +type XSD.DateTime DateTimeType ("2002-05-30T09:00:00") +with { +variant "defaultForEmpty as '2002-05-30T09:00:00'"; +variant "element"; +}; + + +type XSD.GDay DayType ("---13") +with { +variant "defaultForEmpty as '---13'"; +variant "element"; +}; + + +type XSD.GMonth MonthType ("--11") +with { +variant "defaultForEmpty as '--11'"; +variant "element"; +}; + + +type XSD.GMonthDay MonthDayType ("--11-30") +with { +variant "defaultForEmpty as '--11-30'"; +variant "element"; +}; + + +type XSD.GYear YearType ("1999") +with { +variant "defaultForEmpty as '1999'"; +variant "element"; +}; + + +type XSD.GYearMonth YearMonthType ("1999-11") +with { +variant "defaultForEmpty as '1999-11'"; +variant "element"; +}; + + +type XSD.HexBinary HexType +with { +variant "element"; +}; + + +type XSD.Base64Binary Base64Type +with { +variant "element"; +}; + + +} +with { +encode "XML"; +variant "namespace as 'www.example.org/fixed/value'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_generate_element_substitution_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_generate_element_substitution_e.ttcn new file mode 100644 index 000000000..7903decab --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_generate_element_substitution_e.ttcn @@ -0,0 +1,102 @@ +/******************************************************************************* +* Copyright (c) 2000-2015 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/5 R2A +* +* 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 +*******************************************************************************/ +// +// File: www_example_org_generate_element_substitution_e.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Mon Oct 19 09:34:07 2014 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - generate_element_substitution_e.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "www.example.org/generate/element/substitution/e" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module www_example_org_generate_element_substitution { + + +import from XSD all; + + +type record ComplexEnum +{ + XSD.Integer bar optional, + XSD.Float foo optional, + XSD.String base +} +with { +variant "name as uncapitalized"; +variant "element"; +variant (bar) "attribute"; +variant (foo) "attribute"; +variant (base) "untagged"; +}; + + +type record Member2 +{ + XSD.Integer bar optional, + XSD.Float foo optional, + XSD.String unitOfAge optional, + XSD.String base +} +with { +variant "name as uncapitalized"; +variant "element"; +variant (bar) "attribute"; +variant (foo) "attribute"; +variant (unitOfAge) "attribute"; +variant (base) "untagged"; +}; + + +type record Ize +{ + record of Head_group head_list +} +with { +variant "name as uncapitalized"; +variant "element"; +variant (head_list) "untagged"; +variant (head_list[-]) "name as 'head'"; +}; + + +type union Head_group +{ + XSD.String head, + Member2 member2 +} +with { +variant "untagged"; +//variant (member2) "block"; +}; + + +} +with { +encode "XML"; +variant "namespace as 'www.example.org/generate/element/substitution' prefix 'this'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_id_attrib_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_id_attrib_e.ttcn new file mode 100644 index 000000000..85b24ca27 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_id_attrib_e.ttcn @@ -0,0 +1,50 @@ +/******************************************************************************* +* Copyright (c) 2000-2015 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/4 R3A +* +* 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 +*******************************************************************************/ +// +// File: www_example_org_id_attrib_e.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Fri Jul 1 10:13:03 2014 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - id_attrib.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "www.example.org/id_attrib/e" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module www_example_org_id_attrib { + + +import from XSD all; + + +type XSD.Float TypeName; + + +} +with { +encode "XML"; +variant "namespace as 'www.example.org/id_attrib'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_import_prefix_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_import_prefix_e.ttcn new file mode 100644 index 000000000..f7d2cb7e0 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_import_prefix_e.ttcn @@ -0,0 +1,81 @@ +/******************************************************************************* +* Copyright (c) 2000-2015 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/4 R3A +* +* 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 +*******************************************************************************/ +// +// File: www_example_org_import_prefix_e.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Thu Jul 2 12:23:27 2001 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - import_prefix_name.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "www.example.org/import/prefix/e" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module www_example_org_import_prefix { + + +import from XSD all; + + +import from www_example_org_imported all; + + +type www_example_org_imported.Foobar Foobar +with { +variant "element"; +}; + + +type www_example_org_imported.Ding Ding +with { +variant "attribute"; +}; + + +type record Valami_1 +{ + Ding ding optional, + Foobar foobar +} +with { +variant "name as 'valami'"; +variant (ding) "name as capitalized"; +variant (ding) "attribute"; +variant (foobar) "name as capitalized"; +}; + + +type Valami_1 Valami +with { +variant "element"; +}; + + +} +with { +encode "XML"; +variant "namespace as 'www.example.org/import/prefix' prefix 'this'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_imported2_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_imported2_e.ttcn new file mode 100644 index 000000000..5d41f8cc1 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_imported2_e.ttcn @@ -0,0 +1,69 @@ +/******************************************************************************* +* Copyright (c) 2000-2015 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/4 R3A +* +* 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 +*******************************************************************************/ +// +// File: www_example_org_imported2_e.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Tue Sep 15 11:21:37 2014 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - imported2.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "www.example.org/imported2_e" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module www_example_org_imported2 { + + +import from XSD all; + + +type XSD.Integer Foobar +with { +variant "name as uncapitalized"; +}; + + +type XSD.Integer Ding +with { +variant "name as uncapitalized"; +}; + + +type record Bar +{ + XSD.String something optional +} +with { +variant "name as uncapitalized"; +variant "element"; +}; + + +} +with { +encode "XML"; +variant "namespace as 'www.example.org/imported2'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_imported_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_imported_e.ttcn new file mode 100644 index 000000000..a56b2f5f2 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_imported_e.ttcn @@ -0,0 +1,59 @@ +/******************************************************************************* +* Copyright (c) 2000-2015 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/5 R3A +* +* 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 +*******************************************************************************/ +// +// File: www_example_org_imported.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Thu Jul 1 12:23:29 2000 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - imported_prefix_name.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "www.example.org/imported" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module www_example_org_imported { + + +import from XSD all; + + +type XSD.Integer Foobar +with { +variant "name as uncapitalized"; +}; + + +type XSD.Integer Ding +with { +variant "name as uncapitalized"; +}; + + +} +with { +encode "XML"; +variant "namespace as 'www.example.org/imported'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_list_simpletype_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_list_simpletype_e.ttcn new file mode 100644 index 000000000..331666bb5 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_list_simpletype_e.ttcn @@ -0,0 +1,117 @@ +/******************************************************************************* +* Copyright (c) 2000-2015 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/5 R2A +* +* 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 +*******************************************************************************/ +// +// File: www_example_org_list_simpletype_e.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Wed Oct 21 12:34:20 2014 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - list_simpletype.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "www.example.org/list/simpletype/e" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module www_example_org_list_simpletype { + + +import from XSD all; + + +type record of enumerated +{ + orange, + red +} SimpleListEnumeration +with { +variant ([-]) "text 'orange' as capitalized"; +variant ([-]) "text 'red' as capitalized"; +variant "list"; +variant "element"; +}; + + +type record of union +{ + XSD.Boolean alt_, + XSD.Float alt_1 +} SimpleListUnion +with { +variant "list"; +variant "element"; +variant ([-]) "useUnion"; +variant ([-].alt_) "name as ''"; +//variant ([-].alt_) "text 'true' as '1'"; +//variant ([-].alt_) "text 'false' as '0'"; +variant ([-].alt_1) "name as ''"; +}; + + +type record of enumerated +{ + int_5(-5), + int0(0), + int5(5), + int10(10) +} SimpleListEnumerationNumber +with { +variant ([-]) "useNumber"; +variant "list"; +variant "element"; +}; + + +type record ComplexListUnionEnumeration +{ + record of enumerated { + red, + orange + } listEnumeration, + record of union { + XSD.Boolean alt_, + XSD.Float alt_1 + } listUnion +} +with { +variant "element"; +variant (listEnumeration) "name as capitalized"; +variant (listEnumeration) "list"; +variant (listEnumeration[-]) "text 'orange' as capitalized"; +variant (listEnumeration[-]) "text 'red' as capitalized"; +variant (listUnion) "name as capitalized"; +variant (listUnion[-]) "useUnion"; +variant (listUnion) "list"; +variant (listUnion[-].alt_) "name as ''"; +//variant (listUnion[-].alt_) "text 'true' as '1'"; +//variant (listUnion[-].alt_) "text 'false' as '0'"; +variant (listUnion[-].alt_1) "name as ''"; +}; + + +} +with { +encode "XML"; +variant "namespace as 'www.example.org/list/simpletype' prefix 'this'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_long_extension_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_long_extension_e.ttcn new file mode 100644 index 000000000..22c27242d --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_long_extension_e.ttcn @@ -0,0 +1,149 @@ +/******************************************************************************* +* Copyright (c) 2000-2015 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/4 R3A +* +* 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 +*******************************************************************************/ +// +// File: www_example_org_long_extension_e.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Wed Sep 11 10:05:17 2014 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - long_extension.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "www.example.org/long/extension_e" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module www_example_org_long_extension { + + +import from XSD all; + + +type record Top +{ + XSD.String subAttrib, + XSD.String xsdstring, + XSD.String label_, + XSD.String author, + record of record { + XSD.String name, + XSD.String label_, + record of XSD.String parameter_list + } action_list, + record of record { + XSD.Name name, + XSD.String item optional, + XSD.String description + } event_list, + record of XSD.String subelem_list +} +with { +variant "element"; +variant (subAttrib) "name as capitalized"; +variant (subAttrib) "attribute"; +variant (xsdstring) "name as 'xsd:string'"; +variant (xsdstring) "attribute"; +variant (label_) "name as 'label'"; +variant (action_list) "untagged"; +variant (action_list[-]) "name as 'action'"; +variant (action_list[-].name) "attribute"; +variant (action_list[-].label_) "name as 'label'"; +variant (action_list[-].parameter_list) "untagged"; +variant (action_list[-].parameter_list[-]) "name as 'parameter'"; +variant (event_list) "untagged"; +variant (event_list[-]) "name as 'event'"; +variant (event_list[-].name) "attribute"; +variant (subelem_list) "untagged"; +variant (subelem_list[-]) "name as 'Subelem'"; +}; + + +type record TopBase1 +{ + XSD.String xsdstring, + XSD.String label_, + XSD.String author, + record of record { + XSD.String name, + XSD.String label_, + record of XSD.String parameter_list + } action_list, + record of record { + XSD.Name name, + XSD.String item optional, + XSD.String description + } event_list +} +with { +variant (xsdstring) "name as 'xsd:string'"; +variant (xsdstring) "attribute"; +variant (label_) "name as 'label'"; +variant (action_list) "untagged"; +variant (action_list[-]) "name as 'action'"; +variant (action_list[-].name) "attribute"; +variant (action_list[-].label_) "name as 'label'"; +variant (action_list[-].parameter_list) "untagged"; +variant (action_list[-].parameter_list[-]) "name as 'parameter'"; +variant (event_list) "untagged"; +variant (event_list[-]) "name as 'event'"; +variant (event_list[-].name) "attribute"; +}; + + +type record NamedBaseElement +{ + XSD.String name, + XSD.String label_ +} +with { +variant "name as uncapitalized"; +variant (name) "attribute"; +variant (label_) "name as 'label'"; +}; + + +type record BaseElement +{ + XSD.String label_ +} +with { +variant "name as uncapitalized"; +variant (label_) "name as 'label'"; +}; + + +type record Response +{ + XSD.String item optional +} +with { +variant "name as uncapitalized"; +}; + + +} +with { +encode "XML"; +variant "namespace as 'www.example.org/long/extension' prefix 'this'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_name_conv_http_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_name_conv_http_e.ttcn new file mode 100644 index 000000000..e6bf57780 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_name_conv_http_e.ttcn @@ -0,0 +1,47 @@ +/******************************************************************************* +* Copyright (c) 2000-2015 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/4 R3A +* +* 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 +*******************************************************************************/ +// +// File: www_example_org_name_conv_http_e.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Fr Jun 11 11:11:11 2014 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - name_conv_with_z.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "www.example.org/name_conv/http:///e" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module www_example_org_name_conv_http { + + +import from XSD all; + + +} +with { +encode "XML"; +variant "namespace as 'www.example.org/name_conv/http://'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_namespaceas_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_namespaceas_e.ttcn new file mode 100644 index 000000000..020d90c33 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_namespaceas_e.ttcn @@ -0,0 +1,92 @@ +/******************************************************************************* +* Copyright (c) 2000-2015 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/4 R3A +* +* 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 +*******************************************************************************/ +// +// File: www_example_org_namespaceas.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Tue Sep 15 11:21:37 2014 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - namespaceas.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "www.example.org/namespaceas_e" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module www_example_org_namespaceas_e { + + +import from XSD all; + + +import from www_example_org_imported2 all; + + +type Foobar SomeType +with { +variant "element"; +}; + + +type record Type +{ + Foobar something optional, + Foobar foobar +} +with { +variant "element"; +variant (foobar) "namespace as 'www.example.org/imported2' prefix 'other'"; +}; + + +type record OtherType +{ + XSD.Integer billingAccountNumber, + record { + Foobar base + } something, + record { + Bar base + } something2, + record { + XSD.String something optional + } something3, + record { + XSD.String something + } something4 +} +with { +variant (billingAccountNumber) "namespace as 'www.example.org/imported2' prefix 'other'"; +variant (something.base) "namespace as 'www.example.org/imported2' prefix 'other'"; +variant (something.base) "untagged"; +variant (something2.base) "namespace as 'www.example.org/imported2' prefix 'other'"; +variant (something2.base) "untagged"; +}; + + +} +with { +encode "XML"; +variant "namespace as 'www.example.org/namespaceas' prefix 'this'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_nillable_fixed_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_nillable_fixed_e.ttcn new file mode 100644 index 000000000..e4f8c8094 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_nillable_fixed_e.ttcn @@ -0,0 +1,102 @@ +/******************************************************************************* +* Copyright (c) 2000-2015 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/4 R3A +* +* 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 +*******************************************************************************/ +// +// File: www_example_org_nillable_fixed_e.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Thu Sep 10 10:18:35 2014 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - nillable_fixed.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "www.example.org/nillable/fixed" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module www_example_org_nillable_fixed_e { + + +import from XSD all; + + +type record RemarkNillable +{ + XSD.String content optional +} +with { +variant "name as uncapitalized"; +variant "useNil"; +variant "element"; +}; + + +type record E16c +{ + XSD.Integer foo, + record { + XSD.String content optional + } bar +} +with { +variant "name as uncapitalized"; +variant "element"; +variant (bar) "useNil"; +}; + + +type record SeqNillable +{ + XSD.Integer bar optional, + XSD.Integer foo (1) optional, + record { + record { + XSD.String content optional + } forename, + record { + XSD.String content optional + } surname optional, + record of record { + XSD.String content optional + } livingAddress_list + } content optional +} +with { +variant "useNil"; +variant "element"; +variant (bar) "attribute"; +variant (foo) "defaultForEmpty as '1'"; +variant (foo) "attribute"; +variant (content.forename) "useNil"; +variant (content.surname) "useNil"; +variant (content.livingAddress_list) "untagged"; +variant (content.livingAddress_list[-]) "name as 'livingAddress'"; +variant (content.livingAddress_list[-]) "useNil"; +}; + + +} +with { +encode "XML"; +variant "namespace as 'www.example.org/nillable/fixed'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_no_ns_connector_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_no_ns_connector_e.ttcn new file mode 100644 index 000000000..dd99f621e --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_no_ns_connector_e.ttcn @@ -0,0 +1,68 @@ +/******************************************************************************* +* Copyright Ericsson Telecom AB 2014 +* +* XSD to TTCN-3 Translator version: CRL 113 200/5 R2A +* +* 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 +*******************************************************************************/ +// +// File: www_example_org_no_ns_connector_e.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Wed Oct 28 13:24:23 2014 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - no_ns_connector_e.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "www.example.org/no/ns/connector/e" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module www_example_org_no_ns_connector { + + +import from XSD all; + + +type Java_attribute_1 Java_attribute +with { +variant "name as 'java-attribute'"; +variant "element"; +}; + + +type record Java_attribute_1 +{ + XSD.String java_attribute optional, + XSD.String xml_accessor_type optional +} +with { +variant "name as 'java-attribute'"; +variant (java_attribute) "name as 'java-attribute'"; +variant (java_attribute) "attribute"; +variant (xml_accessor_type) "name as 'xml-accessor-type'"; +variant (xml_accessor_type) "attribute"; +}; + + +} +with { +encode "XML"; +variant "namespace as 'www.example.org/no/ns/connector'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_not_a_number_minex_inf_maxex_inf_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_not_a_number_minex_inf_maxex_inf_e.ttcn new file mode 100644 index 000000000..e81d8adcf --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_not_a_number_minex_inf_maxex_inf_e.ttcn @@ -0,0 +1,73 @@ +/******************************************************************************* +* Copyright (c) 2000-2015 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/4 R3A +* +* 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 +*******************************************************************************/ +// +// File: www_example_org_not_a_number_minex_inf_maxex_inf_e.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Tue Jul 6 13:41:30 2014 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - not_a_number_minex_inf_maxex_-inf.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "www.example.org/not_a_number/minex_inf/maxex_-inf/e" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module www_example_org_not_a_number_minex_inf_maxex_inf { + + +import from XSD all; + + +type XSD.Float E9e ( not_a_number ) +with { +variant "name as uncapitalized"; +}; + + +type XSD.Float E9e_2 ( not_a_number ) +with { +variant "name as uncapitalized"; +}; + + +type union Union_maxeclusive_NaN +{ + XSD.String alt_, + XSD.Integer alt_1 +} +with { +variant "name as uncapitalized"; +variant "useUnion"; +variant "element"; +variant (alt_) "name as ''"; +variant (alt_1) "name as ''"; +}; + + +} +with { +encode "XML"; +variant "namespace as 'www.example.org/not_a_number/minex_inf/maxex_-inf'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_qualified_element_attrib_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_qualified_element_attrib_e.ttcn new file mode 100644 index 000000000..d07778add --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_qualified_element_attrib_e.ttcn @@ -0,0 +1,78 @@ +/******************************************************************************* +* Copyright (c) 2000-2015 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/4 R3A +* +* 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 +*******************************************************************************/ +// +// File: www_example_org_qualified_element_attrib_e.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Mon Aug 10 13:22:23 2014 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - qualified_element_attrib.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "www.example.org/qualified/element/attrib/e" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module www_example_org_qualified_element_attrib { + + +import from XSD all; + + +type record Elements +{ + XSD.String elem1, + XSD.String elem2, + XSD.String elem3 +} +with { +variant "name as uncapitalized"; +variant "element"; +variant (elem3) "form as unqualified"; +}; + + +type record Attributes +{ + XSD.String attrib1 optional, + XSD.String attrib2 optional, + XSD.String attrib3 optional +} +with { +variant "name as uncapitalized"; +variant "element"; +variant (attrib1) "attribute"; +variant (attrib2) "attribute"; +variant (attrib3) "form as unqualified"; +variant (attrib3) "attribute"; +}; + + +} +with { +encode "XML"; +variant "namespace as 'www.example.org/qualified/element/attrib' prefix 'ns22'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +variant "attributeFormQualified"; +variant "elementFormQualified"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_regex_square_brackets_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_regex_square_brackets_e.ttcn new file mode 100644 index 000000000..1f6941eae --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_regex_square_brackets_e.ttcn @@ -0,0 +1,65 @@ +/******************************************************************************* +* Copyright Ericsson Telecom AB 2015 +* +* XSD to TTCN-3 Translator version: CRL 113 200/5 R3A +* +* 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 +*******************************************************************************/ +// +// File: www_example_org_regex_square_brackets.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Wed Jun 17 13:42:09 2015 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - regex_square_brackets.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "www.example.org/regex/square/brackets" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module www_example_org_regex_square_brackets { + + +import from XSD all; + + +type XSD.String Pattern1 (pattern "}[\(@\)\{1,5\}\{\}|\\.\[\]]#(3,)") +with { +variant "name as uncapitalized"; +}; + + +type XSD.String Pattern2 (pattern "\{[?.a-zA-Z\(@\)\{1,3\},\[\]/\^\{\}]#(0,1)") +with { +variant "name as uncapitalized"; +}; + + +type XSD.String Pattern3 (pattern "(sip:(^[a-zA-Z0-9+\-_]*(!?*!)#(0,1)[\(@\)\{1\}a-zA-Z0-9.\-_])#(1,71))|tel:\+([\-.\(\)0-9]*(!?*!)#(0,1))#(4,71)") +with { +variant "name as uncapitalized"; +}; + + +} +with { +encode "XML"; +variant "namespace as 'www.example.org/regex/square/brackets'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_self_recursion_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_self_recursion_e.ttcn new file mode 100644 index 000000000..67156d298 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_self_recursion_e.ttcn @@ -0,0 +1,66 @@ +/******************************************************************************* +* Copyright (c) 2000-2015 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/5 R1A +* +* 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 +*******************************************************************************/ +// +// File: www_example_org_self_recursion_e.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Wed Sep 6 11:11:31 2014 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - complex_self_recursion.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "www.example.org/self/recursion" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module www_example_org_self_recursion_e { + + +import from XSD all; + + +type record X +{ + XSD.String attr2 optional, + XSD.String x, + record { + XSD.String attr1 optional, + XSD.String attr2 optional, + XSD.String x, + X.y y optional, + XSD.String z + } y optional +} +with { +variant (attr2) "attribute"; +variant (y.attr1) "attribute"; +variant (y.attr2) "attribute"; +}; + + +} +with { +encode "XML"; +variant "namespace as 'www.example.org/self/recursion' prefix 'this'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_seq_enumeration_restriction_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_seq_enumeration_restriction_e.ttcn new file mode 100644 index 000000000..b8bcb3d43 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_seq_enumeration_restriction_e.ttcn @@ -0,0 +1,77 @@ +/******************************************************************************* +* Copyright (c) 2000-2015 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/4 R3A +* +* 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 +*******************************************************************************/ +// +// File: www_example_org_seq_enumeration_restriction_e.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Thu Aug 6 13:54:10 2014 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - enumeration_restriction2.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "www.example.org/seq/enumeration/restriction/e" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module www_example_org_seq_enumeration_restriction { + + +import from XSD all; + + +type record MatchingProblemType +{ + /* Must be "any port"! */ + enumerated { + receive_, + trigger_, + getcall_, + getreply_, + catch_, + check_ + } operation +} +with { +variant (operation) "text 'catch_' as 'catch'"; +variant (operation) "text 'check_' as 'check'"; +variant (operation) "text 'getcall_' as 'getcall'"; +variant (operation) "text 'getreply_' as 'getreply'"; +variant (operation) "text 'receive_' as 'receive'"; +variant (operation) "text 'trigger_' as 'trigger'"; +}; + + +type record MatchingProblemTypeRestricted +{ + enumerated { + red + } operation +}; + + +} +with { +encode "XML"; +variant "namespace as 'www.example.org/seq/enumeration/restriction' prefix 'ns2'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_seq_group_reference_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_seq_group_reference_e.ttcn new file mode 100644 index 000000000..b233a711b --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_seq_group_reference_e.ttcn @@ -0,0 +1,81 @@ +/******************************************************************************* +* Copyright (c) 2000-2015 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/4 R3A +* +* 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 +*******************************************************************************/ +// +// File: www_example_org_seq_group_reference_e.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Thu Aug 6 13:56:12 2014 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - seq_group_reference.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "www.example.org/seq/group/reference/e" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module www_example_org_seq_group_reference { + + +import from XSD all; + + +type record E15f +{ + XSD.String foobarGroup, + XSD.String foo, + XSD.String bar +} +with { +variant "name as uncapitalized"; +}; + + +type record E15fa +{ + record of XSD.String foobarGroup_list, + record length(5 .. 10) of FoobarGroup foobarGroup_list_1 +} +with { +variant "name as uncapitalized"; +variant (foobarGroup_list) "untagged"; +variant (foobarGroup_list[-]) "name as 'foobarGroup'"; +variant (foobarGroup_list_1) "untagged"; +}; + + +type record FoobarGroup +{ + XSD.String foo, + XSD.String bar +} +with { +variant "untagged"; +}; + + +} +with { +encode "XML"; +variant "namespace as 'www.example.org/seq/group/reference' prefix 'ns9'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_simpletype_base_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_simpletype_base_e.ttcn new file mode 100644 index 000000000..ba3a5b76d --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_simpletype_base_e.ttcn @@ -0,0 +1,58 @@ +/******************************************************************************* +* Copyright (c) 2000-2015 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/5 R2A +* +* 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 +*******************************************************************************/ +// +// File: www_example_org_simpletype_base_e.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Thu Oct 29 13:33:40 2014 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - simpletype_base_e.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "www.example.org/simpletype/base/e" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module www_example_org_simpletype_base { + + +import from XSD all; + + +type record SimpleTypebase +{ + enumerated { + unknown + } base +} +with { +variant (base) "untagged"; +}; + + +} +with { +encode "XML"; +variant "namespace as 'www.example.org/simpletype/base' prefix 'this'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_simpletype_ref_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_simpletype_ref_e.ttcn new file mode 100644 index 000000000..ba5af2ae7 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_simpletype_ref_e.ttcn @@ -0,0 +1,86 @@ +/******************************************************************************* +* Copyright (c) 2000-2015 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/5 R2A +* +* 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 +*******************************************************************************/ +// +// File: www_example_org_simpletype_ref_e.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Thu Sep 10 13:13:32 2014 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - simpletype_ref.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "www.example.org/simpletype/ref" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module www_example_org_simpletype_ref_e { + + +import from XSD all; + + +type record SomeType +{ + XSD.String something +} +with { +variant "element"; +}; + + +type record Type +{ + XSD.String something optional +} +with { +variant "element"; +}; + + +type record OtherType +{ + SomeType billingAccountNumber, + XSD.Long installmentPlanId (-99999 .. 99999), + XSD.String info length(0 .. 30) optional +}; + + +type record of XSD.String Start_list +with { +variant "name as uncapitalized"; +variant "list"; +}; + + +type Start_list List_ref length(4); + + +type XSD.String Info; + + +} +with { +encode "XML"; +variant "namespace as 'www.example.org/simpletype/ref' prefix 'this'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_simpletype_restrict_comp_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_simpletype_restrict_comp_e.ttcn new file mode 100644 index 000000000..5972c3f35 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_simpletype_restrict_comp_e.ttcn @@ -0,0 +1,70 @@ +/******************************************************************************* +* Copyright (c) 2000-2015 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/4 R3A +* +* 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 +*******************************************************************************/ +// +// File: www_example_org_simpletype_restrict_comp_e.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Thu Aug 6 13:59:08 2014 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - simpletype_restrict_comp.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "www.example.org/simpletype/restrict/comp/e" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module www_example_org_simpletype_restrict_comp { + + +import from XSD all; + + +/* Home Location Register Id */ +type XSD.String HlrIdInfo length(10 .. infinity); + + +type record Restricted +{ + /* HLR Id */ + XSD.String hlrId length(10 .. 30) optional +}; + + +/* Static IP Address */ +type IpV6AddressInfo IpV6Address +with { +variant "name as uncapitalized"; +variant "element"; +}; + + +/* IP V6 Address */ +type XSD.String IpV6AddressInfo (pattern "[0-9A-Fa-f]#(1,4)(:[0-9A-Fa-f]#(0,4))#(7)"); + + +} +with { +encode "XML"; +variant "namespace as 'www.example.org/simpletype/restrict/comp' prefix 'ns10'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_substitutiongroup_abstract_block_1_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_substitutiongroup_abstract_block_1_e.ttcn new file mode 100644 index 000000000..550b52498 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_substitutiongroup_abstract_block_1_e.ttcn @@ -0,0 +1,134 @@ +/******************************************************************************* +* Copyright (c) 2000-2015 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/5 R2A +* +* 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 +*******************************************************************************/ +// +// File: www_example_org_substitutiongroup_abstract_block_1_e.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Wed Oct 14 16:26:23 2014 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - substitutiongroup_abstract_block_1_e.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "www.example.org/substitutiongroup/abstract/block/1/e" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module www_example_org_substitutiongroup_abstract_block_1 { + + +import from XSD all; + + +/* THE HEAD ELEMENT */ + + +/* SUBSTITUTION ELEMENT OF THE SAME TYPE AS THE HEAD */ + + +type XSD.String Member1 +with { +variant "name as uncapitalized"; +variant "element"; +}; + + +/* SUBSTITUTION ELEMENT OF A TYPE RESTRICTING THE TYPE OF THE HEAD */ + + +type enumerated StringEnum +{ + else_, + something +} +with { +variant "text 'else_' as 'else'"; +variant "name as uncapitalized"; +}; + + +type StringEnum Member2 +with { +variant "name as uncapitalized"; +variant "element"; +}; + + +/* SUBSTITUTION ELEMENT OF A TYPE EXTENDING THE TYPE OF THE HEAD */ + + +type record ComplexEnum +{ + XSD.Integer bar optional, + XSD.Float foo optional, + XSD.String base +} +with { +variant "name as uncapitalized"; +variant (bar) "attribute"; +variant (foo) "attribute"; +variant (base) "untagged"; +}; + + +type ComplexEnum Member3 +with { +variant "name as uncapitalized"; +variant "element"; +}; + + +/* TOP LEVEL ELEMENT TO DEMONSTRATE SUBSTITUTION */ + + +type record Ize +{ + record of Head_group head_list +} +with { +variant "name as uncapitalized"; +variant "element"; +variant (head_list) "untagged"; +variant (head_list[-]) "name as 'head'"; +}; + + +type union Head_group +{ + XSD.String head, + Member1 member1, + Member2 member2, + Member3 member3 +} +with { +variant "untagged"; +//variant (head) "abstract"; +//variant (member2) "block"; +}; + + +} +with { +encode "XML"; +variant "namespace as 'www.example.org/substitutiongroup/abstract/block/1' prefix 'this'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_substitutiongroup_abstract_block_2_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_substitutiongroup_abstract_block_2_e.ttcn new file mode 100644 index 000000000..f1bc2b894 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_substitutiongroup_abstract_block_2_e.ttcn @@ -0,0 +1,134 @@ +/******************************************************************************* +* Copyright (c) 2000-2015 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/5 R2A +* +* 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 +*******************************************************************************/ +// +// File: www_example_org_substitutiongroup_abstract_block_2_e.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Wed Oct 14 16:59:26 2014 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - substitutiongroup_abstract_block_2_e.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "www.example.org/substitutiongroup/abstract/block/2/e" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module www_example_org_substitutiongroup_abstract_block_2 { + + +import from XSD all; + + +/* THE HEAD ELEMENT */ + + +/* SUBSTITUTION ELEMENT OF THE SAME TYPE AS THE HEAD */ + + +type XSD.String Member1 +with { +variant "name as uncapitalized"; +variant "element"; +}; + + +/* SUBSTITUTION ELEMENT OF A TYPE RESTRICTING THE TYPE OF THE HEAD */ + + +type enumerated StringEnum +{ + else_, + something +} +with { +variant "text 'else_' as 'else'"; +variant "name as uncapitalized"; +}; + + +type StringEnum Member2 +with { +variant "name as uncapitalized"; +variant "element"; +}; + + +/* SUBSTITUTION ELEMENT OF A TYPE EXTENDING THE TYPE OF THE HEAD */ + + +type record ComplexEnum +{ + XSD.Integer bar optional, + XSD.Float foo optional, + XSD.String base +} +with { +variant "name as uncapitalized"; +variant (bar) "attribute"; +variant (foo) "attribute"; +variant (base) "untagged"; +}; + + +type ComplexEnum Member3 +with { +variant "name as uncapitalized"; +variant "element"; +}; + + +/* TOP LEVEL ELEMENT TO DEMONSTRATE SUBSTITUTION */ + + +type record Ize +{ + record of Head_group head_list +} +with { +variant "name as uncapitalized"; +variant "element"; +variant (head_list) "untagged"; +variant (head_list[-]) "name as 'head'"; +}; + + +type union Head_group +{ + XSD.String head, + Member1 member1, + Member2 member2, + Member3 member3 +} +with { +variant "untagged"; +//variant (head) "abstract"; +//variant (member3) "block"; +}; + + +} +with { +encode "XML"; +variant "namespace as 'www.example.org/substitutiongroup/abstract/block/2' prefix 'this'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_substitutiongroup_complex_without_element_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_substitutiongroup_complex_without_element_e.ttcn new file mode 100644 index 000000000..cd2a80540 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_substitutiongroup_complex_without_element_e.ttcn @@ -0,0 +1,127 @@ +/******************************************************************************* +* Copyright (c) 2000-2015 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/5 R2A +* +* 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 +*******************************************************************************/ +// +// File: www_example_org_substitutiongroup_complex_without_element_e.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Thu Oct 15 11:01:18 2014 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - substitutiongroup_complex_without_element_e.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "www.example.org/substitutiongroup/complex/without/element/e" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module www_example_org_substitutiongroup_complex_without_element { + + +import from XSD all; + + +type XSD.String Head_group +with { +variant "element"; +}; + + +type XSD.String Member +with { +variant "name as uncapitalized"; +variant "element"; +}; + + +type enumerated StringEnum +{ + else_, + something +} +with { +variant "text 'else_' as 'else'"; +variant "name as uncapitalized"; +variant "element"; +}; + + +type E26seq Member2 +with { +variant "name as uncapitalized"; +variant "element"; +}; + + +type record E26seq +{ + XSD.String headAttrib optional, + XSD.String unitOfAge optional, + XSD.String something, + XSD.Integer ageElemExt +} +with { +variant "name as uncapitalized"; +variant (headAttrib) "attribute"; +variant (unitOfAge) "attribute"; +variant (something) "name as capitalized"; +}; + + +type record Ize +{ + record of Head_group_1 head_list +} +with { +variant "name as uncapitalized"; +variant "element"; +variant (head_list) "untagged"; +variant (head_list[-]) "name as 'head'"; +}; + + +type union Head_group_1 +{ + record { + XSD.String headAttrib optional, + XSD.String something + } head, + Member member, + Member2 member2, + StringEnum stringEnum +} +with { +variant "untagged"; +//variant (head) "abstract"; +variant (head.headAttrib) "attribute"; +variant (head.something) "name as capitalized"; +//variant (member) "block"; +//variant (member2) "block"; +//variant (stringEnum) "block"; +}; + + +} +with { +encode "XML"; +variant "namespace as 'www.example.org/substitutiongroup/complex/without/element' prefix 'this'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_substitutiongroup_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_substitutiongroup_e.ttcn new file mode 100644 index 000000000..d5d02bde7 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_substitutiongroup_e.ttcn @@ -0,0 +1,132 @@ +/******************************************************************************* +* Copyright (c) 2000-2015 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/5 R2A +* +* 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 +*******************************************************************************/ +// +// File: www_example_org_substitutiongroup_e.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Wed Oct 14 16:10:14 2014 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - substitutiongroup_e.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "www.example.org/substitutiongroup/e" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module www_example_org_substitutiongroup { + + +import from XSD all; + + +/* THE HEAD ELEMENT */ + + +/* SUBSTITUTION ELEMENT OF THE SAME TYPE AS THE HEAD */ + + +type XSD.String Member1 +with { +variant "name as uncapitalized"; +variant "element"; +}; + + +/* SUBSTITUTION ELEMENT OF A TYPE RESTRICTING THE TYPE OF THE HEAD */ + + +type enumerated StringEnum +{ + else_, + something +} +with { +variant "text 'else_' as 'else'"; +variant "name as uncapitalized"; +}; + + +type StringEnum Member2 +with { +variant "name as uncapitalized"; +variant "element"; +}; + + +/* SUBSTITUTION ELEMENT OF A TYPE EXTENDING THE TYPE OF THE HEAD */ + + +type record ComplexEnum +{ + XSD.Integer bar optional, + XSD.Float foo optional, + XSD.String base +} +with { +variant "name as uncapitalized"; +variant (bar) "attribute"; +variant (foo) "attribute"; +variant (base) "untagged"; +}; + + +type ComplexEnum Member3 +with { +variant "name as uncapitalized"; +variant "element"; +}; + + +/* TOP LEVEL ELEMENT TO DEMONSTRATE SUBSTITUTION */ + + +type record Ize +{ + record of Head_group head_list +} +with { +variant "name as uncapitalized"; +variant "element"; +variant (head_list) "untagged"; +variant (head_list[-]) "name as 'head'"; +}; + + +type union Head_group +{ + XSD.String head, + Member1 member1, + Member2 member2, + Member3 member3 +} +with { +variant "untagged"; +}; + + +} +with { +encode "XML"; +variant "namespace as 'www.example.org/substitutiongroup' prefix 'this'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_substitutiongroup_long_extension_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_substitutiongroup_long_extension_e.ttcn new file mode 100644 index 000000000..eabb9184e --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_substitutiongroup_long_extension_e.ttcn @@ -0,0 +1,152 @@ +/******************************************************************************* +* Copyright (c) 2000-2015 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/5 R2A +* +* 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 +*******************************************************************************/ +// +// File: www_example_org_substitutiongroup_long_extension_e.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Thu Oct 15 13:37:32 2014 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - substitutiongroup_long_extension_e.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "www.example.org/substitutiongroup/long/extension/e" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module www_example_org_substitutiongroup_long_extension { + + +import from XSD all; + + +type XSD.String Member +with { +variant "name as uncapitalized"; +variant "element"; +}; + + +type enumerated StringEnum +{ + else_, + something +} +with { +variant "text 'else_' as 'else'"; +variant "name as uncapitalized"; +variant "element"; +}; + + +type record ComplexEnum +{ + XSD.Integer bar optional, + XSD.Float foo optional, + XSD.String base +} +with { +variant "name as uncapitalized"; +variant "element"; +variant (bar) "attribute"; +variant (foo) "attribute"; +variant (base) "untagged"; +}; + + +type E27seq Member3 +with { +variant "name as uncapitalized"; +variant "element"; +}; + + +type record E27seq +{ + XSD.String extAttrib optional, + Member2 base +} +with { +variant "name as uncapitalized"; +variant (extAttrib) "attribute"; +variant (base) "untagged"; +}; + + +type E26seq Member2 +with { +variant "name as uncapitalized"; +variant "element"; +}; + + +type record E26seq +{ + XSD.Integer bar optional, + XSD.Float foo optional, + XSD.String unitOfAge optional, + XSD.String base +} +with { +variant "name as uncapitalized"; +variant (bar) "attribute"; +variant (foo) "attribute"; +variant (unitOfAge) "attribute"; +variant (base) "untagged"; +}; + + +type record Ize +{ + record of Head_group head_list +} +with { +variant "name as uncapitalized"; +variant "element"; +variant (head_list) "untagged"; +variant (head_list[-]) "name as 'head'"; +}; + + +type union Head_group +{ + XSD.String head, + ComplexEnum complexEnum, + Member member, + Member2 member2, + Member3 member3, + StringEnum stringEnum +} +with { +variant "untagged"; +//variant (complexEnum) "block"; +//variant (member2) "block"; +//variant (member3) "block"; +}; + + +} +with { +encode "XML"; +variant "namespace as 'www.example.org/substitutiongroup/long/extension' prefix 'this'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_substitutiongroup_main_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_substitutiongroup_main_e.ttcn new file mode 100644 index 000000000..ad5eb2106 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_substitutiongroup_main_e.ttcn @@ -0,0 +1,78 @@ +/******************************************************************************* +* Copyright (c) 2000-2015 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/5 R2A +* +* 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 +*******************************************************************************/ +// +// File: www_example_org_substitutiongroup_main_e.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Thu Oct 29 10:58:19 2014 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - substitutiongroup_main_e.xsd +// /* xml version = "1.0" */ +// /* targetnamespace = "www.example.org/substitutiongroup/main/e" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module www_example_org_substitutiongroup_main { + + +import from XSD all; + + +import from www_example_org_substitutiongroup_ref all; + + +type Subsgroup_group Refgroup +with { +variant "name as uncapitalized"; +variant "element"; +}; + + +type record ComplexGroup +{ + Subsgroup_group subsgroup +} +with { +variant "name as uncapitalized"; +}; + + +type union Subsgroup_group +{ + XSD.String subsgroup, + Replace replace_ +} +with { +variant "untagged"; +//variant (subsgroup) "abstract"; +variant (replace_) "name as 'replace'"; +}; + + +} +with { +encode "XML"; +variant "namespace as 'www.example.org/substitutiongroup/main' prefix 'A'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_substitutiongroup_ref_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_substitutiongroup_ref_e.ttcn new file mode 100644 index 000000000..67a1587d3 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_substitutiongroup_ref_e.ttcn @@ -0,0 +1,57 @@ +/******************************************************************************* +* Copyright (c) 2000-2015 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/5 R2A +* +* 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 +*******************************************************************************/ +// +// File: www_example_org_substitutiongroup_ref_e.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Thu Oct 29 10:58:19 2014 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - substitutiongroup_ref_e.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "www.example.org/substitutiongroup/ref/e" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module www_example_org_substitutiongroup_ref { + + +import from XSD all; + + +import from www_example_org_substitutiongroup_main all; + + +type XSD.String Replace +with { +variant "name as uncapitalized"; +variant "element"; +}; + + +} +with { +encode "XML"; +variant "namespace as 'www.example.org/substitutiongroup/ref' prefix 'this'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_type_attributegroup_nillable_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_type_attributegroup_nillable_e.ttcn new file mode 100644 index 000000000..ca344ceff --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_type_attributegroup_nillable_e.ttcn @@ -0,0 +1,94 @@ +/******************************************************************************* +* Copyright (c) 2000-2015 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/4 R3A +* +* 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 +*******************************************************************************/ +// +// File: www_example_org_type_attributegroup_nillable_e.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Thu Aug 6 13:38:06 2014 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - attributegroup_nillable.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "www.example.org/type/attributegroup/nillable/e" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module www_example_org_type_attributegroup_nillable { + + +import from XSD all; + + +type record Remark +{ + XSD.String content optional +} +with { +variant "name as uncapitalized"; +variant "useNil"; +variant "element"; +}; + + +type record SeqNillable +{ + XSD.Integer bar optional, + XSD.String birthDateAttrGroup optional, + XSD.String birthPlaceAttrGroup optional, + XSD.Integer foo optional, + record of XSD.String attr optional, + record { + record { + XSD.String content optional + } forename, + record { + XSD.String content optional + } surname optional, + record of record { + XSD.String content optional + } livingAddress_list, + Remark remark + } content optional +} +with { +variant "useNil"; +variant "element"; +variant (bar) "attribute"; +variant (birthDateAttrGroup) "attribute"; +variant (birthPlaceAttrGroup) "attribute"; +variant (foo) "attribute"; +variant (attr) "anyAttributes from 'www.example.org/type/attributegroup/nillable'"; +variant (content.forename) "useNil"; +variant (content.surname) "useNil"; +variant (content.livingAddress_list) "untagged"; +variant (content.livingAddress_list[-]) "name as 'livingAddress'"; +variant (content.livingAddress_list[-]) "useNil"; +}; + + +} +with { +encode "XML"; +variant "namespace as 'www.example.org/type/attributegroup/nillable' prefix 'ns7'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_type_conversion_follow_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_type_conversion_follow_e.ttcn new file mode 100644 index 000000000..099a091aa --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_type_conversion_follow_e.ttcn @@ -0,0 +1,99 @@ +/******************************************************************************* +* Copyright (c) 2000-2015 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/5 R3A +* +* 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 +*******************************************************************************/ +// +// File: www_example_org_type_conversion_follow_e.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Thu Aug 1 14:28:44 2014 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - type_conversion_follow.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "www.example.org/type/conversion/follow/e" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module www_example_org_type_conversion_follow_e { + + +import from XSD all; + + +type record E45 +{ + XSD.String birthDateAttrGroup optional, + E45_1 birthPlaceAttrGroup optional, + E45_1 sd optional, + E45_1 foo, + XSD.String bar +} +with { +variant "name as uncapitalized"; +variant (birthDateAttrGroup) "attribute"; +variant (birthPlaceAttrGroup) "attribute"; +variant (sd) "attribute"; +}; + + +type record E45_1 +{ + XSD.String attr optional +} +with { +variant "name as 'e45_'"; +variant (attr) "attribute"; +}; + + +type record Ss_1 +{ + E45_1 sss +} +with { +variant "untagged"; +}; + + +type E45_1 Ss +with { +variant "name as uncapitalized"; +variant "element"; +}; + + +type record FoobarGroup +{ + E45_1 foo, + XSD.String bar +} +with { +variant "untagged"; +}; + + +} +with { +encode "XML"; +variant "namespace as 'www.example.org/type/conversion/follow' prefix 'ns11'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_unnamed_union_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_unnamed_union_e.ttcn new file mode 100644 index 000000000..45d8a8dff --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_unnamed_union_e.ttcn @@ -0,0 +1,69 @@ +/******************************************************************************* +* Copyright Ericsson Telecom AB 2015 +* +* XSD to TTCN-3 Translator version: CRL 113 200/5 R3A +* +* 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 +*******************************************************************************/ +// +// File: www_example_org_unnamed_union.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Thu Aug 6 13:51:04 2015 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - element_in_all_mixed.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "www.example.org/unnamed/union" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module www_example_org_unnamed_union { + + +import from XSD all; + + +type record MyComplexElem_13 +{ + record of XSD.String embed_values, + record of enumerated { + a, + b + } order, + XSD.String foo optional, + XSD.String a, + XSD.Boolean b +} +with { +variant "name as 'MyComplexElem-13'"; +variant "useOrder"; +variant "embedValues"; +variant "element"; +variant (foo) "attribute"; +//variant (b) "text 'true' as '1'"; +//variant (b) "text 'false' as '0'"; +}; + + +} +with { +encode "XML"; +variant "namespace as 'www.example.org/unnamed/union'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_unqualified_element_attrib_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_unqualified_element_attrib_e.ttcn new file mode 100644 index 000000000..ce36efcf4 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_unqualified_element_attrib_e.ttcn @@ -0,0 +1,76 @@ +/******************************************************************************* +* Copyright (c) 2000-2015 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/4 R3A +* +* 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 +*******************************************************************************/ +// +// File: www_example_org_unqualified_element_attrib_e.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Mon Aug 10 13:23:26 2014 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - unqualified_element_attrib.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "www.example.org/unqualified/element/attrib/e" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module www_example_org_unqualified_element_attrib { + + +import from XSD all; + + +type record Elements +{ + XSD.String elem1, + XSD.String elem2, + XSD.String elem3 +} +with { +variant "name as uncapitalized"; +variant "element"; +variant (elem2) "form as qualified"; +}; + + +type record Attributes +{ + XSD.String attrib1 optional, + XSD.String attrib2 optional, + XSD.String attrib3 optional +} +with { +variant "name as uncapitalized"; +variant "element"; +variant (attrib1) "attribute"; +variant (attrib2) "form as qualified"; +variant (attrib2) "attribute"; +variant (attrib3) "attribute"; +}; + + +} +with { +encode "XML"; +variant "namespace as 'www.example.org/unqualified/element/attrib' prefix 'ns23'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_xml_in_annotation_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_xml_in_annotation_e.ttcn new file mode 100644 index 000000000..e74613dab --- /dev/null +++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_xml_in_annotation_e.ttcn @@ -0,0 +1,63 @@ +/******************************************************************************* +* Copyright (c) 2000-2015 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/4 R3A +* +* 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 +*******************************************************************************/ +// +// File: www_example_org_xml_in_annotation_e.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Mon Oct 5 09:31:24 2014 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - xml_in_annotation.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "www.example.org/xml/in/annotation/e" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module www_example_org_xml_in_annotation_e { + + +import from XSD all; + + +/* comment */ +type XSD.String Tcname +with { +variant "name as uncapitalized"; +variant "attribute"; +}; + + +/* some comment */ +type XSD.String Tcname2 +with { +variant "name as uncapitalized"; +variant "attribute"; +}; + + +} +with { +encode "XML"; +variant "namespace as 'www.example.org/xml/in/annotation' prefix 'this'"; +variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +} diff --git a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/CAI3G/Bulk.xsd b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/CAI3G/Bulk.xsd index 59e381b42..bc2683904 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/CAI3G/Bulk.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/CAI3G/Bulk.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="ISO-8859-1"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/CAI3G/GenericCai3gType.xsd b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/CAI3G/GenericCai3gType.xsd index 633755257..6e92ce394 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/CAI3G/GenericCai3gType.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/CAI3G/GenericCai3gType.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/CAI3G/Provisioning.xsd b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/CAI3G/Provisioning.xsd index 737b5918b..581369ec5 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/CAI3G/Provisioning.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/CAI3G/Provisioning.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/CCAPI/CCAPI.xsd b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/CCAPI/CCAPI.xsd index 6f2e9bfcc..8c47a5fff 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/CCAPI/CCAPI.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/CCAPI/CCAPI.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/HSS/avg.xsd b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/HSS/avg.xsd index 05f5c2bfd..395ae0267 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/HSS/avg.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/HSS/avg.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/HSS/cai3g1.2_provisioning.xsd b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/HSS/cai3g1.2_provisioning.xsd index b3af4b597..f101ffb60 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/HSS/cai3g1.2_provisioning.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/HSS/cai3g1.2_provisioning.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/HSS/eps.xsd b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/HSS/eps.xsd index 1de6b29ff..6e0ea2406 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/HSS/eps.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/HSS/eps.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/HSS/hssla_types.xsd b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/HSS/hssla_types.xsd index 7d226b3cb..108e7a68b 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/HSS/hssla_types.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/HSS/hssla_types.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/JMdict/jmdict-good.xsd b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/JMdict/jmdict-good.xsd index 06998fe85..e86e0beec 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/JMdict/jmdict-good.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/JMdict/jmdict-good.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/MGW/IntegratedSite.xsd b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/MGW/IntegratedSite.xsd index 98a13ff70..23a0c7cf0 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/MGW/IntegratedSite.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/MGW/IntegratedSite.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/MGW/IntegratedSite_HK84933.xsd b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/MGW/IntegratedSite_HK84933.xsd index 9682f0a1c..e0bf34b38 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/MGW/IntegratedSite_HK84933.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/MGW/IntegratedSite_HK84933.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/MGW/IsTypes.xsd b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/MGW/IsTypes.xsd index 4f1370d50..ab84a6840 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/MGW/IsTypes.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/MGW/IsTypes.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/MGW/MainSwitch.xsd b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/MGW/MainSwitch.xsd index 20f0c2ac4..4c818f5b8 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/MGW/MainSwitch.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/MGW/MainSwitch.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/MGW/Mgw_R9B27.xsd b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/MGW/Mgw_R9B27.xsd index f529a630e..f3684a89f 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/MGW/Mgw_R9B27.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/MGW/Mgw_R9B27.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/MGW/Misc.xsd b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/MGW/Misc.xsd index b0a42904a..f4305497e 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/MGW/Misc.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/MGW/Misc.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/MGW/XMLSchema.xsd b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/MGW/XMLSchema.xsd index 8748b545b..2997cfadb 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/MGW/XMLSchema.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/MGW/XMLSchema.xsd @@ -1,6 +1,6 @@ <?xml version='1.0' encoding='UTF-8'?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/MGW/confd.xsd b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/MGW/confd.xsd index 2a8e87bcc..1431983b3 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/MGW/confd.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/MGW/confd.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/MGW/xml.xsd b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/MGW/xml.xsd index 726d649ae..82a530b31 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/MGW/xml.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/MGW/xml.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/PAP/PAP.xsd b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/PAP/PAP.xsd index 6939b4157..0445671b0 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/PAP/PAP.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/PAP/PAP.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/PIDF/pidf.xsd b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/PIDF/pidf.xsd index 8a28b5e46..0f5f3fb90 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/PIDF/pidf.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/PIDF/pidf.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/PIDF/rlmi.xsd b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/PIDF/rlmi.xsd index 8e6aaa2cd..d5a23a457 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/PIDF/rlmi.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/PIDF/rlmi.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8" ?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/PIDF/testschema.xsd b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/PIDF/testschema.xsd index 00a8c88b2..ba8f5c0cd 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/PIDF/testschema.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/PIDF/testschema.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/PIDF/xml_PIDF.xsd b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/PIDF/xml_PIDF.xsd index bdf985148..3020bc672 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/PIDF/xml_PIDF.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/PIDF/xml_PIDF.xsd @@ -1,6 +1,6 @@ <?xml version='1.0'?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/ParlayX/parlayx_common_types_2_0.xsd b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/ParlayX/parlayx_common_types_2_0.xsd index a9057c038..25314ad81 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/ParlayX/parlayx_common_types_2_0.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/ParlayX/parlayx_common_types_2_0.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/ParlayX/parlayx_payment_amount_charging_interface_2_0.xsd b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/ParlayX/parlayx_payment_amount_charging_interface_2_0.xsd index 336d79532..c56fa91b3 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/ParlayX/parlayx_payment_amount_charging_interface_2_0.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/ParlayX/parlayx_payment_amount_charging_interface_2_0.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/ParlayX/parlayx_payment_reserve_amount_charging_interface_2_0.xsd b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/ParlayX/parlayx_payment_reserve_amount_charging_interface_2_0.xsd index 45f0d1750..8a7bd8311 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/ParlayX/parlayx_payment_reserve_amount_charging_interface_2_0.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/ParlayX/parlayx_payment_reserve_amount_charging_interface_2_0.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/ParlayX/parlayx_payment_reserve_volume_charging_interface_2_0.xsd b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/ParlayX/parlayx_payment_reserve_volume_charging_interface_2_0.xsd index 1a60055ab..ca958ccd4 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/ParlayX/parlayx_payment_reserve_volume_charging_interface_2_0.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/ParlayX/parlayx_payment_reserve_volume_charging_interface_2_0.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/ParlayX/parlayx_payment_types_2_0.xsd b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/ParlayX/parlayx_payment_types_2_0.xsd index ae7493e50..89c6d4d5d 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/ParlayX/parlayx_payment_types_2_0.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/ParlayX/parlayx_payment_types_2_0.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/ParlayX/parlayx_payment_volume_charging_interface_2_0.xsd b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/ParlayX/parlayx_payment_volume_charging_interface_2_0.xsd index fbf4fc7f2..e52d31d2d 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/ParlayX/parlayx_payment_volume_charging_interface_2_0.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/ParlayX/parlayx_payment_volume_charging_interface_2_0.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/RLP/RLP_SVC.xsd b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/RLP/RLP_SVC.xsd index 8612f8836..1df6afb76 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/RLP/RLP_SVC.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/RLP/RLP_SVC.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/RLXML/RLXML_small.xsd b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/RLXML/RLXML_small.xsd index f010107b5..d63bf2323 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/RLXML/RLXML_small.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/RLXML/RLXML_small.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/RLXML/rlxml.xml b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/RLXML/rlxml.xml index b3f10b625..0c905fe0f 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/RLXML/rlxml.xml +++ b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/RLXML/rlxml.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/SIP/SIP.xsd b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/SIP/SIP.xsd index d0e5440f2..75208af6d 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/SIP/SIP.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/SIP/SIP.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/ShData/ShDataType.xsd b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/ShData/ShDataType.xsd index 340ed6344..d3f1021aa 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/ShData/ShDataType.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/ShData/ShDataType.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/XML_RPC/XML_RPC.xsd b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/XML_RPC/XML_RPC.xsd index 82ff8438d..b73f7bfb1 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/XML_RPC/XML_RPC.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_protocolXSDs/XML_RPC/XML_RPC.xsd @@ -1,6 +1,6 @@ <?xml version="1.0"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/ETSI_CR5852_union.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/ETSI_CR5852_union.xsd index 22580d81d..eb4cc996f 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/ETSI_CR5852_union.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/ETSI_CR5852_union.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/UsefulTtcn3Types.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_xsds/UsefulTtcn3Types.ttcn index e680ab0eb..bac9ef501 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/UsefulTtcn3Types.ttcn +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/UsefulTtcn3Types.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XSD.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XSD.ttcn index d340dfef6..8b29b0e6f 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XSD.ttcn +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XSD.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_annotation.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_annotation.xsd index 271837239..4814373d9 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_annotation.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_annotation.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_annotation1.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_annotation1.xsd index 5c591b3b6..a678ad8d7 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_annotation1.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_annotation1.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_annotation2.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_annotation2.xsd index ae00dd67f..301b638c2 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_annotation2.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_annotation2.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_boolean.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_boolean.xsd index c61dd0927..ae2c2261f 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_boolean.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_boolean.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_boolean_withTypeAndBase.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_boolean_withTypeAndBase.xsd index f5f88899a..574f61b0d 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_boolean_withTypeAndBase.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_boolean_withTypeAndBase.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex1.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex1.xsd index b2d8ee517..383f8f329 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex1.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex1.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex2.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex2.xsd index b37a6becd..ee5b6136b 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex2.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex2.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_all.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_all.xsd index 0104a0d68..617532615 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_all.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_all.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_any.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_any.xsd index b36eff03a..63f87d145 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_any.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_any.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_choice.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_choice.xsd index 411d796a7..d016b1ad2 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_choice.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_choice.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_extension.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_extension.xsd index 917665c47..3055450cd 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_extension.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_extension.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_import_A.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_import_A.xsd index 3dc17add8..d0a91ce83 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_import_A.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_import_A.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_import_AB.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_import_AB.xsd index 3cd9c73d9..1f4c4c3ca 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_import_AB.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_import_AB.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_import_B.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_import_B.xsd index 923101abb..a62810548 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_import_B.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_import_B.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_import_neg1.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_import_neg1.xsd index a5afae49b..940ab36d8 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_import_neg1.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_import_neg1.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_import_pos.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_import_pos.xsd index a5d219c9c..cd1f7847b 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_import_pos.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_import_pos.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_import_withSchemaLocation.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_import_withSchemaLocation.xsd index bf30f015e..da5a4a2f2 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_import_withSchemaLocation.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_import_withSchemaLocation.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_include.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_include.xsd index 08d4ed17c..3433acbad 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_include.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_include.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_include1.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_include1.xsd index 73eebbf48..64f2d2dc4 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_include1.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_include1.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_include2.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_include2.xsd index 0b9473c86..593d10f38 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_include2.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_include2.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 @@ -7,7 +7,7 @@ http://www.eclipse.org/legal/epl-v10.html --> <schema xmlns="http://www.w3.org/2001/XMLSchema" - xmlns:r="www.XmlTest.org/complex_include2" + xmlns:r2="www.XmlTest.org/complex_include2" targetNamespace="www.XmlTest.org/complex_include2" elementFormDefault="qualified"> <annotation> diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_minOccursMaxOccurs.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_minOccursMaxOccurs.xsd index 2e093f0f4..18ba62ede 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_minOccursMaxOccurs.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_minOccursMaxOccurs.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_mixed.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_mixed.xsd index ad42ce580..a0b1c3df2 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_mixed.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_mixed.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_restriction.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_restriction.xsd index e933080d5..106d28e95 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_restriction.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_restriction.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_restriction_neg1.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_restriction_neg1.xsd index 761f88503..98f11af36 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_restriction_neg1.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_restriction_neg1.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_restriction_neg2.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_restriction_neg2.xsd index 6313d0d15..1f4702f76 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_restriction_neg2.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_restriction_neg2.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_simpleContent.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_simpleContent.xsd index 17d5d2aa7..396427723 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_simpleContent.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_simpleContent.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_unique.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_unique.xsd index 0005c3c75..86b90ccae 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_unique.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_complex_unique.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 @@ -7,7 +7,7 @@ http://www.eclipse.org/legal/epl-v10.html --> <schema xmlns="http://www.w3.org/2001/XMLSchema" - xmlns:r="www.XmlTest.org/complex_unique" + xmlns:r3="www.XmlTest.org/complex_unique" targetNamespace="www.XmlTest.org/complex_unique" elementFormDefault="qualified"> <annotation> @@ -24,26 +24,26 @@ <element name="purchaseReport"> <complexType> <sequence> - <element name="regions" type="r:RegionsType"/> + <element name="regions" type="r3:RegionsType"/> - <element name="parts" type="r:PartsType"/> + <element name="parts" type="r3:PartsType"/> </sequence> <attribute name="period" type="duration"/> <attribute name="periodEnding" type="date"/> </complexType> <unique name="dummy1"> - <selector xpath="r:regions/r:zip"/> + <selector xpath="r3:regions/r3:zip"/> <field xpath="@code"/> </unique> <key name="pNumKey"> - <selector xpath="r:parts/r:part"/> + <selector xpath="r3:parts/r3:part"/> <field xpath="@number"/> </key> - <keyref name="dummy2" refer="r:pNumKey"> - <selector xpath="r:regions/r:zip/r:part"/> + <keyref name="dummy2" refer="r3:pNumKey"> + <selector xpath="r3:regions/r3:zip/r3:part"/> <field xpath="@number"/> </keyref> diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_decimal.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_decimal.xsd index dbd57c829..f65712627 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_decimal.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_decimal.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_decimal_withEnum.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_decimal_withEnum.xsd index 8a0e9e6a3..63efe83f1 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_decimal_withEnum.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_decimal_withEnum.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_decimal_withLength.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_decimal_withLength.xsd index 89d5e6da7..496051155 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_decimal_withLength.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_decimal_withLength.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_decimal_withMinMaxExclusive.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_decimal_withMinMaxExclusive.xsd index 7cdbeb95b..306a6223a 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_decimal_withMinMaxExclusive.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_decimal_withMinMaxExclusive.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_decimal_withMinMaxInclusive.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_decimal_withMinMaxInclusive.xsd index 9fe1511b8..9a6ca867e 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_decimal_withMinMaxInclusive.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_decimal_withMinMaxInclusive.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_element_abstract.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_element_abstract.xsd index 3fb065be6..71cf2d3da 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_element_abstract.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_element_abstract.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_element_anyType.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_element_anyType.xsd index a695a8844..749ef6f37 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_element_anyType.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_element_anyType.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_element_nameInheritance.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_element_nameInheritance.xsd index ca3747dd2..c14d00ecc 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_element_nameInheritance.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_element_nameInheritance.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_element_recordOfElements.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_element_recordOfElements.xsd index 582f1a60b..0983babe9 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_element_recordOfElements.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_element_recordOfElements.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_element_recordOfElements3.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_element_recordOfElements3.xsd index a3bec1b9a..074d3a5ab 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_element_recordOfElements3.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_element_recordOfElements3.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_element_recordOfElements4.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_element_recordOfElements4.xsd index d78000a3e..5f5e84bd5 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_element_recordOfElements4.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_element_recordOfElements4.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_element_recordOfElements5.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_element_recordOfElements5.xsd index 2b33d1c95..317aac116 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_element_recordOfElements5.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_element_recordOfElements5.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_imsike.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_imsike.xsd index 157109ea2..49a6f3872 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_imsike.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_imsike.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 @@ -8,7 +8,7 @@ --> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" -xmlns:ns="urn:XmlTest.imsike" +xmlns:ns50="urn:XmlTest.imsike" targetNamespace="urn:XmlTest.imsike" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:element name="individualTrigger" nillable="true"> @@ -50,7 +50,7 @@ targetNamespace="urn:XmlTest.imsike" elementFormDefault="qualified" attributeFor <xs:element name="forename" type="xs:string" nillable="true"/> <xs:element name="surname" type="xs:string" minOccurs="0" nillable="true"/> <xs:element name="bornPlace" type="xs:string" minOccurs="0" maxOccurs="unbounded" nillable="true"/> - <xs:element ref="ns:remarkNillable"/> + <xs:element ref="ns50:remarkNillable"/> </xs:sequence> <xs:attribute name="triggerDescriptionA" type="xs:string" use="required"/> </xs:complexType> diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_integer.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_integer.xsd index 55ecb816b..9a63d5550 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_integer.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_integer.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_integer_empty1.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_integer_empty1.xsd index 33f05ef75..531513b83 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_integer_empty1.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_integer_empty1.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_integer_withEnum.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_integer_withEnum.xsd index 6f17bbd4c..8dedb0cad 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_integer_withEnum.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_integer_withEnum.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_integer_withLength.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_integer_withLength.xsd index 6d0870873..f37d8fa7c 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_integer_withLength.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_integer_withLength.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_integer_withMaxExcl.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_integer_withMaxExcl.xsd index 3bea97cdb..dbb2f6ac7 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_integer_withMaxExcl.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_integer_withMaxExcl.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_integer_withMaxIncl.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_integer_withMaxIncl.xsd index be9acdb7a..01e4d2095 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_integer_withMaxIncl.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_integer_withMaxIncl.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_integer_withMinExcl.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_integer_withMinExcl.xsd index a69b3e1fc..2fd2a3cfc 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_integer_withMinExcl.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_integer_withMinExcl.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_integer_withMinIncl.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_integer_withMinIncl.xsd index 65ea1b9e9..e3f0b2d5d 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_integer_withMinIncl.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_integer_withMinIncl.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_list.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_list.xsd index ad6932da3..56bddfdad 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_list.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_list.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_list_integer.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_list_integer.xsd index b2e29e22d..dea9ebfc7 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_list_integer.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_list_integer.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_simple_enum.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_simple_enum.xsd index b3c6936c7..a87c198e0 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_simple_enum.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_simple_enum.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string.xsd index 6417e7a10..fd50557d1 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withEmptyLength.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withEmptyLength.xsd index 872d97e64..19703742b 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withEmptyLength.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withEmptyLength.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withEmptyMax.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withEmptyMax.xsd index 04d3130ee..3553e8e16 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withEmptyMax.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withEmptyMax.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withEmptyMin.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withEmptyMin.xsd index a1b4872e7..3dcbd820d 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withEmptyMin.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withEmptyMin.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withEnum.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withEnum.xsd index 0511e8f6e..8754f309b 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withEnum.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withEnum.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withFaultyMinMax.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withFaultyMinMax.xsd index fcc94268f..c840deb74 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withFaultyMinMax.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withFaultyMinMax.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withFixedLength.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withFixedLength.xsd index 746b8b070..fef2c92c8 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withFixedLength.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withFixedLength.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withFloatLength.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withFloatLength.xsd index 80781d13e..ba157fa20 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withFloatLength.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withFloatLength.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withMinLength.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withMinLength.xsd index 30768fe43..a79e143a2 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withMinLength.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withMinLength.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withNegativeLength.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withNegativeLength.xsd index 442a9daf1..728e05f72 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withNegativeLength.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withNegativeLength.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withNegativeMax.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withNegativeMax.xsd index 39bd6e134..35780ee1c 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withNegativeMax.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withNegativeMax.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withNegativeMin.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withNegativeMin.xsd index 66b921ec8..bd1c893de 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withNegativeMin.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withNegativeMin.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withOverDefinition.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withOverDefinition.xsd index 74f4cec75..8d589d6e4 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withOverDefinition.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withOverDefinition.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withPosLength.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withPosLength.xsd index 27d406360..604ecb401 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withPosLength.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withPosLength.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withPosMax.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withPosMax.xsd index eafa1ecc1..bbf095d07 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withPosMax.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withPosMax.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withTypeAndBase.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withTypeAndBase.xsd index abca00531..93ee54ccc 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withTypeAndBase.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withTypeAndBase.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withWhitespace.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withWhitespace.xsd index 46803b5a9..a4aece9eb 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withWhitespace.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_string_withWhitespace.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_time.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_time.xsd index 88a122c98..a64fa7e33 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_time.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_time.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_time_withEnum.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_time_withEnum.xsd index 9e8eda95f..703766f18 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_time_withEnum.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_time_withEnum.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_union.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_union.xsd index a07a60724..5f26572aa 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_union.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_union.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_union2.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_union2.xsd index f3ce9d08d..e1b7d13dd 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_union2.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_union2.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_version.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_version.xsd index 2456122e7..8a705f06f 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_version.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/XmlTest_version.xsd @@ -1,6 +1,6 @@ <?xml version="1.1" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/empty.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/empty.xsd index 6d049f20e..87eba2c71 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/empty.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/empty.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/noTargetNamespace.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/noTargetNamespace.xsd index 77db3ad81..b79045a0c 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/noTargetNamespace.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/noTargetNamespace.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/XmlTest_xsds/po.xsd b/regression_test/XML/XmlWorkflow/XmlTest_xsds/po.xsd index 6d3fdd9dc..0095a65f2 100644 --- a/regression_test/XML/XmlWorkflow/XmlTest_xsds/po.xsd +++ b/regression_test/XML/XmlWorkflow/XmlTest_xsds/po.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/bin/prj2mk.pl b/regression_test/XML/XmlWorkflow/bin/prj2mk.pl index 1157779bb..a02428c79 100644 --- a/regression_test/XML/XmlWorkflow/bin/prj2mk.pl +++ b/regression_test/XML/XmlWorkflow/bin/prj2mk.pl @@ -1,6 +1,6 @@ #!/usr/bin/perl -w ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/bin2/prj2mk.pl b/regression_test/XML/XmlWorkflow/bin2/prj2mk.pl index 1157779bb..a02428c79 100755 --- a/regression_test/XML/XmlWorkflow/bin2/prj2mk.pl +++ b/regression_test/XML/XmlWorkflow/bin2/prj2mk.pl @@ -1,6 +1,6 @@ #!/usr/bin/perl -w ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/src/UsefulTtcn3Types.ttcn b/regression_test/XML/XmlWorkflow/src/UsefulTtcn3Types.ttcn index e680ab0eb..bac9ef501 100644 --- a/regression_test/XML/XmlWorkflow/src/UsefulTtcn3Types.ttcn +++ b/regression_test/XML/XmlWorkflow/src/UsefulTtcn3Types.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/src/XSD.ttcn b/regression_test/XML/XmlWorkflow/src/XSD.ttcn index 8ee4fc267..d35abb763 100644 --- a/regression_test/XML/XmlWorkflow/src/XSD.ttcn +++ b/regression_test/XML/XmlWorkflow/src/XSD.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/src/XmlTest.cfg b/regression_test/XML/XmlWorkflow/src/XmlTest.cfg index 0fb563725..5a77f73a4 100644 --- a/regression_test/XML/XmlWorkflow/src/XmlTest.cfg +++ b/regression_test/XML/XmlWorkflow/src/XmlTest.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/src/XmlTest_protocolXsds.cfg b/regression_test/XML/XmlWorkflow/src/XmlTest_protocolXsds.cfg index 65010546e..04c8b875f 100644 --- a/regression_test/XML/XmlWorkflow/src/XmlTest_protocolXsds.cfg +++ b/regression_test/XML/XmlWorkflow/src/XmlTest_protocolXsds.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/src/xmlTest.prj b/regression_test/XML/XmlWorkflow/src/xmlTest.prj index 33e62fe53..a28fc99b7 100644 --- a/regression_test/XML/XmlWorkflow/src/xmlTest.prj +++ b/regression_test/XML/XmlWorkflow/src/xmlTest.prj @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 @@ -74,11 +74,73 @@ <File path="../xsd/restricting_complex_types.xsd" /> <File path="../xsd/schema.xsd" /> <File path="../xsd/union.xsd" /> + <File path="../xsd/name_conversion_extension_attrib.xsd" /> + <File path="../xsd/nillable_annotations.xsd" /> + <File path="../xsd/sequence_embeds_sequence.xsd" /> + <File path="../xsd/attribute_in_extension.xsd" /> + <File path="../xsd/anyattribute_optional.xsd" /> + <File path="../xsd/complex_restriction_with_use.xsd" /> + <File path="../xsd/name_conv_with_z.xsd" /> + <File path="../xsd/name_conv_non_alphanumeric.xsd" /> + <File path="../xsd/name_conv_remove_seq_of_low_line.xsd" /> + <File path="../xsd/enum_field_names.xsd" /> + <File path="../xsd/enumeration_restriction.xsd" /> + <File path="../xsd/import_prefix_name.xsd" /> + <File path="../xsd/imported_prefix_name.xsd" /> + <File path="../xsd/not_a_number_minex_inf_maxex_-inf.xsd" /> + <File path="../xsd/id_attrib.xsd" /> + <File path="../xsd/decimal_fractiondigits.xsd" /> + <File path="../xsd/boolean_variant_commented.xsd" /> + <File path="../xsd/attributegroup_nillable.xsd" /> + <File path="../xsd/comment_placement.xsd" /> + <File path="../xsd/complex_nillable.xsd" /> + <File path="../xsd/element_in_all_minmax.xsd" /> + <File path="../xsd/enumeration_restriction2.xsd" /> + <File path="../xsd/seq_group_reference.xsd" /> + <File path="../xsd/simpletype_restrict_comp.xsd" /> + <File path="../xsd/type_conversion_follow.xsd" /> + <File path="../xsd/nillable_in_nillable_extension.xsd" /> + <File path="../xsd/qualified_element_attrib.xsd" /> + <File path="../xsd/unqualified_element_attrib.xsd" /> + <File path="../xsd/attrib_restriction_extension.xsd" /> + <File path="../xsd/anyattrib_single.xsd" /> + <File path="../xsd/attrib_order_a.xsd" /> + <File path="../xsd/attrib_order_b.xsd" /> + <File path="../xsd/attrib_order_c.xsd" /> + <File path="../xsd/fixed_value.xsd" /> + <File path="../xsd/complex_self_recursion.xsd" /> + <File path="../xsd/enumeration_remove_dup.xsd" /> + <File path="../xsd/nillable_fixed.xsd" /> + <File path="../xsd/simpletype_ref.xsd" /> + <File path="../xsd/namespaceas.xsd" /> + <File path="../xsd/imported2.xsd" /> + <File path="../xsd/long_extension.xsd" /> + <File path="../xsd/xml_in_annotation.xsd" /> + <File path="../xsd/imported_module.xsd" /> + <File path="../xsd/imported_module_.xsd" /> + <File path="../xsd/module_typename_conversion.xsd" /> + <File path="../xsd/module_typename_conversion_1.xsd" /> + <File path="../xsd/substitutiongroup.xsd" /> + <File path="../xsd/substitutiongroup_abstract_block_1.xsd" /> + <File path="../xsd/substitutiongroup_abstract_block_2.xsd" /> + <File path="../xsd/substitutiongroup_complex_without_element.xsd" /> + <File path="../xsd/substitutiongroup_long_extension.xsd" /> + <File path="../xsd/generate_element_substitution.xsd" /> + <File path="../xsd/dont_generate_element_substitution.xsd" /> + <File path="../xsd/substitutiongroup_neg.xsd" /> + <File path="../xsd/list_simpletype.xsd" /> + <File path="../xsd/no_ns_connector.xsd" /> + <File path="../xsd/anyattr_in_complex.xsd" /> + <File path="../xsd/attribgroup_ingroup.xsd" /> + <File path="../xsd/attrib_enum.xsd" /> + <File path="../xsd/substitutiongroup_main.xsd" /> + <File path="../xsd/substitutiongroup_ref.xsd" /> + <File path="../xsd/simpletype_base.xsd" /> </File_Group> <File_Group name="XmlTest_xsds" > <File path="../XmlTest_xsds/XmlTest_boolean.xsd" /> <File path="../XmlTest_xsds/XmlTest_boolean_withTypeAndBase.xsd" /> - <File path="../XmlTest_xsds/XmlTest_decimal.xsd" /> + <File path="../XmlTest_xsds/XmlTest_decimal.xsd" /> <File path="../XmlTest_xsds/XmlTest_decimal_withMinMaxExclusive.xsd" /> <File path="../XmlTest_xsds/XmlTest_decimal_withMinMaxInclusive.xsd" /> <File path="../XmlTest_xsds/XmlTest_string.xsd" /> @@ -219,6 +281,68 @@ <File path="../XmlTest_expectedTtcns/www_XmlTest_org_annotation_c_e.ttcn" /> <File path="../XmlTest_expectedTtcns/www_XmlTest_org_annotation_e_e.ttcn" /> <File path="../XmlTest_expectedTtcns/www_XmlTest_org_annotation_t_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/name_conversion_extension_attrib_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/nillable_annotations_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/http_www_example_org_seq_embeds_seq_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/attribute_in_extension_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/http_www_example_org_wildcards_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/http_www_example_org_complex_restriction_with_use_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/www_example_org_name_conv_http_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/http_www_example_org_name_conv2_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/http_www_example_org_name_conv3_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/www_example_org_enum_field_names_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/www_example_org_enumeration_restriction_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/www_example_org_import_prefix_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/www_example_org_imported_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/www_example_org_not_a_number_minex_inf_maxex_inf_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/www_example_org_id_attrib_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/www_example_org_decimal_fractiondigits_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/www_example_org_boolean_variant_commented_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/www_example_org_type_attributegroup_nillable_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/www_example_org_comment_placement_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/www_example_org_complex_nillable_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/www_example_org_unnamed_union_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/www_example_org_seq_enumeration_restriction_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/www_example_org_seq_group_reference_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/www_example_org_simpletype_restrict_comp_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/www_example_org_type_conversion_follow_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/http_www_example_org_nillable_in_nillable_extension_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/www_example_org_qualified_element_attrib_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/www_example_org_unqualified_element_attrib_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/www_example_org_attr_ext_rest_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/www_example_org_anyattrib_single_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/www_example_org_attrib_order_a_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/www_example_org_attrib_order_b_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/NoTargetNamespace.ttcn" /> + <File path="../XmlTest_expectedTtcns/www_example_org_fixed_value_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/www_example_org_self_recursion_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/www_example_org_enumeration_remove_dup_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/www_example_org_nillable_fixed_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/www_example_org_simpletype_ref_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/www_example_org_namespaceas_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/www_example_org_imported2_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/www_example_org_long_extension_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/www_example_org_xml_in_annotation_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/imported_module_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/imported_module_1_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/MyTypes_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/module_typename_conversion_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/www_example_org_all_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/www_example_org_substitutiongroup_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/www_example_org_substitutiongroup_abstract_block_1_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/www_example_org_substitutiongroup_abstract_block_2_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/www_example_org_substitutiongroup_complex_without_element_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/www_example_org_substitutiongroup_long_extension_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/www_example_org_generate_element_substitution_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/www_example_org_dont_generate_element_substitution_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/www_example_org_list_simpletype_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/www_example_org_no_ns_connector_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/www_example_org_anyattr_in_complex_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/www_example_org_attribgroup_ingroup_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/www_example_org_attrib_enum_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/www_example_org_substitutiongroup_ref_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/www_example_org_substitutiongroup_main_e.ttcn" /> + <File path="../XmlTest_expectedTtcns/www_example_org_simpletype_base_e.ttcn" /> </File_Group> <File_Group name="XmlTest_src" > <File path="xmlTest_Shell.ttcn" /> diff --git a/regression_test/XML/XmlWorkflow/src/xmlTest_Functions_complex.ttcn b/regression_test/XML/XmlWorkflow/src/xmlTest_Functions_complex.ttcn index 95baf14f8..661a173fc 100644 --- a/regression_test/XML/XmlWorkflow/src/xmlTest_Functions_complex.ttcn +++ b/regression_test/XML/XmlWorkflow/src/xmlTest_Functions_complex.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/src/xmlTest_Functions_complex1.ttcn b/regression_test/XML/XmlWorkflow/src/xmlTest_Functions_complex1.ttcn index 7ea23d323..978b3d9ca 100644 --- a/regression_test/XML/XmlWorkflow/src/xmlTest_Functions_complex1.ttcn +++ b/regression_test/XML/XmlWorkflow/src/xmlTest_Functions_complex1.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/src/xmlTest_Functions_complex2.ttcn b/regression_test/XML/XmlWorkflow/src/xmlTest_Functions_complex2.ttcn index 49c711e3a..e6fd53899 100644 --- a/regression_test/XML/XmlWorkflow/src/xmlTest_Functions_complex2.ttcn +++ b/regression_test/XML/XmlWorkflow/src/xmlTest_Functions_complex2.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/src/xmlTest_Functions_element.ttcn b/regression_test/XML/XmlWorkflow/src/xmlTest_Functions_element.ttcn index ff0a7468e..9a79cafef 100644 --- a/regression_test/XML/XmlWorkflow/src/xmlTest_Functions_element.ttcn +++ b/regression_test/XML/XmlWorkflow/src/xmlTest_Functions_element.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 @@ -604,9 +604,9 @@ function f_encDecTest_IndividualTrigger1() { },vl_decodedPdu; // var octetstring vl_expectedEncodedPdu:=char2oct("<ns:individualTrigger xmlns:ns='urn:XmlTest.imsike' triggerDescriptionA='myTriggerDescriptionAttr'>\n\t<triggerDescription>TriggerDescription</triggerDescription>\n</ns:individualTrigger>\n\n"); var octetstring vl_expectedEncodedPdu:=char2oct( - "<ns:individualTrigger xmlns:ns='urn:XmlTest.imsike' triggerDescriptionA='myTriggerDescriptionAttr'>\n\t" & - "<ns:triggerDescription>TriggerDescription</ns:triggerDescription>\n" & - "</ns:individualTrigger>\n\n"); + "<ns50:individualTrigger xmlns:ns50='urn:XmlTest.imsike' triggerDescriptionA='myTriggerDescriptionAttr'>\n\t" & + "<ns50:triggerDescription>TriggerDescription</ns50:triggerDescription>\n" & + "</ns50:individualTrigger>\n\n"); var octetstring vl_stream:=''O; f_enc_IndividualTrigger(vl_pdu,vl_stream); @@ -658,7 +658,7 @@ function f_encDecTest_IndividualTrigger2() { content:=omit },vl_decodedPdu; var octetstring vl_expectedEncodedPdu:=char2oct( - "<ns:individualTrigger xmlns:ns='urn:XmlTest.imsike' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' triggerDescriptionA='myTriggerDescriptionAttr' xsi:nil='true'/>\n\n"); + "<ns50:individualTrigger xmlns:ns50='urn:XmlTest.imsike' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' triggerDescriptionA='myTriggerDescriptionAttr' xsi:nil='true'/>\n\n"); var octetstring vl_stream:=''O; f_enc_IndividualTrigger(vl_pdu,vl_stream); @@ -714,11 +714,11 @@ function f_encDecTest_Isp1() { }, vl_decodedPdu; var octetstring vl_expectedEncodedPdu:=char2oct( - "<ns:isp xmlns:ns='urn:XmlTest.imsike'>\n\t"& - "<ns:individualTrigger triggerDescriptionA='myTriggerDescriptionAttr'>\n\t\t" & - "<ns:triggerDescription>MyTriggerDescription</ns:triggerDescription>\n\t"& - "</ns:individualTrigger>\n"& - "</ns:isp>\n\n"); + "<ns50:isp xmlns:ns50='urn:XmlTest.imsike'>\n\t"& + "<ns50:individualTrigger triggerDescriptionA='myTriggerDescriptionAttr'>\n\t\t" & + "<ns50:triggerDescription>MyTriggerDescription</ns50:triggerDescription>\n\t"& + "</ns50:individualTrigger>\n"& + "</ns50:isp>\n\n"); var octetstring vl_stream:=''O; f_enc_Isp(vl_pdu,vl_stream); @@ -776,9 +776,9 @@ function f_encDecTest_Isp2() { }, vl_decodedPdu; var octetstring vl_expectedEncodedPdu:=char2oct( - "<ns:isp xmlns:ns='urn:XmlTest.imsike' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>\n\t"& - "<ns:individualTrigger triggerDescriptionA='myTriggerDescriptionAttr' xsi:nil='true'/>\n"& - "</ns:isp>\n\n"); + "<ns50:isp xmlns:ns50='urn:XmlTest.imsike' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>\n\t"& + "<ns50:individualTrigger triggerDescriptionA='myTriggerDescriptionAttr' xsi:nil='true'/>\n"& + "</ns50:isp>\n\n"); var octetstring vl_stream:=''O; f_enc_Isp(vl_pdu,vl_stream); @@ -831,9 +831,9 @@ function f_encDecTest_RemarkNillable1() { }, vl_decodedPdu; var octetstring vl_expectedEncodedPdu:=char2oct( - "<ns:remarkNillable xmlns:ns='urn:XmlTest.imsike'>"& + "<ns50:remarkNillable xmlns:ns50='urn:XmlTest.imsike'>"& "MyRemarkNillable" & - "</ns:remarkNillable>\n\n"); + "</ns50:remarkNillable>\n\n"); var octetstring vl_stream:=''O; f_enc_RemarkNillable(vl_pdu,vl_stream); @@ -885,7 +885,7 @@ function f_encDecTest_RemarkNillable2() { }, vl_decodedPdu; var octetstring vl_expectedEncodedPdu:=char2oct( - "<ns:remarkNillable xmlns:ns='urn:XmlTest.imsike' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:nil='true'/>\n\n"); + "<ns50:remarkNillable xmlns:ns50='urn:XmlTest.imsike' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:nil='true'/>\n\n"); var octetstring vl_stream:=''O; f_enc_RemarkNillable(vl_pdu,vl_stream); diff --git a/regression_test/XML/XmlWorkflow/src/xmlTest_Functions_list.ttcn b/regression_test/XML/XmlWorkflow/src/xmlTest_Functions_list.ttcn index f8c1c77ef..1e319cc0e 100644 --- a/regression_test/XML/XmlWorkflow/src/xmlTest_Functions_list.ttcn +++ b/regression_test/XML/XmlWorkflow/src/xmlTest_Functions_list.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/src/xmlTest_Functions_string.ttcn b/regression_test/XML/XmlWorkflow/src/xmlTest_Functions_string.ttcn index 8537a31c1..8079094b4 100644 --- a/regression_test/XML/XmlWorkflow/src/xmlTest_Functions_string.ttcn +++ b/regression_test/XML/XmlWorkflow/src/xmlTest_Functions_string.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/src/xmlTest_Shell.ttcn b/regression_test/XML/XmlWorkflow/src/xmlTest_Shell.ttcn index 6faabfc38..36e269a18 100644 --- a/regression_test/XML/XmlWorkflow/src/xmlTest_Shell.ttcn +++ b/regression_test/XML/XmlWorkflow/src/xmlTest_Shell.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 @@ -108,6 +108,7 @@ const integer c_shell_error_noSuchFileOrDirectory:=512; // Script counts the strings "\n" thus N different lines mean N-1 numOfDiff //Possible values: 19,21,23,25 but 21 and 25 should be eliminated! +const integer c_numOfDiff_header := 11; const integer c_numOfDiff_headerAndModuleName := 19; const integer c_numOfDiff_headerModNameAndNamespace := 23; const integer c_numOfDiff_headerModNameAndImport := 23; diff --git a/regression_test/XML/XmlWorkflow/src/xmlTest_Testcases.ttcn b/regression_test/XML/XmlWorkflow/src/xmlTest_Testcases.ttcn index 32cc56575..c968830c1 100644 --- a/regression_test/XML/XmlWorkflow/src/xmlTest_Testcases.ttcn +++ b/regression_test/XML/XmlWorkflow/src/xmlTest_Testcases.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 @@ -158,7 +158,7 @@ testcase tc_xsd2ttcn_versionTest() runs on xmlTest_CT //simple records testcase tc_firstTrial() runs on xmlTest_CT { - f_shellCommandWithVerdict("xsd2ttcn elements.xsd","",c_shell_successWithWarning) + f_shellCommandWithVerdict("xsd2ttcn elements.xsd","",c_shell_successWithoutWarningAndError) } // see http://www.w3.org/TR/xmlschema-0/ 2.1 The Purchase Order Schema @@ -179,7 +179,7 @@ testcase tc_empty() runs on xmlTest_CT testcase tc_annotation() runs on xmlTest_CT { - f_shellCommandWithVerdict("xsd2ttcn XmlTest_annotation.xsd","",c_shell_successWithoutWarningAndError); + f_shellCommandWithVerdict("xsd2ttcn XmlTest_annotation.xsd","",c_shell_successWithWarning); if(getverdict==pass) { f_compareFiles( "www_XmlTest_org_annotation_e.ttcn","www_XmlTest_org_annotation.ttcn", c_numOfDiff_headerModNameAndNamespace); @@ -196,6 +196,15 @@ testcase tc_annotation2() runs on xmlTest_CT f_shellCommandWithVerdict("xsd2ttcn XmlTest_annotation2.xsd","",c_shell_error); } +testcase tc_xml_in_annotation() runs on xmlTest_CT +{ + f_shellCommandWithVerdict("xsd2ttcn xml_in_annotation.xsd","",c_shell_successWithoutWarningAndError); + if(getverdict==pass) { + f_compareFiles( + "www_example_org_xml_in_annotation_e.ttcn","www_example_org_xml_in_annotation.ttcn", c_numOfDiff_headerModNameAndNamespace); + } +} + //Incorrect version: 1.1 testcase tc_version() runs on xmlTest_CT { @@ -223,7 +232,7 @@ testcase tc_version() runs on xmlTest_CT //TODO:Not ready yet testcase tc_options_c() runs on xmlTest_CT { - f_shellCommandWithVerdict("xsd2ttcn -c XmlTest_annotation.xsd","",c_shell_successWithoutWarningAndError ); + f_shellCommandWithVerdict("xsd2ttcn -c XmlTest_annotation.xsd","",c_shell_successWithWarning ); if(getverdict==pass) { f_compareFiles("www_XmlTest_org_annotation_c_e.ttcn","www_XmlTest_org_annotation.ttcn", c_numOfDiff_headerModNameAndNamespace); } @@ -232,7 +241,7 @@ testcase tc_options_c() runs on xmlTest_CT // -e: disable the generation of encoding instructions in TTCN-3 modules testcase tc_options_e() runs on xmlTest_CT { - f_shellCommandWithVerdict("xsd2ttcn -e XmlTest_annotation.xsd","",c_shell_successWithoutWarningAndError ); + f_shellCommandWithVerdict("xsd2ttcn -e XmlTest_annotation.xsd","",c_shell_successWithWarning ); if(getverdict==pass) { f_compareFiles("www_XmlTest_org_annotation_e_e.ttcn","www_XmlTest_org_annotation.ttcn", c_numOfDiff_headerModNameAndNamespace); } @@ -241,12 +250,27 @@ testcase tc_options_e() runs on xmlTest_CT // -f file: the XSD files are taken from file instead of the command line testcase tc_options_f() runs on xmlTest_CT { - f_shellCommandWithVerdict("xsd2ttcn -f XmlTest_files1.txt","",c_shell_successWithoutWarningAndError ); + f_shellCommandWithVerdict("xsd2ttcn -f XmlTest_files1.txt","",c_shell_successWithWarning ); if(getverdict==pass) { f_compareFiles("www_XmlTest_org_annotation_e.ttcn","www_XmlTest_org_annotation.ttcn", c_numOfDiff_headerModNameAndNamespace); } } +testcase tc_options_g() runs on xmlTest_CT +{ + f_shellCommandWithVerdict("xsd2ttcn -g dont_generate_element_substitution.xsd","",c_shell_successWithoutWarningAndError ); + if(getverdict==pass) { + f_compareFiles("www_example_org_dont_generate_element_substitution_e.ttcn", + "www_example_org_dont_generate_element_substitution.ttcn", c_numOfDiff_headerModNameAndNamespace); + } + + f_shellCommandWithVerdict("xsd2ttcn generate_element_substitution.xsd","",c_shell_successWithoutWarningAndError ); + if(getverdict==pass) { + f_compareFiles("www_example_org_generate_element_substitution_e.ttcn", + "www_example_org_generate_element_substitution.ttcn", c_numOfDiff_headerModNameAndNamespace); + } +} + //TODO: more filename in XmlTest_files2.txt // testcase tc_options_f() runs on xmlTest_CT // { @@ -263,7 +287,7 @@ testcase tc_options_p() runs on xmlTest_CT f_shellCommandWithVerdict("mv XSD.ttcn tmp_XSD.ttcn","",c_shell_successWithoutWarningAndError ); f_shellCommandWithVerdict("mv UsefulTtcn3Types.ttcn tmp_UsefulTtcn3Types.ttcn","",c_shell_successWithoutWarningAndError ); - f_shellCommandWithVerdict("xsd2ttcn -p XmlTest_annotation.xsd","",c_shell_successWithoutWarningAndError ); + f_shellCommandWithVerdict("xsd2ttcn -p XmlTest_annotation.xsd","",c_shell_successWithWarning ); if(getverdict==pass) { f_shellCommandWithVerdict("ls www_XmlTest_org_annotation.ttcn", "",c_shell_successWithoutWarningAndError); f_shellCommandWithVerdict("ls XSD.ttcn", "",c_shell_error_noSuchFileOrDirectory ); @@ -300,7 +324,7 @@ testcase tc_options_s() runs on xmlTest_CT // -t: disable the generation of timing information in TTCN-3 modules testcase tc_options_t() runs on xmlTest_CT { - f_shellCommandWithVerdict("xsd2ttcn -t XmlTest_annotation.xsd","",c_shell_successWithoutWarningAndError ); + f_shellCommandWithVerdict("xsd2ttcn -t XmlTest_annotation.xsd","",c_shell_successWithWarning ); if(getverdict==pass) { f_compareFiles("www_XmlTest_org_annotation_t_e.ttcn","www_XmlTest_org_annotation.ttcn", c_numOfDiff_headerModNameAndNamespace); } @@ -317,7 +341,7 @@ testcase tc_options_v() runs on xmlTest_CT // -q: quiet - disable the issue of status messages testcase tc_options_V() runs on xmlTest_CT { - f_shellCommandWithVerdict("xsd2ttcn -q XmlTest_annotation.xsd","",c_shell_successWithoutWarningAndError ); + f_shellCommandWithVerdict("xsd2ttcn -q XmlTest_annotation.xsd","",c_shell_successWithWarning); } //TODO:Not ready yet @@ -331,7 +355,7 @@ testcase tc_options_w() runs on xmlTest_CT // -x: disable schema validation but generate TTCN-3 modules testcase tc_options_x() runs on xmlTest_CT { - f_shellCommandWithVerdict("xsd2ttcn -x XmlTest_annotation.xsd","",c_shell_successWithoutWarningAndError ); + f_shellCommandWithVerdict("xsd2ttcn -x XmlTest_annotation.xsd","",c_shell_successWithWarning); } testcase tc_options_wrong() runs on xmlTest_CT @@ -364,12 +388,21 @@ group Testcases_basedOnTtcnStandard9 { testcase tc_XmlTest_all() runs on xmlTest_CT { f_shellCommandWithVerdict("xsd2ttcn all.xsd","",c_shell_successWithoutWarningAndError); + if(getverdict==pass) { + f_compareFiles( + "www_example_org_all_e.ttcn","www_example_org_all.ttcn", c_numOfDiff_headerAndModuleName); + } + } + + testcase tc_element_in_all_neg() runs on xmlTest_CT + { + f_shellCommandWithVerdict("xsd2ttcn element_in_all_minmax.xsd","",c_shell_error); } //Passed testcase tc_XmlTest_any_anyAttribute() runs on xmlTest_CT { - f_shellCommandWithVerdict("xsd2ttcn any_anyAttribute.xsd","",c_shell_successWithoutWarningAndError); + f_shellCommandWithVerdict("xsd2ttcn any_anyAttribute.xsd","",c_shell_successWithWarning); } //HQ73011 @@ -384,6 +417,34 @@ group Testcases_basedOnTtcnStandard9 { } } + testcase tc_anyattribute_optional() runs on xmlTest_CT + { + f_shellCommandWithVerdict("xsd2ttcn anyattribute_optional.xsd","",c_shell_successWithoutWarningAndError); + if(getverdict==pass) { + f_compareFiles( + "http_www_example_org_wildcards_e.ttcn","http_www_example_org_wildcards.ttcn", c_numOfDiff_headerAndModuleName); + } + } + + testcase tc_anyattribute_single() runs on xmlTest_CT + { + f_shellCommandWithVerdict("xsd2ttcn anyattrib_single.xsd","",c_shell_successWithoutWarningAndError); + if(getverdict==pass) { + f_compareFiles( + "www_example_org_anyattrib_single_e.ttcn","www_example_org_anyattrib_single.ttcn", c_numOfDiff_headerAndModuleName); + } + } + + testcase tc_anyattribute_in_complex() runs on xmlTest_CT + { + f_shellCommandWithVerdict("xsd2ttcn anyattr_in_complex.xsd","",c_shell_successWithoutWarningAndError); + if(getverdict==pass) { + f_compareFiles( + "www_example_org_anyattr_in_complex_e.ttcn","www_example_org_anyattr_in_complex.ttcn", c_numOfDiff_headerModNameAndNamespace); + } + } + + //Passed testcase tc_XmlTest_attributeGroup() runs on xmlTest_CT { @@ -396,6 +457,98 @@ group Testcases_basedOnTtcnStandard9 { f_shellCommandWithVerdict("xsd2ttcn attribute_use_noTNS.xsd","",c_shell_error); } + testcase tc_id_attribute() runs on xmlTest_CT + { + f_shellCommandWithVerdict("xsd2ttcn id_attrib.xsd","",c_shell_successWithWarning); + if(getverdict==pass) { + f_compareFiles( + "www_example_org_id_attrib_e.ttcn", "www_example_org_id_attrib.ttcn", c_numOfDiff_headerAndModuleName); + } + } + + testcase tc_attribute_order() runs on xmlTest_CT + { + f_shellCommandWithVerdict("xsd2ttcn attrib_order_a.xsd attrib_order_b.xsd attrib_order_c.xsd","",c_shell_successWithoutWarningAndError); + if(getverdict==pass) { + f_compareFiles( + "www_example_org_attrib_order_a_e.ttcn", "www_example_org_attrib_order_a.ttcn", c_numOfDiff_headerAndModuleName); + } + + if(getverdict==pass) { + f_compareFiles( + "www_example_org_attrib_order_b_e.ttcn", "www_example_org_attrib_order_b.ttcn", c_numOfDiff_headerAndModuleName); + } + } + + testcase tc_name_conv_non_alphanumeric() runs on xmlTest_CT + { + f_shellCommandWithVerdict("xsd2ttcn name_conv_non_alphanumeric.xsd","",c_shell_successWithoutWarningAndError); + if(getverdict==pass) { + f_compareFiles( + "http_www_example_org_name_conv2_e.ttcn", + "http_www_example_org_name_conv2.ttcn", c_numOfDiff_headerAndModuleName); + } + } + + testcase tc_module_name_convert_with_diff_namespace() runs on xmlTest_CT { + f_shellCommandWithVerdict("xsd2ttcn imported_module.xsd imported_module_.xsd","",c_shell_successWithoutWarningAndError); + + if(getverdict==pass) { + f_compareFiles( + "imported_module_e.ttcn","imported_module.ttcn", c_numOfDiff_headerAndModuleName); + } + + if(getverdict==pass) { + f_compareFiles( + "imported_module_1_e.ttcn","imported_module_1.ttcn", c_numOfDiff_headerAndModuleName); + } + }//tc_ + + testcase tc_module_typename_conversion() runs on xmlTest_CT { + f_shellCommandWithVerdict("xsd2ttcn module_typename_conversion.xsd module_typename_conversion_1.xsd","",c_shell_successWithoutWarningAndError); + + if(getverdict==pass) { + f_compareFiles( + "module_typename_conversion_e.ttcn","module_typename_conversion.ttcn", c_numOfDiff_headerAndModuleName); + } + + if(getverdict==pass) { + f_compareFiles( + "MyTypes_e.ttcn","MyTypes.ttcn", c_numOfDiff_headerAndModuleName); + } + }//tc_ + + testcase tc_name_conv_remove_seq_of_low_line() runs on xmlTest_CT + { + f_shellCommandWithVerdict("xsd2ttcn name_conv_remove_seq_of_low_line.xsd","", + c_shell_successWithoutWarningAndError); + if(getverdict==pass) { + f_compareFiles( + "http_www_example_org_name_conv3_e.ttcn", + "http_www_example_org_name_conv3.ttcn", c_numOfDiff_headerAndModuleName); + } + } + + testcase tc_name_conv_with_z() runs on xmlTest_CT + { + f_shellCommandWithVerdict("xsd2ttcn -z name_conv_with_z.xsd","",c_shell_successWithoutWarningAndError); + if(getverdict==pass) { + f_compareFiles( + "www_example_org_name_conv_http_e.ttcn", + "www_example_org_name_conv_http.ttcn", c_numOfDiff_headerAndModuleName); + } + } + + testcase tc_comment_placement() runs on xmlTest_CT + { + f_shellCommandWithVerdict("xsd2ttcn comment_placement.xsd","",c_shell_successWithoutWarningAndError); + if(getverdict==pass) { + f_compareFiles( + "www_example_org_comment_placement_e.ttcn", + "www_example_org_comment_placement.ttcn", c_numOfDiff_headerAndModuleName); + } + } + }//group //************************************ @@ -486,7 +639,17 @@ group StringTest { //Passed testcase tc_string_withFixedLength() runs on xmlTest_CT { - f_shellCommandWithVerdict("xsd2ttcn XmlTest_string_withFixedLength.xsd","",c_shell_error) + f_shellCommandWithVerdict("xsd2ttcn XmlTest_string_withFixedLength.xsd","",c_shell_error); + } + + testcase tc_fixed_value() runs on xmlTest_CT + { + f_shellCommandWithVerdict("xsd2ttcn fixed_value.xsd","",c_shell_successWithWarning); + if(getverdict==pass) { + f_compareFiles( + "www_example_org_fixed_value.ttcn", + "www_example_org_fixed_value_e.ttcn", c_numOfDiff_headerAndModuleName); + } } //Passed @@ -557,6 +720,15 @@ group StringTest { { f_shellCommandWithVerdict("xsd2ttcn XmlTest_string_withTypeAndBase.xsd","",c_shell_error) } + + //testcase tc_string_pattern_square_brackets() runs on xmlTest_CT + //{ + // f_shellCommandWithVerdict("xsd2ttcn regex_square_brackets.xsd","",c_shell_successWithoutWarningAndError); + // if(getverdict==pass) { + // f_compareFiles( + // "www_example_org_regex_square_brackets_e.ttcn","www_example_org_regex_square_brackets.ttcn", c_numOfDiff_headerAndModuleName); + // } + //} }//StringTest //****************************** @@ -572,6 +744,15 @@ group BooleanTest { "www_XmlTest_org_boolean_e.ttcn","www_XmlTest_org_boolean.ttcn", c_numOfDiff_headerAndModuleName); } } + + testcase tc_boolean_variant_commented() runs on xmlTest_CT { + f_shellCommandWithVerdict("xsd2ttcn boolean_variant_commented.xsd","",c_shell_successWithoutWarningAndError) + if(getverdict==pass) { + f_compareFiles( + "www_example_org_boolean_variant_commented_e.ttcn", + "www_example_org_boolean_variant_commented.ttcn", c_numOfDiff_headerAndModuleName); + } + } }//BooleanTest @@ -633,6 +814,16 @@ group DecimalTest { "www_XmlTest_org_decimal_withEnum.ttcn", c_numOfDiff_headerAndModuleName); } } + + testcase tc_decimal_fractiondigits() runs on xmlTest_CT { + f_shellCommandWithVerdict("xsd2ttcn decimal_fractiondigits.xsd","",c_shell_successWithWarning) + + if(getverdict==pass) { + f_compareFiles( + "www_example_org_decimal_fractiondigits_e.ttcn", + "www_example_org_decimal_fractiondigits.ttcn", c_numOfDiff_headerAndModuleName); + } + } }//DecimalTest //****************************** @@ -717,6 +908,17 @@ group IntegerTest { }//IntegerTest + + testcase tc_float_not_a_number() runs on xmlTest_CT { + f_shellCommandWithVerdict("xsd2ttcn not_a_number_minex_inf_maxex_-inf.xsd","",c_shell_successWithoutWarningAndError) + + if(getverdict==pass) { + f_compareFiles( + "www_example_org_not_a_number_minex_inf_maxex_inf_e.ttcn", + "www_example_org_not_a_number_minex_inf_maxex_inf.ttcn", c_numOfDiff_headerAndModuleName); + } + }//tc_ + // testcase tc_simpleType_enum() runs on xmlTest_CT { @@ -729,6 +931,51 @@ group IntegerTest { }//tc_ + testcase tc_simpleType_restrict_comp() runs on xmlTest_CT { + + f_shellCommandWithVerdict("xsd2ttcn simpletype_restrict_comp.xsd","",c_shell_successWithoutWarningAndError) + + if(getverdict==pass) { + f_compareFiles( + "www_example_org_simpletype_restrict_comp_e.ttcn","www_example_org_simpletype_restrict_comp.ttcn", c_numOfDiff_headerAndModuleName); + } + + }//tc_ + + testcase tc_simpleType_ref() runs on xmlTest_CT { + + f_shellCommandWithVerdict("xsd2ttcn simpletype_ref.xsd","",c_shell_successWithoutWarningAndError) + + if(getverdict==pass) { + f_compareFiles( + "www_example_org_simpletype_ref_e.ttcn","www_example_org_simpletype_ref.ttcn", c_numOfDiff_headerAndModuleName); + } + + }//tc_ + + testcase tc_simpleType_base() runs on xmlTest_CT { + + f_shellCommandWithVerdict("xsd2ttcn simpletype_base.xsd","",c_shell_successWithoutWarningAndError) + + if(getverdict==pass) { + f_compareFiles( + "www_example_org_simpletype_base_e.ttcn","www_example_org_simpletype_base.ttcn", c_numOfDiff_headerAndModuleName); + } + + }//tc_ + + // + testcase tc_enum_field_names() runs on xmlTest_CT { + + f_shellCommandWithVerdict("xsd2ttcn enum_field_names.xsd","",c_shell_successWithoutWarningAndError) + + if(getverdict==pass) { + f_compareFiles( + "www_example_org_enum_field_names_e.ttcn","www_example_org_enum_field_names.ttcn", c_numOfDiff_headerAndModuleName); + } + + }//tc_ + //****************************** // TimeTest @@ -785,6 +1032,17 @@ group ListTest { } }//tc_ + + testcase tc_list_simpletype() runs on xmlTest_CT { + + f_shellCommandWithVerdict("xsd2ttcn list_simpletype.xsd","",c_shell_successWithoutWarningAndError) + + if(getverdict==pass) { + f_compareFiles( + "www_example_org_list_simpletype_e.ttcn","www_example_org_list_simpletype.ttcn", c_numOfDiff_headerAndModuleName); + } + + }//tc_ }//ListTest group UnionTest { @@ -809,6 +1067,39 @@ group UnionTest { } } + testcase tc_enumeration_union_restriction() runs on xmlTest_CT { + + f_shellCommandWithVerdict("xsd2ttcn enumeration_restriction.xsd","",c_shell_successWithWarning) + + if(getverdict==pass) { + f_compareFiles( + "www_example_org_enumeration_restriction_e.ttcn", + "www_example_org_enumeration_restriction.ttcn", c_numOfDiff_headerAndModuleName); + } + } + + testcase tc_enumeration_union_restriction2() runs on xmlTest_CT { + + f_shellCommandWithVerdict("xsd2ttcn enumeration_restriction2.xsd","",c_shell_successWithoutWarningAndError) + + if(getverdict==pass) { + f_compareFiles( + "www_example_org_seq_enumeration_restriction_e.ttcn", + "www_example_org_seq_enumeration_restriction.ttcn", c_numOfDiff_headerAndModuleName); + } + } + + testcase tc_enumeration_remove_dup() runs on xmlTest_CT { + + f_shellCommandWithVerdict("xsd2ttcn enumeration_remove_dup.xsd","",c_shell_successWithoutWarningAndError) + + if(getverdict==pass) { + f_compareFiles( + "www_example_org_enumeration_remove_dup_e.ttcn", + "www_example_org_enumeration_remove_dup.ttcn", c_numOfDiff_headerAndModuleName); + } + } + }//UnionTest @@ -853,6 +1144,18 @@ group ComplexType { } }//tc_ + testcase tc_complex_namespaceas() runs on xmlTest_CT { + + f_shellCommandWithVerdict("xsd2ttcn namespaceas.xsd imported2.xsd","",c_shell_successWithoutWarningAndError) + + if(getverdict==pass) { + f_compareFiles( + "www_example_org_namespaceas_e.ttcn","www_example_org_namespaceas.ttcn", c_numOfDiff_headerAndModuleName); + f_compareFiles( + "www_example_org_imported2_e.ttcn","www_example_org_imported2.ttcn", c_numOfDiff_headerAndModuleName); + } + }//tc_ + testcase tc_complex_mixed_conv() runs on xmlTest_CT { f_shellCommandWithVerdict("xsd2ttcn XmlTest_complex_mixed.xsd","",c_shell_successWithoutWarningAndError) @@ -863,15 +1166,35 @@ group ComplexType { } }//tc_ + testcase tc_complex_group_reference() runs on xmlTest_CT { + + f_shellCommandWithVerdict("xsd2ttcn seq_group_reference.xsd","",c_shell_successWithoutWarningAndError) + + if(getverdict==pass) { + f_compareFiles( + "www_example_org_seq_group_reference_e.ttcn","www_example_org_seq_group_reference.ttcn", c_numOfDiff_headerAndModuleName); + } + }//tc_ + //TR:HL29258 testcase tc_complex_mixed_encDec() runs on xmlTest_CT { f_encDecTest_ComplexTypeWithMixed(); }//tc_ + testcase tc_complex_seq_embeds_seq() runs on xmlTest_CT { + + f_shellCommandWithVerdict("xsd2ttcn sequence_embeds_sequence.xsd","",c_shell_successWithoutWarningAndError) + + if(getverdict==pass) { + f_compareFiles( + "http_www_example_org_seq_embeds_seq_e.ttcn","http_www_example_org_seq_embeds_seq.ttcn", c_numOfDiff_headerModNameAndNamespace); + f_encDecTest_InternationalPrice(); + } + }//tc_ testcase tc_complex_choice_converter() runs on xmlTest_CT { - f_shellCommandWithVerdict("xsd2ttcn XmlTest_complex_choice.xsd","",c_shell_successWithoutWarningAndError) + f_shellCommandWithVerdict("xsd2ttcn XmlTest_complex_choice.xsd","",c_shell_successWithWarning) if(getverdict==pass) { f_compareFiles( @@ -960,16 +1283,13 @@ group ComplexType { //positive testcase for group "all". The type has no optional field (element).The input is correct testcase tc_complex_all_noOptional_pos_encDec() runs on xmlTest_CT { var MySubjects2 vl_pdu:= { + order:={math,english,chemistry, physics,history}, year:="2009", - subject:= { - order:={math,english,chemistry, physics,history}, - - english:="Advanced Group 1", - math:="Beginners 1", - physics:="Mechanics 1", - chemistry:="CH2", - history:="H1" - } + english:="Advanced Group 1", + math:="Beginners 1", + physics:="Mechanics 1", + chemistry:="CH2", + history:="H1" } var charstring vl_expectedEncodedPdu:= "<MySubjects2 Year='2009'>\n\t<Math>Beginners 1</Math>\n\t<English>Advanced Group 1</English>\n\t<Chemistry>CH2</Chemistry>\n\t<Physics>Mechanics 1</Physics>\n\t<History>H1</History>\n</MySubjects2>\n\n"; @@ -981,26 +1301,22 @@ group ComplexType { //Passed, TR: HL32978 testcase tc_complex_all_noOptional_neg1_encDec() runs on xmlTest_CT { var MySubjects2 vl_pdu:= { + order:={math,english,chemistry, physics,history}, year:="2009", - subject:= { - order:={math,english,chemistry, physics,history}, - english:="Advanced Group 1", - math:="Beginners 1", - physics:="Mechanics 1", - chemistry:="CH2" - //history:="H1" - } + english:="Advanced Group 1", + math:="Beginners 1", + physics:="Mechanics 1", + chemistry:="CH2" + //history:="H1" } var MySubjects2 vl_expectedDecodedPdu:= { + order:={math,english,chemistry, physics,history}, year:="2009", - subject:= { - order:={math,english,chemistry, physics,history}, - english:="Advanced Group 1", - math:="Beginners 1", - physics:="Mechanics 1", - chemistry:="CH2", - history:="" - } + english:="Advanced Group 1", + math:="Beginners 1", + physics:="Mechanics 1", + chemistry:="CH2", + history:="" } var charstring vl_expectedEncodedPdu:="<MySubjects2 Year='2009'>\n\t<Math>Beginners 1</Math>\n\t<English>Advanced Group 1</English>\n\t<Chemistry>CH2</Chemistry>\n\t<Physics>Mechanics 1</Physics>\n\t<History/>\n</MySubjects2>\n\n" f_encDecTest_ComplexTypeWithAll_MySubject2(vl_pdu,vl_expectedEncodedPdu,vl_expectedDecodedPdu,0); @@ -1013,26 +1329,22 @@ group ComplexType { //Passed, TR: HL32978 testcase tc_complex_all_noOptional_neg2_encDec() runs on xmlTest_CT { var MySubjects2 vl_pdu:= { + order:={math,english,chemistry, physics}, year:="2009", - subject:= { - order:={math,english,chemistry, physics}, - english:="Advanced Group 1", - math:="Beginners 1", - physics:="Mechanics 1", - chemistry:="CH2" - //history:="H1" - } + english:="Advanced Group 1", + math:="Beginners 1", + physics:="Mechanics 1", + chemistry:="CH2" + //history:="H1" } var MySubjects2 vl_expectedDecodedPdu:= { + order:={math,english,chemistry, physics}, year:="2009", - subject:= { - order:={math,english,chemistry, physics}, - english:="Advanced Group 1", - math:="Beginners 1", - physics:="Mechanics 1", - chemistry:="CH2", - history:="" - } + english:="Advanced Group 1", + math:="Beginners 1", + physics:="Mechanics 1", + chemistry:="CH2", + history:="" } var charstring vl_expectedEncodedPdu:="<MySubjects2 Year='2009'/>\n\n"; //expecting error report!!! //"<MySubjects2 Year='2009'>\n\t<Math>Beginners 1</Math>\n\t<English>Advanced Group 1</English>\n\t<Chemistry>CH2</Chemistry>\n\t<Physics>Mechanics 1</Physics>\n</MySubjects2>\n\n" @@ -1045,15 +1357,13 @@ group ComplexType { //Passed, TR: HL32978 testcase tc_complex_all_noOptional_neg3_encDec() runs on xmlTest_CT { var MySubjects2 vl_pdu:= { + order:={math,english,chemistry,math,math}, year:="2009", - subject:= { - order:={math,english,chemistry,math,math}, - english:="Advanced Group 1", - math:="Beginners 1", - physics:="Mechanics 1", - chemistry:="CH2" - //history:="H1" - } + english:="Advanced Group 1", + math:="Beginners 1", + physics:="Mechanics 1", + chemistry:="CH2" + //history:="H1" } var charstring vl_expectedEncodedPdu:="<MySubjects2 Year='2009'/>\n\n"; //expecting error report!!! //"<MySubjects2 Year='2009'>\n\t<Math>Beginners 1</Math>\n\t<English>Advanced Group 1</English>\n\t<Chemistry>CH2</Chemistry>\n\t<Physics>Mechanics 1</Physics>\n</MySubjects2>\n\n" @@ -1070,15 +1380,13 @@ group ComplexType { //Passed, TR: HL32978 testcase tc_complex_all_noOptional_empty_encDec() runs on xmlTest_CT { var MySubjects2 vl_pdu:= { - year:="2009", - subject:= { - order:={ } - //english:="Advanced Group 1", - //math:="Beginners 1", - //physics:="Mechanics 1", - //chemistry:="CH2" - //history:="H1" - } + order:={ }, + year:="2009" + //english:="Advanced Group 1", + //math:="Beginners 1", + //physics:="Mechanics 1", + //chemistry:="CH2" + //history:="H1" } var charstring vl_expectedEncodedPdu:="<MySubjects2 Year='2009'/>\n\n"; //expecting error report!!! f_encDecTest_ComplexTypeWithAll_MySubject2(vl_pdu,vl_expectedEncodedPdu,vl_pdu,1); @@ -1108,6 +1416,69 @@ group ComplexType { } }//tc_ + testcase tc_complex_extension_name_attrib_convert() runs on xmlTest_CT { + f_shellCommandWithVerdict("xsd2ttcn name_conversion_extension_attrib.xsd","",c_shell_successWithoutWarningAndError) + + if(getverdict==pass) { + f_compareFiles( + "name_conversion_extension_attrib_e.ttcn","name_conversion_extension_attrib.ttcn", c_numOfDiff_headerAndModuleName); + } + }//tc_ + + testcase tc_complex_long_extension() runs on xmlTest_CT { + f_shellCommandWithVerdict("xsd2ttcn long_extension.xsd","",c_shell_successWithoutWarningAndError) + + if(getverdict==pass) { + f_compareFiles( + "www_example_org_long_extension_e.ttcn","www_example_org_long_extension.ttcn", c_numOfDiff_headerAndModuleName); + } + }//tc_ + + testcase tc_complex_self_recursion() runs on xmlTest_CT { + f_shellCommandWithVerdict("xsd2ttcn complex_self_recursion.xsd","",c_shell_successWithoutWarningAndError) + + if(getverdict==pass) { + f_compareFiles( + "www_example_org_self_recursion_e.ttcn","www_example_org_self_recursion.ttcn", c_numOfDiff_headerAndModuleName); + } + }//tc_ + + testcase tc_type_name_conversion_follow() runs on xmlTest_CT { + f_shellCommandWithVerdict("xsd2ttcn type_conversion_follow.xsd","",c_shell_successWithoutWarningAndError) + + if(getverdict==pass) { + f_compareFiles( + "www_example_org_type_conversion_follow_e.ttcn","www_example_org_type_conversion_follow.ttcn", c_numOfDiff_headerAndModuleName); + } + }//tc_ + + testcase tc_complex_extension_with_attrib() runs on xmlTest_CT { + f_shellCommandWithVerdict("xsd2ttcn attribute_in_extension.xsd","",c_shell_successWithoutWarningAndError) + + if(getverdict==pass) { + f_compareFiles( + "attribute_in_extension_e.ttcn","attribute_in_extension.ttcn", c_numOfDiff_headerAndModuleName); + } + }//tc_ + + testcase tc_extension_restriction_with_attrib() runs on xmlTest_CT { + f_shellCommandWithVerdict("xsd2ttcn attrib_restriction_extension.xsd","",c_shell_successWithoutWarningAndError) + + if(getverdict==pass) { + f_compareFiles( + "www_example_org_attr_ext_rest_e.ttcn","www_example_org_attr_ext_rest.ttcn", c_numOfDiff_headerAndModuleName); + } + }//tc_ + + testcase tc_attrib_enum() runs on xmlTest_CT { + f_shellCommandWithVerdict("xsd2ttcn attrib_enum.xsd","",c_shell_successWithoutWarningAndError) + + if(getverdict==pass) { + f_compareFiles( + "www_example_org_attrib_enum_e.ttcn","www_example_org_attrib_enum.ttcn", c_numOfDiff_headerModNameAndNamespace); + } + }//tc_ + testcase tc_complex_extension_encDec() runs on xmlTest_CT { var MySubjects3Extension vl_pdu:={ @@ -1133,6 +1504,47 @@ group ComplexType { } }//tc_ + testcase tc_complex_restriction_with_use() runs on xmlTest_CT { + f_shellCommandWithVerdict("xsd2ttcn complex_restriction_with_use.xsd","",c_shell_successWithoutWarningAndError) + + if(getverdict==pass) { + f_compareFiles( + "http_www_example_org_complex_restriction_with_use_e.ttcn", + "http_www_example_org_complex_restriction_with_use.ttcn", c_numOfDiff_headerAndModuleName); + } + }//tc_ + + testcase tc_complex_nillable() runs on xmlTest_CT { + f_shellCommandWithVerdict("xsd2ttcn complex_nillable.xsd","",c_shell_successWithoutWarningAndError) + + if(getverdict==pass) { + f_compareFiles( + "www_example_org_complex_nillable_e.ttcn", + "www_example_org_complex_nillable.ttcn", c_numOfDiff_headerAndModuleName); + } + }//tc_ + + //Fixed or defaultforempty attribute is not allowed on nillable elements according to TITAN + testcase tc_nillable_fixed() runs on xmlTest_CT { + f_shellCommandWithVerdict("xsd2ttcn nillable_fixed.xsd","",c_shell_successWithoutWarningAndError) + + if(getverdict==pass) { + f_compareFiles( + "www_example_org_nillable_fixed_e.ttcn", + "www_example_org_nillable_fixed.ttcn", c_numOfDiff_headerAndModuleName); + } + }//tc_ + + testcase tc_no_ns_connector() runs on xmlTest_CT { + f_shellCommandWithVerdict("xsd2ttcn no_ns_connector.xsd","",c_shell_successWithWarning) + + if(getverdict==pass) { + f_compareFiles( + "www_example_org_no_ns_connector_e.ttcn", + "www_example_org_no_ns_connector.ttcn", c_numOfDiff_headerModNameAndNamespace); + } + }//tc_ + testcase tc_complex_restriction_encDec() runs on xmlTest_CT { var MySubjects4Restriction vl_pdu:={ @@ -1303,7 +1715,7 @@ group ComplexType { // tc_complex_any_pos_converter //========================================================================= testcase tc_complex_any_pos_converter() runs on xmlTest_CT { - f_shellCommandWithVerdict("xsd2ttcn XmlTest_complex_any.xsd","",c_shell_successWithoutWarningAndError); + f_shellCommandWithVerdict("xsd2ttcn XmlTest_complex_any.xsd","",c_shell_successWithWarning); if(getverdict==pass) { f_compareFiles( @@ -1311,6 +1723,15 @@ group ComplexType { } }//tc_ + testcase tc_imported_type_prefix() runs on xmlTest_CT { + f_shellCommandWithVerdict("xsd2ttcn import_prefix_name.xsd imported_prefix_name.xsd","",c_shell_successWithoutWarningAndError); + + if(getverdict==pass) { + f_compareFiles( + "www_example_org_import_prefix_e.ttcn","www_example_org_import_prefix.ttcn", c_numOfDiff_headerAndModuleName); + } + }//tc_ + //========================================================================= // tc_complex_any_pos1_encDec @@ -1381,6 +1802,26 @@ group Elements{ } }//tc_ + testcase tc_element_attrib_qualified() runs on xmlTest_CT { + + f_shellCommandWithVerdict("xsd2ttcn qualified_element_attrib.xsd","",c_shell_successWithoutWarningAndError) + + if(getverdict==pass) { + f_compareFiles( + "www_example_org_qualified_element_attrib_e.ttcn","www_example_org_qualified_element_attrib.ttcn", c_numOfDiff_headerAndModuleName); + } + }//tc_ + + testcase tc_element_attrib_unqualified() runs on xmlTest_CT { + + f_shellCommandWithVerdict("xsd2ttcn unqualified_element_attrib.xsd","",c_shell_successWithoutWarningAndError) + + if(getverdict==pass) { + f_compareFiles( + "www_example_org_unqualified_element_attrib_e.ttcn","www_example_org_unqualified_element_attrib.ttcn", c_numOfDiff_headerAndModuleName); + } + }//tc_ + //Passed TR: Hl29679 testcase tc_element_anyType_empty_encDec() runs on xmlTest_CT { var Anything1 vl_pdu:= { attr:={},elem_list:={}}; @@ -1557,6 +1998,91 @@ group Elements{ }//tc_ + testcase tc_substitutiongroup() runs on xmlTest_CT { + + f_shellCommandWithVerdict("xsd2ttcn substitutiongroup.xsd","",c_shell_successWithoutWarningAndError) + + if(getverdict==pass) { + f_compareFiles( + "www_example_org_substitutiongroup_e.ttcn","www_example_org_substitutiongroup.ttcn", c_numOfDiff_headerModNameAndNamespace); + } + + }//tc_ + + testcase tc_substitutiongroup_abstract_block_rest() runs on xmlTest_CT { + + f_shellCommandWithVerdict("xsd2ttcn substitutiongroup_abstract_block_1.xsd","",c_shell_successWithWarning) + + if(getverdict==pass) { + f_compareFiles( + "www_example_org_substitutiongroup_abstract_block_1_e.ttcn", + "www_example_org_substitutiongroup_abstract_block_1.ttcn", c_numOfDiff_headerModNameAndNamespace); + } + + }//tc_ + + testcase tc_substitutiongroup_abstract_block_ext() runs on xmlTest_CT { + + f_shellCommandWithVerdict("xsd2ttcn substitutiongroup_abstract_block_2.xsd","",c_shell_successWithWarning) + + if(getverdict==pass) { + f_compareFiles( + "www_example_org_substitutiongroup_abstract_block_2_e.ttcn", + "www_example_org_substitutiongroup_abstract_block_2.ttcn", c_numOfDiff_headerModNameAndNamespace); + } + + }//tc_ + + testcase tc_substitutiongroup_complex_without_element() runs on xmlTest_CT { + + f_shellCommandWithVerdict("xsd2ttcn substitutiongroup_complex_without_element.xsd","",c_shell_successWithWarning) + + if(getverdict==pass) { + f_compareFiles( + "www_example_org_substitutiongroup_complex_without_element_e.ttcn", + "www_example_org_substitutiongroup_complex_without_element.ttcn", c_numOfDiff_headerModNameAndNamespace); + } + + }//tc_ + + testcase tc_substitutiongroup_long_extension() runs on xmlTest_CT { + + f_shellCommandWithVerdict("xsd2ttcn substitutiongroup_complex_without_element.xsd","",c_shell_successWithWarning) + + if(getverdict==pass) { + f_compareFiles( + "www_example_org_substitutiongroup_complex_without_element_e.ttcn", + "www_example_org_substitutiongroup_complex_without_element.ttcn", c_numOfDiff_headerModNameAndNamespace); + } + + }//tc_ + + testcase tc_substitutiongroup_neg() runs on xmlTest_CT { + + f_shellCommandWithVerdict("xsd2ttcn substitutiongroup_neg.xsd","",c_shell_error) + + }//tc_ + + testcase tc_substitutiongroup_diff_module() runs on xmlTest_CT { + + f_shellCommandWithVerdict("xsd2ttcn substitutiongroup_main.xsd substitutiongroup_ref.xsd","",c_shell_successWithWarning) + + if(getverdict==pass) { + f_compareFiles( + "www_example_org_substitutiongroup_ref_e.ttcn", + "www_example_org_substitutiongroup_ref.ttcn", c_numOfDiff_headerModNameAndNamespace); + } + + if(getverdict==pass) { + f_compareFiles( + "www_example_org_substitutiongroup_main_e.ttcn", + "www_example_org_substitutiongroup_main.ttcn", c_numOfDiff_headerModNameAndNamespace); + } + + }//tc_ + + + //======================================================== // tc_element_nameInheritance_conv // Checks if name of named (aliased) type is not inherited @@ -1583,7 +2109,7 @@ group Elements{ f_encDecTest_Tgc(); }//tc_ - //"Abstract" and "substitutionGroup" are not supported. Therefore converter sends WARNINGs + //"Abstract" are not supported. Therefore converter sends WARNINGs testcase tc_element_abstract_conv() runs on xmlTest_CT { f_shellCommandWithVerdict("xsd2ttcn XmlTest_element_abstract.xsd","",c_shell_successWithWarning); }//tc_ @@ -1597,6 +2123,45 @@ group Elements{ } }//tc_ + testcase tc_element_nillable_with_annotations() runs on xmlTest_CT { + f_shellCommandWithVerdict("xsd2ttcn nillable_annotations.xsd","",c_shell_successWithoutWarningAndError ); + + if(getverdict==pass) { + f_compareFiles( + "nillable_annotations_e.ttcn","nillable_annotations.ttcn", c_numOfDiff_headerAndModuleName); + } + }//tc_ + + testcase tc_element_nillable_in_nillable_extension() runs on xmlTest_CT { + f_shellCommandWithVerdict("xsd2ttcn nillable_in_nillable_extension.xsd","",c_shell_successWithoutWarningAndError ); + + if(getverdict==pass) { + f_compareFiles( + "http_www_example_org_nillable_in_nillable_extension_e.ttcn", + "http_www_example_org_nillable_in_nillable_extension.ttcn", c_numOfDiff_headerAndModuleName); + } + }//tc_ + + testcase tc_element_attributegroup_nillable() runs on xmlTest_CT { + f_shellCommandWithVerdict("xsd2ttcn attributegroup_nillable.xsd","",c_shell_successWithoutWarningAndError ); + + if(getverdict==pass) { + f_compareFiles( + "www_example_org_type_attributegroup_nillable_e.ttcn", + "www_example_org_type_attributegroup_nillable.ttcn", c_numOfDiff_headerAndModuleName); + } + }//tc_ + + testcase tc_element_attributegroup_ingroup() runs on xmlTest_CT { + f_shellCommandWithVerdict("xsd2ttcn attribgroup_ingroup.xsd","",c_shell_successWithoutWarningAndError ); + + if(getverdict==pass) { + f_compareFiles( + "www_example_org_attribgroup_ingroup_e.ttcn", + "www_example_org_attribgroup_ingroup.ttcn", c_numOfDiff_headerModNameAndNamespace); + } + }//tc_ + //IndividualTrigger, nile="false" testcase tc_element_nillable_IndividualTrigger_nilFalse_encDec() runs on xmlTest_CT { f_encDecTest_IndividualTrigger1(); @@ -1645,11 +2210,13 @@ control { execute(tc_annotation()); execute(tc_annotation1()); execute(tc_annotation2()); + execute(tc_xml_in_annotation()); //option tests: execute(tc_version()); execute(tc_options_c()); execute(tc_options_e()); execute(tc_options_f()); + execute(tc_options_g()); execute(tc_options_p()); execute(tc_options_s()); execute(tc_options_t()); @@ -1663,10 +2230,22 @@ control { //===ttcn standard=== execute(tc_XmlTest_all());//Passed + execute(tc_element_in_all_neg()); execute(tc_XmlTest_any_anyAttribute());//Passed execute(tc_XmlTest_HQ73011());//Passed + execute(tc_anyattribute_optional()); + execute(tc_anyattribute_single()); + execute(tc_anyattribute_in_complex()); execute(tc_XmlTest_attributeGroup());//Passed execute(tc_XmlTest_attribute_use_noTNS());//Passed + execute(tc_id_attribute()); + execute(tc_attribute_order()); + execute(tc_name_conv_non_alphanumeric()); + execute(tc_module_name_convert_with_diff_namespace()); + execute(tc_module_typename_conversion()); + execute(tc_name_conv_remove_seq_of_low_line()); + execute(tc_name_conv_with_z()); + execute(tc_comment_placement()); //===W3C standard=== @@ -1678,6 +2257,7 @@ control { execute(tc_string_withEmptyLength()); //TR: HL20441, Solved execute(tc_string_withNegativeLength());//Passed execute(tc_string_withFixedLength()); //Passed + execute(tc_fixed_value()); execute(tc_string_withFloatLength()); //passed ??? execute(tc_string_withPosMinLength()); //Passed, TR: HL21690 execute(tc_string_withEmptyMin());//Passed @@ -1688,14 +2268,18 @@ control { execute(tc_string_withFaultyMinMaxLength());//Passed, TR: TODO execute(tc_string_withOverDefinition()); //TR: HL25948, Solved execute(tc_string_withTypeAndBase());//Passed + //TODO: put this test back later + //execute(tc_string_pattern_square_brackets()); //===Boolean=== execute(tc_boolean());//Passed + execute(tc_boolean_variant_commented()); //===Decimal=== execute(tc_decimal());//Passed //execute(tc_decimal_withLength()); length not supported execute(tc_decimal_withMinMaxInclusive());//TR: HL20715 execute(tc_decimal_withMinMaxExclusive());//Passed TR: HL21166 -solved execute(tc_decimal_withEnum()); //Passed,TR HL21196 -solved + execute(tc_decimal_fractiondigits()); //===Integer=== execute(tc_integer());//Passed execute(tc_integer_empty1());//Passed @@ -1711,19 +2295,31 @@ control { execute(tc_list_conv()); //Passed execute(tc_list_encDec());//Passed execute(tc_integerList());//Passed + execute(tc_list_simpletype());//Passed + //===Float=== + execute(tc_float_not_a_number()); //===simpleType enum==== execute(tc_simpleType_enum());//Passed + execute(tc_simpleType_restrict_comp()); + execute(tc_simpleType_ref()); + execute(tc_simpleType_base()); + execute(tc_enum_field_names()); //===union=== execute(tc_union());//TR:HL23577 execute(tc_union_optional());//CR_TR18883 + execute(tc_enumeration_union_restriction()); + execute(tc_enumeration_union_restriction2()); + execute(tc_enumeration_remove_dup()); //===complex=== execute(tc_complex1()); //Passed execute(tc_complex2());//TR: HL24977 execute(tc_complex_simpleContent()); + execute(tc_complex_namespaceas()); execute(tc_complex_mixed_conv()); //Passed + execute(tc_complex_group_reference()); execute(tc_complex_mixed_encDec()); //TR:HL29258 - Rejected. Reason: Not supported feature, TODO:Write CR!! - + execute(tc_complex_seq_embeds_seq()); execute(tc_complex_choice_converter());//Passed execute(tc_complex_choice_encDec());//Passed @@ -1740,12 +2336,22 @@ control { execute(tc_complex_minOccursMaxOccurs()); //Passed, TR (ethgry): HL10386 execute(tc_complex_extension_converter()); //TR HL32505 execute(tc_complex_extension_encDec()); //Passed + execute(tc_complex_extension_name_attrib_convert()); + execute(tc_complex_long_extension()); + execute(tc_type_name_conversion_follow()); + execute(tc_complex_extension_with_attrib()); + execute(tc_extension_restriction_with_attrib()); + execute(tc_attrib_enum()); + execute(tc_complex_self_recursion()); execute(tc_complex_restriction_converter()); //Failed, TR HL32896 + execute(tc_complex_restriction_with_use()); + execute(tc_complex_nillable()); + execute(tc_nillable_fixed()); + execute(tc_no_ns_connector()); - -// execute(tc_complex_restriction_encDec()); + //execute(tc_complex_restriction_encDec()); Dynamic test case error:Attempt to XER-encode an unbound record of @@ -1759,15 +2365,18 @@ control { execute(tc_complex_import_pos2_converter()); execute(tc_complex_import_neg1_converter()); execute(tc_complex_import_withSL_converter());//SchemaLocation - //execute(tc_complex_import_withSL_encDec()); + execute(tc_complex_import_withSL_encDec()); execute(tc_complex_import_nameCollision_converter()); execute(tc_complex_import_nameCollision2_converter()); execute(tc_complex_any_pos_converter()); + execute(tc_imported_type_prefix()); execute(tc_complex_any_pos1_encDec()); //Failed, TR: HL37887 execute(tc_complex_any_pos2_encDec()); execute(tc_complex_any_pos3_encDec());//failed, TR: //===element=== execute(tc_element_anyType_converter());//Passed + execute(tc_element_attrib_qualified()); + execute(tc_element_attrib_unqualified()); execute(tc_element_anyType_empty_encDec());//Passed TR: HL29679 execute(tc_element_anyType_attrOnly_encDec());//Passed execute(tc_element_anyType_2attrOnly_encDec());//Passed @@ -1784,11 +2393,27 @@ control { execute(tc_element_recOfElements_anonymousType_conv()); execute(tc_element_recOfElements_anonymousType_encDec()); + + //===substitutiongroup=== + execute(tc_substitutiongroup()); + execute(tc_substitutiongroup_abstract_block_rest()); + execute(tc_substitutiongroup_abstract_block_ext()); + execute(tc_substitutiongroup_complex_without_element()); + execute(tc_substitutiongroup_long_extension()); + execute(tc_substitutiongroup_neg()); + execute(tc_substitutiongroup_diff_module()); + + + execute(tc_element_nameInheritance_conv()); execute(tc_element_nameInheritance_encDec());//TR HL49978 execute(tc_element_Tgc_encDec());//TR HL49978 execute(tc_element_abstract_conv()); //Not supported features execute(tc_element_nillable_converter()); + execute(tc_element_nillable_with_annotations()); + execute(tc_element_nillable_in_nillable_extension()); + execute(tc_element_attributegroup_nillable()); + execute(tc_element_attributegroup_ingroup()); execute(tc_element_nillable_IndividualTrigger_nilFalse_encDec()); execute(tc_element_nillable_IndividualTrigger_nilTrue_encDec()); execute(tc_element_nillable_Isp_nilFalse_encDec()); diff --git a/regression_test/XML/XmlWorkflow/src/xmlTest_encDec.ttcn b/regression_test/XML/XmlWorkflow/src/xmlTest_encDec.ttcn index a51935f17..b1b0a802e 100644 --- a/regression_test/XML/XmlWorkflow/src/xmlTest_encDec.ttcn +++ b/regression_test/XML/XmlWorkflow/src/xmlTest_encDec.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/src/xmlTest_protocolXsd_Testcases.ttcn b/regression_test/XML/XmlWorkflow/src/xmlTest_protocolXsd_Testcases.ttcn index 57118230d..6a692997e 100644 --- a/regression_test/XML/XmlWorkflow/src/xmlTest_protocolXsd_Testcases.ttcn +++ b/regression_test/XML/XmlWorkflow/src/xmlTest_protocolXsd_Testcases.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/src/xmlTest_protocolXsds.prj b/regression_test/XML/XmlWorkflow/src/xmlTest_protocolXsds.prj index de587aa2d..bf506e274 100644 --- a/regression_test/XML/XmlWorkflow/src/xmlTest_protocolXsds.prj +++ b/regression_test/XML/XmlWorkflow/src/xmlTest_protocolXsds.prj @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/xsd/HQ73011.xsd b/regression_test/XML/XmlWorkflow/xsd/HQ73011.xsd index a5f22be67..b819f01cb 100644 --- a/regression_test/XML/XmlWorkflow/xsd/HQ73011.xsd +++ b/regression_test/XML/XmlWorkflow/xsd/HQ73011.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8" ?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/xsd/PDUexample.xsd b/regression_test/XML/XmlWorkflow/xsd/PDUexample.xsd index f775bff52..1589fc843 100644 --- a/regression_test/XML/XmlWorkflow/xsd/PDUexample.xsd +++ b/regression_test/XML/XmlWorkflow/xsd/PDUexample.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/xsd/all.xsd b/regression_test/XML/XmlWorkflow/xsd/all.xsd index 0d017b20c..1d8a47046 100644 --- a/regression_test/XML/XmlWorkflow/xsd/all.xsd +++ b/regression_test/XML/XmlWorkflow/xsd/all.xsd @@ -1,69 +1,77 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 --> -<schema xmlns="http://www.w3.org/2001/XMLSchema" -xmlns:ns="www.example.org" -targetNamespace="www.example.org"> +<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" +xmlns:xsd="http://www.w3.org/2001/XMLSchema" +xmlns:this="www.example.org/all" +targetNamespace="www.example.org/all"> -<attribute name="attrGlobal" type="token"/> +<xsd:attribute name="attrGlobal" type="token"/> -<attributeGroup name="attrGroup"> - <attribute name="attrInGroup2" type="token"/> - <attribute name="attrInGroup1" type="token"/> -</attributeGroup> +<xsd:attributeGroup name="attrGroup"> + <xsd:attribute name="attrInGroup2" type="token"/> + <xsd:attribute name="attrInGroup1" type="token"/> +</xsd:attributeGroup> -<annotation><documentation xml:lang="EN">All, mandatory</documentation></annotation> +<xsd:annotation><xsd:documentation xml:lang="EN">All, mandatory</xsd:documentation></xsd:annotation> -<complexType name="e29a"> - <all> - <element name="foo" type="integer"/> - <element name="bar" type="float"/> - <element name="ding" type="string"/> - </all> -</complexType> +<xsd:complexType name="e29a"> + <xsd:all> + <xsd:element name="foo" type="integer"/> + <xsd:element name="bar" type="float"/> + <xsd:element name="ding" type="string"/> + </xsd:all> +</xsd:complexType> -<complexType name="e29aAndAttributes"> - <all> - <element name="foo" type="integer"/> - <element name="bar" type="float"/> - <element name="ding" type="string"/> - </all> - <attribute name="attrLocal" type="integer"/> - <attribute ref="ns:attrGlobal"/> - <attributeGroup ref="ns:attrGroup"/> -</complexType> +<xsd:complexType name="e29aAndAttributes"> + <xsd:all> + <xsd:element name="foo" type="integer"/> + <xsd:element name="bar" type="float"/> + <xsd:element name="ding" type="string"/> + </xsd:all> + <xsd:attribute name="attrLocal" type="integer"/> + <xsd:attribute ref="this:attrGlobal"/> + <xsd:attributeGroup ref="this:attrGroup"/> +</xsd:complexType> -<annotation><documentation xml:lang="EN">All, optional</documentation></annotation> +<xsd:annotation><xsd:documentation xml:lang="EN">All, optional</xsd:documentation></xsd:annotation> -<complexType name="e29bAndAttributes"> - <all minOccurs="0"> - <element name="foo" type="integer"/> - <element name="bar" type="float"/> - <element name="ding" type="string"/> - </all> - <attribute name="attrLocal" type="integer"/> - <attribute ref="ns:attrGlobal"/> - <attributeGroup ref="ns:attrGroup"/> -</complexType> +<xsd:complexType name="e29bAndAttributes"> + <xsd:all minOccurs="0"> + <xsd:element name="foo" type="integer"/> + <xsd:element name="bar" type="float"/> + <xsd:element name="ding" type="string"/> + </xsd:all> + <xsd:attribute name="attrLocal" type="integer"/> + <xsd:attribute ref="this:attrGlobal"/> + <xsd:attributeGroup ref="this:attrGroup"/> +</xsd:complexType> -<annotation><documentation xml:lang="EN">All, some elements are optional</documentation></annotation> +<xsd:annotation><xsd:documentation xml:lang="EN">All, some elements are optional</xsd:documentation></xsd:annotation> -<complexType name="e29cAndAttributes"> - <all> - <element name="foo" type="integer"/> - <element name="bar" type="float" minOccurs="0"/> - <element name="ding" type="string"/> - </all> - <attribute name="attrLocal" type="integer"/> - <attribute ref="ns:attrGlobal"/> - <attributeGroup ref="ns:attrGroup"/> -</complexType> +<xsd:complexType name="e29cAndAttributes"> + <xsd:all> + <xsd:element name="foo" type="integer"/> + <xsd:element name="bar" type="float" minOccurs="0"/> + <xsd:element name="ding" type="string"/> + </xsd:all> + <xsd:attribute name="attrLocal" type="integer"/> + <xsd:attribute ref="this:attrGlobal"/> + <xsd:attributeGroup ref="this:attrGroup"/> +</xsd:complexType> -</schema> +<xsd:element name="e29cAndAttributesReferenceOptional"> + <xsd:complexType> + <xsd:group ref="this:e29a" minOccurs="0"/> + <xsd:attribute name="attr" type="string" /> + </xsd:complexType> +</xsd:element> + +</xsd:schema> diff --git a/regression_test/XML/XmlWorkflow/xsd/any_anyAttribute.xsd b/regression_test/XML/XmlWorkflow/xsd/any_anyAttribute.xsd index a3e4c84f5..ee395b8c8 100644 --- a/regression_test/XML/XmlWorkflow/xsd/any_anyAttribute.xsd +++ b/regression_test/XML/XmlWorkflow/xsd/any_anyAttribute.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 @@ -97,4 +97,15 @@ targetNamespace="http://www.example.org/ttcn/wildcards"> </complexType> -</schema> \ No newline at end of file +<element name="MyType"> + <complexType> + <simpleContent> + <extension base="string"> + <anyAttribute namespace="##targetNamespace"/> + </extension> + </simpleContent> + </complexType> +</element> + + +</schema> diff --git a/regression_test/XML/XmlWorkflow/xsd/anyattr_in_complex.xsd b/regression_test/XML/XmlWorkflow/xsd/anyattr_in_complex.xsd new file mode 100644 index 000000000..27e7eca2c --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/anyattr_in_complex.xsd @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:this="www.example.org/anyattr/in/complex" + targetNamespace="www.example.org/anyattr/in/complex"> + +<xsd:complexType name="DependentLocalityType"> + <xsd:sequence> + <xsd:element name="DependentLocalityName" minOccurs="0" maxOccurs="unbounded"> + <xsd:complexType> + <xsd:anyAttribute namespace="##other"/> + </xsd:complexType> + </xsd:element> + <xsd:element name="DependentLocalityNumber" minOccurs="0"> + <xsd:complexType> + </xsd:complexType> + </xsd:element> + </xsd:sequence> +</xsd:complexType> + +</xsd:schema> + diff --git a/regression_test/XML/XmlWorkflow/xsd/anyattrib_single.xsd b/regression_test/XML/XmlWorkflow/xsd/anyattrib_single.xsd new file mode 100644 index 000000000..3c70c4bb9 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/anyattrib_single.xsd @@ -0,0 +1,77 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:this="www.example.org/anyattrib/single" + targetNamespace="www.example.org/anyattrib/single"> + + +<xsd:attributeGroup name="attrGroup"> + <xsd:attribute name="attrInGroup2" type="token"/> + <xsd:attribute name="attrInGroup1" type="token"/> + <xsd:anyAttribute namespace="##targetNamespace"/> +</xsd:attributeGroup> + +<xsd:complexType name="e25seq"> + <xsd:sequence> + <xsd:element name="titleElemBase" type="xsd:string"/> + <xsd:element name="forenameElemBase" type="xsd:string"/> + <xsd:element name="surnameElemBase" type="xsd:string"/> + </xsd:sequence> + <xsd:attributeGroup ref="this:attrGroup"/> + <xsd:anyAttribute namespace="http://www.w3.org/1999/xhtml ##targetNamespace"/> +</xsd:complexType> + +<xsd:element name="e45c"> + <xsd:complexType> + <xsd:anyAttribute namespace="##local http://www.example.org/attribute"/> + </xsd:complexType> +</xsd:element> + +<xsd:element name="e45d"> + <xsd:complexType> + <xsd:complexContent> + <xsd:extension base="this:e45c"> + <xsd:anyAttribute namespace="##targetNamespace"/> + </xsd:extension> + </xsd:complexContent> + </xsd:complexType> + </xsd:element> + + +<xsd:complexType name="ExtBase"> + <xsd:sequence> + <element name="field" type="string"/> + </xsd:sequence> + <xsd:anyAttribute namespace="##targetNamespace"/> +</xsd:complexType> + +<xsd:element name="MyType"> + <xsd:complexType> + <xsd:complexContent> + <xsd:extension base="this:ExtBase"> + <xsd:attribute name="ding" type="string"/> + <xsd:anyAttribute namespace="##any"/> + </xsd:extension> + </xsd:complexContent> + </xsd:complexType> +</xsd:element> + +<xsd:complexType name="ExtBase2"> + <xsd:sequence> + <xsd:element name="field" type="string"/> + </xsd:sequence> + <xsd:anyAttribute namespace="##other"/> +</xsd:complexType> + +<xsd:element name="MyType2"> + <xsd:complexType> + <xsd:complexContent> + <xsd:extension base="this:ExtBase2"> + <xsd:attribute name="ding" type="string"/> + <xsd:anyAttribute namespace="##targetNamespace"/> + </xsd:extension> + </xsd:complexContent> + </xsd:complexType> +</xsd:element> + +</xsd:schema> diff --git a/regression_test/XML/XmlWorkflow/xsd/anyattribute_optional.xsd b/regression_test/XML/XmlWorkflow/xsd/anyattribute_optional.xsd new file mode 100644 index 000000000..e186ef084 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/anyattribute_optional.xsd @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:this="http://www.example.org/wildcards" targetNamespace="http://www.example.org/wildcards"> +<xs:element name="anyAttrAnyNamespace" type="this:e45"/> +<xs:element name="anyAttrThisNamespace" type="this:e45b"/> + +<xs:complexType name="e45"> + <xs:attribute name="attr" type="xs:string"/> + <xs:attribute name="bb" type="xs:date"/> + <xs:attribute name="aa" type="xs:date"/> + <xs:anyAttribute namespace="##any"/> +</xs:complexType> + +<xs:complexType name="e45a"> + <xs:anyAttribute namespace="##other"/> +</xs:complexType> + +<xs:complexType name="e45b"> + <xs:anyAttribute namespace="##targetNamespace"/> +</xs:complexType> + +<xs:complexType name="e45c"> + <xs:anyAttribute namespace="##local http://www.example.org/attribute"/> +</xs:complexType> + +<xs:complexType name="e45d"> + <xs:complexContent> + <xs:extension base="this:e45c"> + <xs:anyAttribute namespace="##targetNamespace"/> + </xs:extension> + </xs:complexContent> +</xs:complexType> + +</xs:schema> diff --git a/regression_test/XML/XmlWorkflow/xsd/attrib_enum.xsd b/regression_test/XML/XmlWorkflow/xsd/attrib_enum.xsd new file mode 100644 index 000000000..996292049 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/attrib_enum.xsd @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:this="www.example.org/attrib/enum" + targetNamespace="www.example.org/attrib/enum"> + +<xsd:complexType name="AttribEnum"> + <xsd:attribute name="attr"> + <xsd:simpleType> + <xsd:restriction base="xsd:string"> + <xsd:enumeration value="first"/> + <xsd:enumeration value="second"/> + </xsd:restriction> + </xsd:simpleType> + </xsd:attribute> +</xsd:complexType> + +</xsd:schema> + diff --git a/regression_test/XML/XmlWorkflow/xsd/attrib_order_a.xsd b/regression_test/XML/XmlWorkflow/xsd/attrib_order_a.xsd new file mode 100644 index 000000000..5be49499b --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/attrib_order_a.xsd @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:this="www.example.org/attrib/order/a" + xmlns:A="www.example.org/attrib/order/b" + xmlns:B="NoTargetNamespace" + targetNamespace="www.example.org/attrib/order/a"> + +<xsd:import namespace="www.example.org/attrib/order/b"/> + +<xsd:import namespace="NoTargetNamespace"/> + + +<xsd:attribute name="local1" type="xsd:string" fixed="fixed"/> +<xsd:attribute name="local2" type="xsd:string"/> + +<xsd:complexType name="e17A"> + <xsd:attributeGroup ref="A:Agroup" /> + <xsd:attribute ref="this:local2"/> + <xsd:attribute ref="A:Attr1" /> + <xsd:attribute ref="B:AttrNoTargetNamespace"/> + <xsd:attribute ref="this:local1" /> + <xsd:attribute ref="B:AttrNoTargetNamespace2"/> + <xsd:attribute ref="this:lang"/> +</xsd:complexType> + +<xsd:attribute name="lang"> + <xsd:simpleType> + <xsd:union memberTypes="xsd:language"> + <xsd:simpleType> + <xsd:restriction base="xsd:string"> + <xsd:enumeration value=""/> + </xsd:restriction> + </xsd:simpleType> + </xsd:union> + </xsd:simpleType> +</xsd:attribute> + + +</xsd:schema> diff --git a/regression_test/XML/XmlWorkflow/xsd/attrib_order_b.xsd b/regression_test/XML/XmlWorkflow/xsd/attrib_order_b.xsd new file mode 100644 index 000000000..40814285e --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/attrib_order_b.xsd @@ -0,0 +1,20 @@ +<!-- + Copyright (c) 2000-2015 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 + --> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:A="www.example.org/attrib/order/b" + targetNamespace="www.example.org/attrib/order/b"> + +<xsd:attribute name="Attr1" type="xsd:string"/> + +<xsd:attributeGroup name="Agroup"> + <xsd:attribute name="fooInAgroup" type="xsd:float" /> + <xsd:attribute name="barInAgroup" type="xsd:float" /> +</xsd:attributeGroup> + +</xsd:schema> diff --git a/regression_test/XML/XmlWorkflow/xsd/attrib_order_c.xsd b/regression_test/XML/XmlWorkflow/xsd/attrib_order_c.xsd new file mode 100644 index 000000000..5bd123a76 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/attrib_order_c.xsd @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" +xmlns:xsd="http://www.w3.org/2001/XMLSchema" +xmlns:B="NoTargetNamespace"> + +<xsd:attribute name="AttrNoTargetNamespace" type="string"/> +<xsd:attribute name="AttrNoTargetNamespace2" type="string"/> + +</xsd:schema> diff --git a/regression_test/XML/XmlWorkflow/xsd/attrib_restriction_extension.xsd b/regression_test/XML/XmlWorkflow/xsd/attrib_restriction_extension.xsd new file mode 100644 index 000000000..c31d37797 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/attrib_restriction_extension.xsd @@ -0,0 +1,137 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" +xmlns:nss="www.example.org/attr/ext/rest" + targetNamespace="www.example.org/attr/ext/rest"> + + +<xsd:complexType name="e25seq"> + <xsd:sequence> + <xsd:element name="titleElemBase" type="xsd:string"/> + <xsd:element name="forenameElemBase" type="xsd:string"/> + <xsd:element name="surnameElemBase" type="xsd:string"/> + </xsd:sequence> + <xsd:attribute name="genderAttrBase" type="xsd:integer"/> +</xsd:complexType> + +<xsd:complexType name="e25seqa"> + <xsd:complexContent> + <xsd:extension base="nss:e25seq"> + <xsd:sequence> + </xsd:sequence> + <xsd:attribute name="gender" type="xsd:integer"/> + <xsd:attribute name="genderAttrBase" type="xsd:integer"/> + </xsd:extension> + </xsd:complexContent> +</xsd:complexType> + +<xsd:complexType name="e25seqb"> + <xsd:complexContent> + <xsd:extension base="nss:e25seqa"> + <xsd:sequence> + <xsd:element name="ageElemExt" type="xsd:integer"/> + </xsd:sequence> + </xsd:extension> + </xsd:complexContent> +</xsd:complexType> + +<xsd:complexType name="e25seqc"> + <xsd:complexContent> + <xsd:restriction base="nss:e25seqb"> + <xsd:sequence> + <xsd:element name="ageElemExt" type="xsd:integer"/> + </xsd:sequence> + <xsd:attribute name="genderAttrBase" type="xsd:integer" use="prohibited"/> + <xsd:attribute name="boo" type="xsd:integer"/> + </xsd:restriction> + </xsd:complexContent> +</xsd:complexType> + +<xsd:complexType name="e25seqd"> + <xsd:complexContent> + <xsd:restriction base="nss:e25seqc"> + <xsd:sequence> + <xsd:element name="ageElemExt" type="xsd:integer"/> + </xsd:sequence> + <xsd:attribute name="genderAttrBase" type="xsd:integer" use="required"/> + </xsd:restriction> + </xsd:complexContent> +</xsd:complexType> + +<xsd:element name="comment" type="xsd:string"/> + <xsd:complexType name="PurchaseOrderType"> + <xsd:sequence> + <xsd:element name="shipTo" type="xsd:string"/> + <xsd:element name="billTo" type="xsd:string"/> + <xsd:element ref="nss:comment" minOccurs="0"/> + </xsd:sequence> + <xsd:attribute name="shipDate" type="xsd:date"/> + <xsd:attribute name="orderDate" type="xsd:date"/> +</xsd:complexType> + +<!-- The restricting type is: --> +<xsd:complexType name="RestrictedPurchaseOrderType"> + <xsd:complexContent> + <xsd:restriction base="nss:PurchaseOrderType"> + <xsd:sequence> + <xsd:element name="shipTo" type="xsd:string"/> + <xsd:element ref="nss:comment" minOccurs="1"/> + </xsd:sequence> + <xsd:attribute name="shipDate" type="xsd:date" use="required" /> + <xsd:attribute name="boo" type="xsd:date"/> + <xsd:attribute name="orderDate" type="xsd:date" use="prohibited" /> + </xsd:restriction> + </xsd:complexContent> +</xsd:complexType> + +<xsd:element name="e23"> + <xsd:complexType> + <xsd:simpleContent> + <xsd:extension base="string"> + <xsd:attribute name="foo" type="xsd:float"/> + <xsd:attribute name="bar" type="xsd:integer"/> + <xsd:attribute name="base" type="xsd:integer"/> + </xsd:extension> + </xsd:simpleContent> + </xsd:complexType> +</xsd:element> + + +<xsd:element name="e24"> + <xsd:complexType> + <xsd:simpleContent> + <xsd:extension base="nss:e23"> + <xsd:attribute name="foo" type="xsd:float"/> + <xsd:attribute name="goo" type="xsd:integer"/> + <xsd:attribute name="base" type="xsd:integer" use="required"/> + </xsd:extension> + </xsd:simpleContent> + </xsd:complexType> +</xsd:element> + + +<xsd:element name="e25"> + <xsd:complexType> + <xsd:simpleContent> + <xsd:restriction base="nss:e24"> + <xsd:length value="4"/> + <xsd:attribute name="foo" type="xsd:float" use="prohibited"/> + <xsd:attribute name="goo" type="xsd:integer" use="required"/> + <xsd:attribute name="boo" type="xsd:integer"/> + <xsd:attribute name="base" type="xsd:integer" use="prohibited"/> + </xsd:restriction> + </xsd:simpleContent> + </xsd:complexType> +</xsd:element> + +<xsd:element name="e26"> + <xsd:complexType> + <xsd:simpleContent> + <xsd:extension base="nss:e25"> + <xsd:attribute name="foo" type="xsd:float" use="required"/> + </xsd:extension> + </xsd:simpleContent> + </xsd:complexType> +</xsd:element> + +</xsd:schema> diff --git a/regression_test/XML/XmlWorkflow/xsd/attribgroup_ingroup.xsd b/regression_test/XML/XmlWorkflow/xsd/attribgroup_ingroup.xsd new file mode 100644 index 000000000..6ccede2df --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/attribgroup_ingroup.xsd @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:this="www.example.org/attribgroup/ingroup" + targetNamespace="www.example.org/attribgroup/ingroup"> + +<xsd:complexType name="AttrGroupinGroup"> + <xsd:attributeGroup ref="this:AttributeGroup"/> +</xsd:complexType> + +<xsd:attribute name="remoteSchema" type="anyURI"> +</xsd:attribute> + +<xsd:attributeGroup name="AttributeGroup"> + <xsd:attributeGroup ref="this:simpleLink"/> + <xsd:attribute ref="this:remoteSchema" use="optional"/> +</xsd:attributeGroup> + +<xsd:attributeGroup name="simpleLink"> + <xsd:attribute name="type" type="string" fixed="simple" form="qualified"/> +</xsd:attributeGroup> + +</xsd:schema> + diff --git a/regression_test/XML/XmlWorkflow/xsd/attributeGroup.xsd b/regression_test/XML/XmlWorkflow/xsd/attributeGroup.xsd index 4dbb47264..8626f05d4 100644 --- a/regression_test/XML/XmlWorkflow/xsd/attributeGroup.xsd +++ b/regression_test/XML/XmlWorkflow/xsd/attributeGroup.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/xsd/attribute_in_extension.xsd b/regression_test/XML/XmlWorkflow/xsd/attribute_in_extension.xsd new file mode 100644 index 000000000..de0baf90b --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/attribute_in_extension.xsd @@ -0,0 +1,26 @@ +<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" +xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" +xmlns:ns45="attribute_in_extension" +targetNamespace="attribute_in_extension" elementFormDefault="qualified" attributeFormDefault="unqualified"> +<xs:complexType name="BaseType"> + <xs:sequence> + <xs:element name="Base-variable" type="integer" nillable="false"> + </xs:element> + </xs:sequence> +</xs:complexType> +<xs:complexType name="Extending-type"> + <xs:sequence> + <xs:element name="ext" nillable="false"> + <xs:complexType> + <xs:complexContent> + <xs:extension base="ns45:BaseType"> + <xs:attribute name="extension" type="integer"> + </xs:attribute> + </xs:extension> + </xs:complexContent> + </xs:complexType> + </xs:element> + </xs:sequence> +</xs:complexType> +</xs:schema> + diff --git a/regression_test/XML/XmlWorkflow/xsd/attribute_use.xsd b/regression_test/XML/XmlWorkflow/xsd/attribute_use.xsd index f9d97f844..0c71aad0a 100644 --- a/regression_test/XML/XmlWorkflow/xsd/attribute_use.xsd +++ b/regression_test/XML/XmlWorkflow/xsd/attribute_use.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/xsd/attribute_use_noTNS.xsd b/regression_test/XML/XmlWorkflow/xsd/attribute_use_noTNS.xsd index e935a5bb8..d3a64f864 100644 --- a/regression_test/XML/XmlWorkflow/xsd/attribute_use_noTNS.xsd +++ b/regression_test/XML/XmlWorkflow/xsd/attribute_use_noTNS.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/xsd/attributegroup_nillable.xsd b/regression_test/XML/XmlWorkflow/xsd/attributegroup_nillable.xsd new file mode 100644 index 000000000..f4e37c2b3 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/attributegroup_nillable.xsd @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + targetNamespace="www.example.org/type/attributegroup/nillable" + xmlns:ns7="www.example.org/type/attributegroup/nillable"> + + +<xsd:element name="remark" type="xsd:string" nillable="true"/> + +<xsd:element name="SeqNillable" nillable="true"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="forename" type="xsd:string" nillable="true"/> + <xsd:element name="surname" type="xsd:string" minOccurs="0" nillable="true"/> + <xsd:element name="livingAddress" type="xsd:string" minOccurs="0" + maxOccurs="unbounded" + nillable="true"/> + <xsd:element ref="ns7:remark"/> + </xsd:sequence> + <xsd:attribute name="foo" type="xsd:integer"/> + <xsd:attribute name="bar" type="xsd:integer"/> + <attributeGroup ref="ns7:g25attr1"/> + </xsd:complexType> +</xsd:element> + +<xsd:attributeGroup name="g25attr1"> + <xsd:attribute name="birthPlaceAttrGroup" type="xsd:string"/> + <xsd:attribute name="birthDateAttrGroup" type="xsd:string"/> + <xsd:anyAttribute namespace="##targetNamespace"/> +</xsd:attributeGroup> + + +</xsd:schema> diff --git a/regression_test/XML/XmlWorkflow/xsd/boolean_variant_commented.xsd b/regression_test/XML/XmlWorkflow/xsd/boolean_variant_commented.xsd new file mode 100644 index 000000000..418026bcb --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/boolean_variant_commented.xsd @@ -0,0 +1,55 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xs:schema xmlns="http://www.w3.org/2001/XMLSchema" + xmlns:xs="http://www.w3.org/2001/XMLSchema" + targetNamespace="www.example.org/boolean/variant/commented"> + +<xs:simpleType name="celsiusBodyTemp"> + <xs:restriction base="xs:boolean"/> +</xs:simpleType> + +<xs:element name="booleanElement" type="xs:boolean"/> + +<xs:simpleType name="BooleanSimple"> + <xs:restriction base="xs:boolean"/> +</xs:simpleType> + +<xs:element name="union_with_boolean"> + <xs:simpleType> + <xs:union> + <xs:simpleType> + <xs:restriction base="xs:string"/> + </xs:simpleType> + <xs:simpleType> + <xs:restriction base="xs:boolean"/> + </xs:simpleType> + <xs:simpleType> + <restriction base="xs:integer"/> + </xs:simpleType> + </xs:union> + </xs:simpleType> +</xs:element> + +<xs:complexType name="seq_with_boolean"> + <xs:sequence> + <xs:element name="titleElemBase" type="xs:string"/> + <xs:element name="forenameElemBase" type="xs:string"/> + <xs:element name="smart" type="xs:boolean"/> + </xs:sequence> + <xs:attribute name="stupid" type="xs:boolean"/> +</xs:complexType> + +<xs:complexType name="e15b"> + <xs:sequence> + <xs:element name="foo" type="xs:boolean" minOccurs="0" maxOccurs="unbounded"/> + <xs:element name="bar" type="xs:float"/> + </xs:sequence> +</xs:complexType> + +<xs:complexType name="E15b_2"> + <xs:sequence> + <xs:element name="foo" type="xs:boolean"/> + <xs:element name="bar" type="xs:float"/> + </xs:sequence> +</xs:complexType> + +</xs:schema> diff --git a/regression_test/XML/XmlWorkflow/xsd/comment_placement.xsd b/regression_test/XML/XmlWorkflow/xsd/comment_placement.xsd new file mode 100644 index 000000000..d5791454d --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/comment_placement.xsd @@ -0,0 +1,93 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + targetNamespace="www.example.org/comment/placement"> + +<xsd:element name="e21unnamed"> + <xsd:annotation> + <xsd:documentation> + SomeCommentyyy + </xsd:documentation> + </xsd:annotation> + <xsd:simpleType> + <union> + <xsd:simpleType> + <xsd:annotation> + <xsd:documentation> + SomeCommentyyy + </xsd:documentation> + </xsd:annotation> + <xsd:restriction base="xsd:string"/> + </xsd:simpleType> + <xsd:simpleType> + <xsd:annotation> + <xsd:documentation> + SomeCommentss + </xsd:documentation> + </xsd:annotation> + <restriction base="xsd:float"/> + </xsd:simpleType> + <xsd:simpleType> + <restriction base="xsd:integer"/> + </xsd:simpleType> + </union> + </xsd:simpleType> +</xsd:element> + +<xsd:complexType name="e39"> + <xsd:annotation> + <xsd:documentation> + SomeCommentss + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:choice> + <xsd:element name="foo" type="xsd:string"> + <xsd:annotation> + <xsd:documentation> + SomeCommentss + </xsd:documentation> + </xsd:annotation> + </xsd:element> + <xsd:element name="bar" type="xsd:string"> + <xsd:annotation> + <xsd:documentation> + SomeCommentss + </xsd:documentation> + </xsd:annotation> + </xsd:element> + </xsd:choice> + <xsd:element name="ding" type="xsd:string"> + <xsd:annotation> + <xsd:documentation> + SomeCommentss + </xsd:documentation> + </xsd:annotation> + </xsd:element> + </xsd:sequence> +</xsd:complexType> + + + +<xsd:annotation> + <xsd:appinfo> + info + </xsd:appinfo> + <xsd:documentation> + SomeComment + </xsd:documentation> + <xsd:documentation> + SomeComment2 + </xsd:documentation> +</xsd:annotation> + +<xsd:element name="Int" type="xsd:integer" nillable="false"> + <xsd:annotation> + <xsd:documentation> + SomeComment + </xsd:documentation> + </xsd:annotation> +</xsd:element> + + +</xsd:schema> diff --git a/regression_test/XML/XmlWorkflow/xsd/complexTypes.xsd b/regression_test/XML/XmlWorkflow/xsd/complexTypes.xsd index 2fde44f17..d4e03432c 100644 --- a/regression_test/XML/XmlWorkflow/xsd/complexTypes.xsd +++ b/regression_test/XML/XmlWorkflow/xsd/complexTypes.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/xsd/complex_nillable.xsd b/regression_test/XML/XmlWorkflow/xsd/complex_nillable.xsd new file mode 100644 index 000000000..9c674f41f --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/complex_nillable.xsd @@ -0,0 +1,65 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + targetNamespace="www.example.org/complex/nillable"> + + + + <xsd:complexType name="conditions-type"> + <xsd:sequence> + <xsd:element name="caller-identity" nillable="true" minOccurs="0"> + <xsd:complexType> + <xsd:choice> + <xsd:element name="anonymous" type="string"> + </xsd:element> + <!-- no nilling at the level of identity - use nilling on fcd-caller-identity to remove --> + <xsd:element name="identity" type="string"> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + <!-- media is a multiple value parameter --> + <xsd:element name="media" type="xsd:string" nillable="true" minOccurs="0" maxOccurs="unbounded"> + </xsd:element> + <xsd:element name="status" type="xsd:string" nillable="true" minOccurs="0" maxOccurs="unbounded"> + </xsd:element> + <xsd:element name="identity" type="string" nillable="true" minOccurs="0"> + + </xsd:element> + <xsd:element name="request" type="string" nillable="true" minOccurs="0" maxOccurs="unbounded"> + + </xsd:element> + </xsd:sequence> + </xsd:complexType> + +<xsd:element name='anything-nil' nillable='true'/> +<xsd:element name='anything-nil2' type="xsd:anyType" nillable='true'/> + +<xsd:element name="common"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="integration" nillable="true" minOccurs="0" maxOccurs="5"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="forename" type="xsd:string" nillable="true"/> + <xsd:element name="surname" type="xsd:string" nillable="true"/> + <xsd:element name="livingAddress" type="xsd:string"/> + </xsd:sequence> + <xsd:attribute name="bar" type="xsd:integer"/> + <xsd:attribute name="foo"> + <xsd:simpleType> + <xsd:restriction base="string"> + <xsd:length value="7"/> + </xsd:restriction> + </xsd:simpleType> + </xsd:attribute> + <xsd:attribute name="goo" type="xsd:integer"/> + <xsd:anyAttribute namespace="##targetNamespace"/> + </xsd:complexType> + </xsd:element> + </xsd:sequence> + </xsd:complexType> +</xsd:element> + + +</xsd:schema> diff --git a/regression_test/XML/XmlWorkflow/xsd/complex_restriction_with_use.xsd b/regression_test/XML/XmlWorkflow/xsd/complex_restriction_with_use.xsd new file mode 100644 index 000000000..f3d426781 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/complex_restriction_with_use.xsd @@ -0,0 +1,71 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" +xmlns="http://www.example.org/complex-restriction-with-use" +targetNamespace="http://www.example.org/complex-restriction-with-use"> +<!-- The base type is: --> +<xs:complexType name="PurchaseOrderType"> + <xs:sequence> + <xs:element name="shipTo" type="xs:string"/> + <xs:element name="billTo" type="xs:string" minOccurs="0"/> + <xs:element name="items" type="xs:string"/> + </xs:sequence> + <xs:attribute name="finishDate" type="xs:date"/> + <xs:attribute name="shipDate" type="xs:date"/> + <xs:attribute name="orderDate" type="xs:date"/> +</xs:complexType> + +<!-- The restricting type is: --> +<xs:complexType name="RestrictedPurchaseOrderType"> + <xs:complexContent> + <xs:restriction base="PurchaseOrderType"> + <xs:sequence> + <xs:element name="shipTo" type="xs:string"/> + <xs:element name="billTo" type="xs:string" minOccurs="1"/> + <xs:element name="items" type="xs:string"/> + </xs:sequence> + <xs:attribute name="finishDate" type="xs:date"/> + <xs:attribute name="shipDate" type="xs:date" use="required" /> + <xs:attribute name="orderDate" type="xs:date" use="prohibited" /> + </xs:restriction> + </xs:complexContent> +</xs:complexType> + +<xs:element name="testsuite" type="testsuite"/> + +<xs:complexType name="testsuite"> + <xs:sequence> + <xs:element name="properties"> + <xs:complexType> + </xs:complexType> + </xs:element> + + </xs:sequence> + <xs:attribute name="time" type="xs:decimal" use="optional"> + </xs:attribute> +</xs:complexType> + + + +<xs:element name="testsuites"> + <xs:complexType> + <xs:sequence> + <xs:element name="testsuite" > + <xs:complexType> + <xs:complexContent> + <xs:restriction base="testsuite"> + <xs:sequence> + <xs:element name="properties"> + <xs:complexType> + </xs:complexType> + </xs:element> + </xs:sequence> + <xs:attribute name="time" type="xs:decimal" use="required"/> + </xs:restriction> + </xs:complexContent> + </xs:complexType> + </xs:element> + </xs:sequence> + </xs:complexType> +</xs:element> + +</xs:schema> diff --git a/regression_test/XML/XmlWorkflow/xsd/complex_self_recursion.xsd b/regression_test/XML/XmlWorkflow/xsd/complex_self_recursion.xsd new file mode 100644 index 000000000..2f11aa5cb --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/complex_self_recursion.xsd @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:this="www.example.org/self/recursion" + targetNamespace="www.example.org/self/recursion"> + +<xsd:complexType name="X"> + <xsd:sequence> + <xsd:element name="x" type="xsd:string"/> + <xsd:element name="y" minOccurs="0"> + <xsd:complexType> + <xsd:complexContent> + <xsd:extension base="this:X"> + <xsd:sequence> + <xsd:element name="z" type="xsd:string"/> + </xsd:sequence> + <xsd:attribute name="attr1" type="xsd:string" /> + </xsd:extension> + </xsd:complexContent> + </xsd:complexType> + </xsd:element> + </xsd:sequence> + <xsd:attribute name="attr2" type="xsd:string" /> +</xsd:complexType> + +</xsd:schema> diff --git a/regression_test/XML/XmlWorkflow/xsd/decimal_fractiondigits.xsd b/regression_test/XML/XmlWorkflow/xsd/decimal_fractiondigits.xsd new file mode 100644 index 000000000..a9acff6a1 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/decimal_fractiondigits.xsd @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xs:schema xmlns="http://www.w3.org/2001/XMLSchema" + xmlns:xs="http://www.w3.org/2001/XMLSchema" + targetNamespace="www.example.org/decimal/fractiondigits"> + +<xs:simpleType name="celsiusBodyTemp"> + <xs:restriction base="decimal"> + <totalDigits value="4"/> + <fractionDigits value="1"/> + </xs:restriction> +</xs:simpleType> + +<xs:element name="union_with_fraction"> + <xs:simpleType> + <union> + <xs:simpleType> + <xs:restriction base="decimal"> + <totalDigits value="4"/> + <fractionDigits value="1"/> + </xs:restriction> + </xs:simpleType> + <xs:simpleType> + <restriction base="xs:float"/> + </xs:simpleType> + <xs:simpleType> + <restriction base="xs:integer"/> + </xs:simpleType> + </union> + </xs:simpleType> +</xs:element> + + +</xs:schema> diff --git a/regression_test/XML/XmlWorkflow/xsd/dont_generate_element_substitution.xsd b/regression_test/XML/XmlWorkflow/xsd/dont_generate_element_substitution.xsd new file mode 100644 index 000000000..8c76a1f86 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/dont_generate_element_substitution.xsd @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:this="www.example.org/dont/generate/element/substitution" + targetNamespace="www.example.org/dont/generate/element/substitution" + blockDefault="extension"> + +<xsd:element name="head" type="string" /> + +<xsd:element name="complexEnum"> + <xsd:complexType> + <xsd:simpleContent> + <xsd:extension base="xsd:string"> + <xsd:attribute name="foo" type="xsd:float"/> + <xsd:attribute name="bar" type="xsd:integer"/> + </xsd:extension> + </xsd:simpleContent> + </xsd:complexType> +</xsd:element> + +<xsd:element name="member2" substitutionGroup="this:head"> + <xsd:complexType > + <xsd:complexContent> + <xsd:extension base="this:complexEnum"> + <xsd:sequence> + </xsd:sequence> + <xsd:attribute name="unitOfAge" type="xsd:string"/> + </xsd:extension> + </xsd:complexContent> + </xsd:complexType> +</xsd:element> + +<xsd:element name="ize"> + <xsd:complexType> + <xsd:sequence> + <xsd:element ref="this:head" minOccurs="0" maxOccurs="unbounded"/> + </xsd:sequence> + </xsd:complexType> +</xsd:element> + +</xsd:schema> diff --git a/regression_test/XML/XmlWorkflow/xsd/element_in_all_minmax.xsd b/regression_test/XML/XmlWorkflow/xsd/element_in_all_minmax.xsd new file mode 100644 index 000000000..af29e60f4 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/element_in_all_minmax.xsd @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + targetNamespace="www.example.org/element/in/all/minmax" + elementFormDefault="unqualified"> + + +<xsd:element name="MyComplexElem-13"> + <xsd:complexType mixed="true"> + <xsd:all> + <xsd:element name="a" type="xsd:string" minOccurs="2" maxOccurs="3"/> + <xsd:element name="b" type="xsd:boolean"/> + </xsd:all> + </xsd:complexType> +</xsd:element> + + +</xsd:schema> + diff --git a/regression_test/XML/XmlWorkflow/xsd/element_in_all_mixed.xsd b/regression_test/XML/XmlWorkflow/xsd/element_in_all_mixed.xsd new file mode 100644 index 000000000..8eb448cdf --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/element_in_all_mixed.xsd @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + targetNamespace="www.example.org/unnamed/union" + xmlns:ns="www.example.org/seq/element/in/all/mixed" + elementFormDefault="unqualified"> + + + +<xsd:element name="MyComplexElem-13"> + <xsd:complexType mixed="true"> + <xsd:all> + <xsd:element name="a" type="xsd:string"/> + <xsd:element name="b" type="xsd:boolean"/> + </xsd:all> + <xsd:attribute name="foo" type="xsd:string" /> + </xsd:complexType> +</xsd:element> + + + +</xsd:schema> + diff --git a/regression_test/XML/XmlWorkflow/xsd/elements.xsd b/regression_test/XML/XmlWorkflow/xsd/elements.xsd index 150d439ed..684ffbb6a 100644 --- a/regression_test/XML/XmlWorkflow/xsd/elements.xsd +++ b/regression_test/XML/XmlWorkflow/xsd/elements.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/xsd/enum_field_names.xsd b/regression_test/XML/XmlWorkflow/xsd/enum_field_names.xsd new file mode 100644 index 000000000..2d03616c2 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/enum_field_names.xsd @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" + targetNamespace="www.example.org/enum/field/names"> +<simpleType name="state"> + <restriction base="string"> + <enumeration value="Off"/> + <enumeration value="off"/> + <enumeration value="on"/> + </restriction> +</simpleType> +</schema> diff --git a/regression_test/XML/XmlWorkflow/xsd/enumeration_remove_dup.xsd b/regression_test/XML/XmlWorkflow/xsd/enumeration_remove_dup.xsd new file mode 100644 index 000000000..accf73237 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/enumeration_remove_dup.xsd @@ -0,0 +1,79 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + targetNamespace="www.example.org/enumeration/remove/dup"> + +<xsd:simpleType name="state"> + <xsd:restriction base="xsd:string"> + <xsd:enumeration value="off"/> + <xsd:enumeration value="7"/> + <xsd:enumeration value="onn"/> + <xsd:enumeration value="off"/> + <xsd:enumeration value="1"/> + <xsd:enumeration value="3"/> + <xsd:enumeration value="2"/> + <xsd:enumeration value="2"/> + <xsd:enumeration value="0"/> + <xsd:enumeration value="0"/> + <xsd:enumeration value="onn"/> + <xsd:enumeration value="i"/> + <xsd:enumeration value="i"/> + <xsd:enumeration value="off"/> + <xsd:enumeration value="off"/> + <xsd:enumeration value="off"/> + </xsd:restriction> +</xsd:simpleType> + +<xsd:simpleType name="state2"> + <xsd:restriction base="xsd:integer"> + <xsd:enumeration value="7"/> + <xsd:enumeration value="1"/> + <xsd:enumeration value="3"/> + <xsd:enumeration value="2"/> + <xsd:enumeration value="2"/> + <xsd:enumeration value="0"/> + <xsd:enumeration value="0"/> + </xsd:restriction> +</xsd:simpleType> + +<xsd:simpleType name="state3"> + <xsd:restriction base="xsd:integer"> + <xsd:enumeration value="7"/> + </xsd:restriction> +</xsd:simpleType> + +<xsd:simpleType name="state4"> + <xsd:restriction base="xsd:integer"> + <xsd:enumeration value="7"/> + <xsd:enumeration value="7"/> + </xsd:restriction> +</xsd:simpleType> + +<xsd:complexType name="state5"> + <xsd:sequence> + <xsd:element name="ent_type"> + <xsd:simpleType> + <xsd:restriction base="xsd:string"> + <xsd:enumeration value="unknown" /> + <xsd:enumeration value="controlpart" /> + <xsd:enumeration value="controlpart" /> + <xsd:enumeration value="testcase" /> + <xsd:enumeration value="unknown" /> + <xsd:enumeration value="unknown" /> + <xsd:enumeration value="altstep" /> + <xsd:enumeration value="function" /> + <xsd:enumeration value="external_function" /> + <xsd:enumeration value="external_function" /> + <xsd:enumeration value="template" /> + <xsd:enumeration value="external_function" /> + <xsd:enumeration value="template" /> + <xsd:enumeration value="external_function" /> + <xsd:enumeration value="testcase" /> + <xsd:enumeration value="external_function" /> + </xsd:restriction> + </xsd:simpleType> + </xsd:element> + </xsd:sequence> +</xsd:complexType> + +</xsd:schema> diff --git a/regression_test/XML/XmlWorkflow/xsd/enumeration_restriction.xsd b/regression_test/XML/XmlWorkflow/xsd/enumeration_restriction.xsd new file mode 100644 index 000000000..ccb09e6ba --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/enumeration_restriction.xsd @@ -0,0 +1,128 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xs:schema xmlns="http://www.w3.org/2001/XMLSchema" + xmlns:xs="http://www.w3.org/2001/XMLSchema" + targetNamespace="www.example.org/enumeration/restriction" + xmlns:this="www.example.org/enumeration/restriction"> + +<xs:element name="e21unnamed"> + <xs:simpleType> + <union> + <xs:simpleType> + <restriction base="xs:integer"/> + </xs:simpleType> + <xs:simpleType> + <restriction base="xs:float"/> + </xs:simpleType> + <xs:simpleType> + <xs:restriction base="xs:string"/> + </xs:simpleType> + </union> + </xs:simpleType> +</xs:element> + +<xs:simpleType name="e22"> + <xs:restriction base="this:e21unnamed"> + <xs:enumeration value="20.4"/> + <xs:enumeration value="50"/> + <xs:enumeration value="small"/> + </xs:restriction> +</xs:simpleType> + + +<xs:element name="String_int"> + <xs:simpleType> + <union> + <xs:simpleType> + <xs:restriction base="xs:string"/> + </xs:simpleType> + <xs:simpleType> + <restriction base="xs:integer"/> + </xs:simpleType> + </union> + </xs:simpleType> +</xs:element> + +<xs:simpleType name="Everything_is_string"> + <xs:restriction base="this:String_int"> + <xs:enumeration value="20.4"/> + <xs:enumeration value="50"/> + <xs:enumeration value="small"/> + </xs:restriction> +</xs:simpleType> + +<xs:element name="Mixed_Types"> + <xs:simpleType> + <union> + <xs:simpleType> + <restriction base="xs:gDay"/> + </xs:simpleType> + <xs:simpleType> + <xs:restriction base="xs:gYear"/> + </xs:simpleType> + <xs:simpleType> + <restriction base="xs:gMonth"/> + </xs:simpleType> + <xs:simpleType> + <restriction base="xs:float"/> + </xs:simpleType> + <xs:simpleType> + <restriction base="xs:date"/> + </xs:simpleType> + <xs:simpleType> + <restriction base="xs:time"/> + </xs:simpleType> + <xs:simpleType> + <restriction base="xs:dateTime"/> + </xs:simpleType> + <xs:simpleType> + <restriction base="xs:gMonthDay"/> + </xs:simpleType> + <xs:simpleType> + <restriction base="xs:duration"/> + </xs:simpleType> + <xs:simpleType> + <restriction base="xs:gYearMonth"/> + </xs:simpleType> + <xs:simpleType> + <xs:restriction base="xs:string"/> + </xs:simpleType> + </union> + </xs:simpleType> +</xs:element> + +<xs:simpleType name="Mixed_Enum"> + <xs:restriction base="this:Mixed_Types"> + <xs:enumeration value="somestring"/> + <xs:enumeration value="2014-01-01"/> + <xs:enumeration value="20.4"/> + <xs:enumeration value="05:05:00"/> + <xs:enumeration value="---30"/> + <xs:enumeration value="--05"/> + <xs:enumeration value="0085"/> + <xs:enumeration value="3.14"/> + <xs:enumeration value="small"/> + <xs:enumeration value="2013-11-23T17:45:56"/> + <xs:enumeration value="--01-03"/> + <xs:enumeration value="1999-08"/> + <xs:enumeration value="P5Y2M10DT15H"/> + </xs:restriction> +</xs:simpleType> + +<xs:element name="Only_int"> + <xs:simpleType> + <union> + <xs:simpleType> + <restriction base="xs:integer"/> + </xs:simpleType> + </union> + </xs:simpleType> +</xs:element> + +<xs:simpleType name="Ints"> + <xs:restriction base="this:Only_int"> + <xs:enumeration value="14"/> + <xs:enumeration value="somestring"/> + </xs:restriction> +</xs:simpleType> + +</xs:schema> diff --git a/regression_test/XML/XmlWorkflow/xsd/enumeration_restriction2.xsd b/regression_test/XML/XmlWorkflow/xsd/enumeration_restriction2.xsd new file mode 100644 index 000000000..7dbb68be8 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/enumeration_restriction2.xsd @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + targetNamespace="www.example.org/seq/enumeration/restriction" + xmlns:ns2="www.example.org/seq/enumeration/restriction" + elementFormDefault="unqualified"> + + +<xsd:complexType name="MatchingProblemType"> + <xsd:sequence> + <xsd:element name="operation"> + <xsd:simpleType> + <xsd:restriction base="string"> + <xsd:enumeration value="receive" /> + <xsd:enumeration value="trigger" /> + <xsd:enumeration value="getcall" /> + <xsd:enumeration value="getreply" /> + <xsd:enumeration value="catch" /> + <xsd:enumeration value="check" > + <annotation><documentation>Must be "any port"!</documentation></annotation> + </xsd:enumeration> + </xsd:restriction> + </xsd:simpleType> + </xsd:element> + </xsd:sequence> +</xsd:complexType> + +<xsd:complexType name="MatchingProblemTypeRestricted"> + <xsd:sequence> + <xsd:element name="operation"> + <xsd:simpleType> + <xsd:restriction> + <xsd:simpleType> + <xsd:restriction base="xsd:string"> + <xsd:enumeration value="white"/> + <xsd:enumeration value="black"/> + <xsd:enumeration value="red"/> + </xsd:restriction> + </xsd:simpleType> + <xsd:minLength value="2"/> + <xsd:maxLength value="4"/> + </xsd:restriction> + </xsd:simpleType> + </xsd:element> + </xsd:sequence> +</xsd:complexType> + + + +</xsd:schema> + diff --git a/regression_test/XML/XmlWorkflow/xsd/extending_complex_types.xsd b/regression_test/XML/XmlWorkflow/xsd/extending_complex_types.xsd index ca0b6b6cf..2d9df2ed3 100644 --- a/regression_test/XML/XmlWorkflow/xsd/extending_complex_types.xsd +++ b/regression_test/XML/XmlWorkflow/xsd/extending_complex_types.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/xsd/fixed_value.xsd b/regression_test/XML/XmlWorkflow/xsd/fixed_value.xsd new file mode 100644 index 000000000..a6f1a2fce --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/fixed_value.xsd @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + targetNamespace="www.example.org/fixed/value"> + +<xsd:element name="StringType" type="xsd:string" fixed="a"/> +<xsd:element name="IntegerType" type="xsd:integer" fixed="7"/> +<xsd:element name="FloatType" type="xsd:float" fixed="7.0"/> +<xsd:element name="DoubleType" type="xsd:double" fixed="7.0"/> +<xsd:element name="BooleanType" type="xsd:boolean" fixed="true"/> +<xsd:element name="BooleanType2" type="xsd:boolean" fixed="0"/> +<xsd:element name="DateType" type="xsd:date" fixed="2011-11-11"/> +<xsd:element name="TimeType" type="xsd:time" fixed="11:11:11"/> +<xsd:element name="DateTimeType" type="xsd:dateTime" fixed="2002-05-30T09:00:00"/> +<xsd:element name="DayType" type="xsd:gDay" fixed="---13"/> +<xsd:element name="MonthType" type="xsd:gMonth" fixed="--11"/> +<xsd:element name="MonthDayType" type="xsd:gMonthDay" fixed="--11-30"/> +<xsd:element name="YearType" type="xsd:gYear" fixed="1999"/> +<xsd:element name="YearMonthType" type="xsd:gYearMonth" fixed="1999-11"/> + +<xsd:element name="HexType" type="xsd:hexBinary" fixed="AA"/> +<xsd:element name="Base64Type" type="xsd:base64Binary" fixed=" QQ== "/> +</xsd:schema> diff --git a/regression_test/XML/XmlWorkflow/xsd/generate_element_substitution.xsd b/regression_test/XML/XmlWorkflow/xsd/generate_element_substitution.xsd new file mode 100644 index 000000000..435600ecf --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/generate_element_substitution.xsd @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:this="www.example.org/generate/element/substitution" + targetNamespace="www.example.org/generate/element/substitution" + blockDefault="extension"> + +<xsd:element name="head" type="string" /> + +<xsd:element name="complexEnum"> + <xsd:complexType> + <xsd:simpleContent> + <xsd:extension base="xsd:string"> + <xsd:attribute name="foo" type="xsd:float"/> + <xsd:attribute name="bar" type="xsd:integer"/> + </xsd:extension> + </xsd:simpleContent> + </xsd:complexType> +</xsd:element> + +<xsd:element name="member2" substitutionGroup="this:head"> + <xsd:complexType > + <xsd:complexContent> + <xsd:extension base="this:complexEnum"> + <xsd:sequence> + </xsd:sequence> + <xsd:attribute name="unitOfAge" type="xsd:string"/> + </xsd:extension> + </xsd:complexContent> + </xsd:complexType> +</xsd:element> + +<xsd:element name="ize"> + <xsd:complexType> + <xsd:sequence> + <xsd:element ref="this:head" minOccurs="0" maxOccurs="unbounded"/> + </xsd:sequence> + </xsd:complexType> +</xsd:element> + +</xsd:schema> diff --git a/regression_test/XML/XmlWorkflow/xsd/group_all.xsd b/regression_test/XML/XmlWorkflow/xsd/group_all.xsd index 7c30929ca..32daca650 100644 --- a/regression_test/XML/XmlWorkflow/xsd/group_all.xsd +++ b/regression_test/XML/XmlWorkflow/xsd/group_all.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/xsd/groups.xsd b/regression_test/XML/XmlWorkflow/xsd/groups.xsd index 248de0a0d..292a77420 100644 --- a/regression_test/XML/XmlWorkflow/xsd/groups.xsd +++ b/regression_test/XML/XmlWorkflow/xsd/groups.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/xsd/id_attrib.xsd b/regression_test/XML/XmlWorkflow/xsd/id_attrib.xsd new file mode 100644 index 000000000..370043ca5 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/id_attrib.xsd @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xs:schema xmlns="http://www.w3.org/2001/XMLSchema" + xmlns:xs="http://www.w3.org/2001/XMLSchema" + targetNamespace="www.example.org/id_attrib"> + +<xs:simpleType name="TypeName" id="some_id"> + <xs:restriction base="float"/> +</xs:simpleType> + +</xs:schema> diff --git a/regression_test/XML/XmlWorkflow/xsd/import_prefix_name.xsd b/regression_test/XML/XmlWorkflow/xsd/import_prefix_name.xsd new file mode 100644 index 000000000..5ca8e0663 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/import_prefix_name.xsd @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xs:schema xmlns="http://www.w3.org/2001/XMLSchema" + xmlns:xs="http://www.w3.org/2001/XMLSchema" + targetNamespace="www.example.org/import/prefix" + xmlns:this="www.example.org/import/prefix" + xmlns:imp="www.example.org/imported"> +<xs:import namespace="www.example.org/imported" schemaLocation="imported_prefix_name.xsd"/> + +<xs:element name="Foobar" type="imp:foobar"/> + +<xs:attribute name="Ding" type="imp:ding"/> + +<xs:complexType name="valami"> + <xs:sequence> + <xs:element name="Foobar" type="imp:foobar"/> + </xs:sequence> + <xs:attribute name="Ding" type="imp:ding"/> +</xs:complexType> + +<xs:element name="Valami" type="this:valami"/> + +</xs:schema> diff --git a/regression_test/XML/XmlWorkflow/xsd/imported2.xsd b/regression_test/XML/XmlWorkflow/xsd/imported2.xsd new file mode 100644 index 000000000..5229db688 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/imported2.xsd @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + targetNamespace="www.example.org/imported2"> + +<xsd:simpleType name="foobar"> + <xsd:restriction base="integer"/> +</xsd:simpleType> + +<xsd:simpleType name="ding"> + <xsd:restriction base="integer"/> +</xsd:simpleType> + +<xsd:element name="bar"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="something" type="string" minOccurs="0"/> + </xsd:sequence> + </xsd:complexType> +</xsd:element> + +</xsd:schema> diff --git a/regression_test/XML/XmlWorkflow/xsd/imported_module.xsd b/regression_test/XML/XmlWorkflow/xsd/imported_module.xsd new file mode 100644 index 000000000..1e1530724 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/imported_module.xsd @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" + targetNamespace="imported_module" + xmlns:ns1="imported_module"> + <element name="MyType" type="string"/> + +</schema> diff --git a/regression_test/XML/XmlWorkflow/xsd/imported_module_.xsd b/regression_test/XML/XmlWorkflow/xsd/imported_module_.xsd new file mode 100644 index 000000000..4d3fca509 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/imported_module_.xsd @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" + targetNamespace="imported_module_" + xmlns:ns2="imported_module"> + <element name="MyType" type="integer"/> +</schema> diff --git a/regression_test/XML/XmlWorkflow/xsd/imported_prefix_name.xsd b/regression_test/XML/XmlWorkflow/xsd/imported_prefix_name.xsd new file mode 100644 index 000000000..03df4768a --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/imported_prefix_name.xsd @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + targetNamespace="www.example.org/imported"> + +<xsd:simpleType name="foobar"> + <xsd:restriction base="integer"/> +</xsd:simpleType> + +<xsd:simpleType name="ding"> + <xsd:restriction base="integer"/> +</xsd:simpleType> + +<xsd:element name="bar"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="something" type="string" minOccurs="0"/> + </xsd:sequence> + </xsd:complexType> +</xsd:element> +<xsd:attribute name="lang" type="xsd:language"> + <xsd:annotation> + <xsd:documentation>In due course, we should install the relevant ISO 2- and 3-letter + codes as the enumerated possible values . . .</xsd:documentation> + </xsd:annotation> + </xsd:attribute> + +</xsd:schema> diff --git a/regression_test/XML/XmlWorkflow/xsd/include1dir1a.xsd b/regression_test/XML/XmlWorkflow/xsd/include1dir1a.xsd index ff11c8a5c..e1a38d96b 100644 --- a/regression_test/XML/XmlWorkflow/xsd/include1dir1a.xsd +++ b/regression_test/XML/XmlWorkflow/xsd/include1dir1a.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/xsd/include1dir1b.xsd b/regression_test/XML/XmlWorkflow/xsd/include1dir1b.xsd index 33abc97c8..f351c9897 100644 --- a/regression_test/XML/XmlWorkflow/xsd/include1dir1b.xsd +++ b/regression_test/XML/XmlWorkflow/xsd/include1dir1b.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/xsd/include1dir2a.xsd b/regression_test/XML/XmlWorkflow/xsd/include1dir2a.xsd index 7d727bc0c..62f22cefe 100644 --- a/regression_test/XML/XmlWorkflow/xsd/include1dir2a.xsd +++ b/regression_test/XML/XmlWorkflow/xsd/include1dir2a.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/xsd/include1dir2b.xsd b/regression_test/XML/XmlWorkflow/xsd/include1dir2b.xsd index 8151fb972..ae2765aea 100644 --- a/regression_test/XML/XmlWorkflow/xsd/include1dir2b.xsd +++ b/regression_test/XML/XmlWorkflow/xsd/include1dir2b.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/xsd/includeCircular1a.xsd b/regression_test/XML/XmlWorkflow/xsd/includeCircular1a.xsd index 75334d093..34c0b81e2 100644 --- a/regression_test/XML/XmlWorkflow/xsd/includeCircular1a.xsd +++ b/regression_test/XML/XmlWorkflow/xsd/includeCircular1a.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/xsd/includeCircular1b.xsd b/regression_test/XML/XmlWorkflow/xsd/includeCircular1b.xsd index 8fa9f434d..dbe3396f6 100644 --- a/regression_test/XML/XmlWorkflow/xsd/includeCircular1b.xsd +++ b/regression_test/XML/XmlWorkflow/xsd/includeCircular1b.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/xsd/includeCircular2a.xsd b/regression_test/XML/XmlWorkflow/xsd/includeCircular2a.xsd index bfd3608c5..63ebec149 100644 --- a/regression_test/XML/XmlWorkflow/xsd/includeCircular2a.xsd +++ b/regression_test/XML/XmlWorkflow/xsd/includeCircular2a.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/xsd/includeCircular2b.xsd b/regression_test/XML/XmlWorkflow/xsd/includeCircular2b.xsd index b72435c20..77776a2b8 100644 --- a/regression_test/XML/XmlWorkflow/xsd/includeCircular2b.xsd +++ b/regression_test/XML/XmlWorkflow/xsd/includeCircular2b.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/xsd/includeCircular3a.xsd b/regression_test/XML/XmlWorkflow/xsd/includeCircular3a.xsd index 87e70b27b..db251999d 100644 --- a/regression_test/XML/XmlWorkflow/xsd/includeCircular3a.xsd +++ b/regression_test/XML/XmlWorkflow/xsd/includeCircular3a.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/xsd/includeCircular3b.xsd b/regression_test/XML/XmlWorkflow/xsd/includeCircular3b.xsd index 4a2229b69..78c4ffce5 100644 --- a/regression_test/XML/XmlWorkflow/xsd/includeCircular3b.xsd +++ b/regression_test/XML/XmlWorkflow/xsd/includeCircular3b.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/xsd/includeCircular4a.xsd b/regression_test/XML/XmlWorkflow/xsd/includeCircular4a.xsd index 5014b1cb0..1c140f613 100644 --- a/regression_test/XML/XmlWorkflow/xsd/includeCircular4a.xsd +++ b/regression_test/XML/XmlWorkflow/xsd/includeCircular4a.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/xsd/includeCircular4b.xsd b/regression_test/XML/XmlWorkflow/xsd/includeCircular4b.xsd index e31ec0efc..10daa4943 100644 --- a/regression_test/XML/XmlWorkflow/xsd/includeCircular4b.xsd +++ b/regression_test/XML/XmlWorkflow/xsd/includeCircular4b.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/xsd/list.xsd b/regression_test/XML/XmlWorkflow/xsd/list.xsd index ecc739a43..c5adcff06 100644 --- a/regression_test/XML/XmlWorkflow/xsd/list.xsd +++ b/regression_test/XML/XmlWorkflow/xsd/list.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/xsd/list_invalid.xsd b/regression_test/XML/XmlWorkflow/xsd/list_invalid.xsd index c37773052..5289b4939 100644 --- a/regression_test/XML/XmlWorkflow/xsd/list_invalid.xsd +++ b/regression_test/XML/XmlWorkflow/xsd/list_invalid.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/xsd/list_simpletype.xsd b/regression_test/XML/XmlWorkflow/xsd/list_simpletype.xsd new file mode 100644 index 000000000..6cd1129b5 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/list_simpletype.xsd @@ -0,0 +1,90 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:this="www.example.org/list/simpletype" + targetNamespace="www.example.org/list/simpletype"> + +<xsd:element name="SimpleListEnumeration"> + <xsd:simpleType> + <xsd:list> + <xsd:simpleType> + <xsd:restriction base="string"> + <xsd:enumeration value="Red"/> + <xsd:enumeration value="Orange"/> + </xsd:restriction> + </xsd:simpleType> + </xsd:list> + </xsd:simpleType> +</xsd:element> + +<xsd:element name="SimpleListUnion"> + <xsd:simpleType> + <xsd:list> + <xsd:simpleType> + <xsd:union> + <xsd:simpleType> + <xsd:restriction base="boolean" /> + </xsd:simpleType> + <xsd:simpleType> + <xsd:restriction base="float" /> + </xsd:simpleType> + </xsd:union> + </xsd:simpleType> + </xsd:list> + </xsd:simpleType> +</xsd:element> + +<xsd:element name="SimpleListEnumerationNumber"> + <xsd:simpleType> + <xsd:list> + <xsd:simpleType> + <xsd:restriction base="xsd:integer"> + <xsd:enumeration value="0"/> + <xsd:enumeration value="5"/> + <xsd:enumeration value="-5"/> + <xsd:enumeration value="10"/> + </xsd:restriction> + </xsd:simpleType> + </xsd:list> + </xsd:simpleType> +</xsd:element> + +<xsd:element name="ComplexListUnionEnumeration"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="ListEnumeration"> + <xsd:simpleType> + <xsd:list> + <xsd:simpleType> + <xsd:restriction base="string"> + <xsd:enumeration value="Red"/> + <xsd:enumeration value="Orange"/> + </xsd:restriction> + </xsd:simpleType> + </xsd:list> + </xsd:simpleType> + </xsd:element> + <xsd:element name="ListUnion"> + <xsd:simpleType> + <xsd:list> + <xsd:simpleType> + <xsd:union> + <xsd:simpleType> + <xsd:restriction base="boolean" /> + </xsd:simpleType> + <xsd:simpleType> + <xsd:restriction base="float" /> + </xsd:simpleType> + </xsd:union> + </xsd:simpleType> + </xsd:list> + </xsd:simpleType> + </xsd:element> + </xsd:sequence> + </xsd:complexType> +</xsd:element> + + + + +</xsd:schema> diff --git a/regression_test/XML/XmlWorkflow/xsd/long_extension.xsd b/regression_test/XML/XmlWorkflow/xsd/long_extension.xsd new file mode 100644 index 000000000..fe49abe98 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/long_extension.xsd @@ -0,0 +1,76 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:this="www.example.org/long/extension" +xmlns:xml="http://www.w3.org/XML/1675/namespace" + targetNamespace="www.example.org/long/extension"> + +<xsd:element name="Top"> + <xsd:complexType> + <xsd:complexContent> + <xsd:extension base="this:TopBase1"> + <xsd:sequence> + <xsd:element name="Subelem" minOccurs="0" maxOccurs="unbounded" +type="string"/> + </xsd:sequence> + <xsd:attribute name="SubAttrib" type="string" use="required"/> + </xsd:extension> + </xsd:complexContent> + </xsd:complexType> +</xsd:element> + + +<xsd:complexType name="TopBase1"> + <xsd:complexContent> + <xsd:extension base="this:baseElement"> + <xsd:sequence> + <xsd:element name="author" type="xsd:string"/> + <xsd:element name="action" minOccurs="0" maxOccurs="unbounded"> + <xsd:complexType> + <xsd:complexContent> + <xsd:extension base="this:namedBaseElement"> + <xsd:sequence> + <xsd:element name="parameter" type="string" minOccurs="0" maxOccurs="unbounded"/> + </xsd:sequence> + </xsd:extension> + </xsd:complexContent> + </xsd:complexType> + </xsd:element> + <xsd:element name="event" minOccurs="0" maxOccurs="unbounded"> + <xsd:complexType> + <xsd:complexContent> + <xsd:extension base="this:response"> + <xsd:sequence> + <xsd:element name="description" type="xsd:string"/> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:Name" use="required"/> + </xsd:extension> + </xsd:complexContent> + </xsd:complexType> + </xsd:element> + </xsd:sequence> + <xsd:attribute ref="xsd:string" use="required"/> + </xsd:extension> + </xsd:complexContent> +</xsd:complexType> + +<xsd:complexType name="namedBaseElement"> + <xsd:complexContent> + <xsd:extension base="this:baseElement"> + <xsd:attribute name="name" type="string" use="required"/> + </xsd:extension> + </xsd:complexContent> +</xsd:complexType> +<xsd:complexType name="baseElement"> + <xsd:sequence> + <xsd:element name="label" type="xsd:string"/> + </xsd:sequence> +</xsd:complexType> + +<xsd:complexType name="response"> + <xsd:sequence> + <xsd:element name="item" type="string" minOccurs="0"/> + </xsd:sequence> +</xsd:complexType> + +</xsd:schema> diff --git a/regression_test/XML/XmlWorkflow/xsd/minBound_maxBound.xsd b/regression_test/XML/XmlWorkflow/xsd/minBound_maxBound.xsd index 2c0cb61a4..9c8b56e64 100644 --- a/regression_test/XML/XmlWorkflow/xsd/minBound_maxBound.xsd +++ b/regression_test/XML/XmlWorkflow/xsd/minBound_maxBound.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/xsd/minOccurs_maxOccurs.xsd b/regression_test/XML/XmlWorkflow/xsd/minOccurs_maxOccurs.xsd index 114008b7e..4fcd13eeb 100644 --- a/regression_test/XML/XmlWorkflow/xsd/minOccurs_maxOccurs.xsd +++ b/regression_test/XML/XmlWorkflow/xsd/minOccurs_maxOccurs.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/xsd/module_typename_conversion.xsd b/regression_test/XML/XmlWorkflow/xsd/module_typename_conversion.xsd new file mode 100644 index 000000000..595b9f74e --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/module_typename_conversion.xsd @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + targetNamespace="module_typename_conversion"> + <xsd:import namespace="MyTypes" schemaLocation="module_typename_conversion_1.xsd"/> + +<xsd:attribute name="MyTypes__" type="string"/> + +<xsd:element name="MyTypes_" type="string"/> + +<xsd:element name="MyTypes"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="MyTypes" type="string"/> + </xsd:sequence> + </xsd:complexType> +</xsd:element> + +</xsd:schema> diff --git a/regression_test/XML/XmlWorkflow/xsd/module_typename_conversion_1.xsd b/regression_test/XML/XmlWorkflow/xsd/module_typename_conversion_1.xsd new file mode 100644 index 000000000..03fc277b0 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/module_typename_conversion_1.xsd @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + targetNamespace="MyTypes"> + +<xsd:attribute name="MyTypes__" type="string"/> + +<xsd:element name="MyTypes_" type="string"/> + +<xsd:element name="MyTypes"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="MyTypes" type="string"/> + </xsd:sequence> + </xsd:complexType> +</xsd:element> + +</xsd:schema> diff --git a/regression_test/XML/XmlWorkflow/xsd/name_clash_element-attribute.xsd b/regression_test/XML/XmlWorkflow/xsd/name_clash_element-attribute.xsd index 5a2d55c29..6f28821e9 100644 --- a/regression_test/XML/XmlWorkflow/xsd/name_clash_element-attribute.xsd +++ b/regression_test/XML/XmlWorkflow/xsd/name_clash_element-attribute.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/xsd/name_clash_element-attribute_noNsPrefix.xsd b/regression_test/XML/XmlWorkflow/xsd/name_clash_element-attribute_noNsPrefix.xsd index d393f17ba..8cf9100e0 100644 --- a/regression_test/XML/XmlWorkflow/xsd/name_clash_element-attribute_noNsPrefix.xsd +++ b/regression_test/XML/XmlWorkflow/xsd/name_clash_element-attribute_noNsPrefix.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/xsd/name_conv_non_alphanumeric.xsd b/regression_test/XML/XmlWorkflow/xsd/name_conv_non_alphanumeric.xsd new file mode 100644 index 000000000..28671c9e9 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/name_conv_non_alphanumeric.xsd @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="UTF-8"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" + targetNamespace="http://www.example.org/name_conv2;;;;;;" > + +</schema> diff --git a/regression_test/XML/XmlWorkflow/xsd/name_conv_remove_seq_of_low_line.xsd b/regression_test/XML/XmlWorkflow/xsd/name_conv_remove_seq_of_low_line.xsd new file mode 100644 index 000000000..f354444ef --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/name_conv_remove_seq_of_low_line.xsd @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="UTF-8"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" + targetNamespace="http://////////www.example.org/name_conv3///" > + +</schema> diff --git a/regression_test/XML/XmlWorkflow/xsd/name_conv_with_z.xsd b/regression_test/XML/XmlWorkflow/xsd/name_conv_with_z.xsd new file mode 100644 index 000000000..16754266d --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/name_conv_with_z.xsd @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="UTF-8"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" + targetNamespace="www.example.org/name_conv/http://" > + +</schema> diff --git a/regression_test/XML/XmlWorkflow/xsd/name_conversion_extension_attrib.xsd b/regression_test/XML/XmlWorkflow/xsd/name_conversion_extension_attrib.xsd new file mode 100644 index 000000000..45dfea72d --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/name_conversion_extension_attrib.xsd @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xs:schema + xmlns="name_conversion_extension_attrib" + targetNamespace="name_conversion_extension_attrib" + xmlns:xs="http://www.w3.org/2001/XMLSchema" + xmlns:ns="name_conversion_extension_attrib" + elementFormDefault="qualified" + attributeFormDefault="unqualified"> +<xs:element name="Ol-name-type"> + <xs:complexType> + <xs:sequence> + <xs:element name="allow-true-action" type="xs:integer"> + </xs:element> + </xs:sequence> + </xs:complexType> +</xs:element> +<xs:element name="Ol-actions-type"> + <xs:complexType> + <xs:sequence> + <xs:element name="do-not-disturb" type="xs:integer"> + </xs:element> + <xs:element name="play-segmented-announcement" nillable="true"> + <xs:complexType> + <xs:complexContent> + <xs:extension base="ns:Ol-name-type"> + <xs:attribute name="announcement-name" type="ns:Ol-name-type" use="required"/> + </xs:extension> + </xs:complexContent> + </xs:complexType> + </xs:element> + </xs:sequence> + </xs:complexType> +</xs:element> +</xs:schema> diff --git a/regression_test/XML/XmlWorkflow/xsd/namespaceas.xsd b/regression_test/XML/XmlWorkflow/xsd/namespaceas.xsd new file mode 100644 index 000000000..2887ce8d0 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/namespaceas.xsd @@ -0,0 +1,61 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:this="www.example.org/namespaceas" + xmlns:other="www.example.org/imported2" + targetNamespace="www.example.org/namespaceas"> + <xsd:import namespace="www.example.org/imported2" schemaLocation="imported2.xsd"/> + +<xsd:element name="SomeType" type="other:foobar"/> + + + +<xsd:element name="Type"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="something" type="other:foobar" minOccurs="0" /> + <xsd:element ref="other:foobar"/> + </xsd:sequence> + </xsd:complexType> +</xsd:element> + +<xsd:complexType name="OtherType"> + <xsd:sequence> + <xsd:element name="billingAccountNumber"> + <xsd:simpleType> + <xsd:restriction base="other:foobar"/> + </xsd:simpleType> + </xsd:element> + <xsd:element name="something"> + <xsd:complexType><xsd:simpleContent> + <xsd:extension base="other:foobar"/> + </xsd:simpleContent></xsd:complexType> + </xsd:element> + <xsd:element name="something2"> + <xsd:complexType> + <xsd:simpleContent> + <xsd:extension base="other:bar"/> + </xsd:simpleContent> + </xsd:complexType> + </xsd:element> + <xsd:element name="something3"> + <xsd:complexType> + <xsd:complexContent> + <xsd:extension base="other:bar"/> + </xsd:complexContent> + </xsd:complexType> + </xsd:element> + <xsd:element name="something4"> + <xsd:complexType> + <xsd:complexContent> + <xsd:restriction base="other:bar"> + <xsd:element name="something" type="string" minOccurs="1"/> + </xsd:restriction> + </xsd:complexContent> + </xsd:complexType> + </xsd:element> + </xsd:sequence> +</xsd:complexType> + + +</xsd:schema> diff --git a/regression_test/XML/XmlWorkflow/xsd/nillable_annotations.xsd b/regression_test/XML/XmlWorkflow/xsd/nillable_annotations.xsd new file mode 100644 index 000000000..fa616c4b0 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/nillable_annotations.xsd @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="nillable_annotations" elementFormDefault="qualified" attributeFormDefault="unqualified"> + <xs:annotation> + <xs:documentation xml:lang="en"> + SomeComment + </xs:documentation> + </xs:annotation> + <xs:element name="abbreviated-dialing" nillable="true"> + <xs:complexType> + <xs:sequence> + <xs:element name="abbreviated-dialing-operator-configuration" type="xs:integer" nillable="true" minOccurs="0"> + <xs:annotation> + <xs:documentation> + SomeComment + </xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="abbreviated-dialing-user-configuration" type="xs:integer" nillable="true" minOccurs="0"> + <xs:annotation> + <xs:documentation> + SomeComment + </xs:documentation> + </xs:annotation> + </xs:element> + </xs:sequence> + </xs:complexType> + </xs:element> +</xs:schema> diff --git a/regression_test/XML/XmlWorkflow/xsd/nillable_fixed.xsd b/regression_test/XML/XmlWorkflow/xsd/nillable_fixed.xsd new file mode 100644 index 000000000..54da36515 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/nillable_fixed.xsd @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + targetNamespace="www.example.org/nillable/fixed"> + +<xsd:element name="remarkNillable" type="xsd:string" nillable="true" fixed="fixed"/> + +<xsd:element name="e16c"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="foo" type="xsd:integer"/> + <xsd:element name="bar" type="xsd:string" nillable="true" fixed="fixed"/> + </xsd:sequence> + </xsd:complexType> +</xsd:element> + +<xsd:element name="SeqNillable" nillable="true"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="forename" type="xsd:string" nillable="true" fixed="ok"/> + <xsd:element name="surname" type="xsd:string" minOccurs="0" nillable="true" default="default"/> + <xsd:element name="livingAddress" type="xsd:string" minOccurs="0" + maxOccurs="unbounded" nillable="true" fixed="fixed"/> + </xsd:sequence> + <xsd:attribute name="foo" type="xsd:integer" fixed="1"/> + <xsd:attribute name="bar" type="xsd:integer"/> + </xsd:complexType> +</xsd:element> + + +</xsd:schema> diff --git a/regression_test/XML/XmlWorkflow/xsd/nillable_in_nillable_extension.xsd b/regression_test/XML/XmlWorkflow/xsd/nillable_in_nillable_extension.xsd new file mode 100644 index 000000000..955c1c31a --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/nillable_in_nillable_extension.xsd @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" +xmlns:ns12="http://www.example.org/nillable/in/nillable/extension" +targetNamespace="http://www.example.org/nillable/in/nillable/extension" +elementFormDefault="qualified" +attributeFormDefault="unqualified"> + +<xs:complexType name="SeqNillable"> + <xs:sequence> + <xs:element name="Number" type="xs:integer" minOccurs="0"> + </xs:element> + <xs:element name="NillableNumber" type="xs:integer" minOccurs="0" maxOccurs="32" nillable="true"> + </xs:element> + </xs:sequence> +</xs:complexType> + +<xs:element name="NillableInRecord"> + <xs:complexType> + <xs:sequence> + <xs:element name="allow-do-not" type="xs:boolean"> + </xs:element> + <xs:element name="SeqNillableExtended" minOccurs="0" maxOccurs="1" nillable="true"> + <xs:complexType> + <xs:complexContent> + <xs:extension base="ns12:SeqNillable"> + <xs:attribute name="PhoneNumber" type="xs:integer"> + </xs:attribute> + </xs:extension> + </xs:complexContent> + </xs:complexType> + </xs:element> + </xs:sequence> + </xs:complexType> +</xs:element> + +</xs:schema> diff --git a/regression_test/XML/XmlWorkflow/xsd/no_ns_connector.xsd b/regression_test/XML/XmlWorkflow/xsd/no_ns_connector.xsd new file mode 100644 index 000000000..d834536fc --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/no_ns_connector.xsd @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns="www.example.org/no/ns/connector" + targetNamespace="www.example.org/no/ns/connector"> + +<xsd:element name="java-attribute" type="java-attribute" /> + +<xsd:complexType name="java-attribute" abstract="true"> + <xsd:attribute name="java-attribute" type="xsd:string"/> + <xsd:attribute name="xml-accessor-type" type="string"/> +</xsd:complexType> + +</xsd:schema> + diff --git a/regression_test/XML/XmlWorkflow/xsd/not_a_number_minex_inf_maxex_-inf.xsd b/regression_test/XML/XmlWorkflow/xsd/not_a_number_minex_inf_maxex_-inf.xsd new file mode 100644 index 000000000..fbaefbdf9 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/not_a_number_minex_inf_maxex_-inf.xsd @@ -0,0 +1,65 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xs:schema xmlns="http://www.w3.org/2001/XMLSchema" + xmlns:xs="http://www.w3.org/2001/XMLSchema" + targetNamespace="www.example.org/not_a_number/minex_inf/maxex_-inf"> + +<xs:simpleType name="e9e"> + <xs:restriction base="float"> + <xs:minInclusive value="NaN"/> + </xs:restriction> +</xs:simpleType> + +<xs:simpleType name="e9e_1"> + <xs:restriction base="float"> + <xs:minExclusive value="NaN"/> + </xs:restriction> +</xs:simpleType> + +<xs:simpleType name="e9e_2"> + <xs:restriction base="float"> + <xs:minInclusive value="1.0"/> + <xs:maxInclusive value="NaN"/> + </xs:restriction> +</xs:simpleType> + +<xs:simpleType name="e9e_3"> + <xs:restriction base="float"> + <xs:maxExclusive value="NaN"/> + </xs:restriction> +</xs:simpleType> + +<xs:simpleType name="e9e_4"> + <xs:restriction base="float"> + <xs:maxExclusive value="-INF"/> + </xs:restriction> +</xs:simpleType> + +<xs:simpleType name="e9e_5"> + <xs:restriction base="float"> + <xs:minExclusive value="INF"/> + </xs:restriction> +</xs:simpleType> + +<xs:element name="union_maxeclusive_NaN"> + <xs:simpleType> + <union> + <xs:simpleType> + <xs:restriction base="xs:string"/> + </xs:simpleType> + + <xs:simpleType> + <restriction base="xs:float"> + <xs:maxExclusive value="NaN"/> + </restriction> + </xs:simpleType> + + <xs:simpleType> + <restriction base="xs:integer"/> + </xs:simpleType> + </union> + </xs:simpleType> +</xs:element> + + + +</xs:schema> diff --git a/regression_test/XML/XmlWorkflow/xsd/qualified_element_attrib.xsd b/regression_test/XML/XmlWorkflow/xsd/qualified_element_attrib.xsd new file mode 100644 index 000000000..cd58d2c5a --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/qualified_element_attrib.xsd @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:ns22="www.example.org/qualified/element/attrib" + targetNamespace="www.example.org/qualified/element/attrib" + elementFormDefault="qualified" + attributeFormDefault="qualified"> + + +<xsd:element name="elements"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="elem1" type="string"/> + <xsd:element name="elem2" type="string" form="qualified"/> + <xsd:element name="elem3" type="string" form="unqualified"/> + </xsd:sequence> + </xsd:complexType> +</xsd:element> + +<xsd:element name="attributes"> + <xsd:complexType> + <xsd:attribute name="attrib1" type="string"/> + <xsd:attribute name="attrib2" type="string" form="qualified"/> + <xsd:attribute name="attrib3" type="string" form="unqualified"/> + </xsd:complexType> +</xsd:element> + + +</xsd:schema> diff --git a/regression_test/XML/XmlWorkflow/xsd/ranges_float.xsd b/regression_test/XML/XmlWorkflow/xsd/ranges_float.xsd index 0676056de..603b8c298 100644 --- a/regression_test/XML/XmlWorkflow/xsd/ranges_float.xsd +++ b/regression_test/XML/XmlWorkflow/xsd/ranges_float.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/xsd/ranges_integer.xsd b/regression_test/XML/XmlWorkflow/xsd/ranges_integer.xsd index 4e929bb22..91f901397 100644 --- a/regression_test/XML/XmlWorkflow/xsd/ranges_integer.xsd +++ b/regression_test/XML/XmlWorkflow/xsd/ranges_integer.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/xsd/regex_square_brackets.xsd b/regression_test/XML/XmlWorkflow/xsd/regex_square_brackets.xsd new file mode 100644 index 000000000..532220d37 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/regex_square_brackets.xsd @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" +xmlns:xs="http://www.w3.org/2001/XMLSchema" + targetNamespace="www.example.org/regex/square/brackets"> + +<xs:simpleType name="pattern1"> + <xs:restriction base="xs:string"> + <xs:pattern value="}[(@){1,5}{}|\\.\[\]]{3,}"/> + </xs:restriction> +</xs:simpleType> + +<xs:simpleType name="pattern2"> + <xs:restriction base="xs:string"> + <xs:pattern value="{[?.a-zA-Z(@){1,3},\[\]/\^{}]?"/> + </xs:restriction> +</xs:simpleType> + +<xs:simpleType name="pattern3"> + <xs:restriction base="xs:string"> + <xs:pattern value="(sip:(^[a-zA-Z0-9\+\-_]*(!.*!)?[(@){1}a-zA-Z0-9\.\-_]){1,71})|tel:\+([\-.()0-9]*(!.*!)?){4,71}"/> + </xs:restriction> +</xs:simpleType> + +</schema> diff --git a/regression_test/XML/XmlWorkflow/xsd/restricting_complex_types.xsd b/regression_test/XML/XmlWorkflow/xsd/restricting_complex_types.xsd index c2b0c19b4..0e8bd4ccd 100644 --- a/regression_test/XML/XmlWorkflow/xsd/restricting_complex_types.xsd +++ b/regression_test/XML/XmlWorkflow/xsd/restricting_complex_types.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/xsd/schema.xsd b/regression_test/XML/XmlWorkflow/xsd/schema.xsd index 53527a086..8ebbbb3f3 100644 --- a/regression_test/XML/XmlWorkflow/xsd/schema.xsd +++ b/regression_test/XML/XmlWorkflow/xsd/schema.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/xsd/seq_group_reference.xsd b/regression_test/XML/XmlWorkflow/xsd/seq_group_reference.xsd new file mode 100644 index 000000000..509bc194f --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/seq_group_reference.xsd @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + targetNamespace="www.example.org/seq/group/reference" + xmlns:ns9="www.example.org/seq/group/reference" + elementFormDefault="unqualified"> + +<xsd:complexType name="e15f"> + <xsd:sequence> + <xsd:element name="foobarGroup" type="xsd:string"/> + <xsd:group ref="ns9:foobarGroup"/> + </xsd:sequence> +</xsd:complexType> + +<xsd:complexType name="e15fa"> + <xsd:sequence> + <xsd:element name="foobarGroup" minOccurs="0" maxOccurs="unbounded" type="xsd:string"/> + <xsd:group ref="ns9:foobarGroup" minOccurs="5" maxOccurs="10"/> + </xsd:sequence> +</xsd:complexType> + + +<xsd:group name="foobarGroup"> + <xsd:sequence> + <xsd:element name="foo" type="xsd:string"/> + <xsd:element name="bar" type="xsd:string"/> + </xsd:sequence> +</xsd:group> + +</xsd:schema> + diff --git a/regression_test/XML/XmlWorkflow/xsd/sequence_embeds_sequence.xsd b/regression_test/XML/XmlWorkflow/xsd/sequence_embeds_sequence.xsd new file mode 100644 index 000000000..bfbfeb295 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/sequence_embeds_sequence.xsd @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xs:schema xmlns="http://www.w3.org/2001/XMLSchema" +xmlns:xs="http://www.w3.org/2001/XMLSchema" +targetNamespace="http://www.example.org/seq-embeds-seq"> +<xs:complexType name="e34b"> + <xs:choice> + <xs:sequence> + <xs:sequence> + <xs:element name="foo" type="xs:string"/> + <xs:element name="bar" type="xs:string"/> + </xs:sequence> + <xs:element name="ding" type="xs:string"/> + <xs:element name="foo" type="xs:string"/> + <xs:element name="bar" type="xs:string"/> + </xs:sequence> + <xs:element name="ding" type="xs:string"/> + </xs:choice> +</xs:complexType> +<xs:complexType name="e40a"> + <xs:sequence> + <xs:sequence> + <xs:element name="foo" type="xs:string"/> + <xs:element name="bar" type="xs:string"/> + </xs:sequence> + <xs:element name="ding" type="xs:string"/> + </xs:sequence> +</xs:complexType> +</xs:schema> diff --git a/regression_test/XML/XmlWorkflow/xsd/simpletype_base.xsd b/regression_test/XML/XmlWorkflow/xsd/simpletype_base.xsd new file mode 100644 index 000000000..0ceade97a --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/simpletype_base.xsd @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:this="www.example.org/simpletype/base" + targetNamespace="www.example.org/simpletype/base"> + +<xsd:complexType name="SimpleTypebase"> + <xsd:simpleContent> + <xsd:restriction base="string"> + <xsd:enumeration value="unknown" /> + </xsd:restriction> + </xsd:simpleContent> +</xsd:complexType> + +</xsd:schema> + diff --git a/regression_test/XML/XmlWorkflow/xsd/simpletype_ref.xsd b/regression_test/XML/XmlWorkflow/xsd/simpletype_ref.xsd new file mode 100644 index 000000000..ff05d58cb --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/simpletype_ref.xsd @@ -0,0 +1,65 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:this="www.example.org/simpletype/ref" + targetNamespace="www.example.org/simpletype/ref"> + +<xsd:element name="SomeType"> + <xsd:complexType> + <xsd:complexContent> + <xsd:restriction base="this:Type"> + <xsd:sequence> + <xsd:element name="something" type="xsd:string"/> + </xsd:sequence> + </xsd:restriction> + </xsd:complexContent> + </xsd:complexType> +</xsd:element> + +<xsd:element name="Type"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="something" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + </xsd:complexType> +</xsd:element> + +<xsd:complexType name="OtherType"> + <xsd:sequence> + <xsd:element name="billingAccountNumber"> + <xsd:simpleType> + <xsd:restriction base="this:SomeType"/> + </xsd:simpleType> + </xsd:element> + <xsd:element name="installmentPlanId"> + <xsd:simpleType> + <xsd:restriction base="xsd:long"> + <xsd:totalDigits value="5"/> + </xsd:restriction> + </xsd:simpleType> + </xsd:element> + <xsd:element minOccurs="0" name="info"> + <xsd:simpleType> + <xsd:restriction base="this:Info"> + <xsd:maxLength value="30"/> + </xsd:restriction> + </xsd:simpleType> + </xsd:element> + </xsd:sequence> +</xsd:complexType> + +<xsd:simpleType name="start_list"> + <xsd:list itemType="xsd:string"/> +</xsd:simpleType> + +<xsd:simpleType name='List_ref'> + <xsd:restriction base='this:start_list'> + <xsd:length value="4"/> + </xsd:restriction> +</xsd:simpleType> + +<xsd:simpleType name='Info'> + <xsd:restriction base='xsd:string'/> +</xsd:simpleType> + +</xsd:schema> diff --git a/regression_test/XML/XmlWorkflow/xsd/simpletype_restrict_comp.xsd b/regression_test/XML/XmlWorkflow/xsd/simpletype_restrict_comp.xsd new file mode 100644 index 000000000..7b4e97c82 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/simpletype_restrict_comp.xsd @@ -0,0 +1,50 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + targetNamespace="www.example.org/simpletype/restrict/comp" + xmlns:ns10="www.example.org/simpletype/restrict/comp"> + + +<xsd:simpleType name='HlrIdInfo'> + <xsd:annotation> + <xsd:documentation>Home Location Register Id</xsd:documentation> + </xsd:annotation> + <xsd:restriction base='xsd:string'> + <xsd:minLength value="10"/> + </xsd:restriction> +</xsd:simpleType> + +<complexType name="Restricted"> + <sequence> + <xsd:element minOccurs="0" name="hlrId"> + <xsd:annotation> + <xsd:documentation>HLR Id</xsd:documentation> + </xsd:annotation> + <xsd:simpleType> + <xsd:restriction base="ns10:HlrIdInfo"> + <xsd:maxLength value="30"/> + </xsd:restriction> + </xsd:simpleType> + </xsd:element> + </sequence> +</complexType> + +<xsd:element name='ipV6Address'> + <xsd:annotation> + <xsd:documentation>Static IP Address</xsd:documentation> + </xsd:annotation> + <xsd:simpleType> + <xsd:restriction base='ns10:IpV6AddressInfo'/> + </xsd:simpleType> +</xsd:element> + +<xsd:simpleType name='IpV6AddressInfo'> + <xsd:annotation> + <xsd:documentation>IP V6 Address</xsd:documentation> + </xsd:annotation> + <xsd:restriction base='xsd:string'> + <xsd:pattern value='[0-9A-Fa-f]{1,4}(:[0-9A-Fa-f]{0,4}){7}'/> + </xsd:restriction> +</xsd:simpleType> + +</xsd:schema> diff --git a/regression_test/XML/XmlWorkflow/xsd/substitutiongroup.xsd b/regression_test/XML/XmlWorkflow/xsd/substitutiongroup.xsd new file mode 100644 index 000000000..64d9fa310 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/substitutiongroup.xsd @@ -0,0 +1,44 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:this="www.example.org/substitutiongroup" + targetNamespace="www.example.org/substitutiongroup"> + +<!-- THE HEAD ELEMENT --> +<xsd:element name="head" type="xsd:string" /> + +<!-- SUBSTITUTION ELEMENT OF THE SAME TYPE AS THE HEAD --> +<xsd:element name="member1" type="xsd:string" substitutionGroup="this:head"/> + +<!-- SUBSTITUTION ELEMENT OF A TYPE RESTRICTING THE TYPE OF THE HEAD --> +<xsd:simpleType name="stringEnum"> + <xsd:restriction base="xsd:string"> + <xsd:enumeration value="something"/> + <xsd:enumeration value="else"/> + </xsd:restriction> +</xsd:simpleType> + +<xsd:element name="member2" type="this:stringEnum" substitutionGroup="this:head"/> + +<!-- SUBSTITUTION ELEMENT OF A TYPE EXTENDING THE TYPE OF THE HEAD --> +<xsd:complexType name="complexEnum"> + <xsd:simpleContent> + <xsd:extension base="xsd:string"> + <xsd:attribute name="foo" type="xsd:float"/> + <xsd:attribute name="bar" type="xsd:integer"/> + </xsd:extension> + </xsd:simpleContent> +</xsd:complexType> + +<xsd:element name="member3" type="this:complexEnum" substitutionGroup="this:head"/> + +<!-- TOP LEVEL ELEMENT TO DEMONSTRATE SUBSTITUTION --> +<xsd:element name="ize"> + <xsd:complexType> + <xsd:sequence> + <xsd:element ref="this:head" minOccurs="0" maxOccurs="unbounded"/> + </xsd:sequence> + </xsd:complexType> +</xsd:element> + +</xsd:schema> diff --git a/regression_test/XML/XmlWorkflow/xsd/substitutiongroup_abstract_block_1.xsd b/regression_test/XML/XmlWorkflow/xsd/substitutiongroup_abstract_block_1.xsd new file mode 100644 index 000000000..7b89a0c2f --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/substitutiongroup_abstract_block_1.xsd @@ -0,0 +1,44 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:this="www.example.org/substitutiongroup/abstract/block/1" + targetNamespace="www.example.org/substitutiongroup/abstract/block/1"> + +<!-- THE HEAD ELEMENT --> +<xsd:element name="head" type="xsd:string" block="restriction" abstract="true"/> + +<!-- SUBSTITUTION ELEMENT OF THE SAME TYPE AS THE HEAD --> +<xsd:element name="member1" type="xsd:string" substitutionGroup="this:head"/> + +<!-- SUBSTITUTION ELEMENT OF A TYPE RESTRICTING THE TYPE OF THE HEAD --> +<xsd:simpleType name="stringEnum"> + <xsd:restriction base="xsd:string"> + <xsd:enumeration value="something"/> + <xsd:enumeration value="else"/> + </xsd:restriction> +</xsd:simpleType> + +<xsd:element name="member2" type="this:stringEnum" substitutionGroup="this:head"/> + +<!-- SUBSTITUTION ELEMENT OF A TYPE EXTENDING THE TYPE OF THE HEAD --> +<xsd:complexType name="complexEnum"> + <xsd:simpleContent> + <xsd:extension base="xsd:string"> + <xsd:attribute name="foo" type="xsd:float"/> + <xsd:attribute name="bar" type="xsd:integer"/> + </xsd:extension> + </xsd:simpleContent> +</xsd:complexType> + +<xsd:element name="member3" type="this:complexEnum" substitutionGroup="this:head"/> + +<!-- TOP LEVEL ELEMENT TO DEMONSTRATE SUBSTITUTION --> +<xsd:element name="ize"> + <xsd:complexType> + <xsd:sequence> + <xsd:element ref="this:head" minOccurs="0" maxOccurs="unbounded"/> + </xsd:sequence> + </xsd:complexType> +</xsd:element> + +</xsd:schema> diff --git a/regression_test/XML/XmlWorkflow/xsd/substitutiongroup_abstract_block_2.xsd b/regression_test/XML/XmlWorkflow/xsd/substitutiongroup_abstract_block_2.xsd new file mode 100644 index 000000000..3e5f37930 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/substitutiongroup_abstract_block_2.xsd @@ -0,0 +1,44 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:this="www.example.org/substitutiongroup/abstract/block/2" + targetNamespace="www.example.org/substitutiongroup/abstract/block/2"> + +<!-- THE HEAD ELEMENT --> +<xsd:element name="head" type="xsd:string" block="extension" abstract="true"/> + +<!-- SUBSTITUTION ELEMENT OF THE SAME TYPE AS THE HEAD --> +<xsd:element name="member1" type="xsd:string" substitutionGroup="this:head"/> + +<!-- SUBSTITUTION ELEMENT OF A TYPE RESTRICTING THE TYPE OF THE HEAD --> +<xsd:simpleType name="stringEnum"> + <xsd:restriction base="xsd:string"> + <xsd:enumeration value="something"/> + <xsd:enumeration value="else"/> + </xsd:restriction> +</xsd:simpleType> + +<xsd:element name="member2" type="this:stringEnum" substitutionGroup="this:head"/> + +<!-- SUBSTITUTION ELEMENT OF A TYPE EXTENDING THE TYPE OF THE HEAD --> +<xsd:complexType name="complexEnum"> + <xsd:simpleContent> + <xsd:extension base="xsd:string"> + <xsd:attribute name="foo" type="xsd:float"/> + <xsd:attribute name="bar" type="xsd:integer"/> + </xsd:extension> + </xsd:simpleContent> +</xsd:complexType> + +<xsd:element name="member3" type="this:complexEnum" substitutionGroup="this:head"/> + +<!-- TOP LEVEL ELEMENT TO DEMONSTRATE SUBSTITUTION --> +<xsd:element name="ize"> + <xsd:complexType> + <xsd:sequence> + <xsd:element ref="this:head" minOccurs="0" maxOccurs="unbounded"/> + </xsd:sequence> + </xsd:complexType> +</xsd:element> + +</xsd:schema> diff --git a/regression_test/XML/XmlWorkflow/xsd/substitutiongroup_complex_without_element.xsd b/regression_test/XML/XmlWorkflow/xsd/substitutiongroup_complex_without_element.xsd new file mode 100644 index 000000000..3e72e95a6 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/substitutiongroup_complex_without_element.xsd @@ -0,0 +1,54 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:this="www.example.org/substitutiongroup/complex/without/element" + targetNamespace="www.example.org/substitutiongroup/complex/without/element" + blockDefault="#all"> + +<xsd:element name="Head_group" type="string" /> + +<xsd:element name="member" type="string" substitutionGroup="this:head"/> + +<xsd:element name="stringEnum" substitutionGroup="this:head"> + <xsd:simpleType> + <xsd:restriction base="xsd:string"> + <xsd:enumeration value="something"/> + <xsd:enumeration value="else"/> + </xsd:restriction> + </xsd:simpleType> +</xsd:element> + +<xsd:element name="head" abstract="true"> + <xsd:complexType > + <xsd:sequence> + <xsd:element name="Something" type="string" /> + </xsd:sequence> + <xsd:attribute name="headAttrib" type="xsd:string"/> + </xsd:complexType> +</xsd:element> + + +<xsd:element name="member2" type="this:e26seq" substitutionGroup="this:head" /> + +<xsd:complexType name="e26seq"> + <xsd:complexContent> + <xsd:extension base="this:head"> + <xsd:sequence> + <xsd:element name="ageElemExt" type="xsd:integer"/> + </xsd:sequence> + <xsd:attribute name="unitOfAge" type="xsd:string"/> + </xsd:extension> + </xsd:complexContent> +</xsd:complexType> + +<xsd:element name="ize"> + <xsd:complexType> + <xsd:sequence> + <xsd:element ref="this:head" minOccurs="0" maxOccurs="unbounded"/> + </xsd:sequence> + </xsd:complexType> +</xsd:element> + + + +</xsd:schema> diff --git a/regression_test/XML/XmlWorkflow/xsd/substitutiongroup_long_extension.xsd b/regression_test/XML/XmlWorkflow/xsd/substitutiongroup_long_extension.xsd new file mode 100644 index 000000000..3bd3797a5 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/substitutiongroup_long_extension.xsd @@ -0,0 +1,66 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:this="www.example.org/substitutiongroup/long/extension" + targetNamespace="www.example.org/substitutiongroup/long/extension" + blockDefault="extension"> + + +<xsd:element name="head" type="string" /> + +<xsd:element name="member" type="string" substitutionGroup="this:head"/> + +<xsd:element name="stringEnum" substitutionGroup="this:head"> + <xsd:simpleType> + <xsd:restriction base="xsd:string"> + <xsd:enumeration value="something"/> + <xsd:enumeration value="else"/> + </xsd:restriction> + </xsd:simpleType> +</xsd:element> + +<xsd:element name="complexEnum" substitutionGroup="this:head"> + <xsd:complexType> + <xsd:simpleContent> + <xsd:extension base="xsd:string"> + <xsd:attribute name="foo" type="xsd:float"/> + <xsd:attribute name="bar" type="xsd:integer"/> + </xsd:extension> + </xsd:simpleContent> + </xsd:complexType> +</xsd:element> + +<xsd:element name="member3" type="this:e27seq" substitutionGroup="this:head"/> + +<xsd:complexType name="e27seq"> + <xsd:simpleContent> + <xsd:extension base="this:member2"> + + <xsd:attribute name="extAttrib" type="xsd:string"/> + </xsd:extension> + </xsd:simpleContent> +</xsd:complexType> + + +<xsd:element name="member2" type="this:e26seq" substitutionGroup="this:head"/> + +<xsd:complexType name="e26seq"> + <xsd:complexContent> + <xsd:extension base="this:complexEnum"> + <xsd:sequence> + <xsd:element name="ageElemExt" type="xsd:integer"/> + </xsd:sequence> + <xsd:attribute name="unitOfAge" type="xsd:string"/> + </xsd:extension> + </xsd:complexContent> +</xsd:complexType> + +<xsd:element name="ize"> + <xsd:complexType> + <xsd:sequence> + <xsd:element ref="this:head" minOccurs="0" maxOccurs="unbounded"/> + </xsd:sequence> + </xsd:complexType> +</xsd:element> + +</xsd:schema> diff --git a/regression_test/XML/XmlWorkflow/xsd/substitutiongroup_main.xsd b/regression_test/XML/XmlWorkflow/xsd/substitutiongroup_main.xsd new file mode 100644 index 000000000..cf7600bde --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/substitutiongroup_main.xsd @@ -0,0 +1,17 @@ +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:A="www.example.org/substitutiongroup/main" + targetNamespace="www.example.org/substitutiongroup/main"> + +<xsd:import namespace="www.example.org/substitutiongroup/ref"/> + +<xsd:element name="subsgroup" type="string" abstract="true" /> + +<xsd:element name="refgroup" type="A:subsgroup" /> + +<xsd:complexType name="complexGroup"> + <xsd:sequence> + <xsd:element ref="A:subsgroup"/> + </xsd:sequence> +</xsd:complexType> + +</xsd:schema> diff --git a/regression_test/XML/XmlWorkflow/xsd/substitutiongroup_neg.xsd b/regression_test/XML/XmlWorkflow/xsd/substitutiongroup_neg.xsd new file mode 100644 index 000000000..03e287d6a --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/substitutiongroup_neg.xsd @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:this="www.example.org/substitutiongroup/neg" + targetNamespace="www.example.org/substitutiongroup/neg" + blockDefault="extension"> + +<xsd:element name="head" type="string" /> + +<xsd:element name="complexEnum" substitutionGroup="this:not_head"> + <xsd:complexType> + <xsd:simpleContent> + <xsd:extension base="xsd:string"> + <xsd:attribute name="foo" type="xsd:float"/> + <xsd:attribute name="bar" type="xsd:integer"/> + </xsd:extension> + </xsd:simpleContent> + </xsd:complexType> +</xsd:element> + +<xsd:element name="ize"> + <xsd:complexType> + <xsd:sequence> + <xsd:element ref="this:head" minOccurs="0" maxOccurs="unbounded"/> + </xsd:sequence> + </xsd:complexType> +</xsd:element> + +</xsd:schema> diff --git a/regression_test/XML/XmlWorkflow/xsd/substitutiongroup_ref.xsd b/regression_test/XML/XmlWorkflow/xsd/substitutiongroup_ref.xsd new file mode 100644 index 000000000..4a7084f1d --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/substitutiongroup_ref.xsd @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:this="www.example.org/substitutiongroup/ref" + xmlns:A="www.example.org/substitutiongroup/main" + targetNamespace="www.example.org/substitutiongroup/ref"> + +<xsd:import namespace="www.example.org/substitutiongroup/main"/> + +<xsd:element name="replace" type="string" substitutionGroup="A:subsgroup"/> + +</xsd:schema> + diff --git a/regression_test/XML/XmlWorkflow/xsd/type_conversion_follow.xsd b/regression_test/XML/XmlWorkflow/xsd/type_conversion_follow.xsd new file mode 100644 index 000000000..6dfc93eee --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/type_conversion_follow.xsd @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + targetNamespace="www.example.org/type/conversion/follow" + xmlns:ns11="www.example.org/type/conversion/follow"> + + +<xsd:complexType name="e45"> + <group ref="ns11:foobarGroup"/> + <attribute name="sd" type="ns11:e45_"/> + <attributeGroup ref="ns11:g25attr1"/> +</xsd:complexType> +<xsd:complexType name="e45_"> + <xsd:attribute name="attr" type="xsd:string"/> +</xsd:complexType> + + + +<group name="ss"> + <sequence> + <element name="sss" type="ns11:e45_"/> + </sequence> +</group> + +<element name="ss" type="ns11:e45_"> +</element> + +<xsd:attributeGroup name="g25attr1"> + <xsd:attribute name="birthPlaceAttrGroup" type="ns11:e45_"/> + <xsd:attribute name="birthDateAttrGroup" type="xsd:string"/> +</xsd:attributeGroup> + +<xsd:group name="foobarGroup"> + <xsd:sequence> + <xsd:element name="foo" type="ns11:e45_"/> + <xsd:element name="bar" type="xsd:string"/> + </xsd:sequence> +</xsd:group> + + +</xsd:schema> diff --git a/regression_test/XML/XmlWorkflow/xsd/union.xsd b/regression_test/XML/XmlWorkflow/xsd/union.xsd index 2653b81d5..4fda8733e 100644 --- a/regression_test/XML/XmlWorkflow/xsd/union.xsd +++ b/regression_test/XML/XmlWorkflow/xsd/union.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/XmlWorkflow/xsd/unqualified_element_attrib.xsd b/regression_test/XML/XmlWorkflow/xsd/unqualified_element_attrib.xsd new file mode 100644 index 000000000..d1259e69b --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/unqualified_element_attrib.xsd @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:ns23="www.example.org/unqualified/element/attrib" + targetNamespace="www.example.org/unqualified/element/attrib" + elementFormDefault="unqualified" + attributeFormDefault="unqualified"> + + +<xsd:element name="elements"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="elem1" type="string"/> + <xsd:element name="elem2" type="string" form="qualified"/> + <xsd:element name="elem3" type="string" form="unqualified"/> + </xsd:sequence> + </xsd:complexType> +</xsd:element> + +<xsd:element name="attributes"> + <xsd:complexType> + <xsd:attribute name="attrib1" type="string"/> + <xsd:attribute name="attrib2" type="string" form="qualified"/> + <xsd:attribute name="attrib3" type="string" form="unqualified"/> + </xsd:complexType> +</xsd:element> + + +</xsd:schema> diff --git a/regression_test/XML/XmlWorkflow/xsd/xml_in_annotation.xsd b/regression_test/XML/XmlWorkflow/xsd/xml_in_annotation.xsd new file mode 100644 index 000000000..b5b87fa35 --- /dev/null +++ b/regression_test/XML/XmlWorkflow/xsd/xml_in_annotation.xsd @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:this="www.example.org/xml/in/annotation" + targetNamespace="www.example.org/xml/in/annotation"> + +<xsd:attribute name="tcname" type="xsd:string"> + <xsd:annotation> + <xsd:appinfo> + <xsd:attribute name="dataParamName" fixed="TCName" default="TCName" /> + </xsd:appinfo> + <xsd:documentation> comment </xsd:documentation> + </xsd:annotation> +</xsd:attribute> + +<xsd:attribute name="tcname2" type="xsd:string"> + <xsd:annotation> + <xsd:documentation>some comment</xsd:documentation> + </xsd:annotation> +</xsd:attribute> + +</xsd:schema> diff --git a/regression_test/XML/macros.ttcnin b/regression_test/XML/macros.ttcnin index 796dcac20..961d02864 100644 --- a/regression_test/XML/macros.ttcnin +++ b/regression_test/XML/macros.ttcnin @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/tpdValidTest/Makefile b/regression_test/XML/tpdValidTest/Makefile index 843b77225..f439c14cf 100644 --- a/regression_test/XML/tpdValidTest/Makefile +++ b/regression_test/XML/tpdValidTest/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/tpdValidTest/tpdTest/Abstract_Socket_CNL113384.tpd b/regression_test/XML/tpdValidTest/tpdTest/Abstract_Socket_CNL113384.tpd new file mode 100644 index 000000000..0ac5b1a14 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/Abstract_Socket_CNL113384.tpd @@ -0,0 +1,85 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: Abstract_Socket_CNL113384.tpd + Description: tpd project file + Rev: R7E01 + Prodnr: CNL 113 384 + Updated: 2013-01-24 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>Abstract_Socket_CNL113384</ProjectName> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + </Folders> + <Files> + <FileResource projectRelativePath="Abstract_Socket.cc" relativeURI="src/Abstract_Socket.cc"/> + <FileResource projectRelativePath="Abstract_Socket.hh" relativeURI="src/Abstract_Socket.hh"/> + <FileResource projectRelativePath="doc/Abstract_Socket_CNL113384_FS.pdf" relativeURI="doc/Abstract_Socket_CNL113384_FS.pdf"/> + <FileResource projectRelativePath="doc/Abstract_Socket_CNL113384_PRI.pdf" relativeURI="doc/Abstract_Socket_CNL113384_PRI.pdf"/> + <FileResource projectRelativePath="doc/Abstract_Socket_CNL113384_UG.pdf" relativeURI="doc/Abstract_Socket_CNL113384_UG.pdf"/> + </Files> + <ActiveConfiguration>SSL</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <GNUMake>true</GNUMake> + <targetExecutable>bin/Abstract_Socket_CNL113384</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + <Configuration name="SSL"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin_ssl/Abstract_Socket_CNL113384</targetExecutable> + <preprocessorDefines> + <listItem>AS_USE_SSL</listItem> + </preprocessorDefines> + <preprocessorIncludes> + <listItem>[OPENSSL_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>ssl</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OPENSSL_DIR]/lib</listItem> + </linkerLibrarySearchPath> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin_ssl</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/AoC_v1.1.2_CNL113653.tpd b/regression_test/XML/tpdValidTest/tpdTest/AoC_v1.1.2_CNL113653.tpd new file mode 100644 index 000000000..e32de3a27 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/AoC_v1.1.2_CNL113653.tpd @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: AoC_v1.1.2_CNL113653.tpd + Description: tpd project file + Rev: R1A01 + Prodnr: CNL 113 653 + Updated: 2012-10-26 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>AoC_v1.1.2_CNL113653</ProjectName> + <Files> + <FileResource projectRelativePath="Tariffing_Data_Types.asn" relativeURI="src/Tariffing_Data_Types.asn"/> + <FileResource projectRelativePath="Tariffing_Functions.ttcn" relativeURI="src/Tariffing_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <symboliclinklessBuild>true</symboliclinklessBuild> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/AoC_v1.1.2_CNL113653</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/BFCP_CNL113751.tpd b/regression_test/XML/tpdValidTest/tpdTest/BFCP_CNL113751.tpd new file mode 100644 index 000000000..cb33a3c31 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/BFCP_CNL113751.tpd @@ -0,0 +1,63 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: BFCP_CNL113751.tpd + Description: tpd project file + Rev: R1A01 + Prodnr: CNL 113 751 + Updated: 2012-10-03 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>BFCP_CNL113751</ProjectName> + <ReferencedProjects> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/BFCP_CNL113751_FS.pdf" relativeURI="doc/BFCP_CNL113751_FS.pdf"/> + <FileResource projectRelativePath="doc/BFCP_CNL113751_PRI.pdf" relativeURI="doc/BFCP_CNL113751_PRI.pdf"/> + <FileResource projectRelativePath="doc/BFCP_CNL113751_UG.pdf" relativeURI="doc/BFCP_CNL113751_UG.pdf"/> + <FileResource projectRelativePath="src/BFCP_Types.ttcn" relativeURI="src/BFCP_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/BFCP_CNL113751</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <externalFunction>f_.*</externalFunction> + <formalParameter>.*</formalParameter> + </NamingCoventions> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/BICC_ANSI_CNL113397.tpd b/regression_test/XML/tpdValidTest/tpdTest/BICC_ANSI_CNL113397.tpd new file mode 100644 index 000000000..8d0f5d82f --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/BICC_ANSI_CNL113397.tpd @@ -0,0 +1,62 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: BICC_ANSI_CNL113397.tpd + Description: tpd project file + Rev: R5A01 + Prodnr: CNL 113 397 + Updated: 2012-03-27 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>BICC_ANSI_CNL113397</ProjectName> + <ReferencedProjects> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/BICC_ANSI_CNL113397_FS.pdf" relativeURI="doc/BICC_ANSI_CNL113397_FS.pdf"/> + <FileResource projectRelativePath="doc/BICC_ANSI_CNL113397_PRI.pdf" relativeURI="doc/BICC_ANSI_CNL113397_PRI.pdf"/> + <FileResource projectRelativePath="doc/BICC_ANSI_CNL113397_UG.pdf" relativeURI="doc/BICC_ANSI_CNL113397_UG.pdf"/> + <FileResource projectRelativePath="src/BICC_ANSI_EncDec.cc" relativeURI="src/BICC_ANSI_EncDec.cc"/> + <FileResource projectRelativePath="src/BICC_ANSI_Types.ttcn" relativeURI="src/BICC_ANSI_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/BICC_ANSI_CNL113397</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <moduleParameter>tsp.*</moduleParameter> + </NamingCoventions> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/BICC_Q.1902.1_CNL113359.tpd b/regression_test/XML/tpdValidTest/tpdTest/BICC_Q.1902.1_CNL113359.tpd new file mode 100644 index 000000000..cf6913d8b --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/BICC_Q.1902.1_CNL113359.tpd @@ -0,0 +1,62 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: BICC_Q.1902.1_CNL113359.tpd + Description: tpd project file + Rev: R6A01 + Prodnr: CNL 113 359 + Updated: 2012-03-27 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>BICC_Q.1902.1_CNL113359</ProjectName> + <ReferencedProjects> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/BICC_Q.1902.1_CNL113359_FS.pdf" relativeURI="doc/BICC_Q.1902.1_CNL113359_FS.pdf"/> + <FileResource projectRelativePath="doc/BICC_Q.1902.1_CNL113359_PRI.pdf" relativeURI="doc/BICC_Q.1902.1_CNL113359_PRI.pdf"/> + <FileResource projectRelativePath="doc/BICC_Q.1902.1_CNL113359_UG.pdf" relativeURI="doc/BICC_Q.1902.1_CNL113359_UG.pdf"/> + <FileResource projectRelativePath="src/BICC_EncDec.cc" relativeURI="src/BICC_EncDec.cc"/> + <FileResource projectRelativePath="src/BICC_Types.ttcn" relativeURI="src/BICC_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/BICC_Q.1902.1_CNL113359</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <moduleParameter>tsp.*</moduleParameter> + </NamingCoventions> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/BICC_TTC_CNL113416.tpd b/regression_test/XML/tpdValidTest/tpdTest/BICC_TTC_CNL113416.tpd new file mode 100644 index 000000000..0f13c46f9 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/BICC_TTC_CNL113416.tpd @@ -0,0 +1,62 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: BICC_TTC_CNL113416.tpd + Description: tpd project file + Rev: R6A01 + Prodnr: CNL 113 416 + Updated: 2012-03-27 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>BICC_TTC_CNL113416</ProjectName> + <ReferencedProjects> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/BICC_TTC_CNL113416_FS.pdf" relativeURI="doc/BICC_TTC_CNL113416_FS.pdf"/> + <FileResource projectRelativePath="doc/BICC_TTC_CNL113416_PRI.pdf" relativeURI="doc/BICC_TTC_CNL113416_PRI.pdf"/> + <FileResource projectRelativePath="doc/BICC_TTC_CNL113416_UG.pdf" relativeURI="doc/BICC_TTC_CNL113416_UG.pdf"/> + <FileResource projectRelativePath="src/BICC_TTC_EncDec.cc" relativeURI="src/BICC_TTC_EncDec.cc"/> + <FileResource projectRelativePath="src/BICC_TTC_Types.ttcn" relativeURI="src/BICC_TTC_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/BICC_TTC_CNL113416</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <moduleParameter>tsp.*</moduleParameter> + </NamingCoventions> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/BSSGP_v10.6.0_CNL113750.tpd b/regression_test/XML/tpdValidTest/tpdTest/BSSGP_v10.6.0_CNL113750.tpd new file mode 100644 index 000000000..7095cf5f8 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/BSSGP_v10.6.0_CNL113750.tpd @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: BSSGP_v10.6.0_CNL113750.tpd + Description: tpd project file + Rev: R1A01 + Prodnr: CNL 113 750 + Updated: 2012-08-03 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>BSSGP_v10.6.0_CNL113750</ProjectName> + <ReferencedProjects> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="src/BSSGP_EncDec.cc" relativeURI="src/BSSGP_EncDec.cc"/> + <FileResource projectRelativePath="src/BSSGP_Types.ttcn" relativeURI="src/BSSGP_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/BSSGP_v10.6.0_CNL113750</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/BSSGP_v9.4.0_CNL113720.tpd b/regression_test/XML/tpdValidTest/tpdTest/BSSGP_v9.4.0_CNL113720.tpd new file mode 100644 index 000000000..292bd2e93 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/BSSGP_v9.4.0_CNL113720.tpd @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: BSSGP_v9.4.0_CNL113720.tpd + Description: tpd project file + Rev: R1C02 + Prodnr: CNL 113 720 + Updated: 2011-11-30 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>BSSGP_v9.4.0_CNL113720</ProjectName> + <ReferencedProjects> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/BSSGP_v9.4.0_CNL113720_FS.pdf" relativeURI="doc/BSSGP_v9.4.0_CNL113720_FS.pdf"/> + <FileResource projectRelativePath="doc/BSSGP_v9.4.0_CNL113720_PRI.pdf" relativeURI="doc/BSSGP_v9.4.0_CNL113720_PRI.pdf"/> + <FileResource projectRelativePath="doc/BSSGP_v9.4.0_CNL113720_UG.pdf" relativeURI="doc/BSSGP_v9.4.0_CNL113720_UG.pdf"/> + <FileResource projectRelativePath="src/BSSGP_EncDec.cc" relativeURI="src/BSSGP_EncDec.cc"/> + <FileResource projectRelativePath="src/BSSGP_Types.ttcn" relativeURI="src/BSSGP_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <targetExecutable>bin/BSSGP</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/BSSMAP_v11.2.0_CNL113761.tpd b/regression_test/XML/tpdValidTest/tpdTest/BSSMAP_v11.2.0_CNL113761.tpd new file mode 100644 index 000000000..295205e47 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/BSSMAP_v11.2.0_CNL113761.tpd @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: BSSMAP_v11.2.0_CNL113761.tpd + Description: tpd project file + Rev: R1A01 + Prodnr: CNL 113 761 + Updated: 2012-11-09 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>BSSMAP_v11.2.0_CNL113761</ProjectName> + <ReferencedProjects> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/BSSMAP_v11.2.0_CNL113761_FS.pdf" relativeURI="/doc/BSSMAP_v11.2.0_CNL113761_FS.pdf"/> + <FileResource projectRelativePath="doc/BSSMAP_v11.2.0_CNL113761_PRI.pdf" relativeURI="/doc/BSSMAP_v11.2.0_CNL113761_PRI.pdf"/> + <FileResource projectRelativePath="doc/BSSMAP_v11.2.0_CNL113761_UG.pdf" relativeURI="/doc/BSSMAP_v11.2.0_CNL113761_UG.pdf"/> + <FileResource projectRelativePath="src/BSSAP_Types.ttcn" relativeURI="/src/BSSAP_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/BSSMAP_v11.2.0_CNL113761</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/BSSMAP_v8.6.0_CNL113655.tpd b/regression_test/XML/tpdValidTest/tpdTest/BSSMAP_v8.6.0_CNL113655.tpd new file mode 100644 index 000000000..b3278903d --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/BSSMAP_v8.6.0_CNL113655.tpd @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: BSSMAP_v8.6.0_CNL113655.tpd + Description: tpd project file + Rev: R2A01 + Prodnr: CNL 113 655 + Updated: 2012-03-27 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>BSSMAP_v8.6.0_CNL113655</ProjectName> + <ReferencedProjects> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/BSSMAP_v8.6.0_CNL113655_FS.pdf" relativeURI="doc/BSSMAP_v8.6.0_CNL113655_FS.pdf"/> + <FileResource projectRelativePath="doc/BSSMAP_v8.6.0_CNL113655_PRI.pdf" relativeURI="doc/BSSMAP_v8.6.0_CNL113655_PRI.pdf"/> + <FileResource projectRelativePath="doc/BSSMAP_v8.6.0_CNL113655_UG.pdf" relativeURI="doc/BSSMAP_v8.6.0_CNL113655_UG.pdf"/> + <FileResource projectRelativePath="src/BSSAP_Types.ttcn" relativeURI="src/BSSAP_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/BSSMAP_v8.6.0_CNL113655</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/CAP_v2_v6.4.0_CNL113483.tpd b/regression_test/XML/tpdValidTest/tpdTest/CAP_v2_v6.4.0_CNL113483.tpd new file mode 100644 index 000000000..340c9e42c --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/CAP_v2_v6.4.0_CNL113483.tpd @@ -0,0 +1,70 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: CAP_v2_v6.4.0_CNL113483.tpd + Description: tpd project file + Rev: R5D + Prodnr: CNL 113 483 + Updated: 2013-03-01 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>CAP_v2_v6.4.0_CNL113483</ProjectName> + <ReferencedProjects> + <ReferencedProject name="Ericsson_INAP_CS1plus_CNL113356" projectLocationURI="../Ericsson_INAP_CS1plus_CNL113356/Ericsson_INAP_CS1plus_CNL113356.tpd"/> + <ReferencedProject name="MAP_v6.3.0_CNL113366" projectLocationURI="../MAP_v6.3.0_CNL113366/MAP_v6.3.0_CNL113366.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/CAP_v2_v6.4.0_CNL113483_FS.pdf" relativeURI="doc/CAP_v2_v6.4.0_CNL113483_FS.pdf"/> + <FileResource projectRelativePath="doc/CAP_v2_v6.4.0_CNL113483_PRI.pdf" relativeURI="doc/CAP_v2_v6.4.0_CNL113483_PRI.pdf"/> + <FileResource projectRelativePath="doc/CAP_v2_v6.4.0_CNL113483_UG.pdf" relativeURI="doc/CAP_v2_v6.4.0_CNL113483_UG.pdf"/> + <FileResource projectRelativePath="src/CAPv2_ASEs.asn" relativeURI="src/CAPv2_ASEs.asn"/> + <FileResource projectRelativePath="src/CAPv2_Classes.asn" relativeURI="src/CAPv2_Classes.asn"/> + <FileResource projectRelativePath="src/CAPv2_Codes.asn" relativeURI="src/CAPv2_Codes.asn"/> + <FileResource projectRelativePath="src/CAPv2_DataTypes.asn" relativeURI="src/CAPv2_DataTypes.asn"/> + <FileResource projectRelativePath="src/CAPv2_EncDec.cc" relativeURI="src/CAPv2_EncDec.cc"/> + <FileResource projectRelativePath="src/CAPv2_Operations.asn" relativeURI="src/CAPv2_Operations.asn"/> + <FileResource projectRelativePath="src/CAPv2_PDU_Defs.asn" relativeURI="src/CAPv2_PDU_Defs.asn"/> + <FileResource projectRelativePath="src/CAPv2_Types.ttcn" relativeURI="src/CAPv2_Types.ttcn"/> + <FileResource projectRelativePath="src/CAPv2_extension_object_identifiers.asn" relativeURI="src/CAPv2_extension_object_identifiers.asn"/> + <FileResource projectRelativePath="src/Ericsson_CAPv2_Detailed_DataTypes.ttcn" relativeURI="src/Ericsson_CAPv2_Detailed_DataTypes.ttcn"/> + <FileResource projectRelativePath="src/Ericsson_CAPv2_Detailed_EncDec.cc" relativeURI="src/Ericsson_CAPv2_Detailed_EncDec.cc"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/CAP_v2_v6.4.0_CNL113483</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/CAP_v4.7.0_CNL113425.tpd b/regression_test/XML/tpdValidTest/tpdTest/CAP_v4.7.0_CNL113425.tpd new file mode 100644 index 000000000..6bedf2995 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/CAP_v4.7.0_CNL113425.tpd @@ -0,0 +1,101 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: CAP_v4.7.0_CNL113425.tpd + Description: tpd project file + Rev: R7B02 + Prodnr: CNL 113 425 + Updated: 2012-09-11 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>CAP_v4.7.0_CNL113425</ProjectName> + <ReferencedProjects> + <ReferencedProject name="MAP_v6.3.0_CNL113366" projectLocationURI="../MAP_v6.3.0_CNL113366/MAP_v6.3.0_CNL113366.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/CAP_v4.7.0_CNL113425_FS.pdf" relativeURI="doc/CAP_v4.7.0_CNL113425_FS.pdf"/> + <FileResource projectRelativePath="doc/CAP_v4.7.0_CNL113425_PRI.pdf" relativeURI="doc/CAP_v4.7.0_CNL113425_PRI.pdf"/> + <FileResource projectRelativePath="doc/CAP_v4.7.0_CNL113425_UG.pdf" relativeURI="doc/CAP_v4.7.0_CNL113425_UG.pdf"/> + <FileResource projectRelativePath="src/CAP_EncDec.cc" relativeURI="src/CAP_EncDec.cc"/> + <FileResource projectRelativePath="src/CAP_EncDec_Functions.ttcn" relativeURI="src/CAP_EncDec_Functions.ttcn"/> + <FileResource projectRelativePath="src/CAP_GPRS_ReferenceNumber.asn" relativeURI="src/CAP_GPRS_ReferenceNumber.asn"/> + <FileResource projectRelativePath="src/CAP_PDU_Defs.asn" relativeURI="src/CAP_PDU_Defs.asn"/> + <FileResource projectRelativePath="src/CAP_Protocol.asn" relativeURI="src/CAP_Protocol.asn"/> + <FileResource projectRelativePath="src/CAP_SMS_ops_args.asn" relativeURI="src/CAP_SMS_ops_args.asn"/> + <FileResource projectRelativePath="src/CAP_U_ABORT_Data.asn" relativeURI="src/CAP_U_ABORT_Data.asn"/> + <FileResource projectRelativePath="src/CAP_classes.asn" relativeURI="src/CAP_classes.asn"/> + <FileResource projectRelativePath="src/CAP_classes2.asn" relativeURI="src/CAP_classes2.asn"/> + <FileResource projectRelativePath="src/CAP_datatypes.asn" relativeURI="src/CAP_datatypes.asn"/> + <FileResource projectRelativePath="src/CAP_errorcodes.asn" relativeURI="src/CAP_errorcodes.asn"/> + <FileResource projectRelativePath="src/CAP_errortypes.asn" relativeURI="src/CAP_errortypes.asn"/> + <FileResource projectRelativePath="src/CAP_gprsSSF_gsmSCF_ops_args.asn" relativeURI="src/CAP_gprsSSF_gsmSCF_ops_args.asn"/> + <FileResource projectRelativePath="src/CAP_gprsSSF_gsmSCF_pkgs_contracts_acs.asn" relativeURI="src/CAP_gprsSSF_gsmSCF_pkgs_contracts_acs.asn"/> + <FileResource projectRelativePath="src/CAP_gsmSCF_gsmSRF_ops_args.asn" relativeURI="src/CAP_gsmSCF_gsmSRF_ops_args.asn"/> + <FileResource projectRelativePath="src/CAP_gsmSCF_gsmSRF_pkgs_contracts_acs.asn" relativeURI="src/CAP_gsmSCF_gsmSRF_pkgs_contracts_acs.asn"/> + <FileResource projectRelativePath="src/CAP_gsmSCF_gsmSRF_pkgs_contracts_acs2.asn" relativeURI="src/CAP_gsmSCF_gsmSRF_pkgs_contracts_acs2.asn"/> + <FileResource projectRelativePath="src/CAP_gsmSSF_gsmSCF_ops_args.asn" relativeURI="src/CAP_gsmSSF_gsmSCF_ops_args.asn"/> + <FileResource projectRelativePath="src/CAP_gsmSSF_gsmSCF_pkgs_contracts_acs.asn" relativeURI="src/CAP_gsmSSF_gsmSCF_pkgs_contracts_acs.asn"/> + <FileResource projectRelativePath="src/CAP_object_identifiers.asn" relativeURI="src/CAP_object_identifiers.asn"/> + <FileResource projectRelativePath="src/CAP_operationcodes.asn" relativeURI="src/CAP_operationcodes.asn"/> + <FileResource projectRelativePath="src/CAP_smsSSF_gsmSCF_pkgs_contracts_acs.asn" relativeURI="src/CAP_smsSSF_gsmSCF_pkgs_contracts_acs.asn"/> + <FileResource projectRelativePath="src/CAPv3_Classes.asn" relativeURI="src/CAPv3_Classes.asn"/> + <FileResource projectRelativePath="src/CAPv3_Detailed_DataTypes.ttcn" relativeURI="src/CAPv3_Detailed_DataTypes.ttcn"/> + <FileResource projectRelativePath="src/CAPv3_Detailed_EncDec.cc" relativeURI="src/CAPv3_Detailed_EncDec.cc"/> + <FileResource projectRelativePath="src/CAPv3_EncDec.cc" relativeURI="src/CAPv3_EncDec.cc"/> + <FileResource projectRelativePath="src/CAPv3_EncDec_Functions.ttcn" relativeURI="src/CAPv3_EncDec_Functions.ttcn"/> + <FileResource projectRelativePath="src/CAPv3_PDU_Defs.asn" relativeURI="src/CAPv3_PDU_Defs.asn"/> + <FileResource projectRelativePath="src/CAPv3_SMS_ops_args.asn" relativeURI="src/CAPv3_SMS_ops_args.asn"/> + <FileResource projectRelativePath="src/CAPv3_U_ABORT_Data.asn" relativeURI="src/CAPv3_U_ABORT_Data.asn"/> + <FileResource projectRelativePath="src/CAPv3_datatypes.asn" relativeURI="src/CAPv3_datatypes.asn"/> + <FileResource projectRelativePath="src/CAPv3_errorcodes.asn" relativeURI="src/CAPv3_errorcodes.asn"/> + <FileResource projectRelativePath="src/CAPv3_errortypes.asn" relativeURI="src/CAPv3_errortypes.asn"/> + <FileResource projectRelativePath="src/CAPv3_extension_object_identifiers.asn" relativeURI="src/CAPv3_extension_object_identifiers.asn"/> + <FileResource projectRelativePath="src/CAPv3_gsmSSF_gsmSCF_ops_args.asn" relativeURI="src/CAPv3_gsmSSF_gsmSCF_ops_args.asn"/> + <FileResource projectRelativePath="src/CAPv3_gsmSSF_gsmSCF_pkgs_contracts_acs.asn" relativeURI="src/CAPv3_gsmSSF_gsmSCF_pkgs_contracts_acs.asn"/> + <FileResource projectRelativePath="src/CAPv3_object_identifiers.asn" relativeURI="src/CAPv3_object_identifiers.asn"/> + <FileResource projectRelativePath="src/CAPv3_operationcodes.asn" relativeURI="src/CAPv3_operationcodes.asn"/> + <FileResource projectRelativePath="src/CS1_DataTypes.asn" relativeURI="src/CS1_DataTypes.asn"/> + <FileResource projectRelativePath="src/CS2_datatypes.asn" relativeURI="src/CS2_datatypes.asn"/> + <FileResource projectRelativePath="src/DialoguePDUs.asn" relativeURI="src/DialoguePDUs.asn"/> + <FileResource projectRelativePath="src/TCAPMessages.asn" relativeURI="src/TCAPMessages.asn"/> + <FileResource projectRelativePath="src/TC_Notation_Extensions.asn" relativeURI="src/TC_Notation_Extensions.asn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/CAP_v4.7.0_CNL113425</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/CAP_v4_v7.2.0_CNL113572.tpd b/regression_test/XML/tpdValidTest/tpdTest/CAP_v4_v7.2.0_CNL113572.tpd new file mode 100644 index 000000000..39508369f --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/CAP_v4_v7.2.0_CNL113572.tpd @@ -0,0 +1,110 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: CAP_v4_v7.2.0_CNL113572.tpd + Description: tpd project file + Rev: R4B01 + Prodnr: CNL 113 572 + Updated: 2011-11-18 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>CAP_v4_v7.2.0_CNL113572</ProjectName> + <ReferencedProjects> + <ReferencedProject name="MAP_v6.11.0_CNL113500" projectLocationURI="../MAP_v6.11.0_CNL113500/MAP_v6.11.0_CNL113500.tpd"/> + <ReferencedProject name="ROSE_CNL113369" projectLocationURI="../ROSE_CNL113369/ROSE_CNL113369.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/CAP_v4_v7.2.0_CNL113572_FS.pdf" relativeURI="doc/CAP_v4_v7.2.0_CNL113572_FS.pdf"/> + <FileResource projectRelativePath="doc/CAP_v4_v7.2.0_CNL113572_PRI.pdf" relativeURI="doc/CAP_v4_v7.2.0_CNL113572_PRI.pdf"/> + <FileResource projectRelativePath="doc/CAP_v4_v7.2.0_CNL113572_UG.pdf" relativeURI="doc/CAP_v4_v7.2.0_CNL113572_UG.pdf"/> + <FileResource projectRelativePath="src/CAP_EncDec_CAPv4.cc" relativeURI="src/CAP_EncDec_CAPv4.cc"/> + <FileResource projectRelativePath="src/CAP_GPRS_ReferenceNumber_CAPv4.asn" relativeURI="src/CAP_GPRS_ReferenceNumber_CAPv4.asn"/> + <FileResource projectRelativePath="src/CAP_PDU_Defs_CAPv4.asn" relativeURI="src/CAP_PDU_Defs_CAPv4.asn"/> + <FileResource projectRelativePath="src/CAP_SMS_ops_args_CAPv4.asn" relativeURI="src/CAP_SMS_ops_args_CAPv4.asn"/> + <FileResource projectRelativePath="src/CAP_Types_CAPv4.ttcn" relativeURI="src/CAP_Types_CAPv4.ttcn"/> + <FileResource projectRelativePath="src/CAP_U_ABORT_Data_CAPv4.asn" relativeURI="src/CAP_U_ABORT_Data_CAPv4.asn"/> + <FileResource projectRelativePath="src/CAP_classes1_CAPv4.asn" relativeURI="src/CAP_classes1_CAPv4.asn"/> + <FileResource projectRelativePath="src/CAP_classes2_CAPv4.asn" relativeURI="src/CAP_classes2_CAPv4.asn"/> + <FileResource projectRelativePath="src/CAP_datatypes_CAPv4.asn" relativeURI="src/CAP_datatypes_CAPv4.asn"/> + <FileResource projectRelativePath="src/CAP_errorcodes_CAPv4.asn" relativeURI="src/CAP_errorcodes_CAPv4.asn"/> + <FileResource projectRelativePath="src/CAP_errortypes_CAPv4.asn" relativeURI="src/CAP_errortypes_CAPv4.asn"/> + <FileResource projectRelativePath="src/CAP_extension_object_identifiers_CAPv4.asn" relativeURI="src/CAP_extension_object_identifiers_CAPv4.asn"/> + <FileResource projectRelativePath="src/CAP_gprsSSF_gsmSCF_ops_args_CAPv4.asn" relativeURI="src/CAP_gprsSSF_gsmSCF_ops_args_CAPv4.asn"/> + <FileResource projectRelativePath="src/CAP_gprsSSF_gsmSCF_pkgs_contracts_acs_CAPv4.asn" relativeURI="src/CAP_gprsSSF_gsmSCF_pkgs_contracts_acs_CAPv4.asn"/> + <FileResource projectRelativePath="src/CAP_gsmSCF_gsmSRF_ops_args_CAPv4.asn" relativeURI="src/CAP_gsmSCF_gsmSRF_ops_args_CAPv4.asn"/> + <FileResource projectRelativePath="src/CAP_gsmSCF_gsmSRF_pkgs_contracts_acs_CAPv4.asn" relativeURI="src/CAP_gsmSCF_gsmSRF_pkgs_contracts_acs_CAPv4.asn"/> + <FileResource projectRelativePath="src/CAP_gsmSSF_gsmSCF_ops_args_CAPv4.asn" relativeURI="src/CAP_gsmSSF_gsmSCF_ops_args_CAPv4.asn"/> + <FileResource projectRelativePath="src/CAP_gsmSSF_gsmSCF_pkgs_contracts_acs_AbstractSyntaxes_CAPv4.asn" relativeURI="src/CAP_gsmSSF_gsmSCF_pkgs_contracts_acs_AbstractSyntaxes_CAPv4.asn"/> + <FileResource projectRelativePath="src/CAP_gsmSSF_gsmSCF_pkgs_contracts_acs_CAPv4.asn" relativeURI="src/CAP_gsmSSF_gsmSCF_pkgs_contracts_acs_CAPv4.asn"/> + <FileResource projectRelativePath="src/CAP_object_identifiers_CAPv4.asn" relativeURI="src/CAP_object_identifiers_CAPv4.asn"/> + <FileResource projectRelativePath="src/CAP_operationcodes_CAPv4.asn" relativeURI="src/CAP_operationcodes_CAPv4.asn"/> + <FileResource projectRelativePath="src/CAP_smsSSF_gsmSCF_pkgs_contracts_acs_CAPv4.asn" relativeURI="src/CAP_smsSSF_gsmSCF_pkgs_contracts_acs_CAPv4.asn"/> + <FileResource projectRelativePath="src/CAPv4_CS1_DataTypes.ttcn" relativeURI="src/CAPv4_CS1_DataTypes.ttcn"/> + <FileResource projectRelativePath="src/CAPv4_CS2_datatypes.ttcn" relativeURI="src/CAPv4_CS2_datatypes.ttcn"/> + <FileResource projectRelativePath="src/CAPv4_DialoguePDUs.ttcn" relativeURI="src/CAPv4_DialoguePDUs.ttcn"/> + <FileResource projectRelativePath="src/CAPv4_EncDec.cc" relativeURI="src/CAPv4_EncDec.cc"/> + <FileResource projectRelativePath="src/CAPv4_GPRS_ReferenceNumber.ttcn" relativeURI="src/CAPv4_GPRS_ReferenceNumber.ttcn"/> + <FileResource projectRelativePath="src/CAPv4_PDU_Defs.ttcn" relativeURI="src/CAPv4_PDU_Defs.ttcn"/> + <FileResource projectRelativePath="src/CAPv4_SMS_ops_args.ttcn" relativeURI="src/CAPv4_SMS_ops_args.ttcn"/> + <FileResource projectRelativePath="src/CAPv4_TCAPMessages.ttcn" relativeURI="src/CAPv4_TCAPMessages.ttcn"/> + <FileResource projectRelativePath="src/CAPv4_TC_Notation_Extensions.ttcn" relativeURI="src/CAPv4_TC_Notation_Extensions.ttcn"/> + <FileResource projectRelativePath="src/CAPv4_Types.ttcn" relativeURI="src/CAPv4_Types.ttcn"/> + <FileResource projectRelativePath="src/CAPv4_U_ABORT_Data.ttcn" relativeURI="src/CAPv4_U_ABORT_Data.ttcn"/> + <FileResource projectRelativePath="src/CAPv4_classes1.ttcn" relativeURI="src/CAPv4_classes1.ttcn"/> + <FileResource projectRelativePath="src/CAPv4_classes2.ttcn" relativeURI="src/CAPv4_classes2.ttcn"/> + <FileResource projectRelativePath="src/CAPv4_datatypes.ttcn" relativeURI="src/CAPv4_datatypes.ttcn"/> + <FileResource projectRelativePath="src/CAPv4_errorcodes.ttcn" relativeURI="src/CAPv4_errorcodes.ttcn"/> + <FileResource projectRelativePath="src/CAPv4_errortypes.ttcn" relativeURI="src/CAPv4_errortypes.ttcn"/> + <FileResource projectRelativePath="src/CAPv4_extension_object_identifiers.ttcn" relativeURI="src/CAPv4_extension_object_identifiers.ttcn"/> + <FileResource projectRelativePath="src/CAPv4_gprsSSF_gsmSCF_ops_args.ttcn" relativeURI="src/CAPv4_gprsSSF_gsmSCF_ops_args.ttcn"/> + <FileResource projectRelativePath="src/CAPv4_gprsSSF_gsmSCF_pkgs_contracts_acs.ttcn" relativeURI="src/CAPv4_gprsSSF_gsmSCF_pkgs_contracts_acs.ttcn"/> + <FileResource projectRelativePath="src/CAPv4_gsmSCF_gsmSRF_ops_args.ttcn" relativeURI="src/CAPv4_gsmSCF_gsmSRF_ops_args.ttcn"/> + <FileResource projectRelativePath="src/CAPv4_gsmSCF_gsmSRF_pkgs_contracts_acs.ttcn" relativeURI="src/CAPv4_gsmSCF_gsmSRF_pkgs_contracts_acs.ttcn"/> + <FileResource projectRelativePath="src/CAPv4_gsmSSF_gsmSCF_ops_args.ttcn" relativeURI="src/CAPv4_gsmSSF_gsmSCF_ops_args.ttcn"/> + <FileResource projectRelativePath="src/CAPv4_gsmSSF_gsmSCF_pkgs_contracts_acs.ttcn" relativeURI="src/CAPv4_gsmSSF_gsmSCF_pkgs_contracts_acs.ttcn"/> + <FileResource projectRelativePath="src/CAPv4_gsmSSF_gsmSCF_pkgs_contracts_acs_AbstractSyntaxes.ttcn" relativeURI="src/CAPv4_gsmSSF_gsmSCF_pkgs_contracts_acs_AbstractSyntaxes.ttcn"/> + <FileResource projectRelativePath="src/CAPv4_object_identifiers.ttcn" relativeURI="src/CAPv4_object_identifiers.ttcn"/> + <FileResource projectRelativePath="src/CAPv4_operationcodes.ttcn" relativeURI="src/CAPv4_operationcodes.ttcn"/> + <FileResource projectRelativePath="src/CAPv4_smsSSF_gsmSCF_pkgs_contracts_acs.ttcn" relativeURI="src/CAPv4_smsSSF_gsmSCF_pkgs_contracts_acs.ttcn"/> + <FileResource projectRelativePath="src/CS1_DataTypes.asn" relativeURI="src/CS1_DataTypes.asn"/> + <FileResource projectRelativePath="src/CS1_DataTypes_CAPv4.asn" relativeURI="src/CS1_DataTypes_CAPv4.asn"/> + <FileResource projectRelativePath="src/CS2_datatypes.asn" relativeURI="src/CS2_datatypes.asn"/> + <FileResource projectRelativePath="src/CS2_datatypes_CAPv4.asn" relativeURI="src/CS2_datatypes_CAPv4.asn"/> + <FileResource projectRelativePath="src/DialoguePDUs.asn" relativeURI="src/DialoguePDUs.asn"/> + <FileResource projectRelativePath="src/DialoguePDUs_CAPv4.asn" relativeURI="src/DialoguePDUs_CAPv4.asn"/> + <FileResource projectRelativePath="src/TCAPMessages.asn" relativeURI="src/TCAPMessages.asn"/> + <FileResource projectRelativePath="src/TCAPMessages_CAPv4.asn" relativeURI="src/TCAPMessages_CAPv4.asn"/> + <FileResource projectRelativePath="src/TC_Notation_Extensions.asn" relativeURI="src/TC_Notation_Extensions.asn"/> + <FileResource projectRelativePath="src/TC_Notation_Extensions_CAPv4.asn" relativeURI="src/TC_Notation_Extensions_CAPv4.asn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/CAP_v4_v7.2.0_CNL113572</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/CAP_v4_v7.6.0_CNL113721.tpd b/regression_test/XML/tpdValidTest/tpdTest/CAP_v4_v7.6.0_CNL113721.tpd new file mode 100644 index 000000000..0487d3dd3 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/CAP_v4_v7.6.0_CNL113721.tpd @@ -0,0 +1,116 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: CAP_v4_v7.6.0_CNL113721.tpd + Description: tpd project file + Rev: R1B01 + Prodnr: CNL 113 721 + Updated: 2011-11-29 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>CAP_v4_v7.6.0_CNL113721</ProjectName> + <ReferencedProjects> + <ReferencedProject name="MAP_v7.12.0_CNL113635" projectLocationURI="../MAP_v7.12.0_CNL113635/MAP_v7.12.0_CNL113635.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/CAP_v4_v7.6.0_CNL113721_FS.pdf" relativeURI="doc/CAP_v4_v7.6.0_CNL113721_FS.pdf"/> + <FileResource projectRelativePath="doc/CAP_v4_v7.6.0_CNL113721_PRI.pdf" relativeURI="doc/CAP_v4_v7.6.0_CNL113721_PRI.pdf"/> + <FileResource projectRelativePath="doc/CAP_v4_v7.6.0_CNL113721_UG.pdf" relativeURI="doc/CAP_v4_v7.6.0_CNL113721_UG.pdf"/> + <FileResource projectRelativePath="src/CAP_EncDec_CAPv4.cc" relativeURI="src/CAP_EncDec_CAPv4.cc"/> + <FileResource projectRelativePath="src/CAP_GPRS_ReferenceNumber_CAPv4.asn" relativeURI="src/CAP_GPRS_ReferenceNumber_CAPv4.asn"/> + <FileResource projectRelativePath="src/CAP_PDU_Defs_CAPv4.asn" relativeURI="src/CAP_PDU_Defs_CAPv4.asn"/> + <FileResource projectRelativePath="src/CAP_SMS_ops_args_CAPv4.asn" relativeURI="src/CAP_SMS_ops_args_CAPv4.asn"/> + <FileResource projectRelativePath="src/CAP_Types_CAPv4.ttcn" relativeURI="src/CAP_Types_CAPv4.ttcn"/> + <FileResource projectRelativePath="src/CAP_U_ABORT_Data_CAPv4.asn" relativeURI="src/CAP_U_ABORT_Data_CAPv4.asn"/> + <FileResource projectRelativePath="src/CAP_classes1_CAPv4.asn" relativeURI="src/CAP_classes1_CAPv4.asn"/> + <FileResource projectRelativePath="src/CAP_classes2_CAPv4.asn" relativeURI="src/CAP_classes2_CAPv4.asn"/> + <FileResource projectRelativePath="src/CAP_datatypes_CAPv4.asn" relativeURI="src/CAP_datatypes_CAPv4.asn"/> + <FileResource projectRelativePath="src/CAP_errorcodes_CAPv4.asn" relativeURI="src/CAP_errorcodes_CAPv4.asn"/> + <FileResource projectRelativePath="src/CAP_errortypes_CAPv4.asn" relativeURI="src/CAP_errortypes_CAPv4.asn"/> + <FileResource projectRelativePath="src/CAP_extension_object_identifiers_CAPv4.asn" relativeURI="src/CAP_extension_object_identifiers_CAPv4.asn"/> + <FileResource projectRelativePath="src/CAP_gprsSSF_gsmSCF_ops_args_CAPv4.asn" relativeURI="src/CAP_gprsSSF_gsmSCF_ops_args_CAPv4.asn"/> + <FileResource projectRelativePath="src/CAP_gprsSSF_gsmSCF_pkgs_contracts_acs_CAPv4.asn" relativeURI="src/CAP_gprsSSF_gsmSCF_pkgs_contracts_acs_CAPv4.asn"/> + <FileResource projectRelativePath="src/CAP_gsmSCF_gsmSRF_ops_args_CAPv4.asn" relativeURI="src/CAP_gsmSCF_gsmSRF_ops_args_CAPv4.asn"/> + <FileResource projectRelativePath="src/CAP_gsmSCF_gsmSRF_pkgs_contracts_acs_CAPv4.asn" relativeURI="src/CAP_gsmSCF_gsmSRF_pkgs_contracts_acs_CAPv4.asn"/> + <FileResource projectRelativePath="src/CAP_gsmSSF_gsmSCF_ops_args_CAPv4.asn" relativeURI="src/CAP_gsmSSF_gsmSCF_ops_args_CAPv4.asn"/> + <FileResource projectRelativePath="src/CAP_gsmSSF_gsmSCF_pkgs_contracts_acs_AbstractSyntaxes_CAPv4.asn" relativeURI="src/CAP_gsmSSF_gsmSCF_pkgs_contracts_acs_AbstractSyntaxes_CAPv4.asn"/> + <FileResource projectRelativePath="src/CAP_gsmSSF_gsmSCF_pkgs_contracts_acs_CAPv4.asn" relativeURI="src/CAP_gsmSSF_gsmSCF_pkgs_contracts_acs_CAPv4.asn"/> + <FileResource projectRelativePath="src/CAP_object_identifiers_CAPv4.asn" relativeURI="src/CAP_object_identifiers_CAPv4.asn"/> + <FileResource projectRelativePath="src/CAP_operationcodes_CAPv4.asn" relativeURI="src/CAP_operationcodes_CAPv4.asn"/> + <FileResource projectRelativePath="src/CAP_smsSSF_gsmSCF_pkgs_contracts_acs_CAPv4.asn" relativeURI="src/CAP_smsSSF_gsmSCF_pkgs_contracts_acs_CAPv4.asn"/> + <FileResource projectRelativePath="src/CAPv4_CS1_DataTypes.ttcn" relativeURI="src/CAPv4_CS1_DataTypes.ttcn"/> + <FileResource projectRelativePath="src/CAPv4_CS2_datatypes.ttcn" relativeURI="src/CAPv4_CS2_datatypes.ttcn"/> + <FileResource projectRelativePath="src/CAPv4_DialoguePDUs.ttcn" relativeURI="src/CAPv4_DialoguePDUs.ttcn"/> + <FileResource projectRelativePath="src/CAPv4_EncDec.cc" relativeURI="src/CAPv4_EncDec.cc"/> + <FileResource projectRelativePath="src/CAPv4_GPRS_ReferenceNumber.ttcn" relativeURI="src/CAPv4_GPRS_ReferenceNumber.ttcn"/> + <FileResource projectRelativePath="src/CAPv4_PDU_Defs.ttcn" relativeURI="src/CAPv4_PDU_Defs.ttcn"/> + <FileResource projectRelativePath="src/CAPv4_SMS_ops_args.ttcn" relativeURI="src/CAPv4_SMS_ops_args.ttcn"/> + <FileResource projectRelativePath="src/CAPv4_TCAPMessages.ttcn" relativeURI="src/CAPv4_TCAPMessages.ttcn"/> + <FileResource projectRelativePath="src/CAPv4_TC_Notation_Extensions.ttcn" relativeURI="src/CAPv4_TC_Notation_Extensions.ttcn"/> + <FileResource projectRelativePath="src/CAPv4_Types.ttcn" relativeURI="src/CAPv4_Types.ttcn"/> + <FileResource projectRelativePath="src/CAPv4_U_ABORT_Data.ttcn" relativeURI="src/CAPv4_U_ABORT_Data.ttcn"/> + <FileResource projectRelativePath="src/CAPv4_classes1.ttcn" relativeURI="src/CAPv4_classes1.ttcn"/> + <FileResource projectRelativePath="src/CAPv4_classes2.ttcn" relativeURI="src/CAPv4_classes2.ttcn"/> + <FileResource projectRelativePath="src/CAPv4_datatypes.ttcn" relativeURI="src/CAPv4_datatypes.ttcn"/> + <FileResource projectRelativePath="src/CAPv4_errorcodes.ttcn" relativeURI="src/CAPv4_errorcodes.ttcn"/> + <FileResource projectRelativePath="src/CAPv4_errortypes.ttcn" relativeURI="src/CAPv4_errortypes.ttcn"/> + <FileResource projectRelativePath="src/CAPv4_extension_object_identifiers.ttcn" relativeURI="src/CAPv4_extension_object_identifiers.ttcn"/> + <FileResource projectRelativePath="src/CAPv4_gprsSSF_gsmSCF_ops_args.ttcn" relativeURI="src/CAPv4_gprsSSF_gsmSCF_ops_args.ttcn"/> + <FileResource projectRelativePath="src/CAPv4_gprsSSF_gsmSCF_pkgs_contracts_acs.ttcn" relativeURI="src/CAPv4_gprsSSF_gsmSCF_pkgs_contracts_acs.ttcn"/> + <FileResource projectRelativePath="src/CAPv4_gsmSCF_gsmSRF_ops_args.ttcn" relativeURI="src/CAPv4_gsmSCF_gsmSRF_ops_args.ttcn"/> + <FileResource projectRelativePath="src/CAPv4_gsmSCF_gsmSRF_pkgs_contracts_acs.ttcn" relativeURI="src/CAPv4_gsmSCF_gsmSRF_pkgs_contracts_acs.ttcn"/> + <FileResource projectRelativePath="src/CAPv4_gsmSSF_gsmSCF_ops_args.ttcn" relativeURI="src/CAPv4_gsmSSF_gsmSCF_ops_args.ttcn"/> + <FileResource projectRelativePath="src/CAPv4_gsmSSF_gsmSCF_pkgs_contracts_acs.ttcn" relativeURI="src/CAPv4_gsmSSF_gsmSCF_pkgs_contracts_acs.ttcn"/> + <FileResource projectRelativePath="src/CAPv4_gsmSSF_gsmSCF_pkgs_contracts_acs_AbstractSyntaxes.ttcn" relativeURI="src/CAPv4_gsmSSF_gsmSCF_pkgs_contracts_acs_AbstractSyntaxes.ttcn"/> + <FileResource projectRelativePath="src/CAPv4_object_identifiers.ttcn" relativeURI="src/CAPv4_object_identifiers.ttcn"/> + <FileResource projectRelativePath="src/CAPv4_operationcodes.ttcn" relativeURI="src/CAPv4_operationcodes.ttcn"/> + <FileResource projectRelativePath="src/CAPv4_smsSSF_gsmSCF_pkgs_contracts_acs.ttcn" relativeURI="src/CAPv4_smsSSF_gsmSCF_pkgs_contracts_acs.ttcn"/> + <FileResource projectRelativePath="src/CS1_DataTypes.asn" relativeURI="src/CS1_DataTypes.asn"/> + <FileResource projectRelativePath="src/CS1_DataTypes_CAPv4.asn" relativeURI="src/CS1_DataTypes_CAPv4.asn"/> + <FileResource projectRelativePath="src/CS2_datatypes.asn" relativeURI="src/CS2_datatypes.asn"/> + <FileResource projectRelativePath="src/CS2_datatypes_CAPv4.asn" relativeURI="src/CS2_datatypes_CAPv4.asn"/> + <FileResource projectRelativePath="src/DialoguePDUs.asn" relativeURI="src/DialoguePDUs.asn"/> + <FileResource projectRelativePath="src/DialoguePDUs_CAPv4.asn" relativeURI="src/DialoguePDUs_CAPv4.asn"/> + <FileResource projectRelativePath="src/TCAPMessages.asn" relativeURI="src/TCAPMessages.asn"/> + <FileResource projectRelativePath="src/TCAPMessages_CAPv4.asn" relativeURI="src/TCAPMessages_CAPv4.asn"/> + <FileResource projectRelativePath="src/TC_Notation_Extensions.asn" relativeURI="src/TC_Notation_Extensions.asn"/> + <FileResource projectRelativePath="src/TC_Notation_Extensions_CAPv4.asn" relativeURI="src/TC_Notation_Extensions_CAPv4.asn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/CAP_v4_v7.6.0_CNL113721</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/CCAPI_MINSAT_60_CNL113601.tpd b/regression_test/XML/tpdValidTest/tpdTest/CCAPI_MINSAT_60_CNL113601.tpd new file mode 100644 index 000000000..a44ef971b --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/CCAPI_MINSAT_60_CNL113601.tpd @@ -0,0 +1,439 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: CCAPI_MINSAT_60_CNL113601.tpd + Description: tpd project file + Rev: R1B01 + Prodnr: CNL 113 601 + Updated: 2012-05-30 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>CCAPI_MINSAT_60_CNL113601</ProjectName> + <ReferencedProjects> + <ReferencedProject name="XSDASN_CNL113474" projectLocationURI="../XSDASN_CNL113474/XSDASN_CNL113474.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/CCAPI_MINSAT_60_CNL113601_FS.pdf" relativeURI="doc/CCAPI_MINSAT_60_CNL113601_FS.pdf"/> + <FileResource projectRelativePath="doc/CCAPI_MINSAT_60_CNL113601_PRI.pdf" relativeURI="doc/CCAPI_MINSAT_60_CNL113601_PRI.pdf"/> + <FileResource projectRelativePath="doc/CCAPI_MINSAT_60_CNL113601_UG.pdf" relativeURI="doc/CCAPI_MINSAT_60_CNL113601_UG.pdf"/> + <FileResource projectRelativePath="src/CCAPI.asn" relativeURI="src/CCAPI.asn"/> + <FileResource projectRelativePath="src/CCAPI.xsd" relativeURI="src/CCAPI.xsd"/> + <FileResource projectRelativePath="src/CCAPI_EncDec.cc" relativeURI="src/CCAPI_EncDec.cc"/> + <FileResource projectRelativePath="src/CCAPI_Types.ttcn" relativeURI="src/CCAPI_Types.ttcn"/> + <FileResource projectRelativePath="src/CCAPI_linux.c" relativeURI="src/CCAPI_linux.c"/> + <FileResource projectRelativePath="src/CCAPI_linux64bit.c" relativeURI="src/CCAPI_linux64bit.c"/> + <FileResource projectRelativePath="src/CCAPI_oss.asn" relativeURI="src/CCAPI_oss.asn"/> + <FileResource projectRelativePath="src/CCAPI_oss.c" relativeURI="src/CCAPI_oss.c"/> + <FileResource projectRelativePath="src/CCAPI_oss.h" relativeURI="src/CCAPI_oss.h"/> + <FileResource projectRelativePath="src/CCAPI_solarisx86.c" relativeURI="src/CCAPI_solarisx86.c"/> + <FileResource projectRelativePath="src/MINSAT_EncDec.cc" relativeURI="src/MINSAT_EncDec.cc"/> + <FileResource projectRelativePath="src/MINSAT_Types.ttcnpp" relativeURI="src/MINSAT_Types.ttcnpp"/> + <FileResource projectRelativePath="src/gen.sh" relativeURI="src/gen.sh"/> + </Files> + <ActiveConfiguration>LINUX64</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/CCAPI_MINSAT_60_CNL113601</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>PC_A20_ON</listItem> + </TTCN3preprocessorDefines> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>osstoed</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <ConfigurationRequirements> + <configurationRequirement> + <projectName>XSDASN_CNL113474</projectName> + <rerquiredConfiguration>XSD</rerquiredConfiguration> + </configurationRequirement> + </ConfigurationRequirements> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/CCAPI.xsd</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/CCAPI_linux.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/CCAPI_oss.asn</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/CCAPI_oss.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/CCAPI_solarisx86.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/gen.sh</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="LINUX64"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/CCAPI_MINSAT_60_CNL113601</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>PC_A20_ON</listItem> + </TTCN3preprocessorDefines> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>osstoed</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <ConfigurationRequirements> + <configurationRequirement> + <projectName>XSDASN_CNL113474</projectName> + <rerquiredConfiguration>XSD</rerquiredConfiguration> + </configurationRequirement> + </ConfigurationRequirements> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/CCAPI.xsd</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/CCAPI_linux.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/CCAPI_oss.asn</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/CCAPI_oss.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/CCAPI_solarisx86.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/gen.sh</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="LINUX"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/CCAPI_MINSAT_60_CNL113601</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>PC_A20_ON</listItem> + </TTCN3preprocessorDefines> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>osstoed</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <ConfigurationRequirements> + <configurationRequirement> + <projectName>XSDASN_CNL113474</projectName> + <rerquiredConfiguration>XSD</rerquiredConfiguration> + </configurationRequirement> + </ConfigurationRequirements> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/CCAPI.xsd</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/CCAPI_linux64bit.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/CCAPI_oss.asn</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/CCAPI_oss.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/CCAPI_solarisx86.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/gen.sh</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="SOLARIS_X86"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/CCAPI_MINSAT_60_CNL113601</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>PC_A20_ON</listItem> + </TTCN3preprocessorDefines> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>osstoed</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <ConfigurationRequirements> + <configurationRequirement> + <projectName>XSDASN_CNL113474</projectName> + <rerquiredConfiguration>XSD</rerquiredConfiguration> + </configurationRequirement> + </ConfigurationRequirements> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/CCAPI.xsd</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/CCAPI_linux.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/CCAPI_linux64bit.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/CCAPI_oss.asn</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/CCAPI_oss.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/gen.sh</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="SOLARIS"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/CCAPI_MINSAT_60_CNL113601</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>PC_A20_ON</listItem> + </TTCN3preprocessorDefines> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>osstoed</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <ConfigurationRequirements> + <configurationRequirement> + <projectName>XSDASN_CNL113474</projectName> + <rerquiredConfiguration>XSD</rerquiredConfiguration> + </configurationRequirement> + </ConfigurationRequirements> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/CCAPI.xsd</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/CCAPI_linux.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/CCAPI_linux64bit.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/CCAPI_oss.asn</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/CCAPI_solarisx86.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/gen.sh</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/CDR_v9.12.0_CNL113757.tpd b/regression_test/XML/tpdValidTest/tpdTest/CDR_v9.12.0_CNL113757.tpd new file mode 100644 index 000000000..8cc4e425d --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/CDR_v9.12.0_CNL113757.tpd @@ -0,0 +1,70 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: CDR_v9.12.0_CNL113757.tpd + Description: tpd project file + Rev: R1A02 + Prodnr: CNL 113 757 + Updated: 2012-09-21 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>CDR_v9.12.0_CNL113757</ProjectName> + <ReferencedProjects> + <ReferencedProject name="MAP_v7.8.0_CNL113569" projectLocationURI="../MAP_v7.8.0_CNL113569/MAP_v7.8.0_CNL113569.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/CDR_v9.12.0_CNL113757_FS.pdf" relativeURI="doc/CDR_v9.12.0_CNL113757_FS.pdf"/> + <FileResource projectRelativePath="doc/CDR_v9.12.0_CNL113757_PRI.pdf" relativeURI="doc/CDR_v9.12.0_CNL113757_PRI.pdf"/> + <FileResource projectRelativePath="doc/CDR_v9.12.0_CNL113757_UG.pdf" relativeURI="doc/CDR_v9.12.0_CNL113757_UG.pdf"/> + <FileResource projectRelativePath="src/CDR_EncDec.cc" relativeURI="src/CDR_EncDec.cc"/> + <FileResource projectRelativePath="src/CDR_Types.ttcn" relativeURI="src/CDR_Types.ttcn"/> + <FileResource projectRelativePath="src/CSChargingDataTypes.asn" relativeURI="src/CSChargingDataTypes.asn"/> + <FileResource projectRelativePath="src/GPRSChargingDataTypes.asn" relativeURI="src/GPRSChargingDataTypes.asn"/> + <FileResource projectRelativePath="src/GenericChargingDataTypes.asn" relativeURI="src/GenericChargingDataTypes.asn"/> + <FileResource projectRelativePath="src/IMSChargingDataTypes.asn" relativeURI="src/IMSChargingDataTypes.asn"/> + <FileResource projectRelativePath="src/LCSChargingDataTypes.asn" relativeURI="src/LCSChargingDataTypes.asn"/> + <FileResource projectRelativePath="src/MBMSChargingDataTypes.asn" relativeURI="src/MBMSChargingDataTypes.asn"/> + <FileResource projectRelativePath="src/MMSChargingDataTypes.asn" relativeURI="src/MMSChargingDataTypes.asn"/> + <FileResource projectRelativePath="src/MMTelChargingDataTypes.asn" relativeURI="src/MMTelChargingDataTypes.asn"/> + <FileResource projectRelativePath="src/POCChargingDataTypes.asn" relativeURI="src/POCChargingDataTypes.asn"/> + <FileResource projectRelativePath="src/SS_DataTypes.asn" relativeURI="src/SS_DataTypes.asn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/CDR_v9.12.0_CNL113757</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/CDR_v9.5.0_CNL113712.tpd b/regression_test/XML/tpdValidTest/tpdTest/CDR_v9.5.0_CNL113712.tpd new file mode 100644 index 000000000..703c07b9f --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/CDR_v9.5.0_CNL113712.tpd @@ -0,0 +1,71 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: CDR_v9.5.0_CNL113712.tpd + Description: tpd project file + Rev: R1B01 + Prodnr: CNL 113 712 + Updated: 2012-10-12 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>CDR_v9.5.0_CNL113712</ProjectName> + <ReferencedProjects> + <ReferencedProject name="MAP_v7.8.0_CNL113569_2" projectLocationURI="../MAP_v7.8.0_CNL113569/MAP_v7.8.0_CNL113569.tpd"/> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/> + <ReferencedProject name="ROSE_CNL113369" projectLocationURI="../ROSE_CNL113369/ROSE_CNL113369.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/CDR_v9.5.0_CNL113712_FS.pdf" relativeURI="doc/CDR_v9.5.0_CNL113712_FS.pdf"/> + <FileResource projectRelativePath="doc/CDR_v9.5.0_CNL113712_PRI.pdf" relativeURI="doc/CDR_v9.5.0_CNL113712_PRI.pdf"/> + <FileResource projectRelativePath="doc/CDR_v9.5.0_CNL113712_UG.pdf" relativeURI="doc/CDR_v9.5.0_CNL113712_UG.pdf"/> + <FileResource projectRelativePath="src/CDR_EncDec.cc" relativeURI="src/CDR_EncDec.cc"/> + <FileResource projectRelativePath="src/CDR_Types.ttcn" relativeURI="src/CDR_Types.ttcn"/> + <FileResource projectRelativePath="src/CSChargingDataTypes.asn" relativeURI="src/CSChargingDataTypes.asn"/> + <FileResource projectRelativePath="src/GPRSChargingDataTypes.asn" relativeURI="src/GPRSChargingDataTypes.asn"/> + <FileResource projectRelativePath="src/GenericChargingDataTypes.asn" relativeURI="src/GenericChargingDataTypes.asn"/> + <FileResource projectRelativePath="src/IMSChargingDataTypes.asn" relativeURI="src/IMSChargingDataTypes.asn"/> + <FileResource projectRelativePath="src/LCSChargingDataTypes.asn" relativeURI="src/LCSChargingDataTypes.asn"/> + <FileResource projectRelativePath="src/MBMSChargingDataTypes.asn" relativeURI="src/MBMSChargingDataTypes.asn"/> + <FileResource projectRelativePath="src/MMSChargingDataTypes.asn" relativeURI="src/MMSChargingDataTypes.asn"/> + <FileResource projectRelativePath="src/MMTelChargingDataTypes.asn" relativeURI="src/MMTelChargingDataTypes.asn"/> + <FileResource projectRelativePath="src/POCChargingDataTypes.asn" relativeURI="src/POCChargingDataTypes.asn"/> + <FileResource projectRelativePath="src/SSDataTypes.asn" relativeURI="src/SSDataTypes.asn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/CDR_v9.5.0_CNL113712</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/CDR_v9.5.0_SGSN_CNL113728.tpd b/regression_test/XML/tpdValidTest/tpdTest/CDR_v9.5.0_SGSN_CNL113728.tpd new file mode 100644 index 000000000..aee6e5211 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/CDR_v9.5.0_SGSN_CNL113728.tpd @@ -0,0 +1,70 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: CDR_v9.5.0_SGSN_CNL113728.tpd + Description: tpd project file + Rev: R1A02 + Prodnr: CNL 113 728 + Updated: 2012-04-12 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>CDR_v9.5.0_SGSN_CNL113728</ProjectName> + <ReferencedProjects> + <ReferencedProject name="MAP_v7.8.0_CNL113569" projectLocationURI="../MAP_v7.8.0_CNL113569/MAP_v7.8.0_CNL113569.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/CDR_v9.5.0_SGSN_CNL113728_FS.pdf" relativeURI="doc/CDR_v9.5.0_SGSN_CNL113728_FS.pdf"/> + <FileResource projectRelativePath="doc/CDR_v9.5.0_SGSN_CNL113728_PRI.pdf" relativeURI="doc/CDR_v9.5.0_SGSN_CNL113728_PRI.pdf"/> + <FileResource projectRelativePath="doc/CDR_v9.5.0_SGSN_CNL113728_UG.pdf" relativeURI="doc/CDR_v9.5.0_SGSN_CNL113728_UG.pdf"/> + <FileResource projectRelativePath="src/CDR_EncDec.cc" relativeURI="src/CDR_EncDec.cc"/> + <FileResource projectRelativePath="src/CDR_Types.ttcn" relativeURI="src/CDR_Types.ttcn"/> + <FileResource projectRelativePath="src/CSChargingDataTypes.asn" relativeURI="src/CSChargingDataTypes.asn"/> + <FileResource projectRelativePath="src/GPRSChargingDataTypes.asn" relativeURI="src/GPRSChargingDataTypes.asn"/> + <FileResource projectRelativePath="src/GenericChargingDataTypes.asn" relativeURI="src/GenericChargingDataTypes.asn"/> + <FileResource projectRelativePath="src/IMSChargingDataTypes.asn" relativeURI="src/IMSChargingDataTypes.asn"/> + <FileResource projectRelativePath="src/LCSChargingDataTypes.asn" relativeURI="src/LCSChargingDataTypes.asn"/> + <FileResource projectRelativePath="src/MBMSChargingDataTypes.asn" relativeURI="src/MBMSChargingDataTypes.asn"/> + <FileResource projectRelativePath="src/MMSChargingDataTypes.asn" relativeURI="src/MMSChargingDataTypes.asn"/> + <FileResource projectRelativePath="src/MMTelChargingDataTypes.asn" relativeURI="src/MMTelChargingDataTypes.asn"/> + <FileResource projectRelativePath="src/POCChargingDataTypes.asn" relativeURI="src/POCChargingDataTypes.asn"/> + <FileResource projectRelativePath="src/SS_DataTypes.asn" relativeURI="src/SS_DataTypes.asn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/CDR_v9.5.0_SGSN_CNL113728</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/CIP_CS4.0_CNL113535.tpd b/regression_test/XML/tpdValidTest/tpdTest/CIP_CS4.0_CNL113535.tpd new file mode 100644 index 000000000..8e6fd084a --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/CIP_CS4.0_CNL113535.tpd @@ -0,0 +1,64 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: CIP_CS4.0_CNL113535.tpd + Description: tpd project file + Rev: R4A01 + Prodnr: CNL 113 535 + Updated: 2012-04-02 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>CIP_CS4.0_CNL113535</ProjectName> + <ReferencedProjects> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/> + <ReferencedProject name="ROSE_CNL113369" projectLocationURI="../ROSE_CNL113369/ROSE_CNL113369.tpd"/> + <ReferencedProject name="TCAPasp_CNL113349" projectLocationURI="../../TestPorts/TCAPasp_CNL113349/TCAPasp_CNL113349.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/CIP_CS4.0_CNL113535_FS.pdf" relativeURI="doc/CIP_CS4.0_CNL113535_FS.pdf"/> + <FileResource projectRelativePath="doc/CIP_CS4.0_CNL113535_PRI.pdf" relativeURI="doc/CIP_CS4.0_CNL113535_PRI.pdf"/> + <FileResource projectRelativePath="doc/CIP_CS4.0_CNL113535_UG.pdf" relativeURI="doc/CIP_CS4.0_CNL113535_UG.pdf"/> + <FileResource projectRelativePath="src/CIP_EncDec.cc" relativeURI="src/CIP_EncDec.cc"/> + <FileResource projectRelativePath="src/CIP_ITUasp_Types.ttcn" relativeURI="src/CIP_ITUasp_Types.ttcn"/> + <FileResource projectRelativePath="src/CIP_PDU_Defs.asn" relativeURI="src/CIP_PDU_Defs.asn"/> + <FileResource projectRelativePath="src/CIP_Types.ttcn" relativeURI="src/CIP_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/CIP_CS4.0_CNL113535</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/CIP_Orga_Italy_CNL113701.tpd b/regression_test/XML/tpdValidTest/tpdTest/CIP_Orga_Italy_CNL113701.tpd new file mode 100644 index 000000000..9926db1be --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/CIP_Orga_Italy_CNL113701.tpd @@ -0,0 +1,65 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: CIP_Orga_Italy_CNL113701.tpd + Description: tpd project file + Rev: R3A01 + Prodnr: CNL 113 701 + Updated: 2012-04-02 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>CIP_Orga_Italy_CNL113701</ProjectName> + <ReferencedProjects> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/> + <ReferencedProject name="ROSE_CNL113369" projectLocationURI="../ROSE_CNL113369/ROSE_CNL113369.tpd"/> + <ReferencedProject name="TCAPasp_CNL113349" projectLocationURI="../../TestPorts/TCAPasp_CNL113349/TCAPasp_CNL113349.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/CIP_Orga_Italy_CNL113701_FS.pdf" relativeURI="doc/CIP_Orga_Italy_CNL113701_FS.pdf"/> + <FileResource projectRelativePath="doc/CIP_Orga_Italy_CNL113701_PRI.pdf" relativeURI="doc/CIP_Orga_Italy_CNL113701_PRI.pdf"/> + <FileResource projectRelativePath="doc/CIP_Orga_Italy_CNL113701_UG.pdf" relativeURI="doc/CIP_Orga_Italy_CNL113701_UG.pdf"/> + <FileResource projectRelativePath="src/CIP_Orga.grp" relativeURI="src/CIP_Orga.grp"/> + <FileResource projectRelativePath="src/CIP_Orga_EncDec.cc" relativeURI="src/CIP_Orga_EncDec.cc"/> + <FileResource projectRelativePath="src/CIP_Orga_ITUasp_Types.ttcn" relativeURI="src/CIP_Orga_ITUasp_Types.ttcn"/> + <FileResource projectRelativePath="src/CIP_Orga_PDU_Defs.asn" relativeURI="src/CIP_Orga_PDU_Defs.asn"/> + <FileResource projectRelativePath="src/CIP_Orga_Types.ttcn" relativeURI="src/CIP_Orga_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/CIP_Orga_Italy_CNL113701</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/DHCP_CNL113461.tpd b/regression_test/XML/tpdValidTest/tpdTest/DHCP_CNL113461.tpd new file mode 100644 index 000000000..b0af40c2f --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/DHCP_CNL113461.tpd @@ -0,0 +1,61 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: DHCP_CNL113461.tpd + Description: tpd project file + Rev: R5A01 + Prodnr: CNL 113 461 + Updated: 2012-05-11 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>DHCP_CNL113461</ProjectName> + <ReferencedProjects> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/DHCP_CNL113461_FS.pdf" relativeURI="doc/DHCP_CNL113461_FS.pdf"/> + <FileResource projectRelativePath="doc/DHCP_CNL113461_PRI.pdf" relativeURI="doc/DHCP_CNL113461_PRI.pdf"/> + <FileResource projectRelativePath="doc/DHCP_CNL113461_UG.pdf" relativeURI="doc/DHCP_CNL113461_UG.pdf"/> + <FileResource projectRelativePath="src/DHCP_EncDec.cc" relativeURI="src/DHCP_EncDec.cc"/> + <FileResource projectRelativePath="src/DHCP_Options.ttcn" relativeURI="src/DHCP_Options.ttcn"/> + <FileResource projectRelativePath="src/DHCP_Types.ttcn" relativeURI="src/DHCP_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/DHCP_CNL113461</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/DHCPv6_CNL113763.tpd b/regression_test/XML/tpdValidTest/tpdTest/DHCPv6_CNL113763.tpd new file mode 100644 index 000000000..b15a2515a --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/DHCPv6_CNL113763.tpd @@ -0,0 +1,47 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: DHCPv6_CNL113763.tpd + Description: tpd project file + Rev: R1A01 + Prodnr: CNL 113 763 + Updated: 2012-12-05 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>DHCPv6_CNL113763</ProjectName> + <ReferencedProjects> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="src/DHCPv6_Types.ttcn" relativeURI="src/DHCPv6_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/DHCPv6_CNL113763</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/DNS_CNL113429.tpd b/regression_test/XML/tpdValidTest/tpdTest/DNS_CNL113429.tpd new file mode 100644 index 000000000..8b5b42b87 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/DNS_CNL113429.tpd @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: DNS_CNL113429.tpd + Description: tpd project file + Rev: R6A01 + Prodnr: CNL 113 429 + Updated: 2012-02-07 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>DNS_CNL113429</ProjectName> + <Files> + <FileResource projectRelativePath="DNS_EncDec.cc" relativeURI="src/DNS_EncDec.cc"/> + <FileResource projectRelativePath="DNS_Types.ttcn" relativeURI="src/DNS_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/DNS_CNL113429</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/DSS1_ETSI_CNL113435.tpd b/regression_test/XML/tpdValidTest/tpdTest/DSS1_ETSI_CNL113435.tpd new file mode 100644 index 000000000..5e7520fca --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/DSS1_ETSI_CNL113435.tpd @@ -0,0 +1,77 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: DSS1_ETSI_CNL113435.tpd + Description: tpd project file + Rev: R3B03 + Prodnr: CNL 113 435 + Updated: 2012-10-01 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>DSS1_ETSI_CNL113435</ProjectName> + <ReferencedProjects> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/> + <ReferencedProject name="ROSE_CNL113369" projectLocationURI="../ROSE_CNL113369/ROSE_CNL113369.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="src/DSS1_ETSI_ProtocolModule.grp" relativeURI="src/DSS1_ETSI_ProtocolModule.grp"/> + <FileResource projectRelativePath="src/DSS1_EncDec.cc" relativeURI="src/DSS1_EncDec.cc"/> + <FileResource projectRelativePath="src/DSS1_Types.ttcn" relativeURI="src/DSS1_Types.ttcn"/> + <FileResource projectRelativePath="src/Facility_EncDec.cc" relativeURI="src/Facility_EncDec.cc"/> + <FileResource projectRelativePath="src/Facility_IE_Defs.asn" relativeURI="src/Facility_IE_Defs.asn"/> + <FileResource projectRelativePath="src/Facility_Operations.asn" relativeURI="src/Facility_Operations.asn"/> + <FileResource projectRelativePath="src/Facility_Types.ttcn" relativeURI="src/Facility_Types.ttcn"/> + <FileResource projectRelativePath="src/Revised_Addressing_Data_Elements.asn" relativeURI="src/Revised_Addressing_Data_Elements.asn"/> + <FileResource projectRelativePath="src/Revised_Advice_of_Charge_Interaction_Operations.asn" relativeURI="src/Revised_Advice_of_Charge_Interaction_Operations.asn"/> + <FileResource projectRelativePath="src/Revised_Advice_of_Charge_Operations.asn" relativeURI="src/Revised_Advice_of_Charge_Operations.asn"/> + <FileResource projectRelativePath="src/Revised_Basic_Service_Elements.asn" relativeURI="src/Revised_Basic_Service_Elements.asn"/> + <FileResource projectRelativePath="src/Revised_CCBS_Operation_and_Errors.asn" relativeURI="src/Revised_CCBS_Operation_and_Errors.asn"/> + <FileResource projectRelativePath="src/Revised_CCBS_private_networks_Operations_and_Errors.asn" relativeURI="src/Revised_CCBS_private_networks_Operations_and_Errors.asn"/> + <FileResource projectRelativePath="src/Revised_Closed_User_Group_Service_Operations.asn" relativeURI="src/Revised_Closed_User_Group_Service_Operations.asn"/> + <FileResource projectRelativePath="src/Revised_Conference_Add_On_Operations.asn" relativeURI="src/Revised_Conference_Add_On_Operations.asn"/> + <FileResource projectRelativePath="src/Revised_Diversion_Operations.asn" relativeURI="src/Revised_Diversion_Operations.asn"/> + <FileResource projectRelativePath="src/Revised_Embedded_Q931_Types.asn" relativeURI="src/Revised_Embedded_Q931_Types.asn"/> + <FileResource projectRelativePath="src/Revised_Explicit_Call_Transfer_Operations_and_Errors.asn" relativeURI="src/Revised_Explicit_Call_Transfer_Operations_and_Errors.asn"/> + <FileResource projectRelativePath="src/Revised_Explicit_Network_Controlled_Channel_Reservation.asn" relativeURI="src/Revised_Explicit_Network_Controlled_Channel_Reservation.asn"/> + <FileResource projectRelativePath="src/Revised_Facility_Information_Element_Components.asn" relativeURI="src/Revised_Facility_Information_Element_Components.asn"/> + <FileResource projectRelativePath="src/Revised_Freephone_Operations.asn" relativeURI="src/Revised_Freephone_Operations.asn"/> + <FileResource projectRelativePath="src/Revised_General_Errors.asn" relativeURI="src/Revised_General_Errors.asn"/> + <FileResource projectRelativePath="src/Revised_MCID_Operations.asn" relativeURI="src/Revised_MCID_Operations.asn"/> + <FileResource projectRelativePath="src/Revised_MWI_Operations_and_Errors.asn" relativeURI="src/Revised_MWI_Operations_and_Errors.asn"/> + <FileResource projectRelativePath="src/Revised_Notification_Indicator_IE_Data_Structure.asn" relativeURI="src/Revised_Notification_Indicator_IE_Data_Structure.asn"/> + <FileResource projectRelativePath="src/Revised_Outgoing_Call_Barring_Operations_and_Errors.asn" relativeURI="src/Revised_Outgoing_Call_Barring_Operations_and_Errors.asn"/> + <FileResource projectRelativePath="src/Revised_Set_Operations_and_Errors.asn" relativeURI="src/Revised_Set_Operations_and_Errors.asn"/> + <FileResource projectRelativePath="src/Revised_Status_Request_Procedure.asn" relativeURI="src/Revised_Status_Request_Procedure.asn"/> + <FileResource projectRelativePath="src/Revised_Three_Party_Operations.asn" relativeURI="src/Revised_Three_Party_Operations.asn"/> + <FileResource projectRelativePath="src/Revised_UUS_Operations.asn" relativeURI="src/Revised_UUS_Operations.asn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/DSS1_ETSI_CNL113435</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EAP_CNL113722.tpd b/regression_test/XML/tpdValidTest/tpdTest/EAP_CNL113722.tpd new file mode 100644 index 000000000..07592f39c --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EAP_CNL113722.tpd @@ -0,0 +1,68 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: EAP_CNL113722.tpd + Description: tpd project file + Rev: R3A + Prodnr: CNL 113 722 + Updated: 2013-03-21 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EAP_CNL113722</ProjectName> + <Folders> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="src/EAP.grp" relativeURI="src/EAP.grp"/> + <FileResource projectRelativePath="src/EAP_EncDec.cc" relativeURI="src/EAP_EncDec.cc"/> + <FileResource projectRelativePath="src/EAP_Types.ttcn" relativeURI="src/EAP_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EAP_CNL113722</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <altstep>.*</altstep> + <globalConstant>.*</globalConstant> + <externalConstant>.*</externalConstant> + <function>.*</function> + <externalFunction>.*</externalFunction> + <moduleParameter>.*</moduleParameter> + <globalPort>.*</globalPort> + <globalTemplate>.*</globalTemplate> + <testcase>.*</testcase> + <globalTimer>.*</globalTimer> + <group>.*</group> + <localConstant>.*</localConstant> + <localVariable>.*</localVariable> + <localTemplate>.*</localTemplate> + <localVariableTemplate>.*</localVariableTemplate> + <localTimer>.*</localTimer> + <formalParameter>.*</formalParameter> + <componentConstant>.*</componentConstant> + <componentVariable>.*</componentVariable> + <componentTimer>.*</componentTimer> + </NamingCoventions> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/ECMS_CORBAmsg_CNL113687.tpd b/regression_test/XML/tpdValidTest/tpdTest/ECMS_CORBAmsg_CNL113687.tpd new file mode 100644 index 000000000..62e8191a8 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/ECMS_CORBAmsg_CNL113687.tpd @@ -0,0 +1,100 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: ECMS_CORBAmsg_CNL113687.tpd + Description: tpd project file + Rev: R1A04 + Prodnr: CNL 113 687 + Updated: 2012-06-28 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>ECMS_CORBAmsg_CNL113687</ProjectName> + <Folders> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="src/Address_type.ttcn" relativeURI="src/Address_type.ttcn"/> + <FileResource projectRelativePath="src/Makefile" relativeURI="src/Makefile"/> + <FileResource projectRelativePath="src/com.ttcn" relativeURI="src/com.ttcn"/> + <FileResource projectRelativePath="src/com_Converter.cc" relativeURI="src/com_Converter.cc"/> + <FileResource projectRelativePath="src/com_Converter.hh" relativeURI="src/com_Converter.hh"/> + <FileResource projectRelativePath="src/com__lhs.ttcn" relativeURI="src/com__lhs.ttcn"/> + <FileResource projectRelativePath="src/com__lhs_Converter.cc" relativeURI="src/com__lhs_Converter.cc"/> + <FileResource projectRelativePath="src/com__lhs_Converter.hh" relativeURI="src/com__lhs_Converter.hh"/> + <FileResource projectRelativePath="src/com__lhs__ccb.ttcn" relativeURI="src/com__lhs__ccb.ttcn"/> + <FileResource projectRelativePath="src/com__lhs__ccb_Converter.cc" relativeURI="src/com__lhs__ccb_Converter.cc"/> + <FileResource projectRelativePath="src/com__lhs__ccb_Converter.hh" relativeURI="src/com__lhs__ccb_Converter.hh"/> + <FileResource projectRelativePath="src/com__lhs__ccb__soi.ttcn" relativeURI="src/com__lhs__ccb__soi.ttcn"/> + <FileResource projectRelativePath="src/com__lhs__ccb__soi_Converter.cc" relativeURI="src/com__lhs__ccb__soi_Converter.cc"/> + <FileResource projectRelativePath="src/com__lhs__ccb__soi_Converter.hh" relativeURI="src/com__lhs__ccb__soi_Converter.hh"/> + <FileResource projectRelativePath="src/com__lhs__ccb__soi__ClientCallbackI.ttcn" relativeURI="src/com__lhs__ccb__soi__ClientCallbackI.ttcn"/> + <FileResource projectRelativePath="src/com__lhs__ccb__soi__ClientCallbackI_PT.cc" relativeURI="src/com__lhs__ccb__soi__ClientCallbackI_PT.cc"/> + <FileResource projectRelativePath="src/com__lhs__ccb__soi__ClientCallbackI_PT.hh" relativeURI="src/com__lhs__ccb__soi__ClientCallbackI_PT.hh"/> + <FileResource projectRelativePath="src/com__lhs__ccb__soi__ClientCallbackI_portType.ttcn" relativeURI="src/com__lhs__ccb__soi__ClientCallbackI_portType.ttcn"/> + <FileResource projectRelativePath="src/com__lhs__ccb__soi__ServiceFactoryI.ttcn" relativeURI="src/com__lhs__ccb__soi__ServiceFactoryI.ttcn"/> + <FileResource projectRelativePath="src/com__lhs__ccb__soi__ServiceFactoryI_PT.cc" relativeURI="src/com__lhs__ccb__soi__ServiceFactoryI_PT.cc"/> + <FileResource projectRelativePath="src/com__lhs__ccb__soi__ServiceFactoryI_PT.hh" relativeURI="src/com__lhs__ccb__soi__ServiceFactoryI_PT.hh"/> + <FileResource projectRelativePath="src/com__lhs__ccb__soi__ServiceFactoryI_portType.ttcn" relativeURI="src/com__lhs__ccb__soi__ServiceFactoryI_portType.ttcn"/> + <FileResource projectRelativePath="src/com__lhs__ccb__soi__ServiceObjectI.ttcn" relativeURI="src/com__lhs__ccb__soi__ServiceObjectI.ttcn"/> + <FileResource projectRelativePath="src/com__lhs__ccb__soi__ServiceObjectI_PT.cc" relativeURI="src/com__lhs__ccb__soi__ServiceObjectI_PT.cc"/> + <FileResource projectRelativePath="src/com__lhs__ccb__soi__ServiceObjectI_PT.hh" relativeURI="src/com__lhs__ccb__soi__ServiceObjectI_PT.hh"/> + <FileResource projectRelativePath="src/com__lhs__ccb__soi__ServiceObjectI_portType.ttcn" relativeURI="src/com__lhs__ccb__soi__ServiceObjectI_portType.ttcn"/> + <FileResource projectRelativePath="src/com__lhs__ccb__soi__ServiceRootI.ttcn" relativeURI="src/com__lhs__ccb__soi__ServiceRootI.ttcn"/> + <FileResource projectRelativePath="src/com__lhs__ccb__soi__ServiceRootI_PT.cc" relativeURI="src/com__lhs__ccb__soi__ServiceRootI_PT.cc"/> + <FileResource projectRelativePath="src/com__lhs__ccb__soi__ServiceRootI_PT.hh" relativeURI="src/com__lhs__ccb__soi__ServiceRootI_PT.hh"/> + <FileResource projectRelativePath="src/com__lhs__ccb__soi__ServiceRootI_portType.ttcn" relativeURI="src/com__lhs__ccb__soi__ServiceRootI_portType.ttcn"/> + <FileResource projectRelativePath="src/com__lhs__ccb__soi__XMLServiceFactoryI.ttcn" relativeURI="src/com__lhs__ccb__soi__XMLServiceFactoryI.ttcn"/> + <FileResource projectRelativePath="src/com__lhs__ccb__soi__XMLServiceFactoryI_PT.cc" relativeURI="src/com__lhs__ccb__soi__XMLServiceFactoryI_PT.cc"/> + <FileResource projectRelativePath="src/com__lhs__ccb__soi__XMLServiceFactoryI_PT.hh" relativeURI="src/com__lhs__ccb__soi__XMLServiceFactoryI_PT.hh"/> + <FileResource projectRelativePath="src/com__lhs__ccb__soi__XMLServiceFactoryI_portType.ttcn" relativeURI="src/com__lhs__ccb__soi__XMLServiceFactoryI_portType.ttcn"/> + <FileResource projectRelativePath="src/com__lhs__ccb__soi__types.ttcn" relativeURI="src/com__lhs__ccb__soi__types.ttcn"/> + <FileResource projectRelativePath="src/com__lhs__ccb__soi__types_Converter.cc" relativeURI="src/com__lhs__ccb__soi__types_Converter.cc"/> + <FileResource projectRelativePath="src/com__lhs__ccb__soi__types_Converter.hh" relativeURI="src/com__lhs__ccb__soi__types_Converter.hh"/> + <FileResource projectRelativePath="src/soi_test.hh" relativeURI="src/soi_test.hh"/> + <FileResource projectRelativePath="src/soi_test.idl" relativeURI="src/soi_test.idl"/> + <FileResource projectRelativePath="src/soi_testDynSK.cc" relativeURI="src/soi_testDynSK.cc"/> + <FileResource projectRelativePath="src/soi_testSK.cc" relativeURI="src/soi_testSK.cc"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/ECMS_CORBAmsg_CNL113687</targetExecutable> + <preprocessorIncludes> + <listItem>[OMNIORB4_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>omniORB4</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OMNIORB4_DIR]/lib</listItem> + </linkerLibrarySearchPath> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FileProperties> + <FileResource> + <FilePath>src/Makefile</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_BICC_CNL113711.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_BICC_CNL113711.tpd new file mode 100644 index 000000000..a616f008e --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_BICC_CNL113711.tpd @@ -0,0 +1,61 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: EPTF_Applib_BICC_CNL113711.tpd + Description: tpd project file + Rev: R1A03 + Prodnr: CNL 113 711 + Updated: 2012-10-01 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_Applib_BICC_CNL113711</ProjectName> + <ReferencedProjects> + <ReferencedProject name="BICC_ANSI_CNL113397" projectLocationURI="../../ProtocolModules/BICC_ANSI_CNL113397/BICC_ANSI_CNL113397.tpd"/> + <ReferencedProject name="BICC_Q.1902.1_CNL113359" projectLocationURI="../../ProtocolModules/BICC_Q.1902.1_CNL113359/BICC_Q.1902.1_CNL113359.tpd"/> + <ReferencedProject name="BICC_TTC_CNL113416" projectLocationURI="../../ProtocolModules/BICC_TTC_CNL113416/BICC_TTC_CNL113416.tpd"/> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Common/EPTF_CLL_Common.tpd"/> + <ReferencedProject name="EPTF_CLL_FreeBusyQueue" projectLocationURI="../EPTF_Core_Library_CNL113512/src/FreeBusyQueue/EPTF_CLL_FBQ.tpd"/> + <ReferencedProject name="EPTF_CLL_StatMeasure" projectLocationURI="../EPTF_Core_Library_CNL113512/src/StatMeasure/EPTF_CLL_StatMeasure.tpd"/> + <ReferencedProject name="EPTF_CommonTransport_M3_CNL113682" projectLocationURI="../EPTF_CommonTransport_M3_CNL113682/EPTF_CommonTransport_M3_CNL113682.tpd"/> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../../ProtocolModules/COMMON/ProtocolModules_Common.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_BICC_Common_Functions.ttcn" relativeURI="src/LoadGen/EPTF_BICC_Common_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_BICC_LGen_Stat_Functions.ttcn" relativeURI="src/LoadGen/EPTF_BICC_LGen_Stat_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_BICC_LGen_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_BICC_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_BICC_LGen_Functions.ttcn" relativeURI="src/LoadGen/EPTF_BICC_LGen_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_BICC_LGen_ITU_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_BICC_LGen_ITU_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_BICC_LGen_ITU_Functions.ttcn" relativeURI="src/LoadGen/EPTF_BICC_LGen_ITU_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_BICC_LGen_ANSI_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_BICC_LGen_ANSI_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_BICC_LGen_ANSI_Functions.ttcn" relativeURI="src/LoadGen/EPTF_BICC_LGen_ANSI_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_BICC_LGen_TTC_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_BICC_LGen_TTC_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_BICC_LGen_TCC_Functions.ttcn" relativeURI="src/LoadGen/EPTF_BICC_LGen_TTC_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_BICC_Logging_Definitions.ttcn" relativeURI="src/Logger/EPTF_BICC_Logging_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_BICC_Logging_Functions.ttcn" relativeURI="src/Logger/EPTF_BICC_Logging_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_Applib_BICC_CNL113711</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_BSSMAP_CNL113608.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_BSSMAP_CNL113608.tpd new file mode 100644 index 000000000..f785fcdb9 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_BSSMAP_CNL113608.tpd @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: EPTF_Applib_BSSMAP_CNL113608.tpd + Description: tpd project file + Rev: R1A06 + Prodnr: CNL 113 608 + Updated: 2013-01-25 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_Applib_BSSMAP_CNL113608</ProjectName> + <ReferencedProjects> + <ReferencedProject name="BSSMAP_v8.6.0_CNL113655" projectLocationURI="../../ProtocolModules/BSSMAP_v8.6.0_CNL113655/BSSMAP_v8.6.0_CNL113655.tpd"/> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Common/EPTF_CLL_Common.tpd"/> + <ReferencedProject name="EPTF_CLL_FreeBusyQueue" projectLocationURI="../EPTF_Core_Library_CNL113512/src/FreeBusyQueue/EPTF_CLL_FBQ.tpd"/> + <ReferencedProject name="EPTF_CLL_StatMeasure" projectLocationURI="../EPTF_Core_Library_CNL113512/src/StatMeasure/EPTF_CLL_StatMeasure.tpd"/> + <ReferencedProject name="EPTF_CommonTransport_SCCP_CNL113610" projectLocationURI="../EPTF_CommonTransport_SCCP_CNL113610/EPTF_CommonTransport_SCCP_CNL113610.tpd"/> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../../ProtocolModules/COMMON/ProtocolModules_Common.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_BSSMAP_LGen_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_BSSMAP_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_BSSMAP_LGen_Functions.ttcn" relativeURI="src/LoadGen/EPTF_BSSMAP_LGen_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_BSSMAP_LGen_UserExtension_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_BSSMAP_LGen_UserExtension_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_BSSMAP_LGen_UserExtension_Functions.ttcn" relativeURI="src/LoadGen/EPTF_BSSMAP_LGen_UserExtension_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_BSSMAP_Logging_Definitions.ttcn" relativeURI="src/Logger/EPTF_BSSMAP_Logging_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_BSSMAP_Logging_Functions.ttcn" relativeURI="src/Logger/EPTF_BSSMAP_Logging_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_Applib_BSSMAP_CNL113608</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_CAI3G_CNL113566.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_CAI3G_CNL113566.tpd new file mode 100644 index 000000000..6251869c4 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_CAI3G_CNL113566.tpd @@ -0,0 +1,63 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: EPTF_Applib_CAI3G_CNL113566.tpd + Description: tpd project file + Rev: R7B01 + Prodnr: CNL 113 566 + Updated: 2013-02-21 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_Applib_CAI3G_CNL113566</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Common/EPTF_CLL_Common.tpd"/> + <ReferencedProject name="EPTF_CLL_FreeBusyQueue" projectLocationURI="../EPTF_Core_Library_CNL113512/src/FreeBusyQueue/EPTF_CLL_FBQ.tpd"/> + <ReferencedProject name="EPTF_CLL_LGenBase" projectLocationURI="../EPTF_Core_Library_CNL113512/src/LGenBase/EPTF_CLL_LGenBase.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Logging/EPTF_CLL_Logging.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging_UI" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Logging/EPTF_CLL_Logging_UI.tpd"/> + <ReferencedProject name="EPTF_CLL_Scheduler" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Scheduler/EPTF_CLL_Scheduler.tpd"/> + <ReferencedProject name="EPTF_CLL_Transport_CommPortIPL4" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_Transport_CommPortIPL4.tpd"/> + <ReferencedProject name="EPTF_CLL_TransportRouting" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_TransportRouting.tpd"/> + <ReferencedProject name="EPTF_CLL_UIHandler" projectLocationURI="../EPTF_Core_Library_CNL113512/src/UIHandler/EPTF_CLL_UIHandler.tpd"/> + <ReferencedProject name="EPTF_CLL_Variable" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Variable/EPTF_CLL_Variable.tpd"/> + <ReferencedProject name="HTTPmsg_CNL113312" projectLocationURI="../../TestPorts/HTTPmsg_CNL113312/HTTPmsg_CNL113312.tpd"/> + <ReferencedProject name="IPL4asp_CNL113531" projectLocationURI="../../TestPorts/IPL4asp_CNL113531/IPL4asp_CNL113531.tpd"/> + <ReferencedProject name="TCCUsefulFunctions_CNL113472_TitanSim" projectLocationURI="../TCCUsefulFunctions_CNL113472/TCCUsefulFunctions_CNL113472_TitanSim.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging_Server" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Logging/EPTF_CLL_Logging_Server.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_CAI3G_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_CAI3G_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CAI3G_Functions.ttcn" relativeURI="src/LoadGen/EPTF_CAI3G_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CAI3G_Logger_Definitions.ttcn" relativeURI="src/Logger/EPTF_CAI3G_Logger_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CAI3G_Logger_Functions.ttcn" relativeURI="src/Logger/EPTF_CAI3G_Logger_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CAI3G_Templates.ttcn" relativeURI="src/LoadGen/EPTF_CAI3G_Templates.ttcn"/> + <FileResource projectRelativePath="EPTF_CAI3G_Transport_Definitions.ttcn" relativeURI="src/Transport/EPTF_CAI3G_Transport_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CAI3G_Transport_ExternalFunctions.cc" relativeURI="src/Transport/EPTF_CAI3G_Transport_ExternalFunctions.cc"/> + <FileResource projectRelativePath="EPTF_CAI3G_Transport_Functions.ttcn" relativeURI="src/Transport/EPTF_CAI3G_Transport_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_Applib_CAI3G_CNL113566</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_CAP_CNL113662.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_CAP_CNL113662.tpd new file mode 100644 index 000000000..ee2d2b274 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_CAP_CNL113662.tpd @@ -0,0 +1,54 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: EPTF_Applib_CAP_CNL113662.tpd + Description: tpd project file + Rev: R6C02 + Prodnr: CNL 113 662 + Updated: 2012-05-25 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_Applib_CAP_CNL113662</ProjectName> + <ReferencedProjects> + <ReferencedProject name="CAP_v2_v6.4.0_CNL113483" projectLocationURI="../../ProtocolModules/CAP_v2_v6.4.0_CNL113483/CAP_v2_v6.4.0_CNL113483.tpd"/> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Common/EPTF_CLL_Common.tpd"/> + <ReferencedProject name="EPTF_CLL_DataSource" projectLocationURI="../EPTF_Core_Library_CNL113512/src/DataSource/EPTF_CLL_DataSource.tpd"/> + <ReferencedProject name="EPTF_CLL_FreeBusyQueue" projectLocationURI="../EPTF_Core_Library_CNL113512/src/FreeBusyQueue/EPTF_CLL_FBQ.tpd"/> + <ReferencedProject name="EPTF_CLL_StatMeasure" projectLocationURI="../EPTF_Core_Library_CNL113512/src/StatMeasure/EPTF_CLL_StatMeasure.tpd"/> + <ReferencedProject name="EPTF_CommonTransport_TCAP_CNL113592" projectLocationURI="../EPTF_CommonTransport_TCAP_CNL113592/EPTF_CommonTransport_TCAP_CNL113592.tpd"/> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../../ProtocolModules/COMMON/ProtocolModules_Common.tpd"/> + <ReferencedProject name="ROSE_CNL113369" projectLocationURI="../../ProtocolModules/ROSE_CNL113369/ROSE_CNL113369.tpd"/> + <ReferencedProject name="TCAPasp_CNL113349" projectLocationURI="../../TestPorts/TCAPasp_CNL113349/TCAPasp_CNL113349.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_CAP_Common_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_CAP_Common_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CAP_Common_Functions.ttcn" relativeURI="src/LoadGen/EPTF_CAP_Common_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CAPv2_LGen_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_CAPv2_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CAPv2_LGen_Functions.ttcn" relativeURI="src/LoadGen/EPTF_CAPv2_LGen_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_Applib_CAP_CNL113662</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_CAP_Common_CNL113662.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_CAP_Common_CNL113662.tpd new file mode 100644 index 000000000..3ef5b6b10 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_CAP_Common_CNL113662.tpd @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: EPTF_Applib_CAP_Common_CNL113662.tpd + Description: tpd project file + Rev: R7B01 + Prodnr: CNL 113 662 + Updated: 2013-01-30 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_Applib_CAP_Common_CNL113662</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Base" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Base/EPTF_CLL_Base.tpd"/> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Common/EPTF_CLL_Common.tpd"/> + <ReferencedProject name="EPTF_CLL_DataSource" projectLocationURI="../EPTF_Core_Library_CNL113512/src/DataSource/EPTF_CLL_DataSource.tpd"/> + <ReferencedProject name="EPTF_CLL_FreeBusyQueue" projectLocationURI="../EPTF_Core_Library_CNL113512/src/FreeBusyQueue/EPTF_CLL_FBQ.tpd"/> + <ReferencedProject name="EPTF_CLL_HashMap" projectLocationURI="../EPTF_Core_Library_CNL113512/src/HashMap/EPTF_CLL_HashMap.tpd"/> + <ReferencedProject name="EPTF_CLL_StatMeasure" projectLocationURI="../EPTF_Core_Library_CNL113512/src/StatMeasure/EPTF_CLL_StatMeasure.tpd"/> + <ReferencedProject name="EPTF_CommonTransport_TCAP_CNL113592" projectLocationURI="../EPTF_CommonTransport_TCAP_CNL113592/EPTF_CommonTransport_TCAP_CNL113592.tpd"/> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../../ProtocolModules/COMMON/ProtocolModules_Common.tpd"/> + <ReferencedProject name="ROSE_CNL113369" projectLocationURI="../../ProtocolModules/ROSE_CNL113369/ROSE_CNL113369.tpd"/> + <ReferencedProject name="TCAPasp_CNL113349" projectLocationURI="../../TestPorts/TCAPasp_CNL113349/TCAPasp_CNL113349.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_CAP_Common_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_CAP_Common_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CAP_Common_Functions.ttcn" relativeURI="src/LoadGen/EPTF_CAP_Common_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_Applib_CAP_CNL113662</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_CAP_v2_CNL113662.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_CAP_v2_CNL113662.tpd new file mode 100644 index 000000000..6fcc294f8 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_CAP_v2_CNL113662.tpd @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: EPTF_Applib_CAP_v2_CNL113662.tpd + Description: tpd project file + Rev: R7B01 + Prodnr: CNL 113 662 + Updated: 2013-01-30 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_Applib_CAP_v2_CNL113662</ProjectName> + <ReferencedProjects> + <ReferencedProject name="CAP_v2_v6.4.0_CNL113483" projectLocationURI="../../ProtocolModules/CAP_v2_v6.4.0_CNL113483/CAP_v2_v6.4.0_CNL113483.tpd"/> + <ReferencedProject name="EPTF_Applib_CAP_Common_CNL113662" projectLocationURI="EPTF_Applib_CAP_Common_CNL113662.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_CAPv2_LGen_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_CAPv2_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CAPv2_LGen_Functions.ttcn" relativeURI="src/LoadGen/EPTF_CAPv2_LGen_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_Applib_CAP_v2_CNL113662</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_CAP_v3_CNL113662.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_CAP_v3_CNL113662.tpd new file mode 100644 index 000000000..b14d559d3 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_CAP_v3_CNL113662.tpd @@ -0,0 +1,46 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: EPTF_Applib_CAP_v3_CNL113662.tpd + Description: tpd project file + Rev: R7B01 + Prodnr: CNL 113 662 + Updated: 2013-01-30 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_Applib_CAP_v3_CNL113662</ProjectName> + <ReferencedProjects> + <ReferencedProject name="CAP_v4.7.0_CNL113425" projectLocationURI="../../ProtocolModules/CAP_v4.7.0_CNL113425/CAP_v4.7.0_CNL113425.tpd"/> + <ReferencedProject name="EPTF_Applib_CAP_Common_CNL113662" projectLocationURI="EPTF_Applib_CAP_Common_CNL113662.tpd"/> + <ReferencedProject name="Ericsson_INAP_CS1plus_CNL113356" projectLocationURI="../../ProtocolModules/Ericsson_INAP_CS1plus_CNL113356/Ericsson_INAP_CS1plus_CNL113356.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_CAPv3_LGen_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_CAPv3_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CAPv3_LGen_Functions.ttcn" relativeURI="src/LoadGen/EPTF_CAPv3_LGen_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_Applib_CAP_v3_CNL113662</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_CAP_v4_CNL113662.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_CAP_v4_CNL113662.tpd new file mode 100644 index 000000000..48c036d4a --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_CAP_v4_CNL113662.tpd @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: EPTF_Applib_CAP_v4_CNL113662.tpd + Description: tpd project file + Rev: R7B01 + Prodnr: CNL 113 662 + Updated: 2013-01-30 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_Applib_CAP_v4_CNL113662</ProjectName> + <ReferencedProjects> + <ReferencedProject name="CAP_v4_v7.6.0_CNL113721" projectLocationURI="../../ProtocolModules/CAP_v4_v7.6.0_CNL113721/CAP_v4_v7.6.0_CNL113721.tpd"/> + <ReferencedProject name="EPTF_Applib_CAP_Common_CNL113662" projectLocationURI="EPTF_Applib_CAP_Common_CNL113662.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_CAPv4_LGen_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_CAPv4_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CAPv4_LGen_Functions.ttcn" relativeURI="src/LoadGen/EPTF_CAPv4_LGen_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_Applib_CAP_v4_CNL113662</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_CAP_v4_v760_CNL113662.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_CAP_v4_v760_CNL113662.tpd new file mode 100644 index 000000000..605c3e7c5 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_CAP_v4_v760_CNL113662.tpd @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: EPTF_Applib_CAP_v4_v760_CNL113662.tpd + Description: tpd project file + Rev: R7B01 + Prodnr: CNL 113 662 + Updated: 2013-01-30 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_Applib_CAP_v4_CNL113662</ProjectName> + <ReferencedProjects> + <ReferencedProject name="CAP_v4_v7.6.0_CNL113721" projectLocationURI="../../ProtocolModules/CAP_v4_v7.6.0_CNL113721/CAP_v4_v7.6.0_CNL113721.tpd"/> + <ReferencedProject name="EPTF_Applib_CAP_Common_CNL113662" projectLocationURI="EPTF_Applib_CAP_Common_CNL113662.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_CAPv4_LGen_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_CAPv4_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CAPv4_LGen_Functions.ttcn" relativeURI="src/LoadGen/EPTF_CAPv4_LGen_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_Applib_CAP_v4_CNL113662</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_CIP_All_CNL113666.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_CIP_All_CNL113666.tpd new file mode 100644 index 000000000..19d4e14ac --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_CIP_All_CNL113666.tpd @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: EPTF_Applib_CIP_All_CNL113666.tpd + Description: tpd project file + Rev: R5C02 + Prodnr: CNL 113 666 + Updated: 2012-11-29 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_Applib_CIP_All_CNL113666</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_Applib_CIP_CNL113666" projectLocationURI="EPTF_Applib_CIP_CNL113666.tpd"/> + <ReferencedProject name="EPTF_Applib_CIP_Orga_CNL113666" projectLocationURI="EPTF_Applib_CIP_Orga_CNL113666.tpd"/> + </ReferencedProjects> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_Applib_CIP_All_CNL113666</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_CIP_CNL113666.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_CIP_CNL113666.tpd new file mode 100644 index 000000000..cfa6c173b --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_CIP_CNL113666.tpd @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: EPTF_Applib_CIP_CNL113666.tpd + Description: tpd project file + Rev: R5C02 + Prodnr: CNL 113 666 + Updated: 2012-11-29 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_Applib_CIP_CNL113666</ProjectName> + <ReferencedProjects> + <ReferencedProject name="CIP_CS4.0_CNL113535" projectLocationURI="../../ProtocolModules/CIP_CS4.0_CNL113535/CIP_CS4.0_CNL113535.tpd"/> + <ReferencedProject name="EPTF_CLL_ExecCtrl" projectLocationURI="../EPTF_Core_Library_CNL113512/src/ExecCtrl/EPTF_CLL_ExecCtrl.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="Logger" relativeURI="src/Logger"/> + </Folders> + <Files> + <FileResource projectRelativePath="EPTF_CIP_LGen_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_CIP_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CIP_LGen_Functions.ttcn" relativeURI="src/LoadGen/EPTF_CIP_LGen_Functions.ttcn"/> + <FileResource projectRelativePath="Logger/EPTF_CIP_Logger.grp" relativeURI="src/Logger/EPTF_CIP_Logger.grp"/> + <FileResource projectRelativePath="Logger/EPTF_CIP_Logger_Definitions.ttcn" relativeURI="src/Logger/EPTF_CIP_Logger_Definitions.ttcn"/> + <FileResource projectRelativePath="Logger/EPTF_CIP_Logger_Functions.ttcn" relativeURI="src/Logger/EPTF_CIP_Logger_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_Applib_CIP_CNL113666</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_CIP_Orga_CNL113666.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_CIP_Orga_CNL113666.tpd new file mode 100644 index 000000000..d2e1d82e8 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_CIP_Orga_CNL113666.tpd @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: EPTF_Applib_CIP_Orga_CNL113666.tpd + Description: tpd project file + Rev: R5C02 + Prodnr: CNL 113 666 + Updated: 2012-11-29 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_Applib_CIP_Orga_CNL113666</ProjectName> + <ReferencedProjects> + <ReferencedProject name="CIP_Orga_Italy_CNL113701" projectLocationURI="../../ProtocolModules/CIP_Orga_Italy_CNL113701/CIP_Orga_Italy_CNL113701.tpd"/> + <ReferencedProject name="EPTF_CLL_ExecCtrl" projectLocationURI="../EPTF_Core_Library_CNL113512/src/ExecCtrl/EPTF_CLL_ExecCtrl.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_CIP_Orga_LGen_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_CIP_Orga_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CIP_Orga_LGen_Functions.ttcn" relativeURI="src/LoadGen/EPTF_CIP_Orga_LGen_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_Applib_CIP_LGen_CNL113666</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_DNS_CNL113597.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_DNS_CNL113597.tpd new file mode 100644 index 000000000..e4b46694a --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_DNS_CNL113597.tpd @@ -0,0 +1,118 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: EPTF_Applib_DNS_CNL113597.tpd + Description: tpd project file + Rev: R3A01 + Prodnr: CNL 113 597 + Updated: 2012-03-06 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_Applib_DNS_CNL113597</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Base" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Base/EPTF_CLL_Base.tpd"/> + <ReferencedProject name="EPTF_CLL_FreeBusyQueue" projectLocationURI="../EPTF_Core_Library_CNL113512/src/FreeBusyQueue/EPTF_CLL_FBQ.tpd"/> + <ReferencedProject name="EPTF_CLL_HashMap" projectLocationURI="../EPTF_Core_Library_CNL113512/src/HashMap/EPTF_CLL_HashMap.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Logging/EPTF_CLL_Logging.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging_UI" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Logging/EPTF_CLL_Logging_UI.tpd"/> + <ReferencedProject name="EPTF_CLL_Transport_CommPortIPL4" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_Transport_CommPortIPL4.tpd"/> + <ReferencedProject name="EPTF_CLL_Transport_MessageBufferManager" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_Transport_MessageBufferManager.tpd"/> + <ReferencedProject name="EPTF_CLL_TransportRouting" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_TransportRouting.tpd"/> + <ReferencedProject name="EPTF_CLL_RedBlackTree" projectLocationURI="../EPTF_Core_Library_CNL113512/src/RedBlackTree/EPTF_CLL_RedBlackTree.tpd"/> + <ReferencedProject name="EPTF_CLL_Scheduler" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Scheduler/EPTF_CLL_Scheduler.tpd"/> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Common/EPTF_CLL_Common.tpd"/> + <ReferencedProject name="EPTF_CLL_StatMeasure" projectLocationURI="../EPTF_Core_Library_CNL113512/src/StatMeasure/EPTF_CLL_StatMeasure.tpd"/> + <ReferencedProject name="EPTF_CLL_Variable" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Variable/EPTF_CLL_Variable.tpd"/> + <ReferencedProject name="EPTF_CLL_RandomNArray" projectLocationURI="../EPTF_Core_Library_CNL113512/src/RandomNArray/EPTF_CLL_RandomNArray.tpd"/> + <ReferencedProject name="EPTF_CLL_StatHandler" projectLocationURI="../EPTF_Core_Library_CNL113512/src/StatHandler/EPTF_CLL_StatHandler.tpd"/> + <ReferencedProject name="EPTF_CLL_Semaphore" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Semaphore/EPTF_CLL_Semaphore.tpd"/> + <ReferencedProject name="EPTF_CLL_LGenBase" projectLocationURI="../EPTF_Core_Library_CNL113512/src/LGenBase/EPTF_CLL_LGenBase.tpd"/> + <ReferencedProject name="EPTF_CLL_UIHandler" projectLocationURI="../EPTF_Core_Library_CNL113512/src/UIHandler/EPTF_CLL_UIHandler.tpd"/> + <ReferencedProject name="TELNETasp_CNL113320" projectLocationURI="../../TestPorts/TELNETasp_CNL113320/TELNETasp_CNL113320.tpd"/> + <ReferencedProject name="UDPasp_CNL113346" projectLocationURI="../../TestPorts/UDPasp_CNL113346/UDPasp_CNL113346.tpd"/> + <ReferencedProject name="IPL4asp_CNL113531" projectLocationURI="../../TestPorts/IPL4asp_CNL113531/IPL4asp_CNL113531.tpd"/> + <ReferencedProject name="XTDPasp_CNL113494" projectLocationURI="../../TestPorts/XTDPasp_CNL113494/XTDPasp_CNL113494.tpd"/> + <ReferencedProject name="Abstract_Socket_CNL113384" projectLocationURI="../../TestPorts/Common_Components/Abstract_Socket_CNL113384/Abstract_Socket_CNL113384.tpd"/> + <ReferencedProject name="DNS_CNL113429" projectLocationURI="../../ProtocolModules/DNS_CNL113429/DNS_CNL113429.tpd"/> + <ReferencedProject name="XSDASN_CNL113474" projectLocationURI="../../ProtocolModules/XSDASN_CNL113474/XSDASN_CNL113474.tpd"/> + <ReferencedProject name="TCCUsefulFunctions_CNL113472_TitanSim" projectLocationURI="../TCCUsefulFunctions_CNL113472/TCCUsefulFunctions_CNL113472_TitanSim.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging_Server" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Logging/EPTF_CLL_Logging_Server.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="doc/apidoc" relativeURI="doc/apidoc"/> + <FolderResource projectRelativePath="doc/apidoc/files" relativeURI="doc/apidoc/files"/> + <FolderResource projectRelativePath="doc/apidoc/files/LoadGen" relativeURI="doc/apidoc/files/LoadGen"/> + <FolderResource projectRelativePath="doc/apidoc/files/Logger" relativeURI="doc/apidoc/files/Logger"/> + <FolderResource projectRelativePath="doc/apidoc/files/Transport" relativeURI="doc/apidoc/files/Transport"/> + <FolderResource projectRelativePath="doc/apidoc/index" relativeURI="doc/apidoc/index"/> + <FolderResource projectRelativePath="doc/apidoc/javascript" relativeURI="doc/apidoc/javascript"/> + <FolderResource projectRelativePath="doc/apidoc/styles" relativeURI="doc/apidoc/styles"/> + </Folders> + <Files> + <FileResource projectRelativePath="EPTF_DNS_LGen_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_DNS_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_DNS_LGen_Functions.ttcn" relativeURI="src/LoadGen/EPTF_DNS_LGen_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_DNS_Logger_Definitions.ttcn" relativeURI="src/Logger/EPTF_DNS_Logger_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_DNS_Logger_Functions.ttcn" relativeURI="src/Logger/EPTF_DNS_Logger_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_DNS_Transport_Definitions.ttcn" relativeURI="src/Transport/EPTF_DNS_Transport_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_DNS_Transport_Functions.ttcn" relativeURI="src/Transport/EPTF_DNS_Transport_Functions.ttcn"/> + <FileResource projectRelativePath="doc/EPTF_Applib_DNS_CNL113597_FS.pdf" relativeURI="doc/EPTF_Applib_DNS_CNL113597_FS.pdf"/> + <FileResource projectRelativePath="doc/EPTF_Applib_DNS_CNL113597_PRI.pdf" relativeURI="doc/EPTF_Applib_DNS_CNL113597_PRI.pdf"/> + <FileResource projectRelativePath="doc/EPTF_Applib_DNS_CNL113597_UG.pdf" relativeURI="doc/EPTF_Applib_DNS_CNL113597_UG.pdf"/> + <FileResource projectRelativePath="doc/apidoc/Menu.txt" relativeURI="doc/apidoc/Menu.txt"/> + <FileResource projectRelativePath="doc/apidoc/files/LoadGen/EPTF_DNS_LGen_Definitions-ttcn.html" relativeURI="doc/apidoc/files/LoadGen/EPTF_DNS_LGen_Definitions-ttcn.html"/> + <FileResource projectRelativePath="doc/apidoc/files/LoadGen/EPTF_DNS_LGen_Functions-ttcn.html" relativeURI="doc/apidoc/files/LoadGen/EPTF_DNS_LGen_Functions-ttcn.html"/> + <FileResource projectRelativePath="doc/apidoc/files/Logger/EPTF_DNS_Logger_Definitions-ttcn.html" relativeURI="doc/apidoc/files/Logger/EPTF_DNS_Logger_Definitions-ttcn.html"/> + <FileResource projectRelativePath="doc/apidoc/files/Logger/EPTF_DNS_Logger_Functions-ttcn.html" relativeURI="doc/apidoc/files/Logger/EPTF_DNS_Logger_Functions-ttcn.html"/> + <FileResource projectRelativePath="doc/apidoc/files/Transport/EPTF_DNS_Transport_Definitions-ttcn.html" relativeURI="doc/apidoc/files/Transport/EPTF_DNS_Transport_Definitions-ttcn.html"/> + <FileResource projectRelativePath="doc/apidoc/files/Transport/EPTF_DNS_Transport_Functions-ttcn.html" relativeURI="doc/apidoc/files/Transport/EPTF_DNS_Transport_Functions-ttcn.html"/> + <FileResource projectRelativePath="doc/apidoc/index.html" relativeURI="doc/apidoc/index.html"/> + <FileResource projectRelativePath="doc/apidoc/index/Altsteps.html" relativeURI="doc/apidoc/index/Altsteps.html"/> + <FileResource projectRelativePath="doc/apidoc/index/Constants.html" relativeURI="doc/apidoc/index/Constants.html"/> + <FileResource projectRelativePath="doc/apidoc/index/Files.html" relativeURI="doc/apidoc/index/Files.html"/> + <FileResource projectRelativePath="doc/apidoc/index/Functions.html" relativeURI="doc/apidoc/index/Functions.html"/> + <FileResource projectRelativePath="doc/apidoc/index/General.html" relativeURI="doc/apidoc/index/General.html"/> + <FileResource projectRelativePath="doc/apidoc/index/General2.html" relativeURI="doc/apidoc/index/General2.html"/> + <FileResource projectRelativePath="doc/apidoc/index/General3.html" relativeURI="doc/apidoc/index/General3.html"/> + <FileResource projectRelativePath="doc/apidoc/index/Types.html" relativeURI="doc/apidoc/index/Types.html"/> + <FileResource projectRelativePath="doc/apidoc/javascript/main.js" relativeURI="doc/apidoc/javascript/main.js"/> + <FileResource projectRelativePath="doc/apidoc/menu.html" relativeURI="doc/apidoc/menu.html"/> + <FileResource projectRelativePath="doc/apidoc/styles/1.css" relativeURI="doc/apidoc/styles/1.css"/> + <FileResource projectRelativePath="doc/apidoc/styles/2.css" relativeURI="doc/apidoc/styles/2.css"/> + <FileResource projectRelativePath="doc/apidoc/styles/main.css" relativeURI="doc/apidoc/styles/main.css"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_Applib_DNS_CNL113597</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_DSS1_CNL113748.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_DSS1_CNL113748.tpd new file mode 100644 index 000000000..a5afc7a72 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_DSS1_CNL113748.tpd @@ -0,0 +1,63 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: EPTF_Applib_DSS1_CNL113748.tpd + Description: tpd project file + Rev: R1A01 + Prodnr: CNL 113 748 + Updated: 2012-10-01 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_Applib_DSS1_CNL113748</ProjectName> + <ReferencedProjects> + <ReferencedProject name="DSS1_ETSI_CNL113435" projectLocationURI="../../ProtocolModules/DSS1_ETSI_CNL113435/DSS1_ETSI_CNL113435.tpd"/> + <ReferencedProject name="EPTF_Applib_IUA_CNL113747" projectLocationURI="../EPTF_Applib_IUA_CNL113747/EPTF_Applib_IUA_CNL113747.tpd"/> + <ReferencedProject name="EPTF_CLL_ExecCtrl" projectLocationURI="../EPTF_Core_Library_CNL113512/src/ExecCtrl/EPTF_CLL_ExecCtrl.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="src" relativeURI="src"/> + <FolderResource projectRelativePath="src/LoadGen" relativeURI="src/LoadGen"/> + <FolderResource projectRelativePath="src/Logger" relativeURI="src/Logger"/> + </Folders> + <Files> + <FileResource projectRelativePath="src/EPTF_Applib_DSS1.grp" relativeURI="src/EPTF_Applib_DSS1.grp"/> + <FileResource projectRelativePath="src/LoadGen/EPTF_DSS1_LGen_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_DSS1_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="src/LoadGen/EPTF_DSS1_LGen_Functions.ttcn" relativeURI="src/LoadGen/EPTF_DSS1_LGen_Functions.ttcn"/> + <FileResource projectRelativePath="src/LoadGen/EPTF_DSS1_LGen_Stat_Functions.ttcn" relativeURI="src/LoadGen/EPTF_DSS1_LGen_Stat_Functions.ttcn"/> + <FileResource projectRelativePath="src/Logger/EPTF_DSS1_Logging_Definitions.ttcn" relativeURI="src/Logger/EPTF_DSS1_Logging_Definitions.ttcn"/> + <FileResource projectRelativePath="src/Logger/EPTF_DSS1_Logging_Functions.ttcn" relativeURI="src/Logger/EPTF_DSS1_Logging_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_Applib_DSS1_CNL113748</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_Diameter_CNL113521.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_Diameter_CNL113521.tpd new file mode 100644 index 000000000..8f922fd54 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_Diameter_CNL113521.tpd @@ -0,0 +1,93 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: EPTF_Applib_Diameter_CNL113521.tpd + Description: tpd project file + Rev: R15A04 + Prodnr: CNL 113 521 + Updated: 2013-04-04 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_Applib_Diameter_CNL113521</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EAP_CNL113722" projectLocationURI="../../ProtocolModules/EAP_CNL113722/EAP_CNL113722.tpd"/> + <ReferencedProject name="EPTF_CLL_ExecCtrl" projectLocationURI="../EPTF_Core_Library_CNL113512/src/ExecCtrl/EPTF_CLL_ExecCtrl.tpd"/> + <ReferencedProject name="EPTF_CLL_LGenBase" projectLocationURI="../EPTF_Core_Library_CNL113512/src/LGenBase/EPTF_CLL_LGenBase.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Logging/EPTF_CLL_Logging.tpd"/> + <ReferencedProject name="EPTF_CLL_Transport" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_Transport.tpd"/> + <ReferencedProject name="EPTF_CLL_Transport_Common" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_Transport_Common.tpd"/> + <ReferencedProject name="EPTF_CLL_Transport_CommPortIPL4" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_Transport_CommPortIPL4.tpd"/> + <ReferencedProject name="EPTF_CLL_TransportRouting" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_TransportRouting.tpd"/> + <ReferencedProject name="EPTF_CLL_UIHandler" projectLocationURI="../EPTF_Core_Library_CNL113512/src/UIHandler/EPTF_CLL_UIHandler.tpd"/> + <ReferencedProject name="EPTF_CLL_Variable" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Variable/EPTF_CLL_Variable.tpd"/> + <ReferencedProject name="IP_CNL113418" projectLocationURI="../../ProtocolModules/IP_CNL113418/IP_CNL113418.tpd"/> + <ReferencedProject name="TCCUsefulFunctions_CNL113472_Security" projectLocationURI="../TCCUsefulFunctions_CNL113472/TCCUsefulFunctions_CNL113472_Security.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="DIAMETER_EncDec.cc" relativeURI="demo/DIAMETER_EncDec.cc"/> + <FileResource projectRelativePath="DIAMETER_Types.ttcn" relativeURI="demo/DIAMETER_Types.ttcn"/> + <FileResource projectRelativePath="EPTF_Diameter3gppRx_LGen_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_Diameter3gppRx_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_Diameter3gppRx_LGen_Functions.ttcn" relativeURI="src/LoadGen/EPTF_Diameter3gppRx_LGen_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_Diameter3gppSh_LGen_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_Diameter3gppSh_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_Diameter3gppSh_LGen_Functions.ttcnpp" relativeURI="src/LoadGen/EPTF_Diameter3gppSh_LGen_Functions.ttcnpp"/> + <FileResource projectRelativePath="EPTF_DiameterAAA_LGen_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_DiameterAAA_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_DiameterAAA_LGen_Functions.ttcn" relativeURI="src/LoadGen/EPTF_DiameterAAA_LGen_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_DiameterA_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_DiameterA_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_DiameterA_Functions.ttcn" relativeURI="src/LoadGen/EPTF_DiameterA_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_DiameterBase_LGen_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_DiameterBase_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_DiameterBase_LGen_Functions.ttcnpp" relativeURI="src/LoadGen/EPTF_DiameterBase_LGen_Functions.ttcnpp"/> + <FileResource projectRelativePath="EPTF_DiameterCC_LGen_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_DiameterCC_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_DiameterCC_LGen_Functions.ttcn" relativeURI="src/LoadGen/EPTF_DiameterCC_LGen_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_DiameterCLF_LGen_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_DiameterCLF_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_DiameterCLF_LGen_Functions.ttcn" relativeURI="src/LoadGen/EPTF_DiameterCLF_LGen_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_DiameterE2_LGen_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_DiameterE2_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_DiameterE2_LGen_Functions.ttcn" relativeURI="src/LoadGen/EPTF_DiameterE2_LGen_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_DiameterEPC_LGen_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_DiameterEPC_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_DiameterEPC_LGen_Functions.ttcn" relativeURI="src/LoadGen/EPTF_DiameterEPC_LGen_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_DiameterE_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_DiameterE_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_DiameterE_Functions.ttcn" relativeURI="src/LoadGen/EPTF_DiameterE_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_DiameterHSS_LGen_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_DiameterHSS_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_DiameterHSS_LGen_Functions.ttcnpp" relativeURI="src/LoadGen/EPTF_DiameterHSS_LGen_Functions.ttcnpp"/> + <FileResource projectRelativePath="EPTF_DiameterRACF_LGen_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_DiameterRACF_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_DiameterRACF_LGen_Functions.ttcn" relativeURI="src/LoadGen/EPTF_DiameterRACF_LGen_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_DiameterSCAPv1_LGen_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_DiameterSCAPv1_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_DiameterSCAPv1_LGen_Functions.ttcn" relativeURI="src/LoadGen/EPTF_DiameterSCAPv1_LGen_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_DiameterSW_LGen_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_DiameterSW_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_DiameterSW_LGen_Functions.ttcn" relativeURI="src/LoadGen/EPTF_DiameterSW_LGen_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_DiameterUAAF_LGen_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_DiameterUAAF_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_DiameterUAAF_LGen_Functions.ttcn" relativeURI="src/LoadGen/EPTF_DiameterUAAF_LGen_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_Diameter_Common_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_Diameter_Common_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_Diameter_Common_Functions.ttcn" relativeURI="src/LoadGen/EPTF_Diameter_Common_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_Diameter_External_Functions.cc" relativeURI="src/LoadGen/EPTF_Diameter_External_Functions.cc"/> + <FileResource projectRelativePath="EPTF_Diameter_LGen_FSMs.ttcn" relativeURI="src/LoadGen/EPTF_Diameter_LGen_FSMs.ttcn"/> + <FileResource projectRelativePath="EPTF_Diameter_Logger_Definitions.ttcn" relativeURI="src/Logger/EPTF_Diameter_Logger_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_Diameter_Logger_Functions.ttcn" relativeURI="src/Logger/EPTF_Diameter_Logger_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_Diameter_Transport_Definitions.ttcn" relativeURI="src/Transport/EPTF_Diameter_Transport_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_Diameter_Transport_Functions.ttcnpp" relativeURI="src/Transport/EPTF_Diameter_Transport_Functions.ttcnpp"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_Applib_Diameter_CNL113521</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_EricssonRTC_CNL113683.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_EricssonRTC_CNL113683.tpd new file mode 100644 index 000000000..5756dfcb2 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_EricssonRTC_CNL113683.tpd @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: EPTF_Applib_EricssonRTC_CNL113683.tpd + Description: tpd project file + Rev: R1A03 + Prodnr: CNL 113 683 + Updated: 2012-04-11 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_Applib_EricssonRTC_CNL113683</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EricssonRTC_CNL113414" projectLocationURI="../../ProtocolModules/EricssonRTC_CNL113414/EricssonRTC_CNL113414.tpd"/> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Common/EPTF_CLL_Common.tpd"/> + <ReferencedProject name="EPTF_CLL_FreeBusyQueue" projectLocationURI="../EPTF_Core_Library_CNL113512/src/FreeBusyQueue/EPTF_CLL_FBQ.tpd"/> + <ReferencedProject name="EPTF_CLL_StatMeasure" projectLocationURI="../EPTF_Core_Library_CNL113512/src/StatMeasure/EPTF_CLL_StatMeasure.tpd"/> + <ReferencedProject name="EPTF_CommonTransport_TCAP_CNL113592" projectLocationURI="../EPTF_CommonTransport_TCAP_CNL113592/EPTF_CommonTransport_TCAP_CNL113592.tpd"/> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../../ProtocolModules/COMMON/ProtocolModules_Common.tpd"/> + <ReferencedProject name="ROSE_CNL113369" projectLocationURI="../../ProtocolModules/ROSE_CNL113369/ROSE_CNL113369.tpd"/> + <ReferencedProject name="TCAPasp_CNL113349" projectLocationURI="../../TestPorts/TCAPasp_CNL113349/TCAPasp_CNL113349.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_EricssonRTC_LGen_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_EricssonRTC_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_EricssonRTC_LGen_Functions.ttcn" relativeURI="src/LoadGen/EPTF_EricssonRTC_LGen_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_EricssonRTC_Logger_Definitions.ttcn" relativeURI="src/Logger/EPTF_EricssonRTC_Logger_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_EricssonRTC_Logger_Functions.ttcn" relativeURI="src/Logger/EPTF_EricssonRTC_Logger_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_Applib_EricssonRTC_CNL113683</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_H248_CNL113523.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_H248_CNL113523.tpd new file mode 100644 index 000000000..cdbe3b361 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_H248_CNL113523.tpd @@ -0,0 +1,95 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: EPTF_Applib_H248_CNL113523.tpd + Description: tpd project file + Rev: R12B02 + Prodnr: CNL 113 523 + Updated: 2013-03-14 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_Applib_H248_CNL113523</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Common/EPTF_CLL_Common.tpd"/> + <ReferencedProject name="EPTF_CLL_DataSource" projectLocationURI="../EPTF_Core_Library_CNL113512/src/DataSource/EPTF_CLL_DataSource.tpd"/> + <ReferencedProject name="EPTF_CLL_ExecCtrl" projectLocationURI="../EPTF_Core_Library_CNL113512/src/ExecCtrl/EPTF_CLL_ExecCtrl.tpd"/> + <ReferencedProject name="EPTF_CLL_ExecCtrl_UI" projectLocationURI="../EPTF_Core_Library_CNL113512/src/ExecCtrl/EPTF_CLL_ExecCtrl_UI.tpd"/> + <ReferencedProject name="EPTF_CLL_FreeBusyQueue" projectLocationURI="../EPTF_Core_Library_CNL113512/src/FreeBusyQueue/EPTF_CLL_FBQ.tpd"/> + <ReferencedProject name="EPTF_CLL_HashMap" projectLocationURI="../EPTF_Core_Library_CNL113512/src/HashMap/EPTF_CLL_HashMap.tpd"/> + <ReferencedProject name="EPTF_CLL_HostAdmin" projectLocationURI="../EPTF_Core_Library_CNL113512/src/HostAdmin/EPTF_CLL_HostAdmin.tpd"/> + <ReferencedProject name="EPTF_CLL_LGenBase" projectLocationURI="../EPTF_Core_Library_CNL113512/src/LGenBase/EPTF_CLL_LGenBase.tpd"/> + <ReferencedProject name="EPTF_CLL_RandomNArray" projectLocationURI="../EPTF_Core_Library_CNL113512/src/RandomNArray/EPTF_CLL_RandomNArray.tpd"/> + <ReferencedProject name="EPTF_CLL_RedBlackTree" projectLocationURI="../EPTF_Core_Library_CNL113512/src/RedBlackTree/EPTF_CLL_RedBlackTree.tpd"/> + <ReferencedProject name="EPTF_CLL_StatHandler_UI" projectLocationURI="../EPTF_Core_Library_CNL113512/src/StatHandler/EPTF_CLL_StatHandler_UI.tpd"/> + <ReferencedProject name="EPTF_CLL_StatMeasure" projectLocationURI="../EPTF_Core_Library_CNL113512/src/StatMeasure/EPTF_CLL_StatMeasure.tpd"/> + <ReferencedProject name="EPTF_CLL_Transport_CommPortIPL4" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_Transport_CommPortIPL4.tpd"/> + <ReferencedProject name="EPTF_CLL_UIHandler" projectLocationURI="../EPTF_Core_Library_CNL113512/src/UIHandler/EPTF_CLL_UIHandler.tpd"/> + <ReferencedProject name="EPTF_CLL_Variable" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Variable/EPTF_CLL_Variable.tpd"/> + <ReferencedProject name="GCP_31r1_CNL113364" projectLocationURI="../../ProtocolModules/GCP_31r1_CNL113364/GCP_31r1_CNL113364.tpd"/> + <ReferencedProject name="H248_v2_CNL113424" projectLocationURI="../../ProtocolModules/H248_v2_CNL113424/H248_v2_CNL113424.tpd"/> + <ReferencedProject name="IPL4asp_CNL113531" projectLocationURI="../../TestPorts/IPL4asp_CNL113531/IPL4asp_CNL113531.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_Applib_H248_CNL113523.tpd" relativeURI="EPTF_Applib_H248_CNL113523.tpd"/> + <FileResource projectRelativePath="EPTF_H248_DS_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_H248_DS_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_H248_DS_Functions.ttcn" relativeURI="src/LoadGen/EPTF_H248_DS_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_H248_Database_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_H248_Database_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_H248_Database_Functions.ttcn" relativeURI="src/LoadGen/EPTF_H248_Database_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_H248_LGen_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_H248_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_H248_LGen_Functions.ttcn" relativeURI="src/LoadGen/EPTF_H248_LGen_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_H248_Logger_Definitions.ttcn" relativeURI="src/Logger/EPTF_H248_Logger_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_H248_Logger_Functions.ttcn" relativeURI="src/Logger/EPTF_H248_Logger_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_H248_SDP_Functions.ttcn" relativeURI="src/LoadGen/EPTF_H248_SDP_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_H248_Scheduler_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_H248_Scheduler_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_H248_Scheduler_Functions.ttcn" relativeURI="src/LoadGen/EPTF_H248_Scheduler_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_H248_Templates.ttcn" relativeURI="src/LoadGen/EPTF_H248_Templates.ttcn"/> + <FileResource projectRelativePath="EPTF_H248_Transport_Local_Definitions.ttcn" relativeURI="src/Transport/EPTF_H248_Transport_Local_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_H248_Transport_Local_Functions.ttcn" relativeURI="src/Transport/EPTF_H248_Transport_Local_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_H248_UIHandler_Functions.ttcn" relativeURI="src/LoadGen/EPTF_H248_UIHandler_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_Applib_H248_CNL113523</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>ENABLE_SCTP</listItem> + <listItem>USE_SCTP</listItem> + <listItem>LKSCTP_1_0_7</listItem> + <listItem>EINSS7_THREADSAFE</listItem> + <listItem>__EXTENSIONS__</listItem> + <listItem>_REENTRANT</listItem> + <listItem>_POSIX_PTHREAD_SEMANTICS</listItem> + <listItem>CP_R12A30</listItem> + <listItem>CP_R12</listItem> + <listItem>SCCP_CAA901437_R12</listItem> + <listItem>TCAP_CAA20118_R8</listItem> + <listItem>T_ADDRESS -DEINSS7_ADDR_IN_RESP</listItem> + <listItem>$(PLATFORM)</listItem> + </TTCN3preprocessorDefines> + <preprocessorDefines> + <listItem>$(PLATFORM)</listItem> + <listItem>NO_IPV6</listItem> + </preprocessorDefines> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_HTTP_CNL113618.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_HTTP_CNL113618.tpd new file mode 100644 index 000000000..e48118822 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_HTTP_CNL113618.tpd @@ -0,0 +1,108 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: EPTF_Applib_HTTP_CNL113618.tpd + Description: tpd project file + Rev: R6C01 + Prodnr: CNL 113 618 + Updated: 2013-01-30 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_Applib_HTTP_CNL113618</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Common/EPTF_CLL_Common.tpd"/> + <ReferencedProject name="EPTF_CLL_LGenBase" projectLocationURI="../EPTF_Core_Library_CNL113512/src/LGenBase/EPTF_CLL_LGenBase.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Logging/EPTF_CLL_Logging.tpd"/> + <ReferencedProject name="EPTF_CLL_RedBlackTree" projectLocationURI="../EPTF_Core_Library_CNL113512/src/RedBlackTree/EPTF_CLL_RedBlackTree.tpd"/> + <ReferencedProject name="EPTF_CLL_Scheduler" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Scheduler/EPTF_CLL_Scheduler.tpd"/> + <ReferencedProject name="EPTF_CLL_Transport_CommPortIPL4" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_Transport_CommPortIPL4.tpd"/> + <ReferencedProject name="EPTF_CLL_Transport_MessageBufferManager" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_Transport_MessageBufferManager.tpd"/> + <ReferencedProject name="EPTF_CLL_TransportRouting" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_TransportRouting.tpd"/> + <ReferencedProject name="EPTF_CLL_Variable" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Variable/EPTF_CLL_Variable.tpd"/> + <ReferencedProject name="HTTPmsg_CNL113312" projectLocationURI="../../TestPorts/HTTPmsg_CNL113312/HTTPmsg_CNL113312.tpd"/> + <ReferencedProject name="IPL4asp_CNL113531" projectLocationURI="../../TestPorts/IPL4asp_CNL113531/IPL4asp_CNL113531.tpd"/> + <ReferencedProject name="TCCUsefulFunctions_CNL113472_Security" projectLocationURI="../TCCUsefulFunctions_CNL113472/TCCUsefulFunctions_CNL113472_Security.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="doc/apidoc" relativeURI="doc/apidoc"/> + <FolderResource projectRelativePath="doc/apidoc/files" relativeURI="doc/apidoc/files"/> + <FolderResource projectRelativePath="doc/apidoc/files/LoadGen" relativeURI="doc/apidoc/files/LoadGen"/> + <FolderResource projectRelativePath="doc/apidoc/files/Logger" relativeURI="doc/apidoc/files/Logger"/> + <FolderResource projectRelativePath="doc/apidoc/files/Transport" relativeURI="doc/apidoc/files/Transport"/> + <FolderResource projectRelativePath="doc/apidoc/index" relativeURI="doc/apidoc/index"/> + <FolderResource projectRelativePath="doc/apidoc/javascript" relativeURI="doc/apidoc/javascript"/> + <FolderResource projectRelativePath="doc/apidoc/styles" relativeURI="doc/apidoc/styles"/> + </Folders> + <Files> + <FileResource projectRelativePath="EPTF_HTTP_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_HTTP_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_HTTP_Functions.ttcn" relativeURI="src/LoadGen/EPTF_HTTP_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_HTTP_Logger_Definitions.ttcn" relativeURI="src/Logger/EPTF_HTTP_Logger_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_HTTP_Logger_Functions.ttcn" relativeURI="src/Logger/EPTF_HTTP_Logger_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_HTTP_Transport_Definitions.ttcn" relativeURI="src/Transport/EPTF_HTTP_Transport_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_HTTP_Transport_Functions.ttcn" relativeURI="src/Transport/EPTF_HTTP_Transport_Functions.ttcn"/> + <FileResource projectRelativePath="doc/EPTF_Applib_HTTP_CNL113618_FS.pdf" relativeURI="doc/EPTF_Applib_HTTP_CNL113618_FS.pdf"/> + <FileResource projectRelativePath="doc/EPTF_Applib_HTTP_CNL113618_PRI.pdf" relativeURI="doc/EPTF_Applib_HTTP_CNL113618_PRI.pdf"/> + <FileResource projectRelativePath="doc/EPTF_Applib_HTTP_CNL113618_UG.pdf" relativeURI="doc/EPTF_Applib_HTTP_CNL113618_UG.pdf"/> + <FileResource projectRelativePath="doc/apidoc/Menu.txt" relativeURI="doc/apidoc/Menu.txt"/> + <FileResource projectRelativePath="doc/apidoc/files/LoadGen/EPTF_HTTP_Definitions-ttcn.html" relativeURI="doc/apidoc/files/LoadGen/EPTF_HTTP_Definitions-ttcn.html"/> + <FileResource projectRelativePath="doc/apidoc/files/LoadGen/EPTF_HTTP_Functions-ttcn.html" relativeURI="doc/apidoc/files/LoadGen/EPTF_HTTP_Functions-ttcn.html"/> + <FileResource projectRelativePath="doc/apidoc/files/Logger/EPTF_HTTP_Logger_Definitions-ttcn.html" relativeURI="doc/apidoc/files/Logger/EPTF_HTTP_Logger_Definitions-ttcn.html"/> + <FileResource projectRelativePath="doc/apidoc/files/Logger/EPTF_HTTP_Logger_Functions-ttcn.html" relativeURI="doc/apidoc/files/Logger/EPTF_HTTP_Logger_Functions-ttcn.html"/> + <FileResource projectRelativePath="doc/apidoc/files/Transport/EPTF_HTTP_Transport_Definitions-ttcn.html" relativeURI="doc/apidoc/files/Transport/EPTF_HTTP_Transport_Definitions-ttcn.html"/> + <FileResource projectRelativePath="doc/apidoc/files/Transport/EPTF_HTTP_Transport_Functions-ttcn.html" relativeURI="doc/apidoc/files/Transport/EPTF_HTTP_Transport_Functions-ttcn.html"/> + <FileResource projectRelativePath="doc/apidoc/index.html" relativeURI="doc/apidoc/index.html"/> + <FileResource projectRelativePath="doc/apidoc/index/Altsteps.html" relativeURI="doc/apidoc/index/Altsteps.html"/> + <FileResource projectRelativePath="doc/apidoc/index/Constants.html" relativeURI="doc/apidoc/index/Constants.html"/> + <FileResource projectRelativePath="doc/apidoc/index/Constants2.html" relativeURI="doc/apidoc/index/Constants2.html"/> + <FileResource projectRelativePath="doc/apidoc/index/Files.html" relativeURI="doc/apidoc/index/Files.html"/> + <FileResource projectRelativePath="doc/apidoc/index/Functions.html" relativeURI="doc/apidoc/index/Functions.html"/> + <FileResource projectRelativePath="doc/apidoc/index/Functions2.html" relativeURI="doc/apidoc/index/Functions2.html"/> + <FileResource projectRelativePath="doc/apidoc/index/General.html" relativeURI="doc/apidoc/index/General.html"/> + <FileResource projectRelativePath="doc/apidoc/index/General2.html" relativeURI="doc/apidoc/index/General2.html"/> + <FileResource projectRelativePath="doc/apidoc/index/General3.html" relativeURI="doc/apidoc/index/General3.html"/> + <FileResource projectRelativePath="doc/apidoc/index/General4.html" relativeURI="doc/apidoc/index/General4.html"/> + <FileResource projectRelativePath="doc/apidoc/index/General5.html" relativeURI="doc/apidoc/index/General5.html"/> + <FileResource projectRelativePath="doc/apidoc/index/Templates.html" relativeURI="doc/apidoc/index/Templates.html"/> + <FileResource projectRelativePath="doc/apidoc/index/Types.html" relativeURI="doc/apidoc/index/Types.html"/> + <FileResource projectRelativePath="doc/apidoc/javascript/main.js" relativeURI="doc/apidoc/javascript/main.js"/> + <FileResource projectRelativePath="doc/apidoc/menu.html" relativeURI="doc/apidoc/menu.html"/> + <FileResource projectRelativePath="doc/apidoc/styles/1.css" relativeURI="doc/apidoc/styles/1.css"/> + <FileResource projectRelativePath="doc/apidoc/styles/2.css" relativeURI="doc/apidoc/styles/2.css"/> + <FileResource projectRelativePath="doc/apidoc/styles/main.css" relativeURI="doc/apidoc/styles/main.css"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_Applib_HTTP_CNL113618</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_INAP_CNL113596.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_INAP_CNL113596.tpd new file mode 100644 index 000000000..0fab3a1a1 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_INAP_CNL113596.tpd @@ -0,0 +1,52 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: EPTF_Applib_INAP_CNL113596.tpd + Description: tpd project file + Rev: R8B02 + Prodnr: CNL 113 596 + Updated: 2012-06-27 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_Applib_INAP_CNL113596</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Common/EPTF_CLL_Common.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Logging/EPTF_CLL_Logging.tpd"/> + <ReferencedProject name="EPTF_CLL_StatMeasure" projectLocationURI="../EPTF_Core_Library_CNL113512/src/StatMeasure/EPTF_CLL_StatMeasure.tpd"/> + <ReferencedProject name="EPTF_CommonTransport_TCAP_CNL113592" projectLocationURI="../EPTF_CommonTransport_TCAP_CNL113592/EPTF_CommonTransport_TCAP_CNL113592.tpd"/> + <ReferencedProject name="Ericsson_INAP_CS1plus_CNL113356" projectLocationURI="../../ProtocolModules/Ericsson_INAP_CS1plus_CNL113356/Ericsson_INAP_CS1plus_CNL113356.tpd"/> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../../ProtocolModules/COMMON/ProtocolModules_Common.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_INAP_CS1plus_LGen_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_INAP_CS1plus_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_INAP_CS1plus_LGen_Functions.ttcn" relativeURI="src/LoadGen/EPTF_INAP_CS1plus_LGen_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_INAP_LGen_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_INAP_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_INAP_LGen_Functions.ttcn" relativeURI="src/LoadGen/EPTF_INAP_LGen_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_INAP_Logger_Functions.ttcn" relativeURI="src/Logger/EPTF_INAP_Logger_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_Applib_INAP_CNL113596</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_ISUP_CNL113681.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_ISUP_CNL113681.tpd new file mode 100644 index 000000000..d3e4e6bfe --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_ISUP_CNL113681.tpd @@ -0,0 +1,63 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: EPTF_Applib_ISUP_CNL113681.tpd + Description: tpd project file + Rev: R4A02 + Prodnr: CNL 113 681 + Updated: 2012-10-10 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_Applib_ISUP_CNL113681</ProjectName> + <ReferencedProjects> + <ReferencedProject name="ISUP_ANSI_CNL113411" projectLocationURI="../../ProtocolModules/ISUP_ANSI_CNL113411/ISUP_ANSI_CNL113411.tpd"/> + <ReferencedProject name="ISUP_Q.762_CNL113365" projectLocationURI="../../ProtocolModules/ISUP_Q.762_CNL113365/ISUP_Q.762_CNL113365.tpd"/> + <ReferencedProject name="ISUP_for_Japan_CNL113727" projectLocationURI="../../ProtocolModules/ISUP_for_Japan_CNL113727/ISUP_for_Japan_CNL113727.tpd"/> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Common/EPTF_CLL_Common.tpd"/> + <ReferencedProject name="EPTF_CLL_FreeBusyQueue" projectLocationURI="../EPTF_Core_Library_CNL113512/src/FreeBusyQueue/EPTF_CLL_FBQ.tpd"/> + <ReferencedProject name="EPTF_CLL_StatMeasure" projectLocationURI="../EPTF_Core_Library_CNL113512/src/StatMeasure/EPTF_CLL_StatMeasure.tpd"/> + <ReferencedProject name="EPTF_CommonTransport_M3_CNL113682" projectLocationURI="../EPTF_CommonTransport_M3_CNL113682/EPTF_CommonTransport_M3_CNL113682.tpd"/> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../../ProtocolModules/COMMON/ProtocolModules_Common.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_ISUP_Common_Functions.ttcn" relativeURI="src/LoadGen/EPTF_ISUP_Common_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_ISUP_LGen_Stat_Functions.ttcn" relativeURI="src/LoadGen/EPTF_ISUP_LGen_Stat_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_ISUP_LGen_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_ISUP_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_ISUP_LGen_Functions.ttcn" relativeURI="src/LoadGen/EPTF_ISUP_LGen_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_ISUP_LGen_ITU_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_ISUP_LGen_ITU_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_ISUP_LGen_ITU_Functions.ttcn" relativeURI="src/LoadGen/EPTF_ISUP_LGen_ITU_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_ISUP_LGen_ANSI_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_ISUP_LGen_ANSI_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_ISUP_LGen_ANSI_Functions.ttcn" relativeURI="src/LoadGen/EPTF_ISUP_LGen_ANSI_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_ISUP_LGen_TTC_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_ISUP_LGen_TTC_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_ISUP_LGen_TCC_Functions.ttcn" relativeURI="src/LoadGen/EPTF_ISUP_LGen_TTC_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_ISUP_LGen_UserExtension_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_ISUP_LGen_UserExtension_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_ISUP_LGen_UserExtension_Functions.ttcn" relativeURI="src/LoadGen/EPTF_ISUP_LGen_UserExtension_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_ISUP_Logging_Definitions.ttcn" relativeURI="src/Logger/EPTF_ISUP_Logging_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_ISUP_Logging_Functions.ttcn" relativeURI="src/Logger/EPTF_ISUP_Logging_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_Applib_ISUP_CNL113681</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_IUA_CNL113747.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_IUA_CNL113747.tpd new file mode 100644 index 000000000..27ef87610 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_IUA_CNL113747.tpd @@ -0,0 +1,67 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: EPTF_Applib_IUA_CNL113747.tpd + Description: tpd project file + Rev: R1A01 + Prodnr: CNL 113 747 + Updated: 2012-10-01 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_Applib_IUA_CNL113747</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Logging_UI" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Logging/EPTF_CLL_Logging_UI.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging_Server" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Logging/EPTF_CLL_Logging_Server.tpd"/> + <ReferencedProject name="EPTF_CLL_Transport_CommPortIPL4" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_Transport_CommPortIPL4.tpd"/> + <ReferencedProject name="EPTF_CLL_Transport_MessageBufferManager" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_Transport_MessageBufferManager.tpd"/> + <ReferencedProject name="EPTF_CLL_TransportRouting" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_TransportRouting.tpd"/> + <ReferencedProject name="IUA_CNL113439" projectLocationURI="../../ProtocolModules/IUA_CNL113439/IUA_CNL113439.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="src" relativeURI="src"/> + <FolderResource projectRelativePath="src/Logger" relativeURI="src/Logger"/> + <FolderResource projectRelativePath="src/Transport" relativeURI="src/Transport"/> + </Folders> + <Files> + <FileResource projectRelativePath="src/Logger/EPTF_IUA_Logger_Definitions.ttcn" relativeURI="src/Logger/EPTF_IUA_Logger_Definitions.ttcn"/> + <FileResource projectRelativePath="src/Logger/EPTF_IUA_Logger_Functions.ttcn" relativeURI="src/Logger/EPTF_IUA_Logger_Functions.ttcn"/> + <FileResource projectRelativePath="src/Logger/EPTF_IUA_Logging_Definitions.ttcn" relativeURI="src/Logger/EPTF_IUA_Logging_Definitions.ttcn"/> + <FileResource projectRelativePath="src/Logger/EPTF_IUA_Logging_Functions.ttcn" relativeURI="src/Logger/EPTF_IUA_Logging_Functions.ttcn"/> + <FileResource projectRelativePath="src/Transport/EPTF_IUA_Transport_Definitions.ttcn" relativeURI="src/Transport/EPTF_IUA_Transport_Definitions.ttcn"/> + <FileResource projectRelativePath="src/Transport/EPTF_IUA_Transport_Functions.ttcn" relativeURI="src/Transport/EPTF_IUA_Transport_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_Applib_IUA_CNL113747</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_LANL2_CNL113698.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_LANL2_CNL113698.tpd new file mode 100644 index 000000000..74b5e32cb --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_LANL2_CNL113698.tpd @@ -0,0 +1,101 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: EPTF_Applib_LANL2_CNL113698.tpd + Description: tpd project file + Rev: R1A02 + Prodnr: CNL 113 698 + Updated: 2012-03-06 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_Applib_LANL2_CNL113698</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Base" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Base/EPTF_CLL_Base.tpd"/> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Common/EPTF_CLL_Common.tpd"/> + <ReferencedProject name="EPTF_CLL_LGenBase" projectLocationURI="../EPTF_Core_Library_CNL113512/src/LGenBase/EPTF_CLL_LGenBase.tpd"/> + <ReferencedProject name="EPTF_CLL_Transport_Common" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_Transport_Common.tpd"/> + <ReferencedProject name="EPTF_CLL_Transport_MessageBufferManager" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_Transport_MessageBufferManager.tpd"/> + <ReferencedProject name="EPTF_CLL_TransportRouting" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_TransportRouting.tpd"/> + <ReferencedProject name="IP_CNL113418" projectLocationURI="../../ProtocolModules/IP_CNL113418/IP_CNL113418.tpd"/> + <ReferencedProject name="LANL2asp_CNL113519" projectLocationURI="../../TestPorts/LANL2asp_CNL113519/LANL2asp_CNL113519.tpd"/> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../../ProtocolModules/COMMON/ProtocolModules_Common.tpd"/> + <ReferencedProject name="Socket_API_CNL113686" projectLocationURI="../../TestPorts/Common_Components/Socket_API_CNL113686/Socket_API_CNL113686.tpd"/> + <ReferencedProject name="TCCUsefulFunctions_CNL113472_Interface" projectLocationURI="../TCCUsefulFunctions_CNL113472/TCCUsefulFunctions_CNL113472_Interface.tpd"/> + <ReferencedProject name="UDP_CNL113420" projectLocationURI="../../ProtocolModules/UDP_CNL113420/UDP_CNL113420.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="doc/apidoc" relativeURI="doc/apidoc"/> + <FolderResource projectRelativePath="doc/apidoc/Data" relativeURI="doc/apidoc/Data"/> + <FolderResource projectRelativePath="doc/apidoc/files" relativeURI="doc/apidoc/files"/> + <FolderResource projectRelativePath="doc/apidoc/files/LoadGen" relativeURI="doc/apidoc/files/LoadGen"/> + <FolderResource projectRelativePath="doc/apidoc/files/Logger" relativeURI="doc/apidoc/files/Logger"/> + <FolderResource projectRelativePath="doc/apidoc/files/Transport" relativeURI="doc/apidoc/files/Transport"/> + <FolderResource projectRelativePath="doc/apidoc/index" relativeURI="doc/apidoc/index"/> + <FolderResource projectRelativePath="doc/apidoc/javascript" relativeURI="doc/apidoc/javascript"/> + <FolderResource projectRelativePath="doc/apidoc/styles" relativeURI="doc/apidoc/styles"/> + </Folders> + <Files> + <FileResource projectRelativePath="EPTF_LANL2_LGen_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_LANL2_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_LANL2_LGen_Functions.ttcn" relativeURI="src/LoadGen/EPTF_LANL2_LGen_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_LANL2_Logger_Definitions.ttcn" relativeURI="src/Logger/EPTF_LANL2_Logger_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_LANL2_Logger_Functions.ttcn" relativeURI="src/Logger/EPTF_LANL2_Logger_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_LANL2_Transport_Definitions.ttcn" relativeURI="src/Transport/EPTF_LANL2_Transport_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_LANL2_Transport_ExternalFunctions.cc" relativeURI="src/Transport/EPTF_LANL2_Transport_ExternalFunctions.cc"/> + <FileResource projectRelativePath="EPTF_LANL2_Transport_Functions.ttcn" relativeURI="src/Transport/EPTF_LANL2_Transport_Functions.ttcn"/> + <FileResource projectRelativePath="doc/EPTF_Applib_LANL2_CNL113698_FS.pdf" relativeURI="doc/EPTF_Applib_LANL2_CNL113698_FS.pdf"/> + <FileResource projectRelativePath="doc/EPTF_Applib_LANL2_CNL113698_PRI.pdf" relativeURI="doc/EPTF_Applib_LANL2_CNL113698_PRI.pdf"/> + <FileResource projectRelativePath="doc/EPTF_Applib_LANL2_CNL113698_UG.pdf" relativeURI="doc/EPTF_Applib_LANL2_CNL113698_UG.pdf"/> + <FileResource projectRelativePath="doc/apidoc/Data/ClassHierarchy.nd" relativeURI="doc/apidoc/Data/ClassHierarchy.nd"/> + <FileResource projectRelativePath="doc/apidoc/Data/ConfigFileInfo.nd" relativeURI="doc/apidoc/Data/ConfigFileInfo.nd"/> + <FileResource projectRelativePath="doc/apidoc/Data/FileInfo.nd" relativeURI="doc/apidoc/Data/FileInfo.nd"/> + <FileResource projectRelativePath="doc/apidoc/Data/PreviousMenuState.nd" relativeURI="doc/apidoc/Data/PreviousMenuState.nd"/> + <FileResource projectRelativePath="doc/apidoc/Data/PreviousSettings.nd" relativeURI="doc/apidoc/Data/PreviousSettings.nd"/> + <FileResource projectRelativePath="doc/apidoc/Data/SymbolTable.nd" relativeURI="doc/apidoc/Data/SymbolTable.nd"/> + <FileResource projectRelativePath="doc/apidoc/Menu.txt" relativeURI="doc/apidoc/Menu.txt"/> + <FileResource projectRelativePath="doc/apidoc/files/LoadGen/EPTF_LANL2_LGen_Definitions-ttcn.html" relativeURI="doc/apidoc/files/LoadGen/EPTF_LANL2_LGen_Definitions-ttcn.html"/> + <FileResource projectRelativePath="doc/apidoc/files/LoadGen/EPTF_LANL2_LGen_Functions-ttcn.html" relativeURI="doc/apidoc/files/LoadGen/EPTF_LANL2_LGen_Functions-ttcn.html"/> + <FileResource projectRelativePath="doc/apidoc/files/Logger/EPTF_LANL2_Logger_Definitions-ttcn.html" relativeURI="doc/apidoc/files/Logger/EPTF_LANL2_Logger_Definitions-ttcn.html"/> + <FileResource projectRelativePath="doc/apidoc/files/Logger/EPTF_LANL2_Logger_Functions-ttcn.html" relativeURI="doc/apidoc/files/Logger/EPTF_LANL2_Logger_Functions-ttcn.html"/> + <FileResource projectRelativePath="doc/apidoc/files/TITANSim.html" relativeURI="doc/apidoc/files/TITANSim.html"/> + <FileResource projectRelativePath="doc/apidoc/files/Transport/EPTF_LANL2_Transport_Definitions-ttcn.html" relativeURI="doc/apidoc/files/Transport/EPTF_LANL2_Transport_Definitions-ttcn.html"/> + <FileResource projectRelativePath="doc/apidoc/files/Transport/EPTF_LANL2_Transport_ExternalFunctions-cc.html" relativeURI="doc/apidoc/files/Transport/EPTF_LANL2_Transport_ExternalFunctions-cc.html"/> + <FileResource projectRelativePath="doc/apidoc/files/Transport/EPTF_LANL2_Transport_Functions-ttcn.html" relativeURI="doc/apidoc/files/Transport/EPTF_LANL2_Transport_Functions-ttcn.html"/> + <FileResource projectRelativePath="doc/apidoc/index.html" relativeURI="doc/apidoc/index.html"/> + <FileResource projectRelativePath="doc/apidoc/javascript/main.js" relativeURI="doc/apidoc/javascript/main.js"/> + <FileResource projectRelativePath="doc/apidoc/menu.html" relativeURI="doc/apidoc/menu.html"/> + <FileResource projectRelativePath="doc/apidoc/styles/1.css" relativeURI="doc/apidoc/styles/1.css"/> + <FileResource projectRelativePath="doc/apidoc/styles/2.css" relativeURI="doc/apidoc/styles/2.css"/> + <FileResource projectRelativePath="doc/apidoc/styles/main.css" relativeURI="doc/apidoc/styles/main.css"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <targetExecutable>bin/EPTF_Applib_LANL2_CNL113698</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_LNP_CNL113714.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_LNP_CNL113714.tpd new file mode 100644 index 000000000..59c9fa3c0 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_LNP_CNL113714.tpd @@ -0,0 +1,61 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: EPTF_Applib_LNP_CNL113714.tpd + Description: tpd project file + Rev: R1D01 + Prodnr: CNL 113 714 + Updated: 2012-10-10 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_Applib_LNP_CNL113714</ProjectName> + <ReferencedProjects> + <ReferencedProject name="LNP_ANSI_CNL113715" projectLocationURI="../../ProtocolModules/LNP_ANSI_CNL113715/LNP_ANSI_CNL113715.tpd"/> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Common/EPTF_CLL_Common.tpd"/> + <ReferencedProject name="EPTF_CLL_DataSource" projectLocationURI="../EPTF_Core_Library_CNL113512/src/DataSource/EPTF_CLL_DataSource.tpd"/> + <ReferencedProject name="EPTF_CLL_FreeBusyQueue" projectLocationURI="../EPTF_Core_Library_CNL113512/src/FreeBusyQueue/EPTF_CLL_FBQ.tpd"/> + <ReferencedProject name="EPTF_CLL_StatMeasure" projectLocationURI="../EPTF_Core_Library_CNL113512/src/StatMeasure/EPTF_CLL_StatMeasure.tpd"/> + <ReferencedProject name="EPTF_CLL_ExecCtrl" projectLocationURI="../EPTF_Core_Library_CNL113512/src/ExecCtrl/EPTF_CLL_ExecCtrl.tpd"/> + <ReferencedProject name="EPTF_CommonTransport_TCAP_CNL113592" projectLocationURI="../EPTF_CommonTransport_TCAP_CNL113592/EPTF_CommonTransport_TCAP_CNL113592.tpd"/> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../../ProtocolModules/COMMON/ProtocolModules_Common.tpd"/> + <ReferencedProject name="ROSE_CNL113369" projectLocationURI="../../ProtocolModules/ROSE_CNL113369/ROSE_CNL113369.tpd"/> + <ReferencedProject name="TCAPasp_CNL113349" projectLocationURI="../../TestPorts/TCAPasp_CNL113349/TCAPasp_CNL113349.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="src" relativeURI="src"/> + <FolderResource projectRelativePath="src/LoadGen" relativeURI="src/LoadGen"/> + <FolderResource projectRelativePath="src/Logger" relativeURI="src/Logger"/> + <FolderResource projectRelativePath="src/Transport" relativeURI="src/Transport"/> + </Folders> + <Files> + <FileResource projectRelativePath="src/EPTF_Applib_LNP.grp" relativeURI="src/EPTF_Applib_LNP.grp"/> + <FileResource projectRelativePath="src/LoadGen/EPTF_LNP_LGen_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_LNP_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="src/LoadGen/EPTF_LNP_LGen_Functions.ttcn" relativeURI="src/LoadGen/EPTF_LNP_LGen_Functions.ttcn"/> + <FileResource projectRelativePath="src/Logger/EPTF_LNP_Logger_Functions.ttcn" relativeURI="src/Logger/EPTF_LNP_Logger_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_Applib_LNP_CNL113714</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_MAP_CNL113595.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_MAP_CNL113595.tpd new file mode 100644 index 000000000..48363dab2 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_MAP_CNL113595.tpd @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: EPTF_Applib_MAP_CNL113595.tpd + Description: tpd project file + Rev: R8B01 + Prodnr: CNL 113 595 + Updated: 2013-01-30 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_Applib_MAP_CNL113595</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Common/EPTF_CLL_Common.tpd"/> + <ReferencedProject name="EPTF_CLL_DataSource" projectLocationURI="../EPTF_Core_Library_CNL113512/src/DataSource/EPTF_CLL_DataSource.tpd"/> + <ReferencedProject name="EPTF_CLL_ExecCtrl" projectLocationURI="../EPTF_Core_Library_CNL113512/src/ExecCtrl/EPTF_CLL_ExecCtrl.tpd"/> + <ReferencedProject name="EPTF_CLL_FreeBusyQueue" projectLocationURI="../EPTF_Core_Library_CNL113512/src/FreeBusyQueue/EPTF_CLL_FBQ.tpd"/> + <ReferencedProject name="EPTF_CLL_StatMeasure" projectLocationURI="../EPTF_Core_Library_CNL113512/src/StatMeasure/EPTF_CLL_StatMeasure.tpd"/> + <ReferencedProject name="EPTF_CommonTransport_TCAP_CNL113592" projectLocationURI="../EPTF_CommonTransport_TCAP_CNL113592/EPTF_CommonTransport_TCAP_CNL113592.tpd"/> + <ReferencedProject name="Ericsson_MAP_v2_CNL113725" projectLocationURI="../../ProtocolModules/Ericsson_MAP_v2_CNL113725/Ericsson_MAP_v2_CNL113725.tpd"/> + <ReferencedProject name="MAP_v1_CNL113431" projectLocationURI="../../ProtocolModules/MAP_v1_CNL113431/MAP_v1_CNL113431.tpd"/> + <ReferencedProject name="MAP_v2_CNL113432" projectLocationURI="../../ProtocolModules/MAP_v2_CNL113432/MAP_v2_CNL113432.tpd"/> + <ReferencedProject name="MAP_v7.12.0_CNL113635_v123" projectLocationURI="../../ProtocolModules/MAP_v7.12.0_CNL113635/MAP_v7.12.0_CNL113635_v123.tpd"/> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../../ProtocolModules/COMMON/ProtocolModules_Common.tpd"/> + <ReferencedProject name="ROSE_CNL113369" projectLocationURI="../../ProtocolModules/ROSE_CNL113369/ROSE_CNL113369.tpd"/> + <ReferencedProject name="TCAPasp_CNL113349" projectLocationURI="../../TestPorts/TCAPasp_CNL113349/TCAPasp_CNL113349.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_MAP_LGen_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_MAP_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_MAP_LGen_Functions.ttcn" relativeURI="src/LoadGen/EPTF_MAP_LGen_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_MAP_Logger_Functions.ttcn" relativeURI="src/Logger/EPTF_MAP_Logger_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_Applib_MAP_CNL113595</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_MLSim_CNL113568.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_MLSim_CNL113568.tpd new file mode 100644 index 000000000..af56078bc --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_MLSim_CNL113568.tpd @@ -0,0 +1,54 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: EPTF_Applib_MLSim_CNL113568.tpd + Description: tpd project file + Rev: R10A02 + Prodnr: CNL 113 568 + Updated: 2013-02-21 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_Applib_MLSim_CNL113568</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_ExecCtrl" projectLocationURI="../EPTF_Core_Library_CNL113512/src/ExecCtrl/EPTF_CLL_ExecCtrl.tpd"/> + <ReferencedProject name="MLSIMasp_CNL113538" projectLocationURI="../../TestPorts/MLSIMasp_CNL113538/MLSIMasp_CNL113538.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="src" relativeURI="src"/> + <FolderResource projectRelativePath="src/LoadGen" relativeURI="src/LoadGen"/> + <FolderResource projectRelativePath="src/Logger" relativeURI="src/Logger"/> + <FolderResource projectRelativePath="src/Transport" relativeURI="src/Transport"/> + </Folders> + <Files> + <FileResource projectRelativePath="src/LoadGen/EPTF_MLSim_Functions.ttcn" relativeURI="src/LoadGen/EPTF_MLSim_Functions.ttcn"/> + <FileResource projectRelativePath="src/LoadGen/EPTF_MLSim_General_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_MLSim_General_Definitions.ttcn"/> + <FileResource projectRelativePath="src/LoadGen/EPTF_MLSim_LoadGen.grp" relativeURI="src/LoadGen/EPTF_MLSim_LoadGen.grp"/> + <FileResource projectRelativePath="src/LoadGen/EPTF_MLSim_Request_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_MLSim_Request_Definitions.ttcn"/> + <FileResource projectRelativePath="src/LoadGen/EPTF_MLSim_Response_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_MLSim_Response_Definitions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_Applib_MLSim_CNL113568</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_MSRP_CNL113564.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_MSRP_CNL113564.tpd new file mode 100644 index 000000000..f0dc37aeb --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_MSRP_CNL113564.tpd @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: EPTF_Applib_MSRP_CNL113564.tpd + Description: tpd project file + Rev: R10A03 + Prodnr: CNL 113 564 + Updated: 2013-04-04 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_Applib_MSRP_CNL113564</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Common/EPTF_CLL_Common.tpd"/> + <ReferencedProject name="EPTF_CLL_FreeBusyQueue" projectLocationURI="../EPTF_Core_Library_CNL113512/src/FreeBusyQueue/EPTF_CLL_FBQ.tpd"/> + <ReferencedProject name="EPTF_CLL_LGenBase" projectLocationURI="../EPTF_Core_Library_CNL113512/src/LGenBase/EPTF_CLL_LGenBase.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Logging/EPTF_CLL_Logging.tpd"/> + <ReferencedProject name="EPTF_CLL_Transport_CommPortIPL4" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_Transport_CommPortIPL4.tpd"/> + <ReferencedProject name="EPTF_CLL_TransportRouting" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_TransportRouting.tpd"/> + <ReferencedProject name="EPTF_CLL_Variable" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Variable/EPTF_CLL_Variable.tpd"/> + <ReferencedProject name="MSRP_CNL113467" projectLocationURI="../../ProtocolModules/MSRP_CNL113467/MSRP_CNL113467.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_MSRP_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_MSRP_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_MSRP_EncDec.cc" relativeURI="src/Transport/EPTF_MSRP_EncDec.cc"/> + <FileResource projectRelativePath="EPTF_MSRP_FSMs.ttcn" relativeURI="src/LoadGen/EPTF_MSRP_FSMs.ttcn"/> + <FileResource projectRelativePath="EPTF_MSRP_Functions.ttcn" relativeURI="src/LoadGen/EPTF_MSRP_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_MSRP_Logger_Definitions.ttcn" relativeURI="src/Logger/EPTF_MSRP_Logger_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_MSRP_Logger_Functions.ttcn" relativeURI="src/Logger/EPTF_MSRP_Logger_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_MSRP_Transport_Definitions.ttcn" relativeURI="src/Transport/EPTF_MSRP_Transport_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_MSRP_Transport_Functions.ttcn" relativeURI="src/Transport/EPTF_MSRP_Transport_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_Applib_MSRP_CNL113564</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_MobileL3_CNL113609.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_MobileL3_CNL113609.tpd new file mode 100644 index 000000000..30695d851 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_MobileL3_CNL113609.tpd @@ -0,0 +1,49 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: EPTF_Applib_MobileL3_CNL113609.tpd + Description: tpd project file + Rev: R1A06 + Prodnr: CNL 113 609 + Updated: 2013-01-25 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_Applib_MobileL3_CNL113609</ProjectName> + <ReferencedProjects> + <ReferencedProject name="MobileL3_v10.5.0_CNL113758" projectLocationURI="../../ProtocolModules/MobileL3_v10.5.0_CNL113758/MobileL3_v10.5.0_CNL113758.tpd"/> + <ReferencedProject name="EPTF_CommonTransport_SCCP_CNL113610" projectLocationURI="../EPTF_CommonTransport_SCCP_CNL113610/EPTF_CommonTransport_SCCP_CNL113610.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_MobileL3_LGen_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_MobileL3_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_MobileL3_LGen_Functions.ttcn" relativeURI="src/LoadGen/EPTF_MobileL3_LGen_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_MobileL3_LGen_UserExtension_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_MobileL3_LGen_UserExtension_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_MobileL3_LGen_UserExtension_Functions.ttcn" relativeURI="src/LoadGen/EPTF_MobileL3_LGen_UserExtension_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_MobileL3_Logging_Definitions.ttcn" relativeURI="src/Logger/EPTF_MobileL3_Logging_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_MobileL3_Logging_Functions.ttcn" relativeURI="src/Logger/EPTF_MobileL3_Logging_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_Applib_MobileL3_CNL113609</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_RANAP_CNL113647.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_RANAP_CNL113647.tpd new file mode 100644 index 000000000..695e5e2f8 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_RANAP_CNL113647.tpd @@ -0,0 +1,49 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: EPTF_Applib_RANAP_CNL113647.tpd + Description: tpd project file + Rev: R1A07 + Prodnr: CNL 113 647 + Updated: 2013-01-25 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_Applib_RANAP_CNL113647</ProjectName> + <ReferencedProjects> + <ReferencedProject name="RANAP_v9.5.0_CNL113718_demo_RNC_to_RNC" projectLocationURI="../../ProtocolModules/RANAP_v9.5.0_CNL113718/demo/RNC_to_RNC/RANAP_v9.5.0_CNL113718_demo_RNC_to_RNC.tpd"/> + <ReferencedProject name="EPTF_CommonTransport_SCCP_CNL113610" projectLocationURI="../EPTF_CommonTransport_SCCP_CNL113610/EPTF_CommonTransport_SCCP_CNL113610.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_RANAP_LGen_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_RANAP_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_RANAP_LGen_Functions.ttcn" relativeURI="src/LoadGen/EPTF_RANAP_LGen_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_RANAP_LGen_UserExtension_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_RANAP_LGen_UserExtension_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_RANAP_LGen_UserExtension_Functions.ttcn" relativeURI="src/LoadGen/EPTF_RANAP_LGen_UserExtension_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_RANAP_Logging_Definitions.ttcn" relativeURI="src/Logger/EPTF_RANAP_Logging_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_RANAP_Logging_Functions.ttcn" relativeURI="src/Logger/EPTF_RANAP_Logging_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_Applib_RANAP_CNL113647</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_SDP_CNL113744.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_SDP_CNL113744.tpd new file mode 100644 index 000000000..9f55a652f --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_SDP_CNL113744.tpd @@ -0,0 +1,94 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: EPTF_Applib_SDP_CNL113744.tpd + Description: tpd project file + Rev: R1A03 + Prodnr: CNL 113 744 + Updated: 2013-02-21 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_Applib_SDP_CNL113744</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Base" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Base/EPTF_CLL_Base.tpd"/> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Common/EPTF_CLL_Common.tpd"/> + <ReferencedProject name="EPTF_CLL_DataSource" projectLocationURI="../EPTF_Core_Library_CNL113512/src/DataSource/EPTF_CLL_DataSource.tpd"/> + <ReferencedProject name="EPTF_CLL_FreeBusyQueue" projectLocationURI="../EPTF_Core_Library_CNL113512/src/FreeBusyQueue/EPTF_CLL_FBQ.tpd"/> + <ReferencedProject name="EPTF_CLL_HashMap" projectLocationURI="../EPTF_Core_Library_CNL113512/src/HashMap/EPTF_CLL_HashMap.tpd"/> + <ReferencedProject name="EPTF_CLL_LGenBase" projectLocationURI="../EPTF_Core_Library_CNL113512/src/LGenBase/EPTF_CLL_LGenBase.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Logging/EPTF_CLL_Logging.tpd"/> + <ReferencedProject name="EPTF_CLL_NQueue" projectLocationURI="../EPTF_Core_Library_CNL113512/src/NQueue/EPTF_CLL_NQueue.tpd"/> + <ReferencedProject name="EPTF_CLL_RandomNArray" projectLocationURI="../EPTF_Core_Library_CNL113512/src/RandomNArray/EPTF_CLL_RandomNArray.tpd"/> + <ReferencedProject name="EPTF_CLL_RedBlackTree" projectLocationURI="../EPTF_Core_Library_CNL113512/src/RedBlackTree/EPTF_CLL_RedBlackTree.tpd"/> + <ReferencedProject name="EPTF_CLL_Scheduler" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Scheduler/EPTF_CLL_Scheduler.tpd"/> + <ReferencedProject name="EPTF_CLL_Semaphore" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Semaphore/EPTF_CLL_Semaphore.tpd"/> + <ReferencedProject name="EPTF_CLL_StatHandler" projectLocationURI="../EPTF_Core_Library_CNL113512/src/StatHandler/EPTF_CLL_StatHandler.tpd"/> + <ReferencedProject name="EPTF_CLL_StatMeasure" projectLocationURI="../EPTF_Core_Library_CNL113512/src/StatMeasure/EPTF_CLL_StatMeasure.tpd"/> + <ReferencedProject name="EPTF_CLL_Variable" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Variable/EPTF_CLL_Variable.tpd"/> + <ReferencedProject name="SDP_CNL113353" projectLocationURI="../../ProtocolModules/SDP_CNL113353/SDP_CNL113353.tpd"/> + <ReferencedProject name="TCCUsefulFunctions_CNL113472_Common" projectLocationURI="../TCCUsefulFunctions_CNL113472/TCCUsefulFunctions_CNL113472_Common.tpd"/> + <ReferencedProject name="TCCUsefulFunctions_CNL113472_Maths" projectLocationURI="../TCCUsefulFunctions_CNL113472/TCCUsefulFunctions_CNL113472_Maths.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="demo" relativeURI="demo"/> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="doc/apidoc" relativeURI="doc/apidoc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + <FolderResource projectRelativePath="src/LoadGen" relativeURI="src/LoadGen"/> + <FolderResource projectRelativePath="test" relativeURI="test"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/EPTF_Applib_SDP_CNL113744_FS.pdf" relativeURI="doc/EPTF_Applib_SDP_CNL113744_FS.pdf"/> + <FileResource projectRelativePath="doc/EPTF_Applib_SDP_CNL113744_PRI.pdf" relativeURI="doc/EPTF_Applib_SDP_CNL113744_PRI.pdf"/> + <FileResource projectRelativePath="doc/EPTF_Applib_SDP_CNL113744_UG.pdf" relativeURI="doc/EPTF_Applib_SDP_CNL113744_UG.pdf"/> + <FileResource projectRelativePath="src/LoadGen/EPTF_SDP_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_SDP_Definitions.ttcn"/> + <FileResource projectRelativePath="src/LoadGen/EPTF_SDP_Functions.ttcn" relativeURI="src/LoadGen/EPTF_SDP_Functions.ttcn"/> + <FileResource projectRelativePath="src/LoadGen/EPTF_SDP_LoadGen.grp" relativeURI="src/LoadGen/EPTF_SDP_LoadGen.grp"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_Applib_SDP_CNL113744</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>demo</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + <FolderResource> + <FolderPath>test</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_SGsAP_CNL113723.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_SGsAP_CNL113723.tpd new file mode 100644 index 000000000..f29b8b62e --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_SGsAP_CNL113723.tpd @@ -0,0 +1,135 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: EPTF_Applib_SGsAP_CNL113723.tpd + Description: tpd project file + Rev: R1A03 + Prodnr: CNL 113 723 + Updated: 2012-10-01 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_Applib_SGsAP_CNL113723</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Base" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Base/EPTF_CLL_Base.tpd"/> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Common/EPTF_CLL_Common.tpd"/> + <ReferencedProject name="EPTF_CLL_ExecCtrl" projectLocationURI="../EPTF_Core_Library_CNL113512/src/ExecCtrl/EPTF_CLL_ExecCtrl.tpd"/> + <ReferencedProject name="EPTF_CLL_ExecCtrl_UI" projectLocationURI="../EPTF_Core_Library_CNL113512/src/ExecCtrl/EPTF_CLL_ExecCtrl_UI.tpd"/> + <ReferencedProject name="EPTF_CLL_LoadRegulator" projectLocationURI="../EPTF_Core_Library_CNL113512/src/LoadRegulator/EPTF_CLL_LoadRegulator.tpd"/> + <ReferencedProject name="EPTF_CLL_LoadRegulatorUI" projectLocationURI="../EPTF_Core_Library_CNL113512/src/LoadRegulator/EPTF_CLL_LoadRegulatorUI.tpd"/> + <ReferencedProject name="EPTF_CLL_NQueue" projectLocationURI="../EPTF_Core_Library_CNL113512/src/NQueue/EPTF_CLL_NQueue.tpd"/> + <ReferencedProject name="EPTF_CLL_Transport_CommPortIPL4" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_Transport_CommPortIPL4.tpd"/> + <ReferencedProject name="EPTF_CLL_Transport_MessageBufferManager" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_Transport_MessageBufferManager.tpd"/> + <ReferencedProject name="EPTF_CLL_TransportRouting" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_TransportRouting.tpd"/> + <ReferencedProject name="SGsAP_v9.0.0_CNL113684" projectLocationURI="../../ProtocolModules/SGsAP_v9.0.0_CNL113684/SGsAP_v9.0.0_CNL113684.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="doc/apidoc" relativeURI="doc/apidoc"/> + <FolderResource projectRelativePath="doc/apidoc/files" relativeURI="doc/apidoc/files"/> + <FolderResource projectRelativePath="doc/apidoc/files/LoadGen" relativeURI="doc/apidoc/files/LoadGen"/> + <FolderResource projectRelativePath="doc/apidoc/files/Logger" relativeURI="doc/apidoc/files/Logger"/> + <FolderResource projectRelativePath="doc/apidoc/files/Transport" relativeURI="doc/apidoc/files/Transport"/> + <FolderResource projectRelativePath="doc/apidoc/index" relativeURI="doc/apidoc/index"/> + <FolderResource projectRelativePath="doc/apidoc/javascript" relativeURI="doc/apidoc/javascript"/> + <FolderResource projectRelativePath="doc/apidoc/search" relativeURI="doc/apidoc/search"/> + <FolderResource projectRelativePath="doc/apidoc/styles" relativeURI="doc/apidoc/styles"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + <FolderResource projectRelativePath="src/LoadGen" relativeURI="src/LoadGen"/> + <FolderResource projectRelativePath="src/Logger" relativeURI="src/Logger"/> + <FolderResource projectRelativePath="src/Transport" relativeURI="src/Transport"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/EPTF_Applib_SGsAP_CNL113723_FS.pdf" relativeURI="doc/EPTF_Applib_SGsAP_CNL113723_FS.pdf"/> + <FileResource projectRelativePath="doc/EPTF_Applib_SGsAP_CNL113723_PRI.pdf" relativeURI="doc/EPTF_Applib_SGsAP_CNL113723_PRI.pdf"/> + <FileResource projectRelativePath="doc/EPTF_Applib_SGsAP_CNL113723_UG.pdf" relativeURI="doc/EPTF_Applib_SGsAP_CNL113723_UG.pdf"/> + <FileResource projectRelativePath="doc/apidoc/files/LoadGen/EPTF_SGsAP_LGen_Definitions-ttcn.html" relativeURI="doc/apidoc/files/LoadGen/EPTF_SGsAP_LGen_Definitions-ttcn.html"/> + <FileResource projectRelativePath="doc/apidoc/files/LoadGen/EPTF_SGsAP_LGen_Functions-ttcn.html" relativeURI="doc/apidoc/files/LoadGen/EPTF_SGsAP_LGen_Functions-ttcn.html"/> + <FileResource projectRelativePath="doc/apidoc/files/LoadGen/EPTF_SGsAP_UIHandler_Functions-ttcn.html" relativeURI="doc/apidoc/files/LoadGen/EPTF_SGsAP_UIHandler_Functions-ttcn.html"/> + <FileResource projectRelativePath="doc/apidoc/files/Logger/EPTF_SGsAP_Logger_Definitions-ttcn.html" relativeURI="doc/apidoc/files/Logger/EPTF_SGsAP_Logger_Definitions-ttcn.html"/> + <FileResource projectRelativePath="doc/apidoc/files/Logger/EPTF_SGsAP_Logger_Functions-ttcn.html" relativeURI="doc/apidoc/files/Logger/EPTF_SGsAP_Logger_Functions-ttcn.html"/> + <FileResource projectRelativePath="doc/apidoc/files/Logger/EPTF_SGsAP_Logging_Definitions-ttcn.html" relativeURI="doc/apidoc/files/Logger/EPTF_SGsAP_Logging_Definitions-ttcn.html"/> + <FileResource projectRelativePath="doc/apidoc/files/Logger/EPTF_SGsAP_Logging_Functions-ttcn.html" relativeURI="doc/apidoc/files/Logger/EPTF_SGsAP_Logging_Functions-ttcn.html"/> + <FileResource projectRelativePath="doc/apidoc/files/Transport/EPTF_SGsAP_Transport_Definitions-ttcn.html" relativeURI="doc/apidoc/files/Transport/EPTF_SGsAP_Transport_Definitions-ttcn.html"/> + <FileResource projectRelativePath="doc/apidoc/files/Transport/EPTF_SGsAP_Transport_Functions-ttcn.html" relativeURI="doc/apidoc/files/Transport/EPTF_SGsAP_Transport_Functions-ttcn.html"/> + <FileResource projectRelativePath="doc/apidoc/index.html" relativeURI="doc/apidoc/index.html"/> + <FileResource projectRelativePath="doc/apidoc/index/Altsteps.html" relativeURI="doc/apidoc/index/Altsteps.html"/> + <FileResource projectRelativePath="doc/apidoc/index/Constants.html" relativeURI="doc/apidoc/index/Constants.html"/> + <FileResource projectRelativePath="doc/apidoc/index/Files.html" relativeURI="doc/apidoc/index/Files.html"/> + <FileResource projectRelativePath="doc/apidoc/index/Functions.html" relativeURI="doc/apidoc/index/Functions.html"/> + <FileResource projectRelativePath="doc/apidoc/index/General.html" relativeURI="doc/apidoc/index/General.html"/> + <FileResource projectRelativePath="doc/apidoc/index/General2.html" relativeURI="doc/apidoc/index/General2.html"/> + <FileResource projectRelativePath="doc/apidoc/index/General3.html" relativeURI="doc/apidoc/index/General3.html"/> + <FileResource projectRelativePath="doc/apidoc/index/Types.html" relativeURI="doc/apidoc/index/Types.html"/> + <FileResource projectRelativePath="doc/apidoc/javascript/main.js" relativeURI="doc/apidoc/javascript/main.js"/> + <FileResource projectRelativePath="doc/apidoc/javascript/searchdata.js" relativeURI="doc/apidoc/javascript/searchdata.js"/> + <FileResource projectRelativePath="doc/apidoc/menu.html" relativeURI="doc/apidoc/menu.html"/> + <FileResource projectRelativePath="doc/apidoc/search/AltstepsA.html" relativeURI="doc/apidoc/search/AltstepsA.html"/> + <FileResource projectRelativePath="doc/apidoc/search/ConstantsC.html" relativeURI="doc/apidoc/search/ConstantsC.html"/> + <FileResource projectRelativePath="doc/apidoc/search/ConstantsF.html" relativeURI="doc/apidoc/search/ConstantsF.html"/> + <FileResource projectRelativePath="doc/apidoc/search/ConstantsI.html" relativeURI="doc/apidoc/search/ConstantsI.html"/> + <FileResource projectRelativePath="doc/apidoc/search/ConstantsP.html" relativeURI="doc/apidoc/search/ConstantsP.html"/> + <FileResource projectRelativePath="doc/apidoc/search/ConstantsS.html" relativeURI="doc/apidoc/search/ConstantsS.html"/> + <FileResource projectRelativePath="doc/apidoc/search/FilesE.html" relativeURI="doc/apidoc/search/FilesE.html"/> + <FileResource projectRelativePath="doc/apidoc/search/FunctionsF.html" relativeURI="doc/apidoc/search/FunctionsF.html"/> + <FileResource projectRelativePath="doc/apidoc/search/GeneralA.html" relativeURI="doc/apidoc/search/GeneralA.html"/> + <FileResource projectRelativePath="doc/apidoc/search/GeneralC.html" relativeURI="doc/apidoc/search/GeneralC.html"/> + <FileResource projectRelativePath="doc/apidoc/search/GeneralE.html" relativeURI="doc/apidoc/search/GeneralE.html"/> + <FileResource projectRelativePath="doc/apidoc/search/GeneralF.html" relativeURI="doc/apidoc/search/GeneralF.html"/> + <FileResource projectRelativePath="doc/apidoc/search/GeneralI.html" relativeURI="doc/apidoc/search/GeneralI.html"/> + <FileResource projectRelativePath="doc/apidoc/search/GeneralL.html" relativeURI="doc/apidoc/search/GeneralL.html"/> + <FileResource projectRelativePath="doc/apidoc/search/GeneralM.html" relativeURI="doc/apidoc/search/GeneralM.html"/> + <FileResource projectRelativePath="doc/apidoc/search/GeneralP.html" relativeURI="doc/apidoc/search/GeneralP.html"/> + <FileResource projectRelativePath="doc/apidoc/search/GeneralR.html" relativeURI="doc/apidoc/search/GeneralR.html"/> + <FileResource projectRelativePath="doc/apidoc/search/GeneralS.html" relativeURI="doc/apidoc/search/GeneralS.html"/> + <FileResource projectRelativePath="doc/apidoc/search/GeneralT.html" relativeURI="doc/apidoc/search/GeneralT.html"/> + <FileResource projectRelativePath="doc/apidoc/search/NoResults.html" relativeURI="doc/apidoc/search/NoResults.html"/> + <FileResource projectRelativePath="doc/apidoc/search/TypesE.html" relativeURI="doc/apidoc/search/TypesE.html"/> + <FileResource projectRelativePath="doc/apidoc/styles/1.css" relativeURI="doc/apidoc/styles/1.css"/> + <FileResource projectRelativePath="doc/apidoc/styles/2.css" relativeURI="doc/apidoc/styles/2.css"/> + <FileResource projectRelativePath="doc/apidoc/styles/main.css" relativeURI="doc/apidoc/styles/main.css"/> + <FileResource projectRelativePath="src/EPTF_Applib_SGsAP.grp" relativeURI="src/EPTF_Applib_SGsAP.grp"/> + <FileResource projectRelativePath="src/LoadGen/EPTF_SGsAP_LGen_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_SGsAP_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="src/LoadGen/EPTF_SGsAP_LGen_Functions.ttcn" relativeURI="src/LoadGen/EPTF_SGsAP_LGen_Functions.ttcn"/> + <FileResource projectRelativePath="src/LoadGen/EPTF_SGsAP_UIHandler_Functions.ttcn" relativeURI="src/LoadGen/EPTF_SGsAP_UIHandler_Functions.ttcn"/> + <FileResource projectRelativePath="src/Logger/EPTF_SGsAP_Logger_Definitions.ttcn" relativeURI="src/Logger/EPTF_SGsAP_Logger_Definitions.ttcn"/> + <FileResource projectRelativePath="src/Logger/EPTF_SGsAP_Logger_Functions.ttcn" relativeURI="src/Logger/EPTF_SGsAP_Logger_Functions.ttcn"/> + <FileResource projectRelativePath="src/Logger/EPTF_SGsAP_Logging_Definitions.ttcn" relativeURI="src/Logger/EPTF_SGsAP_Logging_Definitions.ttcn"/> + <FileResource projectRelativePath="src/Logger/EPTF_SGsAP_Logging_Functions.ttcn" relativeURI="src/Logger/EPTF_SGsAP_Logging_Functions.ttcn"/> + <FileResource projectRelativePath="src/Transport/EPTF_SGsAP_Transport_Definitions.ttcn" relativeURI="src/Transport/EPTF_SGsAP_Transport_Definitions.ttcn"/> + <FileResource projectRelativePath="src/Transport/EPTF_SGsAP_Transport_Functions.ttcn" relativeURI="src/Transport/EPTF_SGsAP_Transport_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_Applib_SGsAP_CNL113723</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_SIP_CNL113522.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_SIP_CNL113522.tpd new file mode 100644 index 000000000..0f69e60ee --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_SIP_CNL113522.tpd @@ -0,0 +1,87 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: EPTF_Applib_SIP_CNL113522.tpd + Description: tpd project file + Rev: R12A03 + Prodnr: CNL 113 522 + Updated: 2013-04-04 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_Applib_SIP_CNL113522</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Base" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Base/EPTF_CLL_Base.tpd"/> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Common/EPTF_CLL_Common.tpd"/> + <ReferencedProject name="EPTF_CLL_FreeBusyQueue" projectLocationURI="../EPTF_Core_Library_CNL113512/src/FreeBusyQueue/EPTF_CLL_FBQ.tpd"/> + <ReferencedProject name="EPTF_CLL_LGenBase" projectLocationURI="../EPTF_Core_Library_CNL113512/src/LGenBase/EPTF_CLL_LGenBase.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Logging/EPTF_CLL_Logging.tpd"/> + <ReferencedProject name="EPTF_CLL_RedBlackTree" projectLocationURI="../EPTF_Core_Library_CNL113512/src/RedBlackTree/EPTF_CLL_RedBlackTree.tpd"/> + <ReferencedProject name="EPTF_CLL_Scheduler" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Scheduler/EPTF_CLL_Scheduler.tpd"/> + <ReferencedProject name="EPTF_CLL_Transport" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_Transport.tpd"/> + <ReferencedProject name="EPTF_CLL_TransportRouting" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_TransportRouting.tpd"/> + <ReferencedProject name="IPL4asp_CNL113531" projectLocationURI="../../TestPorts/IPL4asp_CNL113531/IPL4asp_CNL113531.tpd"/> + <ReferencedProject name="MIME_CNL113352" projectLocationURI="../../ProtocolModules/MIME_CNL113352/MIME_CNL113352.tpd"/> + <ReferencedProject name="SDP_CNL113353" projectLocationURI="../../ProtocolModules/SDP_CNL113353/SDP_CNL113353.tpd"/> + <ReferencedProject name="SIPmsg_CNL113319" projectLocationURI="../../TestPorts/SIPmsg_CNL113319/SIPmsg_CNL113319.tpd"/> + <ReferencedProject name="Socket_API_CNL113686" projectLocationURI="../../TestPorts/Common_Components/Socket_API_CNL113686/Socket_API_CNL113686.tpd"/> + <ReferencedProject name="TCCUsefulFunctions_CNL113472_IPsec" projectLocationURI="../TCCUsefulFunctions_CNL113472/TCCUsefulFunctions_CNL113472_IPsec.tpd"/> + <ReferencedProject name="TCCUsefulFunctions_CNL113472_Security" projectLocationURI="../TCCUsefulFunctions_CNL113472/TCCUsefulFunctions_CNL113472_Security.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_SIP_BodyHandler_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_SIP_BodyHandler_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_SIP_BodyHandler_ExternalFunctions.cc" relativeURI="src/LoadGen/EPTF_SIP_BodyHandler_ExternalFunctions.cc"/> + <FileResource projectRelativePath="EPTF_SIP_BodyHandler_Functions.ttcn" relativeURI="src/LoadGen/EPTF_SIP_BodyHandler_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_SIP_Common_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_SIP_Common_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_SIP_Common_Functions.ttcn" relativeURI="src/LoadGen/EPTF_SIP_Common_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_SIP_CreateRemove_Functions.ttcn" relativeURI="src/LoadGen/EPTF_SIP_CreateRemove_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_SIP_Dialog_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_SIP_Dialog_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_SIP_Dialog_Functions.ttcn" relativeURI="src/LoadGen/EPTF_SIP_Dialog_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_SIP_EventNotification_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_SIP_EventNotification_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_SIP_EventNotification_Functions.ttcn" relativeURI="src/LoadGen/EPTF_SIP_EventNotification_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_SIP_Events.ttcn" relativeURI="src/LoadGen/EPTF_SIP_Events.ttcn"/> + <FileResource projectRelativePath="EPTF_SIP_LGen_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_SIP_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_SIP_LGen_ExternalFunctions.cc" relativeURI="src/LoadGen/EPTF_SIP_LGen_ExternalFunctions.cc"/> + <FileResource projectRelativePath="EPTF_SIP_LGen_Functions.ttcn" relativeURI="src/LoadGen/EPTF_SIP_LGen_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_SIP_Logger_Definitions.ttcn" relativeURI="src/Logger/EPTF_SIP_Logger_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_SIP_Logger_Functions.ttcn" relativeURI="src/Logger/EPTF_SIP_Logger_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_SIP_MessageCreator_Functions.ttcn" relativeURI="src/LoadGen/EPTF_SIP_MessageCreator_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_SIP_MessageHandler_Functions.ttcn" relativeURI="src/LoadGen/EPTF_SIP_MessageHandler_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_SIP_Publish_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_SIP_Publish_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_SIP_Publish_Functions.ttcn" relativeURI="src/LoadGen/EPTF_SIP_Publish_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_SIP_StateHandler_Functions.ttcn" relativeURI="src/LoadGen/EPTF_SIP_StateHandler_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_SIP_Templates.ttcn" relativeURI="src/LoadGen/EPTF_SIP_Templates.ttcn"/> + <FileResource projectRelativePath="EPTF_SIP_TestSteps.ttcn" relativeURI="src/LoadGen/EPTF_SIP_TestSteps.ttcn"/> + <FileResource projectRelativePath="EPTF_SIP_Transaction_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_SIP_Transaction_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_SIP_Transaction_Functions.ttcn" relativeURI="src/LoadGen/EPTF_SIP_Transaction_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_SIP_Transport_Definitions.ttcn" relativeURI="src/Transport/EPTF_SIP_Transport_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_SIP_Transport_Functions.ttcn" relativeURI="src/Transport/EPTF_SIP_Transport_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_SIP_UserDatabase_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_SIP_UserDatabase_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_SIP_UserDatabase_Functions.ttcn" relativeURI="src/LoadGen/EPTF_SIP_UserDatabase_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_Applib_SIP_CNL113522</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_SOAP_CNL113620.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_SOAP_CNL113620.tpd new file mode 100644 index 000000000..3e03fb8aa --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_SOAP_CNL113620.tpd @@ -0,0 +1,98 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: EPTF_Applib_SOAP_CNL113620.tpd + Description: tpd project file + Rev: R2C01 + Prodnr: CNL 113 620 + Updated: 2012-10-10 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_Applib_SOAP_CNL113620</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_Applib_HTTP_CNL113618" projectLocationURI="../EPTF_Applib_HTTP_CNL113618/EPTF_Applib_HTTP_CNL113618.tpd"/> + <ReferencedProject name="EPTF_CLL_ExecCtrl" projectLocationURI="../EPTF_Core_Library_CNL113512/src/ExecCtrl/EPTF_CLL_ExecCtrl.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="doc/apidoc" relativeURI="doc/apidoc"/> + <FolderResource projectRelativePath="doc/apidoc/files" relativeURI="doc/apidoc/files"/> + <FolderResource projectRelativePath="doc/apidoc/files/LoadGen" relativeURI="doc/apidoc/files/LoadGen"/> + <FolderResource projectRelativePath="doc/apidoc/files/Logger" relativeURI="doc/apidoc/files/Logger"/> + <FolderResource projectRelativePath="doc/apidoc/files/Transport" relativeURI="doc/apidoc/files/Transport"/> + <FolderResource projectRelativePath="doc/apidoc/index" relativeURI="doc/apidoc/index"/> + <FolderResource projectRelativePath="doc/apidoc/javascript" relativeURI="doc/apidoc/javascript"/> + <FolderResource projectRelativePath="doc/apidoc/styles" relativeURI="doc/apidoc/styles"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + <FolderResource projectRelativePath="src/LoadGen" relativeURI="src/LoadGen"/> + <FolderResource projectRelativePath="src/Logger" relativeURI="src/Logger"/> + <FolderResource projectRelativePath="src/Transport" relativeURI="src/Transport"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/EPTF_Applib_SOAP_CNL113620_FS.pdf" relativeURI="doc/EPTF_Applib_SOAP_CNL113620_FS.pdf"/> + <FileResource projectRelativePath="doc/EPTF_Applib_SOAP_CNL113620_PRI.pdf" relativeURI="doc/EPTF_Applib_SOAP_CNL113620_PRI.pdf"/> + <FileResource projectRelativePath="doc/EPTF_Applib_SOAP_CNL113620_UG.pdf" relativeURI="doc/EPTF_Applib_SOAP_CNL113620_UG.pdf"/> + <FileResource projectRelativePath="doc/apidoc/files/LoadGen/EPTF_SOAP_Definitions-ttcn.html" relativeURI="doc/apidoc/files/LoadGen/EPTF_SOAP_Definitions-ttcn.html"/> + <FileResource projectRelativePath="doc/apidoc/files/LoadGen/EPTF_SOAP_Functions-ttcn.html" relativeURI="doc/apidoc/files/LoadGen/EPTF_SOAP_Functions-ttcn.html"/> + <FileResource projectRelativePath="doc/apidoc/files/Logger/EPTF_SOAP_Logger_Definitions-ttcn.html" relativeURI="doc/apidoc/files/Logger/EPTF_SOAP_Logger_Definitions-ttcn.html"/> + <FileResource projectRelativePath="doc/apidoc/files/Logger/EPTF_SOAP_Logger_Functions-ttcn.html" relativeURI="doc/apidoc/files/Logger/EPTF_SOAP_Logger_Functions-ttcn.html"/> + <FileResource projectRelativePath="doc/apidoc/files/Transport/EPTF_SOAP_SOAPOverHTTP_Definitions-ttcn.html" relativeURI="doc/apidoc/files/Transport/EPTF_SOAP_SOAPOverHTTP_Definitions-ttcn.html"/> + <FileResource projectRelativePath="doc/apidoc/files/Transport/EPTF_SOAP_SOAPOverHTTP_Functions-ttcn.html" relativeURI="doc/apidoc/files/Transport/EPTF_SOAP_SOAPOverHTTP_Functions-ttcn.html"/> + <FileResource projectRelativePath="doc/apidoc/index.html" relativeURI="doc/apidoc/index.html"/> + <FileResource projectRelativePath="doc/apidoc/index/Constants.html" relativeURI="doc/apidoc/index/Constants.html"/> + <FileResource projectRelativePath="doc/apidoc/index/Files.html" relativeURI="doc/apidoc/index/Files.html"/> + <FileResource projectRelativePath="doc/apidoc/index/Functions.html" relativeURI="doc/apidoc/index/Functions.html"/> + <FileResource projectRelativePath="doc/apidoc/index/General.html" relativeURI="doc/apidoc/index/General.html"/> + <FileResource projectRelativePath="doc/apidoc/index/General2.html" relativeURI="doc/apidoc/index/General2.html"/> + <FileResource projectRelativePath="doc/apidoc/index/Templates.html" relativeURI="doc/apidoc/index/Templates.html"/> + <FileResource projectRelativePath="doc/apidoc/index/Types.html" relativeURI="doc/apidoc/index/Types.html"/> + <FileResource projectRelativePath="doc/apidoc/javascript/main.js" relativeURI="doc/apidoc/javascript/main.js"/> + <FileResource projectRelativePath="doc/apidoc/menu.html" relativeURI="doc/apidoc/menu.html"/> + <FileResource projectRelativePath="doc/apidoc/styles/1.css" relativeURI="doc/apidoc/styles/1.css"/> + <FileResource projectRelativePath="doc/apidoc/styles/2.css" relativeURI="doc/apidoc/styles/2.css"/> + <FileResource projectRelativePath="doc/apidoc/styles/main.css" relativeURI="doc/apidoc/styles/main.css"/> + <FileResource projectRelativePath="src/EPTF_SOAP_All.grp" relativeURI="src/EPTF_SOAP_All.grp"/> + <FileResource projectRelativePath="src/LoadGen/EPTF_SOAP_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_SOAP_Definitions.ttcn"/> + <FileResource projectRelativePath="src/LoadGen/EPTF_SOAP_Functions.ttcn" relativeURI="src/LoadGen/EPTF_SOAP_Functions.ttcn"/> + <FileResource projectRelativePath="src/LoadGen/EPTF_SOAP_LoadGen.grp" relativeURI="src/LoadGen/EPTF_SOAP_LoadGen.grp"/> + <FileResource projectRelativePath="src/Logger/EPTF_SOAP_Logger.grp" relativeURI="src/Logger/EPTF_SOAP_Logger.grp"/> + <FileResource projectRelativePath="src/Logger/EPTF_SOAP_Logger_Definitions.ttcn" relativeURI="src/Logger/EPTF_SOAP_Logger_Definitions.ttcn"/> + <FileResource projectRelativePath="src/Logger/EPTF_SOAP_Logger_Functions.ttcn" relativeURI="src/Logger/EPTF_SOAP_Logger_Functions.ttcn"/> + <FileResource projectRelativePath="src/Transport/EPTF_SOAP_SOAPOverHTTP_Definitions.ttcn" relativeURI="src/Transport/EPTF_SOAP_SOAPOverHTTP_Definitions.ttcn"/> + <FileResource projectRelativePath="src/Transport/EPTF_SOAP_SOAPOverHTTP_Functions.ttcn" relativeURI="src/Transport/EPTF_SOAP_SOAPOverHTTP_Functions.ttcn"/> + <FileResource projectRelativePath="src/Transport/EPTF_SOAP_Transport.grp" relativeURI="src/Transport/EPTF_SOAP_Transport.grp"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_Applib_SOAP_CNL113620</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_SRVCC_CNL113741.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_SRVCC_CNL113741.tpd new file mode 100644 index 000000000..65fe9b3f7 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_SRVCC_CNL113741.tpd @@ -0,0 +1,81 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: EPTF_Applib_SRVCC_CNL113741.tpd + Description: tpd project file + Rev: R1A02 + Prodnr: CNL 113 741 + Updated: 2012-10-01 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_Applib_SRVCC_CNL113741</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Base" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Base/EPTF_CLL_Base.tpd"/> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Common/EPTF_CLL_Common.tpd"/> + <ReferencedProject name="EPTF_CLL_ExecCtrl" projectLocationURI="../EPTF_Core_Library_CNL113512/src/ExecCtrl/EPTF_CLL_ExecCtrl.tpd"/> + <ReferencedProject name="EPTF_CLL_ExecCtrl_UI" projectLocationURI="../EPTF_Core_Library_CNL113512/src/ExecCtrl/EPTF_CLL_ExecCtrl_UI.tpd"/> + <ReferencedProject name="EPTF_CLL_LoadRegulator" projectLocationURI="../EPTF_Core_Library_CNL113512/src/LoadRegulator/EPTF_CLL_LoadRegulator.tpd"/> + <ReferencedProject name="EPTF_CLL_LoadRegulatorUI" projectLocationURI="../EPTF_Core_Library_CNL113512/src/LoadRegulator/EPTF_CLL_LoadRegulatorUI.tpd"/> + <ReferencedProject name="EPTF_CLL_NQueue" projectLocationURI="../EPTF_Core_Library_CNL113512/src/NQueue/EPTF_CLL_NQueue.tpd"/> + <ReferencedProject name="EPTF_CLL_Transport_CommPortIPL4" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_Transport_CommPortIPL4.tpd"/> + <ReferencedProject name="EPTF_CLL_Transport_MessageBufferManager" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_Transport_MessageBufferManager.tpd"/> + <ReferencedProject name="EPTF_CLL_TransportRouting" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_TransportRouting.tpd"/> + <ReferencedProject name="GTPv2_Sv_v9.7.0_CNL113730" projectLocationURI="../../ProtocolModules/GTPv2_Sv_v9.7.0_CNL113730/GTPv2_Sv_v9.7.0_CNL113730.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + <FolderResource projectRelativePath="src/LoadGen" relativeURI="src/LoadGen"/> + <FolderResource projectRelativePath="src/Logger" relativeURI="src/Logger"/> + <FolderResource projectRelativePath="src/Transport" relativeURI="src/Transport"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/EPTF_Applib_SRVCC_CNL113741_FS.pdf" relativeURI="doc/EPTF_Applib_SRVCC_CNL113741_FS.pdf"/> + <FileResource projectRelativePath="doc/EPTF_Applib_SRVCC_CNL113741_PRI.pdf" relativeURI="doc/EPTF_Applib_SRVCC_CNL113741_PRI.pdf"/> + <FileResource projectRelativePath="doc/EPTF_Applib_SRVCC_CNL113741_UG.pdf" relativeURI="doc/EPTF_Applib_SRVCC_CNL113741_UG.pdf"/> + <FileResource projectRelativePath="src/EPTF_Applib_SRVCC.grp" relativeURI="src/EPTF_Applib_SRVCC.grp"/> + <FileResource projectRelativePath="src/LoadGen/EPTF_SRVCC_LGen_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_SRVCC_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="src/LoadGen/EPTF_SRVCC_LGen_Functions.ttcn" relativeURI="src/LoadGen/EPTF_SRVCC_LGen_Functions.ttcn"/> + <FileResource projectRelativePath="src/LoadGen/EPTF_SRVCC_UIHandler_Functions.ttcn" relativeURI="src/LoadGen/EPTF_SRVCC_UIHandler_Functions.ttcn"/> + <FileResource projectRelativePath="src/Logger/EPTF_SRVCC_Logger_Definitions.ttcn" relativeURI="src/Logger/EPTF_SRVCC_Logger_Definitions.ttcn"/> + <FileResource projectRelativePath="src/Logger/EPTF_SRVCC_Logger_Functions.ttcn" relativeURI="src/Logger/EPTF_SRVCC_Logger_Functions.ttcn"/> + <FileResource projectRelativePath="src/Logger/EPTF_SRVCC_Logging_Definitions.ttcn" relativeURI="src/Logger/EPTF_SRVCC_Logging_Definitions.ttcn"/> + <FileResource projectRelativePath="src/Logger/EPTF_SRVCC_Logging_Functions.ttcn" relativeURI="src/Logger/EPTF_SRVCC_Logging_Functions.ttcn"/> + <FileResource projectRelativePath="src/Transport/EPTF_SRVCC_Transport_Definitions.ttcn" relativeURI="src/Transport/EPTF_SRVCC_Transport_Definitions.ttcn"/> + <FileResource projectRelativePath="src/Transport/EPTF_SRVCC_Transport_Functions.ttcn" relativeURI="src/Transport/EPTF_SRVCC_Transport_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_Applib_SRVCC_CNL113741</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_STUN_CNL113645.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_STUN_CNL113645.tpd new file mode 100644 index 000000000..a091c1ddc --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_STUN_CNL113645.tpd @@ -0,0 +1,119 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: EPTF_Applib_STUN_CNL113645.tpd + Description: tpd project file + Rev: R1B02 + Prodnr: CNL 113 645 + Updated: 2012-03-06 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_Applib_STUN_CNL113645</ProjectName> + <ReferencedProjects> + <ReferencedProject name="TCCUsefulFunctions_CNL113472_TitanSim" projectLocationURI="../TCCUsefulFunctions_CNL113472/TCCUsefulFunctions_CNL113472_TitanSim.tpd"/> + <ReferencedProject name="IPL4asp_CNL113531" projectLocationURI="../../TestPorts/IPL4asp_CNL113531/IPL4asp_CNL113531.tpd"/> + <ReferencedProject name="UDPasp_CNL113346" projectLocationURI="../../TestPorts/UDPasp_CNL113346/UDPasp_CNL113346.tpd"/> + <ReferencedProject name="XTDPasp_CNL113494" projectLocationURI="../../TestPorts/XTDPasp_CNL113494/XTDPasp_CNL113494.tpd"/> + <ReferencedProject name="TELNETasp_CNL113320" projectLocationURI="../../TestPorts/TELNETasp_CNL113320/TELNETasp_CNL113320.tpd"/> + <ReferencedProject name="XSDASN_CNL113474" projectLocationURI="../../ProtocolModules/XSDASN_CNL113474/XSDASN_CNL113474.tpd"/> + <ReferencedProject name="Abstract_Socket_CNL113384" projectLocationURI="../../TestPorts/Common_Components/Abstract_Socket_CNL113384/Abstract_Socket_CNL113384.tpd"/> + <ReferencedProject name="EPTF_CLL_Base" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Base/EPTF_CLL_Base.tpd"/> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Common/EPTF_CLL_Common.tpd"/> + <ReferencedProject name="EPTF_CLL_Transport_CommPortIPL4" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_Transport_CommPortIPL4.tpd"/> + <ReferencedProject name="EPTF_CLL_Transport_MessageBufferManager" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_Transport_MessageBufferManager.tpd"/> + <ReferencedProject name="EPTF_CLL_TransportRouting" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_TransportRouting.tpd"/> + <ReferencedProject name="EPTF_CLL_RedBlackTree" projectLocationURI="../EPTF_Core_Library_CNL113512/src/RedBlackTree/EPTF_CLL_RedBlackTree.tpd"/> + <ReferencedProject name="EPTF_CLL_FreeBusyQueue" projectLocationURI="../EPTF_Core_Library_CNL113512/src/FreeBusyQueue/EPTF_CLL_FBQ.tpd"/> + <ReferencedProject name="EPTF_CLL_HashMap" projectLocationURI="../EPTF_Core_Library_CNL113512/src/HashMap/EPTF_CLL_HashMap.tpd"/> + <ReferencedProject name="EPTF_CLL_Variable" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Variable/EPTF_CLL_Variable.tpd"/> + <ReferencedProject name="EPTF_CLL_Scheduler" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Scheduler/EPTF_CLL_Scheduler.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Logging/EPTF_CLL_Logging.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging_UI" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Logging/EPTF_CLL_Logging_UI.tpd"/> + <ReferencedProject name="EPTF_CLL_StatMeasure" projectLocationURI="../EPTF_Core_Library_CNL113512/src/StatMeasure/EPTF_CLL_StatMeasure.tpd"/> + <ReferencedProject name="EPTF_CLL_RandomNArray" projectLocationURI="../EPTF_Core_Library_CNL113512/src/RandomNArray/EPTF_CLL_RandomNArray.tpd"/> + <ReferencedProject name="EPTF_CLL_StatHandler" projectLocationURI="../EPTF_Core_Library_CNL113512/src/StatHandler/EPTF_CLL_StatHandler.tpd"/> + <ReferencedProject name="EPTF_CLL_Semaphore" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Semaphore/EPTF_CLL_Semaphore.tpd"/> + <ReferencedProject name="EPTF_CLL_LGenBase" projectLocationURI="../EPTF_Core_Library_CNL113512/src/LGenBase/EPTF_CLL_LGenBase.tpd"/> + <ReferencedProject name="EPTF_CLL_UIHandler" projectLocationURI="../EPTF_Core_Library_CNL113512/src/UIHandler/EPTF_CLL_UIHandler.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging_Server" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Logging/EPTF_CLL_Logging_Server.tpd"/> + <ReferencedProject name="STUN_CNL113644" projectLocationURI="../../ProtocolModules/STUN_CNL113644/STUN_CNL113644.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="doc/apidoc" relativeURI="doc/apidoc"/> + <FolderResource projectRelativePath="doc/apidoc/files" relativeURI="doc/apidoc/files"/> + <FolderResource projectRelativePath="doc/apidoc/files/LoadGen" relativeURI="doc/apidoc/files/LoadGen"/> + <FolderResource projectRelativePath="doc/apidoc/files/Logger" relativeURI="doc/apidoc/files/Logger"/> + <FolderResource projectRelativePath="doc/apidoc/files/Transport" relativeURI="doc/apidoc/files/Transport"/> + <FolderResource projectRelativePath="doc/apidoc/index" relativeURI="doc/apidoc/index"/> + <FolderResource projectRelativePath="doc/apidoc/javascript" relativeURI="doc/apidoc/javascript"/> + <FolderResource projectRelativePath="doc/apidoc/styles" relativeURI="doc/apidoc/styles"/> + </Folders> + <Files> + <FileResource projectRelativePath="EPTF_STUN_LGen_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_STUN_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_STUN_LGen_Functions.ttcn" relativeURI="src/LoadGen/EPTF_STUN_LGen_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_STUN_Logger_Definitions.ttcn" relativeURI="src/Logger/EPTF_STUN_Logger_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_STUN_Logger_Functions.ttcn" relativeURI="src/Logger/EPTF_STUN_Logger_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_STUN_Transport_Definitions.ttcn" relativeURI="src/Transport/EPTF_STUN_Transport_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_STUN_Transport_Functions.ttcn" relativeURI="src/Transport/EPTF_STUN_Transport_Functions.ttcn"/> + <FileResource projectRelativePath="doc/EPTF_Applib_STUN_CNL113645_FS.pdf" relativeURI="doc/EPTF_Applib_STUN_CNL113645_FS.pdf"/> + <FileResource projectRelativePath="doc/EPTF_Applib_STUN_CNL113645_PRI.pdf" relativeURI="doc/EPTF_Applib_STUN_CNL113645_PRI.pdf"/> + <FileResource projectRelativePath="doc/EPTF_Applib_STUN_CNL113645_UG.pdf" relativeURI="doc/EPTF_Applib_STUN_CNL113645_UG.pdf"/> + <FileResource projectRelativePath="doc/apidoc/Menu.txt" relativeURI="doc/apidoc/Menu.txt"/> + <FileResource projectRelativePath="doc/apidoc/files/LoadGen/EPTF_STUN_LGen_Definitions-ttcn.html" relativeURI="doc/apidoc/files/LoadGen/EPTF_STUN_LGen_Definitions-ttcn.html"/> + <FileResource projectRelativePath="doc/apidoc/files/LoadGen/EPTF_STUN_LGen_Functions-ttcn.html" relativeURI="doc/apidoc/files/LoadGen/EPTF_STUN_LGen_Functions-ttcn.html"/> + <FileResource projectRelativePath="doc/apidoc/files/Logger/EPTF_STUN_Logger_Definitions-ttcn.html" relativeURI="doc/apidoc/files/Logger/EPTF_STUN_Logger_Definitions-ttcn.html"/> + <FileResource projectRelativePath="doc/apidoc/files/Logger/EPTF_STUN_Logger_Functions-ttcn.html" relativeURI="doc/apidoc/files/Logger/EPTF_STUN_Logger_Functions-ttcn.html"/> + <FileResource projectRelativePath="doc/apidoc/files/Transport/EPTF_STUN_Transport_Definitions-ttcn.html" relativeURI="doc/apidoc/files/Transport/EPTF_STUN_Transport_Definitions-ttcn.html"/> + <FileResource projectRelativePath="doc/apidoc/files/Transport/EPTF_STUN_Transport_Functions-ttcn.html" relativeURI="doc/apidoc/files/Transport/EPTF_STUN_Transport_Functions-ttcn.html"/> + <FileResource projectRelativePath="doc/apidoc/index.html" relativeURI="doc/apidoc/index.html"/> + <FileResource projectRelativePath="doc/apidoc/index/Altsteps.html" relativeURI="doc/apidoc/index/Altsteps.html"/> + <FileResource projectRelativePath="doc/apidoc/index/Constants.html" relativeURI="doc/apidoc/index/Constants.html"/> + <FileResource projectRelativePath="doc/apidoc/index/Files.html" relativeURI="doc/apidoc/index/Files.html"/> + <FileResource projectRelativePath="doc/apidoc/index/Functions.html" relativeURI="doc/apidoc/index/Functions.html"/> + <FileResource projectRelativePath="doc/apidoc/index/General.html" relativeURI="doc/apidoc/index/General.html"/> + <FileResource projectRelativePath="doc/apidoc/index/General2.html" relativeURI="doc/apidoc/index/General2.html"/> + <FileResource projectRelativePath="doc/apidoc/index/General3.html" relativeURI="doc/apidoc/index/General3.html"/> + <FileResource projectRelativePath="doc/apidoc/index/Templates.html" relativeURI="doc/apidoc/index/Templates.html"/> + <FileResource projectRelativePath="doc/apidoc/index/Types.html" relativeURI="doc/apidoc/index/Types.html"/> + <FileResource projectRelativePath="doc/apidoc/javascript/main.js" relativeURI="doc/apidoc/javascript/main.js"/> + <FileResource projectRelativePath="doc/apidoc/menu.html" relativeURI="doc/apidoc/menu.html"/> + <FileResource projectRelativePath="doc/apidoc/styles/1.css" relativeURI="doc/apidoc/styles/1.css"/> + <FileResource projectRelativePath="doc/apidoc/styles/2.css" relativeURI="doc/apidoc/styles/2.css"/> + <FileResource projectRelativePath="doc/apidoc/styles/main.css" relativeURI="doc/apidoc/styles/main.css"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_Applib_STUN_CNL113645</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_UPloadCP_CNL113634.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_UPloadCP_CNL113634.tpd new file mode 100644 index 000000000..66689eeeb --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_UPloadCP_CNL113634.tpd @@ -0,0 +1,61 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: EPTF_Applib_UPloadCP_CNL113634.tpd + Description: tpd project file + Rev: R5B01 + Prodnr: CNL 113 634 + Updated: 2013-01-30 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_Applib_UPloadCP_CNL113634</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Logging_UI" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Logging/EPTF_CLL_Logging_UI.tpd"/> + <ReferencedProject name="EPTF_CLL_UIHandler" projectLocationURI="../EPTF_Core_Library_CNL113512/src/UIHandler/EPTF_CLL_UIHandler.tpd"/> + <ReferencedProject name="EPTF_CLL_TransportRouting" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_TransportRouting.tpd"/> + <ReferencedProject name="EPTF_CLL_Transport_CommPortIPL4" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_Transport_CommPortIPL4.tpd"/> + <ReferencedProject name="EPTF_CLL_LGenBase" projectLocationURI="../EPTF_Core_Library_CNL113512/src/LGenBase/EPTF_CLL_LGenBase.tpd"/> + <ReferencedProject name="UPloadCP_CNL113633" projectLocationURI="../../ProtocolModules/UPloadCP_CNL113633/UPloadCP_CNL113633.tpd"/> + <ReferencedProject name="XTDPasp_CNL113494" projectLocationURI="../../TestPorts/XTDPasp_CNL113494/XTDPasp_CNL113494.tpd"/> + <ReferencedProject name="IPL4asp_CNL113531" projectLocationURI="../../TestPorts/IPL4asp_CNL113531/IPL4asp_CNL113531.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_UPloadCP_LGen_DSFunctions.ttcn" relativeURI="src/LoadGen/EPTF_UPloadCP_LGen_DSFunctions.ttcn"/> + <FileResource projectRelativePath="EPTF_UPloadCP_LGen_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_UPloadCP_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_UPloadCP_LGen_Functions.ttcnpp" relativeURI="src/LoadGen/EPTF_UPloadCP_LGen_Functions.ttcnpp"/> + <FileResource projectRelativePath="EPTF_UPloadCP_Logger_Definitions.ttcn" relativeURI="src/Logger/EPTF_UPloadCP_Logger_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_UPloadCP_Logger_Functions.ttcn" relativeURI="src/Logger/EPTF_UPloadCP_Logger_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_UPloadCP_Logging_Definitions.ttcn" relativeURI="src/Logger/EPTF_UPloadCP_Logging_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_UPloadCP_Logging_Functions.ttcn" relativeURI="src/Logger/EPTF_UPloadCP_Logging_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_UPloadCP_Transport_Definitions.ttcn" relativeURI="src/Transport/EPTF_UPloadCP_Transport_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_UPloadCP_Transport_Functions.ttcnpp" relativeURI="src/Transport/EPTF_UPloadCP_Transport_Functions.ttcnpp"/> + <FileResource projectRelativePath="EPTF_UPloadCP_UIHandler_Functions.ttcn" relativeURI="src/LoadGen/EPTF_UPloadCP_UIHandler_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <symboliclinklessBuild>true</symboliclinklessBuild> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_Applib_UPloadCP_CNL113634</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_UserPlane_CNL113724.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_UserPlane_CNL113724.tpd new file mode 100644 index 000000000..c72afd388 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_UserPlane_CNL113724.tpd @@ -0,0 +1,60 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: EPTF_Applib_UserPlane_CNL113724.tpd + Description: tpd project file + Rev: R4A04 + Prodnr: CNL 113 724 + Updated: 2013-04-04 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_Applib_UserPlane_CNL113724</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_Applib_MLSim_CNL113568" projectLocationURI="../EPTF_Applib_MLSim_CNL113568/EPTF_Applib_MLSim_CNL113568.tpd"/> + <ReferencedProject name="EPTF_Applib_MSRP_CNL113564" projectLocationURI="../EPTF_Applib_MSRP_CNL113564/EPTF_Applib_MSRP_CNL113564.tpd"/> + <ReferencedProject name="EPTF_Applib_UPloadCP_CNL113634" projectLocationURI="../EPTF_Applib_UPloadCP_CNL113634/EPTF_Applib_UPloadCP_CNL113634.tpd"/> + <ReferencedProject name="EPTF_CLL_ExecCtrl" projectLocationURI="../EPTF_Core_Library_CNL113512/src/ExecCtrl/EPTF_CLL_ExecCtrl.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="src/LoadGen/EPTF_UserPlane_Abstract.grp" relativeURI="src/LoadGen/EPTF_UserPlane_Abstract.grp"/> + <FileResource projectRelativePath="src/LoadGen/EPTF_UserPlane_Abstract_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_UserPlane_Abstract_Definitions.ttcn"/> + <FileResource projectRelativePath="src/LoadGen/EPTF_UserPlane_Abstract_Functions.ttcn" relativeURI="src/LoadGen/EPTF_UserPlane_Abstract_Functions.ttcn"/> + <FileResource projectRelativePath="src/LoadGen/EPTF_UserPlane_MLSim.grp" relativeURI="src/LoadGen/EPTF_UserPlane_MLSim.grp"/> + <FileResource projectRelativePath="src/LoadGen/EPTF_UserPlane_MLSim_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_UserPlane_MLSim_Definitions.ttcn"/> + <FileResource projectRelativePath="src/LoadGen/EPTF_UserPlane_MLSim_Functions.ttcn" relativeURI="src/LoadGen/EPTF_UserPlane_MLSim_Functions.ttcn"/> + <FileResource projectRelativePath="src/LoadGen/EPTF_UserPlane_MLSim.grp" relativeURI="src/LoadGen/EPTF_UserPlane_MLSimPlus.grp"/> + <FileResource projectRelativePath="src/LoadGen/EPTF_UserPlane_MLSim_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_UserPlane_MLSimPlus_Definitions.ttcn"/> + <FileResource projectRelativePath="src/LoadGen/EPTF_UserPlane_MLSim_Functions.ttcn" relativeURI="src/LoadGen/EPTF_UserPlane_MLSimPlus_Functions.ttcn"/> + <FileResource projectRelativePath="src/LoadGen/EPTF_UserPlane_MSRP.grp" relativeURI="src/LoadGen/EPTF_UserPlane_MSRP.grp"/> + <FileResource projectRelativePath="src/LoadGen/EPTF_UserPlane_MSRP_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_UserPlane_MSRP_Definitions.ttcn"/> + <FileResource projectRelativePath="src/LoadGen/EPTF_UserPlane_MSRP_Functions.ttcn" relativeURI="src/LoadGen/EPTF_UserPlane_MSRP_Functions.ttcn"/> + <FileResource projectRelativePath="src/LoadGen/EPTF_UserPlane_UPload.grp" relativeURI="src/LoadGen/EPTF_UserPlane_UPload.grp"/> + <FileResource projectRelativePath="src/LoadGen/EPTF_UserPlane_UPload_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_UserPlane_UPload_Definitions.ttcn"/> + <FileResource projectRelativePath="src/LoadGen/EPTF_UserPlane_UPload_Functions.ttcn" relativeURI="src/LoadGen/EPTF_UserPlane_UPload_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_Applib_UserPlane_CNL113724</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_VXML_CNL113565.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_VXML_CNL113565.tpd new file mode 100644 index 000000000..82fecb199 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_VXML_CNL113565.tpd @@ -0,0 +1,121 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: EPTF_Applib_VXML_CNL113565.tpd + Description: tpd project file + Rev: R4A01 + Prodnr: CNL 113 565 + Updated: 2012-03-06 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_Applib_VXML_CNL113565</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Base" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Base/EPTF_CLL_Base.tpd"/> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Common/EPTF_CLL_Common.tpd"/> + <ReferencedProject name="EPTF_CLL_HashMap" projectLocationURI="../EPTF_Core_Library_CNL113512/src/HashMap/EPTF_CLL_HashMap.tpd"/> + <ReferencedProject name="EPTF_CLL_Transport_CommPortIPL4" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_Transport_CommPortIPL4.tpd"/> + <ReferencedProject name="EPTF_CLL_Transport_MessageBufferManager" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_Transport_MessageBufferManager.tpd"/> + <ReferencedProject name="EPTF_CLL_TransportRouting" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_TransportRouting.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Logging/EPTF_CLL_Logging.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging_UI" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Logging/EPTF_CLL_Logging_UI.tpd"/> + <ReferencedProject name="EPTF_CLL_Variable" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Variable/EPTF_CLL_Variable.tpd"/> + <ReferencedProject name="EPTF_CLL_UIHandler" projectLocationURI="../EPTF_Core_Library_CNL113512/src/UIHandler/EPTF_CLL_UIHandler.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging_Server" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Logging/EPTF_CLL_Logging_Server.tpd"/> + <ReferencedProject name="HTTPmsg_CNL113312" projectLocationURI="../../TestPorts/HTTPmsg_CNL113312/HTTPmsg_CNL113312.tpd"/> + <ReferencedProject name="IPL4asp_CNL113531" projectLocationURI="../../TestPorts/IPL4asp_CNL113531/IPL4asp_CNL113531.tpd"/> + <ReferencedProject name="XTDPasp_CNL113494" projectLocationURI="../../TestPorts/XTDPasp_CNL113494/XTDPasp_CNL113494.tpd"/> + <ReferencedProject name="TELNETasp_CNL113320" projectLocationURI="../../TestPorts/TELNETasp_CNL113320/TELNETasp_CNL113320.tpd"/> + <ReferencedProject name="UDPasp_CNL113346" projectLocationURI="../../TestPorts/UDPasp_CNL113346/UDPasp_CNL113346.tpd"/> + <ReferencedProject name="Abstract_Socket_CNL113384" projectLocationURI="../../TestPorts/Common_Components/Abstract_Socket_CNL113384/Abstract_Socket_CNL113384.tpd"/> + <ReferencedProject name="EPTF_CLL_FreeBusyQueue" projectLocationURI="../EPTF_Core_Library_CNL113512/src/FreeBusyQueue/EPTF_CLL_FBQ.tpd"/> + <ReferencedProject name="TCCUsefulFunctions_CNL113472_TitanSim" projectLocationURI="../TCCUsefulFunctions_CNL113472/TCCUsefulFunctions_CNL113472_TitanSim.tpd"/> + <ReferencedProject name="EPTF_CLL_Scheduler" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Scheduler/EPTF_CLL_Scheduler.tpd"/> + <ReferencedProject name="EPTF_CLL_LGenBase" projectLocationURI="../EPTF_Core_Library_CNL113512/src/LGenBase/EPTF_CLL_LGenBase.tpd"/> + <ReferencedProject name="EPTF_CLL_RandomNArray" projectLocationURI="../EPTF_Core_Library_CNL113512/src/RandomNArray/EPTF_CLL_RandomNArray.tpd"/> + <ReferencedProject name="EPTF_CLL_StatMeasure" projectLocationURI="../EPTF_Core_Library_CNL113512/src/StatMeasure/EPTF_CLL_StatMeasure.tpd"/> + <ReferencedProject name="EPTF_CLL_StatHandler" projectLocationURI="../EPTF_Core_Library_CNL113512/src/StatHandler/EPTF_CLL_StatHandler.tpd"/> + <ReferencedProject name="XSDASN_CNL113474" projectLocationURI="../../ProtocolModules/XSDASN_CNL113474/XSDASN_CNL113474.tpd"/> + <ReferencedProject name="EPTF_CLL_RedBlackTree" projectLocationURI="../EPTF_Core_Library_CNL113512/src/RedBlackTree/EPTF_CLL_RedBlackTree.tpd"/> + <ReferencedProject name="EPTF_CLL_Semaphore" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Semaphore/EPTF_CLL_Semaphore.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="doc/apidoc" relativeURI="doc/apidoc"/> + <FolderResource projectRelativePath="doc/apidoc/files" relativeURI="doc/apidoc/files"/> + <FolderResource projectRelativePath="doc/apidoc/files/LoadGen" relativeURI="doc/apidoc/files/LoadGen"/> + <FolderResource projectRelativePath="doc/apidoc/files/Logger" relativeURI="doc/apidoc/files/Logger"/> + <FolderResource projectRelativePath="doc/apidoc/files/Transport" relativeURI="doc/apidoc/files/Transport"/> + <FolderResource projectRelativePath="doc/apidoc/index" relativeURI="doc/apidoc/index"/> + <FolderResource projectRelativePath="doc/apidoc/javascript" relativeURI="doc/apidoc/javascript"/> + <FolderResource projectRelativePath="doc/apidoc/styles" relativeURI="doc/apidoc/styles"/> + </Folders> + <Files> + <FileResource projectRelativePath="EPTF_VXML_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_VXML_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_VXML_Functions.ttcn" relativeURI="src/LoadGen/EPTF_VXML_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_VXML_Templates.ttcn" relativeURI="src/LoadGen/EPTF_VXML_Templates.ttcn"/> + <FileResource projectRelativePath="EPTF_VXML_Logger_Definitions.ttcn" relativeURI="src/Logger/EPTF_VXML_Logger_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_VXML_Logger_Functions.ttcn" relativeURI="src/Logger/EPTF_VXML_Logger_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_VXML_Transport_Definitions.ttcn" relativeURI="src/Transport/EPTF_VXML_Transport_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_VXML_Transport_Functions.ttcn" relativeURI="src/Transport/EPTF_VXML_Transport_Functions.ttcn"/> + <FileResource projectRelativePath="doc/EPTF_Applib_VXML_CNL113565_FS.pdf" relativeURI="doc/EPTF_Applib_VXML_CNL113565_FS.pdf"/> + <FileResource projectRelativePath="doc/EPTF_Applib_VXML_CNL113565_PRI.pdf" relativeURI="doc/EPTF_Applib_VXML_CNL113565_PRI.pdf"/> + <FileResource projectRelativePath="doc/EPTF_Applib_VXML_CNL113565_UG.pdf" relativeURI="doc/EPTF_Applib_VXML_CNL113565_UG.pdf"/> + <FileResource projectRelativePath="doc/apidoc/Menu.txt" relativeURI="doc/apidoc/Menu.txt"/> + <FileResource projectRelativePath="doc/apidoc/files/LoadGen/EPTF_VXML_Definitions-ttcn.html" relativeURI="doc/apidoc/files/LoadGen/EPTF_VXML_Definitions-ttcn.html"/> + <FileResource projectRelativePath="doc/apidoc/files/LoadGen/EPTF_VXML_Functions-ttcn.html" relativeURI="doc/apidoc/files/LoadGen/EPTF_VXML_Functions-ttcn.html"/> + <FileResource projectRelativePath="doc/apidoc/files/Logger/EPTF_VXML_Logger_Definitions-ttcn.html" relativeURI="doc/apidoc/files/Logger/EPTF_VXML_Logger_Definitions-ttcn.html"/> + <FileResource projectRelativePath="doc/apidoc/files/Logger/EPTF_VXML_Logger_Functions-ttcn.html" relativeURI="doc/apidoc/files/Logger/EPTF_VXML_Logger_Functions-ttcn.html"/> + <FileResource projectRelativePath="doc/apidoc/files/Transport/EPTF_VXML_Transport_Definitions-ttcn.html" relativeURI="doc/apidoc/files/Transport/EPTF_VXML_Transport_Definitions-ttcn.html"/> + <FileResource projectRelativePath="doc/apidoc/files/Transport/EPTF_VXML_Transport_Functions-ttcn.html" relativeURI="doc/apidoc/files/Transport/EPTF_VXML_Transport_Functions-ttcn.html"/> + <FileResource projectRelativePath="doc/apidoc/index.html" relativeURI="doc/apidoc/index.html"/> + <FileResource projectRelativePath="doc/apidoc/index/Altsteps.html" relativeURI="doc/apidoc/index/Altsteps.html"/> + <FileResource projectRelativePath="doc/apidoc/index/Constants.html" relativeURI="doc/apidoc/index/Constants.html"/> + <FileResource projectRelativePath="doc/apidoc/index/Files.html" relativeURI="doc/apidoc/index/Files.html"/> + <FileResource projectRelativePath="doc/apidoc/index/Functions.html" relativeURI="doc/apidoc/index/Functions.html"/> + <FileResource projectRelativePath="doc/apidoc/index/General.html" relativeURI="doc/apidoc/index/General.html"/> + <FileResource projectRelativePath="doc/apidoc/index/General2.html" relativeURI="doc/apidoc/index/General2.html"/> + <FileResource projectRelativePath="doc/apidoc/index/General3.html" relativeURI="doc/apidoc/index/General3.html"/> + <FileResource projectRelativePath="doc/apidoc/index/General4.html" relativeURI="doc/apidoc/index/General4.html"/> + <FileResource projectRelativePath="doc/apidoc/index/Templates.html" relativeURI="doc/apidoc/index/Templates.html"/> + <FileResource projectRelativePath="doc/apidoc/index/Types.html" relativeURI="doc/apidoc/index/Types.html"/> + <FileResource projectRelativePath="doc/apidoc/javascript/main.js" relativeURI="doc/apidoc/javascript/main.js"/> + <FileResource projectRelativePath="doc/apidoc/menu.html" relativeURI="doc/apidoc/menu.html"/> + <FileResource projectRelativePath="doc/apidoc/styles/1.css" relativeURI="doc/apidoc/styles/1.css"/> + <FileResource projectRelativePath="doc/apidoc/styles/2.css" relativeURI="doc/apidoc/styles/2.css"/> + <FileResource projectRelativePath="doc/apidoc/styles/main.css" relativeURI="doc/apidoc/styles/main.css"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_Applib_VXML_CNL113565</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_XCAP_CNL113534.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_XCAP_CNL113534.tpd new file mode 100644 index 000000000..642ed71a1 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_Applib_XCAP_CNL113534.tpd @@ -0,0 +1,146 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: EPTF_Applib_XCAP_CNL113534.tpd + Description: tpd project file + Rev: R5E01 + Prodnr: CNL 113 534 + Updated: 2013-02-21 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_Applib_XCAP_CNL113534</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Common/EPTF_CLL_Common.tpd"/> + <ReferencedProject name="EPTF_CLL_LGenBase" projectLocationURI="../EPTF_Core_Library_CNL113512/src/LGenBase/EPTF_CLL_LGenBase.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Logging/EPTF_CLL_Logging.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging_Server" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Logging/EPTF_CLL_Logging_Server.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging_UI" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Logging/EPTF_CLL_Logging_UI.tpd"/> + <ReferencedProject name="EPTF_CLL_RedBlackTree" projectLocationURI="../EPTF_Core_Library_CNL113512/src/RedBlackTree/EPTF_CLL_RedBlackTree.tpd"/> + <ReferencedProject name="EPTF_CLL_Scheduler" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Scheduler/EPTF_CLL_Scheduler.tpd"/> + <ReferencedProject name="EPTF_CLL_Transport_CommPortIPL4" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_Transport_CommPortIPL4.tpd"/> + <ReferencedProject name="EPTF_CLL_TransportRouting" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_TransportRouting.tpd"/> + <ReferencedProject name="EPTF_CLL_UIHandler" projectLocationURI="../EPTF_Core_Library_CNL113512/src/UIHandler/EPTF_CLL_UIHandler.tpd"/> + <ReferencedProject name="EPTF_CLL_Variable" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Variable/EPTF_CLL_Variable.tpd"/> + <ReferencedProject name="HTTPmsg_CNL113312" projectLocationURI="../../TestPorts/HTTPmsg_CNL113312/HTTPmsg_CNL113312.tpd"/> + <ReferencedProject name="IPL4asp_CNL113531" projectLocationURI="../../TestPorts/IPL4asp_CNL113531/IPL4asp_CNL113531.tpd"/> + <ReferencedProject name="TCCUsefulFunctions_CNL113472_Security" projectLocationURI="../TCCUsefulFunctions_CNL113472/TCCUsefulFunctions_CNL113472_Security.tpd"/> + <ReferencedProject name="TCCUsefulFunctions_CNL113472_TitanSim" projectLocationURI="../TCCUsefulFunctions_CNL113472/TCCUsefulFunctions_CNL113472_TitanSim.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="doc/apidoc" relativeURI="doc/apidoc"/> + <FolderResource projectRelativePath="doc/apidoc/files" relativeURI="doc/apidoc/files"/> + <FolderResource projectRelativePath="doc/apidoc/files/LoadGen" relativeURI="doc/apidoc/files/LoadGen"/> + <FolderResource projectRelativePath="doc/apidoc/files/Logger" relativeURI="doc/apidoc/files/Logger"/> + <FolderResource projectRelativePath="doc/apidoc/files/Transport" relativeURI="doc/apidoc/files/Transport"/> + <FolderResource projectRelativePath="doc/apidoc/index" relativeURI="doc/apidoc/index"/> + <FolderResource projectRelativePath="doc/apidoc/javascript" relativeURI="doc/apidoc/javascript"/> + <FolderResource projectRelativePath="doc/apidoc/search" relativeURI="doc/apidoc/search"/> + <FolderResource projectRelativePath="doc/apidoc/styles" relativeURI="doc/apidoc/styles"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + <FolderResource projectRelativePath="src/LoadGen" relativeURI="src/LoadGen"/> + <FolderResource projectRelativePath="src/Logger" relativeURI="src/Logger"/> + <FolderResource projectRelativePath="src/Transport" relativeURI="src/Transport"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/EPTF_Applib_XCAP_CNL113534_FS.pdf" relativeURI="doc/EPTF_Applib_XCAP_CNL113534_FS.pdf"/> + <FileResource projectRelativePath="doc/EPTF_Applib_XCAP_CNL113534_PRI.pdf" relativeURI="doc/EPTF_Applib_XCAP_CNL113534_PRI.pdf"/> + <FileResource projectRelativePath="doc/EPTF_Applib_XCAP_CNL113534_UG.pdf" relativeURI="doc/EPTF_Applib_XCAP_CNL113534_UG.pdf"/> + <FileResource projectRelativePath="doc/apidoc/Menu.txt" relativeURI="doc/apidoc/Menu.txt"/> + <FileResource projectRelativePath="doc/apidoc/files/LoadGen/EPTF_XCAP_Definitions-ttcn.html" relativeURI="doc/apidoc/files/LoadGen/EPTF_XCAP_Definitions-ttcn.html"/> + <FileResource projectRelativePath="doc/apidoc/files/LoadGen/EPTF_XCAP_Functions-ttcn.html" relativeURI="doc/apidoc/files/LoadGen/EPTF_XCAP_Functions-ttcn.html"/> + <FileResource projectRelativePath="doc/apidoc/files/Logger/EPTF_XCAP_Logger_Definitions-ttcn.html" relativeURI="doc/apidoc/files/Logger/EPTF_XCAP_Logger_Definitions-ttcn.html"/> + <FileResource projectRelativePath="doc/apidoc/files/Logger/EPTF_XCAP_Logger_Functions-ttcn.html" relativeURI="doc/apidoc/files/Logger/EPTF_XCAP_Logger_Functions-ttcn.html"/> + <FileResource projectRelativePath="doc/apidoc/files/TitanSim.html" relativeURI="doc/apidoc/files/TitanSim.html"/> + <FileResource projectRelativePath="doc/apidoc/files/Transport/EPTF_XCAP_Transport_Definitions-ttcn.html" relativeURI="doc/apidoc/files/Transport/EPTF_XCAP_Transport_Definitions-ttcn.html"/> + <FileResource projectRelativePath="doc/apidoc/files/Transport/EPTF_XCAP_Transport_Functions-ttcn.html" relativeURI="doc/apidoc/files/Transport/EPTF_XCAP_Transport_Functions-ttcn.html"/> + <FileResource projectRelativePath="doc/apidoc/index.html" relativeURI="doc/apidoc/index.html"/> + <FileResource projectRelativePath="doc/apidoc/index/Altsteps.html" relativeURI="doc/apidoc/index/Altsteps.html"/> + <FileResource projectRelativePath="doc/apidoc/index/Constants.html" relativeURI="doc/apidoc/index/Constants.html"/> + <FileResource projectRelativePath="doc/apidoc/index/Files.html" relativeURI="doc/apidoc/index/Files.html"/> + <FileResource projectRelativePath="doc/apidoc/index/Functions.html" relativeURI="doc/apidoc/index/Functions.html"/> + <FileResource projectRelativePath="doc/apidoc/index/General.html" relativeURI="doc/apidoc/index/General.html"/> + <FileResource projectRelativePath="doc/apidoc/index/General2.html" relativeURI="doc/apidoc/index/General2.html"/> + <FileResource projectRelativePath="doc/apidoc/index/General3.html" relativeURI="doc/apidoc/index/General3.html"/> + <FileResource projectRelativePath="doc/apidoc/index/Templates.html" relativeURI="doc/apidoc/index/Templates.html"/> + <FileResource projectRelativePath="doc/apidoc/index/Types.html" relativeURI="doc/apidoc/index/Types.html"/> + <FileResource projectRelativePath="doc/apidoc/javascript/main.js" relativeURI="doc/apidoc/javascript/main.js"/> + <FileResource projectRelativePath="doc/apidoc/javascript/searchdata.js" relativeURI="doc/apidoc/javascript/searchdata.js"/> + <FileResource projectRelativePath="doc/apidoc/menu.html" relativeURI="doc/apidoc/menu.html"/> + <FileResource projectRelativePath="doc/apidoc/search/AltstepsA.html" relativeURI="doc/apidoc/search/AltstepsA.html"/> + <FileResource projectRelativePath="doc/apidoc/search/ConstantsC.html" relativeURI="doc/apidoc/search/ConstantsC.html"/> + <FileResource projectRelativePath="doc/apidoc/search/FilesE.html" relativeURI="doc/apidoc/search/FilesE.html"/> + <FileResource projectRelativePath="doc/apidoc/search/FunctionsF.html" relativeURI="doc/apidoc/search/FunctionsF.html"/> + <FileResource projectRelativePath="doc/apidoc/search/GeneralA.html" relativeURI="doc/apidoc/search/GeneralA.html"/> + <FileResource projectRelativePath="doc/apidoc/search/GeneralC.html" relativeURI="doc/apidoc/search/GeneralC.html"/> + <FileResource projectRelativePath="doc/apidoc/search/GeneralE.html" relativeURI="doc/apidoc/search/GeneralE.html"/> + <FileResource projectRelativePath="doc/apidoc/search/GeneralF.html" relativeURI="doc/apidoc/search/GeneralF.html"/> + <FileResource projectRelativePath="doc/apidoc/search/GeneralL.html" relativeURI="doc/apidoc/search/GeneralL.html"/> + <FileResource projectRelativePath="doc/apidoc/search/GeneralM.html" relativeURI="doc/apidoc/search/GeneralM.html"/> + <FileResource projectRelativePath="doc/apidoc/search/GeneralP.html" relativeURI="doc/apidoc/search/GeneralP.html"/> + <FileResource projectRelativePath="doc/apidoc/search/GeneralR.html" relativeURI="doc/apidoc/search/GeneralR.html"/> + <FileResource projectRelativePath="doc/apidoc/search/GeneralT.html" relativeURI="doc/apidoc/search/GeneralT.html"/> + <FileResource projectRelativePath="doc/apidoc/search/NoResults.html" relativeURI="doc/apidoc/search/NoResults.html"/> + <FileResource projectRelativePath="doc/apidoc/search/TemplatesT.html" relativeURI="doc/apidoc/search/TemplatesT.html"/> + <FileResource projectRelativePath="doc/apidoc/search/TypesE.html" relativeURI="doc/apidoc/search/TypesE.html"/> + <FileResource projectRelativePath="doc/apidoc/search/TypesF.html" relativeURI="doc/apidoc/search/TypesF.html"/> + <FileResource projectRelativePath="doc/apidoc/styles/1.css" relativeURI="doc/apidoc/styles/1.css"/> + <FileResource projectRelativePath="doc/apidoc/styles/2.css" relativeURI="doc/apidoc/styles/2.css"/> + <FileResource projectRelativePath="doc/apidoc/styles/main.css" relativeURI="doc/apidoc/styles/main.css"/> + <FileResource projectRelativePath="src/EPTF_XCAP_All.grp" relativeURI="src/EPTF_XCAP_All.grp"/> + <FileResource projectRelativePath="src/LoadGen/EPTF_XCAP_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_XCAP_Definitions.ttcn"/> + <FileResource projectRelativePath="src/LoadGen/EPTF_XCAP_Functions.ttcn" relativeURI="src/LoadGen/EPTF_XCAP_Functions.ttcn"/> + <FileResource projectRelativePath="src/LoadGen/EPTF_XCAP_LoadGen.grp" relativeURI="src/LoadGen/EPTF_XCAP_LoadGen.grp"/> + <FileResource projectRelativePath="src/Logger/EPTF_XCAP_Logger.grp" relativeURI="src/Logger/EPTF_XCAP_Logger.grp"/> + <FileResource projectRelativePath="src/Logger/EPTF_XCAP_Logger_Definitions.ttcn" relativeURI="src/Logger/EPTF_XCAP_Logger_Definitions.ttcn"/> + <FileResource projectRelativePath="src/Logger/EPTF_XCAP_Logger_Functions.ttcn" relativeURI="src/Logger/EPTF_XCAP_Logger_Functions.ttcn"/> + <FileResource projectRelativePath="src/Transport/EPTF_XCAP_Transport.grp" relativeURI="src/Transport/EPTF_XCAP_Transport.grp"/> + <FileResource projectRelativePath="src/Transport/EPTF_XCAP_Transport_Definitions.ttcn" relativeURI="src/Transport/EPTF_XCAP_Transport_Definitions.ttcn"/> + <FileResource projectRelativePath="src/Transport/EPTF_XCAP_Transport_Functions.ttcn" relativeURI="src/Transport/EPTF_XCAP_Transport_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_Applib_XCAP_CNL113534</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>NO_IPV6</listItem> + </TTCN3preprocessorDefines> + <preprocessorDefines> + <listItem>NO_IPV6</listItem> + </preprocessorDefines> + <suppressWarnings>true</suppressWarnings> + <Solaris8SpecificLibraries> + <listItem>resolv</listItem> + <listItem>xnet</listItem> + </Solaris8SpecificLibraries> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Base.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Base.tpd new file mode 100644 index 000000000..f2bdb1b4f --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Base.tpd @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_CLL_Base</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../Common/EPTF_CLL_Common.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_CLL_Base_Definitions.ttcn" relativeURI="EPTF_CLL_Base_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_Base_ExternalFunctions.cc" relativeURI="EPTF_CLL_Base_ExternalFunctions.cc"/> + <FileResource projectRelativePath="EPTF_CLL_Base_Functions.ttcn" relativeURI="EPTF_CLL_Base_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/EPTF_Base</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Buffer.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Buffer.tpd new file mode 100644 index 000000000..fd64185e1 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Buffer.tpd @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_CLL_Buffer</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Base" projectLocationURI="../Base/EPTF_CLL_Base.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_CLL_Buffer_Definitions.ttcn" relativeURI="EPTF_CLL_Buffer_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_Buffer_ExternalFunctions.cc" relativeURI="EPTF_CLL_Buffer_ExternalFunctions.cc"/> + <FileResource projectRelativePath="EPTF_CLL_Buffer_Functions.ttcn" relativeURI="EPTF_CLL_Buffer_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/EPTF_CLL_Buffer</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_CLI.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_CLI.tpd new file mode 100644 index 000000000..ecac4e166 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_CLI.tpd @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_CLL_CLI</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Base" projectLocationURI="../Base/EPTF_CLL_Base.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging" projectLocationURI="../Logging/EPTF_CLL_Logging.tpd"/> + <ReferencedProject name="EPTF_CLL_Semaphore" projectLocationURI="../Semaphore/EPTF_CLL_Semaphore.tpd"/> + <ReferencedProject name="EPTF_CLL_Variable" projectLocationURI="../Variable/EPTF_CLL_Variable.tpd"/> + <ReferencedProject name="TCCUsefulFunctions_CNL113472_Common" projectLocationURI="../../../TCCUsefulFunctions_CNL113472/TCCUsefulFunctions_CNL113472_Common.tpd"/> + <ReferencedProject name="TELNETasp_CNL113320" projectLocationURI="../../../../TestPorts/TELNETasp_CNL113320/TELNETasp_CNL113320.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_CLL_CLI_Definitions.ttcn" relativeURI="EPTF_CLL_CLI_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_CLI_Functions.ttcn" relativeURI="EPTF_CLL_CLI_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/CommandLineInterface</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_CentralScheduling.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_CentralScheduling.tpd new file mode 100644 index 000000000..2de26b6ff --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_CentralScheduling.tpd @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_CLL_CentralScheduling</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Base" projectLocationURI="../Base/EPTF_CLL_Base.tpd"/> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../Common/EPTF_CLL_Common.tpd"/> + <ReferencedProject name="EPTF_CLL_ExecCtrl" projectLocationURI="../ExecCtrl/EPTF_CLL_ExecCtrl.tpd"/> + <ReferencedProject name="EPTF_CLL_FreeBusyQueue" projectLocationURI="../FreeBusyQueue/EPTF_CLL_FBQ.tpd"/> + <ReferencedProject name="EPTF_CLL_HostAdmin" projectLocationURI="../HostAdmin/EPTF_CLL_HostAdmin.tpd"/> + <ReferencedProject name="EPTF_CLL_LGenBase" projectLocationURI="../LGenBase/EPTF_CLL_LGenBase.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging" projectLocationURI="../Logging/EPTF_CLL_Logging.tpd"/> + <ReferencedProject name="EPTF_CLL_Variable" projectLocationURI="../Variable/EPTF_CLL_Variable.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_CLL_CSAdmin_Functions.ttcn" relativeURI="EPTF_CLL_CSAdmin_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_CSLB_Functions.ttcn" relativeURI="EPTF_CLL_CSLB_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_CS_Definitions.ttcn" relativeURI="EPTF_CLL_CS_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_CS_DSFunctions.ttcn" relativeURI="EPTF_CLL_CS_DSFunctions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/EPTF_CLL_CentralScheduling</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_CentralSchedulingUIHandler.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_CentralSchedulingUIHandler.tpd new file mode 100644 index 000000000..431a68580 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_CentralSchedulingUIHandler.tpd @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_CLL_CentralSchedulingUIHandler</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_CentralScheduling" projectLocationURI="EPTF_CLL_CentralScheduling.tpd"/> + <ReferencedProject name="EPTF_CLL_ExecCtrl_UI" projectLocationURI="../ExecCtrl/EPTF_CLL_ExecCtrl_UI.tpd"/> + <ReferencedProject name="EPTF_CLL_HostAdmin" projectLocationURI="../HostAdmin/EPTF_CLL_HostAdmin.tpd"/> + <ReferencedProject name="EPTF_CLL_HostAdmin_UI" projectLocationURI="../HostAdmin/EPTF_CLL_HostAdmin_UI.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging" projectLocationURI="../Logging/EPTF_CLL_Logging.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging_UI" projectLocationURI="../Logging/EPTF_CLL_Logging_UI.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_CLL_CSUIHandler_Definitions.ttcn" relativeURI="EPTF_CLL_CSUIHandler_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_CSUIHandler_Functions.ttcn" relativeURI="EPTF_CLL_CSUIHandler_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/EPTF_CLL_CentralSchedulingUIHandler</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Common.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Common.tpd new file mode 100644 index 000000000..bd53b98df --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Common.tpd @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_CLL_Common</ProjectName> + <Files> + <FileResource projectRelativePath="EPTF_CLL_Common_Definitions.ttcn" relativeURI="EPTF_CLL_Common_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_Common_ExternalFunctions.cc" relativeURI="EPTF_CLL_Common_ExternalFunctions.cc"/> + <FileResource projectRelativePath="EPTF_CLL_Common_Functions.ttcn" relativeURI="EPTF_CLL_Common_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_Common_IndexArrayDefinitions.ttcn" relativeURI="EPTF_CLL_Common_IndexArrayDefinitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_Common_IndexArrayFunctions.ttcn" relativeURI="EPTF_CLL_Common_IndexArrayFunctions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_Common_PrivateDebugDefinitions.ttcnpp" relativeURI="EPTF_CLL_Common_PrivateDebugDefinitions.ttcnpp"/> + <FileResource projectRelativePath="EPTF_CLL_Common_RndDefinitions.ttcn" relativeURI="EPTF_CLL_Common_RndDefinitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_Common_RndFunctions.ttcn" relativeURI="EPTF_CLL_Common_RndFunctions.ttcn"/> + </Files> + <PathVariables> + </PathVariables> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/EPTF_Common</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + <Configuration name="Debug"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/EPTF_Common</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>EPTF_DEBUG</listItem> + </TTCN3preprocessorDefines> + <preprocessorDefines> + <listItem>EPTF_DEBUG</listItem> + </preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_DataSource.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_DataSource.tpd new file mode 100644 index 000000000..5437379a3 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_DataSource.tpd @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_CLL_DataSource</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Base" projectLocationURI="../Base/EPTF_CLL_Base.tpd"/> + <ReferencedProject name="EPTF_CLL_CLI" projectLocationURI="../CommandLineInterface/EPTF_CLL_CLI.tpd"/> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../Common/EPTF_CLL_Common.tpd"/> + <ReferencedProject name="EPTF_CLL_Semaphore" projectLocationURI="../Semaphore/EPTF_CLL_Semaphore.tpd"/> + <ReferencedProject name="EPTF_CLL_Variable" projectLocationURI="../Variable/EPTF_CLL_Variable.tpd"/> + <ReferencedProject name="XTDP_CNL113663" projectLocationURI="../../../../ProtocolModules/XTDP_CNL113663/XTDP_CNL113663.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_CLL_DataSourceClient_Functions.ttcn" relativeURI="EPTF_CLL_DataSourceClient_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_DataSource_Definitions.ttcn" relativeURI="EPTF_CLL_DataSource_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_DataSource_ExternalFunctions.cc" relativeURI="EPTF_CLL_DataSource_ExternalFunctions.cc"/> + <FileResource projectRelativePath="EPTF_CLL_DataSource_Functions.ttcn" relativeURI="EPTF_CLL_DataSource_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/EPTF_DataSource</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_ExecCtrl.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_ExecCtrl.tpd new file mode 100644 index 000000000..4cf162bcc --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_ExecCtrl.tpd @@ -0,0 +1,56 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_CLL_ExecCtrl</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Base" projectLocationURI="../Base/EPTF_CLL_Base.tpd"/> + <ReferencedProject name="EPTF_CLL_CLI" projectLocationURI="../CommandLineInterface/EPTF_CLL_CLI.tpd"/> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../Common/EPTF_CLL_Common.tpd"/> + <ReferencedProject name="EPTF_CLL_DataSource" projectLocationURI="../DataSource/EPTF_CLL_DataSource.tpd"/> + <ReferencedProject name="EPTF_CLL_FreeBusyQueue" projectLocationURI="../FreeBusyQueue/EPTF_CLL_FBQ.tpd"/> + <ReferencedProject name="EPTF_CLL_HashMap" projectLocationURI="../HashMap/EPTF_CLL_HashMap.tpd"/> + <ReferencedProject name="EPTF_CLL_LGenBase" projectLocationURI="../LGenBase/EPTF_CLL_LGenBase.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging" projectLocationURI="../Logging/EPTF_CLL_Logging.tpd"/> + <ReferencedProject name="EPTF_CLL_Scheduler" projectLocationURI="../Scheduler/EPTF_CLL_Scheduler.tpd"/> + <ReferencedProject name="EPTF_CLL_StatHandler" projectLocationURI="../StatHandler/EPTF_CLL_StatHandler.tpd"/> + <ReferencedProject name="EPTF_CLL_StatMeasure" projectLocationURI="../StatMeasure/EPTF_CLL_StatMeasure.tpd"/> + <ReferencedProject name="EPTF_CLL_Variable" projectLocationURI="../Variable/EPTF_CLL_Variable.tpd"/> + <ReferencedProject name="TCCUsefulFunctions_CNL113472_Common" projectLocationURI="../../../TCCUsefulFunctions_CNL113472/TCCUsefulFunctions_CNL113472_Common.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_CLL_ExecCtrlClient_Functions.ttcn" relativeURI="EPTF_CLL_ExecCtrlClient_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_ExecCtrlTimeProfile_Definitions.ttcn" relativeURI="EPTF_CLL_ExecCtrlTimeProfile_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_ExecCtrl_CLIDefinitions.ttcn" relativeURI="EPTF_CLL_ExecCtrl_CLIDefinitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_ExecCtrl_CLIFunctions.ttcn" relativeURI="EPTF_CLL_ExecCtrl_CLIFunctions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_ExecCtrl_DSFunctions.ttcn" relativeURI="EPTF_CLL_ExecCtrl_DSFunctions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_ExecCtrl_Definitions.ttcn" relativeURI="EPTF_CLL_ExecCtrl_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_ExecCtrl_Functions.ttcn" relativeURI="EPTF_CLL_ExecCtrl_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_ExecCtrl_LoggingFunctions.ttcn" relativeURI="EPTF_CLL_ExecCtrl_LoggingFunctions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_ExecCtrl_PhaseDefinitions.ttcn" relativeURI="EPTF_CLL_ExecCtrl_PhaseDefinitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_ExecCtrl_PhaseFunctions.ttcn" relativeURI="EPTF_CLL_ExecCtrl_PhaseFunctions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_ExecCtrl_ScenarioDefinitions.ttcn" relativeURI="EPTF_CLL_ExecCtrl_ScenarioDefinitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_ExecCtrl_ScenarioFunctions.ttcn" relativeURI="EPTF_CLL_ExecCtrl_ScenarioFunctions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/ExecCtrl</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_ExecCtrl_UI.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_ExecCtrl_UI.tpd new file mode 100644 index 000000000..325ff580c --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_ExecCtrl_UI.tpd @@ -0,0 +1,47 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_CLL_ExecCtrl_UI</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Base" projectLocationURI="../Base/EPTF_CLL_Base.tpd"/> + <ReferencedProject name="EPTF_CLL_CLI" projectLocationURI="../CommandLineInterface/EPTF_CLL_CLI.tpd"/> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../Common/EPTF_CLL_Common.tpd"/> + <ReferencedProject name="EPTF_CLL_DataSource" projectLocationURI="../DataSource/EPTF_CLL_DataSource.tpd"/> + <ReferencedProject name="EPTF_CLL_ExecCtrl" projectLocationURI="EPTF_CLL_ExecCtrl.tpd"/> + <ReferencedProject name="EPTF_CLL_LGenBase" projectLocationURI="../LGenBase/EPTF_CLL_LGenBase.tpd"/> + <ReferencedProject name="EPTF_CLL_LGenBase_UI" projectLocationURI="../LGenBase/EPTF_CLL_LGenBase_UI.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging" projectLocationURI="../Logging/EPTF_CLL_Logging.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging_UI" projectLocationURI="../Logging/EPTF_CLL_Logging_UI.tpd"/> + <ReferencedProject name="EPTF_CLL_StatHandler" projectLocationURI="../StatHandler/EPTF_CLL_StatHandler.tpd"/> + <ReferencedProject name="EPTF_CLL_StatHandler_UI" projectLocationURI="../StatHandler/EPTF_CLL_StatHandler_UI.tpd"/> + <ReferencedProject name="EPTF_CLL_UIHandler" projectLocationURI="../UIHandler/EPTF_CLL_UIHandler.tpd"/> + <ReferencedProject name="EPTF_CLL_Variable" projectLocationURI="../Variable/EPTF_CLL_Variable.tpd"/> + <ReferencedProject name="XTDPasp_CNL113494" projectLocationURI="../../../../TestPorts/XTDPasp_CNL113494/XTDPasp_CNL113494.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_CLL_ExecCtrlUIHandler_Definitions.ttcn" relativeURI="EPTF_CLL_ExecCtrlUIHandler_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_ExecCtrlUIHandler_Functions.ttcn" relativeURI="EPTF_CLL_ExecCtrlUIHandler_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/EPTF_CLL_ExecCtrl_UI</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_FBQ.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_FBQ.tpd new file mode 100644 index 000000000..cba594e14 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_FBQ.tpd @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_CLL_FreeBusyQueue</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../Common/EPTF_CLL_Common.tpd"/> + <ReferencedProject name="EPTF_CLL_NQueue" projectLocationURI="../NQueue/EPTF_CLL_NQueue.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_CLL_FBQ_Definitions.ttcn" relativeURI="EPTF_CLL_FBQ_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_FBQ_Functions.ttcn" relativeURI="EPTF_CLL_FBQ_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/EPTF_FreeBusyQueue</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_GUIViewer.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_GUIViewer.tpd new file mode 100644 index 000000000..0c15e9cd1 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_GUIViewer.tpd @@ -0,0 +1,47 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_CLL_GUIViewer</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Base" projectLocationURI="../Base/EPTF_CLL_Base.tpd"/> + <ReferencedProject name="EPTF_CLL_CLI" projectLocationURI="../CommandLineInterface/EPTF_CLL_CLI.tpd"/> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../Common/EPTF_CLL_Common.tpd"/> + <ReferencedProject name="EPTF_CLL_DataSource" projectLocationURI="../DataSource/EPTF_CLL_DataSource.tpd"/> + <ReferencedProject name="EPTF_CLL_HashMap" projectLocationURI="../HashMap/EPTF_CLL_HashMap.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging" projectLocationURI="../Logging/EPTF_CLL_Logging.tpd"/> + <ReferencedProject name="EPTF_CLL_Semaphore" projectLocationURI="../Semaphore/EPTF_CLL_Semaphore.tpd"/> + <ReferencedProject name="EPTF_CLL_Transport_IPL4" projectLocationURI="../Transport/EPTF_CLL_Transport_IPL4.tpd"/> + <ReferencedProject name="EPTF_CLL_Variable" projectLocationURI="../Variable/EPTF_CLL_Variable.tpd"/> + <ReferencedProject name="TCCUsefulFunctions_CNL113472_Common" projectLocationURI="../../../TCCUsefulFunctions_CNL113472/TCCUsefulFunctions_CNL113472_Common.tpd"/> + <ReferencedProject name="XTDP_CNL113663" projectLocationURI="../../../../ProtocolModules/XTDP_CNL113663/XTDP_CNL113663.tpd"/> + <ReferencedProject name="XTDPasp_CNL113494" projectLocationURI="../../../../TestPorts/XTDPasp_CNL113494/XTDPasp_CNL113494.tpd"/> + <ReferencedProject name="EPTF_CLL_UIHandler" projectLocationURI="../UIHandler/EPTF_CLL_UIHandler.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_CLL_GUIViewer_Functions.ttcn" relativeURI="EPTF_CLL_GUIViewer_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_GUIViewer.db" relativeURI="EPTF_CLL_GUIViewer.db"/> + <FileResource projectRelativePath="EPTF_CLL_GUIViewer.xml" relativeURI="EPTF_CLL_GUIViewer.xml"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/GUIViewer</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_HashMap.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_HashMap.tpd new file mode 100644 index 000000000..6db9e84f0 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_HashMap.tpd @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_CLL_HashMap</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Base" projectLocationURI="../Base/EPTF_CLL_Base.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_CLL_HashMapInt2Int_ExternalFunctions.cc" relativeURI="EPTF_CLL_HashMapInt2Int_ExternalFunctions.cc"/> + <FileResource projectRelativePath="EPTF_CLL_HashMapInt2Int_Functions.ttcn" relativeURI="EPTF_CLL_HashMapInt2Int_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_HashMapOct2Int_ExternalFunctions.cc" relativeURI="EPTF_CLL_HashMapOct2Int_ExternalFunctions.cc"/> + <FileResource projectRelativePath="EPTF_CLL_HashMapOct2Int_Functions.ttcn" relativeURI="EPTF_CLL_HashMapOct2Int_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_HashMapStr2Int_ExternalFunctions.cc" relativeURI="EPTF_CLL_HashMapStr2Int_ExternalFunctions.cc"/> + <FileResource projectRelativePath="EPTF_CLL_HashMapStr2Int_Functions.ttcn" relativeURI="EPTF_CLL_HashMapStr2Int_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_HashMap_Functions.ttcn" relativeURI="EPTF_CLL_HashMap_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_HashMap_Definitions.ttcn" relativeURI="EPTF_CLL_HashMap_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_HashMap_ExternalFunctions.hh" relativeURI="EPTF_CLL_HashMap_ExternalFunctions.hh"/> + </Files> + <PathVariables> + </PathVariables> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/EPTF_HashMap</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_HostAdmin.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_HostAdmin.tpd new file mode 100644 index 000000000..211b2a4f0 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_HostAdmin.tpd @@ -0,0 +1,46 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_CLL_HostAdmin</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Base" projectLocationURI="../Base/EPTF_CLL_Base.tpd"/> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../Common/EPTF_CLL_Common.tpd"/> + <ReferencedProject name="EPTF_CLL_DataSource" projectLocationURI="../DataSource/EPTF_CLL_DataSource.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging" projectLocationURI="../Logging/EPTF_CLL_Logging.tpd"/> + <ReferencedProject name="EPTF_CLL_StatMeasure" projectLocationURI="../StatMeasure/EPTF_CLL_StatMeasure.tpd"/> + <ReferencedProject name="EPTF_CLL_Variable" projectLocationURI="../Variable/EPTF_CLL_Variable.tpd"/> + <ReferencedProject name="LOADMEASasp_CNL113585" projectLocationURI="../../../../TestPorts/LOADMEASasp_CNL113585/LOADMEASasp_CNL113585.tpd"/> + <ReferencedProject name="TCCUsefulFunctions_CNL113472_Interface" projectLocationURI="../../../TCCUsefulFunctions_CNL113472/TCCUsefulFunctions_CNL113472_Interface.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_CLL_HostAdminServer_Definitions.ttcn" relativeURI="EPTF_CLL_HostAdminServer_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_HostAdminServer_Functions.ttcn" relativeURI="EPTF_CLL_HostAdminServer_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_HostAdmin_BaseDefinitions.ttcn" relativeURI="EPTF_CLL_HostAdmin_BaseDefinitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_HostAdmin_BaseFunctions.ttcn" relativeURI="EPTF_CLL_HostAdmin_BaseFunctions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_HostAdmin_DSFunctions.ttcn" relativeURI="EPTF_CLL_HostAdmin_DSFunctions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_HostAdmin_Definitions.ttcn" relativeURI="EPTF_CLL_HostAdmin_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_HostAdmin_Functions.ttcn" relativeURI="EPTF_CLL_HostAdmin_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/EPTF_CLL_HostAdmin</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_HostAdmin_UI.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_HostAdmin_UI.tpd new file mode 100644 index 000000000..1e25a9083 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_HostAdmin_UI.tpd @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_CLL_HostAdmin_UI</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Base" projectLocationURI="../Base/EPTF_CLL_Base.tpd"/> + <ReferencedProject name="EPTF_CLL_HostAdmin" projectLocationURI="EPTF_CLL_HostAdmin.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging" projectLocationURI="../Logging/EPTF_CLL_Logging.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging_UI" projectLocationURI="../Logging/EPTF_CLL_Logging_UI.tpd"/> + <ReferencedProject name="EPTF_CLL_UIHandler" projectLocationURI="../UIHandler/EPTF_CLL_UIHandler.tpd"/> + <ReferencedProject name="EPTF_CLL_Variable" projectLocationURI="../Variable/EPTF_CLL_Variable.tpd"/> + <ReferencedProject name="EPTF_CLL_Variable_UI" projectLocationURI="../UIHandler/EPTF_CLL_Variable_UI.tpd"/> + <ReferencedProject name="XTDPasp_CNL113494" projectLocationURI="../../../../TestPorts/XTDPasp_CNL113494/XTDPasp_CNL113494.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_CLL_HostAdminUI_Definitions.ttcn" relativeURI="EPTF_CLL_HostAdminUI_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_HostAdminUI_Functions.ttcn" relativeURI="EPTF_CLL_HostAdminUI_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/EPTF_CLL_HostAdmin_UI</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_ILog.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_ILog.tpd new file mode 100644 index 000000000..4b61eb165 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_ILog.tpd @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_CLL_ILog</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_ILogBase" projectLocationURI="EPTF_CLL_ILogBase.tpd"/> + <ReferencedProject name="EPTF_CLL_LGenBase" projectLocationURI="../LGenBase/EPTF_CLL_LGenBase.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_CLL_ILog_Definitions.ttcn" relativeURI="EPTF_CLL_ILog_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_ILog_Functions.ttcn" relativeURI="EPTF_CLL_ILog_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/EPTF_ILog</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <globalConstant>c_.*</globalConstant> + </NamingCoventions> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_ILogBase.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_ILogBase.tpd new file mode 100644 index 000000000..146effab3 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_ILogBase.tpd @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_CLL_ILogBase</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Base" projectLocationURI="../Base/EPTF_CLL_Base.tpd"/> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../Common/EPTF_CLL_Common.tpd"/> + <ReferencedProject name="EPTF_CLL_HashMap" projectLocationURI="../HashMap/EPTF_CLL_HashMap.tpd"/> + <ReferencedProject name="EPTF_CLL_FreeBusyQueue" projectLocationURI="../FreeBusyQueue/EPTF_CLL_FBQ.tpd"/> + <ReferencedProject name="EPTF_CLL_NQueue" projectLocationURI="../NQueue/EPTF_CLL_NQueue.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_CLL_ILogBase_Definitions.ttcn" relativeURI="EPTF_CLL_ILogBase_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_ILogBase_Functions.ttcn" relativeURI="EPTF_CLL_ILogBase_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/EPTF_ILogBase</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_ILogString.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_ILogString.tpd new file mode 100644 index 000000000..08baa58af --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_ILogString.tpd @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_CLL_ILogString</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_ILogBase" projectLocationURI="EPTF_CLL_ILogBase.tpd"/> + <ReferencedProject name="TCCUsefulFunctions_CNL113472_Common" projectLocationURI="../../../TCCUsefulFunctions_CNL113472/TCCUsefulFunctions_CNL113472_Common.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_CLL_ILogString_Definitions.ttcn" relativeURI="EPTF_CLL_ILogString_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_ILogString_Functions.ttcn" relativeURI="EPTF_CLL_ILogString_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/EPTF_ILogString</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_LGenBase.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_LGenBase.tpd new file mode 100644 index 000000000..187e2d3e9 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_LGenBase.tpd @@ -0,0 +1,82 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_CLL_LGenBase</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Base" projectLocationURI="../Base/EPTF_CLL_Base.tpd"/> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../Common/EPTF_CLL_Common.tpd"/> + <ReferencedProject name="EPTF_CLL_FreeBusyQueue" projectLocationURI="../FreeBusyQueue/EPTF_CLL_FBQ.tpd"/> + <ReferencedProject name="EPTF_CLL_HashMap" projectLocationURI="../HashMap/EPTF_CLL_HashMap.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging" projectLocationURI="../Logging/EPTF_CLL_Logging.tpd"/> + <ReferencedProject name="EPTF_CLL_RandomNArray" projectLocationURI="../RandomNArray/EPTF_CLL_RandomNArray.tpd"/> + <ReferencedProject name="EPTF_CLL_Scheduler" projectLocationURI="../Scheduler/EPTF_CLL_Scheduler.tpd"/> + <ReferencedProject name="EPTF_CLL_StatHandler" projectLocationURI="../StatHandler/EPTF_CLL_StatHandler.tpd"/> + <ReferencedProject name="EPTF_CLL_StatMeasure" projectLocationURI="../StatMeasure/EPTF_CLL_StatMeasure.tpd"/> + <ReferencedProject name="EPTF_CLL_Variable" projectLocationURI="../Variable/EPTF_CLL_Variable.tpd"/> + <ReferencedProject name="TCCUsefulFunctions_CNL113472_Common" projectLocationURI="../../../TCCUsefulFunctions_CNL113472/TCCUsefulFunctions_CNL113472_Common.tpd"/> + <ReferencedProject name="TCCUsefulFunctions_CNL113472_Maths" projectLocationURI="../../../TCCUsefulFunctions_CNL113472/TCCUsefulFunctions_CNL113472_Maths.tpd"/> + <ReferencedProject name="EPTF_CLL_DataSource" projectLocationURI="../DataSource/EPTF_CLL_DataSource.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_CLL_LGenBaseStats_Definitions.ttcn" relativeURI="EPTF_CLL_LGenBaseStats_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_LGenBaseStats_Functions.ttcn" relativeURI="EPTF_CLL_LGenBaseStats_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_LGenBaseTrafficMixer_Definitions.ttcn" relativeURI="EPTF_CLL_LGenBaseTrafficMixer_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_LGenBaseTrafficMixer_Functions.ttcn" relativeURI="EPTF_CLL_LGenBaseTrafficMixer_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_LGenBase_ConfigDefinitions.ttcn" relativeURI="EPTF_CLL_LGenBase_ConfigDefinitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_LGenBase_ConfigFunctions.ttcn" relativeURI="EPTF_CLL_LGenBase_ConfigFunctions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_LGenBase_Definitions.ttcn" relativeURI="EPTF_CLL_LGenBase_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_LGenBase_EventHandlingExternalFunctions.cc" relativeURI="EPTF_CLL_LGenBase_EventHandlingExternalFunctions.cc"/> + <FileResource projectRelativePath="EPTF_CLL_LGenBase_EventHandlingFunctions.ttcn" relativeURI="EPTF_CLL_LGenBase_EventHandlingFunctions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_LGenBase_ExternalFunctions.ttcn" relativeURI="EPTF_CLL_LGenBase_ExternalFunctions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_LGenBase_Functions.ttcn" relativeURI="EPTF_CLL_LGenBase_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_LGenBase_LoggingFunctions.ttcn" relativeURI="EPTF_CLL_LGenBase_LoggingFunctions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_LGenBase_PhaseConfigFunctions.ttcn" relativeURI="EPTF_CLL_LGenBase_PhaseConfigFunctions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_LGenBase_PhaseDefinitions.ttcn" relativeURI="EPTF_CLL_LGenBase_PhaseDefinitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_LGenBase_PhaseFunctions.ttcn" relativeURI="EPTF_CLL_LGenBase_PhaseFunctions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_LGenBase_StepFunctions.ttcn" relativeURI="EPTF_CLL_LGenBase_StepFunctions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_LGenBase_TemplateDefinitions.ttcn" relativeURI="EPTF_CLL_LGenBase_TemplateDefinitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_LGenBase_TemplateFunctions.ttcn" relativeURI="EPTF_CLL_LGenBase_TemplateFunctions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_LGenBase_TrafficFunctions.ttcn" relativeURI="EPTF_CLL_LGenBase_TrafficFunctions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_LGenBase_DSFunctions.ttcn" relativeURI="EPTF_CLL_LGenBase_DSFunctions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/LGenBase</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + <Configuration name="Debug"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/LGenBase</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <ConfigurationRequirements> + <configurationRequirement> + <projectName>EPTF_CLL_Common</projectName> + <rerquiredConfiguration>Debug</rerquiredConfiguration> + </configurationRequirement> + </ConfigurationRequirements> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_LGenBase_UI.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_LGenBase_UI.tpd new file mode 100644 index 000000000..556563d79 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_LGenBase_UI.tpd @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_CLL_LGenBase_UI</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_LGenBase" projectLocationURI="EPTF_CLL_LGenBase.tpd"/> + <ReferencedProject name="EPTF_CLL_UIHandler" projectLocationURI="../UIHandler/EPTF_CLL_UIHandler.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_CLL_LGenBaseStatsUI_Definitions.ttcn" relativeURI="EPTF_CLL_LGenBaseStatsUI_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_LGenBaseStatsUI_Functions.ttcn" relativeURI="EPTF_CLL_LGenBaseStatsUI_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/EPTF_CLL_LGenBase_UI</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_LoadRegulator.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_LoadRegulator.tpd new file mode 100644 index 000000000..4be8a0447 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_LoadRegulator.tpd @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_CLL_LoadRegulator</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Base" projectLocationURI="../Base/EPTF_CLL_Base.tpd"/> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../Common/EPTF_CLL_Common.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging" projectLocationURI="../Logging/EPTF_CLL_Logging.tpd"/> + <ReferencedProject name="EPTF_CLL_Variable" projectLocationURI="../Variable/EPTF_CLL_Variable.tpd"/> + <ReferencedProject name="EPTF_CLL_DataSource" projectLocationURI="../DataSource/EPTF_CLL_DataSource.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_CLL_LoadRegulator_Definitions.ttcn" relativeURI="EPTF_CLL_LoadRegulator_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_LoadRegulator_Functions.ttcn" relativeURI="EPTF_CLL_LoadRegulator_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/EPTF_CLL_LoadRegulator</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_LoadRegulatorUI.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_LoadRegulatorUI.tpd new file mode 100644 index 000000000..4748784d7 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_LoadRegulatorUI.tpd @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_CLL_LoadRegulatorUI</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_LoadRegulator" projectLocationURI="EPTF_CLL_LoadRegulator.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging" projectLocationURI="../Logging/EPTF_CLL_Logging.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging_UI" projectLocationURI="../Logging/EPTF_CLL_Logging_UI.tpd"/> + <ReferencedProject name="EPTF_CLL_UIHandler" projectLocationURI="../UIHandler/EPTF_CLL_UIHandler.tpd"/> + <ReferencedProject name="EPTF_CLL_Variable_UI" projectLocationURI="../UIHandler/EPTF_CLL_Variable_UI.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_CLL_LoadRegulatorUI_Definitions.ttcn" relativeURI="EPTF_CLL_LoadRegulatorUI_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_LoadRegulatorUI_Functions.ttcn" relativeURI="EPTF_CLL_LoadRegulatorUI_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/EPTF_CLL_LoadRegulatorUI</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Logging.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Logging.tpd new file mode 100644 index 000000000..5ac81e8ba --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Logging.tpd @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_CLL_Logging</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Base" projectLocationURI="../Base/EPTF_CLL_Base.tpd"/> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../Common/EPTF_CLL_Common.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_CLL_Logging_Definitions.ttcn" relativeURI="EPTF_CLL_Logging_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_Logging_Functions.ttcn" relativeURI="EPTF_CLL_Logging_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/EPTF_Logging</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Logging_Client.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Logging_Client.tpd new file mode 100644 index 000000000..e5faebc0e --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Logging_Client.tpd @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_CLL_Logging_Client</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Logging_Server" projectLocationURI="EPTF_CLL_Logging_Server.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_CLL_LoggingClient_Functions.ttcn" relativeURI="EPTF_CLL_LoggingClient_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_CLL_Logging_Client</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Logging_Server.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Logging_Server.tpd new file mode 100644 index 000000000..6351dd91e --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Logging_Server.tpd @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_CLL_Logging_Server</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../Common/EPTF_CLL_Common.tpd"/> + <ReferencedProject name="EPTF_CLL_DataSource" projectLocationURI="../DataSource/EPTF_CLL_DataSource.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging" projectLocationURI="EPTF_CLL_Logging.tpd"/> + <ReferencedProject name="EPTF_CLL_Variable" projectLocationURI="../Variable/EPTF_CLL_Variable.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_CLL_LoggingServer_Definitions.ttcn" relativeURI="EPTF_CLL_LoggingServer_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_LoggingServer_Functions.ttcn" relativeURI="EPTF_CLL_LoggingServer_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_CLL_Logging_Server</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Logging_UI.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Logging_UI.tpd new file mode 100644 index 000000000..039ca24cf --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Logging_UI.tpd @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_CLL_Logging_UI</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Base" projectLocationURI="../Base/EPTF_CLL_Base.tpd"/> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../Common/EPTF_CLL_Common.tpd"/> + <ReferencedProject name="EPTF_CLL_HashMap" projectLocationURI="../HashMap/EPTF_CLL_HashMap.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging" projectLocationURI="EPTF_CLL_Logging.tpd"/> + <ReferencedProject name="EPTF_CLL_UIHandler" projectLocationURI="../UIHandler/EPTF_CLL_UIHandler.tpd"/> + <ReferencedProject name="EPTF_CLL_Variable" projectLocationURI="../Variable/EPTF_CLL_Variable.tpd"/> + <ReferencedProject name="XTDPasp_CNL113494" projectLocationURI="../../../../TestPorts/XTDPasp_CNL113494/XTDPasp_CNL113494.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_CLL_LoggingUIClient_Functions.ttcn" relativeURI="EPTF_CLL_LoggingUIClient_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_LoggingUI_Definitions.ttcn" relativeURI="EPTF_CLL_LoggingUI_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_LoggingUI_Functions.ttcn" relativeURI="EPTF_CLL_LoggingUI_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_LoggingUI_PrivateFunctions.ttcn" relativeURI="EPTF_CLL_LoggingUI_PrivateFunctions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/EPTF_CLL_Logging_UI</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_NQueue.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_NQueue.tpd new file mode 100644 index 000000000..ab4575e13 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_NQueue.tpd @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_CLL_NQueue</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Base" projectLocationURI="../Base/EPTF_CLL_Base.tpd"/> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../Common/EPTF_CLL_Common.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_CLL_NQueue_Definitions.ttcn" relativeURI="EPTF_CLL_NQueue_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_NQueue_ExternalFunctions.cc" relativeURI="EPTF_CLL_NQueue_ExternalFunctions.cc"/> + <FileResource projectRelativePath="EPTF_CLL_NQueue_Functions.ttcn" relativeURI="EPTF_CLL_NQueue_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/NQueue</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_NameService.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_NameService.tpd new file mode 100644 index 000000000..9bcdd3b02 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_NameService.tpd @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_CLL_NameService</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Base" projectLocationURI="../Base/EPTF_CLL_Base.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging" projectLocationURI="../Logging/EPTF_CLL_Logging.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_CLL_NameServiceClient_Functions.ttcn" relativeURI="EPTF_CLL_NameServiceClient_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_NameService_Definitions.ttcn" relativeURI="EPTF_CLL_NameService_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_NameService_ExternalFunctions.cc" relativeURI="EPTF_CLL_NameService_ExternalFunctions.cc"/> + <FileResource projectRelativePath="EPTF_CLL_NameService_Functions.ttcn" relativeURI="EPTF_CLL_NameService_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/EPTF_CLL_NameService</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_PTCDeployment.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_PTCDeployment.tpd new file mode 100644 index 000000000..0ed279148 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_PTCDeployment.tpd @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_CLL_PTCDeployment</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Base" projectLocationURI="../Base/EPTF_CLL_Base.tpd"/> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../Common/EPTF_CLL_Common.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging" projectLocationURI="../Logging/EPTF_CLL_Logging.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_CLL_PTCDeployment_Definitions.ttcn" relativeURI="EPTF_CLL_PTCDeployment_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_PTCDeployment_Functions.ttcn" relativeURI="EPTF_CLL_PTCDeployment_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_PTCDeployment_PrivateFunctions.ttcn" relativeURI="EPTF_CLL_PTCDeployment_PrivateFunctions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/EPTF_CLL_PTCDeployment</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_RandomNArray.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_RandomNArray.tpd new file mode 100644 index 000000000..5ff043cab --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_RandomNArray.tpd @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_CLL_RandomNArray</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../Common/EPTF_CLL_Common.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_CLL_RNA_Definitions.ttcn" relativeURI="EPTF_CLL_RNA_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_RNA_Functions.ttcn" relativeURI="EPTF_CLL_RNA_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/RandomNArray</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_RedBlackTree.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_RedBlackTree.tpd new file mode 100644 index 000000000..c0c006c2e --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_RedBlackTree.tpd @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_CLL_RedBlackTree</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Base" projectLocationURI="../Base/EPTF_CLL_Base.tpd"/> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../Common/EPTF_CLL_Common.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_CLL_RBT_Definitions.ttcn" relativeURI="EPTF_CLL_RBT_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_RBT_ExternalFunctions.cc" relativeURI="EPTF_CLL_RBT_ExternalFunctions.cc"/> + <FileResource projectRelativePath="EPTF_CLL_RBT_Functions.ttcn" relativeURI="EPTF_CLL_RBT_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_RBtreeFloat_Functions.ttcn" relativeURI="EPTF_CLL_RBtreeFloat_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_RBtreeFloat_PrivateFunctions.ttcn" relativeURI="EPTF_CLL_RBtreeFloat_PrivateFunctions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_RBtreeInteger_Functions.ttcn" relativeURI="EPTF_CLL_RBtreeInteger_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_RBtreeInteger_PrivateFunctions.ttcn" relativeURI="EPTF_CLL_RBtreeInteger_PrivateFunctions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_RBtree_Definitions.ttcn" relativeURI="EPTF_CLL_RBtree_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_RBtree_Functions.ttcn" relativeURI="EPTF_CLL_RBtree_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_RBtree_PrivateFunctions.ttcn" relativeURI="EPTF_CLL_RBtree_PrivateFunctions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/EPTF_RedBlackTree</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Rendezvous.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Rendezvous.tpd new file mode 100644 index 000000000..7849d43a6 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Rendezvous.tpd @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_CLL_Rendezvous</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Base" projectLocationURI="../Base/EPTF_CLL_Base.tpd"/> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../Common/EPTF_CLL_Common.tpd"/> + <ReferencedProject name="EPTF_CLL_FreeBusyQueue" projectLocationURI="../FreeBusyQueue/EPTF_CLL_FBQ.tpd"/> + <ReferencedProject name="EPTF_CLL_HashMap" projectLocationURI="../HashMap/EPTF_CLL_HashMap.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging" projectLocationURI="../Logging/EPTF_CLL_Logging.tpd"/> + <ReferencedProject name="EPTF_CLL_Semaphore" projectLocationURI="../Semaphore/EPTF_CLL_Semaphore.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_CLL_RendezvousClient_Functions.ttcn" relativeURI="EPTF_CLL_RendezvousClient_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_Rendezvous_Definitions.ttcn" relativeURI="EPTF_CLL_Rendezvous_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_Rendezvous_Functions.ttcn" relativeURI="EPTF_CLL_Rendezvous_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/EPTF_CLL_Rendezvous</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_RingBuffer.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_RingBuffer.tpd new file mode 100644 index 000000000..49cc7ed4c --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_RingBuffer.tpd @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_CLL_RingBuffer</ProjectName> + <Files> + <FileResource projectRelativePath="EPTF_CLL_GenericRingBuffer_Definitions.ttcnin" relativeURI="EPTF_CLL_GenericRingBuffer_Definitions.ttcnin"/> + <FileResource projectRelativePath="EPTF_CLL_GenericRingBuffer_Functions.ttcnin" relativeURI="EPTF_CLL_GenericRingBuffer_Functions.ttcnin"/> + <FileResource projectRelativePath="EPTF_CLL_IntegerRingBuffer_Functions.ttcn" relativeURI="EPTF_CLL_IntegerRingBuffer_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_RingBuffer_Definitions.ttcn" relativeURI="EPTF_CLL_RingBuffer_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_RingBuffer_PrivateFunctions.ttcn" relativeURI="EPTF_CLL_RingBuffer_PrivateFunctions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/EPTF_CLL_RingBuffer</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Scheduler.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Scheduler.tpd new file mode 100644 index 000000000..2f0a9a14c --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Scheduler.tpd @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_CLL_Scheduler</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Base" projectLocationURI="../Base/EPTF_CLL_Base.tpd"/> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../Common/EPTF_CLL_Common.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging" projectLocationURI="../Logging/EPTF_CLL_Logging.tpd"/> + <ReferencedProject name="EPTF_CLL_RedBlackTree" projectLocationURI="../RedBlackTree/EPTF_CLL_RedBlackTree.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_CLL_RBTScheduler_Definitions.ttcn" relativeURI="EPTF_CLL_RBTScheduler_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_RBTScheduler_Functions.ttcn" relativeURI="EPTF_CLL_RBTScheduler_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_Scheduler_Definitions.ttcn" relativeURI="EPTF_CLL_Scheduler_Definitions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/EPTF_Scheduler</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Semaphore.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Semaphore.tpd new file mode 100644 index 000000000..39286a554 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Semaphore.tpd @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_CLL_Semaphore</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Base" projectLocationURI="../Base/EPTF_CLL_Base.tpd"/> + <ReferencedProject name="EPTF_CLL_FreeBusyQueue" projectLocationURI="../FreeBusyQueue/EPTF_CLL_FBQ.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging" projectLocationURI="../Logging/EPTF_CLL_Logging.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_CLL_Semaphore_Definitions.ttcn" relativeURI="EPTF_CLL_Semaphore_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_Semaphore_Functions.ttcn" relativeURI="EPTF_CLL_Semaphore_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/Semaphore</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_StatCapture.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_StatCapture.tpd new file mode 100644 index 000000000..ce443c246 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_StatCapture.tpd @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_CLL_StatCapture</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Base" projectLocationURI="../Base/EPTF_CLL_Base.tpd"/> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../Common/EPTF_CLL_Common.tpd"/> + <ReferencedProject name="EPTF_CLL_HashMap" projectLocationURI="../HashMap/EPTF_CLL_HashMap.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging" projectLocationURI="../Logging/EPTF_CLL_Logging.tpd"/> + <ReferencedProject name="EPTF_CLL_Scheduler" projectLocationURI="../Scheduler/EPTF_CLL_Scheduler.tpd"/> + <ReferencedProject name="EPTF_CLL_StatMeasure" projectLocationURI="../StatMeasure/EPTF_CLL_StatMeasure.tpd"/> + <ReferencedProject name="EPTF_CLL_Variable" projectLocationURI="../Variable/EPTF_CLL_Variable.tpd"/> + <ReferencedProject name="TCCUsefulFunctions_CNL113472_Common" projectLocationURI="../../../TCCUsefulFunctions_CNL113472/TCCUsefulFunctions_CNL113472_Common.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_CLL_StatCapture_Definitions.ttcn" relativeURI="EPTF_CLL_StatCapture_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_StatCapture_ExternalFunctions.cc" relativeURI="EPTF_CLL_StatCapture_ExternalFunctions.cc"/> + <FileResource projectRelativePath="EPTF_CLL_StatCapture_Functions.ttcn" relativeURI="EPTF_CLL_StatCapture_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/EPTF_CLL_StatCapture</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_StatCaptureControl.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_StatCaptureControl.tpd new file mode 100644 index 000000000..27875e6dc --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_StatCaptureControl.tpd @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_CLL_StatCaptureControl</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Logging" projectLocationURI="../Logging/EPTF_CLL_Logging.tpd"/> + <ReferencedProject name="EPTF_CLL_NameService" projectLocationURI="../NameService/EPTF_CLL_NameService.tpd"/> + <ReferencedProject name="EPTF_CLL_StatCapture" projectLocationURI="EPTF_CLL_StatCapture.tpd"/> + <ReferencedProject name="EPTF_CLL_Variable" projectLocationURI="../Variable/EPTF_CLL_Variable.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_CLL_StatCaptureControl_Definitions.ttcn" relativeURI="EPTF_CLL_StatCaptureControl_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_StatCaptureControl_Functions.ttcn" relativeURI="EPTF_CLL_StatCaptureControl_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/EPTF_CLL_StatCaptureControl</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_StatCaptureUI.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_StatCaptureUI.tpd new file mode 100644 index 000000000..794ed45e8 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_StatCaptureUI.tpd @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_CLL_StatCaptureUI</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Logging" projectLocationURI="../Logging/EPTF_CLL_Logging.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging_UI" projectLocationURI="../Logging/EPTF_CLL_Logging_UI.tpd"/> + <ReferencedProject name="EPTF_CLL_StatCapture" projectLocationURI="EPTF_CLL_StatCapture.tpd"/> + <ReferencedProject name="EPTF_CLL_StatCaptureControl" projectLocationURI="EPTF_CLL_StatCaptureControl.tpd"/> + <ReferencedProject name="EPTF_CLL_StatMeasure" projectLocationURI="../StatMeasure/EPTF_CLL_StatMeasure.tpd"/> + <ReferencedProject name="EPTF_CLL_UIHandler" projectLocationURI="../UIHandler/EPTF_CLL_UIHandler.tpd"/> + <ReferencedProject name="EPTF_CLL_Variable_UI" projectLocationURI="../UIHandler/EPTF_CLL_Variable_UI.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_CLL_StatCaptureUI_Definitions.ttcn" relativeURI="EPTF_CLL_StatCaptureUI_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_StatCaptureUI_Functions.ttcn" relativeURI="EPTF_CLL_StatCaptureUI_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/EPTF_CLL_StatCaptureUI</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_StatHandler.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_StatHandler.tpd new file mode 100644 index 000000000..1977401fa --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_StatHandler.tpd @@ -0,0 +1,46 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_CLL_StatHandler</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Base" projectLocationURI="../Base/EPTF_CLL_Base.tpd"/> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../Common/EPTF_CLL_Common.tpd"/> + <ReferencedProject name="EPTF_CLL_FreeBusyQueue" projectLocationURI="../FreeBusyQueue/EPTF_CLL_FBQ.tpd"/> + <ReferencedProject name="EPTF_CLL_HashMap" projectLocationURI="../HashMap/EPTF_CLL_HashMap.tpd"/> + <ReferencedProject name="EPTF_CLL_Semaphore" projectLocationURI="../Semaphore/EPTF_CLL_Semaphore.tpd"/> + <ReferencedProject name="EPTF_CLL_StatMeasure" projectLocationURI="../StatMeasure/EPTF_CLL_StatMeasure.tpd"/> + <ReferencedProject name="EPTF_CLL_Variable" projectLocationURI="../Variable/EPTF_CLL_Variable.tpd"/> + <ReferencedProject name="EPTF_CLL_DataSource" projectLocationURI="../DataSource/EPTF_CLL_DataSource.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_CLL_StatHandlerClient_Definitions.ttcn" relativeURI="EPTF_CLL_StatHandlerClient_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_StatHandlerClient_Functions.ttcn" relativeURI="EPTF_CLL_StatHandlerClient_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_StatHandlerLogging_Definitions.ttcn" relativeURI="EPTF_CLL_StatHandlerLogging_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_StatHandlerLogging_Functions.ttcn" relativeURI="EPTF_CLL_StatHandlerLogging_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_StatHandler_Definitions.ttcn" relativeURI="EPTF_CLL_StatHandler_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_StatHandler_Functions.ttcn" relativeURI="EPTF_CLL_StatHandler_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_StatHandler_DSFunctions.ttcn" relativeURI="EPTF_CLL_StatHandler_DSFunctions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/StatHandler</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_StatHandler_UI.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_StatHandler_UI.tpd new file mode 100644 index 000000000..0c0f04c9a --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_StatHandler_UI.tpd @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_CLL_StatHandler_UI</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Base" projectLocationURI="../Base/EPTF_CLL_Base.tpd"/> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../Common/EPTF_CLL_Common.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging_UI" projectLocationURI="../Logging/EPTF_CLL_Logging_UI.tpd"/> + <ReferencedProject name="EPTF_CLL_Semaphore" projectLocationURI="../Semaphore/EPTF_CLL_Semaphore.tpd"/> + <ReferencedProject name="EPTF_CLL_StatHandler" projectLocationURI="EPTF_CLL_StatHandler.tpd"/> + <ReferencedProject name="EPTF_CLL_UIHandler" projectLocationURI="../UIHandler/EPTF_CLL_UIHandler.tpd"/> + <ReferencedProject name="EPTF_CLL_Variable" projectLocationURI="../Variable/EPTF_CLL_Variable.tpd"/> + <ReferencedProject name="XTDPasp_CNL113494" projectLocationURI="../../../../TestPorts/XTDPasp_CNL113494/XTDPasp_CNL113494.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_CLL_StatHandlerUI_Definitions.ttcn" relativeURI="EPTF_CLL_StatHandlerUI_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_StatHandlerUI_Functions.ttcn" relativeURI="EPTF_CLL_StatHandlerUI_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/EPTF_CLL_StatHandler_UI</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_StatManager.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_StatManager.tpd new file mode 100644 index 000000000..de305597f --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_StatManager.tpd @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_CLL_StatManager</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Base" projectLocationURI="../Base/EPTF_CLL_Base.tpd"/> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../Common/EPTF_CLL_Common.tpd"/> + <ReferencedProject name="EPTF_CLL_HashMap" projectLocationURI="../HashMap/EPTF_CLL_HashMap.tpd"/> + <ReferencedProject name="EPTF_CLL_StatMeasure" projectLocationURI="../StatMeasure/EPTF_CLL_StatMeasure.tpd"/> + <ReferencedProject name="EPTF_CLL_Variable" projectLocationURI="../Variable/EPTF_CLL_Variable.tpd"/> + <ReferencedProject name="EPTF_CLL_DataSource" projectLocationURI="../DataSource/EPTF_CLL_DataSource.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging" projectLocationURI="../Logging/EPTF_CLL_Logging.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_CLL_StatManager_Definitions.ttcn" relativeURI="EPTF_CLL_StatManager_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_StatManager_Functions.ttcn" relativeURI="EPTF_CLL_StatManager_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/StatManager</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_StatMeasure.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_StatMeasure.tpd new file mode 100644 index 000000000..05101b518 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_StatMeasure.tpd @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_CLL_StatMeasure</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Base" projectLocationURI="../Base/EPTF_CLL_Base.tpd"/> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../Common/EPTF_CLL_Common.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging" projectLocationURI="../Logging/EPTF_CLL_Logging.tpd"/> + <ReferencedProject name="EPTF_CLL_Variable" projectLocationURI="../Variable/EPTF_CLL_Variable.tpd"/> + <ReferencedProject name="TCCUsefulFunctions_CNL113472_Common" projectLocationURI="../../../TCCUsefulFunctions_CNL113472/TCCUsefulFunctions_CNL113472_Common.tpd"/> + <ReferencedProject name="TCCUsefulFunctions_CNL113472_Maths" projectLocationURI="../../../TCCUsefulFunctions_CNL113472/TCCUsefulFunctions_CNL113472_Maths.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_CLL_StatMeasure_Definitions.ttcn" relativeURI="EPTF_CLL_StatMeasure_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_StatMeasure_Functions.ttcn" relativeURI="EPTF_CLL_StatMeasure_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/StatMeasure</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_StatReplay.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_StatReplay.tpd new file mode 100644 index 000000000..38ef61a0c --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_StatReplay.tpd @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_CLL_StatReplay</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Base" projectLocationURI="../Base/EPTF_CLL_Base.tpd"/> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../Common/EPTF_CLL_Common.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging" projectLocationURI="../Logging/EPTF_CLL_Logging.tpd"/> + <ReferencedProject name="EPTF_CLL_RingBuffer" projectLocationURI="../RingBuffer/EPTF_CLL_RingBuffer.tpd"/> + <ReferencedProject name="EPTF_CLL_Semaphore" projectLocationURI="../Semaphore/EPTF_CLL_Semaphore.tpd"/> + <ReferencedProject name="EPTF_CLL_UIHandler" projectLocationURI="../UIHandler/EPTF_CLL_UIHandler.tpd"/> + <ReferencedProject name="EPTF_CLL_Variable" projectLocationURI="../Variable/EPTF_CLL_Variable.tpd"/> + <ReferencedProject name="XTDPasp_CNL113494" projectLocationURI="../../../../TestPorts/XTDPasp_CNL113494/XTDPasp_CNL113494.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_CLL_StatReplay_Definitions.ttcnpp" relativeURI="EPTF_CLL_StatReplay_Definitions.ttcnpp"/> + <FileResource projectRelativePath="EPTF_CLL_StatReplay_Execution.ttcn" relativeURI="EPTF_CLL_StatReplay_Execution.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_StatReplay_Functions.ttcn" relativeURI="EPTF_CLL_StatReplay_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/EPTF_CLL_StatReplay</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_TimeProfileEditor.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_TimeProfileEditor.tpd new file mode 100644 index 000000000..a2fb5050d --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_TimeProfileEditor.tpd @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_CLL_TimeProfileEditor</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../Common/EPTF_CLL_Common.tpd"/> + <ReferencedProject name="EPTF_CLL_ExecCtrl" projectLocationURI="../ExecCtrl/EPTF_CLL_ExecCtrl.tpd"/> + <ReferencedProject name="EPTF_CLL_Transport_IPL4" projectLocationURI="../Transport/EPTF_CLL_Transport_IPL4.tpd"/> + <ReferencedProject name="TCCUsefulFunctions_CNL113472_Common" projectLocationURI="../../../TCCUsefulFunctions_CNL113472/TCCUsefulFunctions_CNL113472_Common.tpd"/> + <ReferencedProject name="XTDPasp_CNL113494" projectLocationURI="../../../../TestPorts/XTDPasp_CNL113494/XTDPasp_CNL113494.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_CLL_TimeProfileEditor.ttcn" relativeURI="EPTF_CLL_TimeProfileEditor.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_TimeProfileEditor_Definitions.ttcn" relativeURI="EPTF_CLL_TimeProfileEditor_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_TimeProfileEditor_Functions.ttcn" relativeURI="EPTF_CLL_TimeProfileEditor_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_TimeProfileEditor_XTDPTemplates.ttcn" relativeURI="EPTF_CLL_TimeProfileEditor_XTDPTemplates.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/EPTF_CLL_TimeProfileEditor</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Transport.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Transport.tpd new file mode 100644 index 000000000..5fc133381 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Transport.tpd @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_CLL_Transport</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Base" projectLocationURI="../Base/EPTF_CLL_Base.tpd"/> + <ReferencedProject name="EPTF_CLL_Transport_Common" projectLocationURI="EPTF_CLL_Transport_Common.tpd"/> + <ReferencedProject name="EPTF_CLL_Transport_IPL2" projectLocationURI="EPTF_CLL_Transport_IPL2.tpd"/> + <ReferencedProject name="EPTF_CLL_Transport_IPL4" projectLocationURI="EPTF_CLL_Transport_IPL4.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_CLL_Transport_Definitions.ttcn" relativeURI="EPTF_CLL_Transport_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_Transport_Functions.ttcn" relativeURI="EPTF_CLL_Transport_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/EPTF_CLL_Transport</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_TransportRouting.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_TransportRouting.tpd new file mode 100644 index 000000000..4e8d0d707 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_TransportRouting.tpd @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_CLL_TransportRouting</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Base" projectLocationURI="../Base/EPTF_CLL_Base.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_CLL_TransportRouting_Definitions.ttcn" relativeURI="EPTF_CLL_TransportRouting_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_TransportRouting_Functions.ttcn" relativeURI="EPTF_CLL_TransportRouting_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/EPTF_CLL_TransportRouting</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Transport_CommPortIPL4.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Transport_CommPortIPL4.tpd new file mode 100644 index 000000000..ced456d11 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Transport_CommPortIPL4.tpd @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_CLL_Transport_CommPortIPL4</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Transport_IPL4" projectLocationURI="EPTF_CLL_Transport_IPL4.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_CLL_TransportCommPortIPL4_Definitions.ttcn" relativeURI="EPTF_CLL_TransportCommPortIPL4_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_TransportCommPortIPL4_Functions.ttcn" relativeURI="EPTF_CLL_TransportCommPortIPL4_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_CLL_Transport_CommPortIPL4</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Transport_Common.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Transport_Common.tpd new file mode 100644 index 000000000..b3628f2fb --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Transport_Common.tpd @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_CLL_Transport_Common</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../Common/EPTF_CLL_Common.tpd"/> + <ReferencedProject name="Socket_API_CNL113686" projectLocationURI="../../../../TestPorts/Common_Components/Socket_API_CNL113686/Socket_API_CNL113686.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_CLL_Transport_CommonDefinitions.ttcn" relativeURI="EPTF_CLL_Transport_CommonDefinitions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/EPTF_Transport_Common</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Transport_IPL2.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Transport_IPL2.tpd new file mode 100644 index 000000000..cd9d9f12d --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Transport_IPL2.tpd @@ -0,0 +1,52 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_CLL_Transport_IPL2</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Base" projectLocationURI="../Base/EPTF_CLL_Base.tpd"/> + <ReferencedProject name="EPTF_CLL_Buffer" projectLocationURI="../Buffer/EPTF_CLL_Buffer.tpd"/> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../Common/EPTF_CLL_Common.tpd"/> + <ReferencedProject name="EPTF_CLL_FreeBusyQueue" projectLocationURI="../FreeBusyQueue/EPTF_CLL_FBQ.tpd"/> + <ReferencedProject name="EPTF_CLL_HashMap" projectLocationURI="../HashMap/EPTF_CLL_HashMap.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging" projectLocationURI="../Logging/EPTF_CLL_Logging.tpd"/> + <ReferencedProject name="EPTF_CLL_Scheduler" projectLocationURI="../Scheduler/EPTF_CLL_Scheduler.tpd"/> + <ReferencedProject name="EPTF_CLL_Semaphore" projectLocationURI="../Semaphore/EPTF_CLL_Semaphore.tpd"/> + <ReferencedProject name="EPTF_CLL_Transport_Common" projectLocationURI="EPTF_CLL_Transport_Common.tpd"/> + <ReferencedProject name="EPTF_CLL_Variable" projectLocationURI="../Variable/EPTF_CLL_Variable.tpd"/> + <ReferencedProject name="IP_CNL113418" projectLocationURI="../../../../ProtocolModules/IP_CNL113418/IP_CNL113418.tpd"/> + <ReferencedProject name="LANL2asp_CNL113519" projectLocationURI="../../../../TestPorts/LANL2asp_CNL113519/LANL2asp_CNL113519.tpd"/> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../../../../ProtocolModules/COMMON/ProtocolModules_Common.tpd"/> + <ReferencedProject name="Socket_API_CNL113686" projectLocationURI="../../../../TestPorts/Common_Components/Socket_API_CNL113686/Socket_API_CNL113686.tpd"/> + <ReferencedProject name="TCCUsefulFunctions_CNL113472_Common" projectLocationURI="../../../TCCUsefulFunctions_CNL113472/TCCUsefulFunctions_CNL113472_Common.tpd"/> + <ReferencedProject name="TCCUsefulFunctions_CNL113472_Interface" projectLocationURI="../../../TCCUsefulFunctions_CNL113472/TCCUsefulFunctions_CNL113472_Interface.tpd"/> + <ReferencedProject name="TCP_CNL113675" projectLocationURI="../../../../ProtocolModules/TCP_CNL113675/TCP_CNL113675.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_CLL_TransportIPL2_Definitions.ttcn" relativeURI="EPTF_CLL_TransportIPL2_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_TransportIPL2_ExternalFunctions.cc" relativeURI="EPTF_CLL_TransportIPL2_ExternalFunctions.cc"/> + <FileResource projectRelativePath="EPTF_CLL_TransportIPL2_Functions.ttcn" relativeURI="EPTF_CLL_TransportIPL2_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_CLL_Transport_IPL2</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Transport_IPL4.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Transport_IPL4.tpd new file mode 100644 index 000000000..e45a39057 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Transport_IPL4.tpd @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_CLL_Transport_IPL4</ProjectName> + <ReferencedProjects> + <ReferencedProject name="Abstract_Socket_CNL113384" projectLocationURI="../../../../TestPorts/Common_Components/Abstract_Socket_CNL113384/Abstract_Socket_CNL113384.tpd"/> + <ReferencedProject name="EPTF_CLL_Base" projectLocationURI="../Base/EPTF_CLL_Base.tpd"/> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../Common/EPTF_CLL_Common.tpd"/> + <ReferencedProject name="EPTF_CLL_FreeBusyQueue" projectLocationURI="../FreeBusyQueue/EPTF_CLL_FBQ.tpd"/> + <ReferencedProject name="EPTF_CLL_HashMap" projectLocationURI="../HashMap/EPTF_CLL_HashMap.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging" projectLocationURI="../Logging/EPTF_CLL_Logging.tpd"/> + <ReferencedProject name="EPTF_CLL_Transport_Common" projectLocationURI="EPTF_CLL_Transport_Common.tpd"/> + <ReferencedProject name="EPTF_CLL_Transport_MessageBufferManager" projectLocationURI="EPTF_CLL_Transport_MessageBufferManager.tpd"/> + <ReferencedProject name="EPTF_CLL_Variable" projectLocationURI="../Variable/EPTF_CLL_Variable.tpd"/> + <ReferencedProject name="IPL4asp_CNL113531_Interface" projectLocationURI="../../../../TestPorts/IPL4asp_CNL113531/IPL4asp_CNL113531_Interface.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_CLL_TransportIPL4_Definitions.ttcn" relativeURI="EPTF_CLL_TransportIPL4_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_TransportIPL4_Functions.ttcn" relativeURI="EPTF_CLL_TransportIPL4_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/EPTF_Transport_IPL4</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Transport_MessageBufferManager.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Transport_MessageBufferManager.tpd new file mode 100644 index 000000000..4ce8e2d4c --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Transport_MessageBufferManager.tpd @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_CLL_Transport_MessageBufferManager</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Base" projectLocationURI="../Base/EPTF_CLL_Base.tpd"/> + <ReferencedProject name="EPTF_CLL_FreeBusyQueue" projectLocationURI="../FreeBusyQueue/EPTF_CLL_FBQ.tpd"/> + <ReferencedProject name="EPTF_CLL_HashMap" projectLocationURI="../HashMap/EPTF_CLL_HashMap.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging" projectLocationURI="../Logging/EPTF_CLL_Logging.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_CLL_TransportMessageBufferManager_Definitions.ttcn" relativeURI="EPTF_CLL_TransportMessageBufferManager_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_TransportMessageBufferManager_Functions.ttcn" relativeURI="EPTF_CLL_TransportMessageBufferManager_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/EPTF_TransportMessageBufferManager</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_UIHandler.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_UIHandler.tpd new file mode 100644 index 000000000..a2c55cf50 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_UIHandler.tpd @@ -0,0 +1,103 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_CLL_UIHandler</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Base" projectLocationURI="../Base/EPTF_CLL_Base.tpd"/> + <ReferencedProject name="EPTF_CLL_CLI" projectLocationURI="../CommandLineInterface/EPTF_CLL_CLI.tpd"/> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../Common/EPTF_CLL_Common.tpd"/> + <ReferencedProject name="EPTF_CLL_DataSource" projectLocationURI="../DataSource/EPTF_CLL_DataSource.tpd"/> + <ReferencedProject name="EPTF_CLL_HashMap" projectLocationURI="../HashMap/EPTF_CLL_HashMap.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging" projectLocationURI="../Logging/EPTF_CLL_Logging.tpd"/> + <ReferencedProject name="EPTF_CLL_RingBuffer" projectLocationURI="../RingBuffer/EPTF_CLL_RingBuffer.tpd"/> + <ReferencedProject name="EPTF_CLL_Semaphore" projectLocationURI="../Semaphore/EPTF_CLL_Semaphore.tpd"/> + <ReferencedProject name="EPTF_CLL_StatManager" projectLocationURI="../StatManager/EPTF_CLL_StatManager.tpd"/> + <ReferencedProject name="EPTF_CLL_StatMeasure" projectLocationURI="../StatMeasure/EPTF_CLL_StatMeasure.tpd"/> + <ReferencedProject name="EPTF_CLL_Transport_IPL4" projectLocationURI="../Transport/EPTF_CLL_Transport_IPL4.tpd"/> + <ReferencedProject name="EPTF_CLL_Variable" projectLocationURI="../Variable/EPTF_CLL_Variable.tpd"/> + <ReferencedProject name="HTTPmsg_CNL113312" projectLocationURI="../../../../TestPorts/HTTPmsg_CNL113312/HTTPmsg_CNL113312.tpd"/> + <ReferencedProject name="TCCUsefulFunctions_CNL113472_Common" projectLocationURI="../../../TCCUsefulFunctions_CNL113472/TCCUsefulFunctions_CNL113472_Common.tpd"/> + <ReferencedProject name="XTDP_CNL113663" projectLocationURI="../../../../ProtocolModules/XTDP_CNL113663/XTDP_CNL113663.tpd"/> + <ReferencedProject name="XTDPasp_CNL113494" projectLocationURI="../../../../TestPorts/XTDPasp_CNL113494/XTDPasp_CNL113494.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_CLL_UIHandlerCLI_CommandDefinitions.ttcn" relativeURI="EPTF_CLL_UIHandlerCLI_CommandDefinitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_UIHandlerCLI_Definitions.ttcn" relativeURI="EPTF_CLL_UIHandlerCLI_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_UIHandlerCLI_Functions.ttcn" relativeURI="EPTF_CLL_UIHandlerCLI_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_UIHandlerClient_Definitions.ttcn" relativeURI="EPTF_CLL_UIHandlerClient_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_UIHandlerClient_Functions.ttcn" relativeURI="EPTF_CLL_UIHandlerClient_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_UIHandler_BrowserFunctions.ttcn" relativeURI="EPTF_CLL_UIHandler_BrowserFunctions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_UIHandler_CLIClientDefinitions.ttcn" relativeURI="EPTF_CLL_UIHandler_CLIClientDefinitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_UIHandler_ChartDataTypeRingBuffer_Functions.ttcn" relativeURI="EPTF_CLL_UIHandler_ChartDataTypeRingBuffer_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_UIHandler_ChartDataTypeRingBuffer_Functions.ttcnpp" relativeURI="EPTF_CLL_UIHandler_ChartDataTypeRingBuffer_Functions.ttcnpp"/> + <FileResource projectRelativePath="EPTF_CLL_UIHandler_ConvertFunctions.ttcn" relativeURI="EPTF_CLL_UIHandler_ConvertFunctions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_UIHandler_DS_Definitions.ttcn" relativeURI="EPTF_CLL_UIHandler_DS_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_UIHandler_DS_Functions.ttcn" relativeURI="EPTF_CLL_UIHandler_DS_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_UIHandler_Definitions.ttcn" relativeURI="EPTF_CLL_UIHandler_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_UIHandler_ExternalFunctions.cc" relativeURI="EPTF_CLL_UIHandler_ExternalFunctions.cc"/> + <FileResource projectRelativePath="EPTF_CLL_UIHandler_MsgDefinitions.ttcn" relativeURI="EPTF_CLL_UIHandler_MsgDefinitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_UIHandler_PrivateFunctions.ttcn" relativeURI="EPTF_CLL_UIHandler_PrivateFunctions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_UIHandler_WidgetFunctions.ttcn" relativeURI="EPTF_CLL_UIHandler_WidgetFunctions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_UIHandler_XSD_XTDPTemplateDefinitions.ttcn" relativeURI="EPTF_CLL_UIHandler_XSD_XTDPTemplateDefinitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_UIHandler_XTDPTemplateDefinitions.ttcn" relativeURI="EPTF_CLL_UIHandler_XTDPTemplateDefinitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_UIHandler_XULFunctions.ttcn" relativeURI="EPTF_CLL_UIHandler_XULFunctions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <symboliclinklessBuild>true</symboliclinklessBuild> + <GNUMake>true</GNUMake> + <targetExecutable>bin/UIHandler</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <globalConstant>c_.*</globalConstant> + </NamingCoventions> + </ProjectProperties> + <FileProperties> + <FileResource> + <FilePath>EPTF_CLL_UIHandler_ChartDataTypeRingBuffer_Functions.ttcn</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="ringbuffer_generated"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <symboliclinklessBuild>true</symboliclinklessBuild> + <GNUMake>true</GNUMake> + <targetExecutable>bin/UIHandler</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <globalConstant>c_.*</globalConstant> + </NamingCoventions> + </ProjectProperties> + <FileProperties> + <FileResource> + <FilePath>EPTF_CLL_UIHandler_ChartDataTypeRingBuffer_Functions.ttcnpp</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Variable.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Variable.tpd new file mode 100644 index 000000000..955683891 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Variable.tpd @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_CLL_Variable</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Base" projectLocationURI="../Base/EPTF_CLL_Base.tpd"/> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../Common/EPTF_CLL_Common.tpd"/> + <ReferencedProject name="EPTF_CLL_FreeBusyQueue" projectLocationURI="../FreeBusyQueue/EPTF_CLL_FBQ.tpd"/> + <ReferencedProject name="EPTF_CLL_HashMap" projectLocationURI="../HashMap/EPTF_CLL_HashMap.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging" projectLocationURI="../Logging/EPTF_CLL_Logging.tpd"/> + <ReferencedProject name="EPTF_CLL_Scheduler" projectLocationURI="../Scheduler/EPTF_CLL_Scheduler.tpd"/> + <ReferencedProject name="TCCUsefulFunctions_CNL113472_Common" projectLocationURI="../../../TCCUsefulFunctions_CNL113472/TCCUsefulFunctions_CNL113472_Common.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_CLL_Variable_Definitions.ttcn" relativeURI="EPTF_CLL_Variable_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_Variable_ExternalFunctions.cc" relativeURI="EPTF_CLL_Variable_ExternalFunctions.cc"/> + <FileResource projectRelativePath="EPTF_CLL_Variable_Functions.ttcn" relativeURI="EPTF_CLL_Variable_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/Variable</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Variable_UI.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Variable_UI.tpd new file mode 100644 index 000000000..be231b62a --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CLL_Variable_UI.tpd @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_CLL_Variable_UI</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Base" projectLocationURI="../Base/EPTF_CLL_Base.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging" projectLocationURI="../Logging/EPTF_CLL_Logging.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging_UI" projectLocationURI="../Logging/EPTF_CLL_Logging_UI.tpd"/> + <ReferencedProject name="EPTF_CLL_UIHandler" projectLocationURI="EPTF_CLL_UIHandler.tpd"/> + <ReferencedProject name="EPTF_CLL_Variable" projectLocationURI="../Variable/EPTF_CLL_Variable.tpd"/> + <ReferencedProject name="XTDPasp_CNL113494" projectLocationURI="../../../../TestPorts/XTDPasp_CNL113494/XTDPasp_CNL113494.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_CLL_UIHandlerVariableUI_Definitions.ttcn" relativeURI="EPTF_CLL_UIHandlerVariableUI_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_UIHandlerVariableUI_Functions.ttcn" relativeURI="EPTF_CLL_UIHandlerVariableUI_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/EPTF_CLL_Variable_UI</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_CommonTransport_M3_CNL113682.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CommonTransport_M3_CNL113682.tpd new file mode 100644 index 000000000..ef670b5ad --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CommonTransport_M3_CNL113682.tpd @@ -0,0 +1,95 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: EPTF_CommonTransport_M3_CNL113682.tpd + Description: tpd project file + Rev: R4A01 + Prodnr: CNL 113 682 + Updated: 2012-10-01 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_CommonTransport_M3_CNL113682</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Base" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Base/EPTF_CLL_Base.tpd"/> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Common/EPTF_CLL_Common.tpd"/> + <ReferencedProject name="EPTF_CLL_FreeBusyQueue" projectLocationURI="../EPTF_Core_Library_CNL113512/src/FreeBusyQueue/EPTF_CLL_FBQ.tpd"/> + <ReferencedProject name="EPTF_CLL_LGenBase" projectLocationURI="../EPTF_Core_Library_CNL113512/src/LGenBase/EPTF_CLL_LGenBase.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Logging/EPTF_CLL_Logging.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging_Server" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Logging/EPTF_CLL_Logging_Server.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging_Client" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Logging/EPTF_CLL_Logging_Client.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging_UI" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Logging/EPTF_CLL_Logging_UI.tpd"/> + <ReferencedProject name="EPTF_CLL_Scheduler" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Scheduler/EPTF_CLL_Scheduler.tpd"/> + <ReferencedProject name="EPTF_CLL_StatMeasure" projectLocationURI="../EPTF_Core_Library_CNL113512/src/StatMeasure/EPTF_CLL_StatMeasure.tpd"/> + <ReferencedProject name="EPTF_CLL_TransportRouting" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_TransportRouting.tpd"/> + <ReferencedProject name="EPTF_CLL_Variable" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Variable/EPTF_CLL_Variable.tpd"/> + <ReferencedProject name="MTP3asp_EIN_CNL113421" projectLocationURI="../../TestPorts/MTP3asp_EIN_CNL113421/MTP3asp_EIN_CNL113421.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_M3_Logger_Definitions.ttcn" relativeURI="src/Logger/EPTF_M3_Logger_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_M3_Logger_Functions.ttcn" relativeURI="src/Logger/EPTF_M3_Logger_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_M3_Logging_Definitions.ttcn" relativeURI="src/Logger/EPTF_M3_Logging_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_M3_Logging_Functions.ttcn" relativeURI="src/Logger/EPTF_M3_Logging_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_M3_Transport_Definitions.ttcn" relativeURI="src/Transport/EPTF_M3_Transport_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_M3_Transport_Functions.ttcn" relativeURI="src/Transport/EPTF_M3_Transport_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_Transport_CommPort_M3_Definitions.ttcnpp" relativeURI="src/Transport/EPTF_Transport_CommPort_M3_Definitions.ttcnpp"/> + <FileResource projectRelativePath="EPTF_Transport_CommPort_M3_Functions.ttcnpp" relativeURI="src/Transport/EPTF_Transport_CommPort_M3_Functions.ttcnpp"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <symboliclinklessBuild>true</symboliclinklessBuild> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_CommonTransport_M3_CNL113682</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>MTP3_EIN_TESTPORT</listItem> + </TTCN3preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + <Configuration name="With_EINstack"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_CommonTransport_M3_CNL113682</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>MTP3_EIN_TESTPORT</listItem> + </TTCN3preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + <Configuration name="Without_EIN"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_CommonTransport_M3_CNL113682</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_CommonTransport_SCCP_CNL113610.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CommonTransport_SCCP_CNL113610.tpd new file mode 100644 index 000000000..d25a8838e --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CommonTransport_SCCP_CNL113610.tpd @@ -0,0 +1,58 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: EPTF_CommonTransport_SCCP_CNL113610.tpd + Description: tpd project file + Rev: R1A07 + Prodnr: CNL 113 610 + Updated: 2013-01-25 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_CommonTransport_SCCP_CNL113610</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_LGenBase" projectLocationURI="../EPTF_Core_Library_CNL113512/src/LGenBase/EPTF_CLL_LGenBase.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging_Client" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Logging/EPTF_CLL_Logging_Client.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging_UI" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Logging/EPTF_CLL_Logging_UI.tpd"/> + <ReferencedProject name="EPTF_CLL_TransportRouting" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_TransportRouting.tpd"/> + <ReferencedProject name="SCCPasp_CNL113348" projectLocationURI="../../TestPorts/SCCPasp_CNL113348/SCCPasp_CNL113348.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_SCCP_LGen_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_SCCP_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_SCCP_LGen_Functions.ttcnpp" relativeURI="src/LoadGen/EPTF_SCCP_LGen_Functions.ttcnpp"/> + <FileResource projectRelativePath="EPTF_SCCP_Logger_Definitions.ttcn" relativeURI="src/Logger/EPTF_SCCP_Logger_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_SCCP_Logger_Functions.ttcn" relativeURI="src/Logger/EPTF_SCCP_Logger_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_SCCP_Logging_Definitions.ttcn" relativeURI="src/Logger/EPTF_SCCP_Logging_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_SCCP_Logging_Functions.ttcn" relativeURI="src/Logger/EPTF_SCCP_Logging_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_SCCP_Transport_Definitions.ttcn" relativeURI="src/Transport/EPTF_SCCP_Transport_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_SCCP_Transport_Functions.ttcnpp" relativeURI="src/Transport/EPTF_SCCP_Transport_Functions.ttcnpp"/> + <FileResource projectRelativePath="EPTF_SCCP_UIHandler_Functions.ttcn" relativeURI="src/LoadGen/EPTF_SCCP_UIHandler_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_Transport_CommPort_SCCP_Definitions.ttcnpp" relativeURI="src/Transport/EPTF_Transport_CommPort_SCCP_Definitions.ttcnpp"/> + <FileResource projectRelativePath="EPTF_Transport_CommPort_SCCP_Functions.ttcnpp" relativeURI="src/Transport/EPTF_Transport_CommPort_SCCP_Functions.ttcnpp"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <symboliclinklessBuild>true</symboliclinklessBuild> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_CommonTransport_SCCP_CNL113610</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_CommonTransport_TCAP_CNL113592.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CommonTransport_TCAP_CNL113592.tpd new file mode 100644 index 000000000..438bbd0d6 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_CommonTransport_TCAP_CNL113592.tpd @@ -0,0 +1,66 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: EPTF_CommonTransport_TCAP_CNL113592.tpd + Description: tpd project file + Rev: R11C01 + Prodnr: CNL 113 592 + Updated: 2013-03-14 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_CommonTransport_TCAP_CNL113592</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Base" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Base/EPTF_CLL_Base.tpd"/> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Common/EPTF_CLL_Common.tpd"/> + <ReferencedProject name="EPTF_CLL_DataSource" projectLocationURI="../EPTF_Core_Library_CNL113512/src/DataSource/EPTF_CLL_DataSource.tpd"/> + <ReferencedProject name="EPTF_CLL_FreeBusyQueue" projectLocationURI="../EPTF_Core_Library_CNL113512/src/FreeBusyQueue/EPTF_CLL_FBQ.tpd"/> + <ReferencedProject name="EPTF_CLL_LGenBase" projectLocationURI="../EPTF_Core_Library_CNL113512/src/LGenBase/EPTF_CLL_LGenBase.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Logging/EPTF_CLL_Logging.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging_UI" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Logging/EPTF_CLL_Logging_UI.tpd"/> + <ReferencedProject name="EPTF_CLL_Scheduler" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Scheduler/EPTF_CLL_Scheduler.tpd"/> + <ReferencedProject name="EPTF_CLL_StatMeasure" projectLocationURI="../EPTF_Core_Library_CNL113512/src/StatMeasure/EPTF_CLL_StatMeasure.tpd"/> + <ReferencedProject name="EPTF_CLL_TransportRouting" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_TransportRouting.tpd"/> + <ReferencedProject name="EPTF_CLL_Variable" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Variable/EPTF_CLL_Variable.tpd"/> + <ReferencedProject name="ROSE_CNL113369" projectLocationURI="../../ProtocolModules/ROSE_CNL113369/ROSE_CNL113369.tpd"/> + <ReferencedProject name="TCAPasp_CNL113349" projectLocationURI="../../TestPorts/TCAPasp_CNL113349/TCAPasp_CNL113349.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_TCAP_LGen_DS_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_TCAP_LGen_DS_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_TCAP_LGen_DS_Functions.ttcn" relativeURI="src/LoadGen/EPTF_TCAP_LGen_DS_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_TCAP_LGen_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_TCAP_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_TCAP_LGen_Functions.ttcn" relativeURI="src/LoadGen/EPTF_TCAP_LGen_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_TCAP_Logger_Definitions.ttcn" relativeURI="src/Logger/EPTF_TCAP_Logger_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_TCAP_Logger_Functions.ttcn" relativeURI="src/Logger/EPTF_TCAP_Logger_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_TCAP_Transport_Definitions.ttcn" relativeURI="src/Transport/EPTF_TCAP_Transport_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_TCAP_Transport_Functions.ttcn" relativeURI="src/Transport/EPTF_TCAP_Transport_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_TCAP_UIHandler_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_TCAP_UIHandler_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_TCAP_UIHandler_Functions.ttcn" relativeURI="src/LoadGen/EPTF_TCAP_UIHandler_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_Transport_CommPort_TCAP_Definitions.ttcn" relativeURI="src/Transport/EPTF_Transport_CommPort_TCAP_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_Transport_CommPort_TCAP_Functions.ttcn" relativeURI="src/Transport/EPTF_Transport_CommPort_TCAP_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_CommonTransport_TCAP_CNL113592</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_FreeBusyQueue_demo.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_FreeBusyQueue_demo.tpd new file mode 100644 index 000000000..f85d1922f --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_FreeBusyQueue_demo.tpd @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_FreeBusyQueue_demo</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../../src/Common/EPTF_CLL_Common.tpd"/> + <ReferencedProject name="EPTF_CLL_FreeBusyQueue" projectLocationURI="../../src/FreeBusyQueue/EPTF_CLL_FBQ.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_FreeBusyQueue_demo.cfg" relativeURI="EPTF_FreeBusyQueue_demo.cfg"/> + <FileResource projectRelativePath="EPTF_FreeBusyQueue_demo.ttcn" relativeURI="EPTF_FreeBusyQueue_demo.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_FreeBusyQueue_demo</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <ConfigurationRequirements> + <configurationRequirement> + <projectName>EPTF_CLL_Common</projectName> + <rerquiredConfiguration>Debug</rerquiredConfiguration> + </configurationRequirement> + </ConfigurationRequirements> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp.tpd new file mode 100644 index 000000000..245af1ff4 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp.tpd @@ -0,0 +1,72 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_Applib_UPloadCP_CNL113634" projectLocationURI="../../../Libraries/EPTF_Applib_UPloadCP_CNL113634/EPTF_Applib_UPloadCP_CNL113634.tpd"/> + <ReferencedProject name="EPTF_GenApp_AC" projectLocationURI="../src/http/EPTF_GenApp_AC.tpd"/> + <ReferencedProject name="EPTF_GenApp_AIR" projectLocationURI="../src/http/EPTF_GenApp_AIR.tpd"/> + <ReferencedProject name="EPTF_GenApp_ASDP" projectLocationURI="../src/http/EPTF_GenApp_ASDP.tpd"/> + <ReferencedProject name="EPTF_GenApp_CAI3G" projectLocationURI="../src/cai3g/EPTF_GenApp_CAI3G.tpd"/> + <ReferencedProject name="EPTF_GenApp_CAPv2" projectLocationURI="../src/cap/EPTF_GenApp_CAPv2.tpd"/> + <ReferencedProject name="EPTF_GenApp_CAPv3" projectLocationURI="../src/cap/EPTF_GenApp_CAPv3.tpd"/> + <ReferencedProject name="EPTF_GenApp_CAPv4" projectLocationURI="../src/cap/EPTF_GenApp_CAPv4.tpd"/> + <ReferencedProject name="EPTF_GenApp_CCMP" projectLocationURI="../src/http/EPTF_GenApp_CCMP.tpd"/> + <ReferencedProject name="EPTF_GenApp_CIP" projectLocationURI="../src/cip/EPTF_GenApp_CIP.tpd"/> + <ReferencedProject name="EPTF_GenApp_CIP_Orga" projectLocationURI="../src/cip/EPTF_GenApp_CIP_Orga.tpd"/> + <ReferencedProject name="EPTF_GenApp_CNS" projectLocationURI="../src/http/EPTF_GenApp_CNS.tpd"/> + <ReferencedProject name="EPTF_GenApp_CSCF" projectLocationURI="../src/sip/EPTF_GenApp_CSCF.tpd"/> + <ReferencedProject name="EPTF_GenApp_DIAMETER" projectLocationURI="../src/diameter/EPTF_GenApp_DIAMETER.tpd"/> + <ReferencedProject name="EPTF_GenApp_DNS" projectLocationURI="../src/dns/EPTF_GenApp_DNS.tpd"/> + <ReferencedProject name="EPTF_GenApp_H248" projectLocationURI="../src/h248/EPTF_GenApp_H248.tpd"/> + <ReferencedProject name="EPTF_GenApp_HTTP" projectLocationURI="../src/http/EPTF_GenApp_HTTP.tpd"/> + <ReferencedProject name="EPTF_GenApp_INAP" projectLocationURI="../src/inap/EPTF_GenApp_INAP.tpd"/> + <ReferencedProject name="EPTF_GenApp_ISUP" projectLocationURI="../src/isup/EPTF_GenApp_ISUP.tpd"/> + <ReferencedProject name="EPTF_GenApp_LNP" projectLocationURI="../src/lnp/EPTF_GenApp_LNP.tpd"/> + <ReferencedProject name="EPTF_GenApp_LRF" projectLocationURI="../src/http/EPTF_GenApp_LRF.tpd"/> + <ReferencedProject name="EPTF_GenApp_MAP" projectLocationURI="../src/map/EPTF_GenApp_MAP.tpd"/> + <ReferencedProject name="EPTF_GenApp_MRFC" projectLocationURI="../src/sip/EPTF_GenApp_MRFC.tpd"/> + <ReferencedProject name="EPTF_GenApp_NACF" projectLocationURI="../src/imsa2/EPTF_GenApp_NACF.tpd"/> + <ReferencedProject name="EPTF_GenApp_ParlayX" projectLocationURI="../src/http/EPTF_GenApp_ParlayX.tpd"/> + <ReferencedProject name="EPTF_GenApp_PGM_HTTP" projectLocationURI="../src/http/EPTF_GenApp_PGM_HTTP.tpd"/> + <ReferencedProject name="EPTF_GenApp_PGM_SIP" projectLocationURI="../src/sip/EPTF_GenApp_PGM_SIP.tpd"/> + <ReferencedProject name="EPTF_GenApp_SCP" projectLocationURI="../src/cap/EPTF_GenApp_SCP.tpd"/> + <ReferencedProject name="EPTF_GenApp_SIP" projectLocationURI="../src/sip/EPTF_GenApp_SIP.tpd"/> + <ReferencedProject name="EPTF_GenApp_SNA" projectLocationURI="../src/http/SNA/EPTF_GenApp_SNA.tpd"/> + <ReferencedProject name="EPTF_GenApp_SOAP" projectLocationURI="../src/soap/EPTF_GenApp_SOAP.tpd"/> + <ReferencedProject name="EPTF_GenApp_UserPlane" projectLocationURI="../src/userplane/EPTF_GenApp_UserPlane.tpd"/> + <ReferencedProject name="EPTF_GenApp_USSD" projectLocationURI="../src/http/EPTF_GenApp_USSD.tpd"/> + <ReferencedProject name="EPTF_GenApp_VXML" projectLocationURI="../src/vxml/EPTF_GenApp_VXML.tpd"/> + <ReferencedProject name="EPTF_GenApp_WCE_HTTP_Client" projectLocationURI="../src/http/EPTF_GenApp_WCE_HTTP_Client.tpd"/> + <ReferencedProject name="EPTF_GenApp_XCAP" projectLocationURI="../src/xcap/EPTF_GenApp_XCAP.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_MainModule.ttcnpp" relativeURI="../src/common/EPTF_GenApp_MainModule.ttcnpp"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_GenApp</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>GENAPP_COMPILE_ALL</listItem> + </TTCN3preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_AC.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_AC.tpd new file mode 100644 index 000000000..ced667151 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_AC.tpd @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_AC</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_GenApp_HTTP" projectLocationURI="EPTF_GenApp_HTTP.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_AC_LGen_Definitions.ttcn" relativeURI="EPTF_GenApp_AC_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_GenApp_AC_LGen_Functions.ttcn" relativeURI="EPTF_GenApp_AC_LGen_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <GNUMake>true</GNUMake> + <targetExecutable>build/EPTF_GenApp_AC</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>build</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_AIR.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_AIR.tpd new file mode 100644 index 000000000..bf9ebc472 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_AIR.tpd @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_AIR</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_GenApp_HTTP" projectLocationURI="EPTF_GenApp_HTTP.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_AIR_HTTP_LGen_Definitions.ttcn" relativeURI="EPTF_GenApp_AIR_HTTP_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_GenApp_AIR_HTTP_LGen_Functions.ttcn" relativeURI="EPTF_GenApp_AIR_HTTP_LGen_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_GenApp_AIR</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ASDP.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ASDP.tpd new file mode 100644 index 000000000..3b85d4a7a --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ASDP.tpd @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_ASDP_TopLevel</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_GenApp_ASDP" projectLocationURI="../src/http/EPTF_GenApp_ASDP.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="ASDP_main_demo.cfg" relativeURI="productconfigs/ASDP/ASDP_main_demo.cfg"/> + <FileResource projectRelativePath="EPTF_GenApp_MainModule.ttcnpp" relativeURI="../src/common/EPTF_GenApp_MainModule.ttcnpp"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_GenApp_ASDP_TopLevel</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>GENAPP_COMPILE_HTTP</listItem> + <listItem>GENAPP_COMPILE_ASDP</listItem> + </TTCN3preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ATandT.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ATandT.tpd new file mode 100644 index 000000000..aef15408f --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ATandT.tpd @@ -0,0 +1,76 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_ATandT</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_GenApp_CAPv2" projectLocationURI="../src/cap/EPTF_GenApp_CAPv2.tpd"/> + <ReferencedProject name="EPTF_GenApp_CAPv3" projectLocationURI="../src/cap/EPTF_GenApp_CAPv3.tpd"/> + <ReferencedProject name="EPTF_GenApp_CAPv4" projectLocationURI="../src/cap/EPTF_GenApp_CAPv4.tpd"/> + <ReferencedProject name="EPTF_GenApp_DIAMETER" projectLocationURI="../src/diameter/EPTF_GenApp_DIAMETER.tpd"/> + <ReferencedProject name="EPTF_GenApp_ISUP" projectLocationURI="../src/isup/EPTF_GenApp_ISUP.tpd"/> + <ReferencedProject name="EPTF_GenApp_LNP" projectLocationURI="../src/lnp/EPTF_GenApp_LNP.tpd"/> + <ReferencedProject name="EPTF_GenApp_MAP" projectLocationURI="../src/map/EPTF_GenApp_MAP.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="ATandT_CAPv2_FSM.cfg" relativeURI="productconfigs/ATandT/ATandT/ATandT_CAPv2_FSM.cfg"/> + <FileResource projectRelativePath="ATandT_CAPv2_demo.cfg" relativeURI="productconfigs/ATandT/ATandT/ATandT_CAPv2_demo.cfg"/> + <FileResource projectRelativePath="ATandT_CLL_TestPorts.cfg" relativeURI="productconfigs/ATandT/ATandT/ATandT_CLL_TestPorts.cfg"/> + <FileResource projectRelativePath="ATandT_DIAMETER_ACR_FSM.cfg" relativeURI="productconfigs/ATandT/ATandT/ATandT_DIAMETER_ACR_FSM.cfg"/> + <FileResource projectRelativePath="ATandT_DIAMETER_ACR_demo.cfg" relativeURI="productconfigs/ATandT/ATandT/ATandT_DIAMETER_ACR_demo.cfg"/> + <FileResource projectRelativePath="ATandT_DIAMETER_CCR_FSM.cfg" relativeURI="productconfigs/ATandT/ATandT/ATandT_DIAMETER_CCR_FSM.cfg"/> + <FileResource projectRelativePath="ATandT_DIAMETER_CCR_demo.cfg" relativeURI="productconfigs/ATandT/ATandT/ATandT_DIAMETER_CCR_demo.cfg"/> + <FileResource projectRelativePath="ATandT_DIAMETER_Ro_FSM.cfg" relativeURI="productconfigs/ATandT/ATandT/ATandT_DIAMETER_Ro_FSM.cfg"/> + <FileResource projectRelativePath="ATandT_DIAMETER_Ro_demo.cfg" relativeURI="productconfigs/ATandT/ATandT/ATandT_DIAMETER_Ro_demo.cfg"/> + <FileResource projectRelativePath="ATandT_ISUP_FSM.cfg" relativeURI="productconfigs/ATandT/ATandT/ATandT_ISUP_FSM.cfg"/> + <FileResource projectRelativePath="ATandT_ISUP_demo.cfg" relativeURI="productconfigs/ATandT/ATandT/ATandT_ISUP_demo.cfg"/> + <FileResource projectRelativePath="ATandT_LNP_FSM.cfg" relativeURI="productconfigs/ATandT/ATandT/ATandT_LNP_FSM.cfg"/> + <FileResource projectRelativePath="ATandT_LNP_demo.cfg" relativeURI="productconfigs/ATandT/ATandT/ATandT_LNP_demo.cfg"/> + <FileResource projectRelativePath="ATandT_MAP_FSM.cfg" relativeURI="productconfigs/ATandT/ATandT/ATandT_MAP_FSM.cfg"/> + <FileResource projectRelativePath="ATandT_MAP_demo.cfg" relativeURI="productconfigs/ATandT/ATandT/ATandT_MAP_demo.cfg"/> + <FileResource projectRelativePath="ATandT_debug_settings.cfg" relativeURI="productconfigs/ATandT/ATandT/ATandT_debug_settings.cfg"/> + <FileResource projectRelativePath="ATandT_local_host.cfg" relativeURI="productconfigs/ATandT/ATandT/ATandT_local_host.cfg"/> + <FileResource projectRelativePath="ATandT_main_demo.cfg" relativeURI="productconfigs/ATandT/ATandT/ATandT_main_demo.cfg"/> + <FileResource projectRelativePath="ATandT_remote_node.cfg" relativeURI="productconfigs/ATandT/ATandT/ATandT_remote_node.cfg"/> + <FileResource projectRelativePath="ATandT_statistics_settings.cfg" relativeURI="productconfigs/ATandT/ATandT/ATandT_statistics_settings.cfg"/> + <FileResource projectRelativePath="ATandT_statistics_settings_CAPv2.cfg" relativeURI="productconfigs/ATandT/ATandT/ATandT_statistics_settings_CAPv2.cfg"/> + <FileResource projectRelativePath="ATandT_statistics_settings_DIAMETER_ACR.cfg" relativeURI="productconfigs/ATandT/ATandT/ATandT_statistics_settings_DIAMETER_ACR.cfg"/> + <FileResource projectRelativePath="ATandT_statistics_settings_DIAMETER_CCR.cfg" relativeURI="productconfigs/ATandT/ATandT/ATandT_statistics_settings_DIAMETER_CCR.cfg"/> + <FileResource projectRelativePath="ATandT_statistics_settings_ISUP.cfg" relativeURI="productconfigs/ATandT/ATandT/ATandT_statistics_settings_ISUP.cfg"/> + <FileResource projectRelativePath="ATandT_statistics_settings_LNP.cfg" relativeURI="productconfigs/ATandT/ATandT/ATandT_statistics_settings_LNP.cfg"/> + <FileResource projectRelativePath="ATandT_statistics_settings_MAP.cfg" relativeURI="productconfigs/ATandT/ATandT/ATandT_statistics_settings_MAP.cfg"/> + <FileResource projectRelativePath="EPTF_GenApp_MainModule.ttcnpp" relativeURI="../src/common/EPTF_GenApp_MainModule.ttcnpp"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_GenApp_ATandT</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>GENAPP_COMPILE_COMBINED_CAPv2</listItem> + <listItem>GENAPP_COMPILE_COMBINED_ISUP</listItem> + <listItem>GENAPP_COMPILE_MAP</listItem> + <listItem>GENAPP_COMPILE_LNP</listItem> + <listItem>GENAPP_COMPILE_DIAMETER</listItem> + <listItem>MTP3_EIN_TESTPORT</listItem> + <listItem>ENABLE_SCTP</listItem> + <listItem>USE_SCTP</listItem> + </TTCN3preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_BCS_AC.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_BCS_AC.tpd new file mode 100644 index 000000000..c1e365e2c --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_BCS_AC.tpd @@ -0,0 +1,52 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_BCS_AC</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_GenApp_AC" projectLocationURI="../src/http/EPTF_GenApp_AC.tpd"/> + <ReferencedProject name="EPTF_GenApp_HTTP" projectLocationURI="../src/http/EPTF_GenApp_HTTP.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="BCS" relativeURI="productconfigs/BCS"/> + </Folders> + <Files> + <FileResource projectRelativePath="BCS/BCS_AC_FSM.cfg" relativeURI="productconfigs/BCS/BCS_AC_FSM.cfg"/> + <FileResource projectRelativePath="BCS/BCS_AC_demo.cfg" relativeURI="productconfigs/BCS/BCS_AC_demo.cfg"/> + <FileResource projectRelativePath="BCS/BCS_AC_local_host.cfg" relativeURI="productconfigs/BCS/BCS_AC_local_host.cfg"/> + <FileResource projectRelativePath="BCS/BCS_AC_main.cfg" relativeURI="productconfigs/BCS/BCS_AC_main.cfg"/> + <FileResource projectRelativePath="BCS/BCS_AC_statistics_settings.cfg" relativeURI="productconfigs/BCS/BCS_AC_statistics_settings.cfg"/> + <FileResource projectRelativePath="BCS/BCS_SSP_FSM.cfg" relativeURI="productconfigs/BCS/BCS_SSP_FSM.cfg"/> + <FileResource projectRelativePath="BCS/BCS_SSP_demo.cfg" relativeURI="productconfigs/BCS/BCS_SSP_demo.cfg"/> + <FileResource projectRelativePath="BCS/BCS_SSP_localhost.cfg" relativeURI="productconfigs/BCS/BCS_SSP_localhost.cfg"/> + <FileResource projectRelativePath="BCS/BCS_SSP_main.cfg" relativeURI="productconfigs/BCS/BCS_SSP_main.cfg"/> + <FileResource projectRelativePath="EPTF_GenApp_MainModule.ttcnpp" relativeURI="../src/common/EPTF_GenApp_MainModule.ttcnpp"/> + <FileResource projectRelativePath="makefile_patch_BCS_AC.sh" relativeURI="makefile_patch_BCS_AC.sh"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_GenApp_BCS_AC</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>GENAPP_COMPILE_AC</listItem> + <listItem>NDEBUG</listItem> + </TTCN3preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_BCS_SSP.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_BCS_SSP.tpd new file mode 100644 index 000000000..51807f251 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_BCS_SSP.tpd @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_BCS_SSP</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_GenApp_HTTP" projectLocationURI="../src/http/EPTF_GenApp_HTTP.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="BCS_SSP_FSM.cfg" relativeURI="productconfigs/BCS/BCS_SSP_FSM.cfg"/> + <FileResource projectRelativePath="BCS_SSP_demo.cfg" relativeURI="productconfigs/BCS/BCS_SSP_demo.cfg"/> + <FileResource projectRelativePath="BCS_SSP_localhost.cfg" relativeURI="productconfigs/BCS/BCS_SSP_localhost.cfg"/> + <FileResource projectRelativePath="BCS_SSP_main.cfg" relativeURI="productconfigs/BCS/BCS_SSP_main.cfg"/> + <FileResource projectRelativePath="EPTF_GenApp_MainModule.ttcnpp" relativeURI="../src/common/EPTF_GenApp_MainModule.ttcnpp"/> + <FileResource projectRelativePath="makefile_patch_BCS_SSP.sh" relativeURI="makefile_patch_BCS_SSP.sh"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_GenApp_BCS_SSP</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>GENAPP_COMPILE_HTTP</listItem> + </TTCN3preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_BCS_WCE.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_BCS_WCE.tpd new file mode 100644 index 000000000..1553c5eab --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_BCS_WCE.tpd @@ -0,0 +1,97 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_BCS_WCE</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_GenApp_CSCF" projectLocationURI="../src/sip/EPTF_GenApp_CSCF.tpd"/> + <ReferencedProject name="EPTF_GenApp_PGM_HTTP" projectLocationURI="../src/http/EPTF_GenApp_PGM_HTTP.tpd"/> + <ReferencedProject name="EPTF_GenApp_PGM_SIP" projectLocationURI="../src/sip/EPTF_GenApp_PGM_SIP.tpd"/> + <ReferencedProject name="EPTF_GenApp_WCE_HTTP_Client" projectLocationURI="../src/http/EPTF_GenApp_WCE_HTTP_Client.tpd"/> + <ReferencedProject name="JSON_v07_2006_CNL113676" projectLocationURI="../../../ProtocolModules/JSON_v07_2006_CNL113676/JSON_v07_2006_CNL113676.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="BCS" relativeURI="templates/BCS"/> + </Folders> + <Files> + <FileResource projectRelativePath="BCS/bcs.wce_client.acceptchat_request.header" relativeURI="templates/BCS/bcs.wce_client.acceptchat_request.header"/> + <FileResource projectRelativePath="BCS/bcs.wce_client.acceptfiletransfer_request.header" relativeURI="templates/BCS/bcs.wce_client.acceptfiletransfer_request.header"/> + <FileResource projectRelativePath="BCS/bcs.wce_client.addcontact_request.header" relativeURI="templates/BCS/bcs.wce_client.addcontact_request.header"/> + <FileResource projectRelativePath="BCS/bcs.wce_client.addgroup_request.header" relativeURI="templates/BCS/bcs.wce_client.addgroup_request.header"/> + <FileResource projectRelativePath="BCS/bcs.wce_client.chat_request.body" relativeURI="templates/BCS/bcs.wce_client.chat_request.body"/> + <FileResource projectRelativePath="BCS/bcs.wce_client.chat_request.header" relativeURI="templates/BCS/bcs.wce_client.chat_request.header"/> + <FileResource projectRelativePath="BCS/bcs.wce_client.closechat_request.header" relativeURI="templates/BCS/bcs.wce_client.closechat_request.header"/> + <FileResource projectRelativePath="BCS/bcs.wce_client.createchat_request.header" relativeURI="templates/BCS/bcs.wce_client.createchat_request.header"/> + <FileResource projectRelativePath="BCS/bcs.wce_client.deletechat_request.header" relativeURI="templates/BCS/bcs.wce_client.deletechat_request.header"/> + <FileResource projectRelativePath="BCS/bcs.wce_client.deletecontact_request.header" relativeURI="templates/BCS/bcs.wce_client.deletecontact_request.header"/> + <FileResource projectRelativePath="BCS/bcs.wce_client.deletegroup_request.header" relativeURI="templates/BCS/bcs.wce_client.deletegroup_request.header"/> + <FileResource projectRelativePath="BCS/bcs.wce_client.deregistration_request.header" relativeURI="templates/BCS/bcs.wce_client.deregistration_request.header"/> + <FileResource projectRelativePath="BCS/bcs.wce_client.fileTransfer_getfilemedia_request.header" relativeURI="templates/BCS/bcs.wce_client.fileTransfer_getfilemedia_request.header"/> + <FileResource projectRelativePath="BCS/bcs.wce_client.filetransfer_request.body" relativeURI="templates/BCS/bcs.wce_client.filetransfer_request.body"/> + <FileResource projectRelativePath="BCS/bcs.wce_client.filetransfer_request.header" relativeURI="templates/BCS/bcs.wce_client.filetransfer_request.header"/> + <FileResource projectRelativePath="BCS/bcs.wce_client.getactiveuser_request.header" relativeURI="templates/BCS/bcs.wce_client.getactiveuser_request.header"/> + <FileResource projectRelativePath="BCS/bcs.wce_client.getcontact_request.header" relativeURI="templates/BCS/bcs.wce_client.getcontact_request.header"/> + <FileResource projectRelativePath="BCS/bcs.wce_client.getevents_request.header" relativeURI="templates/BCS/bcs.wce_client.getevents_request.header"/> + <FileResource projectRelativePath="BCS/bcs.wce_client.getgroup_request.header" relativeURI="templates/BCS/bcs.wce_client.getgroup_request.header"/> + <FileResource projectRelativePath="BCS/bcs.wce_client.getpresence_request.header" relativeURI="templates/BCS/bcs.wce_client.getpresence_request.header"/> + <FileResource projectRelativePath="BCS/bcs.wce_client.lookup_request.header" relativeURI="templates/BCS/bcs.wce_client.lookup_request.header"/> + <FileResource projectRelativePath="BCS/bcs.wce_client.registration_request.header" relativeURI="templates/BCS/bcs.wce_client.registration_request.header"/> + <FileResource projectRelativePath="BCS/bcs.wce_client.renamegroup_request.header" relativeURI="templates/BCS/bcs.wce_client.renamegroup_request.header"/> + <FileResource projectRelativePath="BCS/bcs.wce_client.send_file_request.header" relativeURI="templates/BCS/bcs.wce_client.send_file_request.header"/> + <FileResource projectRelativePath="BCS/bcs.wce_client.send_im_request.header" relativeURI="templates/BCS/bcs.wce_client.send_im_request.header"/> + <FileResource projectRelativePath="BCS/bcs.wce_client.setpresence_request.header" relativeURI="templates/BCS/bcs.wce_client.setpresence_request.header"/> + <FileResource projectRelativePath="BCS/bcs.xmlapp_client.calloptionex_request.header" relativeURI="templates/BCS/bcs.xmlapp_client.calloptionex_request.header"/> + <FileResource projectRelativePath="BCS/bcs.xmlapp_client.calloptions_request.header" relativeURI="templates/BCS/bcs.xmlapp_client.calloptions_request.header"/> + <FileResource projectRelativePath="BCS/bcs.xmlapp_client.contactdetailex_request.header" relativeURI="templates/BCS/bcs.xmlapp_client.contactdetailex_request.header"/> + <FileResource projectRelativePath="BCS/bcs.xmlapp_client.contactdetails_request.header" relativeURI="templates/BCS/bcs.xmlapp_client.contactdetails_request.header"/> + <FileResource projectRelativePath="BCS/bcs.xmlapp_client.deregistration_request.header" relativeURI="templates/BCS/bcs.xmlapp_client.deregistration_request.header"/> + <FileResource projectRelativePath="BCS/bcs.xmlapp_client.getpresence_request.header" relativeURI="templates/BCS/bcs.xmlapp_client.getpresence_request.header"/> + <FileResource projectRelativePath="BCS/bcs.xmlapp_client.groupcontacts_request.header" relativeURI="templates/BCS/bcs.xmlapp_client.groupcontacts_request.header"/> + <FileResource projectRelativePath="BCS/bcs.xmlapp_client.grouplist_request.header" relativeURI="templates/BCS/bcs.xmlapp_client.grouplist_request.header"/> + <FileResource projectRelativePath="BCS/bcs.xmlapp_client.registration_request.header" relativeURI="templates/BCS/bcs.xmlapp_client.registration_request.header"/> + <FileResource projectRelativePath="BCS/bcs.xmlapp_client.searchinput_request.header" relativeURI="templates/BCS/bcs.xmlapp_client.searchinput_request.header"/> + <FileResource projectRelativePath="BCS/bcs.xmlapp_client.searchresult_request.header" relativeURI="templates/BCS/bcs.xmlapp_client.searchresult_request.header"/> + <FileResource projectRelativePath="BCS/bcs.xmlapp_client.setpresence_request.header" relativeURI="templates/BCS/bcs.xmlapp_client.setpresence_request.header"/> + <FileResource projectRelativePath="BCS_CLL_TestPorts.cfg" relativeURI="productconfigs/BCS_WCE/BCS_CLL_TestPorts.cfg"/> + <FileResource projectRelativePath="BCS_PGM_HTTP_FSM.cfg" relativeURI="productconfigs/BCS_WCE/BCS_PGM_HTTP_FSM.cfg"/> + <FileResource projectRelativePath="BCS_PGM_HTTP_Simulation.cfg" relativeURI="productconfigs/BCS_WCE/BCS_PGM_HTTP_Simulation.cfg"/> + <FileResource projectRelativePath="BCS_PGM_SIP_FSM.cfg" relativeURI="productconfigs/BCS_WCE/BCS_PGM_SIP_FSM.cfg"/> + <FileResource projectRelativePath="BCS_PGM_SIP_HTTP_Combined.cfg" relativeURI="productconfigs/BCS_WCE/BCS_PGM_SIP_HTTP_Combined.cfg"/> + <FileResource projectRelativePath="BCS_PGM_SIP_Simulation.cfg" relativeURI="productconfigs/BCS_WCE/BCS_PGM_SIP_Simulation.cfg"/> + <FileResource projectRelativePath="BCS_WCE_HTTP_Client_FSM.cfg" relativeURI="productconfigs/BCS_WCE/BCS_WCE_HTTP_Client_FSM.cfg"/> + <FileResource projectRelativePath="BCS_WCE_HTTP_Client_Simulation.cfg" relativeURI="productconfigs/BCS_WCE/BCS_WCE_HTTP_Client_Simulation.cfg"/> + <FileResource projectRelativePath="BCS_debug_settings.cfg" relativeURI="productconfigs/BCS_WCE/BCS_debug_settings.cfg"/> + <FileResource projectRelativePath="BCS_local_host.cfg" relativeURI="productconfigs/BCS_WCE/BCS_local_host.cfg"/> + <FileResource projectRelativePath="BCS_main.demo.cfg" relativeURI="productconfigs/BCS_WCE/BCS_main.demo.cfg"/> + <FileResource projectRelativePath="BCS_remote_node.cfg" relativeURI="productconfigs/BCS_WCE/BCS_remote_node.cfg"/> + <FileResource projectRelativePath="BCS_statistics_settings.cfg" relativeURI="productconfigs/BCS_WCE/BCS_statistics_settings.cfg"/> + <FileResource projectRelativePath="EPTF_GenApp_MainModule.ttcnpp" relativeURI="../src/common/EPTF_GenApp_MainModule.ttcnpp"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_GenApp_WCE</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>GENAPP_COMPILE_SIP</listItem> + <listItem>GENAPP_COMPILE_HTTP</listItem> + <listItem>GENAPP_COMPILE_PGM</listItem> + </TTCN3preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_CAI3G.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_CAI3G.tpd new file mode 100644 index 000000000..f8703b7fe --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_CAI3G.tpd @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_CAI3G</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_Applib_CAI3G_CNL113566" projectLocationURI="../../../../Libraries/EPTF_Applib_CAI3G_CNL113566/EPTF_Applib_CAI3G_CNL113566.tpd"/> + <ReferencedProject name="EPTF_GenApp_Common" projectLocationURI="../common/EPTF_GenApp_Common.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_CAI3G_LGen_Definitions.ttcn" relativeURI="EPTF_GenApp_CAI3G_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_GenApp_CAI3G_LGen_Functions.ttcn" relativeURI="EPTF_GenApp_CAI3G_LGen_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <GNUMake>true</GNUMake> + <targetExecutable>EPTF_GenApp_CAI3G</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>build</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_CAPv2.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_CAPv2.tpd new file mode 100644 index 000000000..befcb83c8 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_CAPv2.tpd @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_CAPv2</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_Applib_CAP_v2_CNL113662" projectLocationURI="../../../../Libraries/EPTF_Applib_CAP_CNL113662/EPTF_Applib_CAP_v2_CNL113662.tpd"/> + <ReferencedProject name="EPTF_CommonTransport_TCAP_CNL113592" projectLocationURI="../../../../Libraries/EPTF_CommonTransport_TCAP_CNL113592/EPTF_CommonTransport_TCAP_CNL113592.tpd"/> + <ReferencedProject name="EPTF_GenApp_Common" projectLocationURI="../common/EPTF_GenApp_Common.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_CAPv2.tpd" relativeURI="EPTF_GenApp_CAPv2.tpd"/> + <FileResource projectRelativePath="EPTF_GenApp_CAPv2_LGen_Definitions.ttcn" relativeURI="EPTF_GenApp_CAPv2_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_GenApp_CAPv2_LGen_Functions.ttcn" relativeURI="EPTF_GenApp_CAPv2_LGen_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>build/EPTF_GenApp_CAPv2</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>build</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_CAPv3.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_CAPv3.tpd new file mode 100644 index 000000000..5991cbd2d --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_CAPv3.tpd @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_CAPv3</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_Applib_CAP_v3_CNL113662" projectLocationURI="../../../../Libraries/EPTF_Applib_CAP_CNL113662/EPTF_Applib_CAP_v3_CNL113662.tpd"/> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../../../../Libraries/EPTF_Core_Library_CNL113512/src/Common/EPTF_CLL_Common.tpd"/> + <ReferencedProject name="EPTF_CommonTransport_TCAP_CNL113592" projectLocationURI="../../../../Libraries/EPTF_CommonTransport_TCAP_CNL113592/EPTF_CommonTransport_TCAP_CNL113592.tpd"/> + <ReferencedProject name="EPTF_GenApp_Common" projectLocationURI="../common/EPTF_GenApp_Common.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_CAPv3_LGen_Definitions.ttcn" relativeURI="EPTF_GenApp_CAPv3_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_GenApp_CAPv3_LGen_Functions.ttcn" relativeURI="EPTF_GenApp_CAPv3_LGen_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>build/EPTF_GenApp_CAPv3</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>build</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_CAPv4.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_CAPv4.tpd new file mode 100644 index 000000000..a166d44fd --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_CAPv4.tpd @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_CAPv4</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_Applib_CAP_Common_CNL113662" projectLocationURI="../../../../Libraries/EPTF_Applib_CAP_CNL113662/EPTF_Applib_CAP_Common_CNL113662.tpd"/> + <ReferencedProject name="EPTF_Applib_CAP_v4_CNL113662" projectLocationURI="../../../../Libraries/EPTF_Applib_CAP_CNL113662/EPTF_Applib_CAP_v4_CNL113662.tpd"/> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../../../../Libraries/EPTF_Core_Library_CNL113512/src/Common/EPTF_CLL_Common.tpd"/> + <ReferencedProject name="EPTF_CLL_Transport_Common" projectLocationURI="../../../../Libraries/EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_Transport_Common.tpd"/> + <ReferencedProject name="EPTF_CommonTransport_TCAP_CNL113592" projectLocationURI="../../../../Libraries/EPTF_CommonTransport_TCAP_CNL113592/EPTF_CommonTransport_TCAP_CNL113592.tpd"/> + <ReferencedProject name="EPTF_GenApp_Common" projectLocationURI="../common/EPTF_GenApp_Common.tpd"/> + <ReferencedProject name="ROSE_CNL113369" projectLocationURI="../../../../ProtocolModules/ROSE_CNL113369/ROSE_CNL113369.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_CAPv4_LGen_Definitions.ttcn" relativeURI="EPTF_GenApp_CAPv4_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_GenApp_CAPv4_LGen_Functions.ttcn" relativeURI="EPTF_GenApp_CAPv4_LGen_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <GNUMake>true</GNUMake> + <targetExecutable>build/EPTF_GenApp_CAPv4</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>build</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_CCMP.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_CCMP.tpd new file mode 100644 index 000000000..b830377e4 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_CCMP.tpd @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_CCMP</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_Applib_HTTP_CNL113618" projectLocationURI="../../../../Libraries/EPTF_Applib_HTTP_CNL113618/EPTF_Applib_HTTP_CNL113618.tpd"/> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../../../../Libraries/EPTF_Core_Library_CNL113512/src/Common/EPTF_CLL_Common.tpd"/> + <ReferencedProject name="EPTF_GenApp_Common" projectLocationURI="../common/EPTF_GenApp_Common.tpd"/> + <ReferencedProject name="EPTF_GenApp_HTTP" projectLocationURI="EPTF_GenApp_HTTP.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_CCMP_DS_Definitions.ttcn" relativeURI="EPTF_GenApp_CCMP_DS_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_GenApp_CCMP_DS_Functions.ttcn" relativeURI="EPTF_GenApp_CCMP_DS_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_GenApp_CCMP_LGen_Definitions.ttcn" relativeURI="EPTF_GenApp_CCMP_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_GenApp_CCMP_LGen_Functions.ttcn" relativeURI="EPTF_GenApp_CCMP_LGen_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <GNUMake>true</GNUMake> + <targetExecutable>build/EPTF_GenApp_CCMP</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>build</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_CIP.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_CIP.tpd new file mode 100644 index 000000000..9804d9524 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_CIP.tpd @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_CIP</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_Applib_CIP_CNL113666" projectLocationURI="../../../../Libraries/EPTF_Applib_CIP_CNL113666/EPTF_Applib_CIP_CNL113666.tpd"/> + <ReferencedProject name="EPTF_Applib_INAP_CNL113596" projectLocationURI="../../../../Libraries/EPTF_Applib_INAP_CNL113596/EPTF_Applib_INAP_CNL113596.tpd"/> + <ReferencedProject name="EPTF_GenApp_Common" projectLocationURI="../common/EPTF_GenApp_Common.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_CIP_LGen_Definitions.ttcn" relativeURI="EPTF_GenApp_CIP_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_GenApp_CIP_LGen_Functions.ttcn" relativeURI="EPTF_GenApp_CIP_LGen_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <GNUMake>true</GNUMake> + <targetExecutable>build/EPTF_GenApp_CIP</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>build</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_CIP_Orga.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_CIP_Orga.tpd new file mode 100644 index 000000000..d53ac2dd3 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_CIP_Orga.tpd @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_CIP_Orga</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_Applib_CIP_Orga_CNL113666" projectLocationURI="../../../../Libraries/EPTF_Applib_CIP_CNL113666/EPTF_Applib_CIP_Orga_CNL113666.tpd"/> + <ReferencedProject name="EPTF_Applib_INAP_CNL113596" projectLocationURI="../../../../Libraries/EPTF_Applib_INAP_CNL113596/EPTF_Applib_INAP_CNL113596.tpd"/> + <ReferencedProject name="EPTF_GenApp_Common" projectLocationURI="../common/EPTF_GenApp_Common.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_CIP_Orga_LGen_Definitions.ttcn" relativeURI="EPTF_GenApp_CIP_Orga_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_GenApp_CIP_Orga_LGen_Functions.ttcn" relativeURI="EPTF_GenApp_CIP_Orga_LGen_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <GNUMake>true</GNUMake> + <targetExecutable>build/EPTF_GenApp_CIP_Orga</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>build</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_CLF.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_CLF.tpd new file mode 100644 index 000000000..68d423ce9 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_CLF.tpd @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_CLF</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_GenApp_DIAMETER" projectLocationURI="../src/diameter/EPTF_GenApp_DIAMETER.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="CLFSim" relativeURI="productconfigs/CLFSim"/> + </Folders> + <Files> + <FileResource projectRelativePath="CLFSim/CLFSim.cfg" relativeURI="productconfigs/CLFSim/CLFSim.cfg"/> + <FileResource projectRelativePath="CLFSim/CLFSim_Diameter.cfg" relativeURI="productconfigs/CLFSim/CLFSim_Diameter.cfg"/> + <FileResource projectRelativePath="CLFSim/CLFSim_Diameter_FSMs.cfg" relativeURI="productconfigs/CLFSim/CLFSim_Diameter_FSMs.cfg"/> + <FileResource projectRelativePath="EPTF_GenApp_CLF.tpd" relativeURI="EPTF_GenApp_CLF.tpd"/> + <FileResource projectRelativePath="EPTF_GenApp_MainModule.ttcnpp" relativeURI="../src/common/EPTF_GenApp_MainModule.ttcnpp"/> + <FileResource projectRelativePath="makefile_patch_CLF.sh" relativeURI="makefile_patch_CLF.sh"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_GenApp_CLF</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>GENAPP_COMPILE_DIAMETER</listItem> + </TTCN3preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_CLFv2.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_CLFv2.tpd new file mode 100644 index 000000000..af56d3757 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_CLFv2.tpd @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_CLFv2</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_GenApp_DIAMETER" projectLocationURI="../src/diameter/EPTF_GenApp_DIAMETER.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="CLF_main.cfg" relativeURI="productconfigs/NASS/CLF_main.cfg"/> + <FileResource projectRelativePath="CLF_Diameter_FSM.cfg" relativeURI="productconfigs/NASS/CLF_Diameter_FSM.cfg"/> + <FileResource projectRelativePath="CLF_Diameter_traffic.cfg" relativeURI="productconfigs/NASS/CLF_Diameter_traffic.cfg"/> + <FileResource projectRelativePath="EPTF_GenApp_MainModule.ttcnpp" relativeURI="../src/common/EPTF_GenApp_MainModule.ttcnpp"/> + <FileResource projectRelativePath="makefile_patch_NASS.sh" relativeURI="makefile_patch_NASS.sh"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <targetExecutable>bin/EPTF_GenApp_CLFv2</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>GENAPP_COMPILE_DIAMETER</listItem> + </TTCN3preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_CNS.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_CNS.tpd new file mode 100644 index 000000000..175377308 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_CNS.tpd @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_CNS_TopLevel</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_GenApp_CNS" projectLocationURI="../src/http/EPTF_GenApp_CNS.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="CNS_FSM.cfg" relativeURI="productconfigs/CNS/CNS_FSM.cfg"/> + <FileResource projectRelativePath="CNS_demo.cfg" relativeURI="productconfigs/CNS/CNS_demo.cfg"/> + <FileResource projectRelativePath="CNS_main_demo.cfg" relativeURI="productconfigs/CNS/CNS_main_demo.cfg"/> + <FileResource projectRelativePath="EPTF_GenApp_MainModule.ttcnpp" relativeURI="../src/common/EPTF_GenApp_MainModule.ttcnpp"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_GenApp_CNS_TopLevel</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>GENAPP_COMPILE_HTTP</listItem> + <listItem>GENAPP_COMPILE_CNS</listItem> + </TTCN3preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_CSCF.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_CSCF.tpd new file mode 100644 index 000000000..3463ea308 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_CSCF.tpd @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_CSCF_TopLevel</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_GenApp_CSCF" projectLocationURI="../src/sip/EPTF_GenApp_CSCF.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="CSCFSim_CLL_TestPorts.cfg" relativeURI="productconfigs/CSCFSim/CSCFSim_CLL_TestPorts.cfg"/> + <FileResource projectRelativePath="CSCFSim_SIP_FSM.cfg" relativeURI="productconfigs/CSCFSim/CSCFSim_SIP_FSM.cfg"/> + <FileResource projectRelativePath="CSCFSim_SIP_demo.cfg" relativeURI="productconfigs/CSCFSim/CSCFSim_SIP_demo.cfg"/> + <FileResource projectRelativePath="CSCFSim_debug_settings.cfg" relativeURI="productconfigs/CSCFSim/CSCFSim_debug_settings.cfg"/> + <FileResource projectRelativePath="CSCFSim_local_host.cfg" relativeURI="productconfigs/CSCFSim/CSCFSim_local_host.cfg"/> + <FileResource projectRelativePath="CSCFSim_main_demo.cfg" relativeURI="productconfigs/CSCFSim/CSCFSim_main_demo.cfg"/> + <FileResource projectRelativePath="CSCFSim_remote_node.cfg" relativeURI="productconfigs/CSCFSim/CSCFSim_remote_node.cfg"/> + <FileResource projectRelativePath="CSCFSim_statistics_settings.cfg" relativeURI="productconfigs/CSCFSim/CSCFSim_statistics_settings.cfg"/> + <FileResource projectRelativePath="EPTF_GenApp_MainModule.ttcnpp" relativeURI="../src/common/EPTF_GenApp_MainModule.ttcnpp"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_GenApp_CSCF</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>GENAPP_COMPILE_CSCF</listItem> + </TTCN3preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_CSCFclient.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_CSCFclient.tpd new file mode 100644 index 000000000..e07f04900 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_CSCFclient.tpd @@ -0,0 +1,48 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_CSCFclient</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_GenApp_SIP" projectLocationURI="../src/sip/EPTF_GenApp_SIP.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="CSCFclient" relativeURI="productconfigs/CSCFclient"/> + </Folders> + <Files> + <FileResource projectRelativePath="CSCFclient/CSCFclient_CLL_TestPorts.cfg" relativeURI="productconfigs/CSCFclient/CSCFclient_CLL_TestPorts.cfg"/> + <FileResource projectRelativePath="CSCFclient/CSCFclient_SIP_FSM.cfg" relativeURI="productconfigs/CSCFclient/CSCFclient_SIP_FSM.cfg"/> + <FileResource projectRelativePath="CSCFclient/CSCFclient_SIP_demo.cfg" relativeURI="productconfigs/CSCFclient/CSCFclient_SIP_demo.cfg"/> + <FileResource projectRelativePath="CSCFclient/CSCFclient_debug_settings.cfg" relativeURI="productconfigs/CSCFclient/CSCFclient_debug_settings.cfg"/> + <FileResource projectRelativePath="CSCFclient/CSCFclient_local_host.cfg" relativeURI="productconfigs/CSCFclient/CSCFclient_local_host.cfg"/> + <FileResource projectRelativePath="CSCFclient/CSCFclient_main_demo.cfg" relativeURI="productconfigs/CSCFclient/CSCFclient_main_demo.cfg"/> + <FileResource projectRelativePath="CSCFclient/CSCFclient_remote_node.cfg" relativeURI="productconfigs/CSCFclient/CSCFclient_remote_node.cfg"/> + <FileResource projectRelativePath="CSCFclient/CSCFclient_statistics_settings.cfg" relativeURI="productconfigs/CSCFclient/CSCFclient_statistics_settings.cfg"/> + <FileResource projectRelativePath="EPTF_GenApp_MainModule.ttcnpp" relativeURI="../src/common/EPTF_GenApp_MainModule.ttcnpp"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_GenApp_CSCFclient</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>GENAPP_COMPILE_SIP</listItem> + </TTCN3preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_Common.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_Common.tpd new file mode 100644 index 000000000..0352ece7a --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_Common.tpd @@ -0,0 +1,92 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_Common</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_Base" projectLocationURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/Base/EPTF_CLL_Base.tpd"/> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/Common/EPTF_CLL_Common.tpd"/> + <ReferencedProject name="EPTF_CLL_DataSource" projectLocationURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/DataSource/EPTF_CLL_DataSource.tpd"/> + <ReferencedProject name="EPTF_CLL_ExecCtrl" projectLocationURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/ExecCtrl/EPTF_CLL_ExecCtrl.tpd"/> + <ReferencedProject name="EPTF_CLL_ExecCtrl_UI" projectLocationURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/ExecCtrl/EPTF_CLL_ExecCtrl_UI.tpd"/> + <ReferencedProject name="EPTF_CLL_FreeBusyQueue" projectLocationURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/FreeBusyQueue/EPTF_CLL_FBQ.tpd"/> + <ReferencedProject name="EPTF_CLL_HostAdmin" projectLocationURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/HostAdmin/EPTF_CLL_HostAdmin.tpd"/> + <ReferencedProject name="EPTF_CLL_LGenBase" projectLocationURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/LGenBase/EPTF_CLL_LGenBase.tpd"/> + <ReferencedProject name="EPTF_CLL_LoadRegulator" projectLocationURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/LoadRegulator/EPTF_CLL_LoadRegulator.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging" projectLocationURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/Logging/EPTF_CLL_Logging.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging_Client" projectLocationURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/Logging/EPTF_CLL_Logging_Client.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging_Server" projectLocationURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/Logging/EPTF_CLL_Logging_Server.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging_UI" projectLocationURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/Logging/EPTF_CLL_Logging_UI.tpd"/> + <ReferencedProject name="EPTF_CLL_Rendezvous" projectLocationURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/Rendezvous/EPTF_CLL_Rendezvous.tpd"/> + <ReferencedProject name="EPTF_CLL_Scheduler" projectLocationURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/Scheduler/EPTF_CLL_Scheduler.tpd"/> + <ReferencedProject name="EPTF_CLL_StatCapture" projectLocationURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/StatCapture/EPTF_CLL_StatCapture.tpd"/> + <ReferencedProject name="EPTF_CLL_StatHandler" projectLocationURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/StatHandler/EPTF_CLL_StatHandler.tpd"/> + <ReferencedProject name="EPTF_CLL_StatHandler_UI" projectLocationURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/StatHandler/EPTF_CLL_StatHandler_UI.tpd"/> + <ReferencedProject name="EPTF_CLL_UIHandler" projectLocationURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/UIHandler/EPTF_CLL_UIHandler.tpd"/> + <ReferencedProject name="EPTF_CLL_Variable" projectLocationURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/Variable/EPTF_CLL_Variable.tpd"/> + <ReferencedProject name="XTDP_CNL113663" projectLocationURI="../../../ProtocolModules/XTDP_CNL113663/XTDP_CNL113663.tpd"/> + <ReferencedProject name="XTDPasp_CNL113494" projectLocationURI="../../../TestPorts/XTDPasp_CNL113494/XTDPasp_CNL113494.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="common" relativeURI="../src/common"/> + </Folders> + <Files> + <FileResource projectRelativePath="common/EPTF_GenApp_Common.grp" relativeURI="../src/common/EPTF_GenApp_Common.grp"/> + <FileResource projectRelativePath="common/EPTF_GenApp_Common_Definitions.ttcn" relativeURI="../src/common/EPTF_GenApp_Common_Definitions.ttcn"/> + <FileResource projectRelativePath="common/EPTF_GenApp_Common_ExternalFunctions.cc" relativeURI="../src/common/EPTF_GenApp_Common_ExternalFunctions.cc"/> + <FileResource projectRelativePath="common/EPTF_GenApp_Common_Functions.ttcn" relativeURI="../src/common/EPTF_GenApp_Common_Functions.ttcn"/> + <FileResource projectRelativePath="common/EPTF_GenApp_Gui.xml" relativeURI="../src/common/EPTF_GenApp_Gui.xml"/> + <FileResource projectRelativePath="common/EPTF_GenApp_MainModule.ttcnpp" relativeURI="../src/common/EPTF_GenApp_MainModule.ttcnpp"/> + <FileResource projectRelativePath="common/demo.xml" relativeURI="../src/common/demo.xml"/> + <FileResource projectRelativePath="common/demo_tab.xml" relativeURI="../src/common/demo_tab.xml"/> + <FileResource projectRelativePath="common/gui_empty_window.xml" relativeURI="../src/common/gui_empty_window.xml"/> + <FileResource projectRelativePath="common/gui_execctrl_buttons.xml" relativeURI="../src/common/gui_execctrl_buttons.xml"/> + <FileResource projectRelativePath="common/gui_execctrl_tabpanel.xml" relativeURI="../src/common/gui_execctrl_tabpanel.xml"/> + <FileResource projectRelativePath="common/gui_genapp_console_tabpanel.xml" relativeURI="../src/common/gui_genapp_console_tabpanel.xml"/> + <FileResource projectRelativePath="common/gui_genapp_statistic_tabpanel.xml" relativeURI="../src/common/gui_genapp_statistic_tabpanel.xml"/> + <FileResource projectRelativePath="common/gui_genapp_tabs.xml" relativeURI="../src/common/gui_genapp_tabs.xml"/> + <FileResource projectRelativePath="common/gui_stathandler_tabpanel.xml" relativeURI="../src/common/gui_stathandler_tabpanel.xml"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_GenApp_Common</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + <Configuration name="WCE"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_GenApp_Common</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>GENAPP_COMPILE_PGM</listItem> + <listItem>GENAPP_COMPILE_HTTP</listItem> + <listItem>GENAPP_COMPILE_SIP</listItem> + </TTCN3preprocessorDefines> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_DIAMETER.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_DIAMETER.tpd new file mode 100644 index 000000000..4cf7dbc63 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_DIAMETER.tpd @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_DIAMETER</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_Applib_Diameter_CNL113521" projectLocationURI="../../../../Libraries/EPTF_Applib_Diameter_CNL113521/EPTF_Applib_Diameter_CNL113521.tpd"/> + <ReferencedProject name="EPTF_GenApp_Common" projectLocationURI="../common/EPTF_GenApp_Common.tpd"/> + <ReferencedProject name="PIPEasp_CNL113334" projectLocationURI="../../../../TestPorts/PIPEasp_CNL113334/PIPEasp_CNL113334.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_DIAMETER_DS_Definitions.ttcn" relativeURI="EPTF_GenApp_DIAMETER_DS_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_GenApp_DIAMETER_DS_Functions.ttcn" relativeURI="EPTF_GenApp_DIAMETER_DS_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_GenApp_DIAMETER_ExternalFunctions.cc" relativeURI="EPTF_GenApp_DIAMETER_ExternalFunctions.cc"/> + <FileResource projectRelativePath="EPTF_GenApp_DIAMETER_LGen_Definitions.ttcn" relativeURI="EPTF_GenApp_DIAMETER_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_GenApp_DIAMETER_LGen_Functions.ttcn" relativeURI="EPTF_GenApp_DIAMETER_LGen_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <GNUMake>true</GNUMake> + <targetExecutable>build/EPTF_GenApp_DIAMETER</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>build</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_DNS.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_DNS.tpd new file mode 100644 index 000000000..be980f080 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_DNS.tpd @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_DNS</ProjectName> + <ReferencedProjects> + <ReferencedProject name="DNS_CNL113429" projectLocationURI="../../../../ProtocolModules/DNS_CNL113429/DNS_CNL113429.tpd"/> + <ReferencedProject name="EPTF_CLL_Transport_CommPortIPL4" projectLocationURI="../../../../Libraries/EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_Transport_CommPortIPL4.tpd"/> + <ReferencedProject name="EPTF_GenApp_Common" projectLocationURI="../common/EPTF_GenApp_Common.tpd"/> + <ReferencedProject name="EPTF_GenApp_ParlayX" projectLocationURI="../http/EPTF_GenApp_ParlayX.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_DNS_DS_Definitions.ttcn" relativeURI="EPTF_GenApp_DNS_DS_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_GenApp_DNS_DS_Functions.ttcn" relativeURI="EPTF_GenApp_DNS_DS_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_GenApp_DNS_Definitions.ttcn" relativeURI="EPTF_GenApp_DNS_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_GenApp_DNS_Functions.ttcn" relativeURI="EPTF_GenApp_DNS_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <GNUMake>true</GNUMake> + <targetExecutable>build/EPTF_GenApp_DNS</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>build</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_DSC.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_DSC.tpd new file mode 100644 index 000000000..f6b52c136 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_DSC.tpd @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_DSC</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_GenApp_DIAMETER" projectLocationURI="../src/diameter/EPTF_GenApp_DIAMETER.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="DSC" relativeURI="productconfigs/DSC"/> + </Folders> + <Files> + <FileResource projectRelativePath="DSC/DSC_Diameter.cfg" relativeURI="productconfigs/DSC/DSC_Diameter.cfg"/> + <FileResource projectRelativePath="DSC/DSC_FSMs.cfg" relativeURI="productconfigs/DSC/DSC_FSMs.cfg"/> + <FileResource projectRelativePath="DSC/DSC_main.cfg" relativeURI="productconfigs/DSC/DSC_main.cfg"/> + <FileResource projectRelativePath="EPTF_GenApp_MainModule.ttcnpp" relativeURI="../src/common/EPTF_GenApp_MainModule.ttcnpp"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/EPTF_GenApp_DSC</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>GENAPP_COMPILE_DIAMETER</listItem> + </TTCN3preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_EDB.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_EDB.tpd new file mode 100644 index 000000000..ba2184693 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_EDB.tpd @@ -0,0 +1,79 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_EDB</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_GenApp_CAPv2" projectLocationURI="../src/cap/EPTF_GenApp_CAPv2.tpd"/> + <ReferencedProject name="EPTF_GenApp_CAPv4" projectLocationURI="../src/cap/EPTF_GenApp_CAPv4.tpd"/> + <ReferencedProject name="EPTF_GenApp_CIP_Orga" projectLocationURI="../src/cip/EPTF_GenApp_CIP_Orga.tpd"/> + <ReferencedProject name="EPTF_GenApp_MAP" projectLocationURI="../src/map/EPTF_GenApp_MAP.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="EDB" relativeURI="productconfigs/EDB"/> + </Folders> + <Files> + <FileResource projectRelativePath="EDB/EDB_CAPv2_FSM_CLI.cfg" relativeURI="productconfigs/EDB/EDB_CAPv2_FSM_CLI.cfg"/> + <FileResource projectRelativePath="EDB/EDB_CAPv2_FSM_NorthBound_HomeZone.cfg" relativeURI="productconfigs/EDB/EDB_CAPv2_FSM_NorthBound_HomeZone.cfg"/> + <FileResource projectRelativePath="EDB/EDB_CAPv2_FSM_NorthBound_VPN.cfg" relativeURI="productconfigs/EDB/EDB_CAPv2_FSM_NorthBound_VPN.cfg"/> + <FileResource projectRelativePath="EDB/EDB_CAPv2_FSM_SouthBound.cfg" relativeURI="productconfigs/EDB/EDB_CAPv2_FSM_SouthBound.cfg"/> + <FileResource projectRelativePath="EDB/EDB_CAPv2_FSM_TIM.cfg" relativeURI="productconfigs/EDB/EDB_CAPv2_FSM_TIM.cfg"/> + <FileResource projectRelativePath="EDB/EDB_CAPv2_demo_CLI.cfg" relativeURI="productconfigs/EDB/EDB_CAPv2_demo_CLI.cfg"/> + <FileResource projectRelativePath="EDB/EDB_CAPv2_demo_NorthBound_HomeZone.cfg" relativeURI="productconfigs/EDB/EDB_CAPv2_demo_NorthBound_HomeZone.cfg"/> + <FileResource projectRelativePath="EDB/EDB_CAPv2_demo_NorthBound_VPN.cfg" relativeURI="productconfigs/EDB/EDB_CAPv2_demo_NorthBound_VPN.cfg"/> + <FileResource projectRelativePath="EDB/EDB_CAPv2_demo_SouthBound.cfg" relativeURI="productconfigs/EDB/EDB_CAPv2_demo_SouthBound.cfg"/> + <FileResource projectRelativePath="EDB/EDB_CAPv2_demo_TIM.cfg" relativeURI="productconfigs/EDB/EDB_CAPv2_demo_TIM.cfg"/> + <FileResource projectRelativePath="EDB/EDB_CAPv2_statistics_settings_NorthBound.cfg" relativeURI="productconfigs/EDB/EDB_CAPv2_statistics_settings_NorthBound.cfg"/> + <FileResource projectRelativePath="EDB/EDB_CAPv2_statistics_settings_SouthBound.cfg" relativeURI="productconfigs/EDB/EDB_CAPv2_statistics_settings_SouthBound.cfg"/> + <FileResource projectRelativePath="EDB/EDB_CAPv4_FSM.cfg" relativeURI="productconfigs/EDB/EDB_CAPv4_FSM.cfg"/> + <FileResource projectRelativePath="EDB/EDB_CAPv4_demo.cfg" relativeURI="productconfigs/EDB/EDB_CAPv4_demo.cfg"/> + <FileResource projectRelativePath="EDB/EDB_CAPv4_statistics_settings.cfg" relativeURI="productconfigs/EDB/EDB_CAPv4_statistics_settings.cfg"/> + <FileResource projectRelativePath="EDB/EDB_CIP_Orga_FSM.cfg" relativeURI="productconfigs/EDB/EDB_CIP_Orga_FSM.cfg"/> + <FileResource projectRelativePath="EDB/EDB_CIP_Orga_demo.cfg" relativeURI="productconfigs/EDB/EDB_CIP_Orga_demo.cfg"/> + <FileResource projectRelativePath="EDB/EDB_CLL_TestPorts.cfg" relativeURI="productconfigs/EDB/EDB_CLL_TestPorts.cfg"/> + <FileResource projectRelativePath="EDB/EDB_Combined_demo_CLI.cfg" relativeURI="productconfigs/EDB/EDB_Combined_demo_CLI.cfg"/> + <FileResource projectRelativePath="EDB/EDB_INAP_FSM_CLI.cfg" relativeURI="productconfigs/EDB/EDB_INAP_FSM_CLI.cfg"/> + <FileResource projectRelativePath="EDB/EDB_INAP_FSM_TIM.cfg" relativeURI="productconfigs/EDB/EDB_INAP_FSM_TIM.cfg"/> + <FileResource projectRelativePath="EDB/EDB_INAP_demo_CLI.cfg" relativeURI="productconfigs/EDB/EDB_INAP_demo_CLI.cfg"/> + <FileResource projectRelativePath="EDB/EDB_INAP_demo_TIM.cfg" relativeURI="productconfigs/EDB/EDB_INAP_demo_TIM.cfg"/> + <FileResource projectRelativePath="EDB/EDB_MAP_FSM.cfg" relativeURI="productconfigs/EDB/EDB_MAP_FSM.cfg"/> + <FileResource projectRelativePath="EDB/EDB_MAP_FSM_CLI.cfg" relativeURI="productconfigs/EDB/EDB_MAP_FSM_CLI.cfg"/> + <FileResource projectRelativePath="EDB/EDB_MAP_demo.cfg" relativeURI="productconfigs/EDB/EDB_MAP_demo.cfg"/> + <FileResource projectRelativePath="EDB/EDB_MAP_demo_CLI.cfg" relativeURI="productconfigs/EDB/EDB_MAP_demo_CLI.cfg"/> + <FileResource projectRelativePath="EDB/EDB_debug_settings.cfg" relativeURI="productconfigs/EDB/EDB_debug_settings.cfg"/> + <FileResource projectRelativePath="EDB/EDB_local_host.cfg" relativeURI="productconfigs/EDB/EDB_local_host.cfg"/> + <FileResource projectRelativePath="EDB/EDB_main_demo.cfg" relativeURI="productconfigs/EDB/EDB_main_demo.cfg"/> + <FileResource projectRelativePath="EDB/EDB_main_demo_CLI.cfg" relativeURI="productconfigs/EDB/EDB_main_demo_CLI.cfg"/> + <FileResource projectRelativePath="EDB/EDB_remote_node.cfg" relativeURI="productconfigs/EDB/EDB_remote_node.cfg"/> + <FileResource projectRelativePath="EDB/EDB_statistics_settings_CLI.cfg" relativeURI="productconfigs/EDB/EDB_statistics_settings_CLI.cfg"/> + <FileResource projectRelativePath="EPTF_GenApp_MainModule.ttcnpp" relativeURI="../src/common/EPTF_GenApp_MainModule.ttcnpp"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_GenApp_EDB</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>GENAPP_COMPILE_CAPv2</listItem> + <listItem>GENAPP_COMPILE_CAPv4</listItem> + <listItem>GENAPP_COMPILE_CIP_ORGA</listItem> + <listItem>GENAPP_COMPILE_MAP</listItem> + </TTCN3preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_EDB_CLI.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_EDB_CLI.tpd new file mode 100644 index 000000000..a10a2c1a4 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_EDB_CLI.tpd @@ -0,0 +1,82 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_EDB_CLI</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_GenApp_CAPv2" projectLocationURI="../src/cap/EPTF_GenApp_CAPv2.tpd"/> + <ReferencedProject name="EPTF_GenApp_CAPv4" projectLocationURI="../src/cap/EPTF_GenApp_CAPv4.tpd"/> + <ReferencedProject name="EPTF_GenApp_CIP_Orga" projectLocationURI="../src/cip/EPTF_GenApp_CIP_Orga.tpd"/> + <ReferencedProject name="EPTF_GenApp_INAP" projectLocationURI="../src/inap/EPTF_GenApp_INAP.tpd"/> + <ReferencedProject name="EPTF_GenApp_MAP" projectLocationURI="../src/map/EPTF_GenApp_MAP.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="EDB" relativeURI="productconfigs/EDB"/> + </Folders> + <Files> + <FileResource projectRelativePath="EDB/EDB_CAPv2_FSM_CLI.cfg" relativeURI="productconfigs/EDB/EDB_CAPv2_FSM_CLI.cfg"/> + <FileResource projectRelativePath="EDB/EDB_CAPv2_FSM_NorthBound_HomeZone.cfg" relativeURI="productconfigs/EDB/EDB_CAPv2_FSM_NorthBound_HomeZone.cfg"/> + <FileResource projectRelativePath="EDB/EDB_CAPv2_FSM_NorthBound_VPN.cfg" relativeURI="productconfigs/EDB/EDB_CAPv2_FSM_NorthBound_VPN.cfg"/> + <FileResource projectRelativePath="EDB/EDB_CAPv2_FSM_SouthBound.cfg" relativeURI="productconfigs/EDB/EDB_CAPv2_FSM_SouthBound.cfg"/> + <FileResource projectRelativePath="EDB/EDB_CAPv2_FSM_TIM.cfg" relativeURI="productconfigs/EDB/EDB_CAPv2_FSM_TIM.cfg"/> + <FileResource projectRelativePath="EDB/EDB_CAPv2_demo_CLI.cfg" relativeURI="productconfigs/EDB/EDB_CAPv2_demo_CLI.cfg"/> + <FileResource projectRelativePath="EDB/EDB_CAPv2_demo_NorthBound_HomeZone.cfg" relativeURI="productconfigs/EDB/EDB_CAPv2_demo_NorthBound_HomeZone.cfg"/> + <FileResource projectRelativePath="EDB/EDB_CAPv2_demo_NorthBound_VPN.cfg" relativeURI="productconfigs/EDB/EDB_CAPv2_demo_NorthBound_VPN.cfg"/> + <FileResource projectRelativePath="EDB/EDB_CAPv2_demo_SouthBound.cfg" relativeURI="productconfigs/EDB/EDB_CAPv2_demo_SouthBound.cfg"/> + <FileResource projectRelativePath="EDB/EDB_CAPv2_demo_TIM.cfg" relativeURI="productconfigs/EDB/EDB_CAPv2_demo_TIM.cfg"/> + <FileResource projectRelativePath="EDB/EDB_CAPv2_statistics_settings_NorthBound.cfg" relativeURI="productconfigs/EDB/EDB_CAPv2_statistics_settings_NorthBound.cfg"/> + <FileResource projectRelativePath="EDB/EDB_CAPv2_statistics_settings_SouthBound.cfg" relativeURI="productconfigs/EDB/EDB_CAPv2_statistics_settings_SouthBound.cfg"/> + <FileResource projectRelativePath="EDB/EDB_CAPv4_FSM.cfg" relativeURI="productconfigs/EDB/EDB_CAPv4_FSM.cfg"/> + <FileResource projectRelativePath="EDB/EDB_CAPv4_demo.cfg" relativeURI="productconfigs/EDB/EDB_CAPv4_demo.cfg"/> + <FileResource projectRelativePath="EDB/EDB_CAPv4_statistics_settings.cfg" relativeURI="productconfigs/EDB/EDB_CAPv4_statistics_settings.cfg"/> + <FileResource projectRelativePath="EDB/EDB_CIP_Orga_FSM.cfg" relativeURI="productconfigs/EDB/EDB_CIP_Orga_FSM.cfg"/> + <FileResource projectRelativePath="EDB/EDB_CIP_Orga_demo.cfg" relativeURI="productconfigs/EDB/EDB_CIP_Orga_demo.cfg"/> + <FileResource projectRelativePath="EDB/EDB_CLL_TestPorts.cfg" relativeURI="productconfigs/EDB/EDB_CLL_TestPorts.cfg"/> + <FileResource projectRelativePath="EDB/EDB_Combined_demo_CLI.cfg" relativeURI="productconfigs/EDB/EDB_Combined_demo_CLI.cfg"/> + <FileResource projectRelativePath="EDB/EDB_INAP_FSM_CLI.cfg" relativeURI="productconfigs/EDB/EDB_INAP_FSM_CLI.cfg"/> + <FileResource projectRelativePath="EDB/EDB_INAP_FSM_TIM.cfg" relativeURI="productconfigs/EDB/EDB_INAP_FSM_TIM.cfg"/> + <FileResource projectRelativePath="EDB/EDB_INAP_demo_CLI.cfg" relativeURI="productconfigs/EDB/EDB_INAP_demo_CLI.cfg"/> + <FileResource projectRelativePath="EDB/EDB_INAP_demo_TIM.cfg" relativeURI="productconfigs/EDB/EDB_INAP_demo_TIM.cfg"/> + <FileResource projectRelativePath="EDB/EDB_MAP_FSM.cfg" relativeURI="productconfigs/EDB/EDB_MAP_FSM.cfg"/> + <FileResource projectRelativePath="EDB/EDB_MAP_FSM_CLI.cfg" relativeURI="productconfigs/EDB/EDB_MAP_FSM_CLI.cfg"/> + <FileResource projectRelativePath="EDB/EDB_MAP_demo.cfg" relativeURI="productconfigs/EDB/EDB_MAP_demo.cfg"/> + <FileResource projectRelativePath="EDB/EDB_MAP_demo_CLI.cfg" relativeURI="productconfigs/EDB/EDB_MAP_demo_CLI.cfg"/> + <FileResource projectRelativePath="EDB/EDB_debug_settings.cfg" relativeURI="productconfigs/EDB/EDB_debug_settings.cfg"/> + <FileResource projectRelativePath="EDB/EDB_local_host.cfg" relativeURI="productconfigs/EDB/EDB_local_host.cfg"/> + <FileResource projectRelativePath="EDB/EDB_main_demo.cfg" relativeURI="productconfigs/EDB/EDB_main_demo.cfg"/> + <FileResource projectRelativePath="EDB/EDB_main_demo_CLI.cfg" relativeURI="productconfigs/EDB/EDB_main_demo_CLI.cfg"/> + <FileResource projectRelativePath="EDB/EDB_remote_node.cfg" relativeURI="productconfigs/EDB/EDB_remote_node.cfg"/> + <FileResource projectRelativePath="EDB/EDB_statistics_settings_CLI.cfg" relativeURI="productconfigs/EDB/EDB_statistics_settings_CLI.cfg"/> + <FileResource projectRelativePath="EPTF_GenApp_MainModule.ttcnpp" relativeURI="../src/common/EPTF_GenApp_MainModule.ttcnpp"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_GenApp_EDB</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>GENAPP_COMPILE_CAPv2</listItem> + <listItem>GENAPP_COMPILE_CAPv4</listItem> + <listItem>GENAPP_COMPILE_CIP_ORGA</listItem> + <listItem>GENAPP_COMPILE_COMBINED_CAPv2</listItem> + <listItem>GENAPP_COMPILE_MAP</listItem> + <listItem>GENAPP_COMPILE_COMBINED_INAP</listItem> + </TTCN3preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_EPC.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_EPC.tpd new file mode 100644 index 000000000..3494dbf54 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_EPC.tpd @@ -0,0 +1,46 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_EPC</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_GenApp_DIAMETER" projectLocationURI="../src/diameter/EPTF_GenApp_DIAMETER.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="EPC" relativeURI="productconfigs/EPC"/> + </Folders> + <Files> + <FileResource projectRelativePath="EPC/EPC_Diameter.cfg" relativeURI="productconfigs/EPC/EPC_Diameter.cfg"/> + <FileResource projectRelativePath="EPC/EPC_Diameter_FSM.cfg" relativeURI="productconfigs/EPC/EPC_Diameter_FSM.cfg"/> + <FileResource projectRelativePath="EPC/EPC_Main.cfg" relativeURI="productconfigs/EPC/EPC_Main.cfg"/> + <FileResource projectRelativePath="EPC/EPC_Testports.cfg" relativeURI="productconfigs/EPC/EPC_Testports.cfg"/> + <FileResource projectRelativePath="EPC/EPC_debug_settings.cfg" relativeURI="productconfigs/EPC/EPC_debug_settings.cfg"/> + <FileResource projectRelativePath="EPC/EPC_statistics.cfg" relativeURI="productconfigs/EPC/EPC_statistics.cfg"/> + <FileResource projectRelativePath="EPTF_GenApp_MainModule.ttcnpp" relativeURI="../src/common/EPTF_GenApp_MainModule.ttcnpp"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_GenApp_EPC</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>GENAPP_COMPILE_DIAMETER</listItem> + </TTCN3preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM.tpd new file mode 100644 index 000000000..4a21f6b55 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM.tpd @@ -0,0 +1,408 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_ETM</ProjectName> + <Folders> + <FolderResource projectRelativePath="Log_Dir1" relativeURI="logs"/> + </Folders> + <Files> + <FileResource projectRelativePath="ETM_main_demo.cfg" relativeURI="productconfigs/ETM/ETM_main_demo.cfg"/> + <FileResource projectRelativePath="Abstract_Socket.cc" relativeURI="../../../TestPorts/Common_Components/Abstract_Socket_CNL113384/src/Abstract_Socket.cc"/> + <FileResource projectRelativePath="Abstract_Socket.hh" relativeURI="../../../TestPorts/Common_Components/Abstract_Socket_CNL113384/src/Abstract_Socket.hh"/> + <FileResource projectRelativePath="CIP_EncDec.cc" relativeURI="../../../ProtocolModules/CIP_CS4.0_CNL113535/src/CIP_EncDec.cc"/> + <FileResource projectRelativePath="CIP_ITUasp_Types.ttcn" relativeURI="../../../ProtocolModules/CIP_CS4.0_CNL113535/src/CIP_ITUasp_Types.ttcn"/> + <FileResource projectRelativePath="CIP_PDU_Defs.asn" relativeURI="../../../ProtocolModules/CIP_CS4.0_CNL113535/src/CIP_PDU_Defs.asn"/> + <FileResource projectRelativePath="CIP_Types.ttcn" relativeURI="../../../ProtocolModules/CIP_CS4.0_CNL113535/src/CIP_Types.ttcn"/> + <FileResource projectRelativePath="Core_INAP_CS1_ApplicationContexts.asn" relativeURI="../../../ProtocolModules/Ericsson_INAP_CS1plus_CNL113356/src/Core_INAP_CS1_ApplicationContexts.asn"/> + <FileResource projectRelativePath="Core_INAP_CS1_Codes.asn" relativeURI="../../../ProtocolModules/Ericsson_INAP_CS1plus_CNL113356/src/Core_INAP_CS1_Codes.asn"/> + <FileResource projectRelativePath="Core_INAP_CS1_DataTypes.asn" relativeURI="../../../ProtocolModules/Ericsson_INAP_CS1plus_CNL113356/src/Core_INAP_CS1_DataTypes.asn"/> + <FileResource projectRelativePath="Core_INAP_CS1_EncDec.cc" relativeURI="../../../ProtocolModules/Ericsson_INAP_CS1plus_CNL113356/src/Core_INAP_CS1_EncDec.cc"/> + <FileResource projectRelativePath="Core_INAP_CS1_Errors.asn" relativeURI="../../../ProtocolModules/Ericsson_INAP_CS1plus_CNL113356/src/Core_INAP_CS1_Errors.asn"/> + <FileResource projectRelativePath="Core_INAP_CS1_Operations.asn" relativeURI="../../../ProtocolModules/Ericsson_INAP_CS1plus_CNL113356/src/Core_INAP_CS1_Operations.asn"/> + <FileResource projectRelativePath="Core_INAP_CS1_Types.ttcn" relativeURI="../../../ProtocolModules/Ericsson_INAP_CS1plus_CNL113356/src/Core_INAP_CS1_Types.ttcn"/> + <FileResource projectRelativePath="Core_INAP_PDU_Defs.asn" relativeURI="../../../ProtocolModules/Ericsson_INAP_CS1plus_CNL113356/src/Core_INAP_PDU_Defs.asn"/> + <FileResource projectRelativePath="EPTF_CIP_LGen_Definitions.ttcn" relativeURI="../../../Libraries/EPTF_Applib_CIP_CNL113666/src/LoadGen/EPTF_CIP_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CIP_LGen_Functions.ttcn" relativeURI="../../../Libraries/EPTF_Applib_CIP_CNL113666/src/LoadGen/EPTF_CIP_LGen_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CIP_Logger_Definitions.ttcn" relativeURI="../../../Libraries/EPTF_Applib_CIP_CNL113666/src/Logger/EPTF_CIP_Logger_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CIP_Logger_Functions.ttcn" relativeURI="../../../Libraries/EPTF_Applib_CIP_CNL113666/src/Logger/EPTF_CIP_Logger_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_Base_Definitions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/Base/EPTF_CLL_Base_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_Base_ExternalFunctions.cc" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/Base/EPTF_CLL_Base_ExternalFunctions.cc"/> + <FileResource projectRelativePath="EPTF_CLL_Base_Functions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/Base/EPTF_CLL_Base_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_CLI_Definitions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/CommandLineInterface/EPTF_CLL_CLI_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_CLI_Functions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/CommandLineInterface/EPTF_CLL_CLI_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_Common_Definitions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/Common/EPTF_CLL_Common_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_Common_ExternalFunctions.cc" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/Common/EPTF_CLL_Common_ExternalFunctions.cc"/> + <FileResource projectRelativePath="EPTF_CLL_Common_Functions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/Common/EPTF_CLL_Common_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_Common_IndexArrayDefinitions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/Common/EPTF_CLL_Common_IndexArrayDefinitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_Common_IndexArrayFunctions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/Common/EPTF_CLL_Common_IndexArrayFunctions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_Common_PrivateDebugDefinitions.ttcnpp" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/Common/EPTF_CLL_Common_PrivateDebugDefinitions.ttcnpp"/> + <FileResource projectRelativePath="EPTF_CLL_Common_RndDefinitions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/Common/EPTF_CLL_Common_RndDefinitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_Common_RndFunctions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/Common/EPTF_CLL_Common_RndFunctions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_DataSourceClient_Functions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/DataSource/EPTF_CLL_DataSourceClient_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_DataSource_Definitions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/DataSource/EPTF_CLL_DataSource_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_DataSource_ExternalFunctions.cc" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/DataSource/EPTF_CLL_DataSource_ExternalFunctions.cc"/> + <FileResource projectRelativePath="EPTF_CLL_DataSource_Functions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/DataSource/EPTF_CLL_DataSource_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_ExecCtrlClient_Functions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/ExecCtrl/EPTF_CLL_ExecCtrlClient_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_ExecCtrlTimeProfile_Definitions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/ExecCtrl/EPTF_CLL_ExecCtrlTimeProfile_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_ExecCtrlUIHandler_Definitions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/ExecCtrl/EPTF_CLL_ExecCtrlUIHandler_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_ExecCtrlUIHandler_Functions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/ExecCtrl/EPTF_CLL_ExecCtrlUIHandler_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_ExecCtrl_CLIDefinitions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/ExecCtrl/EPTF_CLL_ExecCtrl_CLIDefinitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_ExecCtrl_CLIFunctions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/ExecCtrl/EPTF_CLL_ExecCtrl_CLIFunctions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_ExecCtrl_DSFunctions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/ExecCtrl/EPTF_CLL_ExecCtrl_DSFunctions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_ExecCtrl_Definitions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/ExecCtrl/EPTF_CLL_ExecCtrl_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_ExecCtrl_Functions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/ExecCtrl/EPTF_CLL_ExecCtrl_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_ExecCtrl_LoggingFunctions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/ExecCtrl/EPTF_CLL_ExecCtrl_LoggingFunctions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_ExecCtrl_PhaseDefinitions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/ExecCtrl/EPTF_CLL_ExecCtrl_PhaseDefinitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_ExecCtrl_PhaseFunctions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/ExecCtrl/EPTF_CLL_ExecCtrl_PhaseFunctions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_ExecCtrl_ScenarioDefinitions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/ExecCtrl/EPTF_CLL_ExecCtrl_ScenarioDefinitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_ExecCtrl_ScenarioFunctions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/ExecCtrl/EPTF_CLL_ExecCtrl_ScenarioFunctions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_FBQ_Definitions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/FreeBusyQueue/EPTF_CLL_FBQ_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_FBQ_Functions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/FreeBusyQueue/EPTF_CLL_FBQ_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_HashMapInt2Int_ExternalFunctions.cc" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/HashMap/EPTF_CLL_HashMapInt2Int_ExternalFunctions.cc"/> + <FileResource projectRelativePath="EPTF_CLL_HashMapInt2Int_Functions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/HashMap/EPTF_CLL_HashMapInt2Int_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_HashMapOct2Int_ExternalFunctions.cc" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/HashMap/EPTF_CLL_HashMapOct2Int_ExternalFunctions.cc"/> + <FileResource projectRelativePath="EPTF_CLL_HashMapOct2Int_Functions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/HashMap/EPTF_CLL_HashMapOct2Int_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_HashMapStr2Int_ExternalFunctions.cc" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/HashMap/EPTF_CLL_HashMapStr2Int_ExternalFunctions.cc"/> + <FileResource projectRelativePath="EPTF_CLL_HashMapStr2Int_Functions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/HashMap/EPTF_CLL_HashMapStr2Int_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_HashMap_Definitions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/HashMap/EPTF_CLL_HashMap_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_HashMap_ExternalFunctions.hh" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/HashMap/EPTF_CLL_HashMap_ExternalFunctions.hh"/> + <FileResource projectRelativePath="EPTF_CLL_HashMap_Functions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/HashMap/EPTF_CLL_HashMap_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_HostAdminServer_Definitions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/HostAdmin/EPTF_CLL_HostAdminServer_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_HostAdminServer_Functions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/HostAdmin/EPTF_CLL_HostAdminServer_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_HostAdminUI_Definitions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/HostAdmin/EPTF_CLL_HostAdminUI_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_HostAdminUI_Functions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/HostAdmin/EPTF_CLL_HostAdminUI_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_HostAdmin_BaseDefinitions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/HostAdmin/EPTF_CLL_HostAdmin_BaseDefinitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_HostAdmin_BaseFunctions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/HostAdmin/EPTF_CLL_HostAdmin_BaseFunctions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_HostAdmin_DSFunctions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/HostAdmin/EPTF_CLL_HostAdmin_DSFunctions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_HostAdmin_Definitions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/HostAdmin/EPTF_CLL_HostAdmin_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_HostAdmin_Functions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/HostAdmin/EPTF_CLL_HostAdmin_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_LGenBaseStatsUI_Definitions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/LGenBase/EPTF_CLL_LGenBaseStatsUI_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_LGenBaseStatsUI_Functions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/LGenBase/EPTF_CLL_LGenBaseStatsUI_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_LGenBaseStats_Definitions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/LGenBase/EPTF_CLL_LGenBaseStats_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_LGenBaseStats_Functions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/LGenBase/EPTF_CLL_LGenBaseStats_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_LGenBaseTrafficMixer_Definitions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/LGenBase/EPTF_CLL_LGenBaseTrafficMixer_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_LGenBaseTrafficMixer_Functions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/LGenBase/EPTF_CLL_LGenBaseTrafficMixer_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_LGenBase_ConfigDefinitions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/LGenBase/EPTF_CLL_LGenBase_ConfigDefinitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_LGenBase_ConfigFunctions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/LGenBase/EPTF_CLL_LGenBase_ConfigFunctions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_LGenBase_DSFunctions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/LGenBase/EPTF_CLL_LGenBase_DSFunctions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_LGenBase_Definitions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/LGenBase/EPTF_CLL_LGenBase_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_LGenBase_EventHandlingExternalFunctions.cc" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/LGenBase/EPTF_CLL_LGenBase_EventHandlingExternalFunctions.cc"/> + <FileResource projectRelativePath="EPTF_CLL_LGenBase_EventHandlingFunctions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/LGenBase/EPTF_CLL_LGenBase_EventHandlingFunctions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_LGenBase_ExternalFunctions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/LGenBase/EPTF_CLL_LGenBase_ExternalFunctions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_LGenBase_Functions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/LGenBase/EPTF_CLL_LGenBase_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_LGenBase_LoggingFunctions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/LGenBase/EPTF_CLL_LGenBase_LoggingFunctions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_LGenBase_PhaseConfigFunctions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/LGenBase/EPTF_CLL_LGenBase_PhaseConfigFunctions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_LGenBase_PhaseDefinitions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/LGenBase/EPTF_CLL_LGenBase_PhaseDefinitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_LGenBase_PhaseFunctions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/LGenBase/EPTF_CLL_LGenBase_PhaseFunctions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_LGenBase_StepFunctions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/LGenBase/EPTF_CLL_LGenBase_StepFunctions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_LGenBase_TemplateDefinitions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/LGenBase/EPTF_CLL_LGenBase_TemplateDefinitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_LGenBase_TemplateFunctions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/LGenBase/EPTF_CLL_LGenBase_TemplateFunctions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_LGenBase_TrafficFunctions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/LGenBase/EPTF_CLL_LGenBase_TrafficFunctions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_LoadRegulatorUI_Definitions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/LoadRegulator/EPTF_CLL_LoadRegulatorUI_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_LoadRegulatorUI_Functions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/LoadRegulator/EPTF_CLL_LoadRegulatorUI_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_LoadRegulator_Definitions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/LoadRegulator/EPTF_CLL_LoadRegulator_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_LoadRegulator_Functions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/LoadRegulator/EPTF_CLL_LoadRegulator_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_LoggingClient_Functions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/Logging/EPTF_CLL_LoggingClient_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_LoggingServer_Definitions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/Logging/EPTF_CLL_LoggingServer_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_LoggingServer_Functions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/Logging/EPTF_CLL_LoggingServer_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_LoggingUIClient_Functions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/Logging/EPTF_CLL_LoggingUIClient_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_LoggingUI_Definitions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/Logging/EPTF_CLL_LoggingUI_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_LoggingUI_Functions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/Logging/EPTF_CLL_LoggingUI_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_LoggingUI_PrivateFunctions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/Logging/EPTF_CLL_LoggingUI_PrivateFunctions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_Logging_Definitions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/Logging/EPTF_CLL_Logging_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_Logging_Functions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/Logging/EPTF_CLL_Logging_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_NQueue_Definitions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/NQueue/EPTF_CLL_NQueue_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_NQueue_ExternalFunctions.cc" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/NQueue/EPTF_CLL_NQueue_ExternalFunctions.cc"/> + <FileResource projectRelativePath="EPTF_CLL_NQueue_Functions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/NQueue/EPTF_CLL_NQueue_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_RBTScheduler_Definitions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/Scheduler/EPTF_CLL_RBTScheduler_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_RBTScheduler_Functions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/Scheduler/EPTF_CLL_RBTScheduler_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_RBT_Definitions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/RedBlackTree/EPTF_CLL_RBT_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_RBT_ExternalFunctions.cc" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/RedBlackTree/EPTF_CLL_RBT_ExternalFunctions.cc"/> + <FileResource projectRelativePath="EPTF_CLL_RBT_Functions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/RedBlackTree/EPTF_CLL_RBT_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_RBtreeFloat_Functions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/RedBlackTree/EPTF_CLL_RBtreeFloat_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_RBtreeFloat_PrivateFunctions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/RedBlackTree/EPTF_CLL_RBtreeFloat_PrivateFunctions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_RBtreeInteger_Functions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/RedBlackTree/EPTF_CLL_RBtreeInteger_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_RBtreeInteger_PrivateFunctions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/RedBlackTree/EPTF_CLL_RBtreeInteger_PrivateFunctions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_RBtree_Definitions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/RedBlackTree/EPTF_CLL_RBtree_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_RBtree_Functions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/RedBlackTree/EPTF_CLL_RBtree_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_RBtree_PrivateFunctions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/RedBlackTree/EPTF_CLL_RBtree_PrivateFunctions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_RNA_Definitions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/RandomNArray/EPTF_CLL_RNA_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_RNA_Functions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/RandomNArray/EPTF_CLL_RNA_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_RendezvousClient_Functions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/Rendezvous/EPTF_CLL_RendezvousClient_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_Rendezvous_Definitions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/Rendezvous/EPTF_CLL_Rendezvous_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_Rendezvous_Functions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/Rendezvous/EPTF_CLL_Rendezvous_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_Scheduler_Definitions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/Scheduler/EPTF_CLL_Scheduler_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_Semaphore_Definitions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/Semaphore/EPTF_CLL_Semaphore_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_Semaphore_Functions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/Semaphore/EPTF_CLL_Semaphore_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_StatCapture_Definitions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/StatCapture/EPTF_CLL_StatCapture_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_StatCapture_ExternalFunctions.cc" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/StatCapture/EPTF_CLL_StatCapture_ExternalFunctions.cc"/> + <FileResource projectRelativePath="EPTF_CLL_StatCapture_Functions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/StatCapture/EPTF_CLL_StatCapture_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_StatHandlerClient_Definitions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/StatHandler/EPTF_CLL_StatHandlerClient_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_StatHandlerClient_Functions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/StatHandler/EPTF_CLL_StatHandlerClient_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_StatHandlerLogging_Definitions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/StatHandler/EPTF_CLL_StatHandlerLogging_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_StatHandlerLogging_Functions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/StatHandler/EPTF_CLL_StatHandlerLogging_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_StatHandlerUI_Definitions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/StatHandler/EPTF_CLL_StatHandlerUI_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_StatHandlerUI_Functions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/StatHandler/EPTF_CLL_StatHandlerUI_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_StatHandler_DSFunctions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/StatHandler/EPTF_CLL_StatHandler_DSFunctions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_StatHandler_Definitions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/StatHandler/EPTF_CLL_StatHandler_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_StatHandler_Functions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/StatHandler/EPTF_CLL_StatHandler_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_StatMeasure_Definitions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/StatMeasure/EPTF_CLL_StatMeasure_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_StatMeasure_Functions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/StatMeasure/EPTF_CLL_StatMeasure_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_TransportCommPortIPL4_Definitions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_TransportCommPortIPL4_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_TransportCommPortIPL4_Functions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_TransportCommPortIPL4_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_TransportIPL4_Definitions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_TransportIPL4_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_TransportIPL4_Functions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_TransportIPL4_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_TransportMessageBufferManager_Definitions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_TransportMessageBufferManager_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_TransportMessageBufferManager_Functions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_TransportMessageBufferManager_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_TransportRouting_Definitions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_TransportRouting_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_TransportRouting_Functions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_TransportRouting_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_Transport_CommonDefinitions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_Transport_CommonDefinitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_UIHandlerCLI_CommandDefinitions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/UIHandler/EPTF_CLL_UIHandlerCLI_CommandDefinitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_UIHandlerCLI_Definitions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/UIHandler/EPTF_CLL_UIHandlerCLI_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_UIHandlerCLI_Functions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/UIHandler/EPTF_CLL_UIHandlerCLI_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_UIHandlerClient_Definitions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/UIHandler/EPTF_CLL_UIHandlerClient_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_UIHandlerClient_Functions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/UIHandler/EPTF_CLL_UIHandlerClient_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_UIHandlerVariableUI_Definitions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/UIHandler/EPTF_CLL_UIHandlerVariableUI_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_UIHandlerVariableUI_Functions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/UIHandler/EPTF_CLL_UIHandlerVariableUI_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_UIHandler_CLIClientDefinitions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/UIHandler/EPTF_CLL_UIHandler_CLIClientDefinitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_UIHandler_ConvertFunctions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/UIHandler/EPTF_CLL_UIHandler_ConvertFunctions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_UIHandler_Definitions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/UIHandler/EPTF_CLL_UIHandler_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_UIHandler_MsgDefinitions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/UIHandler/EPTF_CLL_UIHandler_MsgDefinitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_UIHandler_PrivateFunctions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/UIHandler/EPTF_CLL_UIHandler_PrivateFunctions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_UIHandler_WidgetFunctions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/UIHandler/EPTF_CLL_UIHandler_WidgetFunctions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_UIHandler_XSD_XTDPTemplateDefinitions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/UIHandler/EPTF_CLL_UIHandler_XSD_XTDPTemplateDefinitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_UIHandler_XTDPTemplateDefinitions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/UIHandler/EPTF_CLL_UIHandler_XTDPTemplateDefinitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_UIHandler_XULFunctions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/UIHandler/EPTF_CLL_UIHandler_XULFunctions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_Variable_Definitions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/Variable/EPTF_CLL_Variable_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_CLL_Variable_ExternalFunctions.cc" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/Variable/EPTF_CLL_Variable_ExternalFunctions.cc"/> + <FileResource projectRelativePath="EPTF_CLL_Variable_Functions.ttcn" relativeURI="../../../Libraries/EPTF_Core_Library_CNL113512/src/Variable/EPTF_CLL_Variable_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_GenApp_CIP_LGen_Definitions.ttcn" relativeURI="../src/cip/EPTF_GenApp_CIP_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_GenApp_CIP_LGen_Functions.ttcn" relativeURI="../src/cip/EPTF_GenApp_CIP_LGen_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_GenApp_Common_Definitions.ttcn" relativeURI="../src/common/EPTF_GenApp_Common_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_GenApp_Common_ExternalFunctions.cc" relativeURI="../src/common/EPTF_GenApp_Common_ExternalFunctions.cc"/> + <FileResource projectRelativePath="EPTF_GenApp_Common_Functions.ttcn" relativeURI="../src/common/EPTF_GenApp_Common_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_GenApp_GUI_main.xml" relativeURI="../src/common/EPTF_GenApp_GUI_main.xml"/> + <FileResource projectRelativePath="EPTF_GenApp_Gui.xml" relativeURI="../src/common/EPTF_GenApp_Gui.xml"/> + <FileResource projectRelativePath="EPTF_GenApp_INAP_LGen_Definitions.ttcn" relativeURI="../src/inap/EPTF_GenApp_INAP_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_GenApp_INAP_LGen_Functions.ttcn" relativeURI="../src/inap/EPTF_GenApp_INAP_LGen_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_GenApp_MainModule.ttcnpp" relativeURI="../src/common/EPTF_GenApp_MainModule.ttcnpp"/> + <FileResource projectRelativePath="EPTF_INAP_CS1plus_LGen_Definitions.ttcn" relativeURI="../../../Libraries/EPTF_Applib_INAP_CNL113596/src/LoadGen/EPTF_INAP_CS1plus_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_INAP_CS1plus_LGen_Functions.ttcn" relativeURI="../../../Libraries/EPTF_Applib_INAP_CNL113596/src/LoadGen/EPTF_INAP_CS1plus_LGen_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_INAP_Logger_Functions.ttcn" relativeURI="../../../Libraries/EPTF_Applib_INAP_CNL113596/src/Logger/EPTF_INAP_Logger_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_TCAP_LGen_DS_Definitions.ttcn" relativeURI="../../../Libraries/EPTF_CommonTransport_TCAP_CNL113592/src/LoadGen/EPTF_TCAP_LGen_DS_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_TCAP_LGen_DS_Functions.ttcn" relativeURI="../../../Libraries/EPTF_CommonTransport_TCAP_CNL113592/src/LoadGen/EPTF_TCAP_LGen_DS_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_TCAP_LGen_Definitions.ttcn" relativeURI="../../../Libraries/EPTF_CommonTransport_TCAP_CNL113592/src/LoadGen/EPTF_TCAP_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_TCAP_LGen_Functions.ttcn" relativeURI="../../../Libraries/EPTF_CommonTransport_TCAP_CNL113592/src/LoadGen/EPTF_TCAP_LGen_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_TCAP_Logger_Definitions.ttcn" relativeURI="../../../Libraries/EPTF_CommonTransport_TCAP_CNL113592/src/Logger/EPTF_TCAP_Logger_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_TCAP_Logger_Functions.ttcn" relativeURI="../../../Libraries/EPTF_CommonTransport_TCAP_CNL113592/src/Logger/EPTF_TCAP_Logger_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_TCAP_Transport_Definitions.ttcn" relativeURI="../../../Libraries/EPTF_CommonTransport_TCAP_CNL113592/src/Transport/EPTF_TCAP_Transport_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_TCAP_Transport_Functions.ttcn" relativeURI="../../../Libraries/EPTF_CommonTransport_TCAP_CNL113592/src/Transport/EPTF_TCAP_Transport_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_TCAP_UIHandler_Definitions.ttcn" relativeURI="../../../Libraries/EPTF_CommonTransport_TCAP_CNL113592/src/LoadGen/EPTF_TCAP_UIHandler_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_TCAP_UIHandler_Functions.ttcn" relativeURI="../../../Libraries/EPTF_CommonTransport_TCAP_CNL113592/src/LoadGen/EPTF_TCAP_UIHandler_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_Transport_CommPort_TCAP_Definitions.ttcn" relativeURI="../../../Libraries/EPTF_CommonTransport_TCAP_CNL113592/src/Transport/EPTF_Transport_CommPort_TCAP_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_Transport_CommPort_TCAP_Functions.ttcn" relativeURI="../../../Libraries/EPTF_CommonTransport_TCAP_CNL113592/src/Transport/EPTF_Transport_CommPort_TCAP_Functions.ttcn"/> + <FileResource projectRelativePath="ETM_CLL_TestPorts.cfg" relativeURI="productconfigs/ETM/ETM_CLL_TestPorts.cfg"/> + <FileResource projectRelativePath="ETM_INAP_FSM.cfg" relativeURI="productconfigs/ETM/ETM_INAP_FSM.cfg"/> + <FileResource projectRelativePath="ETM_INAP_FSM_PGStraffic.cfg" relativeURI="productconfigs/ETM/ETM_INAP_FSM_PGStraffic.cfg"/> + <FileResource projectRelativePath="ETM_INAP_FSM_SNAtraffic.cfg" relativeURI="productconfigs/ETM/ETM_INAP_FSM_SNAtraffic.cfg"/> + <FileResource projectRelativePath="ETM_INAP_FSM_SNAtraffic_assisting.cfg" relativeURI="productconfigs/ETM/ETM_INAP_FSM_SNAtraffic_assisting.cfg"/> + <FileResource projectRelativePath="ETM_INAP_FSM_VPNtraffic.cfg" relativeURI="productconfigs/ETM/ETM_INAP_FSM_VPNtraffic.cfg"/> + <FileResource projectRelativePath="ETM_INAP_demo.cfg" relativeURI="productconfigs/ETM/ETM_INAP_demo.cfg"/> + <FileResource projectRelativePath="ETM_INAP_demo_PGStraffic.cfg" relativeURI="productconfigs/ETM/ETM_INAP_demo_PGStraffic.cfg"/> + <FileResource projectRelativePath="ETM_INAP_demo_SNAtraffic.cfg" relativeURI="productconfigs/ETM/ETM_INAP_demo_SNAtraffic.cfg"/> + <FileResource projectRelativePath="ETM_INAP_demo_SNAtraffic_assisting.cfg" relativeURI="productconfigs/ETM/ETM_INAP_demo_SNAtraffic_assisting.cfg"/> + <FileResource projectRelativePath="ETM_INAP_demo_VPNtraffic.cfg" relativeURI="productconfigs/ETM/ETM_INAP_demo_VPNtraffic.cfg"/> + <FileResource projectRelativePath="ETM_debug_settings.cfg" relativeURI="productconfigs/ETM/ETM_debug_settings.cfg"/> + <FileResource projectRelativePath="ETM_local_host.cfg" relativeURI="productconfigs/ETM/ETM_local_host.cfg"/> + <FileResource projectRelativePath="ETM_remote_node.cfg" relativeURI="productconfigs/ETM/ETM_remote_node.cfg"/> + <FileResource projectRelativePath="ETM_statistics_settings.cfg" relativeURI="productconfigs/ETM/ETM_statistics_settings.cfg"/> + <FileResource projectRelativePath="ETM_statistics_settings_PGStraffic.cfg" relativeURI="productconfigs/ETM/ETM_statistics_settings_PGStraffic.cfg"/> + <FileResource projectRelativePath="ETM_statistics_settings_SNAtraffic.cfg" relativeURI="productconfigs/ETM/ETM_statistics_settings_SNAtraffic.cfg"/> + <FileResource projectRelativePath="ETM_statistics_settings_SNAtraffic_assisting.cfg" relativeURI="productconfigs/ETM/ETM_statistics_settings_SNAtraffic_assisting.cfg"/> + <FileResource projectRelativePath="ETM_statistics_settings_VPNtraffic.cfg" relativeURI="productconfigs/ETM/ETM_statistics_settings_VPNtraffic.cfg"/> + <FileResource projectRelativePath="Ericsson_INAP_CS1plus_ApplicationContexts.asn" relativeURI="../../../ProtocolModules/Ericsson_INAP_CS1plus_CNL113356/src/Ericsson_INAP_CS1plus_ApplicationContexts.asn"/> + <FileResource projectRelativePath="Ericsson_INAP_CS1plus_ApplicationContexts_RevB.asn" relativeURI="../../../ProtocolModules/Ericsson_INAP_CS1plus_CNL113356/src/Ericsson_INAP_CS1plus_ApplicationContexts_RevB.asn"/> + <FileResource projectRelativePath="Ericsson_INAP_CS1plus_Codes.asn" relativeURI="../../../ProtocolModules/Ericsson_INAP_CS1plus_CNL113356/src/Ericsson_INAP_CS1plus_Codes.asn"/> + <FileResource projectRelativePath="Ericsson_INAP_CS1plus_Datatypes.asn" relativeURI="../../../ProtocolModules/Ericsson_INAP_CS1plus_CNL113356/src/Ericsson_INAP_CS1plus_Datatypes.asn"/> + <FileResource projectRelativePath="Ericsson_INAP_CS1plus_Errors.asn" relativeURI="../../../ProtocolModules/Ericsson_INAP_CS1plus_CNL113356/src/Ericsson_INAP_CS1plus_Errors.asn"/> + <FileResource projectRelativePath="Ericsson_INAP_CS1plus_Operations.asn" relativeURI="../../../ProtocolModules/Ericsson_INAP_CS1plus_CNL113356/src/Ericsson_INAP_CS1plus_Operations.asn"/> + <FileResource projectRelativePath="Ericsson_INAP_CS1plus_Types.ttcn" relativeURI="../../../ProtocolModules/Ericsson_INAP_CS1plus_CNL113356/src/Ericsson_INAP_CS1plus_Types.ttcn"/> + <FileResource projectRelativePath="General_Types.ttcn" relativeURI="../../../ProtocolModules/COMMON/src/General_Types.ttcn"/> + <FileResource projectRelativePath="INAP_CS1plus_ANSIasp_Types.ttcn" relativeURI="../../../ProtocolModules/Ericsson_INAP_CS1plus_CNL113356/src/INAP_CS1plus_ANSIasp_Types.ttcn"/> + <FileResource projectRelativePath="INAP_CS1plus_Detailed_EncDec.cc" relativeURI="../../../ProtocolModules/Ericsson_INAP_CS1plus_CNL113356/src/INAP_CS1plus_Detailed_EncDec.cc"/> + <FileResource projectRelativePath="INAP_CS1plus_EncDec.cc" relativeURI="../../../ProtocolModules/Ericsson_INAP_CS1plus_CNL113356/src/INAP_CS1plus_EncDec.cc"/> + <FileResource projectRelativePath="INAP_CS1plus_ITUasp_Types.ttcn" relativeURI="../../../ProtocolModules/Ericsson_INAP_CS1plus_CNL113356/src/INAP_CS1plus_ITUasp_Types.ttcn"/> + <FileResource projectRelativePath="INAP_CS1plus_Types.ttcn" relativeURI="../../../ProtocolModules/Ericsson_INAP_CS1plus_CNL113356/src/INAP_CS1plus_Types.ttcn"/> + <FileResource projectRelativePath="INAP_PDU_Defs.asn" relativeURI="../../../ProtocolModules/Ericsson_INAP_CS1plus_CNL113356/src/INAP_PDU_Defs.asn"/> + <FileResource projectRelativePath="IPL4asp_Functions.ttcn" relativeURI="../../../TestPorts/IPL4asp_CNL113531/src/IPL4asp_Functions.ttcn"/> + <FileResource projectRelativePath="IPL4asp_PT.cc" relativeURI="../../../TestPorts/IPL4asp_CNL113531/src/IPL4asp_PT.cc"/> + <FileResource projectRelativePath="IPL4asp_PT.hh" relativeURI="../../../TestPorts/IPL4asp_CNL113531/src/IPL4asp_PT.hh"/> + <FileResource projectRelativePath="IPL4asp_PortType.ttcn" relativeURI="../../../TestPorts/IPL4asp_CNL113531/src/IPL4asp_PortType.ttcn"/> + <FileResource projectRelativePath="IPL4asp_Types.ttcn" relativeURI="../../../TestPorts/IPL4asp_CNL113531/src/IPL4asp_Types.ttcn"/> + <FileResource projectRelativePath="IPL4asp_discovery.cc" relativeURI="../../../TestPorts/IPL4asp_CNL113531/src/IPL4asp_discovery.cc"/> + <FileResource projectRelativePath="IPL4asp_protocol_L234.hh" relativeURI="../../../TestPorts/IPL4asp_CNL113531/src/IPL4asp_protocol_L234.hh"/> + <FileResource projectRelativePath="LOADMEASasp_PT.cc" relativeURI="../../../TestPorts/LOADMEASasp_CNL113585/src/LOADMEASasp_PT.cc"/> + <FileResource projectRelativePath="LOADMEASasp_PT.hh" relativeURI="../../../TestPorts/LOADMEASasp_CNL113585/src/LOADMEASasp_PT.hh"/> + <FileResource projectRelativePath="LOADMEASasp_PortType.ttcn" relativeURI="../../../TestPorts/LOADMEASasp_CNL113585/src/LOADMEASasp_PortType.ttcn"/> + <FileResource projectRelativePath="LOADMEASasp_Types.ttcn" relativeURI="../../../TestPorts/LOADMEASasp_CNL113585/src/LOADMEASasp_Types.ttcn"/> + <FileResource projectRelativePath="MobileDomainDefinitions.asn" relativeURI="../../../ProtocolModules/COMMON/src/MobileDomainDefinitions.asn"/> + <FileResource projectRelativePath="PIPEasp_PT.cc" relativeURI="../../../TestPorts/PIPEasp_CNL113334/src/PIPEasp_PT.cc"/> + <FileResource projectRelativePath="PIPEasp_PT.hh" relativeURI="../../../TestPorts/PIPEasp_CNL113334/src/PIPEasp_PT.hh"/> + <FileResource projectRelativePath="PIPEasp_PortType.ttcn" relativeURI="../../../TestPorts/PIPEasp_CNL113334/src/PIPEasp_PortType.ttcn"/> + <FileResource projectRelativePath="PIPEasp_Types.ttcn" relativeURI="../../../TestPorts/PIPEasp_CNL113334/src/PIPEasp_Types.ttcn"/> + <FileResource projectRelativePath="Remote_Operations_Generic_ROS_PDUs.asn" relativeURI="../../../ProtocolModules/ROSE_CNL113369/src/Remote_Operations_Generic_ROS_PDUs.asn"/> + <FileResource projectRelativePath="Remote_Operations_Information_Objects.asn" relativeURI="../../../ProtocolModules/ROSE_CNL113369/src/Remote_Operations_Information_Objects.asn"/> + <FileResource projectRelativePath="SS7Common.cc" relativeURI="../../../Other/EINSS7/UTIL/SS7Common.cc"/> + <FileResource projectRelativePath="SS7Common.hh" relativeURI="../../../Other/EINSS7/UTIL/SS7Common.hh"/> + <FileResource projectRelativePath="SS7DDefs.h" relativeURI="../../../Servers/EIN_SS7_Daemon_CNL113380/src/SS7DDefs.h"/> + <FileResource projectRelativePath="SS7DUtils.cc" relativeURI="../../../Servers/EIN_SS7_Daemon_CNL113380/src/SS7DUtils.cc"/> + <FileResource projectRelativePath="SS7DUtils.hh" relativeURI="../../../Servers/EIN_SS7_Daemon_CNL113380/src/SS7DUtils.hh"/> + <FileResource projectRelativePath="Socket_API_Definitions.ttcn" relativeURI="../../../TestPorts/Common_Components/Socket_API_CNL113686/src/Socket_API_Definitions.ttcn"/> + <FileResource projectRelativePath="Socket_Component.cc" relativeURI="../../../Servers/EIN_SS7_Daemon_CNL113380/src/Socket_Component.cc"/> + <FileResource projectRelativePath="Socket_Component.hh" relativeURI="../../../Servers/EIN_SS7_Daemon_CNL113380/src/Socket_Component.hh"/> + <FileResource projectRelativePath="TCAPPackage.asn" relativeURI="../../../TestPorts/TCAPasp_CNL113349/src/TCAPPackage.asn"/> + <FileResource projectRelativePath="TCAPasp_PT.cc" relativeURI="../../../TestPorts/TCAPasp_CNL113349/src/TCAPasp_PT.cc"/> + <FileResource projectRelativePath="TCAPasp_PT.hh" relativeURI="../../../TestPorts/TCAPasp_CNL113349/src/TCAPasp_PT.hh"/> + <FileResource projectRelativePath="TCAPasp_PT_Daemon_Interface.cc" relativeURI="../../../TestPorts/TCAPasp_CNL113349/src/TCAPasp_PT_Daemon_Interface.cc"/> + <FileResource projectRelativePath="TCAPasp_PT_Daemon_Interface.hh" relativeURI="../../../TestPorts/TCAPasp_CNL113349/src/TCAPasp_PT_Daemon_Interface.hh"/> + <FileResource projectRelativePath="TCAPasp_PT_EIN_Interface.cc" relativeURI="../../../TestPorts/TCAPasp_CNL113349/src/TCAPasp_PT_EIN_Interface.cc"/> + <FileResource projectRelativePath="TCAPasp_PT_EIN_Interface.hh" relativeURI="../../../TestPorts/TCAPasp_CNL113349/src/TCAPasp_PT_EIN_Interface.hh"/> + <FileResource projectRelativePath="TCAPasp_PortType.ttcn" relativeURI="../../../TestPorts/TCAPasp_CNL113349/src/TCAPasp_PortType.ttcn"/> + <FileResource projectRelativePath="TCAPasp_Types.ttcn" relativeURI="../../../TestPorts/TCAPasp_CNL113349/src/TCAPasp_Types.ttcn"/> + <FileResource projectRelativePath="TCCAssertion.cc" relativeURI="../../../Libraries/TCCUsefulFunctions_CNL113472/src/TCCAssertion.cc"/> + <FileResource projectRelativePath="TCCAssertion_Functions.ttcn" relativeURI="../../../Libraries/TCCUsefulFunctions_CNL113472/src/TCCAssertion_Functions.ttcn"/> + <FileResource projectRelativePath="TCCConversion.cc" relativeURI="../../../Libraries/TCCUsefulFunctions_CNL113472/src/TCCConversion.cc"/> + <FileResource projectRelativePath="TCCConversion_Functions.ttcn" relativeURI="../../../Libraries/TCCUsefulFunctions_CNL113472/src/TCCConversion_Functions.ttcn"/> + <FileResource projectRelativePath="TCCDateTime.cc" relativeURI="../../../Libraries/TCCUsefulFunctions_CNL113472/src/TCCDateTime.cc"/> + <FileResource projectRelativePath="TCCDateTime_Functions.ttcn" relativeURI="../../../Libraries/TCCUsefulFunctions_CNL113472/src/TCCDateTime_Functions.ttcn"/> + <FileResource projectRelativePath="TCCEncoding.cc" relativeURI="../../../Libraries/TCCUsefulFunctions_CNL113472/src/TCCEncoding.cc"/> + <FileResource projectRelativePath="TCCEncoding_Functions.ttcn" relativeURI="../../../Libraries/TCCUsefulFunctions_CNL113472/src/TCCEncoding_Functions.ttcn"/> + <FileResource projectRelativePath="TCCEnv.cc" relativeURI="../../../Libraries/TCCUsefulFunctions_CNL113472/src/TCCEnv.cc"/> + <FileResource projectRelativePath="TCCEnv_Functions.ttcn" relativeURI="../../../Libraries/TCCUsefulFunctions_CNL113472/src/TCCEnv_Functions.ttcn"/> + <FileResource projectRelativePath="TCCFileIO.cc" relativeURI="../../../Libraries/TCCUsefulFunctions_CNL113472/src/TCCFileIO.cc"/> + <FileResource projectRelativePath="TCCFileIO_Functions.ttcn" relativeURI="../../../Libraries/TCCUsefulFunctions_CNL113472/src/TCCFileIO_Functions.ttcn"/> + <FileResource projectRelativePath="TCCFileSystem.cc" relativeURI="../../../Libraries/TCCUsefulFunctions_CNL113472/src/TCCFileSystem.cc"/> + <FileResource projectRelativePath="TCCFileSystem_Functions.ttcn" relativeURI="../../../Libraries/TCCUsefulFunctions_CNL113472/src/TCCFileSystem_Functions.ttcn"/> + <FileResource projectRelativePath="TCCIPsec.cc" relativeURI="../../../Libraries/TCCUsefulFunctions_CNL113472/src/TCCIPsec.cc"/> + <FileResource projectRelativePath="TCCIPsec_Definitions.ttcn" relativeURI="../../../Libraries/TCCUsefulFunctions_CNL113472/src/TCCIPsec_Definitions.ttcn"/> + <FileResource projectRelativePath="TCCIPsec_Functions.ttcn" relativeURI="../../../Libraries/TCCUsefulFunctions_CNL113472/src/TCCIPsec_Functions.ttcn"/> + <FileResource projectRelativePath="TCCInterface.cc" relativeURI="../../../Libraries/TCCUsefulFunctions_CNL113472/src/TCCInterface.cc"/> + <FileResource projectRelativePath="TCCInterface_Functions.ttcn" relativeURI="../../../Libraries/TCCUsefulFunctions_CNL113472/src/TCCInterface_Functions.ttcn"/> + <FileResource projectRelativePath="TCCInterface_ip.h" relativeURI="../../../Libraries/TCCUsefulFunctions_CNL113472/src/TCCInterface_ip.h"/> + <FileResource projectRelativePath="TCCMaths.cc" relativeURI="../../../Libraries/TCCUsefulFunctions_CNL113472/src/TCCMaths.cc"/> + <FileResource projectRelativePath="TCCMaths_Functions.ttcn" relativeURI="../../../Libraries/TCCUsefulFunctions_CNL113472/src/TCCMaths_Functions.ttcn"/> + <FileResource projectRelativePath="TCCMaths_GenericTypes.ttcn" relativeURI="../../../Libraries/TCCUsefulFunctions_CNL113472/src/TCCMaths_GenericTypes.ttcn"/> + <FileResource projectRelativePath="TCCMessageHandling.cc" relativeURI="../../../Libraries/TCCUsefulFunctions_CNL113472/src/TCCMessageHandling.cc"/> + <FileResource projectRelativePath="TCCMessageHandling_Functions.ttcn" relativeURI="../../../Libraries/TCCUsefulFunctions_CNL113472/src/TCCMessageHandling_Functions.ttcn"/> + <FileResource projectRelativePath="TCCSecurity.cc" relativeURI="../../../Libraries/TCCUsefulFunctions_CNL113472/src/TCCSecurity.cc"/> + <FileResource projectRelativePath="TCCSecurity_Functions.ttcn" relativeURI="../../../Libraries/TCCUsefulFunctions_CNL113472/src/TCCSecurity_Functions.ttcn"/> + <FileResource projectRelativePath="TCCSystem.cc" relativeURI="../../../Libraries/TCCUsefulFunctions_CNL113472/src/TCCSystem.cc"/> + <FileResource projectRelativePath="TCCSystem_Functions.ttcn" relativeURI="../../../Libraries/TCCUsefulFunctions_CNL113472/src/TCCSystem_Functions.ttcn"/> + <FileResource projectRelativePath="TCCTemplate_Functions.ttcn" relativeURI="../../../Libraries/TCCUsefulFunctions_CNL113472/src/TCCTemplate_Functions.ttcn"/> + <FileResource projectRelativePath="TCCTitanMetadata.cc" relativeURI="../../../Libraries/TCCUsefulFunctions_CNL113472/src/TCCTitanMetadata.cc"/> + <FileResource projectRelativePath="TCCTitanMetadata_Functions.ttcn" relativeURI="../../../Libraries/TCCUsefulFunctions_CNL113472/src/TCCTitanMetadata_Functions.ttcn"/> + <FileResource projectRelativePath="TELNETasp_PT.cc" relativeURI="../../../TestPorts/TELNETasp_CNL113320/src/TELNETasp_PT.cc"/> + <FileResource projectRelativePath="TELNETasp_PT.hh" relativeURI="../../../TestPorts/TELNETasp_CNL113320/src/TELNETasp_PT.hh"/> + <FileResource projectRelativePath="TELNETasp_PortType.ttcn" relativeURI="../../../TestPorts/TELNETasp_CNL113320/src/TELNETasp_PortType.ttcn"/> + <FileResource projectRelativePath="UsefulTtcn3Types.ttcn" relativeURI="../../../ProtocolModules/XTDP_CNL113663/src/generated_files/UsefulTtcn3Types.ttcn"/> + <FileResource projectRelativePath="XSD.ttcn" relativeURI="../../../ProtocolModules/XTDP_CNL113663/src/generated_files/XSD.ttcn"/> + <FileResource projectRelativePath="XSD_ASN.asn" relativeURI="../../../ProtocolModules/XSDASN_CNL113474/src/XSD_ASN.asn"/> + <FileResource projectRelativePath="XTDP-EXER-EncDec.cc" relativeURI="../../../TestPorts/XTDPasp_CNL113494/src/XTDP-EXER-EncDec.cc"/> + <FileResource projectRelativePath="XTDP_EncDecFunctions.ttcn" relativeURI="../../../ProtocolModules/XTDP_CNL113663/src/XTDP_EncDecFunctions.ttcn"/> + <FileResource projectRelativePath="XTDP_Images.ttcn" relativeURI="../../../TestPorts/XTDPasp_CNL113494/src/XTDP_Images.ttcn"/> + <FileResource projectRelativePath="XTDP_PDU_Defs.asn" relativeURI="../../../TestPorts/XTDPasp_CNL113494/src/XTDP_PDU_Defs.asn"/> + <FileResource projectRelativePath="XTDPasp_PT.cc" relativeURI="../../../TestPorts/XTDPasp_CNL113494/src/XTDPasp_PT.cc"/> + <FileResource projectRelativePath="XTDPasp_PT.hh" relativeURI="../../../TestPorts/XTDPasp_CNL113494/src/XTDPasp_PT.hh"/> + <FileResource projectRelativePath="XTDPasp_PortType.ttcn" relativeURI="../../../TestPorts/XTDPasp_CNL113494/src/XTDPasp_PortType.ttcn"/> + <FileResource projectRelativePath="XTDPasp_Types.ttcn" relativeURI="../../../TestPorts/XTDPasp_CNL113494/src/XTDPasp_Types.ttcn"/> + <FileResource projectRelativePath="XUL_XTDL.asn" relativeURI="../../../TestPorts/XTDPasp_CNL113494/src/XUL_XTDL.asn"/> + <FileResource projectRelativePath="aka_algorythm_set.c" relativeURI="../../../Libraries/TCCUsefulFunctions_CNL113472/src/aka_algorythm_set.c"/> + <FileResource projectRelativePath="aka_algorythm_set.h" relativeURI="../../../Libraries/TCCUsefulFunctions_CNL113472/src/aka_algorythm_set.h"/> + <FileResource projectRelativePath="demo.xml" relativeURI="../src/common/demo.xml"/> + <FileResource projectRelativePath="demo_tab.xml" relativeURI="../src/common/demo_tab.xml"/> + <FileResource projectRelativePath="digcalc.c" relativeURI="../../../Libraries/TCCUsefulFunctions_CNL113472/src/digcalc.c"/> + <FileResource projectRelativePath="digcalc.h" relativeURI="../../../Libraries/TCCUsefulFunctions_CNL113472/src/digcalc.h"/> + <FileResource projectRelativePath="gui_empty_window.xml" relativeURI="../src/common/gui_empty_window.xml"/> + <FileResource projectRelativePath="gui_execctrl_buttons.xml" relativeURI="../src/common/gui_execctrl_buttons.xml"/> + <FileResource projectRelativePath="gui_execctrl_tabpanel.xml" relativeURI="../src/common/gui_execctrl_tabpanel.xml"/> + <FileResource projectRelativePath="gui_genapp_console_tabpanel.xml" relativeURI="../src/common/gui_genapp_console_tabpanel.xml"/> + <FileResource projectRelativePath="gui_genapp_hostadmin_tabpanel.xml" relativeURI="../src/common/gui_genapp_hostadmin_tabpanel.xml"/> + <FileResource projectRelativePath="gui_genapp_statistic_tabpanel.xml" relativeURI="../src/common/gui_genapp_statistic_tabpanel.xml"/> + <FileResource projectRelativePath="gui_genapp_tabs.xml" relativeURI="../src/common/gui_genapp_tabs.xml"/> + <FileResource projectRelativePath="gui_stathandler_tabpanel.xml" relativeURI="../src/common/gui_stathandler_tabpanel.xml"/> + <FileResource projectRelativePath="lex.xtdp.c" relativeURI="../../../TestPorts/XTDPasp_CNL113494/src/lex.xtdp.c"/> + <FileResource projectRelativePath="makefile_patch_ETM.sh" relativeURI="makefile_patch_ETM.sh"/> + <FileResource projectRelativePath="ttcn_ericsson_se_protocolModules_xtdp_xtdl.ttcn" relativeURI="../../../ProtocolModules/XTDP_CNL113663/src/generated_files/ttcn_ericsson_se_protocolModules_xtdp_xtdl.ttcn"/> + <FileResource projectRelativePath="ttcn_ericsson_se_protocolModules_xtdp_xtdp.ttcn" relativeURI="../../../ProtocolModules/XTDP_CNL113663/src/generated_files/ttcn_ericsson_se_protocolModules_xtdp_xtdp.ttcn"/> + <FileResource projectRelativePath="zuc.c" relativeURI="../../../Libraries/TCCUsefulFunctions_CNL113472/src/zuc.c"/> + <FileResource projectRelativePath="zuc.h" relativeURI="../../../Libraries/TCCUsefulFunctions_CNL113472/src/zuc.h"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>build/EPTF_GenApp_ETM</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <MakefileScript>makefile_patch_ETM.sh</MakefileScript> + <workingDirectory>build</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FileProperties> + <FileResource> + <FilePath>INAP_CS1plus_ANSIasp_Types.ttcn</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>SS7DUtils.cc</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>SS7DUtils.hh</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>Socket_Component.cc</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>Socket_Component.hh</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>TCAPasp_PT_Daemon_Interface.cc</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>TCAPasp_PT_Daemon_Interface.hh</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM_CAPv2.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM_CAPv2.tpd new file mode 100644 index 000000000..f6e79c365 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM_CAPv2.tpd @@ -0,0 +1,58 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_ETM_CAPv2</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_GenApp_INAP" projectLocationURI="../src/inap/EPTF_GenApp_INAP.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_MainModule.ttcnpp" relativeURI="../src/common/EPTF_GenApp_MainModule.ttcnpp"/> + <FileResource projectRelativePath="ETM_CAPv2_FSM_VPNtraffic.cfg" relativeURI="productconfigs/ETM/ETM_CAPv2_FSM_VPNtraffic.cfg"/> + <FileResource projectRelativePath="ETM_CAPv2_demo_VPNtraffic.cfg" relativeURI="productconfigs/ETM/ETM_CAPv2_demo_VPNtraffic.cfg"/> + <FileResource projectRelativePath="ETM_CIP_FSM_VPNtraffic.cfg" relativeURI="productconfigs/ETM/ETM_CIP_FSM_VPNtraffic.cfg"/> + <FileResource projectRelativePath="ETM_CIP_demo_VPNtraffic.cfg" relativeURI="productconfigs/ETM/ETM_CIP_demo_VPNtraffic.cfg"/> + <FileResource projectRelativePath="ETM_CLL_TestPorts.cfg" relativeURI="productconfigs/ETM/ETM_CLL_TestPorts.cfg"/> + <FileResource projectRelativePath="ETM_INAP_FSM.cfg" relativeURI="productconfigs/ETM/ETM_INAP_FSM.cfg"/> + <FileResource projectRelativePath="ETM_INAP_FSM_PGStraffic.cfg" relativeURI="productconfigs/ETM/ETM_INAP_FSM_PGStraffic.cfg"/> + <FileResource projectRelativePath="ETM_INAP_FSM_SNAtraffic.cfg" relativeURI="productconfigs/ETM/ETM_INAP_FSM_SNAtraffic.cfg"/> + <FileResource projectRelativePath="ETM_INAP_FSM_VPNtraffic.cfg" relativeURI="productconfigs/ETM/ETM_INAP_FSM_VPNtraffic.cfg"/> + <FileResource projectRelativePath="ETM_INAP_demo.cfg" relativeURI="productconfigs/ETM/ETM_INAP_demo.cfg"/> + <FileResource projectRelativePath="ETM_INAP_demo_PGStraffic.cfg" relativeURI="productconfigs/ETM/ETM_INAP_demo_PGStraffic.cfg"/> + <FileResource projectRelativePath="ETM_INAP_demo_SNAtraffic.cfg" relativeURI="productconfigs/ETM/ETM_INAP_demo_SNAtraffic.cfg"/> + <FileResource projectRelativePath="ETM_INAP_demo_VPNtraffic.cfg" relativeURI="productconfigs/ETM/ETM_INAP_demo_VPNtraffic.cfg"/> + <FileResource projectRelativePath="ETM_debug_settings.cfg" relativeURI="productconfigs/ETM/ETM_debug_settings.cfg"/> + <FileResource projectRelativePath="ETM_local_host.cfg" relativeURI="productconfigs/ETM/ETM_local_host.cfg"/> + <FileResource projectRelativePath="ETM_main_demo.cfg" relativeURI="productconfigs/ETM/ETM_main_demo.cfg"/> + <FileResource projectRelativePath="ETM_remote_node.cfg" relativeURI="productconfigs/ETM/ETM_remote_node.cfg"/> + <FileResource projectRelativePath="ETM_statistics_settings.cfg" relativeURI="productconfigs/ETM/ETM_statistics_settings.cfg"/> + <FileResource projectRelativePath="ETM_statistics_settings_PGStraffic.cf" relativeURI="productconfigs/ETM/ETM_statistics_settings_PGStraffic.cfg"/> + <FileResource projectRelativePath="ETM_statistics_settings_SNAtraffic.cfg" relativeURI="productconfigs/ETM/ETM_statistics_settings_SNAtraffic.cfg"/> + <FileResource projectRelativePath="ETM_statistics_settings_VPNtraffic.cfg" relativeURI="productconfigs/ETM/ETM_statistics_settings_VPNtraffic.cfg"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_GenApp_ETM_CAPv2</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>GENAPP_COMPILE_INAP</listItem> + </TTCN3preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM_CAPv3.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM_CAPv3.tpd new file mode 100644 index 000000000..a7f62d8a8 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM_CAPv3.tpd @@ -0,0 +1,67 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_ETM_CAPv3</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_GenApp_CAPv3" projectLocationURI="../src/cap/EPTF_GenApp_CAPv3.tpd"/> + <ReferencedProject name="EPTF_GenApp_CIP" projectLocationURI="../src/cip/EPTF_GenApp_CIP.tpd"/> + <ReferencedProject name="EPTF_GenApp_INAP" projectLocationURI="../src/inap/EPTF_GenApp_INAP.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_MainModule.ttcnpp" relativeURI="../src/common/EPTF_GenApp_MainModule.ttcnpp"/> + <FileResource projectRelativePath="ETM_CAPv3_FSM_VPNtraffic.cfg" relativeURI="productconfigs/ETM/ETM_CAPv3_FSM_VPNtraffic.cfg"/> + <FileResource projectRelativePath="ETM_CAPv3_demo_VPNtraffic.cfg" relativeURI="productconfigs/ETM/ETM_CAPv3_demo_VPNtraffic.cfg"/> + <FileResource projectRelativePath="ETM_CIP_FSM_VPNtraffic.cfg" relativeURI="productconfigs/ETM/ETM_CIP_FSM_VPNtraffic.cfg"/> + <FileResource projectRelativePath="ETM_CIP_demo_VPNtraffic.cfg" relativeURI="productconfigs/ETM/ETM_CIP_demo_VPNtraffic.cfg"/> + <FileResource projectRelativePath="ETM_CLL_TestPorts.cfg" relativeURI="productconfigs/ETM/ETM_CLL_TestPorts.cfg"/> + <FileResource projectRelativePath="ETM_INAP_FSM.cfg" relativeURI="productconfigs/ETM/ETM_INAP_FSM.cfg"/> + <FileResource projectRelativePath="ETM_INAP_FSM_MCCtraffic.cfg" relativeURI="productconfigs/ETM/ETM_INAP_FSM_MCCtraffic.cfg"/> + <FileResource projectRelativePath="ETM_INAP_FSM_PGStraffic.cfg" relativeURI="productconfigs/ETM/ETM_INAP_FSM_PGStraffic.cfg"/> + <FileResource projectRelativePath="ETM_INAP_FSM_SNAtraffic.cfg" relativeURI="productconfigs/ETM/ETM_INAP_FSM_SNAtraffic.cfg"/> + <FileResource projectRelativePath="ETM_INAP_FSM_SNAtraffic_assisting.cfg" relativeURI="productconfigs/ETM/ETM_INAP_FSM_SNAtraffic_assisting.cfg"/> + <FileResource projectRelativePath="ETM_INAP_FSM_VPNtraffic.cfg" relativeURI="productconfigs/ETM/ETM_INAP_FSM_VPNtraffic.cfg"/> + <FileResource projectRelativePath="ETM_INAP_demo.cfg" relativeURI="productconfigs/ETM/ETM_INAP_demo.cfg"/> + <FileResource projectRelativePath="ETM_INAP_demo_PGStraffic.cfg" relativeURI="productconfigs/ETM/ETM_INAP_demo_PGStraffic.cfg"/> + <FileResource projectRelativePath="ETM_INAP_demo_SNAtraffic.cfg" relativeURI="productconfigs/ETM/ETM_INAP_demo_SNAtraffic.cfg"/> + <FileResource projectRelativePath="ETM_INAP_demo_SNAtraffic_assisting.cfg" relativeURI="productconfigs/ETM/ETM_INAP_demo_SNAtraffic_assisting.cfg"/> + <FileResource projectRelativePath="ETM_INAP_demo_VPNtraffic.cfg" relativeURI="productconfigs/ETM/ETM_INAP_demo_VPNtraffic.cfg"/> + <FileResource projectRelativePath="ETM_debug_settings.cfg" relativeURI="productconfigs/ETM/ETM_debug_settings.cfg"/> + <FileResource projectRelativePath="ETM_local_host.cfg" relativeURI="productconfigs/ETM/ETM_local_host.cfg"/> + <FileResource projectRelativePath="ETM_main_demo.cfg" relativeURI="productconfigs/ETM/ETM_main_demo.cfg"/> + <FileResource projectRelativePath="ETM_remote_node.cfg" relativeURI="productconfigs/ETM/ETM_remote_node.cfg"/> + <FileResource projectRelativePath="ETM_statistics_settings.cfg" relativeURI="productconfigs/ETM/ETM_statistics_settings.cfg"/> + <FileResource projectRelativePath="ETM_statistics_settings_MCCtraffic.cfg" relativeURI="productconfigs/ETM/ETM_statistics_settings_MCCtraffic.cfg"/> + <FileResource projectRelativePath="ETM_statistics_settings_PGStraffic.cf" relativeURI="productconfigs/ETM/ETM_statistics_settings_PGStraffic.cfg"/> + <FileResource projectRelativePath="ETM_statistics_settings_SNAtraffic.cfg" relativeURI="productconfigs/ETM/ETM_statistics_settings_SNAtraffic.cfg"/> + <FileResource projectRelativePath="ETM_statistics_settings_SNAtraffic_assisting.cfg" relativeURI="productconfigs/ETM/ETM_statistics_settings_SNAtraffic_assisting.cfg"/> + <FileResource projectRelativePath="ETM_statistics_settings_VPNtraffic.cfg" relativeURI="productconfigs/ETM/ETM_statistics_settings_VPNtraffic.cfg"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_GenApp_ETM_CAPv3</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>GENAPP_COMPILE_INAP</listItem> + <listItem>GENAPP_COMPILE_CAPv3</listItem> + <listItem>GENAPP_COMPILE_CIP</listItem> + </TTCN3preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM_CAPv4.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM_CAPv4.tpd new file mode 100644 index 000000000..78475f908 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM_CAPv4.tpd @@ -0,0 +1,67 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_ETM_CAPv4</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_GenApp_CAPv4" projectLocationURI="../src/cap/EPTF_GenApp_CAPv4.tpd"/> + <ReferencedProject name="EPTF_GenApp_CIP" projectLocationURI="../src/cip/EPTF_GenApp_CIP.tpd"/> + <ReferencedProject name="EPTF_GenApp_INAP" projectLocationURI="../src/inap/EPTF_GenApp_INAP.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_MainModule.ttcnpp" relativeURI="../src/common/EPTF_GenApp_MainModule.ttcnpp"/> + <FileResource projectRelativePath="ETM_CAPv4_FSM_VPNtraffic.cfg" relativeURI="productconfigs/ETM/ETM_CAPv4_FSM_VPNtraffic.cfg"/> + <FileResource projectRelativePath="ETM_CAPv4_demo_VPNtraffic.cfg" relativeURI="productconfigs/ETM/ETM_CAP4_demo_VPNtraffic.cfg"/> + <FileResource projectRelativePath="ETM_CIP_FSM_VPNtraffic.cfg" relativeURI="productconfigs/ETM/ETM_CIP_FSM_VPNtraffic.cfg"/> + <FileResource projectRelativePath="ETM_CIP_demo_VPNtraffic.cfg" relativeURI="productconfigs/ETM/ETM_CIP_demo_VPNtraffic.cfg"/> + <FileResource projectRelativePath="ETM_CLL_TestPorts.cfg" relativeURI="productconfigs/ETM/ETM_CLL_TestPorts.cfg"/> + <FileResource projectRelativePath="ETM_INAP_FSM.cfg" relativeURI="productconfigs/ETM/ETM_INAP_FSM.cfg"/> + <FileResource projectRelativePath="ETM_INAP_FSM_MCCtraffic.cfg" relativeURI="productconfigs/ETM/ETM_INAP_FSM_MCCtraffic.cfg"/> + <FileResource projectRelativePath="ETM_INAP_FSM_PGStraffic.cfg" relativeURI="productconfigs/ETM/ETM_INAP_FSM_PGStraffic.cfg"/> + <FileResource projectRelativePath="ETM_INAP_FSM_SNAtraffic.cfg" relativeURI="productconfigs/ETM/ETM_INAP_FSM_SNAtraffic.cfg"/> + <FileResource projectRelativePath="ETM_INAP_FSM_SNAtraffic_assisting.cfg" relativeURI="productconfigs/ETM/ETM_INAP_FSM_SNAtraffic_assisting.cfg"/> + <FileResource projectRelativePath="ETM_INAP_FSM_VPNtraffic.cfg" relativeURI="productconfigs/ETM/ETM_INAP_FSM_VPNtraffic.cfg"/> + <FileResource projectRelativePath="ETM_INAP_demo.cfg" relativeURI="productconfigs/ETM/ETM_INAP_demo.cfg"/> + <FileResource projectRelativePath="ETM_INAP_demo_PGStraffic.cfg" relativeURI="productconfigs/ETM/ETM_INAP_demo_PGStraffic.cfg"/> + <FileResource projectRelativePath="ETM_INAP_demo_SNAtraffic.cfg" relativeURI="productconfigs/ETM/ETM_INAP_demo_SNAtraffic.cfg"/> + <FileResource projectRelativePath="ETM_INAP_demo_SNAtraffic_assisting.cfg" relativeURI="productconfigs/ETM/ETM_INAP_demo_SNAtraffic_assisting.cfg"/> + <FileResource projectRelativePath="ETM_INAP_demo_VPNtraffic.cfg" relativeURI="productconfigs/ETM/ETM_INAP_demo_VPNtraffic.cfg"/> + <FileResource projectRelativePath="ETM_debug_settings.cfg" relativeURI="productconfigs/ETM/ETM_debug_settings.cfg"/> + <FileResource projectRelativePath="ETM_local_host.cfg" relativeURI="productconfigs/ETM/ETM_local_host.cfg"/> + <FileResource projectRelativePath="ETM_main_demo.cfg" relativeURI="productconfigs/ETM/ETM_main_demo.cfg"/> + <FileResource projectRelativePath="ETM_remote_node.cfg" relativeURI="productconfigs/ETM/ETM_remote_node.cfg"/> + <FileResource projectRelativePath="ETM_statistics_settings.cfg" relativeURI="productconfigs/ETM/ETM_statistics_settings.cfg"/> + <FileResource projectRelativePath="ETM_statistics_settings_MCCtraffic.cfg" relativeURI="productconfigs/ETM/ETM_statistics_settings_MCCtraffic.cfg"/> + <FileResource projectRelativePath="ETM_statistics_settings_PGStraffic.cf" relativeURI="productconfigs/ETM/ETM_statistics_settings_PGStraffic.cfg"/> + <FileResource projectRelativePath="ETM_statistics_settings_SNAtraffic.cfg" relativeURI="productconfigs/ETM/ETM_statistics_settings_SNAtraffic.cfg"/> + <FileResource projectRelativePath="ETM_statistics_settings_SNAtraffic_assisting.cfg" relativeURI="productconfigs/ETM/ETM_statistics_settings_SNAtraffic_assisting.cfg"/> + <FileResource projectRelativePath="ETM_statistics_settings_VPNtraffic.cfg" relativeURI="productconfigs/ETM/ETM_statistics_settings_VPNtraffic.cfg"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_GenApp_ETM_CAPv4</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>GENAPP_COMPILE_INAP</listItem> + <listItem>GENAPP_COMPILE_CAPv4</listItem> + <listItem>GENAPP_COMPILE_CIP</listItem> + </TTCN3preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM_CAPv4_v760.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM_CAPv4_v760.tpd new file mode 100644 index 000000000..bd6d0cf4c --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM_CAPv4_v760.tpd @@ -0,0 +1,67 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_ETM_CAPv4_v760</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_GenApp_CAPv4" projectLocationURI="../src/cap/EPTF_GenApp_CAPv4.tpd"/> + <ReferencedProject name="EPTF_GenApp_CIP" projectLocationURI="../src/cip/EPTF_GenApp_CIP.tpd"/> + <ReferencedProject name="EPTF_GenApp_INAP" projectLocationURI="../src/inap/EPTF_GenApp_INAP.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_MainModule.ttcnpp" relativeURI="../src/common/EPTF_GenApp_MainModule.ttcnpp"/> + <FileResource projectRelativePath="ETM_CAPv4_FSM_VPNtraffic.cfg" relativeURI="productconfigs/ETM/ETM_CAPv4_FSM_VPNtraffic.cfg"/> + <FileResource projectRelativePath="ETM_CAPv4_demo_VPNtraffic.cfg" relativeURI="productconfigs/ETM/ETM_CAP4_demo_VPNtraffic.cfg"/> + <FileResource projectRelativePath="ETM_CIP_FSM_VPNtraffic.cfg" relativeURI="productconfigs/ETM/ETM_CIP_FSM_VPNtraffic.cfg"/> + <FileResource projectRelativePath="ETM_CIP_demo_VPNtraffic.cfg" relativeURI="productconfigs/ETM/ETM_CIP_demo_VPNtraffic.cfg"/> + <FileResource projectRelativePath="ETM_CLL_TestPorts.cfg" relativeURI="productconfigs/ETM/ETM_CLL_TestPorts.cfg"/> + <FileResource projectRelativePath="ETM_INAP_FSM.cfg" relativeURI="productconfigs/ETM/ETM_INAP_FSM.cfg"/> + <FileResource projectRelativePath="ETM_INAP_FSM_MCCtraffic.cfg" relativeURI="productconfigs/ETM/ETM_INAP_FSM_MCCtraffic.cfg"/> + <FileResource projectRelativePath="ETM_INAP_FSM_PGStraffic.cfg" relativeURI="productconfigs/ETM/ETM_INAP_FSM_PGStraffic.cfg"/> + <FileResource projectRelativePath="ETM_INAP_FSM_SNAtraffic.cfg" relativeURI="productconfigs/ETM/ETM_INAP_FSM_SNAtraffic.cfg"/> + <FileResource projectRelativePath="ETM_INAP_FSM_SNAtraffic_assisting.cfg" relativeURI="productconfigs/ETM/ETM_INAP_FSM_SNAtraffic_assisting.cfg"/> + <FileResource projectRelativePath="ETM_INAP_FSM_VPNtraffic.cfg" relativeURI="productconfigs/ETM/ETM_INAP_FSM_VPNtraffic.cfg"/> + <FileResource projectRelativePath="ETM_INAP_demo.cfg" relativeURI="productconfigs/ETM/ETM_INAP_demo.cfg"/> + <FileResource projectRelativePath="ETM_INAP_demo_PGStraffic.cfg" relativeURI="productconfigs/ETM/ETM_INAP_demo_PGStraffic.cfg"/> + <FileResource projectRelativePath="ETM_INAP_demo_SNAtraffic.cfg" relativeURI="productconfigs/ETM/ETM_INAP_demo_SNAtraffic.cfg"/> + <FileResource projectRelativePath="ETM_INAP_demo_SNAtraffic_assisting.cfg" relativeURI="productconfigs/ETM/ETM_INAP_demo_SNAtraffic_assisting.cfg"/> + <FileResource projectRelativePath="ETM_INAP_demo_VPNtraffic.cfg" relativeURI="productconfigs/ETM/ETM_INAP_demo_VPNtraffic.cfg"/> + <FileResource projectRelativePath="ETM_debug_settings.cfg" relativeURI="productconfigs/ETM/ETM_debug_settings.cfg"/> + <FileResource projectRelativePath="ETM_local_host.cfg" relativeURI="productconfigs/ETM/ETM_local_host.cfg"/> + <FileResource projectRelativePath="ETM_main_demo.cfg" relativeURI="productconfigs/ETM/ETM_main_demo.cfg"/> + <FileResource projectRelativePath="ETM_remote_node.cfg" relativeURI="productconfigs/ETM/ETM_remote_node.cfg"/> + <FileResource projectRelativePath="ETM_statistics_settings.cfg" relativeURI="productconfigs/ETM/ETM_statistics_settings.cfg"/> + <FileResource projectRelativePath="ETM_statistics_settings_MCCtraffic.cfg" relativeURI="productconfigs/ETM/ETM_statistics_settings_MCCtraffic.cfg"/> + <FileResource projectRelativePath="ETM_statistics_settings_PGStraffic.cf" relativeURI="productconfigs/ETM/ETM_statistics_settings_PGStraffic.cfg"/> + <FileResource projectRelativePath="ETM_statistics_settings_SNAtraffic.cfg" relativeURI="productconfigs/ETM/ETM_statistics_settings_SNAtraffic.cfg"/> + <FileResource projectRelativePath="ETM_statistics_settings_SNAtraffic_assisting.cfg" relativeURI="productconfigs/ETM/ETM_statistics_settings_SNAtraffic_assisting.cfg"/> + <FileResource projectRelativePath="ETM_statistics_settings_VPNtraffic.cfg" relativeURI="productconfigs/ETM/ETM_statistics_settings_VPNtraffic.cfg"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_GenApp_ETM_CAPv4_v760</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>GENAPP_COMPILE_INAP</listItem> + <listItem>GENAPP_COMPILE_CAPv4</listItem> + <listItem>GENAPP_COMPILE_CIP</listItem> + </TTCN3preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM_CCA.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM_CCA.tpd new file mode 100644 index 000000000..c219a1446 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM_CCA.tpd @@ -0,0 +1,55 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_ETM_CCA</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_GenApp_CAPv2" projectLocationURI="../src/cap/EPTF_GenApp_CAPv2.tpd"/> + <ReferencedProject name="EPTF_GenApp_CAPv4" projectLocationURI="../src/cap/EPTF_GenApp_CAPv4.tpd"/> + <ReferencedProject name="EPTF_GenApp_INAP" projectLocationURI="../src/inap/EPTF_GenApp_INAP.tpd"/> + <ReferencedProject name="EPTF_GenApp_MAP" projectLocationURI="../src/map/EPTF_GenApp_MAP.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_MainModule.ttcnpp" relativeURI="../src/common/EPTF_GenApp_MainModule.ttcnpp"/> + <FileResource projectRelativePath="ETM_CAPv2_FSM_CCA.cfg" relativeURI="productconfigs/ETM/ETM_CAPv2_FSM_CCA.cfg"/> + <FileResource projectRelativePath="ETM_CAPv2_demo_CCA.cfg" relativeURI="productconfigs/ETM/ETM_CAPv2_demo_CCA.cfg"/> + <FileResource projectRelativePath="ETM_CLL_TestPorts.cfg" relativeURI="productconfigs/ETM/ETM_CLL_TestPorts.cfg"/> + <FileResource projectRelativePath="ETM_INAP_FSM_CCA.cfg" relativeURI="productconfigs/ETM/ETM_INAP_FSM_CCA.cfg"/> + <FileResource projectRelativePath="ETM_INAP_demo_CCA.cfg" relativeURI="productconfigs/ETM/ETM_INAP_demo_CCA.cfg"/> + <FileResource projectRelativePath="ETM_MAP_FSM_CCA.cfg" relativeURI="productconfigs/ETM/ETM_MAP_FSM_CCA.cfg"/> + <FileResource projectRelativePath="ETM_MAP_demo_CCA.cfg" relativeURI="productconfigs/ETM/ETM_MAP_demo_CCA.cfg"/> + <FileResource projectRelativePath="ETM_debug_settings.cfg" relativeURI="productconfigs/ETM/ETM_debug_settings.cfg"/> + <FileResource projectRelativePath="ETM_local_host.cfg" relativeURI="productconfigs/ETM/ETM_local_host.cfg"/> + <FileResource projectRelativePath="ETM_main_demo_CCA.cfg" relativeURI="productconfigs/ETM/ETM_main_demo_CCA.cfg"/> + <FileResource projectRelativePath="ETM_remote_node.cfg" relativeURI="productconfigs/ETM/ETM_remote_node.cfg"/> + <FileResource projectRelativePath="ETM_statistics_settings_CCA.cfg" relativeURI="productconfigs/ETM/ETM_statistics_settings_CCA.cfg"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_GenApp_ETM_CCA</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>GENAPP_COMPILE_CAPv2</listItem> + <listItem>GENAPP_COMPILE_CAPv4</listItem> + <listItem>GENAPP_COMPILE_MAP</listItem> + <listItem>GENAPP_COMPILE_INAP</listItem> + </TTCN3preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM_CSCF.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM_CSCF.tpd new file mode 100644 index 000000000..a57de8724 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM_CSCF.tpd @@ -0,0 +1,44 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_ETM_CSCF</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_GenApp_SIP" projectLocationURI="../src/sip/EPTF_GenApp_SIP.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_MainModule.ttcnpp" relativeURI="../src/common/EPTF_GenApp_MainModule.ttcnpp"/> + <FileResource projectRelativePath="ETM_main_demo_CSCF.cfg" relativeURI="productconfigs/ETM/ETM_main_demo_CSCF.cfg"/> + <FileResource projectRelativePath="ETM_CLL_TestPorts.cfg" relativeURI="productconfigs/ETM/ETM_CLL_TestPorts.cfg"/> + <FileResource projectRelativePath="ETM_SIP_FSM.cfg" relativeURI="productconfigs/ETM/ETM_SIP_FSM.cfg"/> + <FileResource projectRelativePath="ETM_SIP_demo.cfg" relativeURI="productconfigs/ETM/ETM_SIP_demo.cfg"/> + <FileResource projectRelativePath="ETM_debug_settings.cfg" relativeURI="productconfigs/ETM/ETM_debug_settings.cfg"/> + <FileResource projectRelativePath="ETM_local_host.cfg" relativeURI="productconfigs/ETM/ETM_local_host.cfg"/> + <FileResource projectRelativePath="ETM_statistics_settings_CSCF.cfg" relativeURI="productconfigs/ETM/ETM_statistics_settings_CSCF.cfg"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_GenApp_ETM_CSCF</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>GENAPP_COMPILE_SIP</listItem> + </TTCN3preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM_DCC.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM_DCC.tpd new file mode 100644 index 000000000..ca3ab609d --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM_DCC.tpd @@ -0,0 +1,47 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_ETM_DCC</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_GenApp_DIAMETER" projectLocationURI="../src/diameter/EPTF_GenApp_DIAMETER.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_MainModule.ttcnpp" relativeURI="../src/common/EPTF_GenApp_MainModule.ttcnpp"/> + <FileResource projectRelativePath="ETM_DCC_main_demo.cfg" relativeURI="productconfigs/ETM/ETM_DCC_main_demo.cfg"/> + <FileResource projectRelativePath="ETM_DCC_FSM.cfg" relativeURI="productconfigs/ETM/ETM_DCC_FSM.cfg"/> + <FileResource projectRelativePath="ETM_DCC_demo.cfg" relativeURI="productconfigs/ETM/ETM_DCC_demo.cfg"/> + <FileResource projectRelativePath="ETM_local_host.cfg" relativeURI="productconfigs/ETM/ETM_local_host.cfg"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_GenApp_DCC</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>GENAPP_COMPILE_DIAMETER</listItem> + <listItem>ENABLE_SCTP</listItem> + <listItem>USE_SCTP</listItem> + </TTCN3preprocessorDefines> + <preprocessorDefines> + <listItem>ENABLE_SCTP</listItem> + <listItem>USE_SCTP</listItem> + </preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM_ECC.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM_ECC.tpd new file mode 100644 index 000000000..142330edb --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM_ECC.tpd @@ -0,0 +1,49 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_ETM_ECC</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_GenApp_INAP" projectLocationURI="../src/inap/EPTF_GenApp_INAP.tpd"/> + <ReferencedProject name="EPTF_GenApp_MAP" projectLocationURI="../src/map/EPTF_GenApp_MAP.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_MainModule.ttcnpp" relativeURI="../src/common/EPTF_GenApp_MainModule.ttcnpp"/> + <FileResource projectRelativePath="ETM_main_demo_ECC.cfg" relativeURI="productconfigs/ETM/ETM_main_demo_ECC.cfg"/> + <FileResource projectRelativePath="ETM_CLL_TestPorts.cfg" relativeURI="productconfigs/ETM/ETM_CLL_TestPorts.cfg"/> + <FileResource projectRelativePath="ETM_ECC_EMAP_FSM.cfg" relativeURI="productconfigs/ETM/ETM_ECC_EMAP_FSM.cfg"/> + <FileResource projectRelativePath="ETM_ECC_EMAP_demo.cfg" relativeURI="productconfigs/ETM/ETM_ECC_EMAP_demo.cfg"/> + <FileResource projectRelativePath="ETM_INAP_FSM_ECCtraffic.cfg" relativeURI="productconfigs/ETM/ETM_INAP_FSM_ECCtraffic.cfg"/> + <FileResource projectRelativePath="ETM_INAP_demo_ECCtraffic.cfg" relativeURI="productconfigs/ETM/ETM_INAP_demo_ECCtraffic.cfg"/> + <FileResource projectRelativePath="ETM_debug_settings.cfg" relativeURI="productconfigs/ETM/ETM_debug_settings.cfg"/> + <FileResource projectRelativePath="ETM_local_host.cfg" relativeURI="productconfigs/ETM/ETM_local_host.cfg"/> + <FileResource projectRelativePath="ETM_remote_node.cfg" relativeURI="productconfigs/ETM/ETM_remote_node.cfg"/> + <FileResource projectRelativePath="ETM_statistics_settings_ECCtraffic.cfg" relativeURI="productconfigs/ETM/ETM_statistics_settings_ECCtraffic.cfg"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_GenApp_ETM_ECC</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>GENAPP_COMPILE_INAP</listItem> + <listItem>GENAPP_COMPILE_MAP</listItem> + </TTCN3preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM_HomeZone.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM_HomeZone.tpd new file mode 100644 index 000000000..eb46760f7 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM_HomeZone.tpd @@ -0,0 +1,47 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_ETM_HomeZone</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_GenApp_CAPv2" projectLocationURI="../src/cap/EPTF_GenApp_CAPv2.tpd"/> + <ReferencedProject name="EPTF_GenApp_INAP" projectLocationURI="../src/inap/EPTF_GenApp_INAP.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_MainModule.ttcnpp" relativeURI="../src/common/EPTF_GenApp_MainModule.ttcnpp"/> + <FileResource projectRelativePath="ETM_CLL_TestPorts.cfg" relativeURI="productconfigs/ETM/ETM_CLL_TestPorts.cfg"/> + <FileResource projectRelativePath="ETM_HomeZone_FSM.cfg" relativeURI="productconfigs/ETM/ETM_HomeZone_FSM.cfg"/> + <FileResource projectRelativePath="ETM_HomeZone_demo.cfg" relativeURI="productconfigs/ETM/ETM_HomeZone_demo.cfg"/> + <FileResource projectRelativePath="ETM_HomeZone_main_demo.cfg" relativeURI="productconfigs/ETM/ETM_HomeZone_main_demo.cfg"/> + <FileResource projectRelativePath="ETM_debug_settings.cfg" relativeURI="productconfigs/ETM/ETM_debug_settings.cfg"/> + <FileResource projectRelativePath="ETM_local_host.cfg" relativeURI="productconfigs/ETM/ETM_local_host.cfg"/> + <FileResource projectRelativePath="ETM_main_demo.cfg" relativeURI="productconfigs/ETM/ETM_main_demo.cfg"/> + <FileResource projectRelativePath="ETM_remote_node.cfg" relativeURI="productconfigs/ETM/ETM_remote_node.cfg"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_GenApp_ETM_HomeZone</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>GENAPP_COMPILE_COMBINED_CAPv2</listItem> + <listItem>GENAPP_COMPILE_COMBINED_INAP</listItem> + </TTCN3preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM_LTE_INAP.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM_LTE_INAP.tpd new file mode 100644 index 000000000..ae71997d7 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM_LTE_INAP.tpd @@ -0,0 +1,55 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_ETM_LTE_INAP</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_GenApp_CIP" projectLocationURI="../src/cip/EPTF_GenApp_CIP.tpd"/> + <ReferencedProject name="EPTF_GenApp_INAP" projectLocationURI="../src/inap/EPTF_GenApp_INAP.tpd"/> + <ReferencedProject name="EPTF_GenApp_MAP" projectLocationURI="../src/map/EPTF_GenApp_MAP.tpd"/> + <ReferencedProject name="EPTF_GenApp_USSD" projectLocationURI="../src/http/EPTF_GenApp_USSD.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_MainModule.ttcnpp" relativeURI="../src/common/EPTF_GenApp_MainModule.ttcnpp"/> + <FileResource projectRelativePath="ETM_CLL_TestPorts.cfg" relativeURI="productconfigs/ETM/ETM_CLL_TestPorts.cfg"/> + <FileResource projectRelativePath="ETM_LTE_INAP_FSM_PnCtraffic.cfg" relativeURI="productconfigs/ETM/ETM_LTE_INAP_FSM_PnCtraffic.cfg"/> + <FileResource projectRelativePath="ETM_LTE_INAP_demo_PnCtraffic.cfg" relativeURI="productconfigs/ETM/ETM_LTE_INAP_demo_PnCtraffic.cfg"/> + <FileResource projectRelativePath="ETM_LTE_INAP_main_demo.cfg" relativeURI="productconfigs/ETM/ETM_LTE_INAP_main_demo.cfg"/> + <FileResource projectRelativePath="ETM_MCC_CIP_FSM.cfg" relativeURI="productconfigs/ETM/ETM_MCC_CIP_FSM.cfg"/> + <FileResource projectRelativePath="ETM_MCC_CIP_demo.cfg" relativeURI="productconfigs/ETM/ETM_MCC_CIP_demo.cfg"/> + <FileResource projectRelativePath="ETM_MCC_USSD_FSM.cfg" relativeURI="productconfigs/ETM/ETM_MCC_USSD_FSM.cfg"/> + <FileResource projectRelativePath="ETM_MCC_USSD_demo.cfg" relativeURI="productconfigs/ETM/ETM_MCC_USSD_demo.cfg"/> + <FileResource projectRelativePath="ETM_debug_settings.cfg" relativeURI="productconfigs/ETM/ETM_debug_settings.cfg"/> + <FileResource projectRelativePath="ETM_local_host.cfg" relativeURI="productconfigs/ETM/ETM_local_host.cfg"/> + <FileResource projectRelativePath="ETM_remote_node.cfg" relativeURI="productconfigs/ETM/ETM_remote_node.cfg"/> + <FileResource projectRelativePath="ETM_statistics_settings.cfg" relativeURI="productconfigs/ETM/ETM_statistics_settings.cfg"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>../EPTF_GenApp_ETM_LTE/bin/EPTF_GenApp_ETM_LTE</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>GENAPP_COMPILE_INAP</listItem> + <listItem>GENAPP_COMPILE_CIP</listItem> + <listItem>GENAPP_COMPILE_MAP</listItem> + <listItem>GENAPP_COMPILE_USSD</listItem> + </TTCN3preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM_MCC.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM_MCC.tpd new file mode 100644 index 000000000..08bd6a217 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM_MCC.tpd @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_ETM_MCC</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_GenApp_CIP" projectLocationURI="../src/cip/EPTF_GenApp_CIP.tpd"/> + <ReferencedProject name="EPTF_GenApp_INAP" projectLocationURI="../src/inap/EPTF_GenApp_INAP.tpd"/> + <ReferencedProject name="EPTF_GenApp_MAP" projectLocationURI="../src/map/EPTF_GenApp_MAP.tpd"/> + <ReferencedProject name="EPTF_GenApp_USSD" projectLocationURI="../src/http/EPTF_GenApp_USSD.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_MainModule.ttcnpp" relativeURI="../src/common/EPTF_GenApp_MainModule.ttcnpp"/> + <FileResource projectRelativePath="ETM_main_demo_MCC.cfg" relativeURI="productconfigs/ETM/ETM_main_demo_MCC.cfg"/> + <FileResource projectRelativePath="ETM_CLL_TestPorts.cfg" relativeURI="productconfigs/ETM/ETM_CLL_TestPorts.cfg"/> + <FileResource projectRelativePath="ETM_INAP_FSM_MCCtraffic.cfg" relativeURI="productconfigs/ETM/ETM_INAP_FSM_MCCtraffic.cfg"/> + <FileResource projectRelativePath="ETM_INAP_demo_MCCtraffic.cfg" relativeURI="productconfigs/ETM/ETM_INAP_demo_MCCtraffic.cfg"/> + <FileResource projectRelativePath="ETM_MCC_CIP_FSM.cfg" relativeURI="productconfigs/ETM/ETM_MCC_CIP_FSM.cfg"/> + <FileResource projectRelativePath="ETM_MCC_CIP_demo.cfg" relativeURI="productconfigs/ETM/ETM_MCC_CIP_demo.cfg"/> + <FileResource projectRelativePath="ETM_MCC_MAP_FSM.cfg" relativeURI="productconfigs/ETM/ETM_MCC_MAP_FSM.cfg"/> + <FileResource projectRelativePath="ETM_MCC_MAP_demo.cfg" relativeURI="productconfigs/ETM/ETM_MCC_MAP_demo.cfg"/> + <FileResource projectRelativePath="ETM_MCC_USSD_FSM.cfg" relativeURI="productconfigs/ETM/ETM_MCC_USSD_FSM.cfg"/> + <FileResource projectRelativePath="ETM_MCC_USSD_demo.cfg" relativeURI="productconfigs/ETM/ETM_MCC_USSD_demo.cfg"/> + <FileResource projectRelativePath="ETM_debug_settings.cfg" relativeURI="productconfigs/ETM/ETM_debug_settings.cfg"/> + <FileResource projectRelativePath="ETM_local_host.cfg" relativeURI="productconfigs/ETM/ETM_local_host.cfg"/> + <FileResource projectRelativePath="ETM_remote_node.cfg" relativeURI="productconfigs/ETM/ETM_remote_node.cfg"/> + <FileResource projectRelativePath="ETM_statistics_settings_MCCtraffic.cfg" relativeURI="productconfigs/ETM/ETM_statistics_settings_MCCtraffic.cfg"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_GenApp_ETM_MCC</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>GENAPP_COMPILE_INAP</listItem> + <listItem>GENAPP_COMPILE_CIP</listItem> + <listItem>GENAPP_COMPILE_MAP</listItem> + <listItem>GENAPP_COMPILE_USSD</listItem> + </TTCN3preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM_NP.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM_NP.tpd new file mode 100644 index 000000000..32e284634 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM_NP.tpd @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_ETM_NP</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_GenApp_MAP" projectLocationURI="../src/map/EPTF_GenApp_MAP.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_MainModule.ttcnpp" relativeURI="../src/common/EPTF_GenApp_MainModule.ttcnpp"/> + <FileResource projectRelativePath="ETM_main_demo_NP.cfg" relativeURI="productconfigs/ETM/ETM_main_demo_NP.cfg"/> + <FileResource projectRelativePath="ETM_CLL_TestPorts.cfg" relativeURI="productconfigs/ETM/ETM_CLL_TestPorts.cfg"/> + <FileResource projectRelativePath="ETM_MAP_FSM_NP.cfg" relativeURI="productconfigs/ETM/ETM_MAP_FSM_NP.cfg"/> + <FileResource projectRelativePath="ETM_MAP_demo_NP.cfg" relativeURI="productconfigs/ETM/ETM_MAP_demo_NP.cfg"/> + <FileResource projectRelativePath="ETM_debug_settings.cfg" relativeURI="productconfigs/ETM/ETM_debug_settings.cfg"/> + <FileResource projectRelativePath="ETM_local_host.cfg" relativeURI="productconfigs/ETM/ETM_local_host.cfg"/> + <FileResource projectRelativePath="ETM_remote_node.cfg" relativeURI="productconfigs/ETM/ETM_remote_node.cfg"/> + <FileResource projectRelativePath="ETM_statistics_settings.cfg" relativeURI="productconfigs/ETM/ETM_statistics_settings.cfg"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_GenApp_ETM_NP</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>GENAPP_COMPILE_MAP</listItem> + </TTCN3preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM_NP21.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM_NP21.tpd new file mode 100644 index 000000000..391c659dd --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM_NP21.tpd @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_ETM_NP21</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_GenApp_INAP" projectLocationURI="../src/inap/EPTF_GenApp_INAP.tpd"/> + <ReferencedProject name="EPTF_GenApp_MAP" projectLocationURI="../src/map/EPTF_GenApp_MAP.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_MainModule.ttcnpp" relativeURI="../src/common/EPTF_GenApp_MainModule.ttcnpp"/> + <FileResource projectRelativePath="ETM_main_demo_NP21.cfg" relativeURI="productconfigs/ETM/ETM_main_demo_NP21.cfg"/> + <FileResource projectRelativePath="ETM_CLL_TestPorts.cfg" relativeURI="productconfigs/ETM/ETM_CLL_TestPorts.cfg"/> + <FileResource projectRelativePath="ETM_INAP_LNP_ST_ExtendedTablesFSM.cfg" relativeURI="productconfigs/ETM/ETM_INAP_LNP_ST_ExtendedTablesFSM.cfg"/> + <FileResource projectRelativePath="ETM_INAP_LNP_ST_ExtendedTablesFSM_noNegativeScenario.cfg" relativeURI="productconfigs/ETM/ETM_INAP_LNP_ST_ExtendedTablesFSM_noNegativeScenario.cfg"/> + <FileResource projectRelativePath="ETM_INAP_demo_LNP_ST.cfg" relativeURI="productconfigs/ETM/ETM_INAP_demo_LNP_ST.cfg"/> + <FileResource projectRelativePath="ETM_INAP_demo_LNP_ST_noNegativeScenario.cfg" relativeURI="productconfigs/ETM/ETM_INAP_demo_LNP_ST_noNegativeScenario.cfg"/> + <FileResource projectRelativePath="ETM_MAP_FSM_NP.cfg" relativeURI="productconfigs/ETM/ETM_MAP_FSM_NP.cfg"/> + <FileResource projectRelativePath="ETM_MAP_demo_NP.cfg" relativeURI="productconfigs/ETM/ETM_MAP_demo_NP.cfg"/> + <FileResource projectRelativePath="ETM_debug_settings.cfg" relativeURI="productconfigs/ETM/ETM_debug_settings.cfg"/> + <FileResource projectRelativePath="ETM_local_host.cfg" relativeURI="productconfigs/ETM/ETM_local_host.cfg"/> + <FileResource projectRelativePath="ETM_remote_node.cfg" relativeURI="productconfigs/ETM/ETM_remote_node.cfg"/> + <FileResource projectRelativePath="ETM_statistics_settings.cfg" relativeURI="productconfigs/ETM/ETM_statistics_settings.cfg"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_GenApp_ETM_NP21</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>GENAPP_COMPILE_MAP</listItem> + <listItem>GENAPP_COMPILE_INAP</listItem> + </TTCN3preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM_SNA.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM_SNA.tpd new file mode 100644 index 000000000..a2ad3b82c --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM_SNA.tpd @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_ETM_SNA</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_GenApp_SNA" projectLocationURI="../src/http/SNA/EPTF_GenApp_SNA.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_MainModule.ttcnpp" relativeURI="../src/common/EPTF_GenApp_MainModule.ttcnpp"/> + <FileResource projectRelativePath="ETM_SNA_main_demo.cfg" relativeURI="productconfigs/ETM/ETM_SNA_main_demo.cfg"/> + <FileResource projectRelativePath="ETM_SNA_FSM.cfg" relativeURI="productconfigs/ETM/ETM_SNA_FSM.cfg"/> + <FileResource projectRelativePath="ETM_SNA_demo.cfg" relativeURI="productconfigs/ETM/ETM_SNA_demo.cfg"/> + <FileResource projectRelativePath="ETM_local_host.cfg" relativeURI="productconfigs/ETM/ETM_local_host.cfg"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_GenApp_ETM_SNA</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>GENAPP_COMPILE_SNA</listItem> + </TTCN3preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM_SNA2.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM_SNA2.tpd new file mode 100644 index 000000000..c97237403 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ETM_SNA2.tpd @@ -0,0 +1,48 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_ETM_SNA2</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_GenApp_HTTP" projectLocationURI="../src/http/EPTF_GenApp_HTTP.tpd"/> + <ReferencedProject name="EPTF_GenApp_SIP" projectLocationURI="../src/sip/EPTF_GenApp_SIP.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_MainModule.ttcnpp" relativeURI="../src/common/EPTF_GenApp_MainModule.ttcnpp"/> + <FileResource projectRelativePath="ETM_SNA2_main_demo.cfg" relativeURI="productconfigs/ETM/ETM_SNA2_main_demo.cfg"/> + <FileResource projectRelativePath="ETM_SNA2_HTTP_FSM.cfg" relativeURI="productconfigs/ETM/ETM_SNA2_HTTP_FSM.cfg"/> + <FileResource projectRelativePath="ETM_SNA2_HTTP_demo.cfg" relativeURI="productconfigs/ETM/ETM_SNA2_HTTP_demo.cfg"/> + <FileResource projectRelativePath="ETM_SNA2_SIP_FSM.cfg" relativeURI="productconfigs/ETM/ETM_SNA2_SIP_FSM.cfg"/> + <FileResource projectRelativePath="ETM_SNA2_SIP_demo.cfg" relativeURI="productconfigs/ETM/ETM_SNA2_SIP_demo.cfg"/> + <FileResource projectRelativePath="ETM_debug_settings.cfg" relativeURI="productconfigs/ETM/ETM_debug_settings.cfg"/> + <FileResource projectRelativePath="ETM_local_host.cfg" relativeURI="productconfigs/ETM/ETM_local_host.cfg"/> + <FileResource projectRelativePath="ETM_remote_node.cfg" relativeURI="productconfigs/ETM/ETM_remote_node.cfg"/> + <FileResource projectRelativePath="ETM_statistics_SNA2.cfg" relativeURI="productconfigs/ETM/ETM_statistics_SNA2.cfg"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_GenApp_ETM_SNA2</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>GENAPP_COMPILE_COMBINED_SIP</listItem> + <listItem>GENAPP_COMPILE_COMBINED_HTTP</listItem> + </TTCN3preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_H248.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_H248.tpd new file mode 100644 index 000000000..8d68002e9 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_H248.tpd @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_H248</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_Applib_H248_CNL113523" projectLocationURI="../../../../Libraries/EPTF_Applib_H248_CNL113523/EPTF_Applib_H248_CNL113523.tpd"/> + <ReferencedProject name="EPTF_GenApp_Common" projectLocationURI="../common/EPTF_GenApp_Common.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_H248_LGen_Definitions.ttcn" relativeURI="EPTF_GenApp_H248_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_GenApp_H248_LGen_Functions.ttcnpp" relativeURI="EPTF_GenApp_H248_LGen_Functions.ttcnpp"/> + <FileResource projectRelativePath="EPTF_GenApp_H248_Mapping_Definitions.ttcn" relativeURI="EPTF_GenApp_H248_Mapping_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_GenApp_H248_Mapping_Functions.ttcnpp" relativeURI="EPTF_GenApp_H248_Mapping_Functions.ttcnpp"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>build/EPTF_GenApp_H248</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>GENAPP_COMPILE_H248</listItem> + </TTCN3preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>build</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_HLR.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_HLR.tpd new file mode 100644 index 000000000..991cd79fb --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_HLR.tpd @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_HLR</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_GenApp_MAP" projectLocationURI="../src/map/EPTF_GenApp_MAP.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_MainModule.ttcnpp" relativeURI="../src/common/EPTF_GenApp_MainModule.ttcnpp"/> + <FileResource projectRelativePath="HLR_Main.cfg" relativeURI="productconfigs/HLR/HLR_Main.cfg"/> + <FileResource projectRelativePath="HLR_debug_settings.cfg" relativeURI="productconfigs/HLR/HLR_debug_settings.cfg"/> + <FileResource projectRelativePath="HLR_local_host.cfg" relativeURI="productconfigs/HLR/HLR_local_host.cfg"/> + <FileResource projectRelativePath="HLR_MAP_FSM.cfg" relativeURI="productconfigs/HLR/HLR_MAP_FSM.cfg"/> + <FileResource projectRelativePath="HLR_MAP_Settings.cfg" relativeURI="productconfigs/HLR/HLR_MAP_Settings.cfg"/> + <FileResource projectRelativePath="HLR_MAP_TestPorts.cfg" relativeURI="productconfigs/HLR/HLR_MAP_TestPorts.cfg"/> + <FileResource projectRelativePath="HLR_remote_node.cfg" relativeURI="productconfigs/HLR/HLR_remote_node.cfg"/> + <FileResource projectRelativePath="HLR_statistics_settings.cfg" relativeURI="productconfigs/HLR/HLR_statistics_settings.cfg"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_GenApp_HLR</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>GENAPP_COMPILE_MAP</listItem> + </TTCN3preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_HLRsim.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_HLRsim.tpd new file mode 100644 index 000000000..cee59bca3 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_HLRsim.tpd @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_HLRsim</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_GenApp_MAP" projectLocationURI="../src/map/EPTF_GenApp_MAP.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_MainModule.ttcnpp" relativeURI="../src/common/EPTF_GenApp_MainModule.ttcnpp"/> + <FileResource projectRelativePath="HLRsim_main.cfg" relativeURI="productconfigs/HLRsim/HLRsim_main.cfg"/> + <FileResource projectRelativePath="HLRsim_FSM.cfg" relativeURI="productconfigs/HLRsim/HLRsim_FSM.cfg"/> + <FileResource projectRelativePath="HLRsim_local_host.cfg" relativeURI="productconfigs/HLRsim/HLRsim_local_host.cfg"/> + <FileResource projectRelativePath="HLRsim_settings.cfg" relativeURI="productconfigs/HLRsim/HLRsim_settings.cfg"/> + <FileResource projectRelativePath="HLRsim_settings_imstools.cfg" relativeURI="productconfigs/HLRsim/HLRsim_settings_imstools.cfg"/> + <FileResource projectRelativePath="HLRsim_statistics_settings.cfg" relativeURI="productconfigs/HLRsim/HLRsim_statistics_settings.cfg"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_GenApp_HLRsim</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>GENAPP_COMPILE_MAP</listItem> + </TTCN3preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_HTTP.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_HTTP.tpd new file mode 100644 index 000000000..d36fec9b4 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_HTTP.tpd @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_HTTP_TopLevel</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_GenApp_HTTP" projectLocationURI="../src/http/EPTF_GenApp_HTTP.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_MainModule.ttcnpp" relativeURI="../src/common/EPTF_GenApp_MainModule.ttcnpp"/> + <FileResource projectRelativePath="HTTP_main_demo.cfg" relativeURI="productconfigs/HTTP/HTTP_main_demo.cfg"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_GenApp_HTTP_TopLevel</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>GENAPP_COMPILE_HTTP</listItem> + </TTCN3preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_INAP.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_INAP.tpd new file mode 100644 index 000000000..ced665233 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_INAP.tpd @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_INAP</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_Applib_INAP_CNL113596" projectLocationURI="../../../../Libraries/EPTF_Applib_INAP_CNL113596/EPTF_Applib_INAP_CNL113596.tpd"/> + <ReferencedProject name="EPTF_CommonTransport_TCAP_CNL113592" projectLocationURI="../../../../Libraries/EPTF_CommonTransport_TCAP_CNL113592/EPTF_CommonTransport_TCAP_CNL113592.tpd"/> + <ReferencedProject name="EPTF_GenApp_Common" projectLocationURI="../common/EPTF_GenApp_Common.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_INAP_LGen_Definitions.ttcn" relativeURI="EPTF_GenApp_INAP_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_GenApp_INAP_LGen_Functions.ttcn" relativeURI="EPTF_GenApp_INAP_LGen_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>build/EPTF_GenApp_INAP</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>build</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ISUP.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ISUP.tpd new file mode 100644 index 000000000..b9db867e2 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ISUP.tpd @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_ISUP</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_Applib_ISUP_CNL113681" projectLocationURI="../../../../Libraries/EPTF_Applib_ISUP_CNL113681/EPTF_Applib_ISUP_CNL113681.tpd"/> + <ReferencedProject name="EPTF_GenApp_Common" projectLocationURI="../common/EPTF_GenApp_Common.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_ISUP_LGen_Definitions.ttcn" relativeURI="EPTF_GenApp_ISUP_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_GenApp_ISUP_LGen_Functions.ttcn" relativeURI="EPTF_GenApp_ISUP_LGen_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>build/EPTF_GenApp_ISUP</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>build</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_LDAP.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_LDAP.tpd new file mode 100644 index 000000000..c7c8e7f4b --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_LDAP.tpd @@ -0,0 +1,73 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_LDAP</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_Applib_LDAP_CNL113754" projectLocationURI="../../../../Libraries/EPTF_Applib_LDAP_CNL113754/EPTF_Applib_LDAP_CNL113754.tpd"/> + <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../../../../Libraries/EPTF_Core_Library_CNL113512/src/Common/EPTF_CLL_Common.tpd"/> + <ReferencedProject name="EPTF_CLL_ExecCtrl" projectLocationURI="../../../../Libraries/EPTF_Core_Library_CNL113512/src/ExecCtrl/EPTF_CLL_ExecCtrl.tpd"/> + <ReferencedProject name="EPTF_CLL_FreeBusyQueue" projectLocationURI="../../../../Libraries/EPTF_Core_Library_CNL113512/src/FreeBusyQueue/EPTF_CLL_FBQ.tpd"/> + <ReferencedProject name="EPTF_CLL_HashMap" projectLocationURI="../../../../Libraries/EPTF_Core_Library_CNL113512/src/HashMap/EPTF_CLL_HashMap.tpd"/> + <ReferencedProject name="EPTF_CLL_LGenBase" projectLocationURI="../../../../Libraries/EPTF_Core_Library_CNL113512/src/LGenBase/EPTF_CLL_LGenBase.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging" projectLocationURI="../../../../Libraries/EPTF_Core_Library_CNL113512/src/Logging/EPTF_CLL_Logging.tpd"/> + <ReferencedProject name="EPTF_CLL_Logging_UI" projectLocationURI="../../../../Libraries/EPTF_Core_Library_CNL113512/src/Logging/EPTF_CLL_Logging_UI.tpd"/> + <ReferencedProject name="EPTF_CLL_Rendezvous" projectLocationURI="../../../../Libraries/EPTF_Core_Library_CNL113512/src/Rendezvous/EPTF_CLL_Rendezvous.tpd"/> + <ReferencedProject name="EPTF_CLL_StatHandler" projectLocationURI="../../../../Libraries/EPTF_Core_Library_CNL113512/src/StatHandler/EPTF_CLL_StatHandler.tpd"/> + <ReferencedProject name="EPTF_CLL_UIHandler" projectLocationURI="../../../../Libraries/EPTF_Core_Library_CNL113512/src/UIHandler/EPTF_CLL_UIHandler.tpd"/> + <ReferencedProject name="EPTF_GenApp_Common" projectLocationURI="../../demo/EPTF_GenApp_Common.tpd"/> + <ReferencedProject name="LDAPasp_RFC4511_CNL113513_Functions" projectLocationURI="../../../../TestPorts/LDAPasp_RFC4511_CNL113513/LDAPasp_RFC4511_CNL113513_Functions.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="bin" relativeURI="../../../../../../../workspace/EPTF_GenApp_LDAP/bin"/> + <FolderResource projectRelativePath="ldap" relativeURI="."/> + </Folders> + <Files> + <FileResource projectRelativePath=".TITAN_properties" relativeURI="../../../../../../../workspace/EPTF_GenApp_LDAP/.TITAN_properties"/> + <FileResource projectRelativePath=".project" relativeURI="../../../../../../../workspace/EPTF_GenApp_LDAP/.project"/> + <FileResource projectRelativePath="bin/EPTF_GenApp_LDAP.grp" relativeURI="../../../../../../../workspace/EPTF_GenApp_LDAP/bin/EPTF_GenApp_LDAP.grp"/> + <FileResource projectRelativePath="bin/EPTF_GenApp_LDAP.tpd" relativeURI="../../../../../../../workspace/EPTF_GenApp_LDAP/bin/EPTF_GenApp_LDAP.tpd"/> + <FileResource projectRelativePath="bin/EPTF_GenApp_LDAP_Definitions.cc" relativeURI="../../../../../../../workspace/EPTF_GenApp_LDAP/bin/EPTF_GenApp_LDAP_Definitions.cc"/> + <FileResource projectRelativePath="bin/EPTF_GenApp_LDAP_Definitions.d" relativeURI="../../../../../../../workspace/EPTF_GenApp_LDAP/bin/EPTF_GenApp_LDAP_Definitions.d"/> + <FileResource projectRelativePath="bin/EPTF_GenApp_LDAP_Definitions.hh" relativeURI="../../../../../../../workspace/EPTF_GenApp_LDAP/bin/EPTF_GenApp_LDAP_Definitions.hh"/> + <FileResource projectRelativePath="bin/EPTF_GenApp_LDAP_Definitions.o" relativeURI="../../../../../../../workspace/EPTF_GenApp_LDAP/bin/EPTF_GenApp_LDAP_Definitions.o"/> + <FileResource projectRelativePath="bin/EPTF_GenApp_LDAP_Definitions.ttcn" relativeURI="../../../../../../../workspace/EPTF_GenApp_LDAP/bin/EPTF_GenApp_LDAP_Definitions.ttcn"/> + <FileResource projectRelativePath="bin/EPTF_GenApp_LDAP_Functions.cc" relativeURI="../../../../../../../workspace/EPTF_GenApp_LDAP/bin/EPTF_GenApp_LDAP_Functions.cc"/> + <FileResource projectRelativePath="bin/EPTF_GenApp_LDAP_Functions.d" relativeURI="../../../../../../../workspace/EPTF_GenApp_LDAP/bin/EPTF_GenApp_LDAP_Functions.d"/> + <FileResource projectRelativePath="bin/EPTF_GenApp_LDAP_Functions.hh" relativeURI="../../../../../../../workspace/EPTF_GenApp_LDAP/bin/EPTF_GenApp_LDAP_Functions.hh"/> + <FileResource projectRelativePath="bin/EPTF_GenApp_LDAP_Functions.o" relativeURI="../../../../../../../workspace/EPTF_GenApp_LDAP/bin/EPTF_GenApp_LDAP_Functions.o"/> + <FileResource projectRelativePath="bin/EPTF_GenApp_LDAP_Functions.ttcn" relativeURI="../../../../../../../workspace/EPTF_GenApp_LDAP/bin/EPTF_GenApp_LDAP_Functions.ttcn"/> + <FileResource projectRelativePath="bin/EPTF_GenApp_MainModule.cc" relativeURI="../../../../../../../workspace/EPTF_GenApp_LDAP/bin/EPTF_GenApp_MainModule.cc"/> + <FileResource projectRelativePath="bin/EPTF_GenApp_MainModule.hh" relativeURI="../../../../../../../workspace/EPTF_GenApp_LDAP/bin/EPTF_GenApp_MainModule.hh"/> + <FileResource projectRelativePath="bin/Makefile" relativeURI="../../../../../../../workspace/EPTF_GenApp_LDAP/bin/Makefile"/> + <FileResource projectRelativePath="bin/compile" relativeURI="../../../../../../../workspace/EPTF_GenApp_LDAP/bin/compile"/> + <FileResource projectRelativePath="bin/compile-all" relativeURI="../../../../../../../workspace/EPTF_GenApp_LDAP/bin/compile-all"/> + <FileResource projectRelativePath="ldap/EPTF_GenApp_LDAP.grp" relativeURI="EPTF_GenApp_LDAP.grp"/> + <FileResource projectRelativePath="ldap/EPTF_GenApp_LDAP.tpd" relativeURI="EPTF_GenApp_LDAP.tpd"/> + <FileResource projectRelativePath="ldap/EPTF_GenApp_LDAP_Definitions.ttcn" relativeURI="EPTF_GenApp_LDAP_Definitions.ttcn"/> + <FileResource projectRelativePath="ldap/EPTF_GenApp_LDAP_Functions.ttcn" relativeURI="EPTF_GenApp_LDAP_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_GenApp_LDAP</targetExecutable> + <buildLevel>Level 2 - Creating object files</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_LNP.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_LNP.tpd new file mode 100644 index 000000000..10fd4ffb1 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_LNP.tpd @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_LNP</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_Applib_LNP_CNL113714" projectLocationURI="../../../../Libraries/EPTF_Applib_LNP_CNL113714/EPTF_Applib_LNP_CNL113714.tpd"/> + <ReferencedProject name="EPTF_GenApp_Common" projectLocationURI="../common/EPTF_GenApp_Common.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_LNP_LGen_Definitions.ttcn" relativeURI="EPTF_GenApp_LNP_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_GenApp_LNP_LGen_Functions.ttcn" relativeURI="EPTF_GenApp_LNP_LGen_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>build/EPTF_GenApp_LNP</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>build</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_LRF.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_LRF.tpd new file mode 100644 index 000000000..515504abf --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_LRF.tpd @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_LRF_TopLevel</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_GenApp_LRF" projectLocationURI="../src/http/EPTF_GenApp_LRF.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_MainModule.ttcnpp" relativeURI="../src/common/EPTF_GenApp_MainModule.ttcnpp"/> + <FileResource projectRelativePath="LRF_main_demo.cfg" relativeURI="productconfigs/LRF/LRF_main_demo.cfg"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_GenApp_LRF_TopLevel</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>GENAPP_COMPILE_HTTP</listItem> + <listItem>GENAPP_COMPILE_LRF</listItem> + </TTCN3preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_LTE.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_LTE.tpd new file mode 100644 index 000000000..dad4d4bde --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_LTE.tpd @@ -0,0 +1,56 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_LTE</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_GenApp_SIP" projectLocationURI="../src/sip/EPTF_GenApp_SIP.tpd"/> + <ReferencedProject name="EPTF_GenApp_UserPlane" projectLocationURI="../src/userplane/EPTF_GenApp_UserPlane.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_MainModule.ttcnpp" relativeURI="../src/common/EPTF_GenApp_MainModule.ttcnpp"/> + <FileResource projectRelativePath="LTE_main_demo.cfg" relativeURI="productconfigs/LTE/LTE_main_demo.cfg"/> + <FileResource projectRelativePath="LTE_CLL_TestPorts.cfg" relativeURI="productconfigs/LTE/LTE_CLL_TestPorts.cfg"/> + <FileResource projectRelativePath="LTE_Combined_demo.cfg" relativeURI="productconfigs/LTE/LTE_Combined_demo.cfg"/> + <FileResource projectRelativePath="LTE_MLSim_config_settings.cfg" relativeURI="productconfigs/LTE/LTE_MLSim_config_settings.cfg"/> + <FileResource projectRelativePath="LTE_MLSim_profile_settings.cfg" relativeURI="productconfigs/LTE/LTE_MLSim_profile_settings.cfg"/> + <FileResource projectRelativePath="LTE_SIP_FSM.cfg" relativeURI="productconfigs/LTE/LTE_SIP_FSM.cfg"/> + <FileResource projectRelativePath="LTE_SIP_demo.cfg" relativeURI="productconfigs/LTE/LTE_SIP_demo.cfg"/> + <FileResource projectRelativePath="LTE_UPload_config_settings.cfg" relativeURI="productconfigs/LTE/LTE_UPload_config_settings.cfg"/> + <FileResource projectRelativePath="LTE_UserPlane_FSM.cfg" relativeURI="productconfigs/LTE/LTE_UserPlane_FSM.cfg"/> + <FileResource projectRelativePath="LTE_UserPlane_demo.cfg" relativeURI="productconfigs/LTE/LTE_UserPlane_demo.cfg"/> + <FileResource projectRelativePath="LTE_debug_settings.cfg" relativeURI="productconfigs/LTE/LTE_debug_settings.cfg"/> + <FileResource projectRelativePath="LTE_local_host.cfg" relativeURI="productconfigs/LTE/LTE_local_host.cfg"/> + <FileResource projectRelativePath="LTE_remote_node.cfg" relativeURI="productconfigs/LTE/LTE_remote_node.cfg"/> + <FileResource projectRelativePath="LTE_statistics_settings.cfg" relativeURI="productconfigs/LTE/LTE_statistics_settings.cfg"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_GenApp_LTE</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>GENAPP_COMPILE_SIP</listItem> + <listItem>GENAPP_COMPILE_COMBINED_MLSIM</listItem> + <listItem>GENAPP_COMPILE_COMBINED_MSRP</listItem> + <listItem>GENAPP_COMPILE_COMBINED_SDP</listItem> + <listItem>GENAPP_COMPILE_COMBINED_UPLOAD</listItem> + </TTCN3preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_MABEZ.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_MABEZ.tpd new file mode 100644 index 000000000..740827b9f --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_MABEZ.tpd @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_MABEZ</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_GenApp_SIP" projectLocationURI="../src/sip/EPTF_GenApp_SIP.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_MainModule.ttcnpp" relativeURI="../src/common/EPTF_GenApp_MainModule.ttcnpp"/> + <FileResource projectRelativePath="MABEZ_main_demo.cfg" relativeURI="productconfigs/MABEZ/MABEZ_main_demo.cfg"/> + <FileResource projectRelativePath="MABEZ_CLL_TestPorts.cfg" relativeURI="productconfigs/MABEZ/MABEZ_CLL_TestPorts.cfg"/> + <FileResource projectRelativePath="MABEZ_SIP_FSM.cfg" relativeURI="productconfigs/MABEZ/MABEZ_SIP_FSM.cfg"/> + <FileResource projectRelativePath="MABEZ_SIP_demo.cfg" relativeURI="productconfigs/MABEZ/MABEZ_SIP_demo.cfg"/> + <FileResource projectRelativePath="MABEZ_debug_settings.cfg" relativeURI="productconfigs/MABEZ/MABEZ_debug_settings.cfg"/> + <FileResource projectRelativePath="MABEZ_local_host.cfg" relativeURI="productconfigs/MABEZ/MABEZ_local_host.cfg"/> + <FileResource projectRelativePath="MABEZ_remote_node.cfg" relativeURI="productconfigs/MABEZ/MABEZ_remote_node.cfg"/> + <FileResource projectRelativePath="MABEZ_statistics_settings.cfg" relativeURI="productconfigs/MABEZ/MABEZ_statistics_settings.cfg"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_GenApp_MABEZ</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>GENAPP_COMPILE_SIP</listItem> + </TTCN3preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_MAP.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_MAP.tpd new file mode 100644 index 000000000..f627158f4 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_MAP.tpd @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_MAP</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_Applib_MAP_CNL113595" projectLocationURI="../../../../Libraries/EPTF_Applib_MAP_CNL113595/EPTF_Applib_MAP_CNL113595.tpd"/> + <ReferencedProject name="EPTF_GenApp_Common" projectLocationURI="../common/EPTF_GenApp_Common.tpd"/> + <ReferencedProject name="TCCUsefulFunctions_CNL113472_Security" projectLocationURI="../../../../Libraries/TCCUsefulFunctions_CNL113472/TCCUsefulFunctions_CNL113472_Security.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_MAP_LGen_Definitions.ttcn" relativeURI="EPTF_GenApp_MAP_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_GenApp_MAP_LGen_Functions.ttcn" relativeURI="EPTF_GenApp_MAP_LGen_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <GNUMake>true</GNUMake> + <targetExecutable>build/EPTF_GenApp_MAP</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>build</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_MGW.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_MGW.tpd new file mode 100644 index 000000000..3088d01e4 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_MGW.tpd @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_MGW</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_GenApp_H248" projectLocationURI="../src/h248/EPTF_GenApp_H248.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_MainModule.ttcnpp" relativeURI="../src/common/EPTF_GenApp_MainModule.ttcnpp"/> + <FileResource projectRelativePath="MGWSim_main_demo.cfg" relativeURI="productconfigs/MGWSim/MGWSim_main_demo.cfg"/> + <FileResource projectRelativePath="MGWSim_CLL_TestPorts.cfg" relativeURI="productconfigs/MGWSim/MGWSim_CLL_TestPorts.cfg"/> + <FileResource projectRelativePath="MGWSim_H248_FSM.cfg" relativeURI="productconfigs/MGWSim/MGWSim_H248_FSM.cfg"/> + <FileResource projectRelativePath="MGWSim_H248_demo.cfg" relativeURI="productconfigs/MGWSim/MGWSim_H248_demo.cfg"/> + <FileResource projectRelativePath="MGWSim_debug_settings.cfg" relativeURI="productconfigs/MGWSim/MGWSim_debug_settings.cfg"/> + <FileResource projectRelativePath="MGWSim_local_host.cfg" relativeURI="productconfigs/MGWSim/MGWSim_local_host.cfg"/> + <FileResource projectRelativePath="MGWSim_remote_node.cfg" relativeURI="productconfigs/MGWSim/MGWSim_remote_node.cfg"/> + <FileResource projectRelativePath="MGWSim_statistics_settings.cfg" relativeURI="productconfigs/MGWSim/MGWSim_statistics_settings.cfg"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_GenApp_MGW</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>GENAPP_COMPILE_H248</listItem> + </TTCN3preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_MMESim.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_MMESim.tpd new file mode 100644 index 000000000..3e4f21746 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_MMESim.tpd @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_MMEsim</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_GenApp_DIAMETER" projectLocationURI="../src/diameter/EPTF_GenApp_DIAMETER.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_MainModule.ttcnpp" relativeURI="../src/common/EPTF_GenApp_MainModule.ttcnpp"/> + <FileResource projectRelativePath="MMEsim_main.cfg" relativeURI="../../../../cfg/MMESim/MMEsim_main.cfg"/> + <FileResource projectRelativePath="MMEsim_AVPs.cfg" relativeURI="../../../../cfg/MMESim/MMEsim_AVPs.cfg"/> + <FileResource projectRelativePath="MMEsim_FSM.cfg" relativeURI="../../../../cfg/MMESim/MMEsim_FSM.cfg"/> + <FileResource projectRelativePath="MMEsim_local_host.cfg" relativeURI="../../../../cfg/MMESim/MMEsim_local_host.cfg"/> + <FileResource projectRelativePath="MMEsim_settings.cfg" relativeURI="../../../../cfg/MMESim/MMEsim_settings.cfg"/> + <FileResource projectRelativePath="MMEsim_statistics_settings.cfg" relativeURI="../../../../cfg/MMESim/MMEsim_statistics_settings.cfg"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>build/titansim</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>GENAPP_COMPILE_DIAMETER</listItem> + </TTCN3preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>build</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_MMsim.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_MMsim.tpd new file mode 100644 index 000000000..244dfba6b --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_MMsim.tpd @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_MMsim</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_GenApp_DIAMETER" projectLocationURI="../src/diameter/EPTF_GenApp_DIAMETER.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_MainModule.ttcnpp" relativeURI="../src/common/EPTF_GenApp_MainModule.ttcnpp"/> + <FileResource projectRelativePath="MMsim_main.cfg" relativeURI="productconfigs/MMsim/MMsim_main.cfg"/> + <FileResource projectRelativePath="MMsim_AVPs.cfg" relativeURI="productconfigs/MMsim/MMsim_AVPs.cfg"/> + <FileResource projectRelativePath="MMsim_FSM.cfg" relativeURI="productconfigs/MMsim/MMsim_FSM.cfg"/> + <FileResource projectRelativePath="MMsim_local_host.cfg" relativeURI="productconfigs/MMsim/MMsim_local_host.cfg"/> + <FileResource projectRelativePath="MMsim_traffic.cfg" relativeURI="productconfigs/MMsim/MMsim_traffic.cfg"/> + <FileResource projectRelativePath="MMsim_statistics_settings.cfg" relativeURI="productconfigs/MMsim/MMsim_statistics_settings.cfg"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/EPTF_GenApp_MMsim</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>GENAPP_COMPILE_DIAMETER</listItem> + </TTCN3preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_MRFC.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_MRFC.tpd new file mode 100644 index 000000000..71dd2c3bb --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_MRFC.tpd @@ -0,0 +1,44 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_MRFC</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_Applib_HTTP_CNL113618" projectLocationURI="../../../../Libraries/EPTF_Applib_HTTP_CNL113618/EPTF_Applib_HTTP_CNL113618.tpd"/> + <ReferencedProject name="EPTF_GenApp_SIP" projectLocationURI="EPTF_GenApp_SIP.tpd"/> + <ReferencedProject name="SDP_CNL113353" projectLocationURI="../../../../ProtocolModules/SDP_CNL113353/SDP_CNL113353.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_MRFC_DS_Definitions.ttcn" relativeURI="EPTF_GenApp_MRFC_DS_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_GenApp_MRFC_DS_Functions.ttcn" relativeURI="EPTF_GenApp_MRFC_DS_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_GenApp_MRFC_Definitions.ttcn" relativeURI="EPTF_GenApp_MRFC_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_GenApp_MRFC_Functions.ttcn" relativeURI="EPTF_GenApp_MRFC_Functions.ttcn"/> + <FileResource projectRelativePath="www_w3_org_2001_vxml.ttcn" relativeURI="www_w3_org_2001_vxml.ttcn"/> + <FileResource projectRelativePath="www_w3_org_XML_1998_namespace.ttcn" relativeURI="www_w3_org_XML_1998_namespace.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>build/EPTF_GenApp_MRFC</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>GENAPP_COMPILE_MRFC</listItem> + </TTCN3preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>build</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_MSS.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_MSS.tpd new file mode 100644 index 000000000..617d5a18d --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_MSS.tpd @@ -0,0 +1,49 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_MSS</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_GenApp_ISUP" projectLocationURI="../src/isup/EPTF_GenApp_ISUP.tpd"/> + <ReferencedProject name="EPTF_GenApp_SIP" projectLocationURI="../src/sip/EPTF_GenApp_SIP.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_MainModule.ttcnpp" relativeURI="../src/common/EPTF_GenApp_MainModule.ttcnpp"/> + <FileResource projectRelativePath="MSS_CLL_TestPorts.cfg" relativeURI="productconfigs/MSS/MSS_CLL_TestPorts.cfg"/> + <FileResource projectRelativePath="MSS_ISUP_FSM.cfg" relativeURI="productconfigs/MSS/MSS_ISUP_FSM.cfg"/> + <FileResource projectRelativePath="MSS_ISUP_traffic.cfg" relativeURI="productconfigs/MSS/MSS_ISUP_traffic.cfg"/> + <FileResource projectRelativePath="MSS_SIP_FSM.cfg" relativeURI="productconfigs/MSS/MSS_SIP_FSM.cfg"/> + <FileResource projectRelativePath="MSS_SIP_traffic.cfg" relativeURI="productconfigs/MSS/MSS_SIP_traffic.cfg"/> + <FileResource projectRelativePath="MSS_debug_settings.cfg" relativeURI="productconfigs/MSS/MSS_debug_settings.cfg"/> + <FileResource projectRelativePath="MSS_local_host.cfg" relativeURI="productconfigs/MSS/MSS_local_host.cfg"/> + <FileResource projectRelativePath="MSS_main.cfg" relativeURI="productconfigs/MSS/MSS_main.cfg"/> + <FileResource projectRelativePath="MSS_remote_node.cfg" relativeURI="productconfigs/MSS/MSS_remote_node.cfg"/> + <FileResource projectRelativePath="MSS_statistics_settings.cfg" relativeURI="productconfigs/MSS/MSS_statistics_settings.cfg"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/EPTF_GenApp_MSS</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>GENAPP_COMPILE_COMBINED_SIP</listItem> + <listItem>GENAPP_COMPILE_COMBINED_ISUP</listItem> + <listItem>ENABLE_SCTP</listItem> + </TTCN3preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_MTAS.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_MTAS.tpd new file mode 100644 index 000000000..6b238e8cd --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_MTAS.tpd @@ -0,0 +1,84 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_MTAS</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_GenApp_CAI3G" projectLocationURI="../src/cai3g/EPTF_GenApp_CAI3G.tpd"/> + <ReferencedProject name="EPTF_GenApp_CCMP" projectLocationURI="../src/http/EPTF_GenApp_CCMP.tpd"/> + <ReferencedProject name="EPTF_GenApp_CNS" projectLocationURI="../src/http/EPTF_GenApp_CNS.tpd"/> + <ReferencedProject name="EPTF_GenApp_DIAMETER" projectLocationURI="../src/diameter/EPTF_GenApp_DIAMETER.tpd"/> + <ReferencedProject name="EPTF_GenApp_DNS" projectLocationURI="../src/dns/EPTF_GenApp_DNS.tpd"/> + <ReferencedProject name="EPTF_GenApp_H248" projectLocationURI="../src/h248/EPTF_GenApp_H248.tpd"/> + <ReferencedProject name="EPTF_GenApp_MRFC" projectLocationURI="../src/sip/EPTF_GenApp_MRFC.tpd"/> + <ReferencedProject name="EPTF_GenApp_ParlayX" projectLocationURI="../src/http/EPTF_GenApp_ParlayX.tpd"/> + <ReferencedProject name="EPTF_GenApp_SCP" projectLocationURI="../src/cap/EPTF_GenApp_SCP.tpd"/> + <ReferencedProject name="EPTF_GenApp_XCAP" projectLocationURI="../src/xcap/EPTF_GenApp_XCAP.tpd"/> + <ReferencedProject name="EPTF_GenApp_SIP" projectLocationURI="../src/sip/EPTF_GenApp_SIP.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_MainModule.ttcnpp" relativeURI="../src/common/EPTF_GenApp_MainModule.ttcnpp"/> + <FileResource projectRelativePath="MTAS_CAI3G_FSM.cfg" relativeURI="productconfigs/MTAS/MTAS_CAI3G_FSM.cfg"/> + <FileResource projectRelativePath="MTAS_CAI3G_demo.cfg" relativeURI="productconfigs/MTAS/MTAS_CAI3G_demo.cfg"/> + <FileResource projectRelativePath="MTAS_CCMP_FSM.cfg" relativeURI="productconfigs/MTAS/MTAS_CCMP_FSM.cfg"/> + <FileResource projectRelativePath="MTAS_CCMP_demo.cfg" relativeURI="productconfigs/MTAS/MTAS_CCMP_demo.cfg"/> + <FileResource projectRelativePath="MTAS_CCMP_statistics_settings.cfg" relativeURI="productconfigs/MTAS/MTAS_CCMP_statistics_settings.cfg"/> + <FileResource projectRelativePath="MTAS_CLL_TestPorts.cfg" relativeURI="productconfigs/MTAS/MTAS_CLL_TestPorts.cfg"/> + <FileResource projectRelativePath="MTAS_CNS_FSM.cfg" relativeURI="productconfigs/MTAS/MTAS_CNS_FSM.cfg"/> + <FileResource projectRelativePath="MTAS_CNS_demo.cfg" relativeURI="productconfigs/MTAS/MTAS_CNS_demo.cfg"/> + <FileResource projectRelativePath="MTAS_DIAMETER_FSM.cfg" relativeURI="productconfigs/MTAS/MTAS_DIAMETER_FSM.cfg"/> + <FileResource projectRelativePath="MTAS_DIAMETER_demo.cfg" relativeURI="productconfigs/MTAS/MTAS_DIAMETER_demo.cfg"/> + <FileResource projectRelativePath="MTAS_DIAMETER_demo_SLF.cfg" relativeURI="productconfigs/MTAS/MTAS_DIAMETER_demo_SLF.cfg"/> + <FileResource projectRelativePath="MTAS_DNS_FSM.cfg" relativeURI="productconfigs/MTAS/MTAS_DNS_FSM.cfg"/> + <FileResource projectRelativePath="MTAS_DNS_demo.cfg" relativeURI="productconfigs/MTAS/MTAS_DNS_demo.cfg"/> + <FileResource projectRelativePath="MTAS_H248_FSM.cfg" relativeURI="productconfigs/MTAS/MTAS_H248_FSM.cfg"/> + <FileResource projectRelativePath="MTAS_H248_demo.cfg" relativeURI="productconfigs/MTAS/MTAS_H248_demo.cfg"/> + <FileResource projectRelativePath="MTAS_H248_demo_4MRFP.cfg" relativeURI="productconfigs/MTAS/MTAS_H248_demo_4MRFP.cfg"/> + <FileResource projectRelativePath="MTAS_MRFC_FSM.cfg" relativeURI="productconfigs/MTAS/MTAS_MRFC_FSM.cfg"/> + <FileResource projectRelativePath="MTAS_MRFC_demo.cfg" relativeURI="productconfigs/MTAS/MTAS_MRFC_demo.cfg"/> + <FileResource projectRelativePath="MTAS_SCP_FSM.cfg" relativeURI="productconfigs/MTAS/MTAS_SCP_FSM.cfg"/> + <FileResource projectRelativePath="MTAS_SCP_demo.cfg" relativeURI="productconfigs/MTAS/MTAS_SCP_demo.cfg"/> + <FileResource projectRelativePath="MTAS_SCP_statistics_settings.cfg" relativeURI="productconfigs/MTAS/MTAS_SCP_statistics_settings.cfg"/> + <FileResource projectRelativePath="MTAS_XCAP_FSM.cfg" relativeURI="productconfigs/MTAS/MTAS_XCAP_FSM.cfg"/> + <FileResource projectRelativePath="MTAS_XCAP_demo.cfg" relativeURI="productconfigs/MTAS/MTAS_XCAP_demo.cfg"/> + <FileResource projectRelativePath="MTAS_debug_settings.cfg" relativeURI="productconfigs/MTAS/MTAS_debug_settings.cfg"/> + <FileResource projectRelativePath="MTAS_local_host.cfg" relativeURI="productconfigs/MTAS/MTAS_local_host.cfg"/> + <FileResource projectRelativePath="MTAS_main_demo.cfg" relativeURI="productconfigs/MTAS/MTAS_main_demo.cfg"/> + <FileResource projectRelativePath="MTAS_remote_node.cfg" relativeURI="productconfigs/MTAS/MTAS_remote_node.cfg"/> + <FileResource projectRelativePath="MTAS_statistics_settings.cfg" relativeURI="productconfigs/MTAS/MTAS_statistics_settings.cfg"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/EPTF_GenApp_MTAS</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>GENAPP_COMPILE_CAI3G</listItem> + <listItem>GENAPP_COMPILE_DIAMETER</listItem> + <listItem>GENAPP_COMPILE_H248</listItem> + <listItem>GENAPP_COMPILE_XCAP</listItem> + <listItem>GENAPP_COMPILE_CNS</listItem> + <listItem>GENAPP_COMPILE_MRFC</listItem> + <listItem>GENAPP_COMPILE_SCP</listItem> + <listItem>GENAPP_COMPILE_PARLAYX</listItem> + <listItem>GENAPP_COMPILE_DNS</listItem> + <listItem>GENAPP_COMPILE_COMBINED_CCMP</listItem> + <listItem>GENAPP_COMPILE_COMBINED_SIP</listItem> + </TTCN3preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_MTAS_noSS7.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_MTAS_noSS7.tpd new file mode 100644 index 000000000..eb465a5a5 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_MTAS_noSS7.tpd @@ -0,0 +1,79 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_MTAS_noSS7</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_GenApp_CAI3G" projectLocationURI="../src/cai3g/EPTF_GenApp_CAI3G.tpd"/> + <ReferencedProject name="EPTF_GenApp_CCMP" projectLocationURI="../src/http/EPTF_GenApp_CCMP.tpd"/> + <ReferencedProject name="EPTF_GenApp_CNS" projectLocationURI="../src/http/EPTF_GenApp_CNS.tpd"/> + <ReferencedProject name="EPTF_GenApp_DIAMETER" projectLocationURI="../src/diameter/EPTF_GenApp_DIAMETER.tpd"/> + <ReferencedProject name="EPTF_GenApp_DNS" projectLocationURI="../src/dns/EPTF_GenApp_DNS.tpd"/> + <ReferencedProject name="EPTF_GenApp_H248" projectLocationURI="../src/h248/EPTF_GenApp_H248.tpd"/> + <ReferencedProject name="EPTF_GenApp_MRFC" projectLocationURI="../src/sip/EPTF_GenApp_MRFC.tpd"/> + <ReferencedProject name="EPTF_GenApp_ParlayX" projectLocationURI="../src/http/EPTF_GenApp_ParlayX.tpd"/> + <ReferencedProject name="EPTF_GenApp_XCAP" projectLocationURI="../src/xcap/EPTF_GenApp_XCAP.tpd"/> + <ReferencedProject name="EPTF_GenApp_SIP" projectLocationURI="../src/sip/EPTF_GenApp_SIP.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_MainModule.ttcnpp" relativeURI="../src/common/EPTF_GenApp_MainModule.ttcnpp"/> + <FileResource projectRelativePath="MTAS_CAI3G_FSM.cfg" relativeURI="productconfigs/MTAS/MTAS_CAI3G_FSM.cfg"/> + <FileResource projectRelativePath="MTAS_CAI3G_demo.cfg" relativeURI="productconfigs/MTAS/MTAS_CAI3G_demo.cfg"/> + <FileResource projectRelativePath="MTAS_CCMP_FSM.cfg" relativeURI="productconfigs/MTAS/MTAS_CCMP_FSM.cfg"/> + <FileResource projectRelativePath="MTAS_CCMP_demo.cfg" relativeURI="productconfigs/MTAS/MTAS_CCMP_demo.cfg"/> + <FileResource projectRelativePath="MTAS_CCMP_statistics_settings.cfg" relativeURI="productconfigs/MTAS/MTAS_CCMP_statistics_settings.cfg"/> + <FileResource projectRelativePath="MTAS_CLL_TestPorts.cfg" relativeURI="productconfigs/MTAS/MTAS_CLL_TestPorts.cfg"/> + <FileResource projectRelativePath="MTAS_CNS_FSM.cfg" relativeURI="productconfigs/MTAS/MTAS_CNS_FSM.cfg"/> + <FileResource projectRelativePath="MTAS_CNS_demo.cfg" relativeURI="productconfigs/MTAS/MTAS_CNS_demo.cfg"/> + <FileResource projectRelativePath="MTAS_DIAMETER_FSM.cfg" relativeURI="productconfigs/MTAS/MTAS_DIAMETER_FSM.cfg"/> + <FileResource projectRelativePath="MTAS_DIAMETER_demo.cfg" relativeURI="productconfigs/MTAS/MTAS_DIAMETER_demo.cfg"/> + <FileResource projectRelativePath="MTAS_DIAMETER_demo_SLF.cfg" relativeURI="productconfigs/MTAS/MTAS_DIAMETER_demo_SLF.cfg"/> + <FileResource projectRelativePath="MTAS_DNS_FSM.cfg" relativeURI="productconfigs/MTAS/MTAS_DNS_FSM.cfg"/> + <FileResource projectRelativePath="MTAS_DNS_demo.cfg" relativeURI="productconfigs/MTAS/MTAS_DNS_demo.cfg"/> + <FileResource projectRelativePath="MTAS_H248_FSM.cfg" relativeURI="productconfigs/MTAS/MTAS_H248_FSM.cfg"/> + <FileResource projectRelativePath="MTAS_H248_demo.cfg" relativeURI="productconfigs/MTAS/MTAS_H248_demo.cfg"/> + <FileResource projectRelativePath="MTAS_H248_demo_4MRFP.cfg" relativeURI="productconfigs/MTAS/MTAS_H248_demo_4MRFP.cfg"/> + <FileResource projectRelativePath="MTAS_MRFC_FSM.cfg" relativeURI="productconfigs/MTAS/MTAS_MRFC_FSM.cfg"/> + <FileResource projectRelativePath="MTAS_MRFC_demo.cfg" relativeURI="productconfigs/MTAS/MTAS_MRFC_demo.cfg"/> + <FileResource projectRelativePath="MTAS_XCAP_FSM.cfg" relativeURI="productconfigs/MTAS/MTAS_XCAP_FSM.cfg"/> + <FileResource projectRelativePath="MTAS_XCAP_demo.cfg" relativeURI="productconfigs/MTAS/MTAS_XCAP_demo.cfg"/> + <FileResource projectRelativePath="MTAS_debug_settings.cfg" relativeURI="productconfigs/MTAS/MTAS_debug_settings.cfg"/> + <FileResource projectRelativePath="MTAS_local_host.cfg" relativeURI="productconfigs/MTAS/MTAS_local_host.cfg"/> + <FileResource projectRelativePath="MTAS_main_demo_noSS7.cfg" relativeURI="productconfigs/MTAS/MTAS_main_demo_noSS7.cfg"/> + <FileResource projectRelativePath="MTAS_remote_node.cfg" relativeURI="productconfigs/MTAS/MTAS_remote_node.cfg"/> + <FileResource projectRelativePath="MTAS_statistics_settings.cfg" relativeURI="productconfigs/MTAS/MTAS_statistics_settings.cfg"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/EPTF_GenApp_MTAS</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>GENAPP_COMPILE_CAI3G</listItem> + <listItem>GENAPP_COMPILE_DIAMETER</listItem> + <listItem>GENAPP_COMPILE_H248</listItem> + <listItem>GENAPP_COMPILE_XCAP</listItem> + <listItem>GENAPP_COMPILE_CNS</listItem> + <listItem>GENAPP_COMPILE_MRFC</listItem> + <listItem>GENAPP_COMPILE_PARLAYX</listItem> + <listItem>GENAPP_COMPILE_DNS</listItem> + <listItem>GENAPP_COMPILE_COMBINED_CCMP</listItem> + <listItem>GENAPP_COMPILE_COMBINED_SIP</listItem> + </TTCN3preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_MWI.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_MWI.tpd new file mode 100644 index 000000000..917fafbd2 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_MWI.tpd @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_MWI</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_GenApp_SIP" projectLocationURI="../src/sip/EPTF_GenApp_SIP.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_MainModule.ttcnpp" relativeURI="../src/common/EPTF_GenApp_MainModule.ttcnpp"/> + <FileResource projectRelativePath="MWISim_main.cfg" relativeURI="productconfigs/MWISim/MWISim_main.cfg"/> + <FileResource projectRelativePath="MWISim_CLL_TestPorts.cfg" relativeURI="productconfigs/MWISim/MWISim_CLL_TestPorts.cfg"/> + <FileResource projectRelativePath="MWISim_SIP_FSM.cfg" relativeURI="productconfigs/MWISim/MWISim_SIP_FSM.cfg"/> + <FileResource projectRelativePath="MWISim_SIP_traffic.cfg" relativeURI="productconfigs/MWISim/MWISim_SIP_traffic.cfg"/> + <FileResource projectRelativePath="MWISim_debug_settings.cfg" relativeURI="productconfigs/MWISim/MWISim_debug_settings.cfg"/> + <FileResource projectRelativePath="MWISim_local_host.cfg" relativeURI="productconfigs/MWISim/MWISim_local_host.cfg"/> + <FileResource projectRelativePath="MWISim_remote_node.cfg" relativeURI="productconfigs/MWISim/MWISim_remote_node.cfg"/> + <FileResource projectRelativePath="MWISim_statistics_settings.cfg" relativeURI="productconfigs/MWISim/MWISim_statistics_settings.cfg"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_GenApp_MWI</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>GENAPP_COMPILE_SIP</listItem> + </TTCN3preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_MWIAS.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_MWIAS.tpd new file mode 100644 index 000000000..504424ebf --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_MWIAS.tpd @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_MWIAS</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_GenApp_SIP" projectLocationURI="../src/sip/EPTF_GenApp_SIP.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_MainModule.ttcnpp" relativeURI="../src/common/EPTF_GenApp_MainModule.ttcnpp"/> + <FileResource projectRelativePath="MWIASSim_main.cfg" relativeURI="productconfigs/MWIASSim/MWIASSim_main.cfg"/> + <FileResource projectRelativePath="MWIASSim_CLL_TestPorts.cfg" relativeURI="productconfigs/MWIASSim/MWIASSim_CLL_TestPorts.cfg"/> + <FileResource projectRelativePath="MWIASSim_SIP_FSM.cfg" relativeURI="productconfigs/MWIASSim/MWIASSim_SIP_FSM.cfg"/> + <FileResource projectRelativePath="MWIASSim_SIP_traffic.cfg" relativeURI="productconfigs/MWIASSim/MWIASSim_SIP_traffic.cfg"/> + <FileResource projectRelativePath="MWIASSim_debug_settings.cfg" relativeURI="productconfigs/MWIASSim/MWIASSim_debug_settings.cfg"/> + <FileResource projectRelativePath="MWIASSim_local_host.cfg" relativeURI="productconfigs/MWIASSim/MWIASSim_local_host.cfg"/> + <FileResource projectRelativePath="MWIASSim_remote_node.cfg" relativeURI="productconfigs/MWIASSim/MWIASSim_remote_node.cfg"/> + <FileResource projectRelativePath="MWIASSim_statistics_settings.cfg" relativeURI="productconfigs/MWIASSim/MWIASSim_statistics_settings.cfg"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_GenApp_MWIAS</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>GENAPP_COMPILE_MWIAS</listItem> + </TTCN3preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_Meta.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_Meta.tpd new file mode 100644 index 000000000..c607c9b65 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_Meta.tpd @@ -0,0 +1,74 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_Meta</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_GenApp" projectLocationURI="EPTF_GenApp.tpd"/> + <ReferencedProject name="EPTF_GenApp_ASDP_TopLevel" projectLocationURI="EPTF_GenApp_ASDP.tpd"/> + <ReferencedProject name="EPTF_GenApp_ATandT" projectLocationURI="EPTF_GenApp_ATandT.tpd"/> + <ReferencedProject name="EPTF_GenApp_BCS_AC" projectLocationURI="EPTF_GenApp_BCS_AC.tpd"/> + <ReferencedProject name="EPTF_GenApp_BCS_SSP" projectLocationURI="EPTF_GenApp_BCS_SSP.tpd"/> + <ReferencedProject name="EPTF_GenApp_BCS_WCE" projectLocationURI="EPTF_GenApp_BCS_WCE.tpd"/> + <ReferencedProject name="EPTF_GenApp_CLF" projectLocationURI="EPTF_GenApp_CLF.tpd"/> + <ReferencedProject name="EPTF_GenApp_CLFv2" projectLocationURI="EPTF_GenApp_CLFv2.tpd"/> + <ReferencedProject name="EPTF_GenApp_CNS_TopLevel" projectLocationURI="EPTF_GenApp_CNS.tpd"/> + <ReferencedProject name="EPTF_GenApp_CSCF_TopLevel" projectLocationURI="EPTF_GenApp_CSCF.tpd"/> + <ReferencedProject name="EPTF_GenApp_CSCFclient" projectLocationURI="EPTF_GenApp_CSCFclient.tpd"/> + <ReferencedProject name="EPTF_GenApp_EDB" projectLocationURI="EPTF_GenApp_EDB.tpd"/> + <ReferencedProject name="EPTF_GenApp_EDB_CLI" projectLocationURI="EPTF_GenApp_EDB_CLI.tpd"/> + <ReferencedProject name="EPTF_GenApp_ETM_DCC" projectLocationURI="EPTF_GenApp_ETM_DCC.tpd"/> + <ReferencedProject name="EPTF_GenApp_ETM_ECC" projectLocationURI="EPTF_GenApp_ETM_ECC.tpd"/> + <ReferencedProject name="EPTF_GenApp_ETM_HomeZone" projectLocationURI="EPTF_GenApp_ETM_HomeZone.tpd"/> + <ReferencedProject name="EPTF_GenApp_ETM_LTE_INAP" projectLocationURI="EPTF_GenApp_ETM_LTE_INAP.tpd"/> + <ReferencedProject name="EPTF_GenApp_ETM_MCC" projectLocationURI="EPTF_GenApp_ETM_MCC.tpd"/> + <ReferencedProject name="EPTF_GenApp_ETM_NP" projectLocationURI="EPTF_GenApp_ETM_NP.tpd"/> + <ReferencedProject name="EPTF_GenApp_ETM_NP21" projectLocationURI="EPTF_GenApp_ETM_NP21.tpd"/> + <ReferencedProject name="EPTF_GenApp_ETM_SNA" projectLocationURI="EPTF_GenApp_ETM_SNA.tpd"/> + <ReferencedProject name="EPTF_GenApp_ETM_SNA2" projectLocationURI="EPTF_GenApp_ETM_SNA2.tpd"/> + <ReferencedProject name="EPTF_GenApp_HLR" projectLocationURI="EPTF_GenApp_HLR.tpd"/> + <ReferencedProject name="EPTF_GenApp_HLRsim" projectLocationURI="EPTF_GenApp_HLRsim.tpd"/> + <ReferencedProject name="EPTF_GenApp_HTTP_TopLevel" projectLocationURI="EPTF_GenApp_HTTP.tpd"/> + <ReferencedProject name="EPTF_GenApp_LRF_TopLevel" projectLocationURI="EPTF_GenApp_LRF.tpd"/> + <ReferencedProject name="EPTF_GenApp_LTE" projectLocationURI="EPTF_GenApp_LTE.tpd"/> + <ReferencedProject name="EPTF_GenApp_MABEZ" projectLocationURI="EPTF_GenApp_MABEZ.tpd"/> + <ReferencedProject name="EPTF_GenApp_MGW" projectLocationURI="EPTF_GenApp_MGW.tpd"/> + <ReferencedProject name="EPTF_GenApp_MMEsim" projectLocationURI="EPTF_GenApp_MMEsim.tpd"/> + <ReferencedProject name="EPTF_GenApp_MMsim" projectLocationURI="EPTF_GenApp_MMsim.tpd"/> + <ReferencedProject name="EPTF_GenApp_MSS" projectLocationURI="EPTF_GenApp_MSS.tpd"/> + <ReferencedProject name="EPTF_GenApp_MTAS" projectLocationURI="EPTF_GenApp_MTAS.tpd"/> + <ReferencedProject name="EPTF_GenApp_MTAS_H248_Test" projectLocationURI="../test/EPTF_GenApp_MTAS_H248_Test.tpd"/> + <ReferencedProject name="EPTF_GenApp_MTAS_noSS7" projectLocationURI="EPTF_GenApp_MTAS_noSS7.tpd"/> + <ReferencedProject name="EPTF_GenApp_MWI" projectLocationURI="EPTF_GenApp_MWI.tpd"/> + <ReferencedProject name="EPTF_GenApp_MWIAS" projectLocationURI="EPTF_GenApp_MWIAS.tpd"/> + <ReferencedProject name="EPTF_GenApp_NACF_TopLevel" projectLocationURI="EPTF_GenApp_NACF.tpd"/> + <ReferencedProject name="EPTF_GenApp_NASS" projectLocationURI="EPTF_GenApp_NASS.tpd"/> + <ReferencedProject name="EPTF_GenApp_OCF" projectLocationURI="EPTF_GenApp_OCF.tpd"/> + <ReferencedProject name="EPTF_GenApp_PCRFsim" projectLocationURI="EPTF_GenApp_PCRFsim.tpd"/> + <ReferencedProject name="EPTF_GenApp_PGM" projectLocationURI="EPTF_GenApp_PGM.tpd"/> + <ReferencedProject name="EPTF_GenApp_RACF" projectLocationURI="EPTF_GenApp_RACF.tpd"/> + <ReferencedProject name="EPTF_GenApp_UAAF" projectLocationURI="EPTF_GenApp_UAAF.tpd"/> + <ReferencedProject name="EPTF_GenApp_VMS" projectLocationURI="EPTF_GenApp_VMS.tpd"/> + </ReferencedProjects> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/EPTF_GenApp_Meta</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_NACF.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_NACF.tpd new file mode 100644 index 000000000..f1ffeba6e --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_NACF.tpd @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_NACF_TopLevel</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_GenApp_NACF" projectLocationURI="../src/imsa2/EPTF_GenApp_NACF.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_MainModule.ttcnpp" relativeURI="../src/common/EPTF_GenApp_MainModule.ttcnpp"/> + <FileResource projectRelativePath="NACF_main.cfg" relativeURI="productconfigs/NASS/NACF_main.cfg"/> + <FileResource projectRelativePath="NACF_Diameter_traffic.cfg" relativeURI="productconfigs/NASS/NACF_Diameter_traffic.cfg"/> + <FileResource projectRelativePath="NACF_Diameter_FSM.cfg" relativeURI="productconfigs/NASS/NACF_Diameter_FSM.cfg"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_GenApp_NACF_TopLevel</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>GENAPP_COMPILE_NACF</listItem> + </TTCN3preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_NASS.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_NASS.tpd new file mode 100644 index 000000000..9305940e6 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_NASS.tpd @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_NASS</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_GenApp_DIAMETER" projectLocationURI="../src/diameter/EPTF_GenApp_DIAMETER.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_MainModule.ttcnpp" relativeURI="../src/common/EPTF_GenApp_MainModule.ttcnpp"/> + <FileResource projectRelativePath="NASS_main.cfg" relativeURI="productconfigs/NASS/NASS_main.cfg"/> + <FileResource projectRelativePath="CLF_Diameter_traffic.cfg" relativeURI="productconfigs/NASS/CLF_Diameter_traffic.cfg"/> + <FileResource projectRelativePath="CLF_Diameter_FSM.cfg" relativeURI="productconfigs/NASS/CLF_Diameter_FSM.cfg"/> + <FileResource projectRelativePath="CLF_main.cfg" relativeURI="productconfigs/NASS/CLF_main.cfg"/> + <FileResource projectRelativePath="NACF_Diameter_traffic.cfg" relativeURI="productconfigs/NASS/NACF_Diameter_traffic.cfg"/> + <FileResource projectRelativePath="NACF_Diameter_FSM.cfg" relativeURI="productconfigs/NASS/NACF_Diameter_FSM.cfg"/> + <FileResource projectRelativePath="NACF_main.cfg" relativeURI="productconfigs/NASS/NACF_main.cfg"/> + <FileResource projectRelativePath="NASS_Diameter_traffic.cfg" relativeURI="productconfigs/NASS/NASS_Diameter_traffic.cfg"/> + <FileResource projectRelativePath="NASS_Diameter_FSM.cfg" relativeURI="productconfigs/NASS/NASS_Diameter_FSM.cfg"/> + <FileResource projectRelativePath="RACF_Diameter_traffic.cfg" relativeURI="productconfigs/NASS/RACF_Diameter_traffic.cfg"/> + <FileResource projectRelativePath="RACF_Diameter_FSM.cfg" relativeURI="productconfigs/NASS/RACF_Diameter_FSM.cfg"/> + <FileResource projectRelativePath="RACF_main.cfg" relativeURI="productconfigs/NASS/RACF_main.cfg"/> + <FileResource projectRelativePath="UAAF_Diameter_traffic.cfg" relativeURI="productconfigs/NASS/UAAF_Diameter_traffic.cfg"/> + <FileResource projectRelativePath="UAAF_Diameter_FSM.cfg" relativeURI="productconfigs/NASS/UAAF_Diameter_FSM.cfg"/> + <FileResource projectRelativePath="UAAF_main.cfg" relativeURI="productconfigs/NASS/UAAF_main.cfg"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_GenApp_NASS</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>GENAPP_COMPILE_DIAMETER</listItem> + <listItem>GENAPP_LAUNCH_NASS_PROVISIONING</listItem> + </TTCN3preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_Netconf.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_Netconf.tpd new file mode 100644 index 000000000..3130e5d2c --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_Netconf.tpd @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_Netconf</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_Applib_SSH_CNL113766" projectLocationURI="../../../../Libraries/EPTF_Applib_SSH_CNL113766/EPTF_Applib_SSH_CNL113766.tpd"/> + <ReferencedProject name="EPTF_GenApp_Common" projectLocationURI="../common/EPTF_GenApp_Common.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_Netconf_LGen_Definitions.ttcn" relativeURI="EPTF_GenApp_Netconf_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_GenApp_Netconf_LGen_Functions.ttcn" relativeURI="EPTF_GenApp_Netconf_LGen_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>build/EPTF_GenApp_Netconf</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>GENAPP_COMPILE_NETCONF</listItem> + </TTCN3preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>build</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_OCF.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_OCF.tpd new file mode 100644 index 000000000..e736c0ec1 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_OCF.tpd @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_OCF</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_GenApp_DIAMETER" projectLocationURI="../src/diameter/EPTF_GenApp_DIAMETER.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_MainModule.ttcnpp" relativeURI="../src/common/EPTF_GenApp_MainModule.ttcnpp"/> + <FileResource projectRelativePath="OCFSim_main.cfg" relativeURI="productconfigs/OCFSim/OCFSim_main.cfg"/> + <FileResource projectRelativePath="OCFSim_CLL_TestPorts.cfg" relativeURI="productconfigs/OCFSim/OCFSim_CLL_TestPorts.cfg"/> + <FileResource projectRelativePath="OCFSim_DIAMETER_FSM.cfg" relativeURI="productconfigs/OCFSim/OCFSim_DIAMETER_FSM.cfg"/> + <FileResource projectRelativePath="OCFSim_DIAMETER_traffic.cfg" relativeURI="productconfigs/OCFSim/OCFSim_DIAMETER_traffic.cfg"/> + <FileResource projectRelativePath="OCFSim_debug_settings.cfg" relativeURI="productconfigs/OCFSim/OCFSim_debug_settings.cfg"/> + <FileResource projectRelativePath="OCFSim_local_host.cfg" relativeURI="productconfigs/OCFSim/OCFSim_local_host.cfg"/> + <FileResource projectRelativePath="OCFSim_remote_node.cfg" relativeURI="productconfigs/OCFSim/OCFSim_remote_node.cfg"/> + <FileResource projectRelativePath="OCFSim_statistics_settings.cfg" relativeURI="productconfigs/OCFSim/OCFSim_statistics_settings.cfg"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_GenApp_OCF</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>GENAPP_COMPILE_DIAMETER</listItem> + </TTCN3preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_PCRFsim.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_PCRFsim.tpd new file mode 100644 index 000000000..36e33e9df --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_PCRFsim.tpd @@ -0,0 +1,44 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_PCRFsim</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_GenApp_DIAMETER" projectLocationURI="../src/diameter/EPTF_GenApp_DIAMETER.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_MainModule.ttcnpp" relativeURI="../src/common/EPTF_GenApp_MainModule.ttcnpp"/> + <FileResource projectRelativePath="PCRFsim_main.cfg" relativeURI="productconfigs/PCRFsim/PCRFsim_main.cfg"/> + <FileResource projectRelativePath="PCRFsim_FSM.cfg" relativeURI="productconfigs/PCRFsim/PCRFsim_FSM.cfg"/> + <FileResource projectRelativePath="PCRFsim_2_FSM.cfg" relativeURI="productconfigs/PCRFsim/PCRFsim_2_FSM.cfg"/> + <FileResource projectRelativePath="PCRFsim_local_host.cfg" relativeURI="productconfigs/PCRFsim/PCRFsim_local_host.cfg"/> + <FileResource projectRelativePath="PCRFsim_settings.cfg" relativeURI="productconfigs/PCRFsim/PCRFsim_settings.cfg"/> + <FileResource projectRelativePath="PCRFsim_2_settings.cfg" relativeURI="productconfigs/PCRFsim/PCRFsim_2_settings.cfg"/> + <FileResource projectRelativePath="PCRFsim_statistics_settings.cfg" relativeURI="productconfigs/PCRFsim/PCRFsim_statistics_settings.cfg"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_GenApp_PCRFsim</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>GENAPP_COMPILE_DIAMETER</listItem> + </TTCN3preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_PGM.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_PGM.tpd new file mode 100644 index 000000000..348547a5f --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_PGM.tpd @@ -0,0 +1,373 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_PGM</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_GenApp_CAI3G" projectLocationURI="../src/cai3g/EPTF_GenApp_CAI3G.tpd"/> + <ReferencedProject name="EPTF_GenApp_SIP" projectLocationURI="../src/sip/EPTF_GenApp_SIP.tpd"/> + <ReferencedProject name="EPTF_GenApp_XCAP" projectLocationURI="../src/xcap/EPTF_GenApp_XCAP.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="templates" relativeURI="templates"/> + </Folders> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_MainModule.ttcnpp" relativeURI="../src/common/EPTF_GenApp_MainModule.ttcnpp"/> + <FileResource projectRelativePath="PGM_BAT_CAI3G_FSM.cfg" relativeURI="productconfigs/PGM_BAT/PGM_BAT_CAI3G_FSM.cfg"/> + <FileResource projectRelativePath="PGM_BAT_CAI3G_traffic.cfg" relativeURI="productconfigs/PGM_BAT/PGM_BAT_CAI3G_traffic.cfg"/> + <FileResource projectRelativePath="PGM_BAT_CAI3G_traffic_BATgen.cfg" relativeURI="productconfigs/PGM_BAT/PGM_BAT_CAI3G_traffic_BATgen.cfg"/> + <FileResource projectRelativePath="PGM_BAT_CLL_TestPorts.cfg" relativeURI="productconfigs/PGM_BAT/PGM_BAT_CLL_TestPorts.cfg"/> + <FileResource projectRelativePath="PGM_BAT_SIP_FSM.cfg" relativeURI="productconfigs/PGM_BAT/PGM_BAT_SIP_FSM.cfg"/> + <FileResource projectRelativePath="PGM_BAT_SIP_traffic.cfg" relativeURI="productconfigs/PGM_BAT/PGM_BAT_SIP_traffic.cfg"/> + <FileResource projectRelativePath="PGM_BAT_SIP_traffic_BATgen.cfg" relativeURI="productconfigs/PGM_BAT/PGM_BAT_SIP_traffic_BATgen.cfg"/> + <FileResource projectRelativePath="PGM_BAT_XCAP_FSM.cfg" relativeURI="productconfigs/PGM_BAT/PGM_BAT_XCAP_FSM.cfg"/> + <FileResource projectRelativePath="PGM_BAT_XCAP_traffic.cfg" relativeURI="productconfigs/PGM_BAT/PGM_BAT_XCAP_traffic.cfg"/> + <FileResource projectRelativePath="PGM_BAT_XCAP_traffic_BATgen.cfg" relativeURI="productconfigs/PGM_BAT/PGM_BAT_XCAP_traffic_BATgen.cfg"/> + <FileResource projectRelativePath="PGM_BAT_debug_settings.cfg" relativeURI="productconfigs/PGM_BAT/PGM_BAT_debug_settings.cfg"/> + <FileResource projectRelativePath="PGM_BAT_local_host.cfg" relativeURI="productconfigs/PGM_BAT/PGM_BAT_local_host.cfg"/> + <FileResource projectRelativePath="PGM_BAT_local_host_BATgen.cfg" relativeURI="productconfigs/PGM_BAT/PGM_BAT_local_host_BATgen.cfg"/> + <FileResource projectRelativePath="PGM_BAT_main.cfg" relativeURI="productconfigs/PGM_BAT/PGM_BAT_main.cfg"/> + <FileResource projectRelativePath="PGM_BAT_main_titansim.cfg" relativeURI="productconfigs/PGM_BAT/PGM_BAT_main_titansim.cfg"/> + <FileResource projectRelativePath="PGM_BAT_statistics_settings.cfg" relativeURI="productconfigs/PGM_BAT/PGM_BAT_statistics_settings.cfg"/> + <FileResource projectRelativePath="templates/EAS_sip_invite_rfc3262.body" relativeURI="templates/EAS_sip_invite_rfc3262.body"/> + <FileResource projectRelativePath="templates/EAS_sip_invite_rfc3262.header" relativeURI="templates/EAS_sip_invite_rfc3262.header"/> + <FileResource projectRelativePath="templates/ETM_SIP_HTTP.body" relativeURI="templates/ETM_SIP_HTTP.body"/> + <FileResource projectRelativePath="templates/ETM_SIP_HTTP.header" relativeURI="templates/ETM_SIP_HTTP.header"/> + <FileResource projectRelativePath="templates/cai3g_create.header" relativeURI="templates/cai3g_create.header"/> + <FileResource projectRelativePath="templates/cai3g_create_PGM_XDMS_users.body" relativeURI="templates/cai3g_create_PGM_XDMS_users.body"/> + <FileResource projectRelativePath="templates/cai3g_delete.header" relativeURI="templates/cai3g_delete.header"/> + <FileResource projectRelativePath="templates/cai3g_delete_PGM_XDMS_users.body" relativeURI="templates/cai3g_delete_PGM_XDMS_users.body"/> + <FileResource projectRelativePath="templates/http_demoBody.body" relativeURI="templates/http_demoBody.body"/> + <FileResource projectRelativePath="templates/http_demoHeader.header" relativeURI="templates/http_demoHeader.header"/> + <FileResource projectRelativePath="templates/initial_publish.body" relativeURI="templates/initial_publish.body"/> + <FileResource projectRelativePath="templates/initial_publish.header" relativeURI="templates/initial_publish.header"/> + <FileResource projectRelativePath="templates/initial_publish_mwi.body" relativeURI="templates/initial_publish_mwi.body"/> + <FileResource projectRelativePath="templates/initial_publish_mwi.header" relativeURI="templates/initial_publish_mwi.header"/> + <FileResource projectRelativePath="templates/initial_subscribe_to_resourcelist.header" relativeURI="templates/initial_subscribe_to_resourcelist.header"/> + <FileResource projectRelativePath="templates/modify_publish.header" relativeURI="templates/modify_publish.header"/> + <FileResource projectRelativePath="templates/mtas.cai3g_create.body" relativeURI="templates/mtas.cai3g_create.body"/> + <FileResource projectRelativePath="templates/mtas.cai3g_create.header" relativeURI="templates/mtas.cai3g_create.header"/> + <FileResource projectRelativePath="templates/mtas.cai3g_get.body" relativeURI="templates/mtas.cai3g_get.body"/> + <FileResource projectRelativePath="templates/mtas.cai3g_get.header" relativeURI="templates/mtas.cai3g_get.header"/> + <FileResource projectRelativePath="templates/mtas.cai3g_login.body" relativeURI="templates/mtas.cai3g_login.body"/> + <FileResource projectRelativePath="templates/mtas.cai3g_login.header" relativeURI="templates/mtas.cai3g_login.header"/> + <FileResource projectRelativePath="templates/mtas.cai3g_set.body" relativeURI="templates/mtas.cai3g_set.body"/> + <FileResource projectRelativePath="templates/mtas.cai3g_set.header" relativeURI="templates/mtas.cai3g_set.header"/> + <FileResource projectRelativePath="templates/mtas.cns_error_response.body" relativeURI="templates/mtas.cns_error_response.body"/> + <FileResource projectRelativePath="templates/mtas.cns_ok_response.body" relativeURI="templates/mtas.cns_ok_response.body"/> + <FileResource projectRelativePath="templates/mtas.cns_response.header" relativeURI="templates/mtas.cns_response.header"/> + <FileResource projectRelativePath="templates/mtas.xcap_get.body" relativeURI="templates/mtas.xcap_get.body"/> + <FileResource projectRelativePath="templates/mtas.xcap_get.header" relativeURI="templates/mtas.xcap_get.header"/> + <FileResource projectRelativePath="templates/mtas.xcap_put.body" relativeURI="templates/mtas.xcap_put.body"/> + <FileResource projectRelativePath="templates/mtas.xcap_put.header" relativeURI="templates/mtas.xcap_put.header"/> + <FileResource projectRelativePath="templates/ptt_sip_message_ipa_orig_part.header" relativeURI="templates/ptt_sip_message_ipa_orig_part.header"/> + <FileResource projectRelativePath="templates/ptt_vxml_tel_invite_adhoc_orig_contr.header" relativeURI="templates/ptt_vxml_tel_invite_adhoc_orig_contr.header"/> + <FileResource projectRelativePath="templates/refresh_subscribe_to_resourcelist.header" relativeURI="templates/refresh_subscribe_to_resourcelist.header"/> + <FileResource projectRelativePath="templates/titansim.MMAS_sip_invite_rfc3261.header" relativeURI="templates/titansim.MMAS_sip_invite_rfc3261.header"/> + <FileResource projectRelativePath="templates/titansim.MMAS_sip_invite_rfc3262_rfc3261.body" relativeURI="templates/titansim.MMAS_sip_invite_rfc3262_rfc3261.body"/> + <FileResource projectRelativePath="templates/titansim.MMAS_sip_options.header" relativeURI="templates/titansim.MMAS_sip_options.header"/> + <FileResource projectRelativePath="templates/titansim.air_getaccountdetails_OK_response.body" relativeURI="templates/titansim.air_getaccountdetails_OK_response.body"/> + <FileResource projectRelativePath="templates/titansim.air_getaccountdetails_OK_response.header" relativeURI="templates/titansim.air_getaccountdetails_OK_response.header"/> + <FileResource projectRelativePath="templates/titansim.air_updatebalance_OK_response.body" relativeURI="templates/titansim.air_updatebalance_OK_response.body"/> + <FileResource projectRelativePath="templates/titansim.air_updatebalance_OK_response.header" relativeURI="templates/titansim.air_updatebalance_OK_response.header"/> + <FileResource projectRelativePath="templates/titansim.asdp_response.body" relativeURI="templates/titansim.asdp_response.body"/> + <FileResource projectRelativePath="templates/titansim.asdp_response.header" relativeURI="templates/titansim.asdp_response.header"/> + <FileResource projectRelativePath="templates/titansim.bcs_createconfrequest.body" relativeURI="templates/titansim.bcs_createconfrequest.body"/> + <FileResource projectRelativePath="templates/titansim.bcs_createconfrequest.header" relativeURI="templates/titansim.bcs_createconfrequest.header"/> + <FileResource projectRelativePath="templates/titansim.bcs_createmeetingrequest.body" relativeURI="templates/titansim.bcs_createmeetingrequest.body"/> + <FileResource projectRelativePath="templates/titansim.bcs_createmeetingrequest.header" relativeURI="templates/titansim.bcs_createmeetingrequest.header"/> + <FileResource projectRelativePath="templates/titansim.bcs_participant.body" relativeURI="templates/titansim.bcs_participant.body"/> + <FileResource projectRelativePath="templates/titansim.bcs_readconfrequest.body" relativeURI="templates/titansim.bcs_readconfrequest.body"/> + <FileResource projectRelativePath="templates/titansim.bcs_readparticipantsrequest.body" relativeURI="templates/titansim.bcs_readparticipantsrequest.body"/> + <FileResource projectRelativePath="templates/titansim.bcs_readparticipantsrequest.header" relativeURI="templates/titansim.bcs_readparticipantsrequest.header"/> + <FileResource projectRelativePath="templates/titansim.bcs_webbrowser.header" relativeURI="templates/titansim.bcs_webbrowser.header"/> + <FileResource projectRelativePath="templates/titansim.cai3g_create.header" relativeURI="templates/titansim.cai3g_create.header"/> + <FileResource projectRelativePath="templates/titansim.cai3g_create_PGM_XDMS_users.body" relativeURI="templates/titansim.cai3g_create_PGM_XDMS_users.body"/> + <FileResource projectRelativePath="templates/titansim.cai3g_delete.header" relativeURI="templates/titansim.cai3g_delete.header"/> + <FileResource projectRelativePath="templates/titansim.cai3g_delete_PGM_XDMS_users.body" relativeURI="templates/titansim.cai3g_delete_PGM_XDMS_users.body"/> + <FileResource projectRelativePath="templates/titansim.cai3g_generic.header" relativeURI="templates/titansim.cai3g_generic.header"/> + <FileResource projectRelativePath="templates/titansim.cai3g_login.body" relativeURI="templates/titansim.cai3g_login.body"/> + <FileResource projectRelativePath="templates/titansim.cai3g_login.header" relativeURI="templates/titansim.cai3g_login.header"/> + <FileResource projectRelativePath="templates/titansim.ccmp_confrequest.header" relativeURI="templates/titansim.ccmp_confrequest.header"/> + <FileResource projectRelativePath="templates/titansim.ccmp_createconfrequest.body" relativeURI="templates/titansim.ccmp_createconfrequest.body"/> + <FileResource projectRelativePath="templates/titansim.ccmp_deleteconfrequest.body" relativeURI="templates/titansim.ccmp_deleteconfrequest.body"/> + <FileResource projectRelativePath="templates/titansim.ccmp_mediatype.body" relativeURI="templates/titansim.ccmp_mediatype.body"/> + <FileResource projectRelativePath="templates/titansim.ccmp_retrieveconfrequest.body" relativeURI="templates/titansim.ccmp_retrieveconfrequest.body"/> + <FileResource projectRelativePath="templates/titansim.cns_error_response.body" relativeURI="templates/titansim.cns_error_response.body"/> + <FileResource projectRelativePath="templates/titansim.cns_ok_response.body" relativeURI="templates/titansim.cns_ok_response.body"/> + <FileResource projectRelativePath="templates/titansim.cns_response.header" relativeURI="templates/titansim.cns_response.header"/> + <FileResource projectRelativePath="templates/titansim.deregister.header" relativeURI="templates/titansim.deregister.header"/> + <FileResource projectRelativePath="templates/titansim.diameter.HSS.userData" relativeURI="templates/titansim.diameter.HSS.userData"/> + <FileResource projectRelativePath="templates/titansim.etm_sip_200ok_sdp_tc221.body" relativeURI="templates/titansim.etm_sip_200ok_sdp_tc221.body"/> + <FileResource projectRelativePath="templates/titansim.etm_sip_200ok_sdp_tc335.body" relativeURI="templates/titansim.etm_sip_200ok_sdp_tc335.body"/> + <FileResource projectRelativePath="templates/titansim.etm_sip_200ok_tc221.header" relativeURI="templates/titansim.etm_sip_200ok_tc221.header"/> + <FileResource projectRelativePath="templates/titansim.etm_sip_200ok_tc335.header" relativeURI="templates/titansim.etm_sip_200ok_tc335.header"/> + <FileResource projectRelativePath="templates/titansim.etm_sip_invite_sdp_tc221.body" relativeURI="templates/titansim.etm_sip_invite_sdp_tc221.body"/> + <FileResource projectRelativePath="templates/titansim.etm_sip_invite_sdp_tc335.body" relativeURI="templates/titansim.etm_sip_invite_sdp_tc335.body"/> + <FileResource projectRelativePath="templates/titansim.etm_sip_invite_tc221.header" relativeURI="templates/titansim.etm_sip_invite_tc221.header"/> + <FileResource projectRelativePath="templates/titansim.etm_sip_invite_tc335.header" relativeURI="templates/titansim.etm_sip_invite_tc335.header"/> + <FileResource projectRelativePath="templates/titansim.etm_snasip_200ok_mrfc.body" relativeURI="templates/titansim.etm_snasip_200ok_mrfc.body"/> + <FileResource projectRelativePath="templates/titansim.etm_snasip_200ok_mrfc.header" relativeURI="templates/titansim.etm_snasip_200ok_mrfc.header"/> + <FileResource projectRelativePath="templates/titansim.etm_snasip_invite.body" relativeURI="templates/titansim.etm_snasip_invite.body"/> + <FileResource projectRelativePath="templates/titansim.etm_snasip_invite.header" relativeURI="templates/titansim.etm_snasip_invite.header"/> + <FileResource projectRelativePath="templates/titansim.etm_ussd_makecollectcall.body" relativeURI="templates/titansim.etm_ussd_makecollectcall.body"/> + <FileResource projectRelativePath="templates/titansim.etm_ussd_makecollectcall.header" relativeURI="templates/titansim.etm_ussd_makecollectcall.header"/> + <FileResource projectRelativePath="templates/titansim.etm_ussd_showmenu.body" relativeURI="templates/titansim.etm_ussd_showmenu.body"/> + <FileResource projectRelativePath="templates/titansim.etm_ussd_showmenu.header" relativeURI="templates/titansim.etm_ussd_showmenu.header"/> + <FileResource projectRelativePath="templates/titansim.initial_publish.body" relativeURI="templates/titansim.initial_publish.body"/> + <FileResource projectRelativePath="templates/titansim.initial_publish.header" relativeURI="templates/titansim.initial_publish.header"/> + <FileResource projectRelativePath="templates/titansim.initial_publish.message" relativeURI="templates/titansim.initial_publish.message"/> + <FileResource projectRelativePath="templates/titansim.initial_subscribe2presentity.header" relativeURI="templates/titansim.initial_subscribe2presentity.header"/> + <FileResource projectRelativePath="templates/titansim.initial_subscribe2resourcelist.header" relativeURI="templates/titansim.initial_subscribe2resourcelist.header"/> + <FileResource projectRelativePath="templates/titansim.initial_subscribe2watcher_info.header" relativeURI="templates/titansim.initial_subscribe2watcher_info.header"/> + <FileResource projectRelativePath="templates/titansim.invite.body" relativeURI="templates/titansim.invite.body"/> + <FileResource projectRelativePath="templates/titansim.invite.header" relativeURI="templates/titansim.invite.header"/> + <FileResource projectRelativePath="templates/titansim.lrf_ft_401error_response.header" relativeURI="templates/titansim.lrf_ft_401error_response.header"/> + <FileResource projectRelativePath="templates/titansim.lrf_ft_ok_response.body" relativeURI="templates/titansim.lrf_ft_ok_response.body"/> + <FileResource projectRelativePath="templates/titansim.lrf_ft_ok_response.header" relativeURI="templates/titansim.lrf_ft_ok_response.header"/> + <FileResource projectRelativePath="templates/titansim.lrf_tcom_401error_response.header" relativeURI="templates/titansim.lrf_tcom_401error_response.header"/> + <FileResource projectRelativePath="templates/titansim.lrf_tcom_LISAerror_response.body" relativeURI="templates/titansim.lrf_tcom_LISAerror_response.body"/> + <FileResource projectRelativePath="templates/titansim.lrf_tcom_ok_response.body" relativeURI="templates/titansim.lrf_tcom_ok_response.body"/> + <FileResource projectRelativePath="templates/titansim.lrf_tcom_ok_response.header" relativeURI="templates/titansim.lrf_tcom_ok_response.header"/> + <FileResource projectRelativePath="templates/titansim.modify_publish.header" relativeURI="templates/titansim.modify_publish.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc001.183.body" relativeURI="templates/titansim.mss.tc001.183.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc001.183.header" relativeURI="templates/titansim.mss.tc001.183.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc001.200.body" relativeURI="templates/titansim.mss.tc001.200.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc001.200.header" relativeURI="templates/titansim.mss.tc001.200.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc001.ack.1.body" relativeURI="templates/titansim.mss.tc001.ack.1.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc001.ack.1.header" relativeURI="templates/titansim.mss.tc001.ack.1.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc001.ack.header" relativeURI="templates/titansim.mss.tc001.ack.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc001.bye.header" relativeURI="templates/titansim.mss.tc001.bye.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc001.invite.body" relativeURI="templates/titansim.mss.tc001.invite.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc001.invite.header" relativeURI="templates/titansim.mss.tc001.invite.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc001.prack.body" relativeURI="templates/titansim.mss.tc001.prack.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc001.prack.header" relativeURI="templates/titansim.mss.tc001.prack.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc001.reinvite.nosdp.header" relativeURI="templates/titansim.mss.tc001.reinvite.nosdp.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc001.reinvite.sdp.body" relativeURI="templates/titansim.mss.tc001.reinvite.sdp.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc001.reinvite.sdp.header" relativeURI="templates/titansim.mss.tc001.reinvite.sdp.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc002.183.body" relativeURI="templates/titansim.mss.tc002.183.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc002.183.header" relativeURI="templates/titansim.mss.tc002.183.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc002.200.body" relativeURI="templates/titansim.mss.tc002.200.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc002.200.header" relativeURI="templates/titansim.mss.tc002.200.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc002.ack.1.body" relativeURI="templates/titansim.mss.tc002.ack.1.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc002.ack.1.header" relativeURI="templates/titansim.mss.tc002.ack.1.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc002.ack.header" relativeURI="templates/titansim.mss.tc002.ack.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc002.bye.header" relativeURI="templates/titansim.mss.tc002.bye.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc002.invite.body" relativeURI="templates/titansim.mss.tc002.invite.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc002.invite.header" relativeURI="templates/titansim.mss.tc002.invite.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc002.prack.body" relativeURI="templates/titansim.mss.tc002.prack.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc002.prack.header" relativeURI="templates/titansim.mss.tc002.prack.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc002.reinvite.nosdp.header" relativeURI="templates/titansim.mss.tc002.reinvite.nosdp.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc002.reinvite.sdp.body" relativeURI="templates/titansim.mss.tc002.reinvite.sdp.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc002.reinvite.sdp.header" relativeURI="templates/titansim.mss.tc002.reinvite.sdp.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc003.183.body" relativeURI="templates/titansim.mss.tc003.183.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc003.183.header" relativeURI="templates/titansim.mss.tc003.183.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc003.200.body" relativeURI="templates/titansim.mss.tc003.200.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc003.200.header" relativeURI="templates/titansim.mss.tc003.200.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc003.ack.1.body" relativeURI="templates/titansim.mss.tc003.ack.1.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc003.ack.1.header" relativeURI="templates/titansim.mss.tc003.ack.1.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc003.ack.header" relativeURI="templates/titansim.mss.tc003.ack.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc003.bye.header" relativeURI="templates/titansim.mss.tc003.bye.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc003.invite.body" relativeURI="templates/titansim.mss.tc003.invite.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc003.invite.header" relativeURI="templates/titansim.mss.tc003.invite.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc003.prack.body" relativeURI="templates/titansim.mss.tc003.prack.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc003.prack.header" relativeURI="templates/titansim.mss.tc003.prack.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc003.reinvite.nosdp.header" relativeURI="templates/titansim.mss.tc003.reinvite.nosdp.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc003.reinvite.sdp.body" relativeURI="templates/titansim.mss.tc003.reinvite.sdp.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc003.reinvite.sdp.header" relativeURI="templates/titansim.mss.tc003.reinvite.sdp.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc004.180.header" relativeURI="templates/titansim.mss.tc004.180.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc004.183.body" relativeURI="templates/titansim.mss.tc004.183.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc004.183.header" relativeURI="templates/titansim.mss.tc004.183.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc004.200.0.body" relativeURI="templates/titansim.mss.tc004.200.0.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc004.200.0.header" relativeURI="templates/titansim.mss.tc004.200.0.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc004.200.1.header" relativeURI="templates/titansim.mss.tc004.200.1.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc004.ack.1.body" relativeURI="templates/titansim.mss.tc004.ack.1.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc004.ack.1.header" relativeURI="templates/titansim.mss.tc004.ack.1.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc004.ack.header" relativeURI="templates/titansim.mss.tc004.ack.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc004.bye.header" relativeURI="templates/titansim.mss.tc004.bye.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc004.bye.sipi.header" relativeURI="templates/titansim.mss.tc004.bye.sipi.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc004.invite.body" relativeURI="templates/titansim.mss.tc004.invite.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc004.invite.header" relativeURI="templates/titansim.mss.tc004.invite.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc004.invite.sipi.header" relativeURI="templates/titansim.mss.tc004.invite.sipi.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc004.prack.body" relativeURI="templates/titansim.mss.tc004.prack.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc004.prack.header" relativeURI="templates/titansim.mss.tc004.prack.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc004.reinvite.nosdp.header" relativeURI="templates/titansim.mss.tc004.reinvite.nosdp.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc004.reinvite.sdp.body" relativeURI="templates/titansim.mss.tc004.reinvite.sdp.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc004.reinvite.sdp.header" relativeURI="templates/titansim.mss.tc004.reinvite.sdp.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc005.180.header" relativeURI="templates/titansim.mss.tc005.180.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc005.183.body" relativeURI="templates/titansim.mss.tc005.183.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc005.183.header" relativeURI="templates/titansim.mss.tc005.183.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc005.200.0.body" relativeURI="templates/titansim.mss.tc005.200.0.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc005.200.0.header" relativeURI="templates/titansim.mss.tc005.200.0.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc005.200.1.header" relativeURI="templates/titansim.mss.tc005.200.1.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc005.200.2.header" relativeURI="templates/titansim.mss.tc005.200.2.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc005.ack.1.body" relativeURI="templates/titansim.mss.tc005.ack.1.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc005.ack.1.header" relativeURI="templates/titansim.mss.tc005.ack.1.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc005.ack.header" relativeURI="templates/titansim.mss.tc005.ack.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc005.bye.header" relativeURI="templates/titansim.mss.tc005.bye.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc005.bye.sipi.header" relativeURI="templates/titansim.mss.tc005.bye.sipi.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc005.invite.body" relativeURI="templates/titansim.mss.tc005.invite.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc005.invite.header" relativeURI="templates/titansim.mss.tc005.invite.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc005.invite.sipi.header" relativeURI="templates/titansim.mss.tc005.invite.sipi.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc005.prack.body" relativeURI="templates/titansim.mss.tc005.prack.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc005.prack.header" relativeURI="templates/titansim.mss.tc005.prack.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc005.reinvite.nosdp.header" relativeURI="templates/titansim.mss.tc005.reinvite.nosdp.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc005.reinvite.sdp.body" relativeURI="templates/titansim.mss.tc005.reinvite.sdp.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc005.reinvite.sdp.header" relativeURI="templates/titansim.mss.tc005.reinvite.sdp.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc006.180.header" relativeURI="templates/titansim.mss.tc006.180.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc006.183.body" relativeURI="templates/titansim.mss.tc006.183.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc006.183.header" relativeURI="templates/titansim.mss.tc006.183.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc006.200.0.body" relativeURI="templates/titansim.mss.tc006.200.0.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc006.200.0.header" relativeURI="templates/titansim.mss.tc006.200.0.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc006.200.1.header" relativeURI="templates/titansim.mss.tc006.200.1.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc006.ack.1.body" relativeURI="templates/titansim.mss.tc006.ack.1.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc006.ack.1.header" relativeURI="templates/titansim.mss.tc006.ack.1.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc006.ack.header" relativeURI="templates/titansim.mss.tc006.ack.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc006.bye.header" relativeURI="templates/titansim.mss.tc006.bye.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc006.bye.sipi.header" relativeURI="templates/titansim.mss.tc006.bye.sipi.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc006.invite.body" relativeURI="templates/titansim.mss.tc006.invite.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc006.invite.header" relativeURI="templates/titansim.mss.tc006.invite.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc006.invite.sipi.header" relativeURI="templates/titansim.mss.tc006.invite.sipi.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc006.prack.body" relativeURI="templates/titansim.mss.tc006.prack.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc006.prack.header" relativeURI="templates/titansim.mss.tc006.prack.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc006.reinvite.nosdp.header" relativeURI="templates/titansim.mss.tc006.reinvite.nosdp.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc006.reinvite.sdp.body" relativeURI="templates/titansim.mss.tc006.reinvite.sdp.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc006.reinvite.sdp.header" relativeURI="templates/titansim.mss.tc006.reinvite.sdp.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc007.180.header" relativeURI="templates/titansim.mss.tc007.180.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc007.183.body" relativeURI="templates/titansim.mss.tc007.183.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc007.183.header" relativeURI="templates/titansim.mss.tc007.183.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc007.200.0.body" relativeURI="templates/titansim.mss.tc007.200.0.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc007.200.0.header" relativeURI="templates/titansim.mss.tc007.200.0.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc007.200.1.header" relativeURI="templates/titansim.mss.tc007.200.1.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc007.200.2.header" relativeURI="templates/titansim.mss.tc007.200.2.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc007.ack.1.body" relativeURI="templates/titansim.mss.tc007.ack.1.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc007.ack.1.header" relativeURI="templates/titansim.mss.tc007.ack.1.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc007.ack.header" relativeURI="templates/titansim.mss.tc007.ack.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc007.bye.header" relativeURI="templates/titansim.mss.tc007.bye.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc007.bye.sipi.header" relativeURI="templates/titansim.mss.tc007.bye.sipi.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc007.invite.body" relativeURI="templates/titansim.mss.tc007.invite.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc007.invite.header" relativeURI="templates/titansim.mss.tc007.invite.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc007.invite.sipi.header" relativeURI="templates/titansim.mss.tc007.invite.sipi.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc007.prack.body" relativeURI="templates/titansim.mss.tc007.prack.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc007.prack.header" relativeURI="templates/titansim.mss.tc007.prack.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc007.reinvite.nosdp.header" relativeURI="templates/titansim.mss.tc007.reinvite.nosdp.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc007.reinvite.sdp.body" relativeURI="templates/titansim.mss.tc007.reinvite.sdp.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc007.reinvite.sdp.header" relativeURI="templates/titansim.mss.tc007.reinvite.sdp.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc007.update.header" relativeURI="templates/titansim.mss.tc007.update.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc008.183.body" relativeURI="templates/titansim.mss.tc008.183.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc008.183.header" relativeURI="templates/titansim.mss.tc008.183.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc008.ack.1.body" relativeURI="templates/titansim.mss.tc008.ack.1.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc008.ack.1.header" relativeURI="templates/titansim.mss.tc008.ack.1.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc008.ack.header" relativeURI="templates/titansim.mss.tc008.ack.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc008.bye.header" relativeURI="templates/titansim.mss.tc008.bye.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc008.invite.body" relativeURI="templates/titansim.mss.tc008.invite.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc008.invite.header" relativeURI="templates/titansim.mss.tc008.invite.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc008.prack.body" relativeURI="templates/titansim.mss.tc008.prack.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc008.prack.header" relativeURI="templates/titansim.mss.tc008.prack.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc008.reinvite.nosdp.header" relativeURI="templates/titansim.mss.tc008.reinvite.nosdp.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc008.reinvite.sdp.body" relativeURI="templates/titansim.mss.tc008.reinvite.sdp.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc008.reinvite.sdp.header" relativeURI="templates/titansim.mss.tc008.reinvite.sdp.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc009.183.body" relativeURI="templates/titansim.mss.tc009.183.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc009.183.header" relativeURI="templates/titansim.mss.tc009.183.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc009.ack.1.body" relativeURI="templates/titansim.mss.tc009.ack.1.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc009.ack.1.header" relativeURI="templates/titansim.mss.tc009.ack.1.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc009.ack.header" relativeURI="templates/titansim.mss.tc009.ack.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc009.bye.header" relativeURI="templates/titansim.mss.tc009.bye.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc009.invite.body" relativeURI="templates/titansim.mss.tc009.invite.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc009.invite.header" relativeURI="templates/titansim.mss.tc009.invite.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc009.prack.body" relativeURI="templates/titansim.mss.tc009.prack.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc009.prack.header" relativeURI="templates/titansim.mss.tc009.prack.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc009.reinvite.nosdp.header" relativeURI="templates/titansim.mss.tc009.reinvite.nosdp.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc009.reinvite.sdp.body" relativeURI="templates/titansim.mss.tc009.reinvite.sdp.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc009.reinvite.sdp.header" relativeURI="templates/titansim.mss.tc009.reinvite.sdp.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc010.183.body" relativeURI="templates/titansim.mss.tc010.183.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc010.183.header" relativeURI="templates/titansim.mss.tc010.183.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc010.ack.1.body" relativeURI="templates/titansim.mss.tc010.ack.1.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc010.ack.1.header" relativeURI="templates/titansim.mss.tc010.ack.1.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc010.ack.header" relativeURI="templates/titansim.mss.tc010.ack.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc010.bye.header" relativeURI="templates/titansim.mss.tc010.bye.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc010.invite.body" relativeURI="templates/titansim.mss.tc010.invite.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc010.invite.header" relativeURI="templates/titansim.mss.tc010.invite.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc010.prack.body" relativeURI="templates/titansim.mss.tc010.prack.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc010.prack.header" relativeURI="templates/titansim.mss.tc010.prack.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc010.reinvite.nosdp.header" relativeURI="templates/titansim.mss.tc010.reinvite.nosdp.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc010.reinvite.sdp.body" relativeURI="templates/titansim.mss.tc010.reinvite.sdp.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc010.reinvite.sdp.header" relativeURI="templates/titansim.mss.tc010.reinvite.sdp.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc011.181.header" relativeURI="templates/titansim.mss.tc011.181.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc011.183.body" relativeURI="templates/titansim.mss.tc011.183.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc011.183.header" relativeURI="templates/titansim.mss.tc011.183.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc011.ack.1.body" relativeURI="templates/titansim.mss.tc011.ack.1.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc011.ack.1.header" relativeURI="templates/titansim.mss.tc011.ack.1.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc011.ack.header" relativeURI="templates/titansim.mss.tc011.ack.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc011.bye.header" relativeURI="templates/titansim.mss.tc011.bye.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc011.invite.body" relativeURI="templates/titansim.mss.tc011.invite.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc011.invite.header" relativeURI="templates/titansim.mss.tc011.invite.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc011.prack.body" relativeURI="templates/titansim.mss.tc011.prack.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc011.prack.header" relativeURI="templates/titansim.mss.tc011.prack.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc011.reinvite.nosdp.header" relativeURI="templates/titansim.mss.tc011.reinvite.nosdp.header"/> + <FileResource projectRelativePath="templates/titansim.mss.tc011.reinvite.sdp.body" relativeURI="templates/titansim.mss.tc011.reinvite.sdp.body"/> + <FileResource projectRelativePath="templates/titansim.mss.tc011.reinvite.sdp.header" relativeURI="templates/titansim.mss.tc011.reinvite.sdp.header"/> + <FileResource projectRelativePath="templates/titansim.notify_mwias.body" relativeURI="templates/titansim.notify_mwias.body"/> + <FileResource projectRelativePath="templates/titansim.notify_mwias.header" relativeURI="templates/titansim.notify_mwias.header"/> + <FileResource projectRelativePath="templates/titansim.parlayx_endcallsessionrequest.body" relativeURI="templates/titansim.parlayx_endcallsessionrequest.body"/> + <FileResource projectRelativePath="templates/titansim.parlayx_endcallsessionrequest.header" relativeURI="templates/titansim.parlayx_endcallsessionrequest.header"/> + <FileResource projectRelativePath="templates/titansim.parlayx_getcallsessioninformationrequest.body" relativeURI="templates/titansim.parlayx_getcallsessioninformationrequest.body"/> + <FileResource projectRelativePath="templates/titansim.parlayx_getcallsessioninformationrequest.header" relativeURI="templates/titansim.parlayx_getcallsessioninformationrequest.header"/> + <FileResource projectRelativePath="templates/titansim.parlayx_handlecallednumberresponse.body" relativeURI="templates/titansim.parlayx_handlecallednumberresponse.body"/> + <FileResource projectRelativePath="templates/titansim.parlayx_handlecallednumberresponse.header" relativeURI="templates/titansim.parlayx_handlecallednumberresponse.header"/> + <FileResource projectRelativePath="templates/titansim.parlayx_makecallsessionrequest.body" relativeURI="templates/titansim.parlayx_makecallsessionrequest.body"/> + <FileResource projectRelativePath="templates/titansim.parlayx_makecallsessionrequest.header" relativeURI="templates/titansim.parlayx_makecallsessionrequest.header"/> + <FileResource projectRelativePath="templates/titansim.parlayx_response503.header" relativeURI="templates/titansim.parlayx_response503.header"/> + <FileResource projectRelativePath="templates/titansim.ptt_sip_message_ipa_orig_part.header" relativeURI="templates/titansim.ptt_sip_message_ipa_orig_part.header"/> + <FileResource projectRelativePath="templates/titansim.refresh_subscribe2presentity.header" relativeURI="templates/titansim.refresh_subscribe2presentity.header"/> + <FileResource projectRelativePath="templates/titansim.refresh_subscribe2resourcelist.header" relativeURI="templates/titansim.refresh_subscribe2resourcelist.header"/> + <FileResource projectRelativePath="templates/titansim.refresh_subscribe2watcher_info.header" relativeURI="templates/titansim.refresh_subscribe2watcher_info.header"/> + <FileResource projectRelativePath="templates/titansim.register.header" relativeURI="templates/titansim.register.header"/> + <FileResource projectRelativePath="templates/titansim.trafficadvisor_collectcall_OK_response.body" relativeURI="templates/titansim.trafficadvisor_collectcall_OK_response.body"/> + <FileResource projectRelativePath="templates/titansim.trafficadvisor_collectcall_OK_response.header" relativeURI="templates/titansim.trafficadvisor_collectcall_OK_response.header"/> + <FileResource projectRelativePath="templates/titansim.xcap_caps_get.header" relativeURI="templates/titansim.xcap_caps_get.header"/> + <FileResource projectRelativePath="templates/titansim.xcap_directory_get.header" relativeURI="templates/titansim.xcap_directory_get.header"/> + <FileResource projectRelativePath="templates/titansim.xcap_hdrstate_get_compose_doc.header" relativeURI="templates/titansim.xcap_hdrstate_get_compose_doc.header"/> + <FileResource projectRelativePath="templates/titansim.xcap_hdrstate_put_compose_doc.body" relativeURI="templates/titansim.xcap_hdrstate_put_compose_doc.body"/> + <FileResource projectRelativePath="templates/titansim.xcap_hdrstate_put_compose_doc.header" relativeURI="templates/titansim.xcap_hdrstate_put_compose_doc.header"/> + <FileResource projectRelativePath="templates/titansim.xcap_presence_get.header" relativeURI="templates/titansim.xcap_presence_get.header"/> + <FileResource projectRelativePath="templates/titansim.xcap_presence_put.body" relativeURI="templates/titansim.xcap_presence_put.body"/> + <FileResource projectRelativePath="templates/titansim.xcap_presence_put.header" relativeURI="templates/titansim.xcap_presence_put.header"/> + <FileResource projectRelativePath="templates/titansim.xcap_rls_get.header" relativeURI="templates/titansim.xcap_rls_get.header"/> + <FileResource projectRelativePath="templates/titansim.xcap_shared_14_contacts_delete_one_contact_put.body" relativeURI="templates/titansim.xcap_shared_14_contacts_delete_one_contact_put.body"/> + <FileResource projectRelativePath="templates/titansim.xcap_shared_15_contacts_put.body" relativeURI="templates/titansim.xcap_shared_15_contacts_put.body"/> + <FileResource projectRelativePath="templates/titansim.xcap_shared_get.header" relativeURI="templates/titansim.xcap_shared_get.header"/> + <FileResource projectRelativePath="templates/titansim.xcap_shared_put.header" relativeURI="templates/titansim.xcap_shared_put.header"/> + <FileResource projectRelativePath="templates/xcap_ap_client_shared_put.header" relativeURI="templates/xcap_ap_client_shared_put.header"/> + <FileResource projectRelativePath="templates/xcap_shared_14_contacts_delete_one_contact_put.body" relativeURI="templates/xcap_shared_14_contacts_delete_one_contact_put.body"/> + <FileResource projectRelativePath="templates/xcap_shared_15_contacts_put.body" relativeURI="templates/xcap_shared_15_contacts_put.body"/> + <FileResource projectRelativePath="templates/xcap_shared_put.body" relativeURI="templates/xcap_shared_put.body"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_GenApp_PGM</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>GENAPP_COMPILE_CAI3G</listItem> + <listItem>GENAPP_COMPILE_SIP</listItem> + <listItem>GENAPP_COMPILE_XCAP</listItem> + </TTCN3preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_PGM_HTTP.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_PGM_HTTP.tpd new file mode 100644 index 000000000..97cd176d5 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_PGM_HTTP.tpd @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_PGM_HTTP</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_GenApp_HTTP" projectLocationURI="EPTF_GenApp_HTTP.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_PGM_HTTP_ExternalFunctions.cc" relativeURI="EPTF_GenApp_PGM_HTTP_ExternalFunctions.cc"/> + <FileResource projectRelativePath="EPTF_GenApp_PGM_HTTP_LGen_Definitions.ttcn" relativeURI="EPTF_GenApp_PGM_HTTP_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_GenApp_PGM_HTTP_LGen_Functions.ttcn" relativeURI="EPTF_GenApp_PGM_HTTP_LGen_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_GenApp_PGM_HTTP</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_PGM_SIP.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_PGM_SIP.tpd new file mode 100644 index 000000000..5bfc98ddf --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_PGM_SIP.tpd @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_PGM_SIP</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_GenApp_CSCF" projectLocationURI="EPTF_GenApp_CSCF.tpd"/> + <ReferencedProject name="EPTF_GenApp_PGM_HTTP" projectLocationURI="../http/EPTF_GenApp_PGM_HTTP.tpd"/> + <ReferencedProject name="EPTF_GenApp_SIP" projectLocationURI="EPTF_GenApp_SIP.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_PGM_SIP_Definitions.ttcn" relativeURI="EPTF_GenApp_PGM_SIP_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_GenApp_PGM_SIP_Functions.ttcn" relativeURI="EPTF_GenApp_PGM_SIP_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_GenApp_PGM_SIP</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ParlayX.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ParlayX.tpd new file mode 100644 index 000000000..75528c4bc --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_ParlayX.tpd @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_ParlayX</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_GenApp_HTTP" projectLocationURI="EPTF_GenApp_HTTP.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_ParlayX_DS_Definitions.ttcn" relativeURI="EPTF_GenApp_ParlayX_DS_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_GenApp_ParlayX_DS_Functions.ttcn" relativeURI="EPTF_GenApp_ParlayX_DS_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_GenApp_ParlayX_LGen_Definitions.ttcn" relativeURI="EPTF_GenApp_ParlayX_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_GenApp_ParlayX_LGen_Functions.ttcn" relativeURI="EPTF_GenApp_ParlayX_LGen_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <GNUMake>true</GNUMake> + <targetExecutable>build/EPTF_GenApp_ParlayX</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>build</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_RACF.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_RACF.tpd new file mode 100644 index 000000000..903f8e74b --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_RACF.tpd @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_RACF</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_GenApp_DIAMETER" projectLocationURI="../src/diameter/EPTF_GenApp_DIAMETER.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_MainModule.ttcnpp" relativeURI="../src/common/EPTF_GenApp_MainModule.ttcnpp"/> + <FileResource projectRelativePath="RACF_main.cfg" relativeURI="productconfigs/NASS/RACF_main.cfg"/> + <FileResource projectRelativePath="RACF_Diameter_traffic.cfg" relativeURI="productconfigs/NASS/RACF_Diameter_traffic.cfg"/> + <FileResource projectRelativePath="RACF_Diameter_FSM.cfg" relativeURI="productconfigs/NASS/RACF_Diameter_FSM.cfg"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_GenApp_RACF</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>GENAPP_COMPILE_DIAMETER</listItem> + </TTCN3preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_SCP.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_SCP.tpd new file mode 100644 index 000000000..054b25cfd --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_SCP.tpd @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_SCP</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_Applib_CAP_v2_CNL113662" projectLocationURI="../../../../Libraries/EPTF_Applib_CAP_CNL113662/EPTF_Applib_CAP_v2_CNL113662.tpd"/> + <ReferencedProject name="EPTF_CLL_Transport_CommPortIPL4" projectLocationURI="../../../../Libraries/EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_Transport_CommPortIPL4.tpd"/> + <ReferencedProject name="EPTF_GenApp_CAPv2" projectLocationURI="EPTF_GenApp_CAPv2.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_SCP_LGen_Definitions.ttcn" relativeURI="EPTF_GenApp_SCP_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_GenApp_SCP_LGen_Functions.ttcn" relativeURI="EPTF_GenApp_SCP_LGen_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>build/EPTF_GenApp_SCP</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>build</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_SIP.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_SIP.tpd new file mode 100644 index 000000000..72e366610 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_SIP.tpd @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_SIP</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_Applib_SIP_CNL113522" projectLocationURI="../../../../Libraries/EPTF_Applib_SIP_CNL113522/EPTF_Applib_SIP_CNL113522.tpd"/> + <ReferencedProject name="EPTF_GenApp_Common" projectLocationURI="../common/EPTF_GenApp_Common.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_SIP_Definitions.ttcn" relativeURI="EPTF_GenApp_SIP_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_GenApp_SIP_Functions.ttcn" relativeURI="EPTF_GenApp_SIP_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <GNUMake>true</GNUMake> + <targetExecutable>build/EPTF_GenApp_SIP</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>build</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_SNA.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_SNA.tpd new file mode 100644 index 000000000..4e1e0dbc1 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_SNA.tpd @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_SNA</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_GenApp_HTTP" projectLocationURI="../EPTF_GenApp_HTTP.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_SNA_LGen_Definitions.ttcn" relativeURI="EPTF_GenApp_SNA_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_GenApp_SNA_LGen_Functions.ttcn" relativeURI="EPTF_GenApp_SNA_LGen_Functions.ttcn"/> + <FileResource projectRelativePath="ngin_ericsson_com_sna_types_v1_0.ttcn" relativeURI="ngin_ericsson_com_sna_types_v1_0.ttcn"/> + <FileResource projectRelativePath="schemas_xmlsoap_org_soap_envelope.ttcn" relativeURI="schemas_xmlsoap_org_soap_envelope.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>build/EPTF_GenApp_SNA</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>build</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_SOAP.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_SOAP.tpd new file mode 100644 index 000000000..dbddbe13e --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_SOAP.tpd @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_SOAP</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_Applib_SOAP_CNL113620" projectLocationURI="../../../../Libraries/EPTF_Applib_SOAP_CNL113620/EPTF_Applib_SOAP_CNL113620.tpd"/> + <ReferencedProject name="EPTF_GenApp_Common" projectLocationURI="../common/EPTF_GenApp_Common.tpd"/> + <ReferencedProject name="EPTF_GenApp_HTTP" projectLocationURI="../http/EPTF_GenApp_HTTP.tpd"/> + <ReferencedProject name="TCCUsefulFunctions_CNL113472_TitanSim" projectLocationURI="../../../../Libraries/TCCUsefulFunctions_CNL113472/TCCUsefulFunctions_CNL113472_TitanSim.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_SOAP_LGen_Definitions.ttcn" relativeURI="EPTF_GenApp_SOAP_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_GenApp_SOAP_LGen_Functions.ttcn" relativeURI="EPTF_GenApp_SOAP_LGen_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <GNUMake>true</GNUMake> + <targetExecutable>build/EPTF_GenApp_SOAP</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>build</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_UAAF.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_UAAF.tpd new file mode 100644 index 000000000..4252b8fb8 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_UAAF.tpd @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_UAAF</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_GenApp_DIAMETER" projectLocationURI="../src/diameter/EPTF_GenApp_DIAMETER.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_MainModule.ttcnpp" relativeURI="../src/common/EPTF_GenApp_MainModule.ttcnpp"/> + <FileResource projectRelativePath="UAAF_main.cfg" relativeURI="productconfigs/NASS/UAAF_main.cfg"/> + <FileResource projectRelativePath="UAAF_Diameter_traffic.cfg" relativeURI="productconfigs/NASS/UAAF_Diameter_traffic_traffic.cfg"/> + <FileResource projectRelativePath="UAAF_Diameter_FSM.cfg" relativeURI="productconfigs/NASS/UAAF_Diameter_FSM.cfg"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <targetExecutable>bin/EPTF_GenApp_UAAF</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>GENAPP_COMPILE_DIAMETER</listItem> + <listItem>GENAPP_LAUNCH_NASS_PROVISIONING</listItem> + </TTCN3preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_USSD.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_USSD.tpd new file mode 100644 index 000000000..b10bb907b --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_USSD.tpd @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_USSD</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_GenApp_HTTP" projectLocationURI="EPTF_GenApp_HTTP.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_USSD_LGen_Definitions.ttcn" relativeURI="EPTF_GenApp_USSD_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_GenApp_USSD_LGen_Functions.ttcn" relativeURI="EPTF_GenApp_USSD_LGen_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>build/EPTF_GenApp_USSD</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>build</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_UserPlane.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_UserPlane.tpd new file mode 100644 index 000000000..9254ede79 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_UserPlane.tpd @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_UserPlane</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_Applib_UserPlane_CNL113724" projectLocationURI="../../../../Libraries/EPTF_Applib_UserPlane_CNL113724/EPTF_Applib_UserPlane_CNL113724.tpd"/> + <ReferencedProject name="EPTF_GenApp_Common" projectLocationURI="../common/EPTF_GenApp_Common.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_UserPlane_Common_Definitions.ttcn" relativeURI="EPTF_GenApp_UserPlane_Common_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_GenApp_UserPlane_Common_Functions.ttcn" relativeURI="EPTF_GenApp_UserPlane_Common_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_GenApp_UserPlane_MLSim_Definitions.ttcn" relativeURI="EPTF_GenApp_UserPlane_MLSim_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_GenApp_UserPlane_MLSim_Functions.ttcn" relativeURI="EPTF_GenApp_UserPlane_MLSim_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_GenApp_UserPlane_MSRP_Definitions.ttcn" relativeURI="EPTF_GenApp_UserPlane_MSRP_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_GenApp_UserPlane_MSRP_Functions.ttcn" relativeURI="EPTF_GenApp_UserPlane_MSRP_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_GenApp_UserPlane_UPload_Definitions.ttcn" relativeURI="EPTF_GenApp_UserPlane_UPload_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_GenApp_UserPlane_UPload_Functions.ttcn" relativeURI="EPTF_GenApp_UserPlane_UPload_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>build/EPTF_GenApp_UserPlane</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>build</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_VMS.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_VMS.tpd new file mode 100644 index 000000000..95b0d151a --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_VMS.tpd @@ -0,0 +1,44 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_VMS</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_GenApp_SIP" projectLocationURI="../src/sip/EPTF_GenApp_SIP.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_MainModule.ttcnpp" relativeURI="../src/common/EPTF_GenApp_MainModule.ttcnpp"/> + <FileResource projectRelativePath="VMSSim_CLL_TestPorts.cfg" relativeURI="productconfigs/VMSSim/VMSSim_CLL_TestPorts.cfg"/> + <FileResource projectRelativePath="VMSSim_SIP_FSM.cfg" relativeURI="productconfigs/VMSSim/VMSSim_SIP_FSM.cfg"/> + <FileResource projectRelativePath="VMSSim_SIP_settings.cfg" relativeURI="productconfigs/VMSSim/VMSSim_SIP_settings.cfg"/> + <FileResource projectRelativePath="VMSSim_debug_settings.cfg" relativeURI="productconfigs/VMSSim/VMSSim_debug_settings.cfg"/> + <FileResource projectRelativePath="VMSSim_local_host.cfg" relativeURI="productconfigs/VMSSim/VMSSim_local_host.cfg"/> + <FileResource projectRelativePath="VMSSim_main.cfg" relativeURI="productconfigs/VMSSim/VMSSim_main.cfg"/> + <FileResource projectRelativePath="VMSSim_remote_node.cfg" relativeURI="productconfigs/VMSSim/VMSSim_remote_node.cfg"/> + <FileResource projectRelativePath="VMSSim_statistics_settings.cfg" relativeURI="productconfigs/VMSSim/VMSSim_statistics_settings.cfg"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/EPTF_GenApp_VMS</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>GENAPP_COMPILE_MWIAS</listItem> + </TTCN3preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_VXML.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_VXML.tpd new file mode 100644 index 000000000..d2d48f96b --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_VXML.tpd @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_VXML</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_Applib_VXML_CNL113565" projectLocationURI="../../../../Libraries/EPTF_Applib_VXML_CNL113565/EPTF_Applib_VXML_CNL113565.tpd"/> + <ReferencedProject name="EPTF_GenApp_Common" projectLocationURI="../common/EPTF_GenApp_Common.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_VXML_LGen_Definitions.ttcn" relativeURI="EPTF_GenApp_VXML_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_GenApp_VXML_LGen_Functions.ttcn" relativeURI="EPTF_GenApp_VXML_LGen_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>build/EPTF_GenApp_VXML</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>build</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_WCE_HTTP_Client.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_WCE_HTTP_Client.tpd new file mode 100644 index 000000000..267698b32 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_WCE_HTTP_Client.tpd @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_WCE_HTTP_Client</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_GenApp_HTTP" projectLocationURI="EPTF_GenApp_HTTP.tpd"/> + <ReferencedProject name="JSON_v07_2006_CNL113676" projectLocationURI="../../../../ProtocolModules/JSON_v07_2006_CNL113676/JSON_v07_2006_CNL113676.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_WCE_HTTP_Client_LGen_Definitions.ttcn" relativeURI="EPTF_GenApp_WCE_HTTP_Client_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_GenApp_WCE_HTTP_Client_LGen_Functions.ttcn" relativeURI="EPTF_GenApp_WCE_HTTP_Client_LGen_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EPTF_GenApp_WCE_HTTP_Client</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_XCAP.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_XCAP.tpd new file mode 100644 index 000000000..8bc6f8187 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_GenApp_XCAP.tpd @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_GenApp_XCAP</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_Applib_XCAP_CNL113534" projectLocationURI="../../../../Libraries/EPTF_Applib_XCAP_CNL113534/EPTF_Applib_XCAP_CNL113534.tpd"/> + <ReferencedProject name="EPTF_GenApp_Common" projectLocationURI="../common/EPTF_GenApp_Common.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_GenApp_XCAP_LGen_Definitions.ttcn" relativeURI="EPTF_GenApp_XCAP_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_GenApp_XCAP_LGen_Functions.ttcn" relativeURI="EPTF_GenApp_XCAP_LGen_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <GNUMake>true</GNUMake> + <targetExecutable>build/EPTF_GenApp_XCAP</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>GENAPP_COMPILE_XCAP</listItem> + </TTCN3preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>build</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EPTF_ILog_demo.tpd b/regression_test/XML/tpdValidTest/tpdTest/EPTF_ILog_demo.tpd new file mode 100644 index 000000000..dd62bc23b --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EPTF_ILog_demo.tpd @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EPTF_ILog_demo</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_ILog" projectLocationURI="../../src/ILog/EPTF_CLL_ILog.tpd"/> + <ReferencedProject name="EPTF_CLL_LGenBase" projectLocationURI="../../src/LGenBase/EPTF_CLL_LGenBase.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="EPTF_ILog_Applib_Definitions.ttcn" relativeURI="EPTF_ILog_Applib_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_ILog_Applib_Functions.ttcn" relativeURI="EPTF_ILog_Applib_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_ILog_Application_Definitions.ttcn" relativeURI="EPTF_ILog_Application_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_ILog_Application_Functions.ttcn" relativeURI="EPTF_ILog_Application_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_ILog_Transport_Definitions.ttcn" relativeURI="EPTF_ILog_Transport_Definitions.ttcn"/> + <FileResource projectRelativePath="EPTF_ILog_Transport_Functions.ttcn" relativeURI="EPTF_ILog_Transport_Functions.ttcn"/> + <FileResource projectRelativePath="EPTF_ILog_demo.cfg" relativeURI="EPTF_ILog_demo.cfg"/> + <FileResource projectRelativePath="EPTF_ILog_demo.ttcn" relativeURI="EPTF_ILog_demo.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/EPTF_ILog_demo</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <globalConstant>c_.*</globalConstant> + </NamingCoventions> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/EricssonRTC_CNL113414.tpd b/regression_test/XML/tpdValidTest/tpdTest/EricssonRTC_CNL113414.tpd new file mode 100644 index 000000000..a9df75ded --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/EricssonRTC_CNL113414.tpd @@ -0,0 +1,67 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: EricssonRTC_CNL113414.tpd + Description: tpd project file + Rev: R5A02 + Prodnr: CNL 113 414 + Updated: 2012-04-03 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>EricssonRTC_CNL113414</ProjectName> + <ReferencedProjects> + <ReferencedProject name="MAP_v7.12.0_CNL113635" projectLocationURI="../MAP_v7.12.0_CNL113635/MAP_v7.12.0_CNL113635.tpd"/> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/> + <ReferencedProject name="ROSE_CNL113369" projectLocationURI="../ROSE_CNL113369/ROSE_CNL113369.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/EricssonRTC_CNL113414_FS.pdf" relativeURI="doc/EricssonRTC_CNL113414_FS.pdf"/> + <FileResource projectRelativePath="doc/EricssonRTC_CNL113414_PRI.pdf" relativeURI="doc/EricssonRTC_CNL113414_PRI.pdf"/> + <FileResource projectRelativePath="doc/EricssonRTC_CNL113414_UG.pdf" relativeURI="doc/EricssonRTC_CNL113414_UG.pdf"/> + <FileResource projectRelativePath="src/EricssonRTC_EncDec.cc" relativeURI="src/EricssonRTC_EncDec.cc"/> + <FileResource projectRelativePath="src/EricssonRTC_PDU_Defs.asn" relativeURI="src/EricssonRTC_PDU_Defs.asn"/> + <FileResource projectRelativePath="src/EricssonRTC_ReferenceNumber.asn" relativeURI="src/EricssonRTC_ReferenceNumber.asn"/> + <FileResource projectRelativePath="src/EricssonRTC_Types.ttcn" relativeURI="src/EricssonRTC_Types.ttcn"/> + <FileResource projectRelativePath="src/EricssonRTC_U_ABORT_Data.asn" relativeURI="src/EricssonRTC_U_ABORT_Data.asn"/> + <FileResource projectRelativePath="src/EricssonRTC_object_identifiers.asn" relativeURI="src/EricssonRTC_object_identifiers.asn"/> + <FileResource projectRelativePath="src/EricssonRTC_ops_args.asn" relativeURI="src/EricssonRTC_ops_args.asn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/EricssonRTC_CNL113414</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/Ericsson_INAP_CS1plus_CNL113356.tpd b/regression_test/XML/tpdValidTest/tpdTest/Ericsson_INAP_CS1plus_CNL113356.tpd new file mode 100644 index 000000000..7c2637097 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/Ericsson_INAP_CS1plus_CNL113356.tpd @@ -0,0 +1,66 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: Ericsson_INAP_CS1plus_CNL113356.tpd + Description: tpd project file + Rev: R9B01 + Prodnr: CNL 113 356 + Updated: 2012-05-22 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>Ericsson_INAP_CS1plus_CNL113356</ProjectName> + <ReferencedProjects> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/> + <ReferencedProject name="ROSE_CNL113369" projectLocationURI="../ROSE_CNL113369/ROSE_CNL113369.tpd"/> + <ReferencedProject name="TCAPasp_CNL113349" projectLocationURI="../../TestPorts/TCAPasp_CNL113349/TCAPasp_CNL113349.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="Core_INAP_CS1_ApplicationContexts.asn" relativeURI="src/Core_INAP_CS1_ApplicationContexts.asn"/> + <FileResource projectRelativePath="Core_INAP_CS1_Codes.asn" relativeURI="src/Core_INAP_CS1_Codes.asn"/> + <FileResource projectRelativePath="Core_INAP_CS1_DataTypes.asn" relativeURI="src/Core_INAP_CS1_DataTypes.asn"/> + <FileResource projectRelativePath="Core_INAP_CS1_EncDec.cc" relativeURI="src/Core_INAP_CS1_EncDec.cc"/> + <FileResource projectRelativePath="Core_INAP_CS1_Errors.asn" relativeURI="src/Core_INAP_CS1_Errors.asn"/> + <FileResource projectRelativePath="Core_INAP_CS1_Operations.asn" relativeURI="src/Core_INAP_CS1_Operations.asn"/> + <FileResource projectRelativePath="Core_INAP_CS1_Types.ttcn" relativeURI="src/Core_INAP_CS1_Types.ttcn"/> + <FileResource projectRelativePath="Core_INAP_PDU_Defs.asn" relativeURI="src/Core_INAP_PDU_Defs.asn"/> + <FileResource projectRelativePath="Ericsson_INAP_CS1plus_ApplicationContexts.asn" relativeURI="src/Ericsson_INAP_CS1plus_ApplicationContexts.asn"/> + <FileResource projectRelativePath="Ericsson_INAP_CS1plus_ApplicationContexts_RevB.asn" relativeURI="src/Ericsson_INAP_CS1plus_ApplicationContexts_RevB.asn"/> + <FileResource projectRelativePath="Ericsson_INAP_CS1plus_Codes.asn" relativeURI="src/Ericsson_INAP_CS1plus_Codes.asn"/> + <FileResource projectRelativePath="Ericsson_INAP_CS1plus_Datatypes.asn" relativeURI="src/Ericsson_INAP_CS1plus_Datatypes.asn"/> + <FileResource projectRelativePath="Ericsson_INAP_CS1plus_Errors.asn" relativeURI="src/Ericsson_INAP_CS1plus_Errors.asn"/> + <FileResource projectRelativePath="Ericsson_INAP_CS1plus_Operations.asn" relativeURI="src/Ericsson_INAP_CS1plus_Operations.asn"/> + <FileResource projectRelativePath="Ericsson_INAP_CS1plus_Types.ttcn" relativeURI="src/Ericsson_INAP_CS1plus_Types.ttcn"/> + <FileResource projectRelativePath="INAP_CS1plus_ANSIasp_Types.ttcn" relativeURI="src/INAP_CS1plus_ANSIasp_Types.ttcn"/> + <FileResource projectRelativePath="INAP_CS1plus_Detailed_EncDec.cc" relativeURI="src/INAP_CS1plus_Detailed_EncDec.cc"/> + <FileResource projectRelativePath="INAP_CS1plus_EncDec.cc" relativeURI="src/INAP_CS1plus_EncDec.cc"/> + <FileResource projectRelativePath="INAP_CS1plus_ITUasp_Types.ttcn" relativeURI="src/INAP_CS1plus_ITUasp_Types.ttcn"/> + <FileResource projectRelativePath="INAP_CS1plus_Types.ttcn" relativeURI="src/INAP_CS1plus_Types.ttcn"/> + <FileResource projectRelativePath="INAP_PDU_Defs.asn" relativeURI="src/INAP_PDU_Defs.asn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/Ericsson_INAP_CS1plus_CNL113356</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/Ericsson_MAP_v2_CNL113725.tpd b/regression_test/XML/tpdValidTest/tpdTest/Ericsson_MAP_v2_CNL113725.tpd new file mode 100644 index 000000000..c45100d14 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/Ericsson_MAP_v2_CNL113725.tpd @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>Ericsson_MAP_v2_CNL113725</ProjectName> + <ReferencedProjects> + <ReferencedProject name="ROSE_CNL113369" projectLocationURI="../ROSE_CNL113369/ROSE_CNL113369.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/Ericsson_MAP_v2_CNL113725_FS.pdf" relativeURI="doc/Ericsson_MAP_v2_CNL113725_FS.pdf"/> + <FileResource projectRelativePath="doc/Ericsson_MAP_v2_CNL113725_PRI.pdf" relativeURI="doc/Ericsson_MAP_v2_CNL113725_PRI.pdf"/> + <FileResource projectRelativePath="doc/Ericsson_MAP_v2_CNL113725_UG.pdf" relativeURI="doc/Ericsson_MAP_v2_CNL113725_UG.pdf"/> + <FileResource projectRelativePath="src/Ericsson_MAP_Operations_v2.asn" relativeURI="src/Ericsson_MAP_Operations_v2.asn"/> + <FileResource projectRelativePath="src/Ericsson_MAPv2_EncDec.cc" relativeURI="src/Ericsson_MAPv2_EncDec.cc"/> + <FileResource projectRelativePath="src/Ericsson_MAPv2_Types.ttcn" relativeURI="src/Ericsson_MAPv2_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/Ericsson_MAP_v2_CNL113725</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/GCP_31r1_CNL113364.tpd b/regression_test/XML/tpdValidTest/tpdTest/GCP_31r1_CNL113364.tpd new file mode 100644 index 000000000..5cea7acb1 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/GCP_31r1_CNL113364.tpd @@ -0,0 +1,69 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: GCP_31r1_CNL113364.tpd + Description: tpd project file + Rev: R5A01 + Prodnr: CNL 113 364 + Updated: 2012-11-28 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>GCP_31r1_CNL113364</ProjectName> + <Folders> + <FolderResource projectRelativePath="demo" relativeURI="demo"/> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="demo/GCP_EncDec.cc" relativeURI="demo/GCP_EncDec.cc"/> + <FileResource projectRelativePath="demo/GCP_PDU_Defs.asn" relativeURI="demo/GCP_PDU_Defs.asn"/> + <FileResource projectRelativePath="demo/GCP_Types.ttcn" relativeURI="demo/GCP_Types.ttcn"/> + <FileResource projectRelativePath="doc/GCP_31r1_CNL113364_FS.pdf" relativeURI="doc/GCP_31r1_CNL113364_FS.pdf"/> + <FileResource projectRelativePath="doc/GCP_31r1_CNL113364_PRI.pdf" relativeURI="doc/GCP_31r1_CNL113364_PRI.pdf"/> + <FileResource projectRelativePath="doc/GCP_31r1_CNL113364_UG.pdf" relativeURI="doc/GCP_31r1_CNL113364_UG.pdf"/> + <FileResource projectRelativePath="src/GCP_31r1_ProtocolModule.grp" relativeURI="src/GCP_31r1_ProtocolModule.grp"/> + <FileResource projectRelativePath="src/GCP_EncDec.cc" relativeURI="src/GCP_EncDec.cc"/> + <FileResource projectRelativePath="src/GCP_PDU_Defs.asn" relativeURI="src/GCP_PDU_Defs.asn"/> + <FileResource projectRelativePath="src/GCP_Types.ttcn" relativeURI="src/GCP_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/GCP_31r1_CNL113364</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>demo</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/GTP_v9.11.0_CNL113765.tpd b/regression_test/XML/tpdValidTest/tpdTest/GTP_v9.11.0_CNL113765.tpd new file mode 100644 index 000000000..343933993 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/GTP_v9.11.0_CNL113765.tpd @@ -0,0 +1,70 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: GTP_v9.11.0_CNL113765.tpd + Description: tpd project file + Rev: R1A02 + Prodnr: CNL 113 765 + Updated: 2013-01-23 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>GTP_v9.11.0_CNL113765</ProjectName> + <ReferencedProjects> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/GTP_v9.11.0_CNL113765_FS.pdf" relativeURI="doc/GTP_v9.11.0_CNL113765_FS.pdf"/> + <FileResource projectRelativePath="doc/GTP_v9.11.0_CNL113765_PRI.pdf" relativeURI="doc/GTP_v9.11.0_CNL113765_PRI.pdf"/> + <FileResource projectRelativePath="doc/GTP_v9.11.0_CNL113765_UG.pdf" relativeURI="doc/GTP_v9.11.0_CNL113765_UG.pdf"/> + <FileResource projectRelativePath="src/GTPC_EncDec.cc" relativeURI="src/GTPC_EncDec.cc"/> + <FileResource projectRelativePath="src/GTPC_Types.ttcn" relativeURI="src/GTPC_Types.ttcn"/> + <FileResource projectRelativePath="src/GTPU_EncDec.cc" relativeURI="src/GTPU_EncDec.cc"/> + <FileResource projectRelativePath="src/GTPU_Types.ttcn" relativeURI="src/GTPU_Types.ttcn"/> + <FileResource projectRelativePath="src/GTP_v9.11.0.grp" relativeURI="src/GTP_v9.11.0.grp"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/GTP_v9.11.0_CNL113765</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/GTP_v9.11.0.grp</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/GTPv2_Sv_v10.5.0_CNL113740.tpd b/regression_test/XML/tpdValidTest/tpdTest/GTPv2_Sv_v10.5.0_CNL113740.tpd new file mode 100644 index 000000000..697f9edce --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/GTPv2_Sv_v10.5.0_CNL113740.tpd @@ -0,0 +1,50 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: GTPv2_Sv_v10.5.0_CNL113740.tpd + Description: tpd project file + Rev: R3A + Prodnr: CNL 113 740 + Updated: 2013-03-06 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>GTPv2_Sv_v10.5.0_CNL113740</ProjectName> + <ReferencedProjects> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="src/GTPv2_PrivateExtensions.ttcn" relativeURI="src/GTPv2_PrivateExtensions.ttcn"/> + <FileResource projectRelativePath="src/GTPv2_Types.ttcn" relativeURI="src/GTPv2_Types.ttcn"/> + <FileResource projectRelativePath="src/Sv_EncDec.cc" relativeURI="src/Sv_EncDec.cc"/> + <FileResource projectRelativePath="src/Sv_Types.ttcn" relativeURI="src/Sv_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/GTPv2_Sv_v10.5.0_CNL113740</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/GTPv2_Sv_v11.4.0_CNL113777.tpd b/regression_test/XML/tpdValidTest/tpdTest/GTPv2_Sv_v11.4.0_CNL113777.tpd new file mode 100644 index 000000000..d71a6b365 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/GTPv2_Sv_v11.4.0_CNL113777.tpd @@ -0,0 +1,73 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: GTPv2_Sv_v11.4.0_CNL113777.tpd + Description: tpd project file + Rev: R1A + Prodnr: CNL 113 777 + Updated: 2013-04-09 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>GTPv2_Sv_v11.4.0_CNL113777</ProjectName> + <ReferencedProjects> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="src/GTPv2_Sv_v11.4.0.grp" relativeURI="src/GTPv2_Sv_v11.4.0.grp"/> + <FileResource projectRelativePath="src/GTPv2_Types.ttcn" relativeURI="src/GTPv2_Types.ttcn"/> + <FileResource projectRelativePath="src/Sv_EncDec.cc" relativeURI="src/Sv_EncDec.cc"/> + <FileResource projectRelativePath="src/Sv_Types.ttcn" relativeURI="src/Sv_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/GTPv2_Sv_v11.4.0_CNL113777</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <altstep>.*</altstep> + <globalConstant>.*</globalConstant> + <externalConstant>.*</externalConstant> + <function>.*</function> + <externalFunction>.*</externalFunction> + <moduleParameter>.*</moduleParameter> + <globalPort>.*</globalPort> + <globalTemplate>.*</globalTemplate> + <testcase>.*</testcase> + <globalTimer>.*</globalTimer> + <group>.*</group> + <localConstant>.*</localConstant> + <localVariable>.*</localVariable> + <localTemplate>.*</localTemplate> + <localVariableTemplate>.*</localVariableTemplate> + <localTimer>.*</localTimer> + <formalParameter>.*</formalParameter> + <componentConstant>.*</componentConstant> + <componentVariable>.*</componentVariable> + <componentTimer>.*</componentTimer> + </NamingCoventions> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/GTPv2_Sv_v9.1.0_CNL113703.tpd b/regression_test/XML/tpdValidTest/tpdTest/GTPv2_Sv_v9.1.0_CNL113703.tpd new file mode 100644 index 000000000..8b39805f0 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/GTPv2_Sv_v9.1.0_CNL113703.tpd @@ -0,0 +1,64 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: GTPv2_Sv_v9.1.0_CNL113703.tpd + Description: tpd project file + Rev: R1B01 + Prodnr: CNL 113 703 + Updated: 2012-05-30 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>GTPv2_Sv_v9.1.0_CNL113703</ProjectName> + <ReferencedProjects> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/GTPv2_Sv_v9.1.0_CNL113703_FS.pdf" relativeURI="doc/GTPv2_Sv_v9.1.0_CNL113703_FS.pdf"/> + <FileResource projectRelativePath="doc/GTPv2_Sv_v9.1.0_CNL113703_PRI.pdf" relativeURI="doc/GTPv2_Sv_v9.1.0_CNL113703_PRI.pdf"/> + <FileResource projectRelativePath="doc/GTPv2_Sv_v9.1.0_CNL113703_UG.pdf" relativeURI="doc/GTPv2_Sv_v9.1.0_CNL113703_UG.pdf"/> + <FileResource projectRelativePath="src/GTPv2_Types.ttcn" relativeURI="src/GTPv2_Types.ttcn"/> + <FileResource projectRelativePath="src/Sv_Types.ttcn" relativeURI="src/Sv_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/GTPv2_Sv_v9.1.0_CNL113703</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <externalFunction>.*</externalFunction> + <formalParameter>.*</formalParameter> + </NamingCoventions> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/GTPv2_Sv_v9.7.0_CNL113730.tpd b/regression_test/XML/tpdValidTest/tpdTest/GTPv2_Sv_v9.7.0_CNL113730.tpd new file mode 100644 index 000000000..72ab646f7 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/GTPv2_Sv_v9.7.0_CNL113730.tpd @@ -0,0 +1,62 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: GTPv2_Sv_v9.7.0_CNL113730.tpd + Description: tpd project file + Rev: R1B01 + Prodnr: CNL 113 730 + Updated: 2012-09-28 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>GTPv2_Sv_v9.7.0_CNL113730</ProjectName> + <ReferencedProjects> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/GTPv2_Sv_v9.7.0_CNL113730_FS.pdf" relativeURI="doc/GTPv2_Sv_v9.7.0_CNL113730_FS.pdf"/> + <FileResource projectRelativePath="doc/GTPv2_Sv_v9.7.0_CNL113730_PRI.pdf" relativeURI="doc/GTPv2_Sv_v9.7.0_CNL113730_PRI.pdf"/> + <FileResource projectRelativePath="doc/GTPv2_Sv_v9.7.0_CNL113730_UG.pdf" relativeURI="doc/GTPv2_Sv_v9.7.0_CNL113730_UG.pdf"/> + <FileResource projectRelativePath="src/GTPv2_PrivateExtensions.ttcn" relativeURI="src/GTPv2_PrivateExtensions.ttcn"/> + <FileResource projectRelativePath="src/GTPv2_Types.ttcn" relativeURI="src/GTPv2_Types.ttcn"/> + <FileResource projectRelativePath="src/Sv_EncDec.cc" relativeURI="src/Sv_EncDec.cc"/> + <FileResource projectRelativePath="src/Sv_Types.ttcn" relativeURI="src/Sv_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/GTPv2_Sv_v9.7.0_CNL113730</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/GTPv2_Sv_v9.8.0_CNL113737.tpd b/regression_test/XML/tpdValidTest/tpdTest/GTPv2_Sv_v9.8.0_CNL113737.tpd new file mode 100644 index 000000000..80c02a568 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/GTPv2_Sv_v9.8.0_CNL113737.tpd @@ -0,0 +1,62 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: GTPv2_Sv_v9.8.0_CNL113737.tpd + Description: tpd project file + Rev: R2A01 + Prodnr: CNL 113 737 + Updated: 2012-12-07 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>GTPv2_Sv_v9.8.0_CNL113737</ProjectName> + <ReferencedProjects> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/GTPv2_Sv_v9.8.0_CNL113737_FS.pdf" relativeURI="doc/GTPv2_Sv_v9.8.0_CNL113737_FS.pdf"/> + <FileResource projectRelativePath="doc/GTPv2_Sv_v9.8.0_CNL113737_PRI.pdf" relativeURI="doc/GTPv2_Sv_v9.8.0_CNL113737_PRI.pdf"/> + <FileResource projectRelativePath="doc/GTPv2_Sv_v9.8.0_CNL113737_UG.pdf" relativeURI="doc/GTPv2_Sv_v9.8.0_CNL113737_UG.pdf"/> + <FileResource projectRelativePath="src/GTPv2_PrivateExtensions.ttcn" relativeURI="src/GTPv2_PrivateExtensions.ttcn"/> + <FileResource projectRelativePath="src/GTPv2_Types.ttcn" relativeURI="src/GTPv2_Types.ttcn"/> + <FileResource projectRelativePath="src/Sv_EncDec.cc" relativeURI="src/Sv_EncDec.cc"/> + <FileResource projectRelativePath="src/Sv_Types.ttcn" relativeURI="src/Sv_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/GTPv2_Sv_v9.8.0_CNL113737</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/GTPv2_v11.x.0_CNL113753.tpd b/regression_test/XML/tpdValidTest/tpdTest/GTPv2_v11.x.0_CNL113753.tpd new file mode 100644 index 000000000..108c5be9e --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/GTPv2_v11.x.0_CNL113753.tpd @@ -0,0 +1,60 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: GTPv2_v11.x.0_CNL113753.tpd + Description: tpd project file + Rev: R1A01 + Prodnr: CNL 113 753 + Updated: 2012-08-03 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>GTPv2_v11.x.0_CNL113753</ProjectName> + <ReferencedProjects> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/GTPv2_v11.x.0_CNL113753_FS.pdf" relativeURI="doc/GTPv2_v11.x.0_CNL113753_FS.pdf"/> + <FileResource projectRelativePath="doc/GTPv2_v11.x.0_CNL113753_PRI.pdf" relativeURI="doc/GTPv2_v11.x.0_CNL113753_PRI.pdf"/> + <FileResource projectRelativePath="doc/GTPv2_v11.x.0_CNL113753_UG.pdf" relativeURI="doc/GTPv2_v11.x.0_CNL113753_UG.pdf"/> + <FileResource projectRelativePath="src/GTPv2_PrivateExtensions.ttcn" relativeURI="src/GTPv2_PrivateExtensions.ttcn"/> + <FileResource projectRelativePath="src/GTPv2_Types.ttcn" relativeURI="src/GTPv2_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/GTPv2_v11.x.0_CNL113753</targetExecutable> + <buildLevel>Level 4.5 - Creating Executable Test Suite with heuristical dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/GiGnREPLAYasp_CNL113604.tpd b/regression_test/XML/tpdValidTest/tpdTest/GiGnREPLAYasp_CNL113604.tpd new file mode 100644 index 000000000..95983d065 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/GiGnREPLAYasp_CNL113604.tpd @@ -0,0 +1,69 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: GiGnREPLAYasp_CNL113604.tpd + Description: tpd project file + Rev: R2C01 + Prodnr: CNL 113 604 + Updated: 2012-10-08 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>GiGnREPLAYasp_CNL113604</ProjectName> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/GiGnREPLAYasp_CNL113604_FS.pdf" relativeURI="doc/GiGnREPLAYasp_CNL113604_FS.pdf"/> + <FileResource projectRelativePath="doc/GiGnREPLAYasp_CNL113604_PRI.pdf" relativeURI="doc/GiGnREPLAYasp_CNL113604_PRI.pdf"/> + <FileResource projectRelativePath="doc/GiGnREPLAYasp_CNL113604_UG.pdf" relativeURI="doc/GiGnREPLAYasp_CNL113604_UG.pdf"/> + <FileResource projectRelativePath="src/CaptureFileReader.cc" relativeURI="src/CaptureFileReader.cc"/> + <FileResource projectRelativePath="src/CaptureFileReader.hh" relativeURI="src/CaptureFileReader.hh"/> + <FileResource projectRelativePath="src/GiGnREPLAYasp_PT.cc" relativeURI="src/GiGnREPLAYasp_PT.cc"/> + <FileResource projectRelativePath="src/GiGnREPLAYasp_PT.hh" relativeURI="src/GiGnREPLAYasp_PT.hh"/> + <FileResource projectRelativePath="src/GiGnREPLAYasp_PortType.ttcn" relativeURI="src/GiGnREPLAYasp_PortType.ttcn"/> + <FileResource projectRelativePath="src/GiGnREPLAYasp_Types.ttcn" relativeURI="src/GiGnREPLAYasp_Types.ttcn"/> + <FileResource projectRelativePath="src/Packet.cc" relativeURI="src/Packet.cc"/> + <FileResource projectRelativePath="src/Packet.hh" relativeURI="src/Packet.hh"/> + <FileResource projectRelativePath="src/PacketContainer.cc" relativeURI="src/PacketContainer.cc"/> + <FileResource projectRelativePath="src/PacketContainer.hh" relativeURI="src/PacketContainer.hh"/> + <FileResource projectRelativePath="src/ProtocolTypes.hh" relativeURI="src/ProtocolTypes.hh"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <singleMode>true</singleMode> + <targetExecutable>bin/GiGnREPLAYasp_CNL113604</targetExecutable> + <linkerLibraries> + <listItem>pcap</listItem> + </linkerLibraries> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/H225.0_v0298_CNL113354.tpd b/regression_test/XML/tpdValidTest/tpdTest/H225.0_v0298_CNL113354.tpd new file mode 100644 index 000000000..a206f1d2e --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/H225.0_v0298_CNL113354.tpd @@ -0,0 +1,193 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: H225.0_v0298_CNL113354.tpd + Description: tpd project file + Rev: R4B01 + Prodnr: CNL 113 354 + Updated: 2012-10-30 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>H225.0_v0298_CNL113354</ProjectName> + <ReferencedProjects> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="H225CC_EncDec.cc" relativeURI="src/H225CC_EncDec.cc"/> + <FileResource projectRelativePath="H225CC_Types.ttcn" relativeURI="src/H225CC_Types.ttcn"/> + <FileResource projectRelativePath="H225_Q931_Types.ttcn" relativeURI="src/H225_Q931_Types.ttcn"/> + <FileResource projectRelativePath="H235_SECURITY_MESSAGES.asn" relativeURI="src/H235_SECURITY_MESSAGES.asn"/> + <FileResource projectRelativePath="H323_EncDec.cc" relativeURI="src/H323_EncDec.cc"/> + <FileResource projectRelativePath="H323_MESSAGES.asn" relativeURI="src/H323_MESSAGES.asn"/> + <FileResource projectRelativePath="H323_RAS_Types.ttcn" relativeURI="src/H323_RAS_Types.ttcn"/> + <FileResource projectRelativePath="OSS_H323_MESSAGES.c" relativeURI="src/OSS_H323_MESSAGES.c"/> + <FileResource projectRelativePath="OSS_H323_MESSAGES.h" relativeURI="src/OSS_H323_MESSAGES.h"/> + <FileResource projectRelativePath="OSS_H323_MESSAGES_linux.c" relativeURI="src/OSS_H323_MESSAGES_linux.c"/> + <FileResource projectRelativePath="OSS_H323_MESSAGES_linux64bit.c" relativeURI="src/OSS_H323_MESSAGES_linux64bit.c"/> + <FileResource projectRelativePath="RAS_EncDec.cc" relativeURI="src/RAS_EncDec.cc"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <symboliclinklessBuild>true</symboliclinklessBuild> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/H225.0_v0298_CNL113354</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>asn1code</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FileProperties> + <FileResource> + <FilePath>OSS_H323_MESSAGES.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>OSS_H323_MESSAGES_linux.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="LINUX64"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <symboliclinklessBuild>true</symboliclinklessBuild> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/H225.0_v0298_CNL113354</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>asn1code</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FileProperties> + <FileResource> + <FilePath>OSS_H323_MESSAGES.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>OSS_H323_MESSAGES_linux.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="LINUX"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <symboliclinklessBuild>true</symboliclinklessBuild> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/H225.0_v0298_CNL113354</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>asn1code</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FileProperties> + <FileResource> + <FilePath>OSS_H323_MESSAGES.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>OSS_H323_MESSAGES_linux64bit.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="SOLARIS_SPARC"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <symboliclinklessBuild>true</symboliclinklessBuild> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/H225.0_v0298_CNL113354</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>asn1code</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FileProperties> + <FileResource> + <FilePath>OSS_H323_MESSAGES_linux.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>OSS_H323_MESSAGES_linux64bit.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/H245_v6_CNL113587.tpd b/regression_test/XML/tpdValidTest/tpdTest/H245_v6_CNL113587.tpd new file mode 100644 index 000000000..889c25baf --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/H245_v6_CNL113587.tpd @@ -0,0 +1,185 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: H245_v6_CNL113587.tpd + Description: tpd project file + Rev: R1A01 + Prodnr: CNL 113 587 + Updated: 2012-10-19 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>H245_v6_CNL113587</ProjectName> + <Files> + <FileResource projectRelativePath="H245_EncDec.cc" relativeURI="src/H245_EncDec.cc"/> + <FileResource projectRelativePath="H245_Types.ttcn" relativeURI="src/H245_Types.ttcn"/> + <FileResource projectRelativePath="MULTIMEDIA_SYSTEM_CONTROL.asn" relativeURI="src/MULTIMEDIA_SYSTEM_CONTROL.asn"/> + <FileResource projectRelativePath="OSS_MULTIMEDIA_SYSTEM_CONTROL.c" relativeURI="src/OSS_MULTIMEDIA_SYSTEM_CONTROL.c"/> + <FileResource projectRelativePath="OSS_MULTIMEDIA_SYSTEM_CONTROL.h" relativeURI="src/OSS_MULTIMEDIA_SYSTEM_CONTROL.h"/> + <FileResource projectRelativePath="OSS_MULTIMEDIA_SYSTEM_CONTROL_linux32bit.c" relativeURI="src/OSS_MULTIMEDIA_SYSTEM_CONTROL_linux32bit.c"/> + <FileResource projectRelativePath="OSS_MULTIMEDIA_SYSTEM_CONTROL_linux64bit.c" relativeURI="src/OSS_MULTIMEDIA_SYSTEM_CONTROL_linux64bit.c"/> + </Files> + <ActiveConfiguration>LINUX64</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <symboliclinklessBuild>true</symboliclinklessBuild> + <useAbsolutePath>true</useAbsolutePath> + <GNUMake>true</GNUMake> + <targetExecutable>bin/H245_v6_CNL113587</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>asn1code</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FileProperties> + <FileResource> + <FilePath>OSS_MULTIMEDIA_SYSTEM_CONTROL.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>OSS_MULTIMEDIA_SYSTEM_CONTROL_linux32bit.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="LINUX64"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <symboliclinklessBuild>true</symboliclinklessBuild> + <useAbsolutePath>true</useAbsolutePath> + <GNUMake>true</GNUMake> + <targetExecutable>bin/H245_v6_CNL113587</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>asn1code</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FileProperties> + <FileResource> + <FilePath>OSS_MULTIMEDIA_SYSTEM_CONTROL.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>OSS_MULTIMEDIA_SYSTEM_CONTROL_linux32bit.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="SOLARIS_SPARC"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <symboliclinklessBuild>true</symboliclinklessBuild> + <useAbsolutePath>true</useAbsolutePath> + <GNUMake>true</GNUMake> + <targetExecutable>bin/H245_v6_CNL113587</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>asn1code</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FileProperties> + <FileResource> + <FilePath>OSS_MULTIMEDIA_SYSTEM_CONTROL_linux32bit.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>OSS_MULTIMEDIA_SYSTEM_CONTROL_linux64bit.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="LINUX"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <symboliclinklessBuild>true</symboliclinklessBuild> + <useAbsolutePath>true</useAbsolutePath> + <GNUMake>true</GNUMake> + <targetExecutable>bin/H245_v6_CNL113587</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>asn1code</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FileProperties> + <FileResource> + <FilePath>OSS_MULTIMEDIA_SYSTEM_CONTROL.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>OSS_MULTIMEDIA_SYSTEM_CONTROL_linux64bit.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/H248_v2_CNL113424.tpd b/regression_test/XML/tpdValidTest/tpdTest/H248_v2_CNL113424.tpd new file mode 100644 index 000000000..9e68e570d --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/H248_v2_CNL113424.tpd @@ -0,0 +1,75 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: H248_v2_CNL113424.tpd + Description: tpd project file + Rev: R5B01 + Prodnr: CNL 113 424 + Updated: 2012-04-03 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>H248_v2_CNL113424</ProjectName> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/H248_v2_CNL113424_FS.pdf" relativeURI="doc/H248_v2_CNL113424_FS.pdf"/> + <FileResource projectRelativePath="doc/H248_v2_CNL113424_PRI.pdf" relativeURI="doc/H248_v2_CNL113424_PRI.pdf"/> + <FileResource projectRelativePath="doc/H248_v2_CNL113424_UG.pdf" relativeURI="doc/H248_v2_CNL113424_UG.pdf"/> + <FileResource projectRelativePath="src/H248_EncDec.cc" relativeURI="src/H248_EncDec.cc"/> + <FileResource projectRelativePath="src/H248_SDP_EncDec.cc" relativeURI="src/H248_SDP_EncDec.cc"/> + <FileResource projectRelativePath="src/H248_SDP_Types.ttcn" relativeURI="src/H248_SDP_Types.ttcn"/> + <FileResource projectRelativePath="src/H248_SDP_parse_.tab.c" relativeURI="src/H248_SDP_parse_.tab.c"/> + <FileResource projectRelativePath="src/H248_SDP_parse_.tab.h" relativeURI="src/H248_SDP_parse_.tab.h"/> + <FileResource projectRelativePath="src/H248_SDP_parse_parser.h" relativeURI="src/H248_SDP_parse_parser.h"/> + <FileResource projectRelativePath="src/H248_SDP_parser.l" relativeURI="src/H248_SDP_parser.l"/> + <FileResource projectRelativePath="src/H248_SDP_parser.y" relativeURI="src/H248_SDP_parser.y"/> + <FileResource projectRelativePath="src/H248_Types.ttcn" relativeURI="src/H248_Types.ttcn"/> + <FileResource projectRelativePath="src/H248_la.cc" relativeURI="src/H248_la.cc"/> + <FileResource projectRelativePath="src/H248_la.l" relativeURI="src/H248_la.l"/> + <FileResource projectRelativePath="src/H248_p.cc" relativeURI="src/H248_p.cc"/> + <FileResource projectRelativePath="src/H248_p.hh" relativeURI="src/H248_p.hh"/> + <FileResource projectRelativePath="src/H248_p.y" relativeURI="src/H248_p.y"/> + <FileResource projectRelativePath="src/H248_p_types.hh" relativeURI="src/H248_p_types.hh"/> + <FileResource projectRelativePath="src/lex.H248_SDP_parse_.c" relativeURI="src/lex.H248_SDP_parse_.c"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/H248_v2_CNL113424</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <externalFunction>.*</externalFunction> + <moduleParameter>.*</moduleParameter> + </NamingCoventions> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/HTTPmsg_CNL113312.tpd b/regression_test/XML/tpdValidTest/tpdTest/HTTPmsg_CNL113312.tpd new file mode 100644 index 000000000..4d33a1256 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/HTTPmsg_CNL113312.tpd @@ -0,0 +1,64 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: HTTPmsg_CNL113312.tpd + Description: tpd project file + Rev: R8B01 + Prodnr: CNL 113 312 + Updated: 2012-07-18 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>HTTPmsg_CNL113312</ProjectName> + <ReferencedProjects> + <ReferencedProject name="Abstract_Socket_CNL113384" projectLocationURI="../Common_Components/Abstract_Socket_CNL113384/Abstract_Socket_CNL113384.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/HTTPmsg_CNL113312_FS.pdf" relativeURI="doc/HTTPmsg_CNL113312_FS.pdf"/> + <FileResource projectRelativePath="doc/HTTPmsg_CNL113312_PRI.pdf" relativeURI="doc/HTTPmsg_CNL113312_PRI.pdf"/> + <FileResource projectRelativePath="doc/HTTPmsg_CNL113312_UG.pdf" relativeURI="doc/HTTPmsg_CNL113312_UG.pdf"/> + <FileResource projectRelativePath="src/HTTPmsg_MessageLen.ttcn" relativeURI="src/HTTPmsg_MessageLen.ttcn"/> + <FileResource projectRelativePath="src/HTTPmsg_MessageLen_Function.cc" relativeURI="src/HTTPmsg_MessageLen_Function.cc"/> + <FileResource projectRelativePath="src/HTTPmsg_PT.cc" relativeURI="src/HTTPmsg_PT.cc"/> + <FileResource projectRelativePath="src/HTTPmsg_PT.hh" relativeURI="src/HTTPmsg_PT.hh"/> + <FileResource projectRelativePath="src/HTTPmsg_PortType.ttcn" relativeURI="src/HTTPmsg_PortType.ttcn"/> + <FileResource projectRelativePath="src/HTTPmsg_Types.ttcn" relativeURI="src/HTTPmsg_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/HTTPmsg_CNL113312</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/IMSA2_CNL113693.tpd b/regression_test/XML/tpdValidTest/tpdTest/IMSA2_CNL113693.tpd new file mode 100644 index 000000000..295c488dd --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/IMSA2_CNL113693.tpd @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: IMSA2_CNL113693.tpd + Description: tpd project file + Rev: R2A01 + Prodnr: CNL 113 693 + Updated: 2012-04-02 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>IMSA2_CNL113693</ProjectName> + <ReferencedProjects> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/IMSA2_CNL113693_FS.pdf" relativeURI="doc/IMSA2_CNL113693_FS.pdf"/> + <FileResource projectRelativePath="doc/IMSA2_CNL113693_PRI.pdf" relativeURI="doc/IMSA2_CNL113693_PRI.pdf"/> + <FileResource projectRelativePath="doc/IMSA2_CNL113693_UG.pdf" relativeURI="doc/IMSA2_CNL113693_UG.pdf"/> + <FileResource projectRelativePath="src/IMSA2_Types.ttcn" relativeURI="src/IMSA2_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/IMSA2_CNL113693</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/IOS_HRPD_CLN113752.tpd b/regression_test/XML/tpdValidTest/tpdTest/IOS_HRPD_CLN113752.tpd new file mode 100644 index 000000000..fcb9516e1 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/IOS_HRPD_CLN113752.tpd @@ -0,0 +1,47 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: IOS_HRPD_CLN113752.tpd + Description: tpd project file + Rev: R1C01 + Prodnr: CNL 113 752 + Updated: 2012-12-03 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>IOS_HRPD_CLN113752</ProjectName> + <ReferencedProjects> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="src/A21_Types.ttcn" relativeURI="src/A21_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <useAbsolutePath>true</useAbsolutePath> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/IOS_HRPD_CLN113752</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/IPL4_EIN_SCTP.tpd b/regression_test/XML/tpdValidTest/tpdTest/IPL4_EIN_SCTP.tpd new file mode 100644 index 000000000..e4a0e73e4 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/IPL4_EIN_SCTP.tpd @@ -0,0 +1,254 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: IPL4_EIN_SCTP.tpd + Description: tpd project file + Rev: R11A + Prodnr: CNL 113 531 + Updated: 2013-03-27 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>IPL4_EIN_SCTP</ProjectName> + <ReferencedProjects> + <ReferencedProject name="Socket_API_CNL113686" projectLocationURI="../Common_Components/Socket_API_CNL113686/Socket_API_CNL113686.tpd"/> + <ReferencedProject name="SS7Common_CNL113755" projectLocationURI="../Common_Components/SS7Common_CNL113755/SS7Common_CNL113755.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="IPL4asp_PT.cc" relativeURI="src/IPL4asp_PT.cc"/> + <FileResource projectRelativePath="IPL4asp_PT.hh" relativeURI="src/IPL4asp_PT.hh"/> + <FileResource projectRelativePath="IPL4asp_PortType.ttcn" relativeURI="src/IPL4asp_PortType.ttcn"/> + <FileResource projectRelativePath="IPL4asp_Types.ttcn" relativeURI="src/IPL4asp_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/IPL4asp_CNL113531</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <globalConstant>.*</globalConstant> + <externalFunction>[e]?f_.*</externalFunction> + <formalParameter>.*</formalParameter> + </NamingCoventions> + </ProjectProperties> + </Configuration> + <Configuration name="SSL"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/IPL4asp_CNL113531</targetExecutable> + <preprocessorDefines> + <listItem>IPL4_USE_SSL</listItem> + </preprocessorDefines> + <preprocessorIncludes> + <listItem>[OPENSSL_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>ssl</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OPENSSL_DIR]/lib</listItem> + </linkerLibrarySearchPath> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <globalConstant>.*</globalConstant> + <externalFunction>[e]?f_.*</externalFunction> + <formalParameter>.*</formalParameter> + </NamingCoventions> + </ProjectProperties> + </Configuration> + <Configuration name="SSL_SCTP"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/IPL4asp_CNL113531</targetExecutable> + <preprocessorDefines> + <listItem>IPL4_USE_SSL</listItem> + <listItem>USE_SCTP</listItem> + </preprocessorDefines> + <preprocessorIncludes> + <listItem>[OPENSSL_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>ssl</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OPENSSL_DIR]/lib</listItem> + </linkerLibrarySearchPath> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <globalConstant>.*</globalConstant> + <externalFunction>[e]?f_.*</externalFunction> + <formalParameter>.*</formalParameter> + </NamingCoventions> + </ProjectProperties> + </Configuration> + <Configuration name="SSL_SCTP107"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/IPL4asp_CNL113531</targetExecutable> + <preprocessorDefines> + <listItem>IPL4_USE_SSL</listItem> + <listItem>LKSCTP_1_0_7</listItem> + </preprocessorDefines> + <preprocessorIncludes> + <listItem>[OPENSSL_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>ssl</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OPENSSL_DIR]/lib</listItem> + </linkerLibrarySearchPath> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <globalConstant>.*</globalConstant> + <externalFunction>[e]?f_.*</externalFunction> + <formalParameter>.*</formalParameter> + </NamingCoventions> + </ProjectProperties> + </Configuration> + <Configuration name="SSL_SCTP109"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/IPL4asp_CNL113531</targetExecutable> + <preprocessorDefines> + <listItem>IPL4_USE_SSL</listItem> + <listItem>LKSCTP_1_0_9</listItem> + </preprocessorDefines> + <preprocessorIncludes> + <listItem>[OPENSSL_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>ssl</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OPENSSL_DIR]/lib</listItem> + </linkerLibrarySearchPath> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <globalConstant>.*</globalConstant> + <externalFunction>[e]?f_.*</externalFunction> + <formalParameter>.*</formalParameter> + </NamingCoventions> + </ProjectProperties> + </Configuration> + <Configuration name="SCTP109"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/IPL4asp_CNL113531</targetExecutable> + <preprocessorDefines> + <listItem>LKSCTP_1_0_9</listItem> + </preprocessorDefines> + <preprocessorIncludes> + <listItem>[OPENSSL_DIR]/include</listItem> + </preprocessorIncludes> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <globalConstant>.*</globalConstant> + <externalFunction>[e]?f_.*</externalFunction> + <formalParameter>.*</formalParameter> + </NamingCoventions> + </ProjectProperties> + </Configuration> + <Configuration name="SCTP107"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/IPL4asp_CNL113531</targetExecutable> + <preprocessorDefines> + <listItem>LKSCTP_1_0_9</listItem> + </preprocessorDefines> + <preprocessorIncludes> + <listItem>[OPENSSL_DIR]/include</listItem> + </preprocessorIncludes> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <globalConstant>.*</globalConstant> + <externalFunction>[e]?f_.*</externalFunction> + <formalParameter>.*</formalParameter> + </NamingCoventions> + </ProjectProperties> + </Configuration> + <Configuration name="SCTP"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/IPL4asp_CNL113531</targetExecutable> + <preprocessorDefines> + <listItem>USE_SCTP</listItem> + </preprocessorDefines> + <preprocessorIncludes> + <listItem>[OPENSSL_DIR]/include</listItem> + </preprocessorIncludes> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <globalConstant>.*</globalConstant> + <externalFunction>[e]?f_.*</externalFunction> + <formalParameter>.*</formalParameter> + </NamingCoventions> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/IPL4asp_CNL113531.tpd b/regression_test/XML/tpdValidTest/tpdTest/IPL4asp_CNL113531.tpd new file mode 100644 index 000000000..7b334cd58 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/IPL4asp_CNL113531.tpd @@ -0,0 +1,147 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: IPL4asp_CNL113531.tpd + Description: tpd project file + Rev: R11A + Prodnr: CNL 113 531 + Updated: 2013-03-27 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>IPL4asp_CNL113531</ProjectName> + <ReferencedProjects> + <ReferencedProject name="Socket_API_CNL113686" projectLocationURI="../Common_Components/Socket_API_CNL113686/Socket_API_CNL113686.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="IPL4asp_PT.cc" relativeURI="src/IPL4asp_PT.cc"/> + <FileResource projectRelativePath="IPL4asp_PT.hh" relativeURI="src/IPL4asp_PT.hh"/> + <FileResource projectRelativePath="IPL4asp_PortType.ttcn" relativeURI="src/IPL4asp_PortType.ttcn"/> + <FileResource projectRelativePath="IPL4asp_Types.ttcn" relativeURI="src/IPL4asp_Types.ttcn"/> + </Files> + <ActiveConfiguration>SSL_SCTP</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/IPL4asp_CNL113531</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <globalConstant>.*</globalConstant> + <externalFunction>[e]?f_.*</externalFunction> + <formalParameter>.*</formalParameter> + </NamingCoventions> + </ProjectProperties> + </Configuration> + <Configuration name="SSL"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/IPL4asp_CNL113531</targetExecutable> + <preprocessorDefines> + <listItem>IPL4_USE_SSL</listItem> + </preprocessorDefines> + <preprocessorIncludes> + <listItem>[OPENSSL_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>ssl</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OPENSSL_DIR]/lib</listItem> + </linkerLibrarySearchPath> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <globalConstant>.*</globalConstant> + <externalFunction>[e]?f_.*</externalFunction> + <formalParameter>.*</formalParameter> + </NamingCoventions> + </ProjectProperties> + </Configuration> + <Configuration name="SSL_SCTP"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/IPL4asp_CNL113531</targetExecutable> + <preprocessorDefines> + <listItem>IPL4_USE_SSL</listItem> + <listItem>USE_SCTP</listItem> + <listItem>LKSCTP_MULTIHOMING_ENABLED</listItem> + </preprocessorDefines> + <preprocessorIncludes> + <listItem>[OPENSSL_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>ssl</listItem> + <listItem>sctp</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OPENSSL_DIR]/lib</listItem> + </linkerLibrarySearchPath> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <globalConstant>.*</globalConstant> + <externalFunction>[e]?f_.*</externalFunction> + <formalParameter>.*</formalParameter> + </NamingCoventions> + </ProjectProperties> + </Configuration> + <Configuration name="SCTP"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/IPL4asp_CNL113531</targetExecutable> + <preprocessorDefines> + <listItem>USE_SCTP</listItem> + <listItem>LKSCTP_MULTIHOMING_ENABLED</listItem> + </preprocessorDefines> + <preprocessorIncludes> + <listItem>[OPENSSL_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>sctp</listItem> + </linkerLibraries> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <globalConstant>.*</globalConstant> + <externalFunction>[e]?f_.*</externalFunction> + <formalParameter>.*</formalParameter> + </NamingCoventions> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/IPL4asp_CNL113531_Interface.tpd b/regression_test/XML/tpdValidTest/tpdTest/IPL4asp_CNL113531_Interface.tpd new file mode 100644 index 000000000..b5cca266b --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/IPL4asp_CNL113531_Interface.tpd @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: IPL4asp_CNL113531_Interface.tpd + Description: tpd project file + Rev: R11A + Prodnr: CNL 113 531 + Updated: 2013-03-27 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>IPL4asp_CNL113531_Interface</ProjectName> + <ReferencedProjects> + <ReferencedProject name="IPL4asp_CNL113531" projectLocationURI="IPL4asp_CNL113531.tpd"/> + <ReferencedProject name="TCCUsefulFunctions_CNL113472_Interface" projectLocationURI="../../Libraries/TCCUsefulFunctions_CNL113472/TCCUsefulFunctions_CNL113472_Interface.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="IPL4asp_Functions.ttcn" relativeURI="demo/InterfaceFunctions/IPL4asp_Functions.ttcn"/> + <FileResource projectRelativePath="IPL4asp_discovery.cc" relativeURI="demo/InterfaceFunctions/IPL4asp_discovery.cc"/> + <FileResource projectRelativePath="IPL4asp_protocol_L234.hh" relativeURI="demo/InterfaceFunctions/IPL4asp_protocol_L234.hh"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <GNUMake>true</GNUMake> + <targetExecutable>bin/IPL4asp_CNL113531_Interface</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <externalFunction>[e]?f_.*</externalFunction> + <localVariable>.*</localVariable> + <formalParameter>.*</formalParameter> + </NamingCoventions> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/IP_CNL113418.tpd b/regression_test/XML/tpdValidTest/tpdTest/IP_CNL113418.tpd new file mode 100644 index 000000000..d2afd1d6e --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/IP_CNL113418.tpd @@ -0,0 +1,64 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: IP_CNL113418.tpd + Description: tpd project file + Rev: R7A01 + Prodnr: CNL 113 418 + Updated: 2012-02-08 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>IP_CNL113418</ProjectName> + <ReferencedProjects> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/IP_CNL113418_FS.pdf" relativeURI="doc/IP_CNL113418_FS.pdf"/> + <FileResource projectRelativePath="doc/IP_CNL113418_PRI.pdf" relativeURI="doc/IP_CNL113418_PRI.pdf"/> + <FileResource projectRelativePath="doc/IP_CNL113418_UG.pdf" relativeURI="doc/IP_CNL113418_UG.pdf"/> + <FileResource projectRelativePath="src/IP_EncDec.cc" relativeURI="src/IP_EncDec.cc"/> + <FileResource projectRelativePath="src/IP_Types.ttcn" relativeURI="src/IP_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <GNUMake>true</GNUMake> + <targetExecutable>bin/IP_CNL113418</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <globalConstant>c[g]?_.*</globalConstant> + <externalFunction>[e]?f_.*</externalFunction> + <formalParameter>.*</formalParameter> + </NamingCoventions> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/IP_Daemon_Dynamic_CNL113739.tpd b/regression_test/XML/tpdValidTest/tpdTest/IP_Daemon_Dynamic_CNL113739.tpd new file mode 100644 index 000000000..3c0f587ac --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/IP_Daemon_Dynamic_CNL113739.tpd @@ -0,0 +1,82 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: IP_Daemon_Dynamic_CNL113739.tpd + Description: tpd project file + Rev: R1B01 + Prodnr: CNL 113 739 + Updated: 2012-11-12 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>IP_Daemon_Dynamic_CNL113739</ProjectName> + <ReferencedProjects> + <ReferencedProject name="IPL4asp_CNL113531" projectLocationURI="../../TestPorts/IPL4asp_CNL113531/IPL4asp_CNL113531.tpd"/> + <ReferencedProject name="Socket_API_CNL113686" projectLocationURI="../../TestPorts/Common_Components/Socket_API_CNL113686/Socket_API_CNL113686.tpd"/> + <ReferencedProject name="TCCUsefulFunctions_CNL113472_Common" projectLocationURI="../../Libraries/TCCUsefulFunctions_CNL113472/TCCUsefulFunctions_CNL113472_Common.tpd"/> + <ReferencedProject name="TCCUsefulFunctions_CNL113472_Interface" projectLocationURI="../../Libraries/TCCUsefulFunctions_CNL113472/TCCUsefulFunctions_CNL113472_Interface.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + </Folders> + <Files> + <FileResource projectRelativePath="IP_Daemon_Dynamic.cfg" relativeURI="demo/IP_Daemon_Dynamic.cfg"/> + <FileResource projectRelativePath="IP_Daemon_Dynamic.ttcn" relativeURI="src/IP_Daemon_Dynamic.ttcn"/> + <FileResource projectRelativePath="IP_Daemon_Dynamic_IPL4_CtrlFuncDef.cc" relativeURI="src/IP_Daemon_Dynamic_IPL4_CtrlFuncDef.cc"/> + <FileResource projectRelativePath="IP_Daemon_Dynamic_IPL4_CtrlFunct.ttcn" relativeURI="src/IP_Daemon_Dynamic_IPL4_CtrlFunct.ttcn"/> + <FileResource projectRelativePath="IP_Daemon_Dynamic_Interface_Definitions.ttcn" relativeURI="src/IP_Daemon_Dynamic_Interface_Definitions.ttcn"/> + <FileResource projectRelativePath="IP_Daemon_Dynamic_Types.ttcn" relativeURI="src/IP_Daemon_Dynamic_Types.ttcn"/> + <FileResource projectRelativePath="doc/IP_Daemon_Dynamic_CNL113739_FS.pdf" relativeURI="doc/IP_Daemon_Dynamic_CNL113739_FS.pdf"/> + <FileResource projectRelativePath="doc/IP_Daemon_Dynamic_CNL113739_PRI.pdf" relativeURI="doc/IP_Daemon_Dynamic_CNL113739_PRI.pdf"/> + <FileResource projectRelativePath="doc/IP_Daemon_Dynamic_CNL113739_UG.pdf" relativeURI="doc/IP_Daemon_Dynamic_CNL113739_UG.pdf"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <singleMode>true</singleMode> + <targetExecutable>bin/IP_Daemon_Dynamic_CNL113739</targetExecutable> + <preprocessorDefines> + <listItem>LKSCTP_1_0_9</listItem> + </preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <function>.*</function> + <externalFunction>.*</externalFunction> + <localVariable>.*</localVariable> + <formalParameter>.*</formalParameter> + </NamingCoventions> + <ConfigurationRequirements> + <configurationRequirement> + <projectName>IPL4asp_CNL113531</projectName> + <rerquiredConfiguration>SSL_SCTP109</rerquiredConfiguration> + </configurationRequirement> + </ConfigurationRequirements> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/IP_Daemon_Dynamic_CNL113739_demo.tpd b/regression_test/XML/tpdValidTest/tpdTest/IP_Daemon_Dynamic_CNL113739_demo.tpd new file mode 100644 index 000000000..52424adec --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/IP_Daemon_Dynamic_CNL113739_demo.tpd @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>IP_Daemon_Dynamic_CNL113739_demo</ProjectName> + <ReferencedProjects> + <ReferencedProject name="IP_Daemon_Dynamic_CNL113739" projectLocationURI="../IP_Daemon_Dynamic_CNL113739.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="IP_Daemon_Dynamic.cfg" relativeURI="IP_Daemon_Dynamic.cfg"/> + <FileResource projectRelativePath="IP_Daemon_Dynamic_Test.cfg" relativeURI="IP_Daemon_Dynamic_Test.cfg"/> + <FileResource projectRelativePath="IP_Daemon_Dynamic_Test.ttcn" relativeURI="IP_Daemon_Dynamic_Test.ttcn"/> + <FileResource projectRelativePath="IP_Daemon_Dynamic_with_DiameterAutoReplies.ttcn" relativeURI="IP_Daemon_Dynamic_with_DiameterAutoReplies.ttcn"/> + <FileResource projectRelativePath="IP_Daemon_Dynamic_with_StartupCallback.ttcn" relativeURI="IP_Daemon_Dynamic_with_StartupCallback.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <singleMode>true</singleMode> + <targetExecutable>bin/IP_Daemon_Dynamic_CNL113739_demo</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/ISUP_ANSI_CNL113411.tpd b/regression_test/XML/tpdValidTest/tpdTest/ISUP_ANSI_CNL113411.tpd new file mode 100644 index 000000000..ab62fab25 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/ISUP_ANSI_CNL113411.tpd @@ -0,0 +1,62 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: ISUP_ANSI_CNL113411.tpd + Description: tpd project file + Rev: R6A01 + Prodnr: CNL 113 411 + Updated: 2012-03-27 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>ISUP_ANSI_CNL113411</ProjectName> + <ReferencedProjects> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/ISUP_ANSI_CNL113411_FS.pdf" relativeURI="doc/ISUP_ANSI_CNL113411_FS.pdf"/> + <FileResource projectRelativePath="doc/ISUP_ANSI_CNL113411_PRI.pdf" relativeURI="doc/ISUP_ANSI_CNL113411_PRI.pdf"/> + <FileResource projectRelativePath="doc/ISUP_ANSI_CNL113411_UG.pdf" relativeURI="doc/ISUP_ANSI_CNL113411_UG.pdf"/> + <FileResource projectRelativePath="src/ISUP_ANSI_EncDec.cc" relativeURI="src/ISUP_ANSI_EncDec.cc"/> + <FileResource projectRelativePath="src/ISUP_ANSI_Types.ttcn" relativeURI="src/ISUP_ANSI_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/ISUP_ANSI_CNL113411</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <moduleParameter>tsp.*</moduleParameter> + </NamingCoventions> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/ISUP_Q.762_CNL113365.tpd b/regression_test/XML/tpdValidTest/tpdTest/ISUP_Q.762_CNL113365.tpd new file mode 100644 index 000000000..3aa72de5e --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/ISUP_Q.762_CNL113365.tpd @@ -0,0 +1,62 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: ISUP_Q.762_CNL113365.tpd + Description: tpd project file + Rev: R7B01 + Prodnr: CNL 113 365 + Updated: 2012-11-13 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>ISUP_Q.762_CNL113365</ProjectName> + <ReferencedProjects> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/ISUP_Q.762_CNL113365_FS.pdf" relativeURI="doc/ISUP_Q.762_CNL113365_FS.pdf"/> + <FileResource projectRelativePath="doc/ISUP_Q.762_CNL113365_PRI.pdf" relativeURI="doc/ISUP_Q.762_CNL113365_PRI.pdf"/> + <FileResource projectRelativePath="doc/ISUP_Q.762_CNL113365_UG.pdf" relativeURI="doc/ISUP_Q.762_CNL113365_UG.pdf"/> + <FileResource projectRelativePath="src/ISUP_EncDec.cc" relativeURI="src/ISUP_EncDec.cc"/> + <FileResource projectRelativePath="src/ISUP_Types.ttcn" relativeURI="src/ISUP_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/ISUP_Q.762_CNL113365</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <moduleParameter>tsp.*</moduleParameter> + </NamingCoventions> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/ISUP_Q.762_TCOM_CNL113762.tpd b/regression_test/XML/tpdValidTest/tpdTest/ISUP_Q.762_TCOM_CNL113762.tpd new file mode 100644 index 000000000..e9da4b9b2 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/ISUP_Q.762_TCOM_CNL113762.tpd @@ -0,0 +1,52 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: ISUP_Q.762_TCOM_CNL113762.tpd + Description: tpd project file + Rev: R1A02 + Prodnr: CNL 113 762 + Updated: 2013-01-22 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>ISUP_Q.762_TCOM_CNL113762</ProjectName> + <ReferencedProjects> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="ISUP_Q.762_TCOM_CNL113762_FS.pdf" relativeURI="doc/ISUP_Q.762_TCOM_CNL113762_FS.pdf"/> + <FileResource projectRelativePath="ISUP_Q.762_TCOM_CNL113762_PRI.pdf" relativeURI="doc/ISUP_Q.762_TCOM_CNL113762_PRI.pdf"/> + <FileResource projectRelativePath="ISUP_Q.762_TCOM_CNL113762_UG.pdf" relativeURI="doc/ISUP_Q.762_TCOM_CNL113762_UG.pdf"/> + <FileResource projectRelativePath="src/ISUP_Q.762_TCOM_CNL113762.grp" relativeURI="src/ISUP_Q.762_TCOM_CNL113762.grp"/> + <FileResource projectRelativePath="src/ISUP_TCOM_EncDec.cc" relativeURI="src/ISUP_TCOM_EncDec.cc"/> + <FileResource projectRelativePath="src/ISUP_TCOM_Types.ttcn" relativeURI="src/ISUP_TCOM_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/ISUP_Q.762_TCOM_CNL113762</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/ISUP_for_Japan_CNL113727.tpd b/regression_test/XML/tpdValidTest/tpdTest/ISUP_for_Japan_CNL113727.tpd new file mode 100644 index 000000000..ba954934f --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/ISUP_for_Japan_CNL113727.tpd @@ -0,0 +1,62 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: ISUP_for_Japan_CNL113727.tpd + Description: tpd project file + Rev: R2A01 + Prodnr: CNL 113 727 + Updated: 2012-03-27 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>ISUP_for_Japan_CNL113727</ProjectName> + <ReferencedProjects> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/ISUP_for_Japan_CNL113727_FS.pdf" relativeURI="doc/ISUP_for_Japan_CNL113727_FS.pdf"/> + <FileResource projectRelativePath="doc/ISUP_for_Japan_CNL113727_PRI.pdf" relativeURI="doc/ISUP_for_Japan_CNL113727_PRI.pdf"/> + <FileResource projectRelativePath="doc/ISUP_for_Japan_CNL113727_UG.pdf" relativeURI="doc/ISUP_for_Japan_CNL113727_UG.pdf"/> + <FileResource projectRelativePath="src/ISUP_TTC_EncDec.cc" relativeURI="src/ISUP_TTC_EncDec.cc"/> + <FileResource projectRelativePath="src/ISUP_TTC_Types.ttcn" relativeURI="src/ISUP_TTC_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/ISUP_for_Japan_CNL113727</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <moduleParameter>tsp.*</moduleParameter> + </NamingCoventions> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/IUA_CNL113439.tpd b/regression_test/XML/tpdValidTest/tpdTest/IUA_CNL113439.tpd new file mode 100644 index 000000000..ad2722014 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/IUA_CNL113439.tpd @@ -0,0 +1,47 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: IUA_CNL113439.tpd + Description: tpd project file + Rev: R4A01 + Prodnr: CNL 113 439 + Updated: 2012-10-01 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>IUA_CNL113439</ProjectName> + <ReferencedProjects> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="src/IUA_Types.ttcn" relativeURI="src/IUA_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/IUA_CNL113439</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/JSON_v07_2006_CNL113676.tpd b/regression_test/XML/tpdValidTest/tpdTest/JSON_v07_2006_CNL113676.tpd new file mode 100644 index 000000000..be1852fa5 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/JSON_v07_2006_CNL113676.tpd @@ -0,0 +1,47 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: JSON_v07_2006_CNL113676.tpd + Description: tpd project file + Rev: R1A02 + Prodnr: CNL 113 676 + Updated: 2012-07-31 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>JSON_v07_2006_CNL113676</ProjectName> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + </Folders> + <Files> + <FileResource projectRelativePath="JSON_Types.ttcn" relativeURI="src/JSON_Types.ttcn"/> + <FileResource projectRelativePath="doc/JSON_v07_2006_CNL113676_FS.pdf" relativeURI="doc/JSON_v07_2006_CNL113676_FS.pdf"/> + <FileResource projectRelativePath="doc/JSON_v07_2006_CNL113676_PRI.pdf" relativeURI="doc/JSON_v07_2006_CNL113676_PRI.pdf"/> + <FileResource projectRelativePath="doc/JSON_v07_2006_CNL113676_UG.pdf" relativeURI="doc/JSON_v07_2006_CNL113676_UG.pdf"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/JSON_v07_2006_CNL113676</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/JUnit.tpd b/regression_test/XML/tpdValidTest/tpdTest/JUnit.tpd new file mode 100644 index 000000000..1321632e3 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/JUnit.tpd @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>JUnit</ProjectName> + <Files> + <FileResource projectRelativePath="JUnit.xsd" relativeURI="JUnit.xsd"/> + <FileResource projectRelativePath="JUnitTestResult.ttcn" relativeURI="JUnitTestResult.ttcn"/> + <FileResource projectRelativePath="UsefulTtcn3Types.ttcn" relativeURI="UsefulTtcn3Types.ttcn"/> + <FileResource projectRelativePath="XSD.ttcn" relativeURI="XSD.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/JUnit</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/LANL2asp_CNL113519.tpd b/regression_test/XML/tpdValidTest/tpdTest/LANL2asp_CNL113519.tpd new file mode 100644 index 000000000..7528f70b8 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/LANL2asp_CNL113519.tpd @@ -0,0 +1,70 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: LANL2asp_CNL113519.tpd + Description: tpd project file + Rev: R6A02 + Prodnr: CNL 113 519 + Updated: 2012-03-01 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>LANL2asp_CNL113519</ProjectName> + <ReferencedProjects> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../../ProtocolModules/COMMON/ProtocolModules_Common.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/LANL2asp_CNL113519_FS.pdf" relativeURI="doc/LANL2asp_CNL113519_FS.pdf"/> + <FileResource projectRelativePath="doc/LANL2asp_CNL113519_PRI.pdf" relativeURI="doc/LANL2asp_CNL113519_PRI.pdf"/> + <FileResource projectRelativePath="doc/LANL2asp_CNL113519_UG.pdf" relativeURI="doc/LANL2asp_CNL113519_UG.pdf"/> + <FileResource projectRelativePath="src/LANL2asp_PT.cc" relativeURI="src/LANL2asp_PT.cc"/> + <FileResource projectRelativePath="src/LANL2asp_PT.hh" relativeURI="src/LANL2asp_PT.hh"/> + <FileResource projectRelativePath="src/LANL2asp_PortType.ttcn" relativeURI="src/LANL2asp_PortType.ttcn"/> + <FileResource projectRelativePath="src/LANL2asp_Types.ttcn" relativeURI="src/LANL2asp_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/LANL2asp_CNL113519</targetExecutable> + <linkerLibraries> + <listItem>pcap</listItem> + </linkerLibraries> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <externalFunction>[e]?f_.*</externalFunction> + <formalParameter>.*</formalParameter> + </NamingCoventions> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/LDAPasp_RFC4511_CNL113513_Functions.tpd b/regression_test/XML/tpdValidTest/tpdTest/LDAPasp_RFC4511_CNL113513_Functions.tpd new file mode 100644 index 000000000..7b6e68083 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/LDAPasp_RFC4511_CNL113513_Functions.tpd @@ -0,0 +1,56 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: LDAPasp_RFC4511_CNL113513_Functions.tpd + Description: tpd project file + Rev: R3C01 + Prodnr: CNL 113 513 + Updated: 2012-11-23 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>LDAPasp_RFC4511_CNL113513_Functions</ProjectName> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + </Folders> + <Files> + <FileResource projectRelativePath="LDAPasp_RFC4511_Types.ttcn" relativeURI="src/LDAPasp_RFC4511_Types.ttcn"/> + <FileResource projectRelativePath="Lightweight_Directory_Access_Protocol.asn" relativeURI="src/Lightweight_Directory_Access_Protocol.asn"/> + <FileResource projectRelativePath="doc/LDAPasp_RFC4511_CNL113513_FS.pdf" relativeURI="doc/LDAPasp_RFC4511_CNL113513_FS.pdf"/> + <FileResource projectRelativePath="doc/LDAPasp_RFC4511_CNL113513_PRI.pdf" relativeURI="doc/LDAPasp_RFC4511_CNL113513_PRI.pdf"/> + <FileResource projectRelativePath="doc/LDAPasp_RFC4511_CNL113513_UG.pdf" relativeURI="doc/LDAPasp_RFC4511_CNL113513_UG.pdf"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/LDAPasp_RFC4511_CNL113513_Functions</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/LDAPasp_RFC4511_CNL113513_TestPort.tpd b/regression_test/XML/tpdValidTest/tpdTest/LDAPasp_RFC4511_CNL113513_TestPort.tpd new file mode 100644 index 000000000..d26902be3 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/LDAPasp_RFC4511_CNL113513_TestPort.tpd @@ -0,0 +1,62 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: LDAPasp_RFC4511_CNL113513_TestPort.tpd + Description: tpd project file + Rev: R3C01 + Prodnr: CNL 113 513 + Updated: 2012-11-23 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>LDAPasp_RFC4511_CNL113513_TestPort</ProjectName> + <ReferencedProjects> + <ReferencedProject name="Abstract_Socket_CNL113384" projectLocationURI="../Common_Components/Abstract_Socket_CNL113384/Abstract_Socket_CNL113384.tpd"/> + <ReferencedProject name="TCCUsefulFunctions_CNL113472_Common" projectLocationURI="../../Libraries/TCCUsefulFunctions_CNL113472/TCCUsefulFunctions_CNL113472_Common.tpd"/> + <ReferencedProject name="LDAPasp_RFC4511_CNL113513_Functions" projectLocationURI="LDAPasp_RFC4511_CNL113513_Functions.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + </Folders> + <Files> + <FileResource projectRelativePath=".TITAN_properties" relativeURI="../../../../../home/ekovjno/workspace/LDAPasp_RFC4511_CNL113513_TestPort/.TITAN_properties"/> + <FileResource projectRelativePath=".project" relativeURI="../../../../../home/ekovjno/workspace/LDAPasp_RFC4511_CNL113513_TestPort/.project"/> + <FileResource projectRelativePath="LDAPasp_RFC4511_PT.cc" relativeURI="src/LDAPasp_RFC4511_PT.cc"/> + <FileResource projectRelativePath="LDAPasp_RFC4511_PT.hh" relativeURI="src/LDAPasp_RFC4511_PT.hh"/> + <FileResource projectRelativePath="LDAPasp_RFC4511_PortType.ttcn" relativeURI="src/LDAPasp_RFC4511_PortType.ttcn"/> + <FileResource projectRelativePath="LDIF_RFC4511.ttcn" relativeURI="src/LDIF_RFC4511.ttcn"/> + <FileResource projectRelativePath="doc/LDAPasp_RFC4511_CNL113513_FS.pdf" relativeURI="doc/LDAPasp_RFC4511_CNL113513_FS.pdf"/> + <FileResource projectRelativePath="doc/LDAPasp_RFC4511_CNL113513_PRI.pdf" relativeURI="doc/LDAPasp_RFC4511_CNL113513_PRI.pdf"/> + <FileResource projectRelativePath="doc/LDAPasp_RFC4511_CNL113513_UG.pdf" relativeURI="doc/LDAPasp_RFC4511_CNL113513_UG.pdf"/> + <FileResource projectRelativePath="ldif.lex" relativeURI="src/ldif.lex"/> + <FileResource projectRelativePath="ldif.tab.cc" relativeURI="src/ldif.tab.cc"/> + <FileResource projectRelativePath="ldif.tab.hh" relativeURI="src/ldif.tab.hh"/> + <FileResource projectRelativePath="ldif.y" relativeURI="src/ldif.y"/> + <FileResource projectRelativePath="lex.ldif.cc" relativeURI="src/lex.ldif.cc"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/LDAPasp_RFC4511_CNL113513_TestPort</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/LNP_ANSI_CNL113715.tpd b/regression_test/XML/tpdValidTest/tpdTest/LNP_ANSI_CNL113715.tpd new file mode 100644 index 000000000..cfd317200 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/LNP_ANSI_CNL113715.tpd @@ -0,0 +1,67 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: LNP_ANSI_CNL113715.tpd + Description: tpd project file + Rev: R1D01 + Prodnr: CNL 113 715 + Updated: 2013-01-28 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>LNP_ANSI_CNL113715</ProjectName> + <ReferencedProjects> + <ReferencedProject name="ROSE_CNL113369" projectLocationURI="../ROSE_CNL113369/ROSE_CNL113369.tpd"/> + <ReferencedProject name="TCAPasp_CNL113349" projectLocationURI="../../TestPorts/TCAPasp_CNL113349/TCAPasp_CNL113349.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/LNP_ANSI_CNL113715_FS.pdf" relativeURI="doc/LNP_ANSI_CNL113715_FS.pdf"/> + <FileResource projectRelativePath="doc/LNP_ANSI_CNL113715_PRI.pdf" relativeURI="doc/LNP_ANSI_CNL113715_PRI.pdf"/> + <FileResource projectRelativePath="doc/LNP_ANSI_CNL113715_UG.pdf" relativeURI="doc/LNP_ANSI_CNL113715_UG.pdf"/> + <FileResource projectRelativePath="src/LNP_ANSI_EncDec.cc" relativeURI="src/LNP_ANSI_EncDec.cc"/> + <FileResource projectRelativePath="src/LNP_ANSI_Errors.asn" relativeURI="src/LNP_ANSI_Errors.asn"/> + <FileResource projectRelativePath="src/LNP_ANSI_Operations.asn" relativeURI="src/LNP_ANSI_Operations.asn"/> + <FileResource projectRelativePath="src/LNP_ANSI_PDU_Defs.asn" relativeURI="src/LNP_ANSI_PDU_Defs.asn"/> + <FileResource projectRelativePath="src/LNP_ANSI_Parameters.asn" relativeURI="src/LNP_ANSI_Parameters.asn"/> + <FileResource projectRelativePath="src/LNP_ANSI_Types.ttcn" relativeURI="src/LNP_ANSI_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/LNP_ANSI_CNL113715</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <moduleParameter>tsp.*</moduleParameter> + </NamingCoventions> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/LOADMEASasp_CNL113585.tpd b/regression_test/XML/tpdValidTest/tpdTest/LOADMEASasp_CNL113585.tpd new file mode 100644 index 000000000..72fd051ec --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/LOADMEASasp_CNL113585.tpd @@ -0,0 +1,75 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: LOADMEASasp_CNL113585.tpd + Description: tpd project file + Rev: R3C02 + Prodnr: CNL 113 585 + Updated: 2012-07-30 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>LOADMEASasp_CNL113585</ProjectName> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/LOADMEASasp_CNL113585_FS.pdf" relativeURI="doc/LOADMEASasp_CNL113585_FS.pdf"/> + <FileResource projectRelativePath="doc/LOADMEASasp_CNL113585_PRI.pdf" relativeURI="doc/LOADMEASasp_CNL113585_PRI.pdf"/> + <FileResource projectRelativePath="doc/LOADMEASasp_CNL113585_UG.pdf" relativeURI="doc/LOADMEASasp_CNL113585_UG.pdf"/> + <FileResource projectRelativePath="src/LOADMEASasp_PT.cc" relativeURI="src/LOADMEASasp_PT.cc"/> + <FileResource projectRelativePath="src/LOADMEASasp_PT.hh" relativeURI="src/LOADMEASasp_PT.hh"/> + <FileResource projectRelativePath="src/LOADMEASasp_PortType.ttcn" relativeURI="src/LOADMEASasp_PortType.ttcn"/> + <FileResource projectRelativePath="src/LOADMEASasp_Types.ttcn" relativeURI="src/LOADMEASasp_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/LOADMEASasp_CNL113585</targetExecutable> + <SolarisSpecificLibraries> + <listItem>kstat</listItem> + <listItem>rt</listItem> + </SolarisSpecificLibraries> + <Solaris8SpecificLibraries> + <listItem>kstat</listItem> + <listItem>rt</listItem> + </Solaris8SpecificLibraries> + <linkerLibraries> + <listItem>pthread</listItem> + </linkerLibraries> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <externalFunction>.*</externalFunction> + <moduleParameter>tsp.*</moduleParameter> + <formalParameter>.*</formalParameter> + </NamingCoventions> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/M2PA_CNL113558.tpd b/regression_test/XML/tpdValidTest/tpdTest/M2PA_CNL113558.tpd new file mode 100644 index 000000000..128693d05 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/M2PA_CNL113558.tpd @@ -0,0 +1,47 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: M2PA_CNL113558.tpd + Description: tpd project file + Rev: R1B + Prodnr: CNL 113 558 + Updated: 2013-03-06 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>M2PA_CNL113558</ProjectName> + <ReferencedProjects> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="src/M2PA_Types.ttcn" relativeURI="src/M2PA_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/M2PA_CNL113558</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/M3AP_v9.4.0_CNL113735.tpd b/regression_test/XML/tpdValidTest/tpdTest/M3AP_v9.4.0_CNL113735.tpd new file mode 100644 index 000000000..059b96e8f --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/M3AP_v9.4.0_CNL113735.tpd @@ -0,0 +1,320 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: M3AP_v9.4.0_CNL113735.tpd + Description: tpd project file + Rev: R1A03 + Prodnr: CNL 113 735 + Updated: 2012-04-20 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>M3AP_v9.4.0_CNL113735</ProjectName> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/M3AP_v9.4.0_CNL113735_FS.pdf" relativeURI="doc/M3AP_v9.4.0_CNL113735_FS.pdf"/> + <FileResource projectRelativePath="doc/M3AP_v9.4.0_CNL113735_PRI.pdf" relativeURI="doc/M3AP_v9.4.0_CNL113735_PRI.pdf"/> + <FileResource projectRelativePath="doc/M3AP_v9.4.0_CNL113735_UG.pdf" relativeURI="doc/M3AP_v9.4.0_CNL113735_UG.pdf"/> + <FileResource projectRelativePath="src/M3AP_CommonDataTypes.asn" relativeURI="src/M3AP_CommonDataTypes.asn"/> + <FileResource projectRelativePath="src/M3AP_Constants.asn" relativeURI="src/M3AP_Constants.asn"/> + <FileResource projectRelativePath="src/M3AP_Containers.asn" relativeURI="src/M3AP_Containers.asn"/> + <FileResource projectRelativePath="src/M3AP_EncDec.cc" relativeURI="src/M3AP_EncDec.cc"/> + <FileResource projectRelativePath="src/M3AP_IEs.asn" relativeURI="src/M3AP_IEs.asn"/> + <FileResource projectRelativePath="src/M3AP_PDU_Contents.asn" relativeURI="src/M3AP_PDU_Contents.asn"/> + <FileResource projectRelativePath="src/M3AP_PDU_Descriptions.asn" relativeURI="src/M3AP_PDU_Descriptions.asn"/> + <FileResource projectRelativePath="src/M3AP_Types.ttcn" relativeURI="src/M3AP_Types.ttcn"/> + <FileResource projectRelativePath="src/gen.sh" relativeURI="src/gen.sh"/> + <FileResource projectRelativePath="src/m3ap_class.h" relativeURI="src/m3ap_class.h"/> + <FileResource projectRelativePath="src/m3ap_class.c" relativeURI="src/m3ap_class.c"/> + <FileResource projectRelativePath="src/m3ap_class.c" relativeURI="src/m3ap_class_solarisx86.c"/> + <FileResource projectRelativePath="src/m3ap_class_linux.c" relativeURI="src/m3ap_class_linux.c"/> + <FileResource projectRelativePath="src/m3ap_class_linux64bit.c" relativeURI="src/m3ap_class_linux64bit.c"/> + </Files> + <ActiveConfiguration>LINUX64</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/M3AP_v9.4.0_CNL113735</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>osstoed</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <moduleParameter>tsp.*</moduleParameter> + </NamingCoventions> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/m3ap_class.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/m3ap_class_solarisx86.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/m3ap_class_linux.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="LINUX"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/M3AP_v9.4.0_CNL113735</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>osstoed</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <moduleParameter>tsp.*</moduleParameter> + </NamingCoventions> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/m3ap_class.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/m3ap_class_solarisx86.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/m3ap_class_linux64bit.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="LINUX64"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/M3AP_v9.4.0_CNL113735</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>osstoed</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <moduleParameter>tsp.*</moduleParameter> + </NamingCoventions> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/m3ap_class.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/m3ap_class_solarisx86.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/m3ap_class_linux.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="SOLARIS_SPARC"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/M3AP_v9.4.0_CNL113735</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>osstoed</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <moduleParameter>tsp.*</moduleParameter> + </NamingCoventions> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/m3ap_class_solarisx86.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/m3ap_class_linux.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/m3ap_class_linux64bit.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + + + + <Configuration name="SOLARIS_X86"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/M3AP_v9.4.0_CNL113735</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>osstoed</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <moduleParameter>tsp.*</moduleParameter> + </NamingCoventions> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/m3ap_class.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/m3ap_class_linux.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/m3ap_class_linux64bit.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/M3UA_SCTP_Daemon_CNL113487.tpd b/regression_test/XML/tpdValidTest/tpdTest/M3UA_SCTP_Daemon_CNL113487.tpd new file mode 100644 index 000000000..792bde69b --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/M3UA_SCTP_Daemon_CNL113487.tpd @@ -0,0 +1,55 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: M3UA_SCTP_Daemon_CNL113487.tpd + Description: tpd project file + Rev: R5A01 + Prodnr: CNL 113 487 + Updated: 2012-11-23 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>M3UA_SCTP_Daemon_CNL113487</ProjectName> + <ReferencedProjects> + <ReferencedProject name="IPL4asp_CNL113531" projectLocationURI="../../TestPorts/IPL4asp_CNL113531/IPL4asp_CNL113531.tpd"/> + <ReferencedProject name="MTP3asp_CNL113337" projectLocationURI="../../TestPorts/MTP3asp_CNL113337/MTP3asp_CNL113337.tpd"/> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../../ProtocolModules/COMMON/ProtocolModules_Common.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/M3UA_SCTP_Daemon_CNL113487_FS.pdf" relativeURI="doc/M3UA_SCTP_Daemon_CNL113487_FS.pdf"/> + <FileResource projectRelativePath="doc/M3UA_SCTP_Daemon_CNL113487_PRI.pdf" relativeURI="doc/M3UA_SCTP_Daemon_CNL113487_PRI.pdf"/> + <FileResource projectRelativePath="doc/M3UA_SCTP_Daemon_CNL113487_UG.pdf" relativeURI="doc/M3UA_SCTP_Daemon_CNL113487_UG.pdf"/> + <FileResource projectRelativePath="src/M3UA_SCTP_Daemon.ttcn" relativeURI="src/M3UA_SCTP_Daemon.ttcn"/> + <FileResource projectRelativePath="src/M3UA_SCTP_EncDec.cc" relativeURI="src/M3UA_SCTP_EncDec.cc"/> + <FileResource projectRelativePath="src/M3UA_SCTP_Types.ttcn" relativeURI="src/M3UA_SCTP_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/M3UA_SCTP_Daemon_CNL113487</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/MAP_ANSI_v2.0_CNL113673.tpd b/regression_test/XML/tpdValidTest/tpdTest/MAP_ANSI_v2.0_CNL113673.tpd new file mode 100644 index 000000000..9997e45fb --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/MAP_ANSI_v2.0_CNL113673.tpd @@ -0,0 +1,61 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: MAP_ANSI_v2.0_CNL113673.tpd + Description: tpd project file + Rev: R1A01 + Prodnr: CNL 113 673 + Updated: 2012-10-12 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>MAP_ANSI_v2.0_CNL113673</ProjectName> + <ReferencedProjects> + <ReferencedProject name="TCAPasp_CNL113349" projectLocationURI="../../TestPorts/TCAPasp_CNL113349/TCAPasp_CNL113349.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/MAP_ANSI_v2.0_CNL113673_FS.pdf" relativeURI="doc/MAP_ANSI_v2.0_CNL113673_FS.pdf"/> + <FileResource projectRelativePath="doc/MAP_ANSI_v2.0_CNL113673_PRI.pdf" relativeURI="doc/MAP_ANSI_v2.0_CNL113673_PRI.pdf"/> + <FileResource projectRelativePath="doc/MAP_ANSI_v2.0_CNL113673_UG.pdf" relativeURI="doc/MAP_ANSI_v2.0_CNL113673_UG.pdf"/> + <FileResource projectRelativePath="src/MAP_ANSI_EncDec.cc" relativeURI="src/MAP_ANSI_EncDec.cc"/> + <FileResource projectRelativePath="src/MAP_ANSI_Operations.asn" relativeURI="src/MAP_ANSI_Operations.asn"/> + <FileResource projectRelativePath="src/MAP_ANSI_Parameters.asn" relativeURI="src/MAP_ANSI_Parameters.asn"/> + <FileResource projectRelativePath="src/MAP_ANSI_Types.ttcn" relativeURI="src/MAP_ANSI_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/MAP_ANSI_v2.0_CNL113673</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/MAP_ANSI_v2.0_CNL113673_demo.tpd b/regression_test/XML/tpdValidTest/tpdTest/MAP_ANSI_v2.0_CNL113673_demo.tpd new file mode 100644 index 000000000..728a78570 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/MAP_ANSI_v2.0_CNL113673_demo.tpd @@ -0,0 +1,62 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>MAP_ANSI_v2.0_CNL113673_demo</ProjectName> + <ReferencedProjects> + <ReferencedProject name="MAP_ANSI_v2.0_CNL113673" projectLocationURI="../MAP_ANSI_v2.0_CNL113673.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="MAP_ANSI.cfg" relativeURI="MAP_ANSI.cfg"/> + <FileResource projectRelativePath="MAP_ANSI_Demo.ttcn" relativeURI="MAP_ANSI_Demo.ttcn"/> + <FileResource projectRelativePath="MAP_ANSI_Mapping.ttcn" relativeURI="MAP_ANSI_Mapping.ttcn"/> + </Files> + <PathVariables> + <PathVariable name="SS7_HOME" value="/vobs/ttcn/TCC_Common/Other/EINSS7/19089-lpy111903_1_R1B/EABss7028"/> + </PathVariables> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/MAP_ANSI_v2.0_CNL113673_demo</targetExecutable> + <preprocessorDefines> + <listItem>EINSS7_THREADSAFE -D__EXTENSIONS__</listItem> + <listItem>_REENTRANT</listItem> + <listItem>_POSIX_PTHREAD_SEMANTICS</listItem> + <listItem>CP_R12A30</listItem> + <listItem>CP_R12</listItem> + <listItem>SCCP_CAA901437_R12</listItem> + <listItem>TCAP_CAA20118_R8</listItem> + <listItem>TCAP_CAA201694_R10</listItem> + <listItem>T_ADDRESS</listItem> + </preprocessorDefines> + <preprocessorIncludes> + <listItem>$(SS7_HOME)/include</listItem> + </preprocessorIncludes> + <disableXER>true</disableXER> + <linkerLibraries> + <listItem>einss7_n_r</listItem> + <listItem>rt</listItem> + <listItem>dl</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>$(SS7_HOME)/lib64</listItem> + </linkerLibrarySearchPath> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> \ No newline at end of file diff --git a/regression_test/XML/tpdValidTest/tpdTest/MAP_Current_CNL113745_1.tpd b/regression_test/XML/tpdValidTest/tpdTest/MAP_Current_CNL113745_1.tpd new file mode 100644 index 000000000..f7c935260 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/MAP_Current_CNL113745_1.tpd @@ -0,0 +1,182 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: MAP_Current_CNL113745_1.tpd + Description: tpd project file + Rev: R2B + Prodnr: CNL 113 745 + Updated: 2013-04-02 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>MAP_Current_CNL113745_1</ProjectName> + <ReferencedProjects> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/> + <ReferencedProject name="ROSE_CNL113369" projectLocationURI="../ROSE_CNL113369/ROSE_CNL113369.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="src/MAP_ApplicationContexts.asn" relativeURI="src/MAP_ApplicationContexts.asn"/> + <FileResource projectRelativePath="src/MAP_BS_Code.asn" relativeURI="src/MAP_BS_Code.asn"/> + <FileResource projectRelativePath="src/MAP_CH_DataTypes.asn" relativeURI="src/MAP_CH_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_CallHandlingOperations.asn" relativeURI="src/MAP_CallHandlingOperations.asn"/> + <FileResource projectRelativePath="src/MAP_CommonDataTypes.asn" relativeURI="src/MAP_CommonDataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_Current_CNL113745_1_ProtocolModule.grp" relativeURI="src/MAP_Current_CNL113745_1_ProtocolModule.grp"/> + <FileResource projectRelativePath="src/MAP_Current_CNL113745_1_ProtocolModule_HLR.grp" relativeURI="src/MAP_Current_CNL113745_1_ProtocolModule_HLR.grp"/> + <FileResource projectRelativePath="src/MAP_Current_CNL113745_1_v123_ProtocolModule.grp" relativeURI="src/MAP_Current_CNL113745_1_v123_ProtocolModule.grp"/> + <FileResource projectRelativePath="src/MAP_Current_CNL113745_1_v123_ProtocolModule_HLR.grp" relativeURI="src/MAP_Current_CNL113745_1_v123_ProtocolModule_HLR.grp"/> + <FileResource projectRelativePath="src/MAP_DialogueInformation.asn" relativeURI="src/MAP_DialogueInformation.asn"/> + <FileResource projectRelativePath="src/MAP_ER_DataTypes.asn" relativeURI="src/MAP_ER_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_EncDec.cc" relativeURI="src/MAP_EncDec.cc"/> + <FileResource projectRelativePath="src/MAP_EncDec_v123.cc" relativeURI="src/MAP_EncDec_v123.cc"/> + <FileResource projectRelativePath="src/MAP_Ericsson_Operations.asn" relativeURI="src/MAP_Ericsson_Operations.asn"/> + <FileResource projectRelativePath="src/MAP_Errors.asn" relativeURI="src/MAP_Errors.asn"/> + <FileResource projectRelativePath="src/MAP_ExtensionDataTypes.asn" relativeURI="src/MAP_ExtensionDataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_ExtensionDataTypes_HLR.asn" relativeURI="src/MAP_ExtensionDataTypes_HLR.asn"/> + <FileResource projectRelativePath="src/MAP_ExtensionDataTypes_NumberPortability.asn" relativeURI="src/MAP_ExtensionDataTypes_NumberPortability.asn"/> + <FileResource projectRelativePath="src/MAP_GR_DataTypes.asn" relativeURI="src/MAP_GR_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_Group_Call_Operations.asn" relativeURI="src/MAP_Group_Call_Operations.asn"/> + <FileResource projectRelativePath="src/MAP_LCS_DataTypes.asn" relativeURI="src/MAP_LCS_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_LocationServiceOperations.asn" relativeURI="src/MAP_LocationServiceOperations.asn"/> + <FileResource projectRelativePath="src/MAP_MS_DataTypes.asn" relativeURI="src/MAP_MS_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_MobileServiceOperations.asn" relativeURI="src/MAP_MobileServiceOperations.asn"/> + <FileResource projectRelativePath="src/MAP_OM_DataTypes.asn" relativeURI="src/MAP_OM_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_OperationAndMaintenanceOperations.asn" relativeURI="src/MAP_OperationAndMaintenanceOperations.asn"/> + <FileResource projectRelativePath="src/MAP_PDC_Operations.asn" relativeURI="src/MAP_PDC_Operations.asn"/> + <FileResource projectRelativePath="src/MAP_PDU_Defs.asn" relativeURI="src/MAP_PDU_Defs.asn"/> + <FileResource projectRelativePath="src/MAP_PDU_Defs_v123.asn" relativeURI="src/MAP_PDU_Defs_v123.asn"/> + <FileResource projectRelativePath="src/MAP_Protocol.asn" relativeURI="src/MAP_Protocol.asn"/> + <FileResource projectRelativePath="src/MAP_SM_DataTypes.asn" relativeURI="src/MAP_SM_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_SS_Code.asn" relativeURI="src/MAP_SS_Code.asn"/> + <FileResource projectRelativePath="src/MAP_SS_DataTypes.asn" relativeURI="src/MAP_SS_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_ShortMessageServiceOperations.asn" relativeURI="src/MAP_ShortMessageServiceOperations.asn"/> + <FileResource projectRelativePath="src/MAP_SupplementaryServiceOperations.asn" relativeURI="src/MAP_SupplementaryServiceOperations.asn"/> + <FileResource projectRelativePath="src/MAP_TS_Code.asn" relativeURI="src/MAP_TS_Code.asn"/> + <FileResource projectRelativePath="src/MAP_Types.ttcn" relativeURI="src/MAP_Types.ttcn"/> + <FileResource projectRelativePath="src/MAP_Types_v123.ttcn" relativeURI="src/MAP_Types_v123.ttcn"/> + </Files> + <ActiveConfiguration>NumberPortability</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <singleMode>true</singleMode> + <targetExecutable>bin/MAP_v7.12.0_CNL113635</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FileProperties> + <FileResource> + <FilePath>src/MAP_EncDec_v123.cc</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/MAP_PDU_Defs_v123.asn</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/MAP_Types_v123.ttcn</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="NumberPortability"> + <ProjectProperties> + <MakefileSettings> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <singleMode>true</singleMode> + <targetExecutable>bin/MAP_Current_CNL113635</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <function>.*</function> + <externalFunction>.*</externalFunction> + <moduleParameter>.*</moduleParameter> + <localVariable>.*</localVariable> + <formalParameter>.*</formalParameter> + </NamingCoventions> + </ProjectProperties> + <FileProperties> + <FileResource> + <FilePath>src/MAP_Current_CNL113745_1_ProtocolModule.grp</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/MAP_Current_CNL113745_1_ProtocolModule_HLR.grp</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/MAP_Current_CNL113745_1_v123_ProtocolModule.grp</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/MAP_Current_CNL113745_1_v123_ProtocolModule_HLR.grp</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/MAP_EncDec_v123.cc</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/MAP_ExtensionDataTypes_HLR.asn</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/MAP_ExtensionDataTypes_NumberPortability.asn</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/MAP_PDU_Defs_v123.asn</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/MAP_Types_v123.ttcn</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/MAP_Current_CNL113745_1_HLR.tpd b/regression_test/XML/tpdValidTest/tpdTest/MAP_Current_CNL113745_1_HLR.tpd new file mode 100644 index 000000000..9f4074d63 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/MAP_Current_CNL113745_1_HLR.tpd @@ -0,0 +1,194 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: MAP_Current_CNL113745_1_HLR.tpd + Description: tpd project file + Rev: R2B + Prodnr: CNL 113 745 + Updated: 2013-04-02 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>MAP_Current_CNL113745_1</ProjectName> + <ReferencedProjects> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/> + <ReferencedProject name="ROSE_CNL113369" projectLocationURI="../ROSE_CNL113369/ROSE_CNL113369.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/MAP_Current_CNL113745_1_FS.pdf" relativeURI="doc/MAP_Current_CNL113745_1_FS.pdf"/> + <FileResource projectRelativePath="doc/MAP_Current_CNL113745_1_PRI.pdf" relativeURI="doc/MAP_Current_CNL113745_1_PRI.pdf"/> + <FileResource projectRelativePath="doc/MAP_Current_CNL113745_1_UG.pdf" relativeURI="doc/MAP_Current_CNL113745_1_UG.pdf"/> + <FileResource projectRelativePath="src/MAP_Current_CNL113745_1_ProtocolModule_HLR.grp" relativeURI="src/MAP_Current_CNL113745_1_ProtocolModule_HLR.grp"/> + <FileResource projectRelativePath="src/MAP_ApplicationContexts.asn" relativeURI="src/MAP_ApplicationContexts.asn"/> + <FileResource projectRelativePath="src/MAP_BS_Code.asn" relativeURI="src/MAP_BS_Code.asn"/> + <FileResource projectRelativePath="src/MAP_CH_DataTypes.asn" relativeURI="src/MAP_CH_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_CallHandlingOperations.asn" relativeURI="src/MAP_CallHandlingOperations.asn"/> + <FileResource projectRelativePath="src/MAP_CommonDataTypes.asn" relativeURI="src/MAP_CommonDataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_Current_CNL113745_1_ProtocolModule.grp" relativeURI="src/MAP_Current_CNL113745_1_ProtocolModule.grp"/> + <FileResource projectRelativePath="src/MAP_Current_CNL113745_1_v123_ProtocolModule.grp" relativeURI="src/MAP_Current_CNL113745_1_v123_ProtocolModule.grp"/> + <FileResource projectRelativePath="src/MAP_Current_CNL113745_1_v123_ProtocolModule_HLR.grp" relativeURI="src/MAP_Current_CNL113745_1_v123_ProtocolModule_HLR.grp"/> + <FileResource projectRelativePath="src/MAP_DialogueInformation.asn" relativeURI="src/MAP_DialogueInformation.asn"/> + <FileResource projectRelativePath="src/MAP_ER_DataTypes.asn" relativeURI="src/MAP_ER_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_EncDec.cc" relativeURI="src/MAP_EncDec.cc"/> + <FileResource projectRelativePath="src/MAP_EncDec_v123.cc" relativeURI="src/MAP_EncDec_v123.cc"/> + <FileResource projectRelativePath="src/MAP_Ericsson_Operations.asn" relativeURI="src/MAP_Ericsson_Operations.asn"/> + <FileResource projectRelativePath="src/MAP_Errors.asn" relativeURI="src/MAP_Errors.asn"/> + <FileResource projectRelativePath="src/MAP_ExtensionDataTypes.asn" relativeURI="src/MAP_ExtensionDataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_ExtensionDataTypes_HLR.asn" relativeURI="src/MAP_ExtensionDataTypes_HLR.asn"/> + <FileResource projectRelativePath="src/MAP_ExtensionDataTypes_NumberPortability.asn" relativeURI="src/MAP_ExtensionDataTypes_NumberPortability.asn"/> + <FileResource projectRelativePath="src/MAP_GR_DataTypes.asn" relativeURI="src/MAP_GR_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_Group_Call_Operations.asn" relativeURI="src/MAP_Group_Call_Operations.asn"/> + <FileResource projectRelativePath="src/MAP_LCS_DataTypes.asn" relativeURI="src/MAP_LCS_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_LocationServiceOperations.asn" relativeURI="src/MAP_LocationServiceOperations.asn"/> + <FileResource projectRelativePath="src/MAP_MS_DataTypes.asn" relativeURI="src/MAP_MS_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_MobileServiceOperations.asn" relativeURI="src/MAP_MobileServiceOperations.asn"/> + <FileResource projectRelativePath="src/MAP_OM_DataTypes.asn" relativeURI="src/MAP_OM_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_OperationAndMaintenanceOperations.asn" relativeURI="src/MAP_OperationAndMaintenanceOperations.asn"/> + <FileResource projectRelativePath="src/MAP_PDC_Operations.asn" relativeURI="src/MAP_PDC_Operations.asn"/> + <FileResource projectRelativePath="src/MAP_PDU_Defs.asn" relativeURI="src/MAP_PDU_Defs.asn"/> + <FileResource projectRelativePath="src/MAP_PDU_Defs_v123.asn" relativeURI="src/MAP_PDU_Defs_v123.asn"/> + <FileResource projectRelativePath="src/MAP_Protocol.asn" relativeURI="src/MAP_Protocol.asn"/> + <FileResource projectRelativePath="src/MAP_SM_DataTypes.asn" relativeURI="src/MAP_SM_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_SS_Code.asn" relativeURI="src/MAP_SS_Code.asn"/> + <FileResource projectRelativePath="src/MAP_SS_DataTypes.asn" relativeURI="src/MAP_SS_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_ShortMessageServiceOperations.asn" relativeURI="src/MAP_ShortMessageServiceOperations.asn"/> + <FileResource projectRelativePath="src/MAP_SupplementaryServiceOperations.asn" relativeURI="src/MAP_SupplementaryServiceOperations.asn"/> + <FileResource projectRelativePath="src/MAP_TS_Code.asn" relativeURI="src/MAP_TS_Code.asn"/> + <FileResource projectRelativePath="src/MAP_Types.ttcn" relativeURI="src/MAP_Types.ttcn"/> + <FileResource projectRelativePath="src/MAP_Types_v123.ttcn" relativeURI="src/MAP_Types_v123.ttcn"/> + </Files> + <ActiveConfiguration>NumberPortability</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <singleMode>true</singleMode> + <targetExecutable>bin/MAP_v7.12.0_CNL113635</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/MAP_EncDec_v123.cc</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/MAP_PDU_Defs_v123.asn</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/MAP_Types_v123.ttcn</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="NumberPortability"> + <ProjectProperties> + <MakefileSettings> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <singleMode>true</singleMode> + <targetExecutable>bin/MAP_Current_CNL113635</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/MAP_Current_CNL113745_1_ProtocolModule_HLR.grp</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/MAP_Current_CNL113745_1_ProtocolModule.grp</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/MAP_Current_CNL113745_1_v123_ProtocolModule.grp</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/MAP_Current_CNL113745_1_v123_ProtocolModule_HLR.grp</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/MAP_EncDec_v123.cc</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/MAP_ExtensionDataTypes.asn</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/MAP_ExtensionDataTypes_NumberPortability.asn</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/MAP_PDU_Defs_v123.asn</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/MAP_Types_v123.ttcn</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/MAP_Current_CNL113745_1_v123.tpd b/regression_test/XML/tpdValidTest/tpdTest/MAP_Current_CNL113745_1_v123.tpd new file mode 100644 index 000000000..63e358c0d --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/MAP_Current_CNL113745_1_v123.tpd @@ -0,0 +1,56 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: MAP_Current_CNL113745_1_v123.tpd + Description: tpd project file + Rev: R2B + Prodnr: CNL 113 745 + Updated: 2013-04-02 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>MAP_Current_CNL113745_1_v123</ProjectName> + <ReferencedProjects> + <ReferencedProject name="Ericsson_MAP_v2_CNL113725" projectLocationURI="../Ericsson_MAP_v2_CNL113725/Ericsson_MAP_v2_CNL113725.tpd"/> + <ReferencedProject name="MAP_Current_CNL113745_1" projectLocationURI="MAP_Current_CNL113745_1.tpd"/> + <ReferencedProject name="MAP_v1_CNL113431" projectLocationURI="../MAP_v1_CNL113431/MAP_v1_CNL113431.tpd"/> + <ReferencedProject name="MAP_v2_CNL113432" projectLocationURI="../MAP_v2_CNL113432/MAP_v2_CNL113432.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="MAP_EncDec_v123.cc" relativeURI="src/MAP_EncDec_v123.cc"/> + <FileResource projectRelativePath="MAP_PDU_Defs_v123.asn" relativeURI="src/MAP_PDU_Defs_v123.asn"/> + <FileResource projectRelativePath="MAP_Types_v123.ttcn" relativeURI="src/MAP_Types_v123.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <singleMode>true</singleMode> + <targetExecutable>bin/MAP_Current_CNL113745_1_v123</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <function>.*</function> + <externalFunction>.*</externalFunction> + <localVariable>.*</localVariable> + <formalParameter>.*</formalParameter> + </NamingCoventions> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/MAP_Current_CNL113745_1_v123_HLR.tpd b/regression_test/XML/tpdValidTest/tpdTest/MAP_Current_CNL113745_1_v123_HLR.tpd new file mode 100644 index 000000000..c247c6d9e --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/MAP_Current_CNL113745_1_v123_HLR.tpd @@ -0,0 +1,49 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: MAP_Current_CNL113745_1_v123_HLR.tpd + Description: tpd project file + Rev: R2B + Prodnr: CNL 113 745 + Updated: 2013-04-02 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>MAP_Current_CNL113745_1_v123</ProjectName> + <ReferencedProjects> + <ReferencedProject name="Ericsson_MAP_v2_CNL113725" projectLocationURI="../Ericsson_MAP_v2_CNL113725/Ericsson_MAP_v2_CNL113725.tpd"/> + <ReferencedProject name="MAP_Current_CNL113745_1" projectLocationURI="MAP_Current_CNL113745_1_HLR.tpd"/> + <ReferencedProject name="MAP_v1_CNL113431" projectLocationURI="../MAP_v1_CNL113431/MAP_v1_CNL113431.tpd"/> + <ReferencedProject name="MAP_v2_CNL113432" projectLocationURI="../MAP_v2_CNL113432/MAP_v2_CNL113432.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="MAP_EncDec_v123.cc" relativeURI="src/MAP_EncDec_v123.cc"/> + <FileResource projectRelativePath="MAP_PDU_Defs_v123.asn" relativeURI="src/MAP_PDU_Defs_v123.asn"/> + <FileResource projectRelativePath="MAP_Types_v123.ttcn" relativeURI="src/MAP_Types_v123.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <singleMode>true</singleMode> + <targetExecutable>bin/MAP_Current_CNL113745_1_v123</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/MAP_v10.4.0_CNL113736.tpd b/regression_test/XML/tpdValidTest/tpdTest/MAP_v10.4.0_CNL113736.tpd new file mode 100644 index 000000000..a4a7a96be --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/MAP_v10.4.0_CNL113736.tpd @@ -0,0 +1,86 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: MAP_v10.4.0_CNL113736.tpd + Description: tpd project file + Rev: R1A01 + Prodnr: CNL 113 736 + Updated: 2012-02-06 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>MAP_v10.4.0_CNL113736</ProjectName> + <ReferencedProjects> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/> + <ReferencedProject name="ROSE_CNL113369" projectLocationURI="../ROSE_CNL113369/ROSE_CNL113369.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/MAP_v10.4.0_CNL113736_FS.pdf" relativeURI="doc/MAP_v10.4.0_CNL113736_FS.pdf"/> + <FileResource projectRelativePath="doc/MAP_v10.4.0_CNL113736_PRI.pdf" relativeURI="doc/MAP_v10.4.0_CNL113736_PRI.pdf"/> + <FileResource projectRelativePath="doc/MAP_v10.4.0_CNL113736_UG.pdf" relativeURI="doc/MAP_v10.4.0_CNL113736_UG.pdf"/> + <FileResource projectRelativePath="src/MAP_ApplicationContexts.asn" relativeURI="src/MAP_ApplicationContexts.asn"/> + <FileResource projectRelativePath="src/MAP_BS_Code.asn" relativeURI="src/MAP_BS_Code.asn"/> + <FileResource projectRelativePath="src/MAP_CH_DataTypes.asn" relativeURI="src/MAP_CH_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_CallHandlingOperations.asn" relativeURI="src/MAP_CallHandlingOperations.asn"/> + <FileResource projectRelativePath="src/MAP_CommonDataTypes.asn" relativeURI="src/MAP_CommonDataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_DialogueInformation.asn" relativeURI="src/MAP_DialogueInformation.asn"/> + <FileResource projectRelativePath="src/MAP_ER_DataTypes.asn" relativeURI="src/MAP_ER_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_EncDec.cc" relativeURI="src/MAP_EncDec.cc"/> + <FileResource projectRelativePath="src/MAP_Errors.asn" relativeURI="src/MAP_Errors.asn"/> + <FileResource projectRelativePath="src/MAP_ExtensionDataTypes.asn" relativeURI="src/MAP_ExtensionDataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_GR_DataTypes.asn" relativeURI="src/MAP_GR_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_Group_Call_Operations.asn" relativeURI="src/MAP_Group_Call_Operations.asn"/> + <FileResource projectRelativePath="src/MAP_LCS_DataTypes.asn" relativeURI="src/MAP_LCS_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_LocationServiceOperations.asn" relativeURI="src/MAP_LocationServiceOperations.asn"/> + <FileResource projectRelativePath="src/MAP_MS_DataTypes.asn" relativeURI="src/MAP_MS_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_MobileServiceOperations.asn" relativeURI="src/MAP_MobileServiceOperations.asn"/> + <FileResource projectRelativePath="src/MAP_OM_DataTypes.asn" relativeURI="src/MAP_OM_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_OperationAndMaintenanceOperations.asn" relativeURI="src/MAP_OperationAndMaintenanceOperations.asn"/> + <FileResource projectRelativePath="src/MAP_PDU_Defs.asn" relativeURI="src/MAP_PDU_Defs.asn"/> + <FileResource projectRelativePath="src/MAP_Protocol.asn" relativeURI="src/MAP_Protocol.asn"/> + <FileResource projectRelativePath="src/MAP_SM_DataTypes.asn" relativeURI="src/MAP_SM_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_SS_Code.asn" relativeURI="src/MAP_SS_Code.asn"/> + <FileResource projectRelativePath="src/MAP_SS_DataTypes.asn" relativeURI="src/MAP_SS_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_ShortMessageServiceOperations.asn" relativeURI="src/MAP_ShortMessageServiceOperations.asn"/> + <FileResource projectRelativePath="src/MAP_SupplementaryServiceOperations.asn" relativeURI="src/MAP_SupplementaryServiceOperations.asn"/> + <FileResource projectRelativePath="src/MAP_TS_Code.asn" relativeURI="src/MAP_TS_Code.asn"/> + <FileResource projectRelativePath="src/MAP_Types.ttcn" relativeURI="src/MAP_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/MAP_v10.4.0_CNL113736</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/MAP_v10.6.0_CNL113764.tpd b/regression_test/XML/tpdValidTest/tpdTest/MAP_v10.6.0_CNL113764.tpd new file mode 100644 index 000000000..5ad80c18e --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/MAP_v10.6.0_CNL113764.tpd @@ -0,0 +1,74 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: MAP_v10.6.0_CNL113764.tpd + Description: tpd project file + Rev: R1A02 + Prodnr: CNL 113 764 + Updated: 2013-01-08 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>MAP_v10.6.0_CNL113764</ProjectName> + <ReferencedProjects> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/> + <ReferencedProject name="ROSE_CNL113369" projectLocationURI="../ROSE_CNL113369/ROSE_CNL113369.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + </Folders> + <Files> + <FileResource projectRelativePath="MAP_ApplicationContexts.asn" relativeURI="src/MAP_ApplicationContexts.asn"/> + <FileResource projectRelativePath="MAP_BS_Code.asn" relativeURI="src/MAP_BS_Code.asn"/> + <FileResource projectRelativePath="MAP_CH_DataTypes.asn" relativeURI="src/MAP_CH_DataTypes.asn"/> + <FileResource projectRelativePath="MAP_CallHandlingOperations.asn" relativeURI="src/MAP_CallHandlingOperations.asn"/> + <FileResource projectRelativePath="MAP_CommonDataTypes.asn" relativeURI="src/MAP_CommonDataTypes.asn"/> + <FileResource projectRelativePath="MAP_DialogueInformation.asn" relativeURI="src/MAP_DialogueInformation.asn"/> + <FileResource projectRelativePath="MAP_ER_DataTypes.asn" relativeURI="src/MAP_ER_DataTypes.asn"/> + <FileResource projectRelativePath="MAP_EncDec.cc" relativeURI="src/MAP_EncDec.cc"/> + <FileResource projectRelativePath="MAP_Errors.asn" relativeURI="src/MAP_Errors.asn"/> + <FileResource projectRelativePath="MAP_ExtensionDataTypes.asn" relativeURI="src/MAP_ExtensionDataTypes.asn"/> + <FileResource projectRelativePath="MAP_GR_DataTypes.asn" relativeURI="src/MAP_GR_DataTypes.asn"/> + <FileResource projectRelativePath="MAP_Group_Call_Operations.asn" relativeURI="src/MAP_Group_Call_Operations.asn"/> + <FileResource projectRelativePath="MAP_LCS_DataTypes.asn" relativeURI="src/MAP_LCS_DataTypes.asn"/> + <FileResource projectRelativePath="MAP_LocationServiceOperations.asn" relativeURI="src/MAP_LocationServiceOperations.asn"/> + <FileResource projectRelativePath="MAP_MS_DataTypes.asn" relativeURI="src/MAP_MS_DataTypes.asn"/> + <FileResource projectRelativePath="MAP_MobileServiceOperations.asn" relativeURI="src/MAP_MobileServiceOperations.asn"/> + <FileResource projectRelativePath="MAP_OM_DataTypes.asn" relativeURI="src/MAP_OM_DataTypes.asn"/> + <FileResource projectRelativePath="MAP_OperationAndMaintenanceOperations.asn" relativeURI="src/MAP_OperationAndMaintenanceOperations.asn"/> + <FileResource projectRelativePath="MAP_PDU_Defs.asn" relativeURI="src/MAP_PDU_Defs.asn"/> + <FileResource projectRelativePath="MAP_Protocol.asn" relativeURI="src/MAP_Protocol.asn"/> + <FileResource projectRelativePath="MAP_SM_DataTypes.asn" relativeURI="src/MAP_SM_DataTypes.asn"/> + <FileResource projectRelativePath="MAP_SS_Code.asn" relativeURI="src/MAP_SS_Code.asn"/> + <FileResource projectRelativePath="MAP_SS_DataTypes.asn" relativeURI="src/MAP_SS_DataTypes.asn"/> + <FileResource projectRelativePath="MAP_ShortMessageServiceOperations.asn" relativeURI="src/MAP_ShortMessageServiceOperations.asn"/> + <FileResource projectRelativePath="MAP_SupplementaryServiceOperations.asn" relativeURI="src/MAP_SupplementaryServiceOperations.asn"/> + <FileResource projectRelativePath="MAP_TS_Code.asn" relativeURI="src/MAP_TS_Code.asn"/> + <FileResource projectRelativePath="MAP_Types.ttcn" relativeURI="src/MAP_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/MAP_v10.6.0_CNL113764</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/MAP_v1_CNL113431.tpd b/regression_test/XML/tpdValidTest/tpdTest/MAP_v1_CNL113431.tpd new file mode 100644 index 000000000..b10b57e93 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/MAP_v1_CNL113431.tpd @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: MAP_v1_CNL113431.tpd + Description: tpd project file + Rev: R8A + Prodnr: CNL 113 431 + Updated: 2013-03-21 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>MAP_v1_CNL113431</ProjectName> + <ReferencedProjects> + <ReferencedProject name="ROSE_CNL113369" projectLocationURI="../ROSE_CNL113369/ROSE_CNL113369.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="src/MAP_Operations_v1.asn" relativeURI="src/MAP_Operations_v1.asn"/> + <FileResource projectRelativePath="src/MAPv1_EncDec.cc" relativeURI="src/MAPv1_EncDec.cc"/> + <FileResource projectRelativePath="src/MAPv1_ProtocolModule.grp" relativeURI="src/MAPv1_ProtocolModule.grp"/> + <FileResource projectRelativePath="src/MAPv1_Types.ttcn" relativeURI="src/MAPv1_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/MAP_v1_CNL113431</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <function>.*</function> + <externalFunction>.*</externalFunction> + <moduleParameter>.*</moduleParameter> + <localVariable>.*</localVariable> + <formalParameter>.*</formalParameter> + </NamingCoventions> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/MAP_v2_CNL113432.tpd b/regression_test/XML/tpdValidTest/tpdTest/MAP_v2_CNL113432.tpd new file mode 100644 index 000000000..5e34937f9 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/MAP_v2_CNL113432.tpd @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: MAP_v2_CNL113432.tpd + Description: tpd project file + Rev: R6A + Prodnr: CNL 113 432 + Updated: 2013-03-21 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>MAP_v2_CNL113432</ProjectName> + <ReferencedProjects> + <ReferencedProject name="ROSE_CNL113369" projectLocationURI="../ROSE_CNL113369/ROSE_CNL113369.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="src/MAP_Operations_v2.asn" relativeURI="src/MAP_Operations_v2.asn"/> + <FileResource projectRelativePath="src/MAPv2_EncDec.cc" relativeURI="src/MAPv2_EncDec.cc"/> + <FileResource projectRelativePath="src/MAPv2_ProtocolModule.grp" relativeURI="src/MAPv2_ProtocolModule.grp"/> + <FileResource projectRelativePath="src/MAPv2_Types.ttcn" relativeURI="src/MAPv2_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/MAP_v2_CNL113432</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <function>.*</function> + <externalFunction>.*</externalFunction> + <moduleParameter>.*</moduleParameter> + <localVariable>.*</localVariable> + <formalParameter>.*</formalParameter> + </NamingCoventions> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/MAP_v6.11.0_CNL113500.tpd b/regression_test/XML/tpdValidTest/tpdTest/MAP_v6.11.0_CNL113500.tpd new file mode 100644 index 000000000..0e67629b9 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/MAP_v6.11.0_CNL113500.tpd @@ -0,0 +1,96 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: MAP_v6.11.0_CNL113500.tpd + Description: tpd project file + Rev: R3B01 + Prodnr: CNL 113 500 + Updated: 2012-05-30 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>MAP_v6.11.0_CNL113500</ProjectName> + <ReferencedProjects> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/> + <ReferencedProject name="ROSE_CNL113369" projectLocationURI="../ROSE_CNL113369/ROSE_CNL113369.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/MAP_v6.11.0_CNL113500_FS.pdf" relativeURI="doc/MAP_v6.11.0_CNL113500_FS.pdf"/> + <FileResource projectRelativePath="doc/MAP_v6.11.0_CNL113500_PRI.pdf" relativeURI="doc/MAP_v6.11.0_CNL113500_PRI.pdf"/> + <FileResource projectRelativePath="doc/MAP_v6.11.0_CNL113500_UG.pdf" relativeURI="doc/MAP_v6.11.0_CNL113500_UG.pdf"/> + <FileResource projectRelativePath="src/MAP_ApplicationContexts.asn" relativeURI="src/MAP_ApplicationContexts.asn"/> + <FileResource projectRelativePath="src/MAP_BS_Code.asn" relativeURI="src/MAP_BS_Code.asn"/> + <FileResource projectRelativePath="src/MAP_CH_DataTypes.asn" relativeURI="src/MAP_CH_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_CallHandlingOperations.asn" relativeURI="src/MAP_CallHandlingOperations.asn"/> + <FileResource projectRelativePath="src/MAP_CommonDataTypes.asn" relativeURI="src/MAP_CommonDataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_DialogueInformation.asn" relativeURI="src/MAP_DialogueInformation.asn"/> + <FileResource projectRelativePath="src/MAP_ER_DataTypes.asn" relativeURI="src/MAP_ER_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_EncDec.cc" relativeURI="src/MAP_EncDec.cc"/> + <FileResource projectRelativePath="src/MAP_Errors.asn" relativeURI="src/MAP_Errors.asn"/> + <FileResource projectRelativePath="src/MAP_ExtensionDataTypes.asn" relativeURI="src/MAP_ExtensionDataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_GR_DataTypes.asn" relativeURI="src/MAP_GR_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_Group_Call_Operations.asn" relativeURI="src/MAP_Group_Call_Operations.asn"/> + <FileResource projectRelativePath="src/MAP_LCS_DataTypes.asn" relativeURI="src/MAP_LCS_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_LocationServiceOperations.asn" relativeURI="src/MAP_LocationServiceOperations.asn"/> + <FileResource projectRelativePath="src/MAP_MS_DataTypes.asn" relativeURI="src/MAP_MS_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_MobileServiceOperations.asn" relativeURI="src/MAP_MobileServiceOperations.asn"/> + <FileResource projectRelativePath="src/MAP_OM_DataTypes.asn" relativeURI="src/MAP_OM_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_OperationAndMaintenanceOperations.asn" relativeURI="src/MAP_OperationAndMaintenanceOperations.asn"/> + <FileResource projectRelativePath="src/MAP_PDU_Defs.asn" relativeURI="src/MAP_PDU_Defs.asn"/> + <FileResource projectRelativePath="src/MAP_Protocol.asn" relativeURI="src/MAP_Protocol.asn"/> + <FileResource projectRelativePath="src/MAP_SM_DataTypes.asn" relativeURI="src/MAP_SM_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_SS_Code.asn" relativeURI="src/MAP_SS_Code.asn"/> + <FileResource projectRelativePath="src/MAP_SS_DataTypes.asn" relativeURI="src/MAP_SS_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_ST_DataTypes.asn" relativeURI="src/MAP_ST_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_SecureTransportOperations.asn" relativeURI="src/MAP_SecureTransportOperations.asn"/> + <FileResource projectRelativePath="src/MAP_ShortMessageServiceOperations.asn" relativeURI="src/MAP_ShortMessageServiceOperations.asn"/> + <FileResource projectRelativePath="src/MAP_SupplementaryServiceOperations.asn" relativeURI="src/MAP_SupplementaryServiceOperations.asn"/> + <FileResource projectRelativePath="src/MAP_TS_Code.asn" relativeURI="src/MAP_TS_Code.asn"/> + <FileResource projectRelativePath="src/MAP_Types.ttcn" relativeURI="src/MAP_Types.ttcn"/> + <FileResource projectRelativePath="src/MobileDomainDefinitions.asn" relativeURI="src/MobileDomainDefinitions.asn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/MAP_v6.11.0_CNL113500</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/MobileDomainDefinitions.asn</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/MAP_v6.3.0_CNL113366.tpd b/regression_test/XML/tpdValidTest/tpdTest/MAP_v6.3.0_CNL113366.tpd new file mode 100644 index 000000000..00b69250a --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/MAP_v6.3.0_CNL113366.tpd @@ -0,0 +1,88 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: MAP_v6.3.0_CNL113366.tpd + Description: tpd project file + Rev: R5A01 + Prodnr: CNL 113 366 + Updated: 2012-02-07 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>MAP_v6.3.0_CNL113366</ProjectName> + <ReferencedProjects> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/> + <ReferencedProject name="ROSE_CNL113369" projectLocationURI="../ROSE_CNL113369/ROSE_CNL113369.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/MAP_v6.3.0_CNL113366_FS.pdf" relativeURI="doc/MAP_v6.3.0_CNL113366_FS.pdf"/> + <FileResource projectRelativePath="doc/MAP_v6.3.0_CNL113366_PRI.pdf" relativeURI="doc/MAP_v6.3.0_CNL113366_PRI.pdf"/> + <FileResource projectRelativePath="doc/MAP_v6.3.0_CNL113366_UG.pdf" relativeURI="doc/MAP_v6.3.0_CNL113366_UG.pdf"/> + <FileResource projectRelativePath="src/MAP_ApplicationContexts.asn" relativeURI="src/MAP_ApplicationContexts.asn"/> + <FileResource projectRelativePath="src/MAP_BS_Code.asn" relativeURI="src/MAP_BS_Code.asn"/> + <FileResource projectRelativePath="src/MAP_CH_DataTypes.asn" relativeURI="src/MAP_CH_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_CallHandlingOperations.asn" relativeURI="src/MAP_CallHandlingOperations.asn"/> + <FileResource projectRelativePath="src/MAP_CommonDataTypes.asn" relativeURI="src/MAP_CommonDataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_DialogueInformation.asn" relativeURI="src/MAP_DialogueInformation.asn"/> + <FileResource projectRelativePath="src/MAP_ER_DataTypes.asn" relativeURI="src/MAP_ER_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_EncDec.cc" relativeURI="src/MAP_EncDec.cc"/> + <FileResource projectRelativePath="src/MAP_Errors.asn" relativeURI="src/MAP_Errors.asn"/> + <FileResource projectRelativePath="src/MAP_ExtensionDataTypes.asn" relativeURI="src/MAP_ExtensionDataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_GR_DataTypes.asn" relativeURI="src/MAP_GR_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_Group_Call_Operations.asn" relativeURI="src/MAP_Group_Call_Operations.asn"/> + <FileResource projectRelativePath="src/MAP_LCS_DataTypes.asn" relativeURI="src/MAP_LCS_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_LocationServiceOperations.asn" relativeURI="src/MAP_LocationServiceOperations.asn"/> + <FileResource projectRelativePath="src/MAP_MS_DataTypes.asn" relativeURI="src/MAP_MS_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_MobileServiceOperations.asn" relativeURI="src/MAP_MobileServiceOperations.asn"/> + <FileResource projectRelativePath="src/MAP_OM_DataTypes.asn" relativeURI="src/MAP_OM_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_OperationAndMaintenanceOperations.asn" relativeURI="src/MAP_OperationAndMaintenanceOperations.asn"/> + <FileResource projectRelativePath="src/MAP_PDU_Defs.asn" relativeURI="src/MAP_PDU_Defs.asn"/> + <FileResource projectRelativePath="src/MAP_Protocol.asn" relativeURI="src/MAP_Protocol.asn"/> + <FileResource projectRelativePath="src/MAP_SM_DataTypes.asn" relativeURI="src/MAP_SM_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_SS_Code.asn" relativeURI="src/MAP_SS_Code.asn"/> + <FileResource projectRelativePath="src/MAP_SS_DataTypes.asn" relativeURI="src/MAP_SS_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_ST_DataTypes.asn" relativeURI="src/MAP_ST_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_SecureTransportOperations.asn" relativeURI="src/MAP_SecureTransportOperations.asn"/> + <FileResource projectRelativePath="src/MAP_ShortMessageServiceOperations.asn" relativeURI="src/MAP_ShortMessageServiceOperations.asn"/> + <FileResource projectRelativePath="src/MAP_SupplementaryServiceOperations.asn" relativeURI="src/MAP_SupplementaryServiceOperations.asn"/> + <FileResource projectRelativePath="src/MAP_TS_Code.asn" relativeURI="src/MAP_TS_Code.asn"/> + <FileResource projectRelativePath="src/MAP_Types.ttcn" relativeURI="src/MAP_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/MAP_v6.3.0_CNL113366</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/MAP_v7.12.0_CNL113635.tpd b/regression_test/XML/tpdValidTest/tpdTest/MAP_v7.12.0_CNL113635.tpd new file mode 100644 index 000000000..3a9804a1e --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/MAP_v7.12.0_CNL113635.tpd @@ -0,0 +1,192 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: MAP_v7.12.0_CNL113635.tpd + Description: tpd project file + Rev: R5A + Prodnr: CNL 113 635 + Updated: 2013-03-21 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>MAP_v7.12.0_CNL113635</ProjectName> + <ReferencedProjects> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/> + <ReferencedProject name="ROSE_CNL113369" projectLocationURI="../ROSE_CNL113369/ROSE_CNL113369.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="src/MAP_BS_Code.asn" relativeURI="src/MAP_BS_Code.asn"/> + <FileResource projectRelativePath="src/MAP_CH_DataTypes.asn" relativeURI="src/MAP_CH_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_CallHandlingOperations.asn" relativeURI="src/MAP_CallHandlingOperations.asn"/> + <FileResource projectRelativePath="src/MAP_CommonDataTypes.asn" relativeURI="src/MAP_CommonDataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_DialogueInformation.asn" relativeURI="src/MAP_DialogueInformation.asn"/> + <FileResource projectRelativePath="src/MAP_ER_DataTypes.asn" relativeURI="src/MAP_ER_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_EncDec.cc" relativeURI="src/MAP_EncDec.cc"/> + <FileResource projectRelativePath="src/MAP_EncDec_v123.cc" relativeURI="src/MAP_EncDec_v123.cc"/> + <FileResource projectRelativePath="src/MAP_Errors.asn" relativeURI="src/MAP_Errors.asn"/> + <FileResource projectRelativePath="src/MAP_ExtensionDataTypes.asn" relativeURI="src/MAP_ExtensionDataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_ExtensionDataTypes_NumberPortability.asn" relativeURI="src/MAP_ExtensionDataTypes_NumberPortability.asn"/> + <FileResource projectRelativePath="src/MAP_GR_DataTypes.asn" relativeURI="src/MAP_GR_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_Group_Call_Operations.asn" relativeURI="src/MAP_Group_Call_Operations.asn"/> + <FileResource projectRelativePath="src/MAP_LCS_DataTypes.asn" relativeURI="src/MAP_LCS_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_LocationServiceOperations.asn" relativeURI="src/MAP_LocationServiceOperations.asn"/> + <FileResource projectRelativePath="src/MAP_MS_DataTypes.asn" relativeURI="src/MAP_MS_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_MobileServiceOperations.asn" relativeURI="src/MAP_MobileServiceOperations.asn"/> + <FileResource projectRelativePath="src/MAP_OM_DataTypes.asn" relativeURI="src/MAP_OM_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_OperationAndMaintenanceOperations.asn" relativeURI="src/MAP_OperationAndMaintenanceOperations.asn"/> + <FileResource projectRelativePath="src/MAP_PDC_Operations.asn" relativeURI="src/MAP_PDC_Operations.asn"/> + <FileResource projectRelativePath="src/MAP_PDU_Defs.asn" relativeURI="src/MAP_PDU_Defs.asn"/> + <FileResource projectRelativePath="src/MAP_PDU_Defs_v123.asn" relativeURI="src/MAP_PDU_Defs_v123.asn"/> + <FileResource projectRelativePath="src/MAP_Protocol.asn" relativeURI="src/MAP_Protocol.asn"/> + <FileResource projectRelativePath="src/MAP_SM_DataTypes.asn" relativeURI="src/MAP_SM_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_SS_Code.asn" relativeURI="src/MAP_SS_Code.asn"/> + <FileResource projectRelativePath="src/MAP_SS_DataTypes.asn" relativeURI="src/MAP_SS_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_ShortMessageServiceOperations.asn" relativeURI="src/MAP_ShortMessageServiceOperations.asn"/> + <FileResource projectRelativePath="src/MAP_SupplementaryServiceOperations.asn" relativeURI="src/MAP_SupplementaryServiceOperations.asn"/> + <FileResource projectRelativePath="src/MAP_TS_Code.asn" relativeURI="src/MAP_TS_Code.asn"/> + <FileResource projectRelativePath="src/MAP_Types.ttcn" relativeURI="src/MAP_Types.ttcn"/> + <FileResource projectRelativePath="src/MAP_Types_v123.ttcn" relativeURI="src/MAP_Types_v123.ttcn"/> + <FileResource projectRelativePath="src/MAPv123_v7.12.0_ProtocolModule.grp" relativeURI="src/MAPv123_v7.12.0_ProtocolModule.grp"/> + <FileResource projectRelativePath="src/MAPv123_v7.12.0_with_NumberPortability_ProtocolModule.grp" relativeURI="src/MAPv123_v7.12.0_with_NumberPortability_ProtocolModule.grp"/> + <FileResource projectRelativePath="src/MAPv3_v7.12.0_ProtocolModule.grp" relativeURI="src/MAPv3_v7.12.0_ProtocolModule.grp"/> + <FileResource projectRelativePath="src/MAPv3_v7.12.0_with_NumberPortability_ProtocolModule.grp" relativeURI="src/MAPv3_v7.12.0_with_NumberPortability_ProtocolModule.grp"/> + </Files> + <ActiveConfiguration>NumberPortability</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <singleMode>true</singleMode> + <targetExecutable>bin/MAP_v7.12.0_CNL113635</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FileProperties> + <FileResource> + <FilePath>src/MAP_EncDec_v123.cc</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/MAP_ExtensionDataTypes_NumberPortability.asn</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/MAP_PDU_Defs_v123.asn</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/MAP_Types_v123.ttcn</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/MAPv3_v7.12.0_ProtocolModule.grp</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/MAPv3_v7.12.0_with_NumberPortability_ProtocolModule.grp</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="NumberPortability"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <singleMode>true</singleMode> + <targetExecutable>bin/MAP_v7.12.0_CNL113635</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <function>.*</function> + <externalFunction>.*</externalFunction> + <moduleParameter>.*</moduleParameter> + <localVariable>.*</localVariable> + <formalParameter>.*</formalParameter> + </NamingCoventions> + </ProjectProperties> + <FileProperties> + <FileResource> + <FilePath>src/MAP_EncDec_v123.cc</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/MAP_ExtensionDataTypes.asn</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/MAP_PDU_Defs_v123.asn</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/MAP_Types_v123.ttcn</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/MAPv123_v7.12.0_ProtocolModule.grp</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/MAPv123_v7.12.0_with_NumberPortability_ProtocolModule.grp</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/MAPv3_v7.12.0_ProtocolModule.grp</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/MAPv3_v7.12.0_with_NumberPortability_ProtocolModule.grp</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/MAP_v7.12.0_CNL113635_v123.tpd b/regression_test/XML/tpdValidTest/tpdTest/MAP_v7.12.0_CNL113635_v123.tpd new file mode 100644 index 000000000..e2542160b --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/MAP_v7.12.0_CNL113635_v123.tpd @@ -0,0 +1,55 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: MAP_v7.12.0_CNL113635_v123.tpd + Description: tpd project file + Rev: R5A + Prodnr: CNL 113 635 + Updated: 2013-03-21 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>MAP_v7.12.0_CNL113635_v123</ProjectName> + <ReferencedProjects> + <ReferencedProject name="Ericsson_MAP_v2_CNL113725" projectLocationURI="../Ericsson_MAP_v2_CNL113725/Ericsson_MAP_v2_CNL113725.tpd"/> + <ReferencedProject name="MAP_v1_CNL113431" projectLocationURI="../MAP_v1_CNL113431/MAP_v1_CNL113431.tpd"/> + <ReferencedProject name="MAP_v2_CNL113432" projectLocationURI="../MAP_v2_CNL113432/MAP_v2_CNL113432.tpd"/> + <ReferencedProject name="MAP_v7.12.0_CNL113635" projectLocationURI="MAP_v7.12.0_CNL113635.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="MAP_EncDec_v123.cc" relativeURI="src/MAP_EncDec_v123.cc"/> + <FileResource projectRelativePath="MAP_PDU_Defs_v123.asn" relativeURI="src/MAP_PDU_Defs_v123.asn"/> + <FileResource projectRelativePath="MAP_Types_v123.ttcn" relativeURI="src/MAP_Types_v123.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/MAP_v7.12.0_CNL113635_v123</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <function>.*</function> + <externalFunction>.*</externalFunction> + <localVariable>.*</localVariable> + <formalParameter>.*</formalParameter> + </NamingCoventions> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/MAP_v7.8.0_CNL113569.tpd b/regression_test/XML/tpdValidTest/tpdTest/MAP_v7.8.0_CNL113569.tpd new file mode 100644 index 000000000..5b6b36916 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/MAP_v7.8.0_CNL113569.tpd @@ -0,0 +1,85 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: MAP_v7.8.0_CNL113569.tpd + Description: tpd project file + Rev: R3A03 + Prodnr: CNL 113 569 + Updated: 2012-05-30 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>MAP_v7.8.0_CNL113569</ProjectName> + <ReferencedProjects> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/> + <ReferencedProject name="ROSE_CNL113369" projectLocationURI="../ROSE_CNL113369/ROSE_CNL113369.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/MAP_v7.8.0_CNL113569_FS.pdf" relativeURI="doc/MAP_v7.8.0_CNL113569_FS.pdf"/> + <FileResource projectRelativePath="doc/MAP_v7.8.0_CNL113569_PRI.pdf" relativeURI="doc/MAP_v7.8.0_CNL113569_PRI.pdf"/> + <FileResource projectRelativePath="doc/MAP_v7.8.0_CNL113569_UG.pdf" relativeURI="doc/MAP_v7.8.0_CNL113569_UG.pdf"/> + <FileResource projectRelativePath="src/MAP_ApplicationContexts.asn" relativeURI="src/MAP_ApplicationContexts.asn"/> + <FileResource projectRelativePath="src/MAP_BS_Code.asn" relativeURI="src/MAP_BS_Code.asn"/> + <FileResource projectRelativePath="src/MAP_CH_DataTypes.asn" relativeURI="src/MAP_CH_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_CallHandlingOperations.asn" relativeURI="src/MAP_CallHandlingOperations.asn"/> + <FileResource projectRelativePath="src/MAP_CommonDataTypes.asn" relativeURI="src/MAP_CommonDataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_DialogueInformation.asn" relativeURI="src/MAP_DialogueInformation.asn"/> + <FileResource projectRelativePath="src/MAP_ER_DataTypes.asn" relativeURI="src/MAP_ER_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_EncDec.cc" relativeURI="src/MAP_EncDec.cc"/> + <FileResource projectRelativePath="src/MAP_Errors.asn" relativeURI="src/MAP_Errors.asn"/> + <FileResource projectRelativePath="src/MAP_ExtensionDataTypes.asn" relativeURI="src/MAP_ExtensionDataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_GR_DataTypes.asn" relativeURI="src/MAP_GR_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_Group_Call_Operations.asn" relativeURI="src/MAP_Group_Call_Operations.asn"/> + <FileResource projectRelativePath="src/MAP_LCS_DataTypes.asn" relativeURI="src/MAP_LCS_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_LocationServiceOperations.asn" relativeURI="src/MAP_LocationServiceOperations.asn"/> + <FileResource projectRelativePath="src/MAP_MS_DataTypes.asn" relativeURI="src/MAP_MS_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_MobileServiceOperations.asn" relativeURI="src/MAP_MobileServiceOperations.asn"/> + <FileResource projectRelativePath="src/MAP_OM_DataTypes.asn" relativeURI="src/MAP_OM_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_OperationAndMaintenanceOperations.asn" relativeURI="src/MAP_OperationAndMaintenanceOperations.asn"/> + <FileResource projectRelativePath="src/MAP_PDU_Defs.asn" relativeURI="src/MAP_PDU_Defs.asn"/> + <FileResource projectRelativePath="src/MAP_Protocol.asn" relativeURI="src/MAP_Protocol.asn"/> + <FileResource projectRelativePath="src/MAP_SM_DataTypes.asn" relativeURI="src/MAP_SM_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_SS_Code.asn" relativeURI="src/MAP_SS_Code.asn"/> + <FileResource projectRelativePath="src/MAP_SS_DataTypes.asn" relativeURI="src/MAP_SS_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_ShortMessageServiceOperations.asn" relativeURI="src/MAP_ShortMessageServiceOperations.asn"/> + <FileResource projectRelativePath="src/MAP_SupplementaryServiceOperations.asn" relativeURI="src/MAP_SupplementaryServiceOperations.asn"/> + <FileResource projectRelativePath="src/MAP_TS_Code.asn" relativeURI="src/MAP_TS_Code.asn"/> + <FileResource projectRelativePath="src/MAP_Types.ttcn" relativeURI="src/MAP_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/MAP_v7.8.0_CNL113569</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/MAP_v9.3.0_CNL113710.tpd b/regression_test/XML/tpdValidTest/tpdTest/MAP_v9.3.0_CNL113710.tpd new file mode 100644 index 000000000..50cc6a264 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/MAP_v9.3.0_CNL113710.tpd @@ -0,0 +1,85 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: MAP_v9.3.0_CNL113710.tpd + Description: tpd project file + Rev: R1A02 + Prodnr: CNL 113 710 + Updated: 2012-01-13 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>MAP_v9.3.0_CNL113710</ProjectName> + <ReferencedProjects> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/> + <ReferencedProject name="ROSE_CNL113369" projectLocationURI="../ROSE_CNL113369/ROSE_CNL113369.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/MAP_v9.3.0_CNL113710_FS.pdf" relativeURI="doc/MAP_v9.3.0_CNL113710_FS.pdf"/> + <FileResource projectRelativePath="doc/MAP_v9.3.0_CNL113710_PRI.pdf" relativeURI="doc/MAP_v9.3.0_CNL113710_PRI.pdf"/> + <FileResource projectRelativePath="doc/MAP_v9.3.0_CNL113710_UG.pdf" relativeURI="doc/MAP_v9.3.0_CNL113710_UG.pdf"/> + <FileResource projectRelativePath="src/MAP_ApplicationContexts.asn" relativeURI="src/MAP_ApplicationContexts.asn"/> + <FileResource projectRelativePath="src/MAP_BS_Code.asn" relativeURI="src/MAP_BS_Code.asn"/> + <FileResource projectRelativePath="src/MAP_CH_DataTypes.asn" relativeURI="src/MAP_CH_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_CallHandlingOperations.asn" relativeURI="src/MAP_CallHandlingOperations.asn"/> + <FileResource projectRelativePath="src/MAP_CommonDataTypes.asn" relativeURI="src/MAP_CommonDataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_DialogueInformation.asn" relativeURI="src/MAP_DialogueInformation.asn"/> + <FileResource projectRelativePath="src/MAP_ER_DataTypes.asn" relativeURI="src/MAP_ER_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_EncDec.cc" relativeURI="src/MAP_EncDec.cc"/> + <FileResource projectRelativePath="src/MAP_Errors.asn" relativeURI="src/MAP_Errors.asn"/> + <FileResource projectRelativePath="src/MAP_ExtensionDataTypes.asn" relativeURI="src/MAP_ExtensionDataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_GR_DataTypes.asn" relativeURI="src/MAP_GR_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_Group_Call_Operations.asn" relativeURI="src/MAP_Group_Call_Operations.asn"/> + <FileResource projectRelativePath="src/MAP_LCS_DataTypes.asn" relativeURI="src/MAP_LCS_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_LocationServiceOperations.asn" relativeURI="src/MAP_LocationServiceOperations.asn"/> + <FileResource projectRelativePath="src/MAP_MS_DataTypes.asn" relativeURI="src/MAP_MS_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_MobileServiceOperations.asn" relativeURI="src/MAP_MobileServiceOperations.asn"/> + <FileResource projectRelativePath="src/MAP_OM_DataTypes.asn" relativeURI="src/MAP_OM_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_OperationAndMaintenanceOperations.asn" relativeURI="src/MAP_OperationAndMaintenanceOperations.asn"/> + <FileResource projectRelativePath="src/MAP_PDU_Defs.asn" relativeURI="src/MAP_PDU_Defs.asn"/> + <FileResource projectRelativePath="src/MAP_Protocol.asn" relativeURI="src/MAP_Protocol.asn"/> + <FileResource projectRelativePath="src/MAP_SM_DataTypes.asn" relativeURI="src/MAP_SM_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_SS_Code.asn" relativeURI="src/MAP_SS_Code.asn"/> + <FileResource projectRelativePath="src/MAP_SS_DataTypes.asn" relativeURI="src/MAP_SS_DataTypes.asn"/> + <FileResource projectRelativePath="src/MAP_ShortMessageServiceOperations.asn" relativeURI="src/MAP_ShortMessageServiceOperations.asn"/> + <FileResource projectRelativePath="src/MAP_SupplementaryServiceOperations.asn" relativeURI="src/MAP_SupplementaryServiceOperations.asn"/> + <FileResource projectRelativePath="src/MAP_TS_Code.asn" relativeURI="src/MAP_TS_Code.asn"/> + <FileResource projectRelativePath="src/MAP_Types.ttcn" relativeURI="src/MAP_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/MAP_v9.3.0_CNL113710</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/MIME_CNL113352.tpd b/regression_test/XML/tpdValidTest/tpdTest/MIME_CNL113352.tpd new file mode 100644 index 000000000..b3a069e7a --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/MIME_CNL113352.tpd @@ -0,0 +1,46 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: MIME_CNL113352.tpd + Description: tpd project file + Rev: R4B01 + Prodnr: CNL 113 352 + Updated: 2012-05-22 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>MIME_CNL113352</ProjectName> + <Files> + <FileResource projectRelativePath="MIME_EncDec.cc" relativeURI="src/MIME_EncDec.cc"/> + <FileResource projectRelativePath="MIME_Types.ttcn" relativeURI="src/MIME_Types.ttcn"/> + <FileResource projectRelativePath="MIME_parse.h" relativeURI="src/MIME_parse.h"/> + <FileResource projectRelativePath="MIME_parse_.tab.c" relativeURI="src/MIME_parse_.tab.c"/> + <FileResource projectRelativePath="MIME_parse_.tab.h" relativeURI="src/MIME_parse_.tab.h"/> + <FileResource projectRelativePath="lex.MIME_parse_.c" relativeURI="src/lex.MIME_parse_.c"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/MIME_CNL113352</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/MLSIMPLUSasp_CNL113749.tpd b/regression_test/XML/tpdValidTest/tpdTest/MLSIMPLUSasp_CNL113749.tpd new file mode 100644 index 000000000..9697fd6a0 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/MLSIMPLUSasp_CNL113749.tpd @@ -0,0 +1,56 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: MLSIMPLUSasp_CNL113749.tpd + Description: tpd project file + Rev: R1A01 + Prodnr: CNL 113 749 + Updated: 2012-10-16 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>MLSIMPLUSasp_CNL113749</ProjectName> + <ReferencedProjects> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/MLSIMPLUSasp_CNL113749_FS.pdf" relativeURI="doc/MLSIMPLUSasp_CNL113749_FS.pdf"/> + <FileResource projectRelativePath="doc/MLSIMPLUSasp_CNL113749_PRI.pdf" relativeURI="doc/MLSIMPLUSasp_CNL113749_PRI.pdf"/> + <FileResource projectRelativePath="doc/MLSIMPLUSasp_CNL113749_UG.pdf" relativeURI="doc/MLSIMPLUSasp_CNL113749_UG.pdf"/> + <FileResource projectRelativePath="src/MLSIMPLUSasp_PT.cc" relativeURI="src/MLSIMPLUSasp_PT.cc"/> + <FileResource projectRelativePath="src/MLSIMPLUSasp_PT.hh" relativeURI="src/MLSIMPLUSasp_PT.hh"/> + <FileResource projectRelativePath="src/MLSIMPLUSasp_PortType.ttcn" relativeURI="src/MLSIMPLUSasp_PortType.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <targetExecutable>bin/MLSIMPLUSasp_CNL113749</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/MLSIMasp_CNL113538.tpd b/regression_test/XML/tpdValidTest/tpdTest/MLSIMasp_CNL113538.tpd new file mode 100644 index 000000000..979e0cc99 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/MLSIMasp_CNL113538.tpd @@ -0,0 +1,121 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: MLSIMasp_CNL113538.tpd + Description: tpd project file + Rev: R11A01 + Prodnr: CNL 113 538 + Updated: 2012-04-04 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>MLSIMasp_CNL113538</ProjectName> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + </Folders> + <Files> + <FileResource projectRelativePath="MLSIMasp_PT.cc" relativeURI="src/MLSIMasp_PT.cc"/> + <FileResource projectRelativePath="MLSIMasp_PT.hh" relativeURI="src/MLSIMasp_PT.hh"/> + <FileResource projectRelativePath="MLSIMasp_PortType.ttcn" relativeURI="src/MLSIMasp_PortType.ttcn"/> + <FileResource projectRelativePath="MLSIMasp_Types.ttcn" relativeURI="src/MLSIMasp_Types.ttcn"/> + <FileResource projectRelativePath="MLSIMasp_functions.ttcn" relativeURI="src/MLSIMasp_functions.ttcn"/> + <FileResource projectRelativePath="MLSIMasp_functionsDef.cc" relativeURI="src/MLSIMasp_functionsDef.cc"/> + </Files> + <ActiveConfiguration>LINUX64</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/MLSIMasp_CNL113538</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + <Configuration name="LINUX"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/MLSIMasp_CNL113538</targetExecutable> + <preprocessorIncludes> + <listItem>[MLSIMDIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>mlsim</listItem> + <listItem>ccrtp1</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[MLSIMDIR]/lib</listItem> + </linkerLibrarySearchPath> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + <Configuration name="LINUX64"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/MLSIMasp_CNL113538</targetExecutable> + <preprocessorIncludes> + <listItem>[MLSIMDIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>mlsim</listItem> + <listItem>ccrtp1</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[MLSIMDIR]/lib</listItem> + </linkerLibrarySearchPath> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/MMLasp_CNL113490.tpd b/regression_test/XML/tpdValidTest/tpdTest/MMLasp_CNL113490.tpd new file mode 100644 index 000000000..2e3b7c7c7 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/MMLasp_CNL113490.tpd @@ -0,0 +1,95 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: MMLasp_CNL113490.tpd + Description: tpd project file + Rev: R4C01 + Prodnr: CNL 113 490 + Updated: 2012-10-01 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>MMLasp_CNL113490</ProjectName> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/MMLasp_CNL113490_FS.pdf" relativeURI="doc/MMLasp_CNL113490_FS.pdf"/> + <FileResource projectRelativePath="doc/MMLasp_CNL113490_PRI.pdf" relativeURI="doc/MMLasp_CNL113490_PRI.pdf"/> + <FileResource projectRelativePath="doc/MMLasp_CNL113490_UG.pdf" relativeURI="doc/MMLasp_CNL113490_UG.pdf"/> + <FileResource projectRelativePath="src/MMLasp_PT.cc" relativeURI="src/MMLasp_PT.cc"/> + <FileResource projectRelativePath="src/MMLasp_PT.hh" relativeURI="src/MMLasp_PT.hh"/> + <FileResource projectRelativePath="src/MMLasp_PortType.ttcn" relativeURI="src/MMLasp_PortType.ttcn"/> + <FileResource projectRelativePath="src/MMLasp_Types.ttcn" relativeURI="src/MMLasp_Types.ttcn"/> + </Files> + <ActiveConfiguration>TARGET_TEST</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/MMLasp_CNL113490</targetExecutable> + <preprocessorDefines> + <listItem>TARGET_MML_TEST</listItem> + </preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <externalFunction>f_.*</externalFunction> + <formalParameter>.*</formalParameter> + </NamingCoventions> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + <Configuration name="TARGET_TEST"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/MMLasp_CNL113490</targetExecutable> + <preprocessorDefines> + <listItem>TARGET_MML_TEST</listItem> + </preprocessorDefines> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <externalFunction>f_.*</externalFunction> + <formalParameter>.*</formalParameter> + </NamingCoventions> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/MSRP_CNL113467.tpd b/regression_test/XML/tpdValidTest/tpdTest/MSRP_CNL113467.tpd new file mode 100644 index 000000000..b9c696bdd --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/MSRP_CNL113467.tpd @@ -0,0 +1,84 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: MSRP_CNL113467.tpd + Description: tpd project file + Rev: R7A + Prodnr: CNL 113 467 + Updated: 2013-04-08 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>MSRP_CNL113467</ProjectName> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + </Folders> + <Files> + <FileResource projectRelativePath="MSRP.l" relativeURI="src/MSRP.l"/> + <FileResource projectRelativePath="MSRP.y" relativeURI="src/MSRP.y"/> + <FileResource projectRelativePath="MSRP_EncDec.cc" relativeURI="src/MSRP_EncDec.cc"/> + <FileResource projectRelativePath="MSRP_Templates.ttcn" relativeURI="src/MSRP_Templates.ttcn"/> + <FileResource projectRelativePath="MSRP_Types.ttcn" relativeURI="src/MSRP_Types.ttcn"/> + <FileResource projectRelativePath="MSRP_parse.h" relativeURI="src/MSRP_parse.h"/> + <FileResource projectRelativePath="MSRP_parse_.tab.c" relativeURI="src/MSRP_parse_.tab.c"/> + <FileResource projectRelativePath="MSRP_parse_.tab.h" relativeURI="src/MSRP_parse_.tab.h"/> + <FileResource projectRelativePath="doc/MSRP_CNL113467_FS.pdf" relativeURI="doc/MSRP_CNL113467_FS.pdf"/> + <FileResource projectRelativePath="doc/MSRP_CNL113467_PRI.pdf" relativeURI="doc/MSRP_CNL113467_PRI.pdf"/> + <FileResource projectRelativePath="doc/MSRP_CNL113467_UG.pdf" relativeURI="doc/MSRP_CNL113467_UG.pdf"/> + <FileResource projectRelativePath="lex.MSRP_parse_.c" relativeURI="src/lex.MSRP_parse_.c"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/MSRP_CNL113467</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <externalFunction>f_.*</externalFunction> + <moduleParameter>.*</moduleParameter> + <localVariable>.*</localVariable> + <localVariableTemplate>.*</localVariableTemplate> + <formalParameter>.*</formalParameter> + </NamingCoventions> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>MSRP.l</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>MSRP.y</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/MTP3asp_CNL113337.tpd b/regression_test/XML/tpdValidTest/tpdTest/MTP3asp_CNL113337.tpd new file mode 100644 index 000000000..a20c08bab --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/MTP3asp_CNL113337.tpd @@ -0,0 +1,89 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: MTP3asp_CNL113337.tpd + Description: tpd project file + Rev: R11A01 + Prodnr: CNL 113 337 + Updated: 2012-11-23 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>MTP3asp_CNL113337</ProjectName> + <ReferencedProjects> + <ReferencedProject name="Abstract_Socket_CNL113384" projectLocationURI="../Common_Components/Abstract_Socket_CNL113384/Abstract_Socket_CNL113384.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/MTP3asp_CNL113337_FS.pdf" relativeURI="doc/MTP3asp_CNL113337_FS.pdf"/> + <FileResource projectRelativePath="doc/MTP3asp_CNL113337_PRI.pdf" relativeURI="doc/MTP3asp_CNL113337_PRI.pdf"/> + <FileResource projectRelativePath="doc/MTP3asp_CNL113337_UG.pdf" relativeURI="doc/MTP3asp_CNL113337_UG.pdf"/> + <FileResource projectRelativePath="src/MTP3asp_EncDec.cc" relativeURI="src/MTP3asp_EncDec.cc"/> + <FileResource projectRelativePath="src/MTP3asp_PT.cc" relativeURI="src/MTP3asp_PT.cc"/> + <FileResource projectRelativePath="src/MTP3asp_PT.hh" relativeURI="src/MTP3asp_PT.hh"/> + <FileResource projectRelativePath="src/MTP3asp_PortType.ttcn" relativeURI="src/MTP3asp_PortType.ttcn"/> + <FileResource projectRelativePath="src/MTP3asp_Types.ttcn" relativeURI="src/MTP3asp_Types.ttcn"/> + </Files> + <ActiveConfiguration>TARGET_TEST</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/MTP3asp_CNL113337</targetExecutable> + <preprocessorDefines> + <listItem>TARGET_TEST</listItem> + </preprocessorDefines> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + <Configuration name="TARGET_TEST"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/MTP3asp_CNL113337</targetExecutable> + <preprocessorDefines> + <listItem>TARGET_TEST</listItem> + </preprocessorDefines> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + <Configuration name="NO TARGET_TEST"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/MTP3asp_CNL113337</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/MTP3asp_EIN_CNL113421.tpd b/regression_test/XML/tpdValidTest/tpdTest/MTP3asp_EIN_CNL113421.tpd new file mode 100644 index 000000000..be66eb755 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/MTP3asp_EIN_CNL113421.tpd @@ -0,0 +1,78 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: MTP3asp_EIN_CNL113421.tpd + Description: tpd project file + Rev: R3C01 + Prodnr: CNL 113 421 + Updated: 2012-10-29 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>MTP3asp_EIN_CNL113421</ProjectName> + <ReferencedProjects> + <ReferencedProject name="SS7Common_CNL113755" projectLocationURI="../Common_Components/SS7Common_CNL113755/SS7Common_CNL113755.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="MTP3asp_EIN_CNL113421.tpd" relativeURI="MTP3asp_EIN_CNL113421.tpd"/> + <FileResource projectRelativePath="doc/MTP3asp_EIN_CNL113421_FS.pdf" relativeURI="doc/MTP3asp_EIN_CNL113421_FS.pdf"/> + <FileResource projectRelativePath="doc/MTP3asp_EIN_CNL113421_PRI.pdf" relativeURI="doc/MTP3asp_EIN_CNL113421_PRI.pdf"/> + <FileResource projectRelativePath="doc/MTP3asp_EIN_CNL113421_UG.pdf" relativeURI="doc/MTP3asp_EIN_CNL113421_UG.pdf"/> + <FileResource projectRelativePath="src/MTP3asp_EIN_PT.cc" relativeURI="src/MTP3asp_EIN_PT.cc"/> + <FileResource projectRelativePath="src/MTP3asp_EIN_PT.hh" relativeURI="src/MTP3asp_EIN_PT.hh"/> + <FileResource projectRelativePath="src/MTP3asp_EIN_PortType.ttcn" relativeURI="src/MTP3asp_EIN_PortType.ttcn"/> + <FileResource projectRelativePath="src/MTP3asp_EIN_Types.ttcn" relativeURI="src/MTP3asp_EIN_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/MTP3asp_EIN_CNL113421</targetExecutable> + <preprocessorDefines> + <listItem>CP_R12A30</listItem> + <listItem>EINSS7_THREADSAFE</listItem> + </preprocessorDefines> + <preprocessorIncludes> + <listItem>[SS7_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>einss7_n_r</listItem> + <listItem>pthread</listItem> + <listItem>util</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[SS7_DIR]/lib64</listItem> + </linkerLibrarySearchPath> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/MobileL3_v10.5.0_CNL113758.tpd b/regression_test/XML/tpdValidTest/tpdTest/MobileL3_v10.5.0_CNL113758.tpd new file mode 100644 index 000000000..a2e5fe097 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/MobileL3_v10.5.0_CNL113758.tpd @@ -0,0 +1,73 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: MobileL3_v10.5.0_CNL113758.tpd + Description: tpd project file + Rev: R1B02 + Prodnr: CNL 113 758 + Updated: 2013-01-22 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>MobileL3_v10.5.0_CNL113758</ProjectName> + <ReferencedProjects> + <ReferencedProject name="MAP_v7.12.0_CNL113635" projectLocationURI="../MAP_v7.12.0_CNL113635/MAP_v7.12.0_CNL113635.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/MobileL3_v10.5.0_CNL113758_FS.pdf" relativeURI="doc/MobileL3_v10.5.0_CNL113758_FS.pdf"/> + <FileResource projectRelativePath="doc/MobileL3_v10.5.0_CNL113758_PRI.pdf" relativeURI="doc/MobileL3_v10.5.0_CNL113758_PRI.pdf"/> + <FileResource projectRelativePath="doc/MobileL3_v10.5.0_CNL113758_UG.pdf" relativeURI="doc/MobileL3_v10.5.0_CNL113758_UG.pdf"/> + <FileResource projectRelativePath="src/MobileL3_CC_Types.ttcn" relativeURI="src/MobileL3_CC_Types.ttcn"/> + <FileResource projectRelativePath="src/MobileL3_CommonIE_Types.ttcn" relativeURI="src/MobileL3_CommonIE_Types.ttcn"/> + <FileResource projectRelativePath="src/MobileL3_GMM_SM_Types.ttcn" relativeURI="src/MobileL3_GMM_SM_Types.ttcn"/> + <FileResource projectRelativePath="src/MobileL3_MM_Types.ttcn" relativeURI="src/MobileL3_MM_Types.ttcn"/> + <FileResource projectRelativePath="src/MobileL3_RRM_Types.ttcn" relativeURI="src/MobileL3_RRM_Types.ttcn"/> + <FileResource projectRelativePath="src/MobileL3_SMS_Types.ttcn" relativeURI="src/MobileL3_SMS_Types.ttcn"/> + <FileResource projectRelativePath="src/MobileL3_SS_Types.ttcn" relativeURI="src/MobileL3_SS_Types.ttcn"/> + <FileResource projectRelativePath="src/MobileL3_Types.ttcn" relativeURI="src/MobileL3_Types.ttcn"/> + <FileResource projectRelativePath="src/SS_DataTypes.asn" relativeURI="src/SS_DataTypes.asn"/> + <FileResource projectRelativePath="src/SS_Errors.asn" relativeURI="src/SS_Errors.asn"/> + <FileResource projectRelativePath="src/SS_Operations.asn" relativeURI="src/SS_Operations.asn"/> + <FileResource projectRelativePath="src/SS_PDU_Defs.asn" relativeURI="src/SS_PDU_Defs.asn"/> + <FileResource projectRelativePath="src/SS_Protocol.asn" relativeURI="src/SS_Protocol.asn"/> + <FileResource projectRelativePath="src/SS_Types.ttcn" relativeURI="src/SS_Types.ttcn"/> + <FileResource projectRelativePath="src/SS_EncDec.cc" relativeURI="src/SS_EncDec.cc"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/MobileL3_v10.5.0_CNL113758</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/MobileL3_v9.5.0_CNL113719.tpd b/regression_test/XML/tpdValidTest/tpdTest/MobileL3_v9.5.0_CNL113719.tpd new file mode 100644 index 000000000..ce35f0ef0 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/MobileL3_v9.5.0_CNL113719.tpd @@ -0,0 +1,72 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: MobileL3_v9.5.0_CNL113719.tpd + Description: tpd project file + Rev: R2D01 + Prodnr: CNL 113 719 + Updated: 2012-10-01 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>MobileL3_v9.5.0_CNL113719</ProjectName> + <ReferencedProjects> + <ReferencedProject name="MAP_v7.12.0_CNL113635" projectLocationURI="../MAP_v7.12.0_CNL113635/MAP_v7.12.0_CNL113635.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/MobileL3_v9.5.0_CNL113719_FS.pdf" relativeURI="doc/MobileL3_v9.5.0_CNL113719_FS.pdf"/> + <FileResource projectRelativePath="doc/MobileL3_v9.5.0_CNL113719_PRI.pdf" relativeURI="doc/MobileL3_v9.5.0_CNL113719_PRI.pdf"/> + <FileResource projectRelativePath="doc/MobileL3_v9.5.0_CNL113719_UG.pdf" relativeURI="doc/MobileL3_v9.5.0_CNL113719_UG.pdf"/> + <FileResource projectRelativePath="src/MobileL3_CC_Types.ttcn" relativeURI="src/MobileL3_CC_Types.ttcn"/> + <FileResource projectRelativePath="src/MobileL3_CommonIE_Types.ttcn" relativeURI="src/MobileL3_CommonIE_Types.ttcn"/> + <FileResource projectRelativePath="src/MobileL3_GMM_SM_Types.ttcn" relativeURI="src/MobileL3_GMM_SM_Types.ttcn"/> + <FileResource projectRelativePath="src/MobileL3_MM_Types.ttcn" relativeURI="src/MobileL3_MM_Types.ttcn"/> + <FileResource projectRelativePath="src/MobileL3_RRM_Types.ttcn" relativeURI="src/MobileL3_RRM_Types.ttcn"/> + <FileResource projectRelativePath="src/MobileL3_SMS_Types.ttcn" relativeURI="src/MobileL3_SMS_Types.ttcn"/> + <FileResource projectRelativePath="src/MobileL3_SS_Types.ttcn" relativeURI="src/MobileL3_SS_Types.ttcn"/> + <FileResource projectRelativePath="src/MobileL3_Types.ttcn" relativeURI="src/MobileL3_Types.ttcn"/> + <FileResource projectRelativePath="src/SS_DataTypes.asn" relativeURI="src/SS_DataTypes.asn"/> + <FileResource projectRelativePath="src/SS_EncDec.cc" relativeURI="src/SS_EncDec.cc"/> + <FileResource projectRelativePath="src/SS_Errors.asn" relativeURI="src/SS_Errors.asn"/> + <FileResource projectRelativePath="src/SS_Operations.asn" relativeURI="src/SS_Operations.asn"/> + <FileResource projectRelativePath="src/SS_PDU_Defs.asn" relativeURI="src/SS_PDU_Defs.asn"/> + <FileResource projectRelativePath="src/SS_Protocol.asn" relativeURI="src/SS_Protocol.asn"/> + <FileResource projectRelativePath="src/SS_Types.ttcn" relativeURI="src/SS_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/MobileL3</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/NAS_EPS_v10.6.1_CNL113746.tpd b/regression_test/XML/tpdValidTest/tpdTest/NAS_EPS_v10.6.1_CNL113746.tpd new file mode 100644 index 000000000..7db3abbf6 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/NAS_EPS_v10.6.1_CNL113746.tpd @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: NAS_EPS_v10.6.1_CNL113746.tpd + Description: tpd project file + Rev: R1A02 + Prodnr: CNL 113 746 + Updated: 2012-07-27 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>NAS_EPS_v10.6.1_CNL113746</ProjectName> + <ReferencedProjects> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/NAS_EPS_v10.6.1_CNL113746_FS.pdf" relativeURI="doc/NAS_EPS_v10.6.1_CNL113746_FS.pdf"/> + <FileResource projectRelativePath="doc/NAS_EPS_v10.6.1_CNL113746_PRI.pdf" relativeURI="doc/NAS_EPS_v10.6.1_CNL113746_PRI.pdf"/> + <FileResource projectRelativePath="doc/NAS_EPS_v10.6.1_CNL113746_UG.pdf" relativeURI="doc/NAS_EPS_v10.6.1_CNL113746_UG.pdf"/> + <FileResource projectRelativePath="src/NAS_EPS_vA61.ttcn" relativeURI="src/NAS_EPS_vA61.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/NAS_EPS_v10.6.1_CNL113746</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/NAS_EPS_v9.7.0_CNL113729.tpd b/regression_test/XML/tpdValidTest/tpdTest/NAS_EPS_v9.7.0_CNL113729.tpd new file mode 100644 index 000000000..73fdd0c14 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/NAS_EPS_v9.7.0_CNL113729.tpd @@ -0,0 +1,58 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: NAS_EPS_v9.7.0_CNL113729.tpd + Description: tpd project file + Rev: R1A02 + Prodnr: CNL 113 729 + Updated: 2012-01-16 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>NAS_EPS_v9.7.0_CNL113729</ProjectName> + <ReferencedProjects> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/NAS_EPS_v9.7.0_CNL113729_FS.pdf" relativeURI="doc/NAS_EPS_v9.7.0_CNL113729_FS.pdf"/> + <FileResource projectRelativePath="doc/NAS_EPS_v9.7.0_CNL113729_PRI.pdf" relativeURI="doc/NAS_EPS_v9.7.0_CNL113729_PRI.pdf"/> + <FileResource projectRelativePath="doc/NAS_EPS_v9.7.0_CNL113729_UG.pdf" relativeURI="doc/NAS_EPS_v9.7.0_CNL113729_UG.pdf"/> + <FileResource projectRelativePath="src/NAS_EPS_v970.ttcn" relativeURI="src/NAS_EPS_v970.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/NAS_EPS_v9.7.0_CNL113729</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/PIM_CNL113733.tpd b/regression_test/XML/tpdValidTest/tpdTest/PIM_CNL113733.tpd new file mode 100644 index 000000000..a443fefd4 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/PIM_CNL113733.tpd @@ -0,0 +1,60 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: PIM_CNL113733.tpd + Description: tpd project file + Rev: R1A01 + Prodnr: CNL 113 733 + Updated: 2012-01-17 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>PIM_CNL113733</ProjectName> + <ReferencedProjects> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/PIM_CNL113733_FS.pdf" relativeURI="doc/PIM_CNL113733_FS.pdf"/> + <FileResource projectRelativePath="doc/PIM_CNL113733_PRI.pdf" relativeURI="doc/PIM_CNL113733_PRI.pdf"/> + <FileResource projectRelativePath="doc/PIM_CNL113733_UG.pdf" relativeURI="doc/PIM_CNL113733_UG.pdf"/> + <FileResource projectRelativePath="src/PIM_EncDec.cc" relativeURI="src/PIM_EncDec.cc"/> + <FileResource projectRelativePath="src/PIM_Types.ttcn" relativeURI="src/PIM_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/PIM_CNL113733</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/PIPEasp_CNL113334.tpd b/regression_test/XML/tpdValidTest/tpdTest/PIPEasp_CNL113334.tpd new file mode 100644 index 000000000..335f97cc1 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/PIPEasp_CNL113334.tpd @@ -0,0 +1,70 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: PIPEasp_CNL113334.tpd + Description: tpd project file + Rev: R5A + Prodnr: CNL 113 334 + Updated: 2013-02-27 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>PIPEasp_CNL113334</ProjectName> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/PIPEasp_CNL113334_FS.pdf" relativeURI="doc/PIPEasp_CNL113334_FS.pdf"/> + <FileResource projectRelativePath="doc/PIPEasp_CNL113334_PRI.pdf" relativeURI="doc/PIPEasp_CNL113334_PRI.pdf"/> + <FileResource projectRelativePath="doc/PIPEasp_CNL113334_UG.pdf" relativeURI="doc/PIPEasp_CNL113334_UG.pdf"/> + <FileResource projectRelativePath="src/PIPE.grp" relativeURI="src/PIPE.grp"/> + <FileResource projectRelativePath="src/PIPEasp_PT.cc" relativeURI="src/PIPEasp_PT.cc"/> + <FileResource projectRelativePath="src/PIPEasp_PT.hh" relativeURI="src/PIPEasp_PT.hh"/> + <FileResource projectRelativePath="src/PIPEasp_PortType.ttcn" relativeURI="src/PIPEasp_PortType.ttcn"/> + <FileResource projectRelativePath="src/PIPEasp_Types.ttcn" relativeURI="src/PIPEasp_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/PIPEasp_CNL113334</targetExecutable> + <linkerLibraries> + <listItem>util</listItem> + </linkerLibraries> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/PIPE.grp</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/PMIP_v10.5.0_CNL113759.tpd b/regression_test/XML/tpdValidTest/tpdTest/PMIP_v10.5.0_CNL113759.tpd new file mode 100644 index 000000000..11f416063 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/PMIP_v10.5.0_CNL113759.tpd @@ -0,0 +1,60 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: PMIP_v10.5.0_CNL113759.tpd + Description: tpd project file + Rev: R2A + Prodnr: CNL 113 759 + Updated: 2013-02-27 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>PMIP_v10.5.0_CNL113759</ProjectName> + <ReferencedProjects> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/PMIP_v10.5.0_CNL113759_FS.pdf" relativeURI="doc/PMIP_v10.5.0_CNL113759_FS.pdf"/> + <FileResource projectRelativePath="doc/PMIP_v10.5.0_CNL113759_PRI.pdf" relativeURI="doc/PMIP_v10.5.0_CNL113759_PRI.pdf"/> + <FileResource projectRelativePath="doc/PMIP_v10.5.0_CNL113759_UG.pdf" relativeURI="doc/PMIP_v10.5.0_CNL113759_UG.pdf"/> + <FileResource projectRelativePath="src/PMIP_EncDec.cc" relativeURI="src/PMIP_EncDec.cc"/> + <FileResource projectRelativePath="src/PMIP_Types.ttcn" relativeURI="src/PMIP_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/PMIP_v10.5.0_CNL113759</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/PMIP_v8.5.0_CNL113704.tpd b/regression_test/XML/tpdValidTest/tpdTest/PMIP_v8.5.0_CNL113704.tpd new file mode 100644 index 000000000..c50ac1f27 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/PMIP_v8.5.0_CNL113704.tpd @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: PMIP_v8.5.0_CNL113704.tpd + Description: tpd project file + Rev: R1C01 + Prodnr: CNL 113 704 + Updated: 2012-05-30 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>PMIP_v8.5.0_CNL113704</ProjectName> + <ReferencedProjects> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/PMIP_v8.5.0_CNL113704_FS.pdf" relativeURI="doc/PMIP_v8.5.0_CNL113704_FS.pdf"/> + <FileResource projectRelativePath="doc/PMIP_v8.5.0_CNL113704_PRI.pdf" relativeURI="doc/PMIP_v8.5.0_CNL113704_PRI.pdf"/> + <FileResource projectRelativePath="doc/PMIP_v8.5.0_CNL113704_UG.pdf" relativeURI="doc/PMIP_v8.5.0_CNL113704_UG.pdf"/> + <FileResource projectRelativePath="src/PMIP_EncDec.cc" relativeURI="src/PMIP_EncDec.cc"/> + <FileResource projectRelativePath="src/PMIP_Types.ttcn" relativeURI="src/PMIP_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/PMIP</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/ParlayX_CNL113540.tpd b/regression_test/XML/tpdValidTest/tpdTest/ParlayX_CNL113540.tpd new file mode 100644 index 000000000..efba17890 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/ParlayX_CNL113540.tpd @@ -0,0 +1,264 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: ParlayX_CNL113540.tpd + Description: tpd project file + Rev: R2A01 + Prodnr: CNL 113 540 + Updated: 2012-06-22 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>ParlayX_CNL113540</ProjectName> + <ReferencedProjects> + <ReferencedProject name="XSDASN_CNL113474" projectLocationURI="../XSDASN_CNL113474/XSDASN_CNL113474.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="AmountCharging.asn" relativeURI="src/AmountCharging.asn"/> + <FileResource projectRelativePath="CommonTypes.asn" relativeURI="src/CommonTypes.asn"/> + <FileResource projectRelativePath="PaymentTypes.asn" relativeURI="src/PaymentTypes.asn"/> + <FileResource projectRelativePath="ReserveAmountCharging.asn" relativeURI="src/ReserveAmountCharging.asn"/> + <FileResource projectRelativePath="ReserveVolumeCharging.asn" relativeURI="src/ReserveVolumeCharging.asn"/> + <FileResource projectRelativePath="SOAP.asn" relativeURI="src/SOAP.asn"/> + <FileResource projectRelativePath="SOAP_EncDec.cc" relativeURI="src/SOAP_EncDec.cc"/> + <FileResource projectRelativePath="SOAP_Types.ttcn" relativeURI="src/SOAP_Types.ttcn"/> + <FileResource projectRelativePath="SOAP_linux.c" relativeURI="src/SOAP_linux.c"/> + <FileResource projectRelativePath="SOAP_linux64bit.c" relativeURI="src/SOAP_linux64bit.c"/> + <FileResource projectRelativePath="SOAP_oss.c" relativeURI="src/SOAP_oss.c"/> + <FileResource projectRelativePath="SOAP_oss.h" relativeURI="src/SOAP_oss.h"/> + <FileResource projectRelativePath="SOAP_solarisx86.c" relativeURI="src/SOAP_solarisx86.c"/> + <FileResource projectRelativePath="VolumeCharging.asn" relativeURI="src/VolumeCharging.asn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/ParlayX_CNL113540</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>asn1code</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <ConfigurationRequirements> + <configurationRequirement> + <projectName>XSDASN_CNL113474</projectName> + <rerquiredConfiguration>XSD</rerquiredConfiguration> + </configurationRequirement> + </ConfigurationRequirements> + </ProjectProperties> + <FileProperties> + <FileResource> + <FilePath>SOAP_linux.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>SOAP_oss.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>SOAP_solarisx86.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="SOLARIS_SPARC"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/ParlayX_CNL113540</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>asn1code</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FileProperties> + <FileResource> + <FilePath>SOAP_linux.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>SOAP_linux64bit.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>SOAP_solarisx86.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="SOLARIX_X86"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/ParlayX_CNL113540</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>asn1code</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FileProperties> + <FileResource> + <FilePath>SOAP_linux.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>SOAP_linux64bit.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>SOAP_oss.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="LINUX"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/ParlayX_CNL113540</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>asn1code</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FileProperties> + <FileResource> + <FilePath>SOAP_linux64bit.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>SOAP_oss.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>SOAP_solarisx86.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="LINUX64"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/ParlayX_CNL113540</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>asn1code</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FileProperties> + <FileResource> + <FilePath>SOAP_linux.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>SOAP_oss.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>SOAP_solarisx86.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/ProtocolModules_Common.tpd b/regression_test/XML/tpdValidTest/tpdTest/ProtocolModules_Common.tpd new file mode 100644 index 000000000..9ba2500fe --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/ProtocolModules_Common.tpd @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>ProtocolModules_Common</ProjectName> + <Files> + <FileResource projectRelativePath="General_Types.ttcn" relativeURI="src/General_Types.ttcn"/> + <FileResource projectRelativePath="MobileDomainDefinitions.asn" relativeURI="src/MobileDomainDefinitions.asn"/> + <FileResource projectRelativePath="general_typedefs.ttcn" relativeURI="src/general_typedefs.ttcn"/> + <FileResource projectRelativePath="XSD.ttcn" relativeURI="src/XSD.ttcn"/> + <FileResource projectRelativePath="UsefulTtcn3Types.ttcn" relativeURI="src/UsefulTtcn3Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/ProtocolModules_Common</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/RANAP_v10.4.0_CNL113742.tpd b/regression_test/XML/tpdValidTest/tpdTest/RANAP_v10.4.0_CNL113742.tpd new file mode 100644 index 000000000..9d86f0d1d --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/RANAP_v10.4.0_CNL113742.tpd @@ -0,0 +1,302 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: RANAP_v10.4.0_CNL113742.tpd + Description: tpd project file + Rev: R1B01 + Prodnr: CNL 113 742 + Updated: 2012-10-19 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>RANAP_v10.4.0_CNL113742</ProjectName> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/RANAP_v10.4.0_CNL113742_FS.pdf" relativeURI="doc/RANAP_v10.4.0_CNL113742_FS.pdf"/> + <FileResource projectRelativePath="doc/RANAP_v10.4.0_CNL113742_PRI.pdf" relativeURI="doc/RANAP_v10.4.0_CNL113742_PRI.pdf"/> + <FileResource projectRelativePath="doc/RANAP_v10.4.0_CNL113742_UG.pdf" relativeURI="doc/RANAP_v10.4.0_CNL113742_UG.pdf"/> + <FileResource projectRelativePath="src/RANAP_CommonDataTypes.asn" relativeURI="src/RANAP_CommonDataTypes.asn"/> + <FileResource projectRelativePath="src/RANAP_Constants.asn" relativeURI="src/RANAP_Constants.asn"/> + <FileResource projectRelativePath="src/RANAP_Containers.asn" relativeURI="src/RANAP_Containers.asn"/> + <FileResource projectRelativePath="src/RANAP_TransparentContainers.asn" relativeURI="src/RANAP_TransparentContainers.asn"/> + <FileResource projectRelativePath="src/RANAP_EncDec.cc" relativeURI="src/RANAP_EncDec.cc"/> + <FileResource projectRelativePath="src/RANAP_IEs.asn" relativeURI="src/RANAP_IEs.asn"/> + <FileResource projectRelativePath="src/RANAP_PDU_Contents.asn" relativeURI="src/RANAP_PDU_Contents.asn"/> + <FileResource projectRelativePath="src/RANAP_PDU_Descriptions.asn" relativeURI="src/RANAP_PDU_Descriptions.asn"/> + <FileResource projectRelativePath="src/RANAP_Types.ttcn" relativeURI="src/RANAP_Types.ttcn"/> + <FileResource projectRelativePath="src/ranap_class.c" relativeURI="src/ranap_class.c"/> + <FileResource projectRelativePath="src/ranap_class.h" relativeURI="src/ranap_class.h"/> + <FileResource projectRelativePath="src/ranap_class_linux.c" relativeURI="src/ranap_class_linux.c"/> + <FileResource projectRelativePath="src/ranap_class_linux64bit.c" relativeURI="src/ranap_class_linux64bit.c"/> + <FileResource projectRelativePath="src/ranap_class_solarisx86.c" relativeURI="src/ranap_class_solarisx86.c"/> + </Files> + <ActiveConfiguration>LINUX64</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/RANAP_v10.4.0_CNL113742</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>osstoed</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/ranap_class.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/ranap_class_linux.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/ranap_class_solarisx86.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="LINUX64"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/RANAP_v10.4.0_CNL113742</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>osstoed</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/ranap_class.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/ranap_class_linux.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/ranap_class_solarisx86.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="LINUX"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/RANAP_v10.4.0_CNL113742</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>osstoed</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/ranap_class.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/ranap_class_linux64bit.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/ranap_class_solarisx86.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="SPARC_SOLARIS"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/RANAP_v10.4.0_CNL113742</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>osstoed</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/ranap_class_linux.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/ranap_class_linux64bit.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/ranap_class_solarisx86.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="SOLARIS_X86"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/RANAP_v10.4.0_CNL113742</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>osstoed</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/ranap_class.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/ranap_class_linux64bit.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/ranap_class_linux.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/RANAP_v9.5.0_CNL113718.tpd b/regression_test/XML/tpdValidTest/tpdTest/RANAP_v9.5.0_CNL113718.tpd new file mode 100644 index 000000000..888819bd3 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/RANAP_v9.5.0_CNL113718.tpd @@ -0,0 +1,226 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: RANAP_v9.5.0_CNL113718.tpd + Description: tpd project file + Rev: R3C01 + Prodnr: CNL 113 718 + Updated: 2012-10-19 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>RANAP_v9.5.0_CNL113718</ProjectName> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/RANAP_v9.5.0_CNL113718_FS.pdf" relativeURI="doc/RANAP_v9.5.0_CNL113718_FS.pdf"/> + <FileResource projectRelativePath="doc/RANAP_v9.5.0_CNL113718_PRI.pdf" relativeURI="doc/RANAP_v9.5.0_CNL113718_PRI.pdf"/> + <FileResource projectRelativePath="doc/RANAP_v9.5.0_CNL113718_UG.pdf" relativeURI="doc/RANAP_v9.5.0_CNL113718_UG.pdf"/> + <FileResource projectRelativePath="src/RANAP_CommonDataTypes.asn" relativeURI="src/RANAP_CommonDataTypes.asn"/> + <FileResource projectRelativePath="src/RANAP_Constants.asn" relativeURI="src/RANAP_Constants.asn"/> + <FileResource projectRelativePath="src/RANAP_Containers.asn" relativeURI="src/RANAP_Containers.asn"/> + <FileResource projectRelativePath="src/RANAP_TransparentContainers.asn" relativeURI="src/RANAP_TransparentContainers.asn"/> + <FileResource projectRelativePath="src/RANAP_EncDec.cc" relativeURI="src/RANAP_EncDec.cc"/> + <FileResource projectRelativePath="src/RANAP_IEs.asn" relativeURI="src/RANAP_IEs.asn"/> + <FileResource projectRelativePath="src/RANAP_PDU_Contents.asn" relativeURI="src/RANAP_PDU_Contents.asn"/> + <FileResource projectRelativePath="src/RANAP_PDU_Descriptions.asn" relativeURI="src/RANAP_PDU_Descriptions.asn"/> + <FileResource projectRelativePath="src/RANAP_Types.ttcn" relativeURI="src/RANAP_Types.ttcn"/> + <FileResource projectRelativePath="src/ranap_class.c" relativeURI="src/ranap_class.c"/> + <FileResource projectRelativePath="src/ranap_class.h" relativeURI="src/ranap_class.h"/> + <FileResource projectRelativePath="src/ranap_class_linux.c" relativeURI="src/ranap_class_linux.c"/> + <FileResource projectRelativePath="src/ranap_class_linux64bit.c" relativeURI="src/ranap_class_linux64bit.c"/> + </Files> + <ActiveConfiguration>LINUX64</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/RANAP_v9.5.0_CNL113718</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>osstoed</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/ranap_class.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/ranap_class_linux.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="LINUX64"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/RANAP_v9.5.0_CNL113718</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>osstoed</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/ranap_class.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/ranap_class_linux.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="LINUX"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/RANAP_v9.5.0_CNL113718</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>osstoed</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/ranap_class.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/ranap_class_linux64bit.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="SPARC_SOLARIS"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/RANAP_v9.5.0_CNL113718</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>osstoed</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/ranap_class_linux.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/ranap_class_linux64bit.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/RANAP_v9.5.0_CNL113718_demo_RNC_to_RNC.tpd b/regression_test/XML/tpdValidTest/tpdTest/RANAP_v9.5.0_CNL113718_demo_RNC_to_RNC.tpd new file mode 100644 index 000000000..aaa404882 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/RANAP_v9.5.0_CNL113718_demo_RNC_to_RNC.tpd @@ -0,0 +1,174 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>RANAP_v9.5.0_CNL113718_demo_RNC_to_RNC</ProjectName> + <Files> + <FileResource projectRelativePath="RANAP_CommonDataTypes.asn" relativeURI="../../src/RANAP_CommonDataTypes.asn"/> + <FileResource projectRelativePath="RANAP_Constants.asn" relativeURI="../../src/RANAP_Constants.asn"/> + <FileResource projectRelativePath="RANAP_Containers.asn" relativeURI="../../src/RANAP_Containers.asn"/> + <FileResource projectRelativePath="RANAP_EncDec.cc" relativeURI="../../src/RANAP_EncDec.cc"/> + <FileResource projectRelativePath="RANAP_IEs.asn" relativeURI="../../src/RANAP_IEs.asn"/> + <FileResource projectRelativePath="RANAP_PDU_Contents.asn" relativeURI="../../src/RANAP_PDU_Contents.asn"/> + <FileResource projectRelativePath="RANAP_PDU_Descriptions.asn" relativeURI="../../src/RANAP_PDU_Descriptions.asn"/> + <FileResource projectRelativePath="RANAP_TransparentContainers.asn" relativeURI="RANAP_TransparentContainers.asn"/> + <FileResource projectRelativePath="RANAP_Types.ttcn" relativeURI="../../src/RANAP_Types.ttcn"/> + <FileResource projectRelativePath="ranap_class.c" relativeURI="ranap_class.c"/> + <FileResource projectRelativePath="ranap_class.h" relativeURI="ranap_class.h"/> + <FileResource projectRelativePath="ranap_class_linux.c" relativeURI="ranap_class_linux.c"/> + <FileResource projectRelativePath="ranap_class_linux64bit.c" relativeURI="ranap_class_linux64bit.c"/> + </Files> + <ActiveConfiguration>LINUX64</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/RANAP_v9.5.0_CNL113718_demo_RNC_to_RNC</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>osstoed</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FileProperties> + <FileResource> + <FilePath>ranap_class.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>ranap_class_linux64bit.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="LINUX64"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/RANAP_v9.5.0_CNL113718_demo_RNC_to_RNC</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>osstoed</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FileProperties> + <FileResource> + <FilePath>ranap_class.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>ranap_class_linux.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="LINUX"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/RANAP_v9.5.0_CNL113718_demo_RNC_to_RNC</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>osstoed</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FileProperties> + <FileResource> + <FilePath>ranap_class.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>ranap_class_linux64bit.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="SPARC_SOLARIS"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/RANAP_v9.5.0_CNL113718_demo_RNC_to_RNC</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>osstoed</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FileProperties> + <FileResource> + <FilePath>ranap_class_linux.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>ranap_class_linux64bit.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/ROSE_CNL113369.tpd b/regression_test/XML/tpdValidTest/tpdTest/ROSE_CNL113369.tpd new file mode 100644 index 000000000..799ed2fb7 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/ROSE_CNL113369.tpd @@ -0,0 +1,52 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: ROSE_CNL113369.tpd + Description: tpd project file + Rev: R1D01 + Prodnr: CNL 113 369 + Updated: 2011-11-16 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>ROSE_CNL113369</ProjectName> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/ROSE_CNL113369_PRI.pdf" relativeURI="doc/ROSE_CNL113369_PRI.pdf"/> + <FileResource projectRelativePath="src/Remote_Operations_Generic_ROS_PDUs.asn" relativeURI="src/Remote_Operations_Generic_ROS_PDUs.asn"/> + <FileResource projectRelativePath="src/Remote_Operations_Information_Objects.asn" relativeURI="src/Remote_Operations_Information_Objects.asn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <GNUMake>true</GNUMake> + <targetExecutable>bin/ROSE_CNL113369</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/RTP_CNL113392.tpd b/regression_test/XML/tpdValidTest/tpdTest/RTP_CNL113392.tpd new file mode 100644 index 000000000..629c23fbd --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/RTP_CNL113392.tpd @@ -0,0 +1,50 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: RTP_CNL113392.tpd + Description: tpd project file + Rev: R3B + Prodnr: CNL 113 392 + Updated: 2013-04-08 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>RTP_CNL113392</ProjectName> + <ReferencedProjects> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <useAbsolutePath>true</useAbsolutePath> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/RTP_CNL113392</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <externalFunction>f_.*</externalFunction> + <localVariable>.*</localVariable> + <formalParameter>.*</formalParameter> + </NamingCoventions> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/RTSP_CNL113588.tpd b/regression_test/XML/tpdValidTest/tpdTest/RTSP_CNL113588.tpd new file mode 100644 index 000000000..9649550c9 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/RTSP_CNL113588.tpd @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: RTSP_CNL113588.tpd + Description: tpd project file + Rev: R1A02 + Prodnr: CNL 113 588 + Updated: 2012-05-16 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>RTSP_CNL113588</ProjectName> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/RTSP_CNL113588_FS.pdf" relativeURI="doc/RTSP_CNL113588_FS.pdf"/> + <FileResource projectRelativePath="doc/RTSP_CNL113588_PRI.pdf" relativeURI="doc/RTSP_CNL113588_PRI.pdf"/> + <FileResource projectRelativePath="doc/RTSP_CNL113588_UG.pdf" relativeURI="doc/RTSP_CNL113588_UG.pdf"/> + <FileResource projectRelativePath="src/RTSP_EncDec.cc" relativeURI="src/RTSP_EncDec.cc"/> + <FileResource projectRelativePath="src/RTSP_Types.ttcn" relativeURI="src/RTSP_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/RTSP_CNL113588</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/S1AP_v10.6.0_CNL113756.tpd b/regression_test/XML/tpdValidTest/tpdTest/S1AP_v10.6.0_CNL113756.tpd new file mode 100644 index 000000000..6c04b7b1b --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/S1AP_v10.6.0_CNL113756.tpd @@ -0,0 +1,211 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: S1AP_v10.6.0_CNL113756.tpd + Description: tpd project file + Rev: R1B + Prodnr: CNL 113 756 + Updated: 2013-03-26 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>S1AP_v10.6.0_CNL113756</ProjectName> + <Folders> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="src/S1AP_CommonDataTypes.asn" relativeURI="src/S1AP_CommonDataTypes.asn"/> + <FileResource projectRelativePath="src/S1AP_Constants.asn" relativeURI="src/S1AP_Constants.asn"/> + <FileResource projectRelativePath="src/S1AP_Containers.asn" relativeURI="src/S1AP_Containers.asn"/> + <FileResource projectRelativePath="src/S1AP_EncDec.cc" relativeURI="src/S1AP_EncDec.cc"/> + <FileResource projectRelativePath="src/S1AP_IEs.asn" relativeURI="src/S1AP_IEs.asn"/> + <FileResource projectRelativePath="src/S1AP_PDU_Contents.asn" relativeURI="src/S1AP_PDU_Contents.asn"/> + <FileResource projectRelativePath="src/S1AP_PDU_Descriptions.asn" relativeURI="src/S1AP_PDU_Descriptions.asn"/> + <FileResource projectRelativePath="src/S1AP_Types.ttcn" relativeURI="src/S1AP_Types.ttcn"/> + <FileResource projectRelativePath="src/S1AP_v10.6.0_CNL113756.grp" relativeURI="src/S1AP_v10.6.0_CNL113756.grp"/> + <FileResource projectRelativePath="src/gen.sh" relativeURI="src/gen.sh"/> + <FileResource projectRelativePath="src/s1ap_class.c" relativeURI="src/s1ap_class.c"/> + <FileResource projectRelativePath="src/s1ap_class.h" relativeURI="src/s1ap_class.h"/> + <FileResource projectRelativePath="src/s1ap_class_linux.c" relativeURI="src/s1ap_class_linux.c"/> + <FileResource projectRelativePath="src/s1ap_class_linux64bit.c" relativeURI="src/s1ap_class_linux64bit.c"/> + </Files> + <ActiveConfiguration>LINUX64</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/S1AP_v10.6.0_CNL113756</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>osstoed</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <function>.*</function> + <externalFunction>.*</externalFunction> + <formalParameter>.*</formalParameter> + </NamingCoventions> + </ProjectProperties> + <FileProperties> + <FileResource> + <FilePath>src/s1ap_class.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/s1ap_class_linux.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="LINUX"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/S1AP_v10.6.0_CNL113756</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>osstoed</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <function>.*</function> + <externalFunction>.*</externalFunction> + <formalParameter>.*</formalParameter> + </NamingCoventions> + </ProjectProperties> + <FileProperties> + <FileResource> + <FilePath>src/s1ap_class.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/s1ap_class_linux64bit.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="SOLARIS_SPARC"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/S1AP_v10.6.0_CNL113756</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>osstoed</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <function>.*</function> + <externalFunction>.*</externalFunction> + <formalParameter>.*</formalParameter> + </NamingCoventions> + </ProjectProperties> + <FileProperties> + <FileResource> + <FilePath>src/s1ap_class_linux.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/s1ap_class_linux64bit.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="LINUX64"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/S1AP_v10.6.0_CNL113756</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>osstoed</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <function>.*</function> + <externalFunction>.*</externalFunction> + <formalParameter>.*</formalParameter> + </NamingCoventions> + </ProjectProperties> + <FileProperties> + <FileResource> + <FilePath>src/s1ap_class.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/s1ap_class_linux.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/S1AP_v8.7.0_CNL113672.tpd b/regression_test/XML/tpdValidTest/tpdTest/S1AP_v8.7.0_CNL113672.tpd new file mode 100644 index 000000000..281f0d960 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/S1AP_v8.7.0_CNL113672.tpd @@ -0,0 +1,321 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: S1AP_v8.7.0_CNL113672.tpd + Description: tpd project file + Rev: R1A03 + Prodnr: CNL 113 672 + Updated: 2012-01-26 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>S1AP_v8.7.0_CNL113672</ProjectName> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/S1AP_v8.7.0_CNL113672_FS.pdf" relativeURI="doc/S1AP_v8.7.0_CNL113672_FS.pdf"/> + <FileResource projectRelativePath="doc/S1AP_v8.7.0_CNL113672_PRI.pdf" relativeURI="doc/S1AP_v8.7.0_CNL113672_PRI.pdf"/> + <FileResource projectRelativePath="doc/S1AP_v8.7.0_CNL113672_UG.pdf" relativeURI="doc/S1AP_v8.7.0_CNL113672_UG.pdf"/> + <FileResource projectRelativePath="src/S1AP_CommonDataTypes.asn" relativeURI="src/S1AP_CommonDataTypes.asn"/> + <FileResource projectRelativePath="src/S1AP_Constants.asn" relativeURI="src/S1AP_Constants.asn"/> + <FileResource projectRelativePath="src/S1AP_Containers.asn" relativeURI="src/S1AP_Containers.asn"/> + <FileResource projectRelativePath="src/S1AP_EncDec.cc" relativeURI="src/S1AP_EncDec.cc"/> + <FileResource projectRelativePath="src/S1AP_IEs.asn" relativeURI="src/S1AP_IEs.asn"/> + <FileResource projectRelativePath="src/S1AP_PDU_Contents.asn" relativeURI="src/S1AP_PDU_Contents.asn"/> + <FileResource projectRelativePath="src/S1AP_PDU_Descriptions.asn" relativeURI="src/S1AP_PDU_Descriptions.asn"/> + <FileResource projectRelativePath="src/S1AP_Types.ttcn" relativeURI="src/S1AP_Types.ttcn"/> + <FileResource projectRelativePath="src/gen.sh" relativeURI="src/gen.sh"/> + <FileResource projectRelativePath="src/s1ap_class.c" relativeURI="src/s1ap_class.c"/> + <FileResource projectRelativePath="src/s1ap_class.h" relativeURI="src/s1ap_class.h"/> + <FileResource projectRelativePath="src/s1ap_class_linux.c" relativeURI="src/s1ap_class_linux.c"/> + <FileResource projectRelativePath="src/s1ap_class_linux64bit.c" relativeURI="src/s1ap_class_linux64bit.c"/> + <FileResource projectRelativePath="src/s1ap_class_solarisx86.c" relativeURI="src/s1ap_class_solarisx86.c"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/S1AP_v8.7.0_CNL113672</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>asn1code</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/gen.sh</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/s1ap_class.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/s1ap_class_linux.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/s1ap_class_solarisx86.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="SOLARIS_SPARC"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/S1AP_v8.7.0_CNL113672</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>asn1code</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/gen.sh</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/s1ap_class_linux.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/s1ap_class_linux64bit.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/s1ap_class_solarisx86.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="LINUX"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/S1AP_v8.7.0_CNL113672</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>asn1code</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/gen.sh</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/s1ap_class.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/s1ap_class_linux64bit.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/s1ap_class_solarisx86.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="LINUX64"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/S1AP_v8.7.0_CNL113672</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>asn1code</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/gen.sh</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/s1ap_class.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/s1ap_class_linux.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/s1ap_class_solarisx86.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="SOLARIS_X86"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/S1AP_v8.7.0_CNL113672</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>asn1code</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/gen.sh</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/s1ap_class_linux.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/s1ap_class_linux64bit.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/S1AP_v9.4.0_CNL113717.tpd b/regression_test/XML/tpdValidTest/tpdTest/S1AP_v9.4.0_CNL113717.tpd new file mode 100644 index 000000000..2148085cb --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/S1AP_v9.4.0_CNL113717.tpd @@ -0,0 +1,246 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: S1AP_v9.4.0_CNL113717.tpd + Description: tpd project file + Rev: R1B01 + Prodnr: CNL 113 717 + Updated: 2012-10-19 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>S1AP_v9.4.0_CNL113717</ProjectName> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/S1AP_v9.4.0_CNL113717_FS.pdf" relativeURI="doc/S1AP_v9.4.0_CNL113717_FS.pdf"/> + <FileResource projectRelativePath="doc/S1AP_v9.4.0_CNL113717_PRI.pdf" relativeURI="doc/S1AP_v9.4.0_CNL113717_PRI.pdf"/> + <FileResource projectRelativePath="doc/S1AP_v9.4.0_CNL113717_UG.pdf" relativeURI="doc/S1AP_v9.4.0_CNL113717_UG.pdf"/> + <FileResource projectRelativePath="src/S1AP_CommonDataTypes.asn" relativeURI="src/S1AP_CommonDataTypes.asn"/> + <FileResource projectRelativePath="src/S1AP_Constants.asn" relativeURI="src/S1AP_Constants.asn"/> + <FileResource projectRelativePath="src/S1AP_Containers.asn" relativeURI="src/S1AP_Containers.asn"/> + <FileResource projectRelativePath="src/S1AP_EncDec.cc" relativeURI="src/S1AP_EncDec.cc"/> + <FileResource projectRelativePath="src/S1AP_IEs.asn" relativeURI="src/S1AP_IEs.asn"/> + <FileResource projectRelativePath="src/S1AP_PDU_Contents.asn" relativeURI="src/S1AP_PDU_Contents.asn"/> + <FileResource projectRelativePath="src/S1AP_PDU_Descriptions.asn" relativeURI="src/S1AP_PDU_Descriptions.asn"/> + <FileResource projectRelativePath="src/S1AP_Types.ttcn" relativeURI="src/S1AP_Types.ttcn"/> + <FileResource projectRelativePath="src/gen.sh" relativeURI="src/gen.sh"/> + <FileResource projectRelativePath="src/s1ap_class.c" relativeURI="src/s1ap_class.c"/> + <FileResource projectRelativePath="src/s1ap_class.h" relativeURI="src/s1ap_class.h"/> + <FileResource projectRelativePath="src/s1ap_class_linux.c" relativeURI="src/s1ap_class_linux.c"/> + <FileResource projectRelativePath="src/s1ap_class_linux64bit.c" relativeURI="src/s1ap_class_linux64bit.c"/> + </Files> + <ActiveConfiguration>LINUX64</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/S1AP_v9.4.0_CNL113717</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>osstoed</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/gen.sh</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/s1ap_class_linux.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/s1ap_class_linux64bit.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="SOLARIS_SPARC"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/S1AP_v9.4.0_CNL113717</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>osstoed</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/gen.sh</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/s1ap_class_linux.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/s1ap_class_linux64bit.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="LINUX"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/S1AP_v9.4.0_CNL113717</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>osstoed</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/gen.sh</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/s1ap_class.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/s1ap_class_linux64bit.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="LINUX64"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/S1AP_v9.4.0_CNL113717</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>osstoed</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/gen.sh</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/s1ap_class.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/s1ap_class_linux.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/S1AP_v9.7.0_CNL113732.tpd b/regression_test/XML/tpdValidTest/tpdTest/S1AP_v9.7.0_CNL113732.tpd new file mode 100644 index 000000000..e7697dfb7 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/S1AP_v9.7.0_CNL113732.tpd @@ -0,0 +1,222 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: S1AP_v9.7.0_CNL113732.tpd + Description: tpd project file + Rev: R2B01 + Prodnr: CNL 113 732 + Updated: 2012-10-19 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>S1AP_v9.7.0_CNL113732</ProjectName> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/S1AP_v9.7.0_CNL113732_FS.pdf" relativeURI="doc/S1AP_v9.7.0_CNL113732_FS.pdf"/> + <FileResource projectRelativePath="doc/S1AP_v9.7.0_CNL113732_PRI.pdf" relativeURI="doc/S1AP_v9.7.0_CNL113732_PRI.pdf"/> + <FileResource projectRelativePath="doc/S1AP_v9.7.0_CNL113732_UG.pdf" relativeURI="doc/S1AP_v9.7.0_CNL113732_UG.pdf"/> + <FileResource projectRelativePath="src/S1AP_CommonDataTypes.asn" relativeURI="src/S1AP_CommonDataTypes.asn"/> + <FileResource projectRelativePath="src/S1AP_Constants.asn" relativeURI="src/S1AP_Constants.asn"/> + <FileResource projectRelativePath="src/S1AP_Containers.asn" relativeURI="src/S1AP_Containers.asn"/> + <FileResource projectRelativePath="src/S1AP_EncDec.cc" relativeURI="src/S1AP_EncDec.cc"/> + <FileResource projectRelativePath="src/S1AP_IEs.asn" relativeURI="src/S1AP_IEs.asn"/> + <FileResource projectRelativePath="src/S1AP_PDU_Contents.asn" relativeURI="src/S1AP_PDU_Contents.asn"/> + <FileResource projectRelativePath="src/S1AP_PDU_Descriptions.asn" relativeURI="src/S1AP_PDU_Descriptions.asn"/> + <FileResource projectRelativePath="src/S1AP_Types.ttcn" relativeURI="src/S1AP_Types.ttcn"/> + <FileResource projectRelativePath="src/gen.sh" relativeURI="src/gen.sh"/> + <FileResource projectRelativePath="src/s1ap_class.c" relativeURI="src/s1ap_class.c"/> + <FileResource projectRelativePath="src/s1ap_class.h" relativeURI="src/s1ap_class.h"/> + <FileResource projectRelativePath="src/s1ap_class_linux.c" relativeURI="src/s1ap_class_linux.c"/> + <FileResource projectRelativePath="src/s1ap_class_linux64bit.c" relativeURI="src/s1ap_class_linux64bit.c"/> + </Files> + <ActiveConfiguration>LINUX64</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/S1AP_v9.7.0_CNL113732</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>osstoed</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/s1ap_class.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/s1ap_class_linux.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="LINUX"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/S1AP_v9.7.0_CNL113732</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>osstoed</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/s1ap_class.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/s1ap_class_linux64bit.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="SOLARIS_SPARC"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/S1AP_v9.7.0_CNL113732</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>osstoed</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/s1ap_class_linux.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/s1ap_class_linux64bit.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="LINUX64"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/S1AP_v9.7.0_CNL113732</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>osstoed</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/s1ap_class.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/s1ap_class_linux.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/SBC_AP_v10.0.0_CNL113734.tpd b/regression_test/XML/tpdValidTest/tpdTest/SBC_AP_v10.0.0_CNL113734.tpd new file mode 100644 index 000000000..30d9d4dff --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/SBC_AP_v10.0.0_CNL113734.tpd @@ -0,0 +1,238 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: SBC_AP_v10.0.0_CNL113734.tpd + Description: tpd project file + Rev: R1A01 + Prodnr: CNL 113 734 + Updated: 2011-12-12 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>SBC_AP_v10.0.0_CNL113734</ProjectName> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/SBC_AP_v10.0.0_CNL113734_FS.pdf" relativeURI="doc/SBC_AP_v10.0.0_CNL113734_FS.pdf"/> + <FileResource projectRelativePath="doc/SBC_AP_v10.0.0_CNL113734_PRI.pdf" relativeURI="doc/SBC_AP_v10.0.0_CNL113734_PRI.pdf"/> + <FileResource projectRelativePath="doc/SBC_AP_v10.0.0_CNL113734_UG.pdf" relativeURI="doc/SBC_AP_v10.0.0_CNL113734_UG.pdf"/> + <FileResource projectRelativePath="src/SBC_AP_CommonDataTypes.asn" relativeURI="src/SBC_AP_CommonDataTypes.asn"/> + <FileResource projectRelativePath="src/SBC_AP_Constants.asn" relativeURI="src/SBC_AP_Constants.asn"/> + <FileResource projectRelativePath="src/SBC_AP_Containers.asn" relativeURI="src/SBC_AP_Containers.asn"/> + <FileResource projectRelativePath="src/SBC_AP_EncDec.cc" relativeURI="src/SBC_AP_EncDec.cc"/> + <FileResource projectRelativePath="src/SBC_AP_IEs.asn" relativeURI="src/SBC_AP_IEs.asn"/> + <FileResource projectRelativePath="src/SBC_AP_PDU_Contents.asn" relativeURI="src/SBC_AP_PDU_Contents.asn"/> + <FileResource projectRelativePath="src/SBC_AP_PDU_Descriptions.asn" relativeURI="src/SBC_AP_PDU_Descriptions.asn"/> + <FileResource projectRelativePath="src/SBC_AP_Types.ttcn" relativeURI="src/SBC_AP_Types.ttcn"/> + <FileResource projectRelativePath="src/gen.sh" relativeURI="src/gen.sh"/> + <FileResource projectRelativePath="src/sbc_ap_class.c" relativeURI="src/sbc_ap_class.c"/> + <FileResource projectRelativePath="src/sbc_ap_class.h" relativeURI="src/sbc_ap_class.h"/> + <FileResource projectRelativePath="src/sbc_ap_class_linux.c" relativeURI="src/sbc_ap_class_linux.c"/> + <FileResource projectRelativePath="src/sbc_ap_class_linux64bit.c" relativeURI="src/sbc_ap_class_linux64bit.c"/> + </Files> + <ActiveConfiguration>LINUX64</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/SBC_AP_v10.0.0_CNL113734</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>osstoed</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <moduleParameter>tsp.*</moduleParameter> + </NamingCoventions> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/sbc_ap_class.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/sbc_ap_class_linux.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="LINUX"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/SBC_AP_v10.0.0_CNL113734</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>osstoed</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <moduleParameter>tsp.*</moduleParameter> + </NamingCoventions> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/sbc_ap_class.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/sbc_ap_class_linux64bit.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="SOLARIS_SPARC"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/SBC_AP_v10.0.0_CNL113734</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>osstoed</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <moduleParameter>tsp.*</moduleParameter> + </NamingCoventions> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/sbc_ap_class_linux.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/sbc_ap_class_linux64bit.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="LINUX64"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/SBC_AP_v10.0.0_CNL113734</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>osstoed</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <moduleParameter>tsp.*</moduleParameter> + </NamingCoventions> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/sbc_ap_class.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/sbc_ap_class_linux.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/SBC_AP_v9.3.0_CNL113731.tpd b/regression_test/XML/tpdValidTest/tpdTest/SBC_AP_v9.3.0_CNL113731.tpd new file mode 100644 index 000000000..726902c38 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/SBC_AP_v9.3.0_CNL113731.tpd @@ -0,0 +1,238 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: SBC_AP_v9.3.0_CNL113731.tpd + Description: tpd project file + Rev: R1A02 + Prodnr: CNL 113 731 + Updated: 2011-11-30 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>SBC_AP_v9.3.0_CNL113731</ProjectName> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/SBC_AP_v9.3.0_CNL113731_FS.pdf" relativeURI="doc/SBC_AP_v9.3.0_CNL113731_FS.pdf"/> + <FileResource projectRelativePath="doc/SBC_AP_v9.3.0_CNL113731_PRI.pdf" relativeURI="doc/SBC_AP_v9.3.0_CNL113731_PRI.pdf"/> + <FileResource projectRelativePath="doc/SBC_AP_v9.3.0_CNL113731_UG.pdf" relativeURI="doc/SBC_AP_v9.3.0_CNL113731_UG.pdf"/> + <FileResource projectRelativePath="src/SBC_AP_CommonDataTypes.asn" relativeURI="src/SBC_AP_CommonDataTypes.asn"/> + <FileResource projectRelativePath="src/SBC_AP_Constants.asn" relativeURI="src/SBC_AP_Constants.asn"/> + <FileResource projectRelativePath="src/SBC_AP_Containers.asn" relativeURI="src/SBC_AP_Containers.asn"/> + <FileResource projectRelativePath="src/SBC_AP_EncDec.cc" relativeURI="src/SBC_AP_EncDec.cc"/> + <FileResource projectRelativePath="src/SBC_AP_IEs.asn" relativeURI="src/SBC_AP_IEs.asn"/> + <FileResource projectRelativePath="src/SBC_AP_PDU_Contents.asn" relativeURI="src/SBC_AP_PDU_Contents.asn"/> + <FileResource projectRelativePath="src/SBC_AP_PDU_Descriptions.asn" relativeURI="src/SBC_AP_PDU_Descriptions.asn"/> + <FileResource projectRelativePath="src/SBC_AP_Types.ttcn" relativeURI="src/SBC_AP_Types.ttcn"/> + <FileResource projectRelativePath="src/gen.sh" relativeURI="src/gen.sh"/> + <FileResource projectRelativePath="src/sbc_ap_class.c" relativeURI="src/sbc_ap_class.c"/> + <FileResource projectRelativePath="src/sbc_ap_class.h" relativeURI="src/sbc_ap_class.h"/> + <FileResource projectRelativePath="src/sbc_ap_class_linux.c" relativeURI="src/sbc_ap_class_linux.c"/> + <FileResource projectRelativePath="src/sbc_ap_class_linux64bit.c" relativeURI="src/sbc_ap_class_linux64bit.c"/> + </Files> + <ActiveConfiguration>LINUX64</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/SBC_AP_v9.3.0_CNL113731</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>osstoed</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <moduleParameter>tsp.*</moduleParameter> + </NamingCoventions> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/sbc_ap_class.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/sbc_ap_class_linux.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="LINUX"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/SBC_AP_v9.3.0_CNL113731</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>osstoed</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <moduleParameter>tsp.*</moduleParameter> + </NamingCoventions> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/sbc_ap_class.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/sbc_ap_class_linux64bit.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="SOLARIS_SPARC"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/SBC_AP_v9.3.0_CNL113731</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>osstoed</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <moduleParameter>tsp.*</moduleParameter> + </NamingCoventions> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/sbc_ap_class_linux.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/sbc_ap_class_linux64bit.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="LINUX64"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/SBC_AP_v9.3.0_CNL113731</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>osstoed</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <moduleParameter>tsp.*</moduleParameter> + </NamingCoventions> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/sbc_ap_class.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/sbc_ap_class_linux.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/SCCP_CNL113341.tpd b/regression_test/XML/tpdValidTest/tpdTest/SCCP_CNL113341.tpd new file mode 100644 index 000000000..174280822 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/SCCP_CNL113341.tpd @@ -0,0 +1,87 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: SCCP_CNL113341.tpd + Description: tpd project file + Rev: R6A05 + Prodnr: CNL 113 341 + Updated: 2012-11-23 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>SCCP_CNL113341</ProjectName> + <ReferencedProjects> + <ReferencedProject name="MTP3asp_CNL113337" projectLocationURI="../../TestPorts/MTP3asp_CNL113337/MTP3asp_CNL113337.tpd"/> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../../ProtocolModules/COMMON/ProtocolModules_Common.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/SCCP_CNL113341_FS.pdf" relativeURI="doc/SCCP_CNL113341_FS.pdf"/> + <FileResource projectRelativePath="doc/SCCP_CNL113341_PRI.pdf" relativeURI="doc/SCCP_CNL113341_PRI.pdf"/> + <FileResource projectRelativePath="doc/SCCP_CNL113341_UG.pdf" relativeURI="doc/SCCP_CNL113341_UG.pdf"/> + <FileResource projectRelativePath="src/SCCP_Emulation.ttcn" relativeURI="src/SCCP_Emulation.ttcn"/> + <FileResource projectRelativePath="src/SCCP_EncDec.cc" relativeURI="src/SCCP_EncDec.cc"/> + <FileResource projectRelativePath="src/SCCP_Mapping.ttcnpp" relativeURI="src/SCCP_Mapping.ttcnpp"/> + <FileResource projectRelativePath="src/SCCP_Types.ttcn" relativeURI="src/SCCP_Types.ttcn"/> + <FileResource projectRelativePath="src/SCCPasp_Types.ttcn" relativeURI="src/SCCPasp_Types.ttcn"/> + </Files> + <ActiveConfiguration>USE_MTP3_DISTRIBUTOR</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/SCCP_CNL113341</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + <Configuration name="USE_MTP3_DISTRIBUTOR"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/SCCP_CNL113341</targetExecutable> + <TTCN3preprocessorDefines> + <listItem>USE_MTP3_DISTRIBUTOR</listItem> + </TTCN3preprocessorDefines> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + <Configuration name="NO USE_MTP3_DISTRIBUTOR"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/SCCP_CNL113341</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/SCCPasp_CNL113348.tpd b/regression_test/XML/tpdValidTest/tpdTest/SCCPasp_CNL113348.tpd new file mode 100644 index 000000000..2b1c2327f --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/SCCPasp_CNL113348.tpd @@ -0,0 +1,148 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: SCCPasp_CNL113348.tpd + Description: tpd project file + Rev: R11A02 + Prodnr: CNL 113 348 + Updated: 2012-09-07 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>SCCPasp_CNL113348</ProjectName> + <ReferencedProjects> + <ReferencedProject name="SS7Common_CNL113755" projectLocationURI="../Common_Components/SS7Common_CNL113755/SS7Common_CNL113755.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/SCCPasp_CNL113348_FS.pdf" relativeURI="doc/SCCPasp_CNL113348_FS.pdf"/> + <FileResource projectRelativePath="doc/SCCPasp_CNL113348_PRI.pdf" relativeURI="doc/SCCPasp_CNL113348_PRI.pdf"/> + <FileResource projectRelativePath="doc/SCCPasp_CNL113348_UG.pdf" relativeURI="doc/SCCPasp_CNL113348_UG.pdf"/> + <FileResource projectRelativePath="src/SCCPasp_PT.cc" relativeURI="src/SCCPasp_PT.cc"/> + <FileResource projectRelativePath="src/SCCPasp_PT.hh" relativeURI="src/SCCPasp_PT.hh"/> + <FileResource projectRelativePath="src/SCCPasp_PT_Daemon_Interface.cc" relativeURI="src/SCCPasp_PT_Daemon_Interface.cc"/> + <FileResource projectRelativePath="src/SCCPasp_PT_Daemon_Interface.hh" relativeURI="src/SCCPasp_PT_Daemon_Interface.hh"/> + <FileResource projectRelativePath="src/SCCPasp_PT_EIN_Interface.cc" relativeURI="src/SCCPasp_PT_EIN_Interface.cc"/> + <FileResource projectRelativePath="src/SCCPasp_PT_EIN_Interface.hh" relativeURI="src/SCCPasp_PT_EIN_Interface.hh"/> + <FileResource projectRelativePath="src/SCCPasp_PortType.ttcn" relativeURI="src/SCCPasp_PortType.ttcn"/> + <FileResource projectRelativePath="src/SCCPasp_Types.ttcn" relativeURI="src/SCCPasp_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/SCCPasp_CNL113348</targetExecutable> + <preprocessorDefines> + <listItem>EINSS7_THREADSAFE</listItem> + <listItem>SCCP_CAA901437_R12</listItem> + <listItem>CP_R12</listItem> + </preprocessorDefines> + <preprocessorIncludes> + <listItem>[SS7_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>einss7_n_r</listItem> + <listItem>pthread</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[SS7_DIR]/lib64</listItem> + </linkerLibrarySearchPath> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/SCCPasp_PT_Daemon_Interface.cc</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/SCCPasp_PT_Daemon_Interface.hh</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="Load"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/SCCPasp_CNL113348</targetExecutable> + <preprocessorDefines> + <listItem>EINSS7_THREADSAFE</listItem> + <listItem>SCCP_CAA901437_R12</listItem> + <listItem>CP_R12</listItem> + <listItem>SCCP_TP_FOR_LOAD</listItem> + </preprocessorDefines> + <preprocessorIncludes> + <listItem>[SS7_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>einss7_n_r</listItem> + <listItem>pthread</listItem> + <listItem>util</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[SS7_DIR]/lib64</listItem> + </linkerLibrarySearchPath> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/SCCPasp_PT_Daemon_Interface.cc</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/SCCPasp_PT_Daemon_Interface.hh</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/SCTP_Daemon_CNL113477.tpd b/regression_test/XML/tpdValidTest/tpdTest/SCTP_Daemon_CNL113477.tpd new file mode 100644 index 000000000..c6b43c50a --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/SCTP_Daemon_CNL113477.tpd @@ -0,0 +1,62 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: SCTP_Daemon_CNL113477.tpd + Description: tpd project file + Rev: R3A02 + Prodnr: CNL 113 477 + Updated: 2012-05-23 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>SCTP_Daemon_CNL113477</ProjectName> + <ReferencedProjects> + <ReferencedProject name="IPL4asp_CNL113531" projectLocationURI="../../TestPorts/IPL4asp_CNL113531/IPL4asp_CNL113531.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/SCTP_Daemon_CNL113477_FS.pdf" relativeURI="doc/SCTP_Daemon_CNL113477_FS.pdf"/> + <FileResource projectRelativePath="doc/SCTP_Daemon_CNL113477_PRI.pdf" relativeURI="doc/SCTP_Daemon_CNL113477_PRI.pdf"/> + <FileResource projectRelativePath="doc/SCTP_Daemon_CNL113477_UG.pdf" relativeURI="doc/SCTP_Daemon_CNL113477_UG.pdf"/> + <FileResource projectRelativePath="src/SCTP_Daemon.ttcn" relativeURI="src/SCTP_Daemon.ttcn"/> + <FileResource projectRelativePath="src/SCTP_Daemon_CTRL_EncDec.cc" relativeURI="src/SCTP_Daemon_CTRL_EncDec.cc"/> + <FileResource projectRelativePath="src/SCTP_Daemon_Ctrl_Types.ttcn" relativeURI="src/SCTP_Daemon_Ctrl_Types.ttcn"/> + <FileResource projectRelativePath="src/SCTP_Daemon_Externals.cc" relativeURI="src/SCTP_Daemon_Externals.cc"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/SCTP_Daemon_CNL113477</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/SCTP_Daemon_Dynamic_CNL113630.tpd b/regression_test/XML/tpdValidTest/tpdTest/SCTP_Daemon_Dynamic_CNL113630.tpd new file mode 100644 index 000000000..ebac25ca9 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/SCTP_Daemon_Dynamic_CNL113630.tpd @@ -0,0 +1,65 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: SCTP_Daemon_Dynamic_CNL113630.tpd + Description: tpd project file + Rev: R1A05 + Prodnr: CNL 113 630 + Updated: 2012-01-24 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>SCTP_Daemon_Dynamic_CNL113630</ProjectName> + <ReferencedProjects> + <ReferencedProject name="IPL4asp_CNL113531" projectLocationURI="../../TestPorts/IPL4asp_CNL113531/IPL4asp_CNL113531.tpd"/> + <ReferencedProject name="TCCUsefulFunctions_CNL113472_Common" projectLocationURI="../../Libraries/TCCUsefulFunctions_CNL113472/TCCUsefulFunctions_CNL113472_Common.tpd"/> + <ReferencedProject name="TCCUsefulFunctions_CNL113472_Interface" projectLocationURI="../../Libraries/TCCUsefulFunctions_CNL113472/TCCUsefulFunctions_CNL113472_Interface.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/SCTP_Daemon_Dynamic_CNL113630_FS.pdf" relativeURI="doc/SCTP_Daemon_Dynamic_CNL113630_FS.pdf"/> + <FileResource projectRelativePath="doc/SCTP_Daemon_Dynamic_CNL113630_PRI.pdf" relativeURI="doc/SCTP_Daemon_Dynamic_CNL113630_PRI.pdf"/> + <FileResource projectRelativePath="doc/SCTP_Daemon_Dynamic_CNL113630_UG.pdf" relativeURI="doc/SCTP_Daemon_Dynamic_CNL113630_UG.pdf"/> + <FileResource projectRelativePath="src/SCTP_Daemon_Dynamic.ttcn" relativeURI="src/SCTP_Daemon_Dynamic.ttcn"/> + <FileResource projectRelativePath="src/SCTP_Daemon_Dynamic_IPL4_CtrlFuncDef.cc" relativeURI="src/SCTP_Daemon_Dynamic_IPL4_CtrlFuncDef.cc"/> + <FileResource projectRelativePath="src/SCTP_Daemon_Dynamic_IPL4_CtrlFunct.ttcn" relativeURI="src/SCTP_Daemon_Dynamic_IPL4_CtrlFunct.ttcn"/> + <FileResource projectRelativePath="src/SCTP_Daemon_Dynamic_Interface_Definitions.ttcn" relativeURI="src/SCTP_Daemon_Dynamic_Interface_Definitions.ttcn"/> + <FileResource projectRelativePath="src/SCTP_Daemon_Dynamic_Types.ttcn" relativeURI="src/SCTP_Daemon_Dynamic_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/SCTP_Daemon_Dynamic_CNL113630</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/SCTPasp_CNL113469.tpd b/regression_test/XML/tpdValidTest/tpdTest/SCTPasp_CNL113469.tpd new file mode 100644 index 000000000..e634e94e1 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/SCTPasp_CNL113469.tpd @@ -0,0 +1,98 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: SCTPasp_CNL113469.tpd + Description: tpd project file + Rev: R9A02 + Prodnr: CNL 113 469 + Updated: 2013-01-23 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>SCTPasp_CNL113469</ProjectName> + <Folders> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="src/SCTPasp_PT.cc" relativeURI="src/SCTPasp_PT.cc"/> + <FileResource projectRelativePath="src/SCTPasp_PT.hh" relativeURI="src/SCTPasp_PT.hh"/> + <FileResource projectRelativePath="src/SCTPasp_PortType.ttcn" relativeURI="src/SCTPasp_PortType.ttcn"/> + <FileResource projectRelativePath="src/SCTPasp_Types.ttcn" relativeURI="src/SCTPasp_Types.ttcn"/> + </Files> + <ActiveConfiguration>LKSCTP_1_0_7</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/SCTPasp_CNL113469</targetExecutable> + <preprocessorDefines> + <listItem>LKSCTP_1_0_7</listItem> + </preprocessorDefines> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + <Configuration name="LKSCTP_1_0_7"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/SCTPasp_CNL113469</targetExecutable> + <preprocessorDefines> + <listItem>LKSCTP_1_0_7</listItem> + </preprocessorDefines> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + <Configuration name="NO LKSCTP_1_0_7"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/SCTPasp_CNL113469</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + <Configuration name="LKSCTP_1_0_9"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/SCTPasp_CNL113469</targetExecutable> + <preprocessorDefines> + <listItem>LKSCTP_1_0_9</listItem> + </preprocessorDefines> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/SDP_CNL113353.tpd b/regression_test/XML/tpdValidTest/tpdTest/SDP_CNL113353.tpd new file mode 100644 index 000000000..925b785fe --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/SDP_CNL113353.tpd @@ -0,0 +1,81 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: SDP_CNL113353.tpd + Description: tpd project file + Rev: R9B01 + Prodnr: CNL 113 353 + Updated: 2013-01-22 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>SDP_CNL113353</ProjectName> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/SDP_CNL113353_FS.pdf" relativeURI="doc/SDP_CNL113353_FS.pdf"/> + <FileResource projectRelativePath="doc/SDP_CNL113353_PRI.pdf" relativeURI="doc/SDP_CNL113353_PRI.pdf"/> + <FileResource projectRelativePath="doc/SDP_CNL113353_UG.pdf" relativeURI="doc/SDP_CNL113353_UG.pdf"/> + <FileResource projectRelativePath="src/SDP_EncDec.cc" relativeURI="src/SDP_EncDec.cc"/> + <FileResource projectRelativePath="src/SDP_Types.ttcn" relativeURI="src/SDP_Types.ttcn"/> + <FileResource projectRelativePath="src/SDP_parse_.tab.c" relativeURI="src/SDP_parse_.tab.c"/> + <FileResource projectRelativePath="src/SDP_parse_.tab.h" relativeURI="src/SDP_parse_.tab.h"/> + <FileResource projectRelativePath="src/SDP_parse_parser.h" relativeURI="src/SDP_parse_parser.h"/> + <FileResource projectRelativePath="src/SDP_parser.l" relativeURI="src/SDP_parser.l"/> + <FileResource projectRelativePath="src/SDP_parser.y" relativeURI="src/SDP_parser.y"/> + <FileResource projectRelativePath="src/lex.SDP_parse_.c" relativeURI="src/lex.SDP_parse_.c"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/SDP_CNL113353</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <externalFunction>f_.*</externalFunction> + <formalParameter>.*</formalParameter> + </NamingCoventions> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/SDP_parser.l</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/SDP_parser.y</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/SGsAP_v9.0.0_CNL113684.tpd b/regression_test/XML/tpdValidTest/tpdTest/SGsAP_v9.0.0_CNL113684.tpd new file mode 100644 index 000000000..8e62d60fa --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/SGsAP_v9.0.0_CNL113684.tpd @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: SGsAP_v9.0.0_CNL113684.tpd + Description: tpd project file + Rev: R2A01 + Prodnr: CNL 113 684 + Updated: 2012-03-27 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>SGsAP_v9.0.0_CNL113684</ProjectName> + <ReferencedProjects> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/SGsAP_v9.0.0_CNL113684_FS.pdf" relativeURI="doc/SGsAP_v9.0.0_CNL113684_FS.pdf"/> + <FileResource projectRelativePath="doc/SGsAP_v9.0.0_CNL113684_PRI.pdf" relativeURI="doc/SGsAP_v9.0.0_CNL113684_PRI.pdf"/> + <FileResource projectRelativePath="doc/SGsAP_v9.0.0_CNL113684_UG.pdf" relativeURI="doc/SGsAP_v9.0.0_CNL113684_UG.pdf"/> + <FileResource projectRelativePath="src/SGsAP_Types.ttcn" relativeURI="src/SGsAP_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/SGsAP_v9.0.0_CNL113684</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/SIPmsg_CNL113319.tpd b/regression_test/XML/tpdValidTest/tpdTest/SIPmsg_CNL113319.tpd new file mode 100644 index 000000000..55947d3bb --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/SIPmsg_CNL113319.tpd @@ -0,0 +1,85 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: SIPmsg_CNL113319.tpd + Description: tpd project file + Rev: R12A + Prodnr: CNL 113 319 + Updated: 2013-04-10 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>SIPmsg_CNL113319</ProjectName> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/SIPmsg_CNL113319_FS.pdf" relativeURI="doc/SIPmsg_CNL113319_FS.pdf"/> + <FileResource projectRelativePath="doc/SIPmsg_CNL113319_PRI.pdf" relativeURI="doc/SIPmsg_CNL113319_PRI.pdf"/> + <FileResource projectRelativePath="doc/SIPmsg_CNL113319_UG.pdf" relativeURI="doc/SIPmsg_CNL113319_UG.pdf"/> + <FileResource projectRelativePath="src/SIP_parse.h" relativeURI="src/SIP_parse.h"/> + <FileResource projectRelativePath="src/SIP_parse.l" relativeURI="src/SIP_parse.l"/> + <FileResource projectRelativePath="src/SIP_parse.y" relativeURI="src/SIP_parse.y"/> + <FileResource projectRelativePath="src/SIP_parse_.tab.c" relativeURI="src/SIP_parse_.tab.c"/> + <FileResource projectRelativePath="src/SIP_parse_.tab.h" relativeURI="src/SIP_parse_.tab.h"/> + <FileResource projectRelativePath="src/SIPmsg_PT.cc" relativeURI="src/SIPmsg_PT.cc"/> + <FileResource projectRelativePath="src/SIPmsg_PT.hh" relativeURI="src/SIPmsg_PT.hh"/> + <FileResource projectRelativePath="src/SIPmsg_PortType.ttcn" relativeURI="src/SIPmsg_PortType.ttcn"/> + <FileResource projectRelativePath="src/SIPmsg_Types.ttcn" relativeURI="src/SIPmsg_Types.ttcn"/> + <FileResource projectRelativePath="src/lex.SIP_parse_.c" relativeURI="src/lex.SIP_parse_.c"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/SIPmsg_CNL113319</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <globalConstant>c[g]?_.*</globalConstant> + <externalFunction>[e]?f_.*</externalFunction> + <moduleParameter>.*</moduleParameter> + <formalParameter>.*</formalParameter> + </NamingCoventions> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/SIP_parse.l</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/SIP_parse.y</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/SNMP_CNL113774.tpd b/regression_test/XML/tpdValidTest/tpdTest/SNMP_CNL113774.tpd new file mode 100644 index 000000000..8e7cd5f24 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/SNMP_CNL113774.tpd @@ -0,0 +1,71 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: SNMP_CNL113774.tpd + Description: tpd project file + Rev: R1A + Prodnr: CNL 113 774 + Updated: 2013-03-29 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>SNMP_CNL113774</ProjectName> + <Folders> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="src/SNMP.grp" relativeURI="src/SNMP.grp"/> + <FileResource projectRelativePath="src/SNMP_Functions.ttcn" relativeURI="src/SNMP_Functions.ttcn"/> + <FileResource projectRelativePath="src/SNMP_Oi.cc" relativeURI="src/SNMP_Oi.cc"/> + <FileResource projectRelativePath="src/SNMP_USM.cc" relativeURI="src/SNMP_USM.cc"/> + <FileResource projectRelativePath="src/SNMPmsg_Types.asn" relativeURI="src/SNMPmsg_Types.asn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/SNMP_CNL113774</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <altstep>.*</altstep> + <globalConstant>.*</globalConstant> + <externalConstant>.*</externalConstant> + <function>.*</function> + <externalFunction>.*</externalFunction> + <moduleParameter>.*</moduleParameter> + <globalPort>.*</globalPort> + <globalTemplate>.*</globalTemplate> + <testcase>.*</testcase> + <globalTimer>.*</globalTimer> + <group>.*</group> + <localConstant>.*</localConstant> + <localVariable>.*</localVariable> + <localTemplate>.*</localTemplate> + <localVariableTemplate>.*</localVariableTemplate> + <localTimer>.*</localTimer> + <formalParameter>.*</formalParameter> + <componentConstant>.*</componentConstant> + <componentVariable>.*</componentVariable> + <componentTimer>.*</componentTimer> + </NamingCoventions> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/SNMPmsg_CNL113344.tpd b/regression_test/XML/tpdValidTest/tpdTest/SNMPmsg_CNL113344.tpd new file mode 100644 index 000000000..c18959a34 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/SNMPmsg_CNL113344.tpd @@ -0,0 +1,63 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: SNMPmsg_CNL113344.tpd + Description: tpd project file + Rev: R4B01 + Prodnr: CNL 113 344 + Updated: 2012-06-05 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>SNMPmsg_CNL113344</ProjectName> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/SNMPmsg_CNL113344_FS.pdf" relativeURI="doc/SNMPmsg_CNL113344_FS.pdf"/> + <FileResource projectRelativePath="doc/SNMPmsg_CNL113344_PRI.pdf" relativeURI="doc/SNMPmsg_CNL113344_PRI.pdf"/> + <FileResource projectRelativePath="doc/SNMPmsg_CNL113344_UG.pdf" relativeURI="doc/SNMPmsg_CNL113344_UG.pdf"/> + <FileResource projectRelativePath="src/SNMP_Oi.cc" relativeURI="src/SNMP_Oi.cc"/> + <FileResource projectRelativePath="src/SNMP_Oi_Functions.ttcn" relativeURI="src/SNMP_Oi_Functions.ttcn"/> + <FileResource projectRelativePath="src/SNMP_USM.cc" relativeURI="src/SNMP_USM.cc"/> + <FileResource projectRelativePath="src/SNMP_USM_Functions.ttcn" relativeURI="src/SNMP_USM_Functions.ttcn"/> + <FileResource projectRelativePath="src/SNMPmsg_PT.cc" relativeURI="src/SNMPmsg_PT.cc"/> + <FileResource projectRelativePath="src/SNMPmsg_PT.hh" relativeURI="src/SNMPmsg_PT.hh"/> + <FileResource projectRelativePath="src/SNMPmsg_PortType.ttcn" relativeURI="src/SNMPmsg_PortType.ttcn"/> + <FileResource projectRelativePath="src/SNMPmsg_Types.asn" relativeURI="src/SNMPmsg_Types.asn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/SNMPmsg_CNL113344</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/SQLasp_CNL113760.tpd b/regression_test/XML/tpdValidTest/tpdTest/SQLasp_CNL113760.tpd new file mode 100644 index 000000000..8960b52f5 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/SQLasp_CNL113760.tpd @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: SQLasp_CNL113760.tpd + Description: tpd project file + Rev: R1A + Prodnr: CNL 113 760 + Updated: 2013-03-26 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>SQLasp_CNL113760</ProjectName> + <Folders> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="src/SQL_MySQL_interface.cc" relativeURI="src/SQL_MySQL_interface.cc"/> + <FileResource projectRelativePath="src/SQL_PortTypes.ttcn" relativeURI="src/SQL_PortTypes.ttcn"/> + <FileResource projectRelativePath="src/SQL_SQLite_interface.cc" relativeURI="src/SQL_SQLite_interface.cc"/> + <FileResource projectRelativePath="src/SQL_interface.hh" relativeURI="src/SQL_interface.hh"/> + <FileResource projectRelativePath="src/SQLasp_PT.cc" relativeURI="src/SQLasp_PT.cc"/> + <FileResource projectRelativePath="src/SQLasp_PT.hh" relativeURI="src/SQLasp_PT.hh"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/SQLasp_CNL113760</targetExecutable> + <linkerLibraries> + <listItem>mysqlclient</listItem> + <listItem>z</listItem> + <listItem>sqlite3</listItem> + </linkerLibraries> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/SRTP_CNL113769.tpd b/regression_test/XML/tpdValidTest/tpdTest/SRTP_CNL113769.tpd new file mode 100644 index 000000000..bdbf36626 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/SRTP_CNL113769.tpd @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: SRTP_CNL113769.tpd + Description: tpd project file + Rev: R1A + Prodnr: CNL 113 769 + Updated: 2013-04-08 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>SRTP_CNL113769</ProjectName> + <ReferencedProjects> + <ReferencedProject name="RTP_CNL113392" projectLocationURI="../RTP_CNL113392/RTP_CNL113392.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <useAbsolutePath>true</useAbsolutePath> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <singleMode>true</singleMode> + <targetExecutable>bin/SRTP_CNL113769</targetExecutable> + <preprocessorDefines> + <listItem>SRTP_LITTLE_ENDIAN</listItem> + </preprocessorDefines> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <globalConstant>.*</globalConstant> + </NamingCoventions> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/SS7Common_CNL113755.tpd b/regression_test/XML/tpdValidTest/tpdTest/SS7Common_CNL113755.tpd new file mode 100644 index 000000000..a70f80833 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/SS7Common_CNL113755.tpd @@ -0,0 +1,66 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: SS7Common_CNL113755.tpd + Description: tpd project file + Rev: R1A01 + Prodnr: CNL 113 755 + Updated: 2012-09-04 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>SS7Common_CNL113755</ProjectName> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/SS7Common_CNL113755_FS.pdf" relativeURI="doc/SS7Common_CNL113755_FS.pdf"/> + <FileResource projectRelativePath="doc/SS7Common_CNL113755_PRI.pdf" relativeURI="doc/SS7Common_CNL113755_PRI.pdf"/> + <FileResource projectRelativePath="doc/SS7Common_CNL113755_UG.pdf" relativeURI="doc/SS7Common_CNL113755_UG.pdf"/> + <FileResource projectRelativePath="src/SS7Common.cc" relativeURI="src/SS7Common.cc"/> + <FileResource projectRelativePath="src/SS7Common.hh" relativeURI="src/SS7Common.hh"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/SS7Common_CNL113755</targetExecutable> + <preprocessorIncludes> + <listItem>[SS7_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>einss7_n_r</listItem> + <listItem>pthread</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[SS7_DIR]/lib64</listItem> + </linkerLibrarySearchPath> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/SSHCLIENTasp_CNL113484.tpd b/regression_test/XML/tpdValidTest/tpdTest/SSHCLIENTasp_CNL113484.tpd new file mode 100644 index 000000000..02a995517 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/SSHCLIENTasp_CNL113484.tpd @@ -0,0 +1,61 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: SSHCLIENTasp_CNL113484.tpd + Description: tpd project file + Rev: R3D01 + Prodnr: CNL 113 484 + Updated: 2012-11-13 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>SSHCLIENTasp_CNL113484</ProjectName> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/SSHCLIENTasp_CNL113484_FS.pdf" relativeURI="doc/SSHCLIENTasp_CNL113484_FS.pdf"/> + <FileResource projectRelativePath="doc/SSHCLIENTasp_CNL113484_PRI.pdf" relativeURI="doc/SSHCLIENTasp_CNL113484_PRI.pdf"/> + <FileResource projectRelativePath="doc/SSHCLIENTasp_CNL113484_UG.pdf" relativeURI="doc/SSHCLIENTasp_CNL113484_UG.pdf"/> + <FileResource projectRelativePath="src/SSHCLIENTasp_PT.cc" relativeURI="src/SSHCLIENTasp_PT.cc"/> + <FileResource projectRelativePath="src/SSHCLIENTasp_PT.hh" relativeURI="src/SSHCLIENTasp_PT.hh"/> + <FileResource projectRelativePath="src/SSHCLIENTasp_PortType.ttcn" relativeURI="src/SSHCLIENTasp_PortType.ttcn"/> + <FileResource projectRelativePath="src/SSHCLIENTasp_Types.ttcn" relativeURI="src/SSHCLIENTasp_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/SSHCLIENTasp_CNL113484</targetExecutable> + <linkerLibraries> + <listItem>util</listItem> + </linkerLibraries> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/STDINOUTmsg_CNL113642.tpd b/regression_test/XML/tpdValidTest/tpdTest/STDINOUTmsg_CNL113642.tpd new file mode 100644 index 000000000..0b5071d07 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/STDINOUTmsg_CNL113642.tpd @@ -0,0 +1,50 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: STDINOUTmsg_CNL113642.tpd + Description: tpd project file + Rev: R2A01 + Prodnr: CNL 113 642 + Updated: 2012-10-31 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>STDINOUTmsg_CNL113642</ProjectName> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/STDINOUTmsg_CNL113642_FS.pdf" relativeURI="doc/STDINOUTmsg_CNL113642_FS.pdf"/> + <FileResource projectRelativePath="doc/STDINOUTmsg_CNL113642_PRI.pdf" relativeURI="doc/STDINOUTmsg_CNL113642_PRI.pdf"/> + <FileResource projectRelativePath="doc/STDINOUTmsg_CNL113642_UG.pdf" relativeURI="doc/STDINOUTmsg_CNL113642_UG.pdf"/> + <FileResource projectRelativePath="src/STDINOUTmsg_PT.cc" relativeURI="src/STDINOUTmsg_PT.cc"/> + <FileResource projectRelativePath="src/STDINOUTmsg_PT.hh" relativeURI="src/STDINOUTmsg_PT.hh"/> + <FileResource projectRelativePath="src/STDINOUTmsg_PortType.ttcn" relativeURI="src/STDINOUTmsg_PortType.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/STDINOUTmsg_CNL113642</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/STUN_CNL113644.tpd b/regression_test/XML/tpdValidTest/tpdTest/STUN_CNL113644.tpd new file mode 100644 index 000000000..b9fba2728 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/STUN_CNL113644.tpd @@ -0,0 +1,46 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: STUN_CNL113644.tpd + Description: tpd project file + Rev: R2A01 + Prodnr: CNL 113 644 + Updated: 2012-03-06 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>STUN_CNL113644</ProjectName> + <ReferencedProjects> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="src" relativeURI="src"/> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + </Folders> + <Files> + <FileResource projectRelativePath="src/STUN_EncDec.cc" relativeURI="src/STUN_EncDec.cc"/> + <FileResource projectRelativePath="src/STUN_Functions.ttcn" relativeURI="src/STUN_Functions.ttcn"/> + <FileResource projectRelativePath="src/STUN_Types.ttcn" relativeURI="src/STUN_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <targetExecutable>bin/STUN_CNL113644</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/SUA_CNL113478.tpd b/regression_test/XML/tpdValidTest/tpdTest/SUA_CNL113478.tpd new file mode 100644 index 000000000..dca408024 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/SUA_CNL113478.tpd @@ -0,0 +1,60 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: SUA_CNL113478.tpd + Description: tpd project file + Rev: R4A01 + Prodnr: CNL 113 478 + Updated: 2012-05-02 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>SUA_CNL113478</ProjectName> + <ReferencedProjects> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/SUA_CNL113478_FS.pdf" relativeURI="doc/SUA_CNL113478_FS.pdf"/> + <FileResource projectRelativePath="doc/SUA_CNL113478_PRI.pdf" relativeURI="doc/SUA_CNL113478_PRI.pdf"/> + <FileResource projectRelativePath="doc/SUA_CNL113478_UG.pdf" relativeURI="doc/SUA_CNL113478_UG.pdf"/> + <FileResource projectRelativePath="src/SUA_EncDec.cc" relativeURI="src/SUA_EncDec.cc"/> + <FileResource projectRelativePath="src/SUA_Types.ttcn" relativeURI="src/SUA_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/SUA_CNL113478</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/SUA_Daemon_CNL113743.tpd b/regression_test/XML/tpdValidTest/tpdTest/SUA_Daemon_CNL113743.tpd new file mode 100644 index 000000000..8d2ddab32 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/SUA_Daemon_CNL113743.tpd @@ -0,0 +1,63 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: SUA_Daemon_CNL113743.tpd + Description: tpd project file + Rev: R1A01 + Prodnr: CNL 113 743 + Updated: 2012-05-30 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>SUA_Daemon_CNL113743</ProjectName> + <ReferencedProjects> + <ReferencedProject name="EPTF_CLL_HashMap" projectLocationURI="../../Libraries/EPTF_Core_Library_CNL113512/src/HashMap/EPTF_CLL_HashMap.tpd"/> + <ReferencedProject name="IPL4asp_CNL113531" projectLocationURI="../../TestPorts/IPL4asp_CNL113531/IPL4asp_CNL113531.tpd"/> + <ReferencedProject name="SUAasp_CNL113516" projectLocationURI="../../TestPorts/SUAasp_CNL113516/SUAasp_CNL113516.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/SUA_Daemon_CNL113743_FS.pdf" relativeURI="doc/SUA_Daemon_CNL113743_FS.pdf"/> + <FileResource projectRelativePath="doc/SUA_Daemon_CNL113743_PRI.pdf" relativeURI="doc/SUA_Daemon_CNL113743_PRI.pdf"/> + <FileResource projectRelativePath="doc/SUA_Daemon_CNL113743_UG.pdf" relativeURI="doc/SUA_Daemon_CNL113743_UG.pdf"/> + <FileResource projectRelativePath="src/SUA_Daemon.ttcn" relativeURI="src/SUA_Daemon.ttcn"/> + <FileResource projectRelativePath="src/SUA_Daemon_Templates.ttcn" relativeURI="src/SUA_Daemon_Templates.ttcn"/> + <FileResource projectRelativePath="src/SUA_Daemon_Types.ttcn" relativeURI="src/SUA_Daemon_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/SUA_Daemon_CNL113743</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/SUAasp_CNL113516.tpd b/regression_test/XML/tpdValidTest/tpdTest/SUAasp_CNL113516.tpd new file mode 100644 index 000000000..53c21d32c --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/SUAasp_CNL113516.tpd @@ -0,0 +1,67 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: SUAasp_CNL113516.tpd + Description: tpd project file + Rev: R6A01 + Prodnr: CNL 113 516 + Updated: 2012-05-02 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>SUAasp_CNL113516</ProjectName> + <ReferencedProjects> + <ReferencedProject name="Abstract_Socket_CNL113384" projectLocationURI="../Common_Components/Abstract_Socket_CNL113384/Abstract_Socket_CNL113384.tpd"/> + <ReferencedProject name="SUA_CNL113478" projectLocationURI="../../ProtocolModules/SUA_CNL113478/SUA_CNL113478.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/SUAasp_CNL113516_FS.pdf" relativeURI="doc/SUAasp_CNL113516_FS.pdf"/> + <FileResource projectRelativePath="doc/SUAasp_CNL113516_PRI.pdf" relativeURI="doc/SUAasp_CNL113516_PRI.pdf"/> + <FileResource projectRelativePath="doc/SUAasp_CNL113516_UG.pdf" relativeURI="doc/SUAasp_CNL113516_UG.pdf"/> + <FileResource projectRelativePath="src/SUAasp_EncDec.cc" relativeURI="src/SUAasp_EncDec.cc"/> + <FileResource projectRelativePath="src/SUAasp_PT.cc" relativeURI="src/SUAasp_PT.cc"/> + <FileResource projectRelativePath="src/SUAasp_PT.hh" relativeURI="src/SUAasp_PT.hh"/> + <FileResource projectRelativePath="src/SUAasp_PortType.ttcn" relativeURI="src/SUAasp_PortType.ttcn"/> + <FileResource projectRelativePath="src/SUAasp_Types.ttcn" relativeURI="src/SUAasp_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/SUAasp_CNL113516</targetExecutable> + <preprocessorDefines> + <listItem>TARGET_TEST</listItem> + </preprocessorDefines> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/SUNRPCasp_CNL113493.tpd b/regression_test/XML/tpdValidTest/tpdTest/SUNRPCasp_CNL113493.tpd new file mode 100644 index 000000000..e0ab925a0 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/SUNRPCasp_CNL113493.tpd @@ -0,0 +1,47 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: SUNRPCasp_CNL113493.tpd + Description: tpd project file + Rev: R4B01 + Prodnr: CNL 113 493 + Updated: 2012-09-17 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>SUNRPCasp_CNL113493</ProjectName> + <ReferencedProjects> + <ReferencedProject name="Abstract_Socket_CNL113384" projectLocationURI="../Common_Components/Abstract_Socket_CNL113384/Abstract_Socket_CNL113384.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="SunRPCasp_PT.cc" relativeURI="src/SunRPCasp_PT.cc"/> + <FileResource projectRelativePath="SunRPCasp_PT.hh" relativeURI="src/SunRPCasp_PT.hh"/> + <FileResource projectRelativePath="SunRPCasp_PortType.ttcn" relativeURI="src/SunRPCasp_PortType.ttcn"/> + <FileResource projectRelativePath="SunRPCasp_Types.ttcn" relativeURI="src/SunRPCasp_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/SUNRPCasp_CNL113493</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/Socket_API_CNL113686.tpd b/regression_test/XML/tpdValidTest/tpdTest/Socket_API_CNL113686.tpd new file mode 100644 index 000000000..4468eb41a --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/Socket_API_CNL113686.tpd @@ -0,0 +1,58 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: Socket_API_CNL113686.tpd + Description: tpd project file + Rev: R3A01 + Prodnr: CNL 113 686 + Updated: 2012-09-20 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>Socket_API_CNL113686</ProjectName> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + </Folders> + <Files> + <FileResource projectRelativePath="Socket_API_Definitions.ttcn" relativeURI="src/Socket_API_Definitions.ttcn"/> + <FileResource projectRelativePath="doc/Socket_API_CNL113686_FS.pdf" relativeURI="doc/Socket_API_CNL113686_FS.pdf"/> + <FileResource projectRelativePath="doc/Socket_API_CNL113686_PRI.pdf" relativeURI="doc/Socket_API_CNL113686_PRI.pdf"/> + <FileResource projectRelativePath="doc/Socket_API_CNL113686_UG.pdf" relativeURI="doc/Socket_API_CNL113686_UG.pdf"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <GNUMake>true</GNUMake> + <targetExecutable>bin/Socket_API_CNL113686</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <globalConstant>c[g]?_.*</globalConstant> + <formalParameter>.*</formalParameter> + </NamingCoventions> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/SubscriptionHistoryProtocol_1.0_CNL113584.tpd b/regression_test/XML/tpdValidTest/tpdTest/SubscriptionHistoryProtocol_1.0_CNL113584.tpd new file mode 100644 index 000000000..8a4fe6790 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/SubscriptionHistoryProtocol_1.0_CNL113584.tpd @@ -0,0 +1,460 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: SubscriptionHistoryProtocol_1.0_CNL113584.tpd + Description: tpd project file + Rev: R1B01 + Prodnr: CNL 113 584 + Updated: 2012-05-30 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>SubscriptionHistoryProtocol_1.0_CNL113584</ProjectName> + <ReferencedProjects> + <ReferencedProject name="XSDASN_CNL113474" projectLocationURI="../XSDASN_CNL113474/XSDASN_CNL113474.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/SubscriptionHistoryProtocol_1.0_CNL113584_FS.pdf" relativeURI="doc/SubscriptionHistoryProtocol_1.0_CNL113584_FS.pdf"/> + <FileResource projectRelativePath="doc/SubscriptionHistoryProtocol_1.0_CNL113584_PRI.pdf" relativeURI="doc/SubscriptionHistoryProtocol_1.0_CNL113584_PRI.pdf"/> + <FileResource projectRelativePath="doc/SubscriptionHistoryProtocol_1.0_CNL113584_UG.pdf" relativeURI="doc/SubscriptionHistoryProtocol_1.0_CNL113584_UG.pdf"/> + <FileResource projectRelativePath="src/SHPFunctions.ttcn" relativeURI="src/SHPFunctions.ttcn"/> + <FileResource projectRelativePath="src/SHP_EncDec.cc" relativeURI="src/SHP_EncDec.cc"/> + <FileResource projectRelativePath="src/SHP_linux.c" relativeURI="src/SHP_linux.c"/> + <FileResource projectRelativePath="src/SHP_linux64bit.c" relativeURI="src/SHP_linux64bit.c"/> + <FileResource projectRelativePath="src/SHP_oss.c" relativeURI="src/SHP_oss.c"/> + <FileResource projectRelativePath="src/SHP_oss.h" relativeURI="src/SHP_oss.h"/> + <FileResource projectRelativePath="src/SHP_solarisx86.c" relativeURI="src/SHP_solarisx86.c"/> + <FileResource projectRelativePath="src/SubscriptionHistoryProtocol.asn" relativeURI="src/SubscriptionHistoryProtocol.asn"/> + <FileResource projectRelativePath="src/SubscriptionHistoryProtocol_oss.asn" relativeURI="src/SubscriptionHistoryProtocol_oss.asn"/> + <FileResource projectRelativePath="src/gen.sh" relativeURI="src/gen.sh"/> + </Files> + <ActiveConfiguration>SOLARIS64</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/SubscriptionHistoryProtocol_1.0_CNL113584</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>osstoed</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <ConfigurationRequirements> + <configurationRequirement> + <projectName>XSDASN_CNL113474</projectName> + <rerquiredConfiguration>XSD</rerquiredConfiguration> + </configurationRequirement> + </ConfigurationRequirements> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/SHP_linux.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/SHP_oss.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/SHP_solarisx86.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/SubscriptionHistoryProtocol_oss.asn</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/gen.sh</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="LINUX64"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/SubscriptionHistoryProtocol_1.0_CNL113584</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>osstoed</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <ConfigurationRequirements> + <configurationRequirement> + <projectName>XSDASN_CNL113474</projectName> + <rerquiredConfiguration>XSD</rerquiredConfiguration> + </configurationRequirement> + </ConfigurationRequirements> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/SHP_linux.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/SHP_oss.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/SHP_solarisx86.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/SubscriptionHistoryProtocol_oss.asn</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/gen.sh</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="LINUX"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/SubscriptionHistoryProtocol_1.0_CNL113584</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>osstoed</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <ConfigurationRequirements> + <configurationRequirement> + <projectName>XSDASN_CNL113474</projectName> + <rerquiredConfiguration>XSD</rerquiredConfiguration> + </configurationRequirement> + </ConfigurationRequirements> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/SHP_linux64bit.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/SHP_oss.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/SHP_solarisx86.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/SubscriptionHistoryProtocol_oss.asn</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/gen.sh</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="SOLARIS"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/SubscriptionHistoryProtocol_1.0_CNL113584</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>osstoed</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <ConfigurationRequirements> + <configurationRequirement> + <projectName>XSDASN_CNL113474</projectName> + <rerquiredConfiguration>XSD</rerquiredConfiguration> + </configurationRequirement> + </ConfigurationRequirements> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/SHP_linux.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/SHP_linux64bit.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/SHP_solarisx86.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/SubscriptionHistoryProtocol_oss.asn</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/gen.sh</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="SOLARIS_X86"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/SubscriptionHistoryProtocol_1.0_CNL113584</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>osstoed</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <ConfigurationRequirements> + <configurationRequirement> + <projectName>XSDASN_CNL113474</projectName> + <rerquiredConfiguration>XSD</rerquiredConfiguration> + </configurationRequirement> + </ConfigurationRequirements> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/SHP_linux.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/SHP_linux64bit.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/SHP_oss.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/SubscriptionHistoryProtocol_oss.asn</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/gen.sh</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="SOLARIS64"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/SubscriptionHistoryProtocol_1.0_CNL113584</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>osstoed</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <ConfigurationRequirements> + <configurationRequirement> + <projectName>XSDASN_CNL113474</projectName> + <rerquiredConfiguration>XSD</rerquiredConfiguration> + </configurationRequirement> + </ConfigurationRequirements> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/SHP_linux.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/SHP_oss.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/SHP_solarisx86.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/SubscriptionHistoryProtocol_oss.asn</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/gen.sh</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/TCAP_CNL113342.tpd b/regression_test/XML/tpdValidTest/tpdTest/TCAP_CNL113342.tpd new file mode 100644 index 000000000..23a3a8df3 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/TCAP_CNL113342.tpd @@ -0,0 +1,61 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: TCAP_CNL113342.tpd + Description: tpd project file + Rev: R5B02 + Prodnr: CNL 113 342 + Updated: 2012-11-23 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>TCAP_CNL113342</ProjectName> + <ReferencedProjects> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../../ProtocolModules/COMMON/ProtocolModules_Common.tpd"/> + <ReferencedProject name="ROSE_CNL113369" projectLocationURI="../../ProtocolModules/ROSE_CNL113369/ROSE_CNL113369.tpd"/> + <ReferencedProject name="SCCP_CNL113341" projectLocationURI="../SCCP_CNL113341/SCCP_CNL113341.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/TCAP_CNL113342_FS.pdf" relativeURI="doc/TCAP_CNL113342_FS.pdf"/> + <FileResource projectRelativePath="doc/TCAP_CNL113342_PRI.pdf" relativeURI="doc/TCAP_CNL113342_PRI.pdf"/> + <FileResource projectRelativePath="doc/TCAP_CNL113342_UG.pdf" relativeURI="doc/TCAP_CNL113342_UG.pdf"/> + <FileResource projectRelativePath="src/TCAP_ANSI_PDU_Defs.asn" relativeURI="src/TCAP_ANSI_PDU_Defs.asn"/> + <FileResource projectRelativePath="src/TCAP_ANSIasp_Types.ttcn" relativeURI="src/TCAP_ANSIasp_Types.ttcn"/> + <FileResource projectRelativePath="src/TCAP_Emulation.ttcn" relativeURI="src/TCAP_Emulation.ttcn"/> + <FileResource projectRelativePath="src/TCAP_EncDec.cc" relativeURI="src/TCAP_EncDec.cc"/> + <FileResource projectRelativePath="src/TCAP_PDU_Defs.asn" relativeURI="src/TCAP_PDU_Defs.asn"/> + <FileResource projectRelativePath="src/TCAP_Types.ttcn" relativeURI="src/TCAP_Types.ttcn"/> + <FileResource projectRelativePath="src/TCAPasp_PortType.ttcn" relativeURI="src/TCAPasp_PortType.ttcn"/> + <FileResource projectRelativePath="src/TCAPasp_Templates.ttcn" relativeURI="src/TCAPasp_Templates.ttcn"/> + <FileResource projectRelativePath="src/TCAPasp_Types.ttcn" relativeURI="src/TCAPasp_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/TCAP_CNL113342</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/TCAPasp_CNL113349.tpd b/regression_test/XML/tpdValidTest/tpdTest/TCAPasp_CNL113349.tpd new file mode 100644 index 000000000..1ff4a5da3 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/TCAPasp_CNL113349.tpd @@ -0,0 +1,99 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: TCAPasp_CNL113349.tpd + Description: tpd project file + Rev: R12A02 + Prodnr: CNL 113 349 + Updated: 2012-09-07 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>TCAPasp_CNL113349</ProjectName> + <ReferencedProjects> + <ReferencedProject name="ROSE_CNL113369" projectLocationURI="../../ProtocolModules/ROSE_CNL113369/ROSE_CNL113369.tpd"/> + <ReferencedProject name="SS7Common_CNL113755" projectLocationURI="../Common_Components/SS7Common_CNL113755/SS7Common_CNL113755.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/TCAPasp_CNL113349_FS.pdf" relativeURI="doc/TCAPasp_CNL113349_FS.pdf"/> + <FileResource projectRelativePath="doc/TCAPasp_CNL113349_PRI.pdf" relativeURI="doc/TCAPasp_CNL113349_PRI.pdf"/> + <FileResource projectRelativePath="doc/TCAPasp_CNL113349_UG.pdf" relativeURI="doc/TCAPasp_CNL113349_UG.pdf"/> + <FileResource projectRelativePath="src/TCAPPackage.asn" relativeURI="src/TCAPPackage.asn"/> + <FileResource projectRelativePath="src/TCAPasp_PT.cc" relativeURI="src/TCAPasp_PT.cc"/> + <FileResource projectRelativePath="src/TCAPasp_PT.hh" relativeURI="src/TCAPasp_PT.hh"/> + <FileResource projectRelativePath="src/TCAPasp_PT_Daemon_Interface.cc" relativeURI="src/TCAPasp_PT_Daemon_Interface.cc"/> + <FileResource projectRelativePath="src/TCAPasp_PT_Daemon_Interface.hh" relativeURI="src/TCAPasp_PT_Daemon_Interface.hh"/> + <FileResource projectRelativePath="src/TCAPasp_PT_EIN_Interface.cc" relativeURI="src/TCAPasp_PT_EIN_Interface.cc"/> + <FileResource projectRelativePath="src/TCAPasp_PT_EIN_Interface.hh" relativeURI="src/TCAPasp_PT_EIN_Interface.hh"/> + <FileResource projectRelativePath="src/TCAPasp_PortType.ttcn" relativeURI="src/TCAPasp_PortType.ttcn"/> + <FileResource projectRelativePath="src/TCAPasp_Types.ttcn" relativeURI="src/TCAPasp_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/TCAPasp_CNL113349</targetExecutable> + <preprocessorDefines> + <listItem>TCAP_CAA201694_R10</listItem> + <listItem>TCAP_CAA20118_R8</listItem> + <listItem>CP_R12A30</listItem> + <listItem>EINSS7_THREADSAFE</listItem> + <listItem>EINSS7_ADDR_IN_RESP</listItem> + <listItem>T_ADDRESS</listItem> + </preprocessorDefines> + <preprocessorIncludes> + <listItem>[SS7_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>einss7_n_r</listItem> + <listItem>pthread</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[SS7_DIR]/lib64</listItem> + </linkerLibrarySearchPath> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/TCAPasp_PT_Daemon_Interface.cc</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/TCAPasp_PT_Daemon_Interface.hh</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/TCCUsefulFunctions_CNL113472_Common.tpd b/regression_test/XML/tpdValidTest/tpdTest/TCCUsefulFunctions_CNL113472_Common.tpd new file mode 100644 index 000000000..dfb9e1776 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/TCCUsefulFunctions_CNL113472_Common.tpd @@ -0,0 +1,62 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: TCCUsefulFunctions_CNL113472_Common.tpd + Description: tpd project file + Rev: R12B + Prodnr: CNL 113 472 + Updated: 2013-04-10 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>TCCUsefulFunctions_CNL113472_Common</ProjectName> + <Files> + <FileResource projectRelativePath="TCCConversion.cc" relativeURI="src/TCCConversion.cc"/> + <FileResource projectRelativePath="TCCConversion_Functions.ttcn" relativeURI="src/TCCConversion_Functions.ttcn"/> + <FileResource projectRelativePath="TCCDateTime.cc" relativeURI="src/TCCDateTime.cc"/> + <FileResource projectRelativePath="TCCDateTime_Functions.ttcn" relativeURI="src/TCCDateTime_Functions.ttcn"/> + <FileResource projectRelativePath="TCCEncoding.cc" relativeURI="src/TCCEncoding.cc"/> + <FileResource projectRelativePath="TCCEncoding_Functions.ttcn" relativeURI="src/TCCEncoding_Functions.ttcn"/> + <FileResource projectRelativePath="TCCEnv.cc" relativeURI="src/TCCEnv.cc"/> + <FileResource projectRelativePath="TCCEnv_Functions.ttcn" relativeURI="src/TCCEnv_Functions.ttcn"/> + <FileResource projectRelativePath="TCCFileIO.cc" relativeURI="src/TCCFileIO.cc"/> + <FileResource projectRelativePath="TCCFileIO_Functions.ttcn" relativeURI="src/TCCFileIO_Functions.ttcn"/> + <FileResource projectRelativePath="TCCMessageHandling.cc" relativeURI="src/TCCMessageHandling.cc"/> + <FileResource projectRelativePath="TCCMessageHandling_Functions.ttcn" relativeURI="src/TCCMessageHandling_Functions.ttcn"/> + <FileResource projectRelativePath="TCCSystem.cc" relativeURI="src/TCCSystem.cc"/> + <FileResource projectRelativePath="TCCSystem_Functions.ttcn" relativeURI="src/TCCSystem_Functions.ttcn"/> + <FileResource projectRelativePath="TCCFileSystem.cc" relativeURI="src/TCCFileSystem.cc"/> + <FileResource projectRelativePath="TCCFileSystem_Functions.ttcn" relativeURI="src/TCCFileSystem_Functions.ttcn"/> + <FileResource projectRelativePath="TCCTitanMetadata.cc" relativeURI="src/TCCTitanMetadata.cc"/> + <FileResource projectRelativePath="TCCTitanMetadata_Functions.ttcn" relativeURI="src/TCCTitanMetadata_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <GNUMake>true</GNUMake> + <targetExecutable>bin/TCCUsefulFunctions_CNL113472_Common</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <externalFunction>.*</externalFunction> + <localVariable>.*</localVariable> + <formalParameter>.*</formalParameter> + </NamingCoventions> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/TCCUsefulFunctions_CNL113472_IPsec.tpd b/regression_test/XML/tpdValidTest/tpdTest/TCCUsefulFunctions_CNL113472_IPsec.tpd new file mode 100644 index 000000000..7d552c79d --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/TCCUsefulFunctions_CNL113472_IPsec.tpd @@ -0,0 +1,93 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: TCCUsefulFunctions_CNL113472_IPsec.tpd + Description: tpd project file + Rev: R12B + Prodnr: CNL 113 472 + Updated: 2013-04-10 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>TCCUsefulFunctions_CNL113472_IPsec</ProjectName> + <Files> + <FileResource projectRelativePath="TCCIPsec.cc" relativeURI="src/TCCIPsec.cc"/> + <FileResource projectRelativePath="TCCIPsec_Definitions.ttcn" relativeURI="src/TCCIPsec_Definitions.ttcn"/> + <FileResource projectRelativePath="TCCIPsec_Functions.ttcn" relativeURI="src/TCCIPsec_Functions.ttcn"/> + </Files> + <ActiveConfiguration>KAME_IPSEC</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <GNUMake>true</GNUMake> + <targetExecutable>bin/TCCUsefulFunctions_CNL113472_IPsec</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <globalConstant>.*</globalConstant> + <externalFunction>.*</externalFunction> + <formalParameter>.*</formalParameter> + </NamingCoventions> + </ProjectProperties> + </Configuration> + <Configuration name="IPSEC"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/TCCUsefulFunctions_CNL113472_IPsec</targetExecutable> + <preprocessorDefines> + <listItem>USE_IPSEC</listItem> + </preprocessorDefines> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <globalConstant>.*</globalConstant> + <externalFunction>.*</externalFunction> + <formalParameter>.*</formalParameter> + </NamingCoventions> + </ProjectProperties> + </Configuration> + <Configuration name="KAME_IPSEC"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/TCCUsefulFunctions_CNL113472_IPsec</targetExecutable> + <preprocessorDefines> + <listItem>USE_KAME_IPSEC</listItem> + </preprocessorDefines> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <globalConstant>.*</globalConstant> + <externalFunction>.*</externalFunction> + <formalParameter>.*</formalParameter> + </NamingCoventions> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/TCCUsefulFunctions_CNL113472_Interface.tpd b/regression_test/XML/tpdValidTest/tpdTest/TCCUsefulFunctions_CNL113472_Interface.tpd new file mode 100644 index 000000000..0202b67ac --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/TCCUsefulFunctions_CNL113472_Interface.tpd @@ -0,0 +1,46 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: TCCUsefulFunctions_CNL113472_Interface.tpd + Description: tpd project file + Rev: R12B + Prodnr: CNL 113 472 + Updated: 2013-04-10 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>TCCUsefulFunctions_CNL113472_Interface</ProjectName> + <Files> + <FileResource projectRelativePath="TCCInterface.cc" relativeURI="src/TCCInterface.cc"/> + <FileResource projectRelativePath="TCCInterface_Functions.ttcn" relativeURI="src/TCCInterface_Functions.ttcn"/> + <FileResource projectRelativePath="TCCInterface_ip.h" relativeURI="src/TCCInterface_ip.h"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <GNUMake>true</GNUMake> + <targetExecutable>bin/TCCUsefulFunctions_CNL113472_Interface</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <externalFunction>.*</externalFunction> + <formalParameter>.*</formalParameter> + </NamingCoventions> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/TCCUsefulFunctions_CNL113472_Maths.tpd b/regression_test/XML/tpdValidTest/tpdTest/TCCUsefulFunctions_CNL113472_Maths.tpd new file mode 100644 index 000000000..79f91e78c --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/TCCUsefulFunctions_CNL113472_Maths.tpd @@ -0,0 +1,48 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: TCCUsefulFunctions_CNL113472_Maths.tpd + Description: tpd project file + Rev: R12B + Prodnr: CNL 113 472 + Updated: 2013-04-10 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>TCCUsefulFunctions_CNL113472_Maths</ProjectName> + <Files> + <FileResource projectRelativePath="TCCMaths.cc" relativeURI="src/TCCMaths.cc"/> + <FileResource projectRelativePath="TCCMaths_Functions.ttcn" relativeURI="src/TCCMaths_Functions.ttcn"/> + <FileResource projectRelativePath="TCCMaths_GenericTypes.ttcn" relativeURI="src/TCCMaths_GenericTypes.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <GNUMake>true</GNUMake> + <targetExecutable>bin/TCCUsefulFunctions_CNL113472_Maths</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <globalConstant>.*</globalConstant> + <externalFunction>[e]?f_.*</externalFunction> + <localVariable>.*</localVariable> + <formalParameter>.*</formalParameter> + </NamingCoventions> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/TCCUsefulFunctions_CNL113472_Regexp.tpd b/regression_test/XML/tpdValidTest/tpdTest/TCCUsefulFunctions_CNL113472_Regexp.tpd new file mode 100644 index 000000000..26f5a9ad1 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/TCCUsefulFunctions_CNL113472_Regexp.tpd @@ -0,0 +1,48 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: TCCUsefulFunctions_CNL113472_Regexp.tpd + Description: tpd project file + Rev: R12B + Prodnr: CNL 113 472 + Updated: 2013-04-10 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>TCCUsefulFunctions_CNL113472_Regexp</ProjectName> + <Files> + <FileResource projectRelativePath="TCCRegexp.cc" relativeURI="src/TCCRegexp.cc"/> + <FileResource projectRelativePath="TCCRegexp_Functions.ttcn" relativeURI="src/TCCRegexp_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <GNUMake>true</GNUMake> + <targetExecutable>bin/TCCUsefulFunctions_CNL113472_Regexp</targetExecutable> + <linkerLibraries> + <listItem>pcre</listItem> + </linkerLibraries> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <externalFunction>[e]?f_.*</externalFunction> + <formalParameter>.*</formalParameter> + </NamingCoventions> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/TCCUsefulFunctions_CNL113472_Security.tpd b/regression_test/XML/tpdValidTest/tpdTest/TCCUsefulFunctions_CNL113472_Security.tpd new file mode 100644 index 000000000..62a0858e6 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/TCCUsefulFunctions_CNL113472_Security.tpd @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: TCCUsefulFunctions_CNL113472_Security.tpd + Description: tpd project file + Rev: R12B + Prodnr: CNL 113 472 + Updated: 2013-04-10 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>TCCUsefulFunctions_CNL113472_Security</ProjectName> + <Files> + <FileResource projectRelativePath="TCCSecurity.cc" relativeURI="src/TCCSecurity.cc"/> + <FileResource projectRelativePath="TCCSecurity_Functions.ttcn" relativeURI="src/TCCSecurity_Functions.ttcn"/> + <FileResource projectRelativePath="aka_algorythm_set.c" relativeURI="src/aka_algorythm_set.c"/> + <FileResource projectRelativePath="aka_algorythm_set.h" relativeURI="src/aka_algorythm_set.h"/> + <FileResource projectRelativePath="digcalc.c" relativeURI="src/digcalc.c"/> + <FileResource projectRelativePath="digcalc.h" relativeURI="src/digcalc.h"/> + <FileResource projectRelativePath="zuc.c" relativeURI="src/zuc.c"/> + <FileResource projectRelativePath="zuc.h" relativeURI="src/zuc.h"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/TCCUsefulFunctions_CNL113472_Security</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <externalFunction>.*</externalFunction> + <formalParameter>.*</formalParameter> + </NamingCoventions> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/TCCUsefulFunctions_CNL113472_TitanSim.tpd b/regression_test/XML/tpdValidTest/tpdTest/TCCUsefulFunctions_CNL113472_TitanSim.tpd new file mode 100644 index 000000000..9b368983a --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/TCCUsefulFunctions_CNL113472_TitanSim.tpd @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: TCCUsefulFunctions_CNL113472_TitanSim.tpd + Description: tpd project file + Rev: R12B + Prodnr: CNL 113 472 + Updated: 2013-04-10 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>TCCUsefulFunctions_CNL113472_TitanSim</ProjectName> + <ReferencedProjects> + <ReferencedProject name="TCCUsefulFunctions_CNL113472_Common" projectLocationURI="TCCUsefulFunctions_CNL113472_Common.tpd"/> + </ReferencedProjects> + <Files> + <FileResource projectRelativePath="TCCAssertion.cc" relativeURI="src/TCCAssertion.cc"/> + <FileResource projectRelativePath="TCCAssertion_Functions.ttcn" relativeURI="src/TCCAssertion_Functions.ttcn"/> + <FileResource projectRelativePath="TCCTemplate_Functions.ttcn" relativeURI="src/TCCTemplate_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <GNUMake>true</GNUMake> + <targetExecutable>bin/TCCUsefulFunctions_CNL113472_TitanSim</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <externalFunction>[e]?f_.*</externalFunction> + <moduleParameter>.*</moduleParameter> + <localVariable>.*</localVariable> + <formalParameter>.*</formalParameter> + </NamingCoventions> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/TCCUsefulFunctions_CNL113472_XPath.tpd b/regression_test/XML/tpdValidTest/tpdTest/TCCUsefulFunctions_CNL113472_XPath.tpd new file mode 100644 index 000000000..f9bfacb42 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/TCCUsefulFunctions_CNL113472_XPath.tpd @@ -0,0 +1,56 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: TCCUsefulFunctions_CNL113472_XPath.tpd + Description: tpd project file + Rev: R12B + Prodnr: CNL 113 472 + Updated: 2013-04-10 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>TCCUsefulFunctions_CNL113472_XPath</ProjectName> + <Files> + <FileResource projectRelativePath="TCCXPathSupport.cc" relativeURI="src/TCCXPathSupport.cc"/> + <FileResource projectRelativePath="TCCXPathSupport_Functions.ttcn" relativeURI="src/TCCXPathSupport_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/TCCUsefulFunctions_CNL113472_XPath</targetExecutable> + <preprocessorIncludes> + <listItem>[TINY_XPATH_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>tinyxpath</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[TINY_XPATH_DIR]/lib</listItem> + </linkerLibrarySearchPath> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <externalFunction>.*</externalFunction> + <formalParameter>.*</formalParameter> + </NamingCoventions> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/TCP_CNL113675.tpd b/regression_test/XML/tpdValidTest/tpdTest/TCP_CNL113675.tpd new file mode 100644 index 000000000..24677b85c --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/TCP_CNL113675.tpd @@ -0,0 +1,44 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: TCP_CNL113675.tpd + Description: tpd project file + Rev: R2A01 + Prodnr: CNL 113 675 + Updated: 2012-02-13 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>TCP_CNL113675</ProjectName> + <ReferencedProjects> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="src/TCP_EncDec.cc" relativeURI="src/TCP_EncDec.cc"/> + <FileResource projectRelativePath="src/TCP_Types.ttcn" relativeURI="src/TCP_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <targetExecutable>bin/TCP_CNL113675</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/TCPasp_CNL113347.tpd b/regression_test/XML/tpdValidTest/tpdTest/TCPasp_CNL113347.tpd new file mode 100644 index 000000000..b357e4149 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/TCPasp_CNL113347.tpd @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: TCPasp_CNL113347.tpd + Description: tpd project file + Rev: R8B01 + Prodnr: CNL 113 347 + Updated: 2012-11-19 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>TCPasp_CNL113347</ProjectName> + <ReferencedProjects> + <ReferencedProject name="Abstract_Socket_CNL113384" projectLocationURI="../Common_Components/Abstract_Socket_CNL113384/Abstract_Socket_CNL113384.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/TCPasp_CNL113347_FS.pdf" relativeURI="doc/TCPasp_CNL113347_FS.pdf"/> + <FileResource projectRelativePath="doc/TCPasp_CNL113347_PRI.pdf" relativeURI="doc/TCPasp_CNL113347_PRI.pdf"/> + <FileResource projectRelativePath="doc/TCPasp_CNL113347_UG.pdf" relativeURI="doc/TCPasp_CNL113347_UG.pdf"/> + <FileResource projectRelativePath="src/TCP.grp" relativeURI="src/TCP.grp"/> + <FileResource projectRelativePath="src/TCPasp_PT.cc" relativeURI="src/TCPasp_PT.cc"/> + <FileResource projectRelativePath="src/TCPasp_PT.hh" relativeURI="src/TCPasp_PT.hh"/> + <FileResource projectRelativePath="src/TCPasp_PortType.ttcn" relativeURI="src/TCPasp_PortType.ttcn"/> + <FileResource projectRelativePath="src/TCPasp_Types.ttcn" relativeURI="src/TCPasp_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <targetExecutable>bin/TCPasp_CNL113347</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/TELNET_Daemon_CNL113667.tpd b/regression_test/XML/tpdValidTest/tpdTest/TELNET_Daemon_CNL113667.tpd new file mode 100644 index 000000000..f33f30896 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/TELNET_Daemon_CNL113667.tpd @@ -0,0 +1,61 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: TELNET_Daemon_CNL113667.tpd + Description: tpd project file + Rev: R2B01 + Prodnr: CNL 113 667 + Updated: 2011-12-12 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>TELNET_Daemon_CNL113667</ProjectName> + <ReferencedProjects> + <ReferencedProject name="IPL4asp_CNL113531" projectLocationURI="../../TestPorts/IPL4asp_CNL113531/IPL4asp_CNL113531.tpd"/> + <ReferencedProject name="TELNETasp_CNL113320" projectLocationURI="../../TestPorts/TELNETasp_CNL113320/TELNETasp_CNL113320.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/TELNET_Daemon_CNL113667_FS.pdf" relativeURI="doc/TELNET_Daemon_CNL113667_FS.pdf"/> + <FileResource projectRelativePath="doc/TELNET_Daemon_CNL113667_PRI.pdf" relativeURI="doc/TELNET_Daemon_CNL113667_PRI.pdf"/> + <FileResource projectRelativePath="doc/TELNET_Daemon_CNL113667_UG.pdf" relativeURI="doc/TELNET_Daemon_CNL113667_UG.pdf"/> + <FileResource projectRelativePath="src/TELNET_Daemon.ttcn" relativeURI="src/TELNET_Daemon.ttcn"/> + <FileResource projectRelativePath="src/TELNET_Daemon_Types.ttcn" relativeURI="src/TELNET_Daemon_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/TELNET_Daemon_CNL113667</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/TELNETasp_CNL113320.tpd b/regression_test/XML/tpdValidTest/tpdTest/TELNETasp_CNL113320.tpd new file mode 100644 index 000000000..41aa63ff2 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/TELNETasp_CNL113320.tpd @@ -0,0 +1,65 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: TELNETasp_CNL113320.tpd + Description: tpd project file + Rev: R8C01 + Prodnr: CNL 113 320 + Updated: 2012-08-08 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>TELNETasp_CNL113320</ProjectName> + <ReferencedProjects> + <ReferencedProject name="Abstract_Socket_CNL113384" projectLocationURI="../Common_Components/Abstract_Socket_CNL113384/Abstract_Socket_CNL113384.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/TELNETasp_CNL113320_FS.pdf" relativeURI="doc/TELNETasp_CNL113320_FS.pdf"/> + <FileResource projectRelativePath="doc/TELNETasp_CNL113320_PRI.pdf" relativeURI="doc/TELNETasp_CNL113320_PRI.pdf"/> + <FileResource projectRelativePath="doc/TELNETasp_CNL113320_UG.pdf" relativeURI="doc/TELNETasp_CNL113320_UG.pdf"/> + <FileResource projectRelativePath="src/TELNETasp_PT.cc" relativeURI="src/TELNETasp_PT.cc"/> + <FileResource projectRelativePath="src/TELNETasp_PT.hh" relativeURI="src/TELNETasp_PT.hh"/> + <FileResource projectRelativePath="src/TELNETasp_PortType.ttcn" relativeURI="src/TELNETasp_PortType.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/TELNETasp_CNL113320</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <externalFunction>.*</externalFunction> + <formalParameter>.*</formalParameter> + </NamingCoventions> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/Tariffing_v8.0.0_CNL113654.tpd b/regression_test/XML/tpdValidTest/tpdTest/Tariffing_v8.0.0_CNL113654.tpd new file mode 100644 index 000000000..c8608c2ad --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/Tariffing_v8.0.0_CNL113654.tpd @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: Tariffing_v8.0.0_CNL113654.tpd + Description: tpd project file + Rev: R1A01 + Prodnr: CNL 113 654 + Updated: 2012-10-26 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>Tariffing_v8.0.0_CNL113654</ProjectName> + <Files> + <FileResource projectRelativePath="SIP.xsd" relativeURI="src/SIP.xsd"/> + <FileResource projectRelativePath="UsefulTtcn3Types.ttcn" relativeURI="src/UsefulTtcn3Types.ttcn"/> + <FileResource projectRelativePath="XSD.ttcn" relativeURI="src/XSD.ttcn"/> + <FileResource projectRelativePath="uri_etsi_org_ngn_params_xml_simservs_sci.ttcn" relativeURI="src/uri_etsi_org_ngn_params_xml_simservs_sci.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <symboliclinklessBuild>true</symboliclinklessBuild> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/Tariffing_v8.0.0_CNL113654</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/TitanSim_evolution_files.tpd b/regression_test/XML/tpdValidTest/tpdTest/TitanSim_evolution_files.tpd new file mode 100644 index 000000000..7c583bdd6 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/TitanSim_evolution_files.tpd @@ -0,0 +1,124 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>TitanSim_evolution_files</ProjectName> + <Files> + <FileResource projectRelativePath="IMS_Common.ttcn" relativeURI="../src/common/IMS_Common.ttcn"/> + <FileResource projectRelativePath="IMS_Common_Functions.ttcn" relativeURI="../src/common/IMS_Common_Functions.ttcn"/> + <FileResource projectRelativePath="IMS_Validation_Functions.ttcn" relativeURI="../src/common/IMS_Validation_Functions.ttcn"/> + <FileResource projectRelativePath="IMS_CustomTestSteps_Definitions.ttcn" relativeURI="../src/tc/IMS_CustomTestSteps_Definitions.ttcn"/> + <FileResource projectRelativePath="IMS_CustomTestSteps_Functions.ttcn" relativeURI="../src/tc/IMS_CustomTestSteps_Functions.ttcn"/> + <FileResource projectRelativePath="IMS_CustomTestSteps_UserCode.ttcn" relativeURI="../src/tc/IMS_CustomTestSteps_UserCode.ttcn"/> + <FileResource projectRelativePath="IMS_LGen_Definitions.ttcn" relativeURI="../src/tc/IMS_LGen_Definitions.ttcn"/> + <FileResource projectRelativePath="IMS_LGen_FsmDefinitions.ttcn" relativeURI="../src/tc/IMS_LGen_FsmDefinitions.ttcn"/> + <FileResource projectRelativePath="IMS_LGen_Functions.ttcn" relativeURI="../src/tc/IMS_LGen_Functions.ttcn"/> + <FileResource projectRelativePath="IMS_LGen_FsmFunctions.ttcn" relativeURI="../src/tc/IMS_LGen_FsmFunctions.ttcn"/> + <FileResource projectRelativePath="IMS_MessageModify_Definitions.ttcn" relativeURI="../src/tc/IMS_MessageModify_Definitions.ttcn"/> + <FileResource projectRelativePath="IMS_MessageModify_Functions.ttcn" relativeURI="../src/tc/IMS_MessageModify_Functions.ttcn"/> + <FileResource projectRelativePath="IMS_MessageSequence_Definitions.ttcn" relativeURI="../src/tc/IMS_MessageSequence_Definitions.ttcn"/> + <FileResource projectRelativePath="IMS_MessageSequence_Functions.ttcn" relativeURI="../src/tc/IMS_MessageSequence_Functions.ttcn"/> + <FileResource projectRelativePath="IMS_Presence_Definitions.ttcn" relativeURI="../src/tc/IMS_Presence_Definitions.ttcn"/> + <FileResource projectRelativePath="IMS_Presence_Functions.ttcn" relativeURI="../src/tc/IMS_Presence_Functions.ttcn"/> + <FileResource projectRelativePath="IMS_SIP_Subscribe_Definitions.ttcn" relativeURI="../src/tc/IMS_SIP_Subscribe_Definitions.ttcn"/> + <FileResource projectRelativePath="IMS_SIP_Subscribe_Functions.ttcn" relativeURI="../src/tc/IMS_SIP_Subscribe_Functions.ttcn"/> + <FileResource projectRelativePath="IMS_TC_CallOrig_Definitions.ttcn" relativeURI="../src/tc/IMS_TC_CallOrig_Definitions.ttcn"/> + <FileResource projectRelativePath="IMS_TC_CallOrig_Functions.ttcn" relativeURI="../src/tc/IMS_TC_CallOrig_Functions.ttcn"/> + <FileResource projectRelativePath="IMS_TC_CallTerm_Definitions.ttcn" relativeURI="../src/tc/IMS_TC_CallTerm_Definitions.ttcn"/> + <FileResource projectRelativePath="IMS_TC_CallTerm_Functions.ttcn" relativeURI="../src/tc/IMS_TC_CallTerm_Functions.ttcn"/> + <FileResource projectRelativePath="IMS_TC_ConferenceCreator_Definitions.ttcn" relativeURI="../src/tc/IMS_TC_ConferenceCreator_Definitions.ttcn"/> + <FileResource projectRelativePath="IMS_TC_ConferenceCreator_Functions.ttcn" relativeURI="../src/tc/IMS_TC_ConferenceCreator_Functions.ttcn"/> + <FileResource projectRelativePath="IMS_TC_Custom_Definitions.ttcn" relativeURI="../src/tc/IMS_TC_Custom_Definitions.ttcn"/> + <FileResource projectRelativePath="IMS_TC_Custom_Functions.ttcn" relativeURI="../src/tc/IMS_TC_Custom_Functions.ttcn"/> + <FileResource projectRelativePath="IMS_TC_Generic_Definitions.ttcn" relativeURI="../src/tc/IMS_TC_Generic_Definitions.ttcn"/> + <FileResource projectRelativePath="IMS_TC_Generic_Functions.ttcn" relativeURI="../src/tc/IMS_TC_Generic_Functions.ttcn"/> + <FileResource projectRelativePath="IMS_TC_IMSNetSim_Definitions.ttcn" relativeURI="../src/tc/IMS_TC_IMSNetSim_Definitions.ttcn"/> + <FileResource projectRelativePath="IMS_TC_IMSNetSim_Functions.ttcn" relativeURI="../src/tc/IMS_TC_IMSNetSim_Functions.ttcn"/> + <FileResource projectRelativePath="IMS_TC_OptionsOrig_Definitions.ttcn" relativeURI="../src/tc/IMS_TC_OptionsOrig_Definitions.ttcn"/> + <FileResource projectRelativePath="IMS_TC_OptionsOrig_Functions.ttcn" relativeURI="../src/tc/IMS_TC_OptionsOrig_Functions.ttcn"/> + <FileResource projectRelativePath="IMS_TC_OptionsTerm_Definitions.ttcn" relativeURI="../src/tc/IMS_TC_OptionsTerm_Definitions.ttcn"/> + <FileResource projectRelativePath="IMS_TC_OptionsTerm_Functions.ttcn" relativeURI="../src/tc/IMS_TC_OptionsTerm_Functions.ttcn"/> + <FileResource projectRelativePath="IMS_TC_Registration_Definitions.ttcn" relativeURI="../src/tc/IMS_TC_Registration_Definitions.ttcn"/> + <FileResource projectRelativePath="IMS_TC_Registration_Functions.ttcn" relativeURI="../src/tc/IMS_TC_Registration_Functions.ttcn"/> + <FileResource projectRelativePath="IMS_TC_CommonDefinitions.ttcn" relativeURI="../src/tcgeneric/IMS_TC_CommonDefinitions.ttcn"/> + <FileResource projectRelativePath="IMS_TC_CommonFunctions.ttcn" relativeURI="../src/tcgeneric/IMS_TC_CommonFunctions.ttcn"/> + <FileResource projectRelativePath="IMS_TC_Definitions.ttcn" relativeURI="../src/tcgeneric/IMS_TC_Definitions.ttcn"/> + <FileResource projectRelativePath="IMS_TC_FsmFunctions.ttcn" relativeURI="../src/tcgeneric/IMS_TC_FsmFunctions.ttcn"/> + <FileResource projectRelativePath="IMS_TC_Functions.ttcn" relativeURI="../src/tcgeneric/IMS_TC_Functions.ttcn"/> + <FileResource projectRelativePath="IMS_TC_VarGuiFunctions.ttcn" relativeURI="../src/tcgeneric/IMS_TC_VarGuiFunctions.ttcn"/> + <FileResource projectRelativePath="IMS_EV_CommonDefinitions.ttcn" relativeURI="../src/ev/IMS_EV_CommonDefinitions.ttcn"/> + <FileResource projectRelativePath="IMS_EV_Server_Definitions.ttcn" relativeURI="../src/ev/IMS_EV_Server_Definitions.ttcn"/> + <FileResource projectRelativePath="IMS_EV_Server_Functions.ttcn" relativeURI="../src/ev/IMS_EV_Server_Functions.ttcn"/> + <FileResource projectRelativePath="IMS_EV_Client_Definitions.ttcn" relativeURI="../src/ev/IMS_EV_Client_Definitions.ttcn"/> + <FileResource projectRelativePath="IMS_EV_Client_Functions.ttcn" relativeURI="../src/ev/IMS_EV_Client_Functions.ttcn"/> + <FileResource projectRelativePath="IMS_MainModule.ttcn" relativeURI="../src/main/IMS_MainModule.ttcn"/> + <FileResource projectRelativePath="IMS_Setup_ConfigDefinitions.ttcn" relativeURI="../src/main/IMS_Setup_ConfigDefinitions.ttcn"/> + <FileResource projectRelativePath="IMS_Setup_ConfigFunctions.ttcn" relativeURI="../src/main/IMS_Setup_ConfigFunctions.ttcn"/> + <FileResource projectRelativePath="IMS_Setup_ExecConfigFunctions.ttcn" relativeURI="../src/main/IMS_Setup_ExecConfigFunctions.ttcn"/> + <FileResource projectRelativePath="IMS_Setup_Definitions.ttcn" relativeURI="../src/main/IMS_Setup_Definitions.ttcn"/> + <FileResource projectRelativePath="IMS_Setup_Functions.ttcn" relativeURI="../src/main/IMS_Setup_Functions.ttcn"/> + <FileResource projectRelativePath="IMS_Setup_GuiFunctions.ttcn" relativeURI="../src/main/IMS_Setup_GuiFunctions.ttcn"/> + <FileResource projectRelativePath="IMS_Media_CommonDefinitions.ttcn" relativeURI="../src/media/IMS_Media_CommonDefinitions.ttcn"/> + <FileResource projectRelativePath="IMS_Media_CommonFunctions.ttcn" relativeURI="../src/media/IMS_Media_CommonFunctions.ttcn"/> + <FileResource projectRelativePath="IMS_Media_ConfigFunctions.ttcn" relativeURI="../src/media/IMS_Media_ConfigFunctions.ttcn"/> + <FileResource projectRelativePath="IMS_Media_Definitions.ttcn" relativeURI="../src/media/IMS_Media_Definitions.ttcn"/> + <FileResource projectRelativePath="IMS_Media_FsmFunctions.ttcn" relativeURI="../src/media/IMS_Media_FsmFunctions.ttcn"/> + <FileResource projectRelativePath="IMS_Media_Functions.ttcn" relativeURI="../src/media/IMS_Media_Functions.ttcn"/> + <FileResource projectRelativePath="IMS_Media_GuiFunctions.ttcn" relativeURI="../src/media/IMS_Media_GuiFunctions.ttcn"/> + <FileResource projectRelativePath="IMS_GUI_Server_Definitions.ttcn" relativeURI="../src/gui/IMS_GUI_Server_Definitions.ttcn"/> + <FileResource projectRelativePath="IMS_GUI_Server_Functions.ttcn" relativeURI="../src/gui/IMS_GUI_Server_Functions.ttcn"/> + <FileResource projectRelativePath="IMS_GUI_Client_Definitions.ttcn" relativeURI="../src/gui/IMS_GUI_Client_Definitions.ttcn"/> + <FileResource projectRelativePath="IMS_GUI_Client_Functions.ttcn" relativeURI="../src/gui/IMS_GUI_Client_Functions.ttcn"/> + <FileResource projectRelativePath="IMS_GUI_DS_Definitions.ttcn" relativeURI="../src/gui/IMS_GUI_DS_Definitions.ttcn"/> + <FileResource projectRelativePath="IMS_GUI_DS_Functions.ttcn" relativeURI="../src/gui/IMS_GUI_DS_Functions.ttcn"/> + <FileResource projectRelativePath="IMS_SIP_Auth_Definitions.ttcn" relativeURI="../src/sip/IMS_SIP_Auth_Definitions.ttcn"/> + <FileResource projectRelativePath="IMS_SIP_Auth_Functions.ttcn" relativeURI="../src/sip/IMS_SIP_Auth_Functions.ttcn"/> + <FileResource projectRelativePath="IMS_SIP_Call_Functions.ttcn" relativeURI="../src/sip/IMS_SIP_Call_Functions.ttcn"/> + <FileResource projectRelativePath="IMS_SIP_Definitions.ttcn" relativeURI="../src/sip/IMS_SIP_Definitions.ttcn"/> + <FileResource projectRelativePath="IMS_SIP_Functions.ttcn" relativeURI="../src/sip/IMS_SIP_Functions.ttcn"/> + <FileResource projectRelativePath="IMS_SIP_Options_Functions.ttcn" relativeURI="../src/sip/IMS_SIP_Options_Functions.ttcn"/> + <FileResource projectRelativePath="IMS_SIP_Register_Functions.ttcn" relativeURI="../src/sip/IMS_SIP_Register_Functions.ttcn"/> + <FileResource projectRelativePath="IMS_SIP_Steps.ttcn" relativeURI="../src/sip/IMS_SIP_Steps.ttcn"/> + <FileResource projectRelativePath="IMS_STUN_Definitions.ttcn" relativeURI="../src/sip/IMS_STUN_Definitions.ttcn"/> + <FileResource projectRelativePath="IMS_STUN_Functions.ttcn" relativeURI="../src/sip/IMS_STUN_Functions.ttcn"/> + <FileResource projectRelativePath="IMS_SimType_ConfigFunctions.ttcn" relativeURI="../src/sip/IMS_SimType_ConfigFunctions.ttcn"/> + <FileResource projectRelativePath="IMS_SimType_Config_Definitions.ttcn" relativeURI="../src/sip/IMS_SimType_Config_Definitions.ttcn"/> + <FileResource projectRelativePath="IMS_SimType_Definitions.ttcn" relativeURI="../src/sip/IMS_SimType_Definitions.ttcn"/> + <FileResource projectRelativePath="IMS_SimType_Functions.ttcn" relativeURI="../src/sip/IMS_SimType_Functions.ttcn"/> + <FileResource projectRelativePath="IMS_SimType_ICS_Definitions.ttcn" relativeURI="../src/sip/IMS_SimType_ICS_Definitions.ttcn"/> + <FileResource projectRelativePath="IMS_SimType_ICS_Functions.ttcn" relativeURI="../src/sip/IMS_SimType_ICS_Functions.ttcn"/> + <FileResource projectRelativePath="IMS_TC_XCAP_Definitions.ttcn" relativeURI="../src/xcap/IMS_TC_XCAP_Definitions.ttcn"/> + <FileResource projectRelativePath="IMS_TC_XCAP_Functions.ttcn" relativeURI="../src/xcap/IMS_TC_XCAP_Functions.ttcn"/> + <FileResource projectRelativePath="IMS_XCAP_Definitions.ttcn" relativeURI="../src/xcap/IMS_XCAP_Definitions.ttcn"/> + <FileResource projectRelativePath="IMS_XCAP_Functions.ttcn" relativeURI="../src/xcap/IMS_XCAP_Functions.ttcn"/> + <FileResource projectRelativePath="IMS_Logging_Definitions.ttcn" relativeURI="../src/logging/IMS_Logging_Definitions.ttcn"/> + <FileResource projectRelativePath="IMS_Logging_Functions.ttcn" relativeURI="../src/logging/IMS_Logging_Functions.ttcn"/> + <FileResource projectRelativePath="IMS_Diameter_SbgRx_Definitions.ttcn" relativeURI="../src/diameter/IMS_Diameter_SbgRx_Definitions.ttcn"/> + <FileResource projectRelativePath="IMS_Diameter_SbgRx_Functions.ttcn" relativeURI="../src/diameter/IMS_Diameter_SbgRx_Functions.ttcn"/> + <FileResource projectRelativePath="IMS_GenAppTransport_Definitions.ttcn" relativeURI="../src/genAppTransport/IMS_GenAppTransport_Definitions.ttcn"/> + <FileResource projectRelativePath="IMS_GenAppTransport_Functions.ttcn" relativeURI="../src/genAppTransport/IMS_GenAppTransport_Functions.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>build/titansim</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>build</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/Trigger_HSS4.2_CNL113583.tpd b/regression_test/XML/tpdValidTest/tpdTest/Trigger_HSS4.2_CNL113583.tpd new file mode 100644 index 000000000..c9459c800 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/Trigger_HSS4.2_CNL113583.tpd @@ -0,0 +1,518 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: Trigger_HSS4.2_CNL113583.tpd + Description: tpd project file + Rev: R2A01 + Prodnr: CNL 113 583 + Updated: 2012-07-09 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>Trigger_HSS4.2_CNL113583</ProjectName> + <ReferencedProjects> + <ReferencedProject name="XSDASN_CNL113474" projectLocationURI="../XSDASN_CNL113474/XSDASN_CNL113474.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + <FolderResource projectRelativePath="src/TOED" relativeURI="src/TOED"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/Trigger_HSS4.2_CNL113583_FS.pdf" relativeURI="doc/Trigger_HSS4.2_CNL113583_FS.pdf"/> + <FileResource projectRelativePath="doc/Trigger_HSS4.2_CNL113583_PRI.pdf" relativeURI="doc/Trigger_HSS4.2_CNL113583_PRI.pdf"/> + <FileResource projectRelativePath="doc/Trigger_HSS4.2_CNL113583_UG.pdf" relativeURI="doc/Trigger_HSS4.2_CNL113583_UG.pdf"/> + <FileResource projectRelativePath="src/Provisioning.asn" relativeURI="src/Provisioning.asn"/> + <FileResource projectRelativePath="src/Provisioning2.asn" relativeURI="src/Provisioning2.asn"/> + <FileResource projectRelativePath="src/Provisioning2_oss.asn" relativeURI="src/Provisioning2_oss.asn"/> + <FileResource projectRelativePath="src/Provisioning_oss.asn" relativeURI="src/Provisioning_oss.asn"/> + <FileResource projectRelativePath="src/SOAP.asn" relativeURI="src/SOAP.asn"/> + <FileResource projectRelativePath="src/SOAPTypes.ttcn" relativeURI="src/SOAPTypes.ttcn"/> + <FileResource projectRelativePath="src/SOAP_EncDec.cc" relativeURI="src/SOAP_EncDec.cc"/> + <FileResource projectRelativePath="src/SOAP_linux.c" relativeURI="src/SOAP_linux.c"/> + <FileResource projectRelativePath="src/SOAP_linux64bit.c" relativeURI="src/SOAP_linux64bit.c"/> + <FileResource projectRelativePath="src/SOAP_oss.asn" relativeURI="src/SOAP_oss.asn"/> + <FileResource projectRelativePath="src/SOAP_oss.h" relativeURI="src/SOAP_oss.h"/> + <FileResource projectRelativePath="src/SOAP_solaris.c" relativeURI="src/SOAP_solaris.c"/> + <FileResource projectRelativePath="src/SOAP_solarisx86.c" relativeURI="src/SOAP_solarisx86.c"/> + <FileResource projectRelativePath="src/SoapProvisioning.wsdl" relativeURI="src/SoapProvisioning.wsdl"/> + <FileResource projectRelativePath="src/SoapProvisioning2.wdsl" relativeURI="src/SoapProvisioning2.wdsl"/> + <FileResource projectRelativePath="src/TOED/SOAP_linux.c" relativeURI="src/TOED/SOAP_linux.c"/> + <FileResource projectRelativePath="src/TOED/SOAP_linux64bit.c" relativeURI="src/TOED/SOAP_linux64bit.c"/> + <FileResource projectRelativePath="src/TOED/SOAP_oss.h" relativeURI="src/TOED/SOAP_oss.h"/> + <FileResource projectRelativePath="src/TOED/SOAP_solaris.c" relativeURI="src/TOED/SOAP_solaris.c"/> + <FileResource projectRelativePath="src/TOED/SOAP_solarisx86.c" relativeURI="src/TOED/SOAP_solarisx86.c"/> + <FileResource projectRelativePath="src/gen.sh" relativeURI="src/gen.sh"/> + </Files> + <ActiveConfiguration>LINUX64</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/Trigger_HSS4.2_CNL113583</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>asn1code</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + <FolderResource> + <FolderPath>src/TOED</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/Provisioning2_oss.asn</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/Provisioning_oss.asn</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/SOAP_linux.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/SOAP_oss.asn</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/SOAP_solaris.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/SOAP_solarisx86.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/SoapProvisioning.wsdl</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/SoapProvisioning2.wdsl</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/gen.sh</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="LINUX64"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/Trigger_HSS4.2_CNL113583</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>asn1code</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + <FolderResource> + <FolderPath>src/TOED</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/Provisioning2_oss.asn</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/Provisioning_oss.asn</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/SOAP_linux.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/SOAP_oss.asn</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/SOAP_solaris.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/SOAP_solarisx86.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/SoapProvisioning.wsdl</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/SoapProvisioning2.wdsl</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/gen.sh</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="LINUX"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/Trigger_HSS4.2_CNL113583</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>asn1code</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + <FolderResource> + <FolderPath>src/TOED</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/Provisioning2_oss.asn</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/Provisioning_oss.asn</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/SOAP_linux64bit.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/SOAP_oss.asn</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/SOAP_solaris.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/SOAP_solarisx86.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/SoapProvisioning.wsdl</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/SoapProvisioning2.wdsl</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/gen.sh</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="SOLARIS"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/Trigger_HSS4.2_CNL113583</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>asn1code</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + <FolderResource> + <FolderPath>src/TOED</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/Provisioning2_oss.asn</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/Provisioning_oss.asn</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/SOAP_linux.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/SOAP_linux64bit.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/SOAP_oss.asn</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/SOAP_solarisx86.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/SoapProvisioning.wsdl</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/SoapProvisioning2.wdsl</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/gen.sh</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="SOLARIS_X86"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/Trigger_HSS4.2_CNL113583</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>asn1code</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + <FolderResource> + <FolderPath>src/TOED</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/Provisioning2_oss.asn</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/Provisioning_oss.asn</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/SOAP_linux.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/SOAP_linux64bit.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/SOAP_oss.asn</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/SOAP_solaris.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/SoapProvisioning.wsdl</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/SoapProvisioning2.wdsl</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/gen.sh</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/UDP_CNL113420.tpd b/regression_test/XML/tpdValidTest/tpdTest/UDP_CNL113420.tpd new file mode 100644 index 000000000..dae999879 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/UDP_CNL113420.tpd @@ -0,0 +1,58 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: UDP_CNL113420.tpd + Description: tpd project file + Rev: R3B01 + Prodnr: CNL 113 420 + Updated: 2012-06-13 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>UDP_CNL113420</ProjectName> + <ReferencedProjects> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + </Folders> + <Files> + <FileResource projectRelativePath="UDP_EncDec.cc" relativeURI="src/UDP_EncDec.cc"/> + <FileResource projectRelativePath="UDP_Types.ttcn" relativeURI="src/UDP_Types.ttcn"/> + <FileResource projectRelativePath="doc/UDP_CNL113420_FS.pdf" relativeURI="doc/UDP_CNL113420_FS.pdf"/> + <FileResource projectRelativePath="doc/UDP_CNL113420_PRI.pdf" relativeURI="doc/UDP_CNL113420_PRI.pdf"/> + <FileResource projectRelativePath="doc/UDP_CNL113420_UG.pdf" relativeURI="doc/UDP_CNL113420_UG.pdf"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/UDP_CNL113420</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/UDPasp_CNL113346.tpd b/regression_test/XML/tpdValidTest/tpdTest/UDPasp_CNL113346.tpd new file mode 100644 index 000000000..e74e599ee --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/UDPasp_CNL113346.tpd @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: UDPasp_CNL113346.tpd + Description: tpd project file + Rev: R7A01 + Prodnr: CNL 113 346 + Updated: 2012-04-02 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>UDPasp_CNL113346</ProjectName> + <ReferencedProjects> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/UDPasp_CNL113346_FS.pdf" relativeURI="doc/UDPasp_CNL113346_FS.pdf"/> + <FileResource projectRelativePath="doc/UDPasp_CNL113346_PRI.pdf" relativeURI="doc/UDPasp_CNL113346_PRI.pdf"/> + <FileResource projectRelativePath="doc/UDPasp_CNL113346_UG.pdf" relativeURI="doc/UDPasp_CNL113346_UG.pdf"/> + <FileResource projectRelativePath="src/UDPasp_PT.cc" relativeURI="src/UDPasp_PT.cc"/> + <FileResource projectRelativePath="src/UDPasp_PT.hh" relativeURI="src/UDPasp_PT.hh"/> + <FileResource projectRelativePath="src/UDPasp_PortType.ttcn" relativeURI="src/UDPasp_PortType.ttcn"/> + <FileResource projectRelativePath="src/UDPasp_Types.ttcn" relativeURI="src/UDPasp_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <targetExecutable>bin/UDPasp_CNL113346</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/UPloadCP_CNL113633.tpd b/regression_test/XML/tpdValidTest/tpdTest/UPloadCP_CNL113633.tpd new file mode 100644 index 000000000..dbe0752eb --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/UPloadCP_CNL113633.tpd @@ -0,0 +1,64 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: UPloadCP_CNL113633.tpd + Description: tpd project file + Rev: R3A01 + Prodnr: CNL 113 633 + Updated: 2012-07-27 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>UPloadCP_CNL113633</ProjectName> + <ReferencedProjects> + <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/UPloadCP_CNL113633_FS.pdf" relativeURI="doc/UPloadCP_CNL113633_FS.pdf"/> + <FileResource projectRelativePath="doc/UPloadCP_CNL113633_PRI.pdf" relativeURI="doc/UPloadCP_CNL113633_PRI.pdf"/> + <FileResource projectRelativePath="doc/UPloadCP_CNL113633_UG.pdf" relativeURI="doc/UPloadCP_CNL113633_UG.pdf"/> + <FileResource projectRelativePath="src/UPloadCP_ProtocolModule.grp" relativeURI="src/UPloadCP_ProtocolModule.grp"/> + <FileResource projectRelativePath="src/UPloadCP_Types.ttcn" relativeURI="src/UPloadCP_Types.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/UPloadCP_CNL113633</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <externalFunction>.*</externalFunction> + <formalParameter>.*</formalParameter> + </NamingCoventions> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/XML_RPC_CNL113488.tpd b/regression_test/XML/tpdValidTest/tpdTest/XML_RPC_CNL113488.tpd new file mode 100644 index 000000000..961c32a17 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/XML_RPC_CNL113488.tpd @@ -0,0 +1,388 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: XML_RPC_CNL113488.tpd + Description: tpd project file + Rev: R3C01 + Prodnr: CNL 113 488 + Updated: 2012-03-07 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>XML_RPC_CNL113488</ProjectName> + <ReferencedProjects> + <ReferencedProject name="XSDASN_CNL113474" projectLocationURI="../XSDASN_CNL113474/XSDASN_CNL113474.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + <FolderResource projectRelativePath="src/ref" relativeURI="src/ref"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/XML_RPC_CNL113488_FS.pdf" relativeURI="doc/XML_RPC_CNL113488_FS.pdf"/> + <FileResource projectRelativePath="doc/XML_RPC_CNL113488_PRI.pdf" relativeURI="doc/XML_RPC_CNL113488_PRI.pdf"/> + <FileResource projectRelativePath="doc/XML_RPC_CNL113488_UG.pdf" relativeURI="doc/XML_RPC_CNL113488_UG.pdf"/> + <FileResource projectRelativePath="src/XML_RPC.asn" relativeURI="src/XML_RPC.asn"/> + <FileResource projectRelativePath="src/XML_RPC_EncDec.cc" relativeURI="src/XML_RPC_EncDec.cc"/> + <FileResource projectRelativePath="src/XML_RPC_ExternalFunctions.ttcn" relativeURI="src/XML_RPC_ExternalFunctions.ttcn"/> + <FileResource projectRelativePath="src/XML_RPC_linux.c" relativeURI="src/XML_RPC_linux.c"/> + <FileResource projectRelativePath="src/XML_RPC_linux64bit.c" relativeURI="src/XML_RPC_linux64bit.c"/> + <FileResource projectRelativePath="src/XML_RPC_oss.h" relativeURI="src/XML_RPC_oss.h"/> + <FileResource projectRelativePath="src/XML_RPC_solaris.c" relativeURI="src/XML_RPC_solaris.c"/> + <FileResource projectRelativePath="src/XML_RPC_solarisx86.c" relativeURI="src/XML_RPC_solarisx86.c"/> + <FileResource projectRelativePath="src/ref/XML-RPC.xsd" relativeURI="src/ref/XML-RPC.xsd"/> + <FileResource projectRelativePath="src/ref/XML_RPC_oss.asn" relativeURI="src/ref/XML_RPC_oss.asn"/> + <FileResource projectRelativePath="src/ref/gen.sh" relativeURI="src/ref/gen.sh"/> + </Files> + <ActiveConfiguration>LINUX64</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/XML_RPC_CNL113488</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>osstoed</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <externalFunction>.*</externalFunction> + <localVariable>.*</localVariable> + <formalParameter>.*</formalParameter> + </NamingCoventions> + <ConfigurationRequirements> + <configurationRequirement> + <projectName>XSDASN_CNL113474</projectName> + <rerquiredConfiguration>XSD_ASN</rerquiredConfiguration> + </configurationRequirement> + </ConfigurationRequirements> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + <FolderResource> + <FolderPath>src/ref</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/XML_RPC_linux.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/XML_RPC_solaris.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/XML_RPC_solarisx86.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="LINUX64"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/XML_RPC_CNL113488</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>osstoed</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <externalFunction>.*</externalFunction> + <localVariable>.*</localVariable> + <formalParameter>.*</formalParameter> + </NamingCoventions> + <ConfigurationRequirements> + <configurationRequirement> + <projectName>XSDASN_CNL113474</projectName> + <rerquiredConfiguration>XSD_ASN</rerquiredConfiguration> + </configurationRequirement> + </ConfigurationRequirements> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + <FolderResource> + <FolderPath>src/ref</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/XML_RPC_linux.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/XML_RPC_solaris.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/XML_RPC_solarisx86.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="LINUX"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/XML_RPC_CNL113488</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>osstoed</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <externalFunction>.*</externalFunction> + <localVariable>.*</localVariable> + <formalParameter>.*</formalParameter> + </NamingCoventions> + <ConfigurationRequirements> + <configurationRequirement> + <projectName>XSDASN_CNL113474</projectName> + <rerquiredConfiguration>XSD_ASN</rerquiredConfiguration> + </configurationRequirement> + </ConfigurationRequirements> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + <FolderResource> + <FolderPath>src/ref</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/XML_RPC_linux64bit.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/XML_RPC_solaris.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/XML_RPC_solarisx86.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="SOLARIS_SPARC"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/XML_RPC_CNL113488</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>osstoed</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <externalFunction>.*</externalFunction> + <localVariable>.*</localVariable> + <formalParameter>.*</formalParameter> + </NamingCoventions> + <ConfigurationRequirements> + <configurationRequirement> + <projectName>XSDASN_CNL113474</projectName> + <rerquiredConfiguration>XSD_ASN</rerquiredConfiguration> + </configurationRequirement> + </ConfigurationRequirements> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + <FolderResource> + <FolderPath>src/ref</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/XML_RPC_linux.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/XML_RPC_linux64bit.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/XML_RPC_solarisx86.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="SOLARIS_INTEL"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/XML_RPC_CNL113488</targetExecutable> + <preprocessorIncludes> + <listItem>[OSS_DIR]/include</listItem> + </preprocessorIncludes> + <linkerLibraries> + <listItem>osstoed</listItem> + </linkerLibraries> + <linkerLibrarySearchPath> + <listItem>[OSS_DIR]/lib</listItem> + </linkerLibrarySearchPath> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <externalFunction>.*</externalFunction> + <localVariable>.*</localVariable> + <formalParameter>.*</formalParameter> + </NamingCoventions> + <ConfigurationRequirements> + <configurationRequirement> + <projectName>XSDASN_CNL113474</projectName> + <rerquiredConfiguration>XSD_ASN</rerquiredConfiguration> + </configurationRequirement> + </ConfigurationRequirements> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + <FolderResource> + <FolderPath>src/ref</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/XML_RPC_linux.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/XML_RPC_linux64bit.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/XML_RPC_solaris.c</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/XSDASN_CNL113474.tpd b/regression_test/XML/tpdValidTest/tpdTest/XSDASN_CNL113474.tpd new file mode 100644 index 000000000..47eb14744 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/XSDASN_CNL113474.tpd @@ -0,0 +1,144 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: XSDASN_CNL113474.tpd + Description: tpd project file + Rev: R4A01 + Prodnr: CNL 113 474 + Updated: 2012-02-07 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>XSDASN_CNL113474</ProjectName> + <Folders> + <FolderResource projectRelativePath="doc" relativeURI="doc"/> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="doc/XSDASN_CNL113474_FS.pdf" relativeURI="doc/XSDASN_CNL113474_FS.pdf"/> + <FileResource projectRelativePath="doc/XSDASN_CNL113474_PRI.pdf" relativeURI="doc/XSDASN_CNL113474_PRI.pdf"/> + <FileResource projectRelativePath="doc/XSDASN_CNL113474_UG.pdf" relativeURI="doc/XSDASN_CNL113474_UG.pdf"/> + <FileResource projectRelativePath="src/XSD.asn" relativeURI="src/XSD.asn"/> + <FileResource projectRelativePath="src/XSD_ASN.asn" relativeURI="src/XSD_ASN.asn"/> + <FileResource projectRelativePath="src/XSD_oss.asn" relativeURI="src/XSD_oss.asn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/XSDASN_CNL113474</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/XSD.asn</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/XSD_oss.asn</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="XSD_ASN"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/XSDASN_CNL113474</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/XSD.asn</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/XSD_oss.asn</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + <Configuration name="XSD"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/XSDASN_CNL113474</targetExecutable> + <buildLevel>Level 3 - Creating object files with dependency update</buildLevel> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + <FolderProperties> + <FolderResource> + <FolderPath>doc</FolderPath> + <FolderProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FolderProperties> + </FolderResource> + </FolderProperties> + <FileProperties> + <FileResource> + <FilePath>src/XSD_ASN.asn</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + <FileResource> + <FilePath>src/XSD_oss.asn</FilePath> + <FileProperties> + <ExcludeFromBuild>true</ExcludeFromBuild> + </FileProperties> + </FileResource> + </FileProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/XTDP_CNL113663.tpd b/regression_test/XML/tpdValidTest/tpdTest/XTDP_CNL113663.tpd new file mode 100644 index 000000000..11a09e97f --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/XTDP_CNL113663.tpd @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: XTDP_CNL113663.tpd + Description: tpd project file + Rev: R7A02 + Prodnr: CNL 113 663 + Updated: 2013-03-25 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>XTDP_CNL113663</ProjectName> + <Files> + <FileResource projectRelativePath="UsefulTtcn3Types.ttcn" relativeURI="src/generated_files/UsefulTtcn3Types.ttcn"/> + <FileResource projectRelativePath="XSD.ttcn" relativeURI="src/generated_files/XSD.ttcn"/> + <FileResource projectRelativePath="XTDP_EncDecFunctions.ttcn" relativeURI="src/XTDP_EncDecFunctions.ttcn"/> + <FileResource projectRelativePath="ttcn_ericsson_se_protocolModules_xtdp_xtdl.ttcn" relativeURI="src/generated_files/ttcn_ericsson_se_protocolModules_xtdp_xtdl.ttcn"/> + <FileResource projectRelativePath="ttcn_ericsson_se_protocolModules_xtdp_xtdp.ttcn" relativeURI="src/generated_files/ttcn_ericsson_se_protocolModules_xtdp_xtdp.ttcn"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <targetExecutable>bin/XTDP</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdTest/XTDPasp_CNL113494.tpd b/regression_test/XML/tpdValidTest/tpdTest/XTDPasp_CNL113494.tpd new file mode 100644 index 000000000..7d97196f9 --- /dev/null +++ b/regression_test/XML/tpdValidTest/tpdTest/XTDPasp_CNL113494.tpd @@ -0,0 +1,64 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2000-2015 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 + + + File: XTDPasp_CNL113494.tpd + Description: tpd project file + Rev: R7A01 + Prodnr: CNL 113 494 + Updated: 2012-03-06 + Contact: http://ttcn.ericsson.se + + --> +<TITAN_Project_File_Information version="1.0"> + <ProjectName>XTDPasp_CNL113494</ProjectName> + <ReferencedProjects> + <ReferencedProject name="Abstract_Socket_CNL113384" projectLocationURI="../Common_Components/Abstract_Socket_CNL113384/Abstract_Socket_CNL113384.tpd"/> + <ReferencedProject name="XSDASN_CNL113474" projectLocationURI="../../ProtocolModules/XSDASN_CNL113474/XSDASN_CNL113474.tpd"/> + </ReferencedProjects> + <Folders> + <FolderResource projectRelativePath="src" relativeURI="src"/> + </Folders> + <Files> + <FileResource projectRelativePath="src/README.txt" relativeURI="src/README.txt"/> + <FileResource projectRelativePath="src/XTDP-EXER-EncDec.cc" relativeURI="src/XTDP-EXER-EncDec.cc"/> + <FileResource projectRelativePath="src/XTDP_Images.ttcn" relativeURI="src/XTDP_Images.ttcn"/> + <FileResource projectRelativePath="src/XTDP_PDU_Defs.asn" relativeURI="src/XTDP_PDU_Defs.asn"/> + <FileResource projectRelativePath="src/XTDPasp.grp" relativeURI="src/XTDPasp.grp"/> + <FileResource projectRelativePath="src/XTDPasp_PT.cc" relativeURI="src/XTDPasp_PT.cc"/> + <FileResource projectRelativePath="src/XTDPasp_PT.hh" relativeURI="src/XTDPasp_PT.hh"/> + <FileResource projectRelativePath="src/XTDPasp_PortType.ttcn" relativeURI="src/XTDPasp_PortType.ttcn"/> + <FileResource projectRelativePath="src/XTDPasp_Types.ttcn" relativeURI="src/XTDPasp_Types.ttcn"/> + <FileResource projectRelativePath="src/XUL_XTDL.asn" relativeURI="src/XUL_XTDL.asn"/> + <FileResource projectRelativePath="src/lex.xtdp.c" relativeURI="src/lex.xtdp.c"/> + <FileResource projectRelativePath="src/xtdp.l" relativeURI="src/xtdp.l"/> + </Files> + <ActiveConfiguration>Default</ActiveConfiguration> + <Configurations> + <Configuration name="Default"> + <ProjectProperties> + <MakefileSettings> + <generateInternalMakefile>true</generateInternalMakefile> + <GNUMake>true</GNUMake> + <incrementalDependencyRefresh>true</incrementalDependencyRefresh> + <targetExecutable>bin/XTDPasp_CNL113494</targetExecutable> + </MakefileSettings> + <LocalBuildSettings> + <workingDirectory>bin</workingDirectory> + </LocalBuildSettings> + <NamingCoventions> + <enableProjectSpecificSettings>true</enableProjectSpecificSettings> + <globalConstant>c[g]?_.*</globalConstant> + <externalFunction>.*</externalFunction> + <formalParameter>.*</formalParameter> + </NamingCoventions> + </ProjectProperties> + </Configuration> + </Configurations> +</TITAN_Project_File_Information> diff --git a/regression_test/XML/tpdValidTest/tpdValidTest.sh b/regression_test/XML/tpdValidTest/tpdValidTest.sh index e5876700a..22640f719 100755 --- a/regression_test/XML/tpdValidTest/tpdValidTest.sh +++ b/regression_test/XML/tpdValidTest/tpdValidTest.sh @@ -1,13 +1,13 @@ #!/bin/bash ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 ############################################################################### -TPD_DIR="$WORKSPACE/titan_eclipse/Semantic_Analizer_Tests/tpdTest/" +TPD_DIR="./tpdTest/" XSD_DIR="$TTCN3_DIR/etc/xsd/" XSD="TPD.xsd" diff --git a/regression_test/XML/xsdConverter/Examples/Example1.xsd b/regression_test/XML/xsdConverter/Examples/Example1.xsd index a3232a72d..6aee03c09 100644 --- a/regression_test/XML/xsdConverter/Examples/Example1.xsd +++ b/regression_test/XML/xsdConverter/Examples/Example1.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/xsdConverter/Examples/Example2.xsd b/regression_test/XML/xsdConverter/Examples/Example2.xsd index 7a3a711f1..890015240 100644 --- a/regression_test/XML/xsdConverter/Examples/Example2.xsd +++ b/regression_test/XML/xsdConverter/Examples/Example2.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/xsdConverter/Examples/Example3.xsd b/regression_test/XML/xsdConverter/Examples/Example3.xsd index c5eaf79d0..a9852e6ab 100644 --- a/regression_test/XML/xsdConverter/Examples/Example3.xsd +++ b/regression_test/XML/xsdConverter/Examples/Example3.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/xsdConverter/Examples/Example4.xsd b/regression_test/XML/xsdConverter/Examples/Example4.xsd index 4334c9d72..dfbb72472 100644 --- a/regression_test/XML/xsdConverter/Examples/Example4.xsd +++ b/regression_test/XML/xsdConverter/Examples/Example4.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/xsdConverter/Examples/Examples.ttcn b/regression_test/XML/xsdConverter/Examples/Examples.ttcn index 45acd7bdd..a40e53d93 100644 --- a/regression_test/XML/xsdConverter/Examples/Examples.ttcn +++ b/regression_test/XML/xsdConverter/Examples/Examples.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/xsdConverter/Examples/Makefile b/regression_test/XML/xsdConverter/Examples/Makefile index cea7c8cb5..ad425fbdf 100644 --- a/regression_test/XML/xsdConverter/Examples/Makefile +++ b/regression_test/XML/xsdConverter/Examples/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/xsdConverter/Examples/chapter_5_1_1.xsd b/regression_test/XML/xsdConverter/Examples/chapter_5_1_1.xsd index 7dc6b6850..39c912175 100644 --- a/regression_test/XML/xsdConverter/Examples/chapter_5_1_1.xsd +++ b/regression_test/XML/xsdConverter/Examples/chapter_5_1_1.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/xsdConverter/Examples/chapter_5_1_2.xsd b/regression_test/XML/xsdConverter/Examples/chapter_5_1_2.xsd index accae66ec..1956abe67 100644 --- a/regression_test/XML/xsdConverter/Examples/chapter_5_1_2.xsd +++ b/regression_test/XML/xsdConverter/Examples/chapter_5_1_2.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/xsdConverter/Examples/chapter_5_1_3.xsd b/regression_test/XML/xsdConverter/Examples/chapter_5_1_3.xsd index ac4b397b3..4959823aa 100644 --- a/regression_test/XML/xsdConverter/Examples/chapter_5_1_3.xsd +++ b/regression_test/XML/xsdConverter/Examples/chapter_5_1_3.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/xsdConverter/Examples/chapter_5_1_4.xsd b/regression_test/XML/xsdConverter/Examples/chapter_5_1_4.xsd index ff71fce71..d355f3b24 100644 --- a/regression_test/XML/xsdConverter/Examples/chapter_5_1_4.xsd +++ b/regression_test/XML/xsdConverter/Examples/chapter_5_1_4.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/xsdConverter/Examples/chapter_5_1_5.xsd b/regression_test/XML/xsdConverter/Examples/chapter_5_1_5.xsd index bbbfd39d0..b07de7790 100644 --- a/regression_test/XML/xsdConverter/Examples/chapter_5_1_5.xsd +++ b/regression_test/XML/xsdConverter/Examples/chapter_5_1_5.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/xsdConverter/Examples/chapter_5_1_6.xsd b/regression_test/XML/xsdConverter/Examples/chapter_5_1_6.xsd index dd1fa9e90..33f6f5317 100644 --- a/regression_test/XML/xsdConverter/Examples/chapter_5_1_6.xsd +++ b/regression_test/XML/xsdConverter/Examples/chapter_5_1_6.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/xsdConverter/Examples/chapter_5_2_1.xsd b/regression_test/XML/xsdConverter/Examples/chapter_5_2_1.xsd index 933b6d7ae..7c0e7064c 100644 --- a/regression_test/XML/xsdConverter/Examples/chapter_5_2_1.xsd +++ b/regression_test/XML/xsdConverter/Examples/chapter_5_2_1.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/xsdConverter/Examples/chapter_5_2_2.xsd b/regression_test/XML/xsdConverter/Examples/chapter_5_2_2.xsd index daa9b348c..45b4f54c4 100644 --- a/regression_test/XML/xsdConverter/Examples/chapter_5_2_2.xsd +++ b/regression_test/XML/xsdConverter/Examples/chapter_5_2_2.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/xsdConverter/Examples/chapter_5_2_3.xsd b/regression_test/XML/xsdConverter/Examples/chapter_5_2_3.xsd index 32bde2689..e3623c1c1 100644 --- a/regression_test/XML/xsdConverter/Examples/chapter_5_2_3.xsd +++ b/regression_test/XML/xsdConverter/Examples/chapter_5_2_3.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/xsdConverter/Examples/chapter_6.xsd b/regression_test/XML/xsdConverter/Examples/chapter_6.xsd index f1197553a..bd6eef51c 100644 --- a/regression_test/XML/xsdConverter/Examples/chapter_6.xsd +++ b/regression_test/XML/xsdConverter/Examples/chapter_6.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/xsdConverter/Examples/chapter_7_1.xsd b/regression_test/XML/xsdConverter/Examples/chapter_7_1.xsd index e3ed7c85d..bc6dec38a 100644 --- a/regression_test/XML/xsdConverter/Examples/chapter_7_1.xsd +++ b/regression_test/XML/xsdConverter/Examples/chapter_7_1.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/xsdConverter/Examples/chapter_7_3.xsd b/regression_test/XML/xsdConverter/Examples/chapter_7_3.xsd index 2950f5430..2bea0880d 100644 --- a/regression_test/XML/xsdConverter/Examples/chapter_7_3.xsd +++ b/regression_test/XML/xsdConverter/Examples/chapter_7_3.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/xsdConverter/Examples/chapter_7_4.xsd b/regression_test/XML/xsdConverter/Examples/chapter_7_4.xsd index 34b06d99e..a05541f4d 100644 --- a/regression_test/XML/xsdConverter/Examples/chapter_7_4.xsd +++ b/regression_test/XML/xsdConverter/Examples/chapter_7_4.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/xsdConverter/Examples/chapter_7_5.xsd b/regression_test/XML/xsdConverter/Examples/chapter_7_5.xsd index d6687ca99..c7c9c40d9 100644 --- a/regression_test/XML/xsdConverter/Examples/chapter_7_5.xsd +++ b/regression_test/XML/xsdConverter/Examples/chapter_7_5.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/xsdConverter/Examples/chapter_7_6.xsd b/regression_test/XML/xsdConverter/Examples/chapter_7_6.xsd index 3334a7d33..b2c0744bc 100644 --- a/regression_test/XML/xsdConverter/Examples/chapter_7_6.xsd +++ b/regression_test/XML/xsdConverter/Examples/chapter_7_6.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/xsdConverter/Examples/chapter_7_7.xsd b/regression_test/XML/xsdConverter/Examples/chapter_7_7.xsd index 650827115..5842dfe90 100644 --- a/regression_test/XML/xsdConverter/Examples/chapter_7_7.xsd +++ b/regression_test/XML/xsdConverter/Examples/chapter_7_7.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/xsdConverter/Examples/chapter_7_8.xsd b/regression_test/XML/xsdConverter/Examples/chapter_7_8.xsd index 578a23505..befd076f4 100644 --- a/regression_test/XML/xsdConverter/Examples/chapter_7_8.xsd +++ b/regression_test/XML/xsdConverter/Examples/chapter_7_8.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/xsdConverter/Examples/chapter_7_9.xsd b/regression_test/XML/xsdConverter/Examples/chapter_7_9.xsd index 7bee010ad..3e9a83b71 100644 --- a/regression_test/XML/xsdConverter/Examples/chapter_7_9.xsd +++ b/regression_test/XML/xsdConverter/Examples/chapter_7_9.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/xsdConverter/Examples/config.cfg b/regression_test/XML/xsdConverter/Examples/config.cfg index 2b7a4c289..b2fd09a33 100644 --- a/regression_test/XML/xsdConverter/Examples/config.cfg +++ b/regression_test/XML/xsdConverter/Examples/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/xsdConverter/HN21072/HN21072Test.ttcn b/regression_test/XML/xsdConverter/HN21072/HN21072Test.ttcn index ae7c395b2..e8704358a 100644 --- a/regression_test/XML/xsdConverter/HN21072/HN21072Test.ttcn +++ b/regression_test/XML/xsdConverter/HN21072/HN21072Test.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/xsdConverter/HN21072/Makefile b/regression_test/XML/xsdConverter/HN21072/Makefile index 28b317563..5f61fbadd 100644 --- a/regression_test/XML/xsdConverter/HN21072/Makefile +++ b/regression_test/XML/xsdConverter/HN21072/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/xsdConverter/HN21072/W3-WSDL-chop.xsd b/regression_test/XML/xsdConverter/HN21072/W3-WSDL-chop.xsd index 06a964374..856843cc4 100644 --- a/regression_test/XML/xsdConverter/HN21072/W3-WSDL-chop.xsd +++ b/regression_test/XML/xsdConverter/HN21072/W3-WSDL-chop.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/xsdConverter/HN21072/log2xml.pl b/regression_test/XML/xsdConverter/HN21072/log2xml.pl index 94e71e162..7da89d233 100644 --- a/regression_test/XML/xsdConverter/HN21072/log2xml.pl +++ b/regression_test/XML/xsdConverter/HN21072/log2xml.pl @@ -1,6 +1,6 @@ #!/usr/bin/perl -wln ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/xsdConverter/HN65402/Makefile b/regression_test/XML/xsdConverter/HN65402/Makefile index 06b7b4389..8f72a4001 100644 --- a/regression_test/XML/xsdConverter/HN65402/Makefile +++ b/regression_test/XML/xsdConverter/HN65402/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/xsdConverter/HN65402/jellystone.ttcn b/regression_test/XML/xsdConverter/HN65402/jellystone.ttcn index 114010c02..c570255e3 100644 --- a/regression_test/XML/xsdConverter/HN65402/jellystone.ttcn +++ b/regression_test/XML/xsdConverter/HN65402/jellystone.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/xsdConverter/HN65402/jellystone.xsd b/regression_test/XML/xsdConverter/HN65402/jellystone.xsd index 23d4c291a..3f13f0b03 100644 --- a/regression_test/XML/xsdConverter/HN65402/jellystone.xsd +++ b/regression_test/XML/xsdConverter/HN65402/jellystone.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/xsdConverter/HO12250/HO12250.xsd b/regression_test/XML/xsdConverter/HO12250/HO12250.xsd index d03fb25c2..ba9402725 100644 --- a/regression_test/XML/xsdConverter/HO12250/HO12250.xsd +++ b/regression_test/XML/xsdConverter/HO12250/HO12250.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/xsdConverter/HO12250/Makefile b/regression_test/XML/xsdConverter/HO12250/Makefile index 2244b6a04..5b0aa8aa9 100644 --- a/regression_test/XML/xsdConverter/HO12250/Makefile +++ b/regression_test/XML/xsdConverter/HO12250/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/xsdConverter/HO16426/Makefile b/regression_test/XML/xsdConverter/HO16426/Makefile index 6f085fb9f..a52b60351 100644 --- a/regression_test/XML/xsdConverter/HO16426/Makefile +++ b/regression_test/XML/xsdConverter/HO16426/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/xsdConverter/HO16426/diversion.ttcn b/regression_test/XML/xsdConverter/HO16426/diversion.ttcn index 7e31fe52b..4cea6c679 100644 --- a/regression_test/XML/xsdConverter/HO16426/diversion.ttcn +++ b/regression_test/XML/xsdConverter/HO16426/diversion.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/xsdConverter/HO16426/diversion.xsd b/regression_test/XML/xsdConverter/HO16426/diversion.xsd index f42894e16..9b1f65e36 100644 --- a/regression_test/XML/xsdConverter/HO16426/diversion.xsd +++ b/regression_test/XML/xsdConverter/HO16426/diversion.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/xsdConverter/HO18151/HO18151.ttcn b/regression_test/XML/xsdConverter/HO18151/HO18151.ttcn index 7b722ee1e..bdcbb0d48 100644 --- a/regression_test/XML/xsdConverter/HO18151/HO18151.ttcn +++ b/regression_test/XML/xsdConverter/HO18151/HO18151.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/xsdConverter/HO18151/HO18151.xsd b/regression_test/XML/xsdConverter/HO18151/HO18151.xsd index 6dca64e87..5139f4214 100644 --- a/regression_test/XML/xsdConverter/HO18151/HO18151.xsd +++ b/regression_test/XML/xsdConverter/HO18151/HO18151.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/xsdConverter/HO18151/Makefile b/regression_test/XML/xsdConverter/HO18151/Makefile index 6b79abeb4..2bbba257a 100644 --- a/regression_test/XML/xsdConverter/HO18151/Makefile +++ b/regression_test/XML/xsdConverter/HO18151/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/xsdConverter/HO21968/HO21968.ttcn b/regression_test/XML/xsdConverter/HO21968/HO21968.ttcn index 13bc7372f..4b6bb03d1 100644 --- a/regression_test/XML/xsdConverter/HO21968/HO21968.ttcn +++ b/regression_test/XML/xsdConverter/HO21968/HO21968.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/xsdConverter/HO21968/HO21968noprefix.xsd b/regression_test/XML/xsdConverter/HO21968/HO21968noprefix.xsd index 56fd80b68..af7dad6c2 100644 --- a/regression_test/XML/xsdConverter/HO21968/HO21968noprefix.xsd +++ b/regression_test/XML/xsdConverter/HO21968/HO21968noprefix.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/xsdConverter/HO21968/HO21968prefix.xsd b/regression_test/XML/xsdConverter/HO21968/HO21968prefix.xsd index 6d0bf5f54..4e1ca2947 100644 --- a/regression_test/XML/xsdConverter/HO21968/HO21968prefix.xsd +++ b/regression_test/XML/xsdConverter/HO21968/HO21968prefix.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/xsdConverter/HO21968/Makefile b/regression_test/XML/xsdConverter/HO21968/Makefile index 24dd6f7c2..c4fb57391 100644 --- a/regression_test/XML/xsdConverter/HO21968/Makefile +++ b/regression_test/XML/xsdConverter/HO21968/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/xsdConverter/HQ48576/HQ48576Test.ttcn b/regression_test/XML/xsdConverter/HQ48576/HQ48576Test.ttcn index 7f77db3a2..ff6f35947 100644 --- a/regression_test/XML/xsdConverter/HQ48576/HQ48576Test.ttcn +++ b/regression_test/XML/xsdConverter/HQ48576/HQ48576Test.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/xsdConverter/HQ48576/Makefile b/regression_test/XML/xsdConverter/HQ48576/Makefile index efb95b352..8a9d9857a 100644 --- a/regression_test/XML/xsdConverter/HQ48576/Makefile +++ b/regression_test/XML/xsdConverter/HQ48576/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/xsdConverter/HQ48576/hlrla_types.xsd b/regression_test/XML/xsdConverter/HQ48576/hlrla_types.xsd index 31942e8ed..af55f9eed 100644 --- a/regression_test/XML/xsdConverter/HQ48576/hlrla_types.xsd +++ b/regression_test/XML/xsdConverter/HQ48576/hlrla_types.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/xsdConverter/Makefile b/regression_test/XML/xsdConverter/Makefile index a66f4ccae..d904c8b98 100644 --- a/regression_test/XML/xsdConverter/Makefile +++ b/regression_test/XML/xsdConverter/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/XML/xsdConverter/Makefile.converter b/regression_test/XML/xsdConverter/Makefile.converter index 5b8d81e08..a91f7f88b 100644 --- a/regression_test/XML/xsdConverter/Makefile.converter +++ b/regression_test/XML/xsdConverter/Makefile.converter @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/acceptance_test/Fibonacci/Fibonacci.cfg b/regression_test/acceptance_test/Fibonacci/Fibonacci.cfg index cd262f031..6eff89065 100644 --- a/regression_test/acceptance_test/Fibonacci/Fibonacci.cfg +++ b/regression_test/acceptance_test/Fibonacci/Fibonacci.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/acceptance_test/Fibonacci/Fibonacci.ttcn b/regression_test/acceptance_test/Fibonacci/Fibonacci.ttcn index 7a9269e68..fea5ab43f 100644 --- a/regression_test/acceptance_test/Fibonacci/Fibonacci.ttcn +++ b/regression_test/acceptance_test/Fibonacci/Fibonacci.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/acceptance_test/Fibonacci/Makefile b/regression_test/acceptance_test/Fibonacci/Makefile index 6bb7c9cd4..d1562ea1a 100644 --- a/regression_test/acceptance_test/Fibonacci/Makefile +++ b/regression_test/acceptance_test/Fibonacci/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/acceptance_test/chinese/Makefile b/regression_test/acceptance_test/chinese/Makefile index 69c962773..2772c5182 100644 --- a/regression_test/acceptance_test/chinese/Makefile +++ b/regression_test/acceptance_test/chinese/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/acceptance_test/chinese/chinese.ttcn b/regression_test/acceptance_test/chinese/chinese.ttcn index 08e8155c1..aa886a3aa 100644 --- a/regression_test/acceptance_test/chinese/chinese.ttcn +++ b/regression_test/acceptance_test/chinese/chinese.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/acceptance_test/comptest/Makefile b/regression_test/acceptance_test/comptest/Makefile index e853439f4..b39d2fcd8 100644 --- a/regression_test/acceptance_test/comptest/Makefile +++ b/regression_test/acceptance_test/comptest/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/acceptance_test/comptest/comptest.ttcn b/regression_test/acceptance_test/comptest/comptest.ttcn index c26c99fb1..9cc69437b 100644 --- a/regression_test/acceptance_test/comptest/comptest.ttcn +++ b/regression_test/acceptance_test/comptest/comptest.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/acceptance_test/testerlanc/Makefile b/regression_test/acceptance_test/testerlanc/Makefile index 9e222b814..72bd5233c 100644 --- a/regression_test/acceptance_test/testerlanc/Makefile +++ b/regression_test/acceptance_test/testerlanc/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/acceptance_test/testerlanc/testerlanc.ttcn b/regression_test/acceptance_test/testerlanc/testerlanc.ttcn index bef46a78d..1de319f85 100644 --- a/regression_test/acceptance_test/testerlanc/testerlanc.ttcn +++ b/regression_test/acceptance_test/testerlanc/testerlanc.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/all_from/Makefile b/regression_test/all_from/Makefile index c41f4b497..1720c4ca0 100644 --- a/regression_test/all_from/Makefile +++ b/regression_test/all_from/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/all_from/all_from.ttcn b/regression_test/all_from/all_from.ttcn index 66a05deee..a372bfda9 100644 --- a/regression_test/all_from/all_from.ttcn +++ b/regression_test/all_from/all_from.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/all_from/all_from_complement.ttcn b/regression_test/all_from/all_from_complement.ttcn index 54bb0564d..706e7694c 100644 --- a/regression_test/all_from/all_from_complement.ttcn +++ b/regression_test/all_from/all_from_complement.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/all_from/all_from_permutation.ttcn b/regression_test/all_from/all_from_permutation.ttcn index 68bbffeb7..5fbf5dd08 100644 --- a/regression_test/all_from/all_from_permutation.ttcn +++ b/regression_test/all_from/all_from_permutation.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/all_from/all_from_subrefs.ttcn b/regression_test/all_from/all_from_subrefs.ttcn new file mode 100644 index 000000000..e08b91c3f --- /dev/null +++ b/regression_test/all_from/all_from_subrefs.ttcn @@ -0,0 +1,284 @@ +/****************************************************************************** + * Copyright (c) 2000-2015 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 + ******************************************************************************/ + +module all_from_subrefs { + +// in these tests the targets of 'all from' contain subreferences (array indexes and/or fields names) + +import from types all; + +// source templates and constants +template MyRecord t_rec := { i := omit, roi := { 1, 3, 5 }, soi := { 2, 4, 6 } }; +template RoRoI t_roroi := { { 1, 2, 3 }, { 4, 5 }, { 6, 7, 8 } }; +template RoSoI t_rosoi(in integer x) := { { 10, 20, 30 }, { x, x * 2 } }; +const RoMyRec c_rorec := { { i := omit, roi := { -1, -3, -5 }, soi := { -2, -4, -6 } }, { i := 0, roi := omit, soi := { -10, -20, -30 } } }; +const RoMyUnion c_rouni := { { roi := { 11, 22, 33 } }, { soi := { -11, -22, -33 } } }; +const MyUnion c_uni := { roi := { 7, 77, 777 } }; + +// just 'all from' +template integer t_sr1 := ( 0, all from t_rec.soi, 8, 10 ); +template integer t_sr1_exp := ( 0, 2, 4, 6, 8, 10 ); + +template integer t_sr2 := ( all from t_rec.roi, all from t_roroi[2] ); +template integer t_sr2_exp := ( 1, 3, 5, 6, 7, 8 ); + +template integer t_sr3 := ( all from t_rosoi(100)[0], all from c_rorec[1].soi ); +template integer t_sr3_exp := ( 10, 20, 30, -10, -20, -30 ); + +template integer t_sr4 := ( 0, all from c_rouni[0].roi, 44 ); +template integer t_sr4_exp := ( 0, 11, 22, 33, 44 ); + +template integer t_sr5 := ( all from c_uni.roi ); +template integer t_sr5_exp := ( 7, 77, 777 ); + +testcase tc_all_from_subrefs() runs on A +{ + if (log2str(t_sr1) != log2str(t_sr1_exp)) { + setverdict(fail, "Expected: ", t_sr1_exp, ", got: ", t_sr1); + } + if (log2str(t_sr2) != log2str(t_sr2_exp)) { + setverdict(fail, "Expected: ", t_sr2_exp, ", got: ", t_sr2); + } + if (log2str(t_sr3) != log2str(t_sr3_exp)) { + setverdict(fail, "Expected: ", t_sr3_exp, ", got: ", t_sr3); + } + if (log2str(t_sr4) != log2str(t_sr4_exp)) { + setverdict(fail, "Expected: ", t_sr4_exp, ", got: ", t_sr4); + } + if (log2str(t_sr5) != log2str(t_sr5_exp)) { + setverdict(fail, "Expected: ", t_sr5_exp, ", got: ", t_sr5); + } + setverdict(pass); +} + +// permutation + all from +template RoI t_sr_perm1 := { permutation ( all from t_rec.roi ) }; +template RoI t_sr_perm1_exp := { permutation ( 1, 3, 5 ) }; + +template RoI t_sr_perm2 := { permutation ( 3, all from t_roroi[1], all from t_roroi[2] ) }; +template RoI t_sr_perm2_exp := { permutation ( 3, 4, 5, 6, 7, 8 ) }; + +template RoI t_sr_perm3 := { permutation ( all from c_rorec[0].roi, all from c_rorec[0].soi ) }; +template RoI t_sr_perm3_exp := { permutation ( -1, -3, -5, -2, -4, -6 ) }; + +testcase tc_all_from_subrefs_permutation() runs on A +{ + if (log2str(t_sr_perm1) != log2str(t_sr_perm1_exp)) { + setverdict(fail, "Expected: ", t_sr_perm1_exp, ", got: ", t_sr_perm1); + } + if (log2str(t_sr_perm2) != log2str(t_sr_perm2_exp)) { + setverdict(fail, "Expected: ", t_sr_perm2_exp, ", got: ", t_sr_perm2); + } + if (log2str(t_sr_perm3) != log2str(t_sr_perm3_exp)) { + setverdict(fail, "Expected: ", t_sr_perm3_exp, ", got: ", t_sr_perm3); + } + setverdict(pass); +} + +// subset + all from +template SoI t_sr_sub1 := subset ( all from c_rouni[1].soi ); +template SoI t_sr_sub1_exp := subset ( -11, -22, -33 ); + +template SoI t_sr_sub2 := subset ( all from t_rec.soi, 2, all from t_roroi[0] ); +template SoI t_sr_sub2_exp := subset ( 2, 4, 6, 2, 1, 2, 3 ); + +template SoI t_sr_sub3 := subset ( all from t_rosoi(100)[1], all from c_rorec[0].roi, all from c_rorec[0].roi ); +template SoI t_sr_sub3_exp := subset ( 100, 200, -1, -3, -5, -1, -3, -5 ); + +testcase tc_all_from_subrefs_subset() runs on A +{ + if (log2str(t_sr_sub1) != log2str(t_sr_sub1_exp)) { + setverdict(fail, "Expected: ", t_sr_sub1_exp, ", got: ", t_sr_sub1); + } + if (log2str(t_sr_sub2) != log2str(t_sr_sub2_exp)) { + setverdict(fail, "Expected: ", t_sr_sub2_exp, ", got: ", t_sr_sub2); + } + if (log2str(t_sr_sub3) != log2str(t_sr_sub3_exp)) { + setverdict(fail, "Expected: ", t_sr_sub3_exp, ", got: ", t_sr_sub3); + } + setverdict(pass); +} + +// superset + all from +template SoI t_sr_super1 := superset ( all from c_rouni[0].roi ); +template SoI t_sr_super1_exp := superset ( 11, 22, 33 ); + +template SoI t_sr_super2 := superset ( all from t_rec.roi, 2, all from t_roroi[1] ); +template SoI t_sr_super2_exp := superset ( 1, 3, 5, 2, 4, 5 ); + +template SoI t_sr_super3 := superset ( all from t_rosoi(100)[0], all from c_rorec[1].soi, all from c_rorec[1].soi ); +template SoI t_sr_super3_exp := superset ( 10, 20, 30, -10, -20, -30, -10, -20, -30 ); + +testcase tc_all_from_subrefs_superset() runs on A +{ + if (log2str(t_sr_super1) != log2str(t_sr_super1_exp)) { + setverdict(fail, "Expected: ", t_sr_super1_exp, ", got: ", t_sr_super1); + } + if (log2str(t_sr_super2) != log2str(t_sr_super2_exp)) { + setverdict(fail, "Expected: ", t_sr_super2_exp, ", got: ", t_sr_super2); + } + if (log2str(t_sr_super3) != log2str(t_sr_super3_exp)) { + setverdict(fail, "Expected: ", t_sr_super3_exp, ", got: ", t_sr_super3); + } + setverdict(pass); +} + +// all from + variables / template variables +testcase tc_all_from_subrefs_var() runs on A +{ + // source variables + var MyRecord v_rec := { i := omit, roi := { 2, 1, 0 }, soi := { 7, 1, 5 } }; + var RoSoI v_rosoi := { { 2, 4, 8, 16 } }; + var template RoMyUnion vt_rouni := { { soi := { 1, 1, 1 } }, { soi := { -1, -3, -5 } } }; + var template RoRoI vt_roroi := { { 10, 11 }, { 20, 26, 29 }, { 31, 33 } }; + + // templates with 'all from' + var template integer vt_sr := ( 0, all from v_rec.soi, all from vt_roroi[1] ); + var template integer vt_sr_exp := ( 0, 7, 1, 5, 20, 26, 29 ); + var template RoI vt_sr_perm := { permutation ( 3, all from v_rec.roi, all from vt_rouni[1].soi ) }; + var template RoI vt_sr_perm_exp := { permutation ( 3, 2, 1, 0, -1, -3, -5 ) }; + var template SoI vt_sr_sub := subset ( all from v_rosoi[0], 6, all from vt_roroi[0] ); + var template SoI vt_sr_sub_exp := subset ( 2, 4, 8, 16, 6, 10, 11 ); + var template SoI vt_sr_super := superset ( all from vt_rouni[0].soi, all from vt_rouni[0].soi ); + var template SoI vt_sr_super_exp := superset ( 1, 1, 1, 1, 1, 1 ); + + // test templates with 'all from' against the expected templates + if (log2str(vt_sr) != log2str(vt_sr_exp)) { + setverdict(fail, "Expected: ", vt_sr_exp, ", got: ", vt_sr); + } + if (log2str(vt_sr_perm) != log2str(vt_sr_perm_exp)) { + setverdict(fail, "Expected: ", vt_sr_perm_exp, ", got: ", vt_sr_perm); + } + if (log2str(vt_sr_sub) != log2str(vt_sr_sub_exp)) { + setverdict(fail, "Expected: ", vt_sr_sub_exp, ", got: ", vt_sr_sub); + } + if (log2str(vt_sr_super) != log2str(vt_sr_super_exp)) { + setverdict(fail, "Expected: ", vt_sr_super_exp, ", got: ", vt_sr_super); + } + setverdict(pass); +} + +// all from + module parameters +modulepar MyRecord mp_rec := { i := omit, roi := { 2, 1, 0 }, soi := { 7, 1, 5 } }; +modulepar RoSoI mp_rosoi := { { 2, 4, 8, 16 } }; +modulepar template RoMyUnion mpt_rouni := { { soi := { 1, 1, 1 } }, { soi := { -1, -3, -5 } } }; +modulepar template RoRoI mpt_roroi := { { 10, 11 }, { 20, 26, 29 }, { 31, 33 } }; + +testcase tc_all_from_subrefs_modulepar() runs on A +{ + // templates with 'all from' + var template integer vt_sr := ( 0, all from mp_rec.soi, all from mpt_roroi[1] ); + var template integer vt_sr_exp := ( 0, 7, 1, 5, 20, 26, 29 ); + var template RoI vt_sr_perm := { permutation ( 3, all from mp_rec.roi, all from mpt_rouni[1].soi ) }; + var template RoI vt_sr_perm_exp := { permutation ( 3, 2, 1, 0, -1, -3, -5 ) }; + var template SoI vt_sr_sub := subset ( all from mp_rosoi[0], 6, all from mpt_roroi[0] ); + var template SoI vt_sr_sub_exp := subset ( 2, 4, 8, 16, 6, 10, 11 ); + var template SoI vt_sr_super := superset ( all from mpt_rouni[0].soi, all from mpt_rouni[0].soi ); + var template SoI vt_sr_super_exp := superset ( 1, 1, 1, 1, 1, 1 ); + + // test templates with 'all from' against the expected templates + if (log2str(vt_sr) != log2str(vt_sr_exp)) { + setverdict(fail, "Expected: ", vt_sr_exp, ", got: ", vt_sr); + } + if (log2str(vt_sr_perm) != log2str(vt_sr_perm_exp)) { + setverdict(fail, "Expected: ", vt_sr_perm_exp, ", got: ", vt_sr_perm); + } + if (log2str(vt_sr_sub) != log2str(vt_sr_sub_exp)) { + setverdict(fail, "Expected: ", vt_sr_sub_exp, ", got: ", vt_sr_sub); + } + if (log2str(vt_sr_super) != log2str(vt_sr_super_exp)) { + setverdict(fail, "Expected: ", vt_sr_super_exp, ", got: ", vt_sr_super); + } + setverdict(pass); +} + +// all from + function parameters +function f_test_all_from_param(RoMyRec p_rorec, in RoMyUnion p_rouni, inout MyUnion p_uni, + template RoSoI pt_rosoi, in template RoRoI pt_roroi, inout template MyRecord pt_rec) +{ + // templates with 'all from' + var template integer vt_sr := ( all from p_rorec[0].roi, 0, all from pt_rec.roi ); + var template integer vt_sr_exp := ( -1, -3, -5, 0, 1, 3, 5 ); + var template RoI vt_sr_perm := { permutation ( all from pt_rosoi[0], all from p_rouni[0].roi ) }; + var template RoI vt_sr_perm_exp := { permutation ( 10, 20, 30, 11, 22, 33 ) }; + var template SoI vt_sr_sub := subset ( all from p_uni.roi, all from p_uni.roi ); + var template SoI vt_sr_sub_exp := subset ( 7, 77, 777, 7, 77, 777 ); + var template SoI vt_sr_super := superset ( 0, all from pt_roroi[0], all from pt_roroi[1] ); + var template SoI vt_sr_super_exp := superset ( 0, 1, 2, 3, 4, 5 ); + + // test templates with 'all from' against the expected templates + if (log2str(vt_sr) != log2str(vt_sr_exp)) { + setverdict(fail, "Expected: ", vt_sr_exp, ", got: ", vt_sr); + } + if (log2str(vt_sr_perm) != log2str(vt_sr_perm_exp)) { + setverdict(fail, "Expected: ", vt_sr_perm_exp, ", got: ", vt_sr_perm); + } + if (log2str(vt_sr_sub) != log2str(vt_sr_sub_exp)) { + setverdict(fail, "Expected: ", vt_sr_sub_exp, ", got: ", vt_sr_sub); + } + if (log2str(vt_sr_super) != log2str(vt_sr_super_exp)) { + setverdict(fail, "Expected: ", vt_sr_super_exp, ", got: ", vt_sr_super); + } + setverdict(pass); +} + +testcase tc_all_from_subrefs_param() runs on A +{ + var MyUnion v_uni := c_uni; + var template MyRecord vt_rec := t_rec; + f_test_all_from_param(c_rorec, c_rouni, v_uni, t_rosoi(100), t_roroi, vt_rec); +} + +// all from + function calls +function f_rorec() return RoMyRec { return c_rorec; } +function f_rouni() return RoMyUnion { return c_rouni; } +function f_uni() return MyUnion { return c_uni; } +function f_rosoi(in integer x) return template RoSoI { return t_rosoi(x); } +function f_roroi() return template RoRoI { return t_roroi; } +function f_rec() return template MyRecord { return t_rec; } + +testcase tc_all_from_subrefs_function() runs on A +{ + // templates with 'all from' + var template integer vt_sr := ( all from f_rorec()[0].roi, 0, all from f_rec().roi ); + var template integer vt_sr_exp := ( -1, -3, -5, 0, 1, 3, 5 ); + var template RoI vt_sr_perm := { permutation ( all from f_rosoi(100)[0], all from f_rouni()[0].roi ) }; + var template RoI vt_sr_perm_exp := { permutation ( 10, 20, 30, 11, 22, 33 ) }; + var template SoI vt_sr_sub := subset ( all from f_uni().roi, all from f_uni().roi ); + var template SoI vt_sr_sub_exp := subset ( 7, 77, 777, 7, 77, 777 ); + var template SoI vt_sr_super := superset ( 0, all from f_roroi()[0], all from f_roroi()[1] ); + var template SoI vt_sr_super_exp := superset ( 0, 1, 2, 3, 4, 5 ); + + // test templates with 'all from' against the expected templates + if (log2str(vt_sr) != log2str(vt_sr_exp)) { + setverdict(fail, "Expected: ", vt_sr_exp, ", got: ", vt_sr); + } + if (log2str(vt_sr_perm) != log2str(vt_sr_perm_exp)) { + setverdict(fail, "Expected: ", vt_sr_perm_exp, ", got: ", vt_sr_perm); + } + if (log2str(vt_sr_sub) != log2str(vt_sr_sub_exp)) { + setverdict(fail, "Expected: ", vt_sr_sub_exp, ", got: ", vt_sr_sub); + } + if (log2str(vt_sr_super) != log2str(vt_sr_super_exp)) { + setverdict(fail, "Expected: ", vt_sr_super_exp, ", got: ", vt_sr_super); + } + setverdict(pass); +} + +control { + execute(tc_all_from_subrefs()); + execute(tc_all_from_subrefs_permutation()); + execute(tc_all_from_subrefs_subset()); + execute(tc_all_from_subrefs_superset()); + execute(tc_all_from_subrefs_var()); + execute(tc_all_from_subrefs_modulepar()); + execute(tc_all_from_subrefs_param()); + execute(tc_all_from_subrefs_function()); +} + +} diff --git a/regression_test/all_from/all_from_subset.ttcn b/regression_test/all_from/all_from_subset.ttcn index 3affecd48..37d82c27b 100644 --- a/regression_test/all_from/all_from_subset.ttcn +++ b/regression_test/all_from/all_from_subset.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/all_from/all_from_superset.ttcn b/regression_test/all_from/all_from_superset.ttcn index 76585c4ae..166b519fe 100644 --- a/regression_test/all_from/all_from_superset.ttcn +++ b/regression_test/all_from/all_from_superset.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/all_from/all_from_var.ttcn b/regression_test/all_from/all_from_var.ttcn index a0c2c04b6..23517ad8f 100644 --- a/regression_test/all_from/all_from_var.ttcn +++ b/regression_test/all_from/all_from_var.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/all_from/all_from_with_functions.ttcn b/regression_test/all_from/all_from_with_functions.ttcn index 5aaa17a6e..6bb7f6f7d 100644 --- a/regression_test/all_from/all_from_with_functions.ttcn +++ b/regression_test/all_from/all_from_with_functions.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/all_from/everything.ttcn b/regression_test/all_from/everything.ttcn index 4f673df0e..0ae6a1118 100644 --- a/regression_test/all_from/everything.ttcn +++ b/regression_test/all_from/everything.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/all_from/f_ext.cc b/regression_test/all_from/f_ext.cc index 6c2c4fb1c..10228eafc 100644 --- a/regression_test/all_from/f_ext.cc +++ b/regression_test/all_from/f_ext.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/all_from/f_ext.hh b/regression_test/all_from/f_ext.hh index 90642fe5c..eaea97ff2 100644 --- a/regression_test/all_from/f_ext.hh +++ b/regression_test/all_from/f_ext.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/all_from/functions.ttcn b/regression_test/all_from/functions.ttcn index 29574561d..1dfab6a77 100644 --- a/regression_test/all_from/functions.ttcn +++ b/regression_test/all_from/functions.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/all_from/imported_templates.ttcn b/regression_test/all_from/imported_templates.ttcn index 947e510f6..84dd3ad32 100644 --- a/regression_test/all_from/imported_templates.ttcn +++ b/regression_test/all_from/imported_templates.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/all_from/sapc.ttcn b/regression_test/all_from/sapc.ttcn index 7e65976ec..3396f47de 100644 --- a/regression_test/all_from/sapc.ttcn +++ b/regression_test/all_from/sapc.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/all_from/types.ttcn b/regression_test/all_from/types.ttcn index cc8c2e8c0..bd95c80ea 100644 --- a/regression_test/all_from/types.ttcn +++ b/regression_test/all_from/types.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/anytype/AnyUser.ttcnpp b/regression_test/anytype/AnyUser.ttcnpp index b17271249..d22261ce3 100644 --- a/regression_test/anytype/AnyUser.ttcnpp +++ b/regression_test/anytype/AnyUser.ttcnpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/anytype/AnytypeTest.ttcnpp b/regression_test/anytype/AnytypeTest.ttcnpp index 29166d5d5..47cd0fcfe 100644 --- a/regression_test/anytype/AnytypeTest.ttcnpp +++ b/regression_test/anytype/AnytypeTest.ttcnpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/anytype/Makefile b/regression_test/anytype/Makefile index a65be3762..1a5553b17 100644 --- a/regression_test/anytype/Makefile +++ b/regression_test/anytype/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/anytype/Supplier.asn b/regression_test/anytype/Supplier.asn index 34d3b4c43..448c9553a 100644 --- a/regression_test/anytype/Supplier.asn +++ b/regression_test/anytype/Supplier.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/anytype/config.cfg b/regression_test/anytype/config.cfg index e8713b213..6078e4974 100644 --- a/regression_test/anytype/config.cfg +++ b/regression_test/anytype/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/anytype/noany.ttcn b/regression_test/anytype/noany.ttcn index ae5e8bd10..35f1fa2be 100644 --- a/regression_test/anytype/noany.ttcn +++ b/regression_test/anytype/noany.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/anytype/smallany.ttcn b/regression_test/anytype/smallany.ttcn index 4a6466d7f..a2f61bf3f 100644 --- a/regression_test/anytype/smallany.ttcn +++ b/regression_test/anytype/smallany.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/anytypeOper/Makefile b/regression_test/anytypeOper/Makefile index ea649e144..20efaeb6e 100644 --- a/regression_test/anytypeOper/Makefile +++ b/regression_test/anytypeOper/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/anytypeOper/TanytypeOper.ttcn b/regression_test/anytypeOper/TanytypeOper.ttcn index 4d97faea8..6c4509cc6 100644 --- a/regression_test/anytypeOper/TanytypeOper.ttcn +++ b/regression_test/anytypeOper/TanytypeOper.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/anytypeOper/TanytypeWrapOper.ttcn b/regression_test/anytypeOper/TanytypeWrapOper.ttcn index 830244b4a..fd144a654 100644 --- a/regression_test/anytypeOper/TanytypeWrapOper.ttcn +++ b/regression_test/anytypeOper/TanytypeWrapOper.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/anytypeOper/config.cfg b/regression_test/anytypeOper/config.cfg index e9cc5da4b..9a6698802 100644 --- a/regression_test/anytypeOper/config.cfg +++ b/regression_test/anytypeOper/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/arrayOper/Makefile b/regression_test/arrayOper/Makefile index 3fba5279d..86ebf08e8 100644 --- a/regression_test/arrayOper/Makefile +++ b/regression_test/arrayOper/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/arrayOper/TarrayOper.ttcn b/regression_test/arrayOper/TarrayOper.ttcn index 6d3e4f31f..e8d91e49c 100644 --- a/regression_test/arrayOper/TarrayOper.ttcn +++ b/regression_test/arrayOper/TarrayOper.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/arrayOper/config.cfg b/regression_test/arrayOper/config.cfg index 52f1b0439..fd2190ef7 100644 --- a/regression_test/arrayOper/config.cfg +++ b/regression_test/arrayOper/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/assignmentNotation/Makefile b/regression_test/assignmentNotation/Makefile index f4e35fffd..e1f7ad1de 100644 --- a/regression_test/assignmentNotation/Makefile +++ b/regression_test/assignmentNotation/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/assignmentNotation/TassignmentNotation.asn b/regression_test/assignmentNotation/TassignmentNotation.asn index 94c678800..3a14fb0e3 100644 --- a/regression_test/assignmentNotation/TassignmentNotation.asn +++ b/regression_test/assignmentNotation/TassignmentNotation.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/assignmentNotation/TassignmentNotation.cfg b/regression_test/assignmentNotation/TassignmentNotation.cfg index 7c560048e..9ced67faf 100755 --- a/regression_test/assignmentNotation/TassignmentNotation.cfg +++ b/regression_test/assignmentNotation/TassignmentNotation.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/assignmentNotation/TassignmentNotation.ttcn b/regression_test/assignmentNotation/TassignmentNotation.ttcn index c5f0d87cd..70d9524aa 100644 --- a/regression_test/assignmentNotation/TassignmentNotation.ttcn +++ b/regression_test/assignmentNotation/TassignmentNotation.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/assignmentNotation/TassignmentNotation_First.cfg b/regression_test/assignmentNotation/TassignmentNotation_First.cfg index 21b5c15d3..a796a68ad 100755 --- a/regression_test/assignmentNotation/TassignmentNotation_First.cfg +++ b/regression_test/assignmentNotation/TassignmentNotation_First.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/assignmentNotation/TassignmentNotation_Second.cfg b/regression_test/assignmentNotation/TassignmentNotation_Second.cfg index e69f3f5b2..5bbdd8b6f 100755 --- a/regression_test/assignmentNotation/TassignmentNotation_Second.cfg +++ b/regression_test/assignmentNotation/TassignmentNotation_Second.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/assignmentNotation/TassignmentNotation_Third.cfg b/regression_test/assignmentNotation/TassignmentNotation_Third.cfg index c31b2ec4b..cc51bec90 100755 --- a/regression_test/assignmentNotation/TassignmentNotation_Third.cfg +++ b/regression_test/assignmentNotation/TassignmentNotation_Third.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/basicStatem/Makefile b/regression_test/basicStatem/Makefile index 043884c68..842741b0d 100644 --- a/regression_test/basicStatem/Makefile +++ b/regression_test/basicStatem/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/basicStatem/TbasicStatem.ttcn b/regression_test/basicStatem/TbasicStatem.ttcn index 9de29825b..585da2d3c 100644 --- a/regression_test/basicStatem/TbasicStatem.ttcn +++ b/regression_test/basicStatem/TbasicStatem.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/basicStatem/config.cfg b/regression_test/basicStatem/config.cfg index 2c04ad11e..15c368fe9 100644 --- a/regression_test/basicStatem/config.cfg +++ b/regression_test/basicStatem/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/bitstrOper/Makefile b/regression_test/bitstrOper/Makefile index 0fc1db5fc..6eea88080 100644 --- a/regression_test/bitstrOper/Makefile +++ b/regression_test/bitstrOper/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/bitstrOper/TbitstrOper.ttcn b/regression_test/bitstrOper/TbitstrOper.ttcn index b0e3611e8..7af42c41a 100644 --- a/regression_test/bitstrOper/TbitstrOper.ttcn +++ b/regression_test/bitstrOper/TbitstrOper.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 @@ -427,7 +427,6 @@ testcase bitstrXor_str_el() runs on bitstrOper_comptype else {setverdict(fail);} if (x5=='1'B) {setverdict(pass);} //"1" xor "0" else {setverdict(fail);} - log(x6); if (x6=='0'B) {setverdict(pass);} //"1" xor "1" else {setverdict(fail);} } diff --git a/regression_test/bitstrOper/config.cfg b/regression_test/bitstrOper/config.cfg index 8c32b6f94..4f69f869a 100644 --- a/regression_test/bitstrOper/config.cfg +++ b/regression_test/bitstrOper/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/boolOper/Makefile b/regression_test/boolOper/Makefile index d671c562b..265fa260a 100644 --- a/regression_test/boolOper/Makefile +++ b/regression_test/boolOper/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/boolOper/TboolOper.ttcn b/regression_test/boolOper/TboolOper.ttcn index dabf6b61b..5e26d6101 100644 --- a/regression_test/boolOper/TboolOper.ttcn +++ b/regression_test/boolOper/TboolOper.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/boolOper/config.cfg b/regression_test/boolOper/config.cfg index 21d90c5f4..b46fabccb 100644 --- a/regression_test/boolOper/config.cfg +++ b/regression_test/boolOper/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/cfgFile/Makefile b/regression_test/cfgFile/Makefile index dbfc31ab3..4d8f1f054 100644 --- a/regression_test/cfgFile/Makefile +++ b/regression_test/cfgFile/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/cfgFile/define/Makefile b/regression_test/cfgFile/define/Makefile index 23c25eba9..2c3d5a07c 100644 --- a/regression_test/cfgFile/define/Makefile +++ b/regression_test/cfgFile/define/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/cfgFile/define/macro_reference/Makefile b/regression_test/cfgFile/define/macro_reference/Makefile index 30560c9cc..74cb3b4b3 100644 --- a/regression_test/cfgFile/define/macro_reference/Makefile +++ b/regression_test/cfgFile/define/macro_reference/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 @@ -20,6 +20,11 @@ DIR_SINGLE := dir_single_mode DIR_PARALLEL := dir_parallel_mode GENERATED_DIRS := $(DIR_SINGLE) $(DIR_PARALLEL) +COVERAGE_FLAG := +ifeq ($(COVERAGE), yes) + COVERAGE_FLAG += -C +endif + # List of fake targets: .PHONY: all clean run run_single run_parallel runall @@ -28,12 +33,12 @@ all: $(GENERATED_DIRS) $(DIR_SINGLE): mkdir $@ cd $@ && for file in $(FILES); do ln -s ../$$file || exit; done - cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen -s ./* && $(MAKE_PROG) + cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen $(COVERAGE_FLAG) -s ./* && $(MAKE_PROG) $(DIR_PARALLEL): mkdir $@ cd $@ && for file in $(FILES); do ln -s ../$$file || exit; done - cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen ./* && $(MAKE_PROG) + cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen $(COVERAGE_FLAG) ./* && $(MAKE_PROG) run: $(GENERATED_DIRS) cd $(DIR_SINGLE) && ./$(RUNNABLE) $(CFG) diff --git a/regression_test/cfgFile/define/macro_reference/TSTM_macro_test_main.cfg b/regression_test/cfgFile/define/macro_reference/TSTM_macro_test_main.cfg index 56bb9f508..004cae592 100644 --- a/regression_test/cfgFile/define/macro_reference/TSTM_macro_test_main.cfg +++ b/regression_test/cfgFile/define/macro_reference/TSTM_macro_test_main.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/cfgFile/define/macro_reference/TSTM_macro_test_testcases.ttcn b/regression_test/cfgFile/define/macro_reference/TSTM_macro_test_testcases.ttcn index 503a76546..67d6b2fc9 100644 --- a/regression_test/cfgFile/define/macro_reference/TSTM_macro_test_testcases.ttcn +++ b/regression_test/cfgFile/define/macro_reference/TSTM_macro_test_testcases.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/cfgFile/define/structured/Makefile b/regression_test/cfgFile/define/structured/Makefile index 0273c0f4b..81eaae162 100644 --- a/regression_test/cfgFile/define/structured/Makefile +++ b/regression_test/cfgFile/define/structured/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 @@ -20,6 +20,11 @@ DIR_SINGLE := dir_single_mode DIR_PARALLEL := dir_parallel_mode GENERATED_DIRS := $(DIR_SINGLE) $(DIR_PARALLEL) +COVERAGE_FLAG := +ifeq ($(COVERAGE), yes) + COVERAGE_FLAG += -C +endif + # List of fake targets: .PHONY: all clean run run_single run_parallel runall @@ -28,12 +33,12 @@ all: $(GENERATED_DIRS) $(DIR_SINGLE): mkdir $@ cd $@ && for file in $(FILES); do ln -s ../$$file || exit; done - cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen -s ./* && $(MAKE_PROG) 'CXXFLAGS=$(CXXFLAGS)' 'LDFLAGS=$(LDFLAGS)' + cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen $(COVERAGE_FLAG) -s ./* && $(MAKE_PROG) 'CXXFLAGS=$(CXXFLAGS)' 'LDFLAGS=$(LDFLAGS)' $(DIR_PARALLEL): mkdir $@ cd $@ && for file in $(FILES); do ln -s ../$$file || exit; done - cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen ./* && $(MAKE_PROG) 'CXXFLAGS=$(CXXFLAGS)' 'LDFLAGS=$(LDFLAGS)' + cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen $(COVERAGE_FLAG) ./* && $(MAKE_PROG) 'CXXFLAGS=$(CXXFLAGS)' 'LDFLAGS=$(LDFLAGS)' run: $(GENERATED_DIRS) cd $(DIR_SINGLE) && ./$(RUNNABLE) $(CFG) diff --git a/regression_test/cfgFile/define/structured/structured.cfg b/regression_test/cfgFile/define/structured/structured.cfg index e15391d6c..f9f386ccf 100644 --- a/regression_test/cfgFile/define/structured/structured.cfg +++ b/regression_test/cfgFile/define/structured/structured.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/cfgFile/define/structured/structured.ttcn b/regression_test/cfgFile/define/structured/structured.ttcn index d293d8881..39562b177 100644 --- a/regression_test/cfgFile/define/structured/structured.ttcn +++ b/regression_test/cfgFile/define/structured/structured.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/cfgFile/module_parameters/Makefile b/regression_test/cfgFile/module_parameters/Makefile index d5f2ecf5e..496b3c76a 100644 --- a/regression_test/cfgFile/module_parameters/Makefile +++ b/regression_test/cfgFile/module_parameters/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 @@ -10,7 +10,7 @@ include $(TOPDIR)/Makefile.regression unexport ABS_SRC unexport SRCDIR -DIRS := assignment concat +DIRS := assignment concat references # List of fake targets: .PHONY: all dep clean run $(DIRS) $(addsuffix /, $(DIRS)) profile diff --git a/regression_test/cfgFile/module_parameters/assignment/Makefile b/regression_test/cfgFile/module_parameters/assignment/Makefile index b8ba4b00f..46145fbcc 100644 --- a/regression_test/cfgFile/module_parameters/assignment/Makefile +++ b/regression_test/cfgFile/module_parameters/assignment/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 @@ -15,6 +15,11 @@ DIR_SINGLE := dir_single_mode DIR_PARALLEL := dir_parallel_mode GENERATED_DIRS := $(DIR_SINGLE) $(DIR_PARALLEL) +COVERAGE_FLAG := +ifeq ($(COVERAGE), yes) + COVERAGE_FLAG += -C +endif + MAKE_PROG := $(MAKE) # List of fake targets: @@ -25,12 +30,12 @@ all: $(GENERATED_DIRS) dir_single_mode: mkdir $@ cd $@ && for file in $(FILES); do ln -s ../$$file || exit; done - cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen -s ./* && $(MAKE_PROG) + cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen $(COVERAGE_FLAG) -s ./* && $(MAKE_PROG) dir_parallel_mode: mkdir $@ cd $@ && for file in $(FILES); do ln -s ../$$file || exit; done - cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen ./* && $(MAKE_PROG) + cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen $(COVERAGE_FLAG) ./* && $(MAKE_PROG) run: $(GENERATED_DIRS) cd $(DIR_SINGLE) && ./$(RUNNABLE) $(CFG) diff --git a/regression_test/cfgFile/module_parameters/assignment/assignment.cfg b/regression_test/cfgFile/module_parameters/assignment/assignment.cfg index 46e7995c8..19a183963 100644 --- a/regression_test/cfgFile/module_parameters/assignment/assignment.cfg +++ b/regression_test/cfgFile/module_parameters/assignment/assignment.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 @@ -19,7 +19,7 @@ tsp_float_2 := 4.2e+1 tsp_float_2_init := 4.3e+1 // Boolean -tsp_boolean_false := false +tsp_boolean_false := false; *.tsp_boolean_false_init := false tsp_boolean_true := true tsp_boolean_true_init := true diff --git a/regression_test/cfgFile/module_parameters/assignment/assignment.ttcn b/regression_test/cfgFile/module_parameters/assignment/assignment.ttcn index 69d68421d..1cc43929b 100644 --- a/regression_test/cfgFile/module_parameters/assignment/assignment.ttcn +++ b/regression_test/cfgFile/module_parameters/assignment/assignment.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/cfgFile/module_parameters/concat/Makefile b/regression_test/cfgFile/module_parameters/concat/Makefile index aa51af65f..1af1598dd 100644 --- a/regression_test/cfgFile/module_parameters/concat/Makefile +++ b/regression_test/cfgFile/module_parameters/concat/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 @@ -15,6 +15,11 @@ DIR_SINGLE := dir_single_mode DIR_PARALLEL := dir_parallel_mode GENERATED_DIRS := $(DIR_SINGLE) $(DIR_PARALLEL) +COVERAGE_FLAG := +ifeq ($(COVERAGE), yes) + COVERAGE_FLAG += -C +endif + MAKE_PROG := $(MAKE) # List of fake targets: @@ -25,12 +30,12 @@ all: $(GENERATED_DIRS) dir_single_mode: mkdir $@ cd $@ && for file in $(FILES); do ln -s ../$$file || exit; done - cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen -s ./* && $(MAKE_PROG) + cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen $(COVERAGE_FLAG) -s ./* && $(MAKE_PROG) dir_parallel_mode: mkdir $@ cd $@ && for file in $(FILES); do ln -s ../$$file || exit; done - cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen ./* && $(MAKE_PROG) + cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen $(COVERAGE_FLAG) ./* && $(MAKE_PROG) run: $(GENERATED_DIRS) cd $(DIR_SINGLE) && ./$(RUNNABLE) $(CFG) diff --git a/regression_test/cfgFile/module_parameters/concat/concat.cfg b/regression_test/cfgFile/module_parameters/concat/concat.cfg index 916a20aae..90307d991 100644 --- a/regression_test/cfgFile/module_parameters/concat/concat.cfg +++ b/regression_test/cfgFile/module_parameters/concat/concat.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/cfgFile/module_parameters/concat/concat.ttcn b/regression_test/cfgFile/module_parameters/concat/concat.ttcn index 9cb4776ea..900e8987c 100644 --- a/regression_test/cfgFile/module_parameters/concat/concat.ttcn +++ b/regression_test/cfgFile/module_parameters/concat/concat.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/cfgFile/module_parameters/references/Makefile b/regression_test/cfgFile/module_parameters/references/Makefile new file mode 100644 index 000000000..a8e97be69 --- /dev/null +++ b/regression_test/cfgFile/module_parameters/references/Makefile @@ -0,0 +1,53 @@ +############################################################################### +# Copyright (c) 2000-2015 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 +############################################################################### +TOPDIR := ../../../ +include $(TOPDIR)/Makefile.regression + +FILES := references.ttcn references.cfg +RUNNABLE := references +CFG := references.cfg +DIR_SINGLE := dir_single_mode +DIR_PARALLEL := dir_parallel_mode +GENERATED_DIRS := $(DIR_SINGLE) $(DIR_PARALLEL) + +COVERAGE_FLAG := +ifeq ($(COVERAGE), yes) + COVERAGE_FLAG += -C +endif + +MAKE_PROG := $(MAKE) + +# List of fake targets: +.PHONY: all clean run run_single run_parallel runall + +all: $(GENERATED_DIRS) + +dir_single_mode: + mkdir $@ + cd $@ && for file in $(FILES); do ln -s ../$$file || exit; done + cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen $(COVERAGE_FLAG) -s ./* && $(MAKE_PROG) + +dir_parallel_mode: + mkdir $@ + cd $@ && for file in $(FILES); do ln -s ../$$file || exit; done + cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen $(COVERAGE_FLAG) ./* && $(MAKE_PROG) + +run: $(GENERATED_DIRS) + cd $(DIR_SINGLE) && ./$(RUNNABLE) $(CFG) + cd $(DIR_PARALLEL) && $(TTCN3_DIR)/bin/ttcn3_start $(RUNNABLE) $(CFG) + +# To run all tests, possibly in parallel +run_single: $(DIR_SINGLE) + cd $(DIR_SINGLE) && ./$(RUNNABLE) $(CFG) +run_parallel: $(DIR_PARALLEL) + cd $(DIR_PARALLEL) && $(TTCN3_DIR)/bin/ttcn3_start $(RUNNABLE) $(CFG) +runall: run_single run_parallel + +clean distclean: + rm -rf $(GENERATED_DIRS) + diff --git a/regression_test/cfgFile/module_parameters/references/references.cfg b/regression_test/cfgFile/module_parameters/references/references.cfg new file mode 100644 index 000000000..6a20c3c82 --- /dev/null +++ b/regression_test/cfgFile/module_parameters/references/references.cfg @@ -0,0 +1,175 @@ +############################################################################### +# Copyright (c) 2000-2015 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 +############################################################################### + +[DEFINE] +MACRO_CS := "macro" +MACRO_INT := 1 + +[MODULE_PARAMETERS] + +# integer +mp1 := +1; +mp1 := mp1 + 1; +mp2 := mp1 - mp2 + 10 / mp1; +mp3 := (mp1 + 2) * 5; +mp3 := mp3 + mplist2[mp1 - 1 - ${MACRO_INT, integer}]; + +# float +mp4 := -3.0; +mp5 := +mp4 / 0.5 - 1.5 * (mp5 + 1.0); + +# bitstring +mpbs1 &= '1101'B & mpbs2 & '01'B; +mpbs2 := mpbs2 & mpbs1; +mpbs1 &= mpbs2; + +# hexstring +mphs1 := '77FF'H & mphs1 & mphs2; +mphs2 &= 'EE'H; + +# octetstring +mpos1 := 'DEAD'O; +mpos2 := 'A22C'O & mpos1 & 'C22A'O; + +# charstring +mpcs1 &= mpcs2; +mpcs1 := mpcs1 & "ghi"; +mpcs2 := "xx" & mpcs1 & "xx" & mpcs2; +mpcs3 := mpucs1 & "xx"; + +# universal charstring +mpucs1 := "a" & mpucs2; +mpucs2 := "űrhajó" & mpcs1 & char(mp1 + 1, 5, mp1 * 5, 5) & "x"; + +# boolean +mpb1 := mpb2; +mpb2 := mpuni2.bval; + +# objid +mpobjid2 := mpobjid1; + +# verdicttype +mpvt2 := mpvt1; + +# component +mpcomp2 := mpcomp1; + +# default +mpdef2 := mpdef1; + +# enumerated +mpenum2 := references.mpenum1; +mpenum1 := Large; + +# record of +mplist1 := mplist2; +mplist2 := { [mp1 / 2] := 3, [0] := mprec1.num }; +mplist2 &= mplist1; + +# record +mprec3 := mprec1; +mprec1 := mprec2; +mprec2 := mprec3; +mprec3 := { mplist1[0], mpcs1 }; + +# empty record +mpemptyrec2 := mpemptyrec1; + +# union +mpuni3 := mpuni1; +mpuni1 := mpuni2; +mpuni2 := mpuni3; +mpuni3 := { osval := mpos1 & mpos2 }; + +# array +mparray1 := { mparray2[0], mpcs1 & "xx" }; +mparray2 := mparray1; + +# integer template +mptint1 := mptint2; +mptint2 := (mp1 + 6, mp2, - mp3, - ${MACRO_INT, integer}); + +# float template +mptf1 := mptf2 ifpresent; +mptf2 := (mp4 / 2.0, mp5 * 1.5); + +# charstring template +mptcs1 := mptcs1 length(2 .. mp2 - 1); +mptcs2 := "xx" & mptcs2 & "xx" ifpresent; +mptcs3 := mptcs3 & "d" & mptarray2[1]; + +# universal charstring template +mptucs3 := (mptucs1, ("a".."z")); +mptucs2 := "zz" & mpucs2 & "zz"; +mptucs1 := pattern "a??b" & ${MACRO_CS} & char(1, 2, 3, 4) & mpucs1; + +# bitstring template +mptbs1 := '110'B & mpbs1 & '011'B; +mptbs2 := mptbs2 ifpresent; +mptbs3 := mptbs3; + +# hexstring template +mpths1 := 'AB'H & mphs1 & 'BA'H; +mpths2 := mpths2; +mpths3 := mpths3 length (7..infinity); + +# octetstring template +mptos1 := '01'O & mpos1 & '10'O; +mptos2 := mptos2; +mptos3 := mptos3; + +# boolean template +mptb1 := (mptb1, mptb2); +mptb2 := mptuni3.bval; + +# component template +mptcomp2 := mptcomp1; + +# default template +mptdef2 := mptdef1; + +# verdicttype template +mptvt1 := mptvt2; +mptvt2 := mpvt2; +mptvt3 := inconc; + +# enumerated template +mptenum1 = mptenum2; +mptenum2 := mpenum2; +mptenum3 := Medium; + +# objid template +mptobjid1 := mptobjid2; +mptobjid2 := mpobjid1; + +# record template +mptrec1 := mptrec2; +mptrec2 := { num := mptrec2.num, str := mptcs1 }; +mptrec3 := ( mptrec3, mprec1, mprec2, mprec3 ); + +# empty record template +mptemptyrec1 := mptemptyrec2; +mptemptyrec2 := mpemptyrec1; + +# record of template +mptlist1 := { [2] := mptlist2[0], [1] := mptlist2[1], [0] := mptlist2[2] } length (1..4); +mptlist2 := mptlist3; +mptlist3 := complement ( mptlist2, mplist1, mplist2 ); + +# union template +mptuni1 := mptuni2; +mptuni2 := { ival := mptint2 }; +mptuni3 := ( mpuni1, mpuni2, mpuni3 ); + +# array template +mptarray1 := mptarray2 ifpresent; +mptarray2 := mptarray3; +mptarray3 := mparray1; + +[EXECUTE] +references.control diff --git a/regression_test/cfgFile/module_parameters/references/references.ttcn b/regression_test/cfgFile/module_parameters/references/references.ttcn new file mode 100644 index 000000000..01af23747 --- /dev/null +++ b/regression_test/cfgFile/module_parameters/references/references.ttcn @@ -0,0 +1,701 @@ +/****************************************************************************** + * Copyright (c) 2000-2015 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 + ******************************************************************************/ + +module references { +// This module contains tests for referencing other (or the same) module parameters +// in module parameter initialization (in the configuration file) + +/******** Types ********/ +type record Rec { + integer num, + charstring str optional +} + +type record EmptyRec {}; + +type union Uni { + integer ival, + boolean bval, + octetstring osval +} + +type enumerated Size { Small, Medium, Large }; + +type component CT {}; + +type record of integer IntList; + +type record of charstring TwoStrings; + +/******** Module parameters ********/ +modulepar integer mp1 := 0; +modulepar integer mp2 := 0; +modulepar integer mp3 := 0; + +modulepar float mp4 := 0.0; +modulepar float mp5 := 1.0; + +modulepar bitstring mpbs1 := '110'B; +modulepar bitstring mpbs2 := '1'B; + +modulepar hexstring mphs1 := '3CC'H; +modulepar hexstring mphs2 := '12AA'H; + +modulepar octetstring mpos1 := 'A0A0'O; +modulepar octetstring mpos2 := '7FFF'O; + +modulepar charstring mpcs1 := "abc"; +modulepar charstring mpcs2 := "def"; +modulepar charstring mpcs3 := "ghi"; + +modulepar universal charstring mpucs1 := "noquads"; +modulepar universal charstring mpucs2 := "x" & char(0, 0, 1, 113) & "x" & char(0, 0, 1, 97) & "x"; + +modulepar boolean mpb1 := true; +modulepar boolean mpb2 := false; + +modulepar objid mpobjid1 := objid { 1 1 7 }; +modulepar objid mpobjid2; + +modulepar verdicttype mpvt1 := pass; +modulepar verdicttype mpvt2 := fail; + +modulepar CT mpcomp1 := null; +modulepar CT mpcomp2; + +modulepar default mpdef1 := null; +modulepar default mpdef2; + +modulepar Size mpenum1 := Small; +modulepar Size mpenum2; + +modulepar IntList mplist1 := { }; +modulepar IntList mplist2 := { 1, 2 }; + +modulepar Rec mprec1 := { 10, "yyyy" }; +modulepar Rec mprec2 := { num := 3, str := omit }; +modulepar Rec mprec3; + +modulepar EmptyRec mpemptyrec1 := {}; +modulepar EmptyRec mpemptyrec2; + +modulepar Uni mpuni1 := { ival := 2 }; +modulepar Uni mpuni2 := { bval := true }; +modulepar Uni mpuni3; + +modulepar TwoStrings mparray1 := { "abc", "def" }; +modulepar TwoStrings mparray2 := { "xy", "yx" }; + +modulepar template integer mptint1 := 7; +modulepar template integer mptint2 := (3..6) ifpresent; + +modulepar template float mptf1 := 33.33; +modulepar template float mptf2 := (33.0..66.0); + +modulepar template charstring mptcs1 := ("a".."z"); +modulepar template charstring mptcs2 := "abc"; +modulepar template charstring mptcs3 := pattern "ab???x"; + +modulepar template universal charstring mptucs1 := (char(0,0,1,97)..char(0,0,1,113)) length (2); +modulepar template universal charstring mptucs2 := "abc" & char(0,0,1,113) & "cba"; +modulepar template universal charstring mptucs3; + +modulepar template bitstring mptbs1 := '1010'B; +modulepar template bitstring mptbs2 := * length (3..6); +modulepar template bitstring mptbs3 := '11??00'B; + +modulepar template hexstring mpths1 := 'AB21'H; +modulepar template hexstring mpths2 := ? length (8); +modulepar template hexstring mpths3 := 'DE*555'H; + +modulepar template octetstring mptos1 := '00'O; +modulepar template octetstring mptos2 := omit; +modulepar template octetstring mptos3 := 'A0*'O length (1..5); + +modulepar template boolean mptb1 := true; +modulepar template boolean mptb2 := false; + +modulepar template CT mptcomp1 := (null, mtc, system); +modulepar template CT mptcomp2; + +modulepar template default mptdef1 := null; +modulepar template default mptdef2; + +modulepar template verdicttype mptvt1 := none; +modulepar template verdicttype mptvt2 := (pass, fail, error); +modulepar template verdicttype mptvt3; + +modulepar template Size mptenum1 := *; +modulepar template Size mptenum2 := (Small, Large); +modulepar template Size mptenum3; + +modulepar template objid mptobjid1 := ?; +modulepar template objid mptobjid2 := (objid { 1 2 3 }, objid { 0 0 0 1 }); + +modulepar template Rec mptrec1 := ?; +modulepar template Rec mptrec2 := { ?, * }; +modulepar template Rec mptrec3 := { num := 6, str := omit }; + +modulepar template EmptyRec mptemptyrec1; +modulepar template EmptyRec mptemptyrec2 := {}; + +modulepar template IntList mptlist1 := omit; +modulepar template IntList mptlist2 := { 1, 2, * }; +modulepar template IntList mptlist3 := { [0] := 0, [1] := 1, [2] := 0 }; + +modulepar template Uni mptuni1; +modulepar template Uni mptuni2 := complement ( { osval := '0000'O }, { ival := 31 } ); +modulepar template Uni mptuni3 := { bval := false }; + +modulepar template TwoStrings mptarray1; +modulepar template TwoStrings mptarray2 := { "one", "two" }; +modulepar template TwoStrings mptarray3 := { [1] := ?, [0] := "x" }; + +/******** Test cases (for values) ********/ +testcase tc_ref_integer() runs on CT +{ + template integer t_mp1 := 2; + template integer t_mp2 := 7; + template integer t_mp3 := 21; + if (not match(mp1, t_mp1)) { + setverdict(fail, "Expected(mp1): ", t_mp1, ", got: ", mp1); + } + if (not match(mp2, t_mp2)) { + setverdict(fail, "Expected(mp2): ", t_mp2, ", got: ", mp2); + } + if (not match(mp3, t_mp3)) { + setverdict(fail, "Expected(mp3): ", t_mp3, ", got: ", mp3); + } + setverdict(pass); +} + +testcase tc_ref_float() runs on CT +{ + template float t_mp4 := -3.0; + template float t_mp5 := -9.0; + if (not match(mp4, t_mp4)) { + setverdict(fail, "Expected(mp4): ", t_mp4, ", got: ", mp4); + } + if (not match(mp5, t_mp5)) { + setverdict(fail, "Expected(mp5): ", t_mp5, ", got: ", mp5); + } + setverdict(pass); +} + +testcase tc_ref_bitstring() runs on CT +{ + template bitstring t_mpbs1 := '110110110111101101101'B; + template bitstring t_mpbs2 := '11101101101'B; + if (not match(mpbs1, t_mpbs1)) { + setverdict(fail, "Expected(mpbs1): ", t_mpbs1, ", got: ", mpbs1); + } + if (not match(mpbs2, t_mpbs2)) { + setverdict(fail, "Expected(mpbs2): ", t_mpbs2, ", got: ", mpbs2); + } + setverdict(pass); +} + +testcase tc_ref_hexstring() runs on CT +{ + template hexstring t_mphs1 := '77FF3CC12AA'H; + template hexstring t_mphs2 := '12AAEE'H; + if (not match(mphs1, t_mphs1)) { + setverdict(fail, "Expected(mphs1): ", t_mphs1, ", got: ", mphs1); + } + if (not match(mphs2, t_mphs2)) { + setverdict(fail, "Expected(mphs2): ", t_mphs2, ", got: ", mphs2); + } + setverdict(pass); +} + +testcase tc_ref_octetstring() runs on CT +{ + template octetstring t_mpos1 := 'DEAD'O; + template octetstring t_mpos2 := 'A22CDEADC22A'O; + if (not match(mpos1, t_mpos1)) { + setverdict(fail, "Expected(mpos1): ", t_mpos1, ", got: ", mpos1); + } + if (not match(mpos2, t_mpos2)) { + setverdict(fail, "Expected(mpos2): ", t_mpos2, ", got: ", mpos2); + } + setverdict(pass); +} + +testcase tc_ref_charstring() runs on CT +{ + template charstring t_mpcs1 := "abcdefghi"; + template charstring t_mpcs2 := "xxabcdefghixxdef"; + template charstring t_mpcs3 := "noquadsxx"; + if (not match(mpcs1, t_mpcs1)) { + setverdict(fail, "Expected(mpcs1): ", t_mpcs1, ", got: ", mpcs1); + } + if (not match(mpcs2, t_mpcs2)) { + setverdict(fail, "Expected(mpcs2): ", t_mpcs2, ", got: ", mpcs2); + } + if (not match(mpcs3, t_mpcs3)) { + setverdict(fail, "Expected(mpcs3): ", t_mpcs3, ", got: ", mpcs3); + } + setverdict(pass); +} + +testcase tc_ref_universal_charstring() runs on CT +{ + template universal charstring t_mpucs1 := "ax" & char(0, 0, 1, 113) & "x" & char(0, 0, 1, 97) & "x"; + template universal charstring t_mpucs2 := char(0, 0, 1, 113) & "rhaj" & char(0, 0, 0, 243) & "abcdefghi" & char(3, 5, 10, 5) & "x"; + if (not match(mpucs1, t_mpucs1)) { + setverdict(fail, "Expected(mpucs1): ", t_mpucs1, ", got: ", mpucs1); + } + if (not match(mpucs2, t_mpucs2)) { + setverdict(fail, "Expected(mpucs2): ", t_mpucs2, ", got: ", mpucs2); + } + setverdict(pass); +} + +testcase tc_ref_boolean() runs on CT +{ + template boolean t_mpb1 := false; + template boolean t_mpb2 := true; + if (not match(mpb1, t_mpb1)) { + setverdict(fail, "Expected(mpb1): ", t_mpb1, ", got: ", mpb1); + } + if (not match(mpb2, t_mpb2)) { + setverdict(fail, "Expected(mpb2): ", t_mpb2, ", got: ", mpb2); + } + setverdict(pass); +} + +testcase tc_ref_objid() runs on CT +{ + template objid t_mpobjid2 := objid { 1 1 7 }; + if (not match(mpobjid2, t_mpobjid2)) { + setverdict(fail, "Expected(mpobjid2): ", t_mpobjid2, ", got: ", mpobjid2); + } + setverdict(pass); +} + +testcase tc_ref_verdicttype() runs on CT +{ + template verdicttype t_mpvt2 := pass; + if (not match(mpvt2, t_mpvt2)) { + setverdict(fail, "Expected(mpvt2): ", t_mpvt2, ", got: ", mpvt2); + } + setverdict(pass); +} + +testcase tc_ref_component() runs on CT +{ + template CT t_mpcomp2 := null; + if (not match(mpcomp2, t_mpcomp2)) { + setverdict(fail, "Expected(mpcomp2): ", t_mpcomp2, ", got: ", mpcomp2); + } + setverdict(pass); +} + +testcase tc_ref_default() runs on CT +{ + template default t_mpdef2 := null; + if (not match(mpdef2, t_mpdef2)) { + setverdict(fail, "Expected(mpdef2): ", t_mpdef2, ", got: ", mpdef2); + } + setverdict(pass); +} + +testcase tc_ref_enumerated() runs on CT +{ + template Size t_mpenum1 := Large; + template Size t_mpenum2 := Small; + if (not match(mpenum1, t_mpenum1)) { + setverdict(fail, "Expected(mpenum1): ", t_mpenum1, ", got: ", mpenum1); + } + if (not match(mpenum2, t_mpenum2)) { + setverdict(fail, "Expected(mpenum2): ", t_mpenum2, ", got: ", mpenum2); + } + setverdict(pass); +} + +testcase tc_ref_record_of() runs on CT +{ + template IntList t_mplist1 := { 1, 2 }; + template IntList t_mplist2 := { 10, 3, 1, 2 }; + if (not match(mplist1, t_mplist1)) { + setverdict(fail, "Expected(mplist1): ", t_mplist1, ", got: ", mplist1); + } + if (not match(mplist2, t_mplist2)) { + setverdict(fail, "Expected(mplist2): ", t_mplist2, ", got: ", mplist2); + } + setverdict(pass); +} + +testcase tc_ref_record() runs on CT +{ + template Rec t_mprec1 := { num := 3, str := omit }; + template Rec t_mprec2 := { num := 10, str := "yyyy" }; + template Rec t_mprec3 := { num := 1, str := "abcdefghi" }; + if (not match(mprec1, t_mprec1)) { + setverdict(fail, "Expected(mprec1): ", t_mprec1, ", got: ", mprec1); + } + if (not match(mprec2, t_mprec2)) { + setverdict(fail, "Expected(mprec2): ", t_mprec2, ", got: ", mprec2); + } + if (not match(mprec3, t_mprec3)) { + setverdict(fail, "Expected(mprec3): ", t_mprec3, ", got: ", mprec3); + } + setverdict(pass); +} + +testcase tc_ref_empty_record() runs on CT +{ + template EmptyRec t_mpemptyrec2 := { }; + if (not match(mpemptyrec2, t_mpemptyrec2)) { + setverdict(fail, "Expected(mpemptyrec2): ", t_mpemptyrec2, ", got: ", mpemptyrec2); + } + setverdict(pass); +} + +testcase tc_ref_union() runs on CT +{ + template Uni t_mpuni1 := { bval := true }; + template Uni t_mpuni2 := { ival := 2 }; + template Uni t_mpuni3 := { osval := 'DEADA22CDEADC22A'O }; + if (not match(mpuni1, t_mpuni1)) { + setverdict(fail, "Expected(mpuni1): ", t_mpuni1, ", got: ", mpuni1); + } + if (not match(mpuni2, t_mpuni2)) { + setverdict(fail, "Expected(mpuni2): ", t_mpuni2, ", got: ", mpuni2); + } + if (not match(mpuni3, t_mpuni3)) { + setverdict(fail, "Expected(mpuni3): ", t_mpuni3, ", got: ", mpuni3); + } + setverdict(pass); +} + +testcase tc_ref_array() runs on CT +{ + template TwoStrings t_mparray1 := { "xy", "abcdefghixx" }; + template TwoStrings t_mparray2 := { "xy", "abcdefghixx" }; + if (not match(mparray1, t_mparray1)) { + setverdict(fail, "Expected(mparray1): ", t_mparray1, ", got: ", mparray1); + } + if (not match(mparray2, t_mparray2)) { + setverdict(fail, "Expected(mparray2): ", t_mparray2, ", got: ", mparray2); + } + setverdict(pass); +} + +/******** Test cases (for templates) ********/ + +testcase tc_ref_integer_template() runs on CT +{ + template integer mptint1_exp := (3 .. 6) ifpresent; + template integer mptint2_exp := (8, 7, -21, -1); + if (log2str(mptint1) != log2str(mptint1_exp)) { + setverdict(fail, "Expected(mptint1): ", mptint1_exp, ", got: ", mptint1); + } + if (log2str(mptint2) != log2str(mptint2_exp)) { + setverdict(fail, "Expected(mptint2): ", mptint2_exp, ", got: ", mptint2); + } + setverdict(pass); +} + +testcase tc_ref_float_template() runs on CT +{ + template float mptf1_exp := (33.000000 .. 66.000000) ifpresent; + template float mptf2_exp := (-1.500000, -13.500000); + if (log2str(mptf1) != log2str(mptf1_exp)) { + setverdict(fail, "Expected(mptf1): ", mptf1_exp, ", got: ", mptf1); + } + if (log2str(mptf2) != log2str(mptf2_exp)) { + setverdict(fail, "Expected(mptf2): ", mptf2_exp, ", got: ", mptf2); + } + setverdict(pass); +} + +testcase tc_ref_bitstring_template() runs on CT +{ + template bitstring mptbs1_exp := '110110110110111101101101011'B; + template bitstring mptbs2_exp := * length (3 .. 6) ifpresent; + template bitstring mptbs3_exp := '11??00'B; + if (log2str(mptbs1) != log2str(mptbs1_exp)) { + setverdict(fail, "Expected(mptbs1): ", mptbs1_exp, ", got: ", mptbs1); + } + if (log2str(mptbs2) != log2str(mptbs2_exp)) { + setverdict(fail, "Expected(mptbs2): ", mptbs2_exp, ", got: ", mptbs2); + } + if (log2str(mptbs3) != log2str(mptbs3_exp)) { + setverdict(fail, "Expected(mptbs3): ", mptbs3_exp, ", got: ", mptbs3); + } + setverdict(pass); +} + +testcase tc_ref_hexstring_template() runs on CT +{ + template hexstring mpths1_exp := 'AB77FF3CC12AABA'H; + template hexstring mpths2_exp := ? length (8); + template hexstring mpths3_exp := 'DE*555'H length (7 .. infinity); + if (log2str(mpths1) != log2str(mpths1_exp)) { + setverdict(fail, "Expected(mpths1): ", mpths1_exp, ", got: ", mpths1); + } + if (log2str(mpths2) != log2str(mpths2_exp)) { + setverdict(fail, "Expected(mpths2): ", mpths2_exp, ", got: ", mpths2); + } + if (log2str(mpths3) != log2str(mpths3_exp)) { + setverdict(fail, "Expected(mpths3): ", mpths3_exp, ", got: ", mpths3); + } + setverdict(pass); +} + +testcase tc_ref_octetstring_template() runs on CT +{ + template octetstring mptos1_exp := '01DEAD10'O; + template octetstring mptos2_exp := omit; + template octetstring mptos3_exp := 'A0*'O length (1 .. 5); + if (log2str(mptos1) != log2str(mptos1_exp)) { + setverdict(fail, "Expected(mptos1): ", mptos1_exp, ", got: ", mptos1); + } + if (log2str(mptos2) != log2str(mptos2_exp)) { + setverdict(fail, "Expected(mptos2): ", mptos2_exp, ", got: ", mptos2); + } + if (log2str(mptos3) != log2str(mptos3_exp)) { + setverdict(fail, "Expected(mptos3): ", mptos3_exp, ", got: ", mptos3); + } + setverdict(pass); +} + +testcase tc_ref_charstring_template() runs on CT +{ + template charstring mptcs1_exp := ("a" .. "z") length (2 .. 6); + template charstring mptcs2_exp := "xxabcxx" ifpresent; + template charstring mptcs3_exp := pattern "ab???xdtwo"; + if (log2str(mptcs1) != log2str(mptcs1_exp)) { + setverdict(fail, "Expected(mptcs1): ", mptcs1_exp, ", got: ", mptcs1); + } + if (log2str(mptcs2) != log2str(mptcs2_exp)) { + setverdict(fail, "Expected(mptcs2): ", mptcs2_exp, ", got: ", mptcs2); + } + if (log2str(mptcs3) != log2str(mptcs3_exp)) { + setverdict(fail, "Expected(mptcs3): ", mptcs3_exp, ", got: ", mptcs3); + } + setverdict(pass); +} + +testcase tc_ref_universal_charstring_template() runs on CT +{ + template universal charstring mptucs1_exp := pattern "a??bmacro\q{1,2,3,4}ax\q{0,0,1,113}x\q{0,0,1,97}x"; + template universal charstring mptucs2_exp := "zz" & char(0, 0, 1, 113) & "rhaj" & char(0, 0, 0, 243) & "abcdefghi" & char(3, 5, 10, 5) & "xzz"; + template universal charstring mptucs3_exp := ((char(0, 0, 1, 97) .. char(0, 0, 1, 113)) length (2), ("a" .. "z")); + if (log2str(mptucs1) != log2str(mptucs1_exp)) { + setverdict(fail, "Expected(mptucs1): ", mptucs1_exp, ", got: ", mptucs1); + } + if (log2str(mptucs2) != log2str(mptucs2_exp)) { + setverdict(fail, "Expected(mptucs2): ", mptucs2_exp, ", got: ", mptucs2); + } + if (log2str(mptucs3) != log2str(mptucs3_exp)) { + setverdict(fail, "Expected(mptucs3): ", mptucs3_exp, ", got: ", mptucs3); + } + setverdict(pass); +} + +testcase tc_ref_boolean_template() runs on CT +{ + template boolean mptb1_exp := (true, false); + template boolean mptb2_exp := false; + if (log2str(mptb1) != log2str(mptb1_exp)) { + setverdict(fail, "Expected(mptb1): ", mptb1_exp, ", got: ", mptb1); + } + if (log2str(mptb2) != log2str(mptb2_exp)) { + setverdict(fail, "Expected(mptb2): ", mptb2_exp, ", got: ", mptb2); + } + setverdict(pass); +} + +testcase tc_ref_objid_template() runs on CT +{ + template objid mptobjid1_exp := (objid { 1 2 3 }, objid { 0 0 0 1 }); + template objid mptobjid2_exp := objid { 1 1 7 }; + if (log2str(mptobjid1) != log2str(mptobjid1_exp)) { + setverdict(fail, "Expected(mptobjid1): ", mptobjid1_exp, ", got: ", mptobjid1); + } + if (log2str(mptobjid2) != log2str(mptobjid2_exp)) { + setverdict(fail, "Expected(mptobjid2): ", mptobjid2_exp, ", got: ", mptobjid2); + } + setverdict(pass); +} + +testcase tc_ref_verdicttype_template() runs on CT +{ + template verdicttype mptvt1_exp := (pass, fail, error); + template verdicttype mptvt2_exp := pass; + template verdicttype mptvt3_exp := inconc; + if (log2str(mptvt1) != log2str(mptvt1_exp)) { + setverdict(fail, "Expected(mptvt1): ", mptvt1_exp, ", got: ", mptvt1); + } + if (log2str(mptvt2) != log2str(mptvt2_exp)) { + setverdict(fail, "Expected(mptvt2): ", mptvt2_exp, ", got: ", mptvt2); + } + if (log2str(mptvt3) != log2str(mptvt3_exp)) { + setverdict(fail, "Expected(mptvt3): ", mptvt3_exp, ", got: ", mptvt3); + } + setverdict(pass); +} + +testcase tc_ref_component_template() runs on CT +{ + template CT mptcomp2_exp := (null, mtc, system); + if (log2str(mptcomp2) != log2str(mptcomp2_exp)) { + setverdict(fail, "Expected(mptcomp2): ", mptcomp2_exp, ", got: ", mptcomp2); + } + setverdict(pass); +} + +testcase tc_ref_default_template() runs on CT +{ + template default mptdef2_exp := null; + if (log2str(mptdef2) != log2str(mptdef2_exp)) { + setverdict(fail, "Expected(mptdef2): ", mptdef2_exp, ", got: ", mptdef2); + } + setverdict(pass); +} + +testcase tc_ref_enumerated_template() runs on CT +{ + template Size mptenum1_exp := (Small, Large); + template Size mptenum2_exp := Small; + template Size mptenum3_exp := Medium; + if (log2str(mptenum1) != log2str(mptenum1_exp)) { + setverdict(fail, "Expected(mptenum1): ", mptenum1_exp, ", got: ", mptenum1); + } + if (log2str(mptenum2) != log2str(mptenum2_exp)) { + setverdict(fail, "Expected(mptenum2): ", mptenum2_exp, ", got: ", mptenum2); + } + if (log2str(mptenum3) != log2str(mptenum3_exp)) { + setverdict(fail, "Expected(mptenum3): ", mptenum3_exp, ", got: ", mptenum3); + } + setverdict(pass); +} + +testcase tc_ref_record_of_template() runs on CT +{ + template IntList mptlist1_exp := { *, 2, 1 } length (1 .. 4); + template IntList mptlist2_exp := { 0, 1, 0 }; + template IntList mptlist3_exp := complement({ 0, 1, 0 }, { 1, 2 }, { 10, 3, 1, 2 }); + if (log2str(mptlist1) != log2str(mptlist1_exp)) { + setverdict(fail, "Expected(mptlist1): ", mptlist1_exp, ", got: ", mptlist1); + } + if (log2str(mptlist2) != log2str(mptlist2_exp)) { + setverdict(fail, "Expected(mptlist2): ", mptlist2_exp, ", got: ", mptlist2); + } + if (log2str(mptlist3) != log2str(mptlist3_exp)) { + setverdict(fail, "Expected(mptlist3): ", mptlist3_exp, ", got: ", mptlist3); + } + setverdict(pass); +} + +testcase tc_ref_record_template() runs on CT +{ + template Rec mptrec1_exp := { num := ?, str := * }; + template Rec mptrec2_exp := { num := ?, str := ("a" .. "z") length (2 .. 6) }; + template Rec mptrec3_exp := ({ num := 6, str := omit }, { num := 3, str := omit }, { num := 10, str := "yyyy" }, { num := 1, str := "abcdefghi" }); + if (log2str(mptrec1) != log2str(mptrec1_exp)) { + setverdict(fail, "Expected(mptrec1): ", mptrec1_exp, ", got: ", mptrec1); + } + if (log2str(mptrec2) != log2str(mptrec2_exp)) { + setverdict(fail, "Expected(mptrec2): ", mptrec2_exp, ", got: ", mptrec2); + } + if (log2str(mptrec3) != log2str(mptrec3_exp)) { + setverdict(fail, "Expected(mptrec3): ", mptrec3_exp, ", got: ", mptrec3); + } + setverdict(pass); +} + +testcase tc_ref_empty_record_template() runs on CT +{ + template EmptyRec mptemptyrec1_exp := { }; + template EmptyRec mptemptyrec2_exp := { }; + if (log2str(mptemptyrec1) != log2str(mptemptyrec1_exp)) { + setverdict(fail, "Expected(mptemptyrec1): ", mptemptyrec1_exp, ", got: ", mptemptyrec1); + } + if (log2str(mptemptyrec2) != log2str(mptemptyrec2_exp)) { + setverdict(fail, "Expected(mptemptyrec2): ", mptemptyrec2_exp, ", got: ", mptemptyrec2); + } + setverdict(pass); +} + +testcase tc_ref_union_template() runs on CT +{ + template Uni mptuni1_exp := complement ({ osval := '0000'O }, { ival := 31 }); + template Uni mptuni2_exp := { ival := (8, 7, -21, -1) }; + template Uni mptuni3_exp := ({ bval := true }, { ival := 2 }, { osval := 'DEADA22CDEADC22A'O }); + if (log2str(mptuni1) != log2str(mptuni1_exp)) { + setverdict(fail, "Expected(mptuni1): ", mptuni1_exp, ", got: ", mptuni1); + } + if (log2str(mptuni2) != log2str(mptuni2_exp)) { + setverdict(fail, "Expected(mptuni2): ", mptuni2_exp, ", got: ", mptuni2); + } + if (log2str(mptuni3) != log2str(mptuni3_exp)) { + setverdict(fail, "Expected(mptuni3): ", mptuni3_exp, ", got: ", mptuni3); + } + setverdict(pass); +} + +testcase tc_ref_array_template() runs on CT +{ + template TwoStrings mptarray1_exp := { "one", "two" } ifpresent; + template TwoStrings mptarray2_exp := { "x", ? }; + template TwoStrings mptarray3_exp := { "xy", "abcdefghixx" }; + if (log2str(mptarray1) != log2str(mptarray1_exp)) { + setverdict(fail, "Expected(mptarray1): ", mptarray1_exp, ", got: ", mptarray1); + } + if (log2str(mptarray2) != log2str(mptarray2_exp)) { + setverdict(fail, "Expected(mptarray2): ", mptarray2_exp, ", got: ", mptarray2); + } + if (log2str(mptarray3) != log2str(mptarray3_exp)) { + setverdict(fail, "Expected(mptarray3): ", mptarray3_exp, ", got: ", mptarray3); + } + setverdict(pass); +} + +control { + execute(tc_ref_integer()); + execute(tc_ref_float()); + execute(tc_ref_bitstring()); + execute(tc_ref_hexstring()); + execute(tc_ref_octetstring()); + execute(tc_ref_charstring()); + execute(tc_ref_universal_charstring()); + execute(tc_ref_boolean()); + execute(tc_ref_objid()); + execute(tc_ref_verdicttype()); + execute(tc_ref_component()); + execute(tc_ref_default()); + execute(tc_ref_enumerated()); + execute(tc_ref_record_of()); + execute(tc_ref_record()); + execute(tc_ref_empty_record()); + execute(tc_ref_union()); + execute(tc_ref_array()); + execute(tc_ref_integer_template()); + execute(tc_ref_float_template()); + execute(tc_ref_bitstring_template()); + execute(tc_ref_hexstring_template()); + execute(tc_ref_octetstring_template()); + execute(tc_ref_charstring_template()); + execute(tc_ref_universal_charstring_template()); + execute(tc_ref_boolean_template()); + execute(tc_ref_objid_template()); + execute(tc_ref_verdicttype_template()); + execute(tc_ref_component_template()); + execute(tc_ref_default_template()); + execute(tc_ref_enumerated_template()); + execute(tc_ref_record_of_template()); + execute(tc_ref_record_template()); + execute(tc_ref_empty_record_template()); + execute(tc_ref_union_template()); + execute(tc_ref_array_template()); +} + +} diff --git a/regression_test/cfgFile/ordered_include/Makefile b/regression_test/cfgFile/ordered_include/Makefile index 90a786a91..2feeeb024 100644 --- a/regression_test/cfgFile/ordered_include/Makefile +++ b/regression_test/cfgFile/ordered_include/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 @@ -18,6 +18,11 @@ DIR_SINGLE := dir_single_mode DIR_PARALLEL := dir_parallel_mode GENERATED_DIRS := $(DIR_SINGLE) $(DIR_PARALLEL) +COVERAGE_FLAG := +ifeq ($(COVERAGE), yes) + COVERAGE_FLAG += -C +endif + MAKE_PROG := $(MAKE) # List of fake targets: @@ -28,12 +33,12 @@ all: $(GENERATED_DIRS) dir_single_mode: mkdir $@ cd $@ && for file in $(FILES); do ln -s ../$$file || exit; done - cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen -s ./* && $(MAKE_PROG) + cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen $(COVERAGE_FLAG) -s ./* && $(MAKE_PROG) dir_parallel_mode: mkdir $@ cd $@ && for file in $(FILES); do ln -s ../$$file || exit; done - cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen ./* && $(MAKE_PROG) + cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen $(COVERAGE_FLAG) ./* && $(MAKE_PROG) run: clean run_single run_parallel diff --git a/regression_test/cfgFile/ordered_include/config_sub2/oi2_sub.cfg b/regression_test/cfgFile/ordered_include/config_sub2/oi2_sub.cfg index 3eb6050b3..f9cefd121 100644 --- a/regression_test/cfgFile/ordered_include/config_sub2/oi2_sub.cfg +++ b/regression_test/cfgFile/ordered_include/config_sub2/oi2_sub.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/cfgFile/ordered_include/configs_sub/oi1_subfolder1.cfg b/regression_test/cfgFile/ordered_include/configs_sub/oi1_subfolder1.cfg index 7ad348726..c939ce8da 100644 --- a/regression_test/cfgFile/ordered_include/configs_sub/oi1_subfolder1.cfg +++ b/regression_test/cfgFile/ordered_include/configs_sub/oi1_subfolder1.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/cfgFile/ordered_include/oi.ttcn b/regression_test/cfgFile/ordered_include/oi.ttcn index d48829d5a..7c57b4485 100644 --- a/regression_test/cfgFile/ordered_include/oi.ttcn +++ b/regression_test/cfgFile/ordered_include/oi.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/cfgFile/ordered_include/oi1.cfg b/regression_test/cfgFile/ordered_include/oi1.cfg index ca2db2387..67cf3b334 100644 --- a/regression_test/cfgFile/ordered_include/oi1.cfg +++ b/regression_test/cfgFile/ordered_include/oi1.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/cfgFile/ordered_include/oi1_after1.cfg b/regression_test/cfgFile/ordered_include/oi1_after1.cfg index 01bec9a71..bc897f5ef 100644 --- a/regression_test/cfgFile/ordered_include/oi1_after1.cfg +++ b/regression_test/cfgFile/ordered_include/oi1_after1.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/cfgFile/ordered_include/oi1_after2.cfg b/regression_test/cfgFile/ordered_include/oi1_after2.cfg index 038945def..7d6099597 100644 --- a/regression_test/cfgFile/ordered_include/oi1_after2.cfg +++ b/regression_test/cfgFile/ordered_include/oi1_after2.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/cfgFile/ordered_include/oi1_after3.cfg b/regression_test/cfgFile/ordered_include/oi1_after3.cfg index c59af8468..04ae8e7ea 100644 --- a/regression_test/cfgFile/ordered_include/oi1_after3.cfg +++ b/regression_test/cfgFile/ordered_include/oi1_after3.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/cfgFile/ordered_include/oi1_before1.cfg b/regression_test/cfgFile/ordered_include/oi1_before1.cfg index 21395e258..f19ba3de1 100644 --- a/regression_test/cfgFile/ordered_include/oi1_before1.cfg +++ b/regression_test/cfgFile/ordered_include/oi1_before1.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/cfgFile/ordered_include/oi1_before2.cfg b/regression_test/cfgFile/ordered_include/oi1_before2.cfg index bbb90c252..d4ca64eb7 100644 --- a/regression_test/cfgFile/ordered_include/oi1_before2.cfg +++ b/regression_test/cfgFile/ordered_include/oi1_before2.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/cfgFile/ordered_include/oi1_before_include.cfg b/regression_test/cfgFile/ordered_include/oi1_before_include.cfg index 7d8f1c176..6a7e90a62 100644 --- a/regression_test/cfgFile/ordered_include/oi1_before_include.cfg +++ b/regression_test/cfgFile/ordered_include/oi1_before_include.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/cfgFile/ordered_include/oi2.cfg b/regression_test/cfgFile/ordered_include/oi2.cfg index 5894cd7c5..e0ed29923 100644 --- a/regression_test/cfgFile/ordered_include/oi2.cfg +++ b/regression_test/cfgFile/ordered_include/oi2.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/cfgFile/ordered_include/oi22.cfg b/regression_test/cfgFile/ordered_include/oi22.cfg index d362c01d2..1b50c37c1 100644 --- a/regression_test/cfgFile/ordered_include/oi22.cfg +++ b/regression_test/cfgFile/ordered_include/oi22.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/cfgFile/ordered_include/oi23.cfg b/regression_test/cfgFile/ordered_include/oi23.cfg index f448e9784..e7cc50902 100644 --- a/regression_test/cfgFile/ordered_include/oi23.cfg +++ b/regression_test/cfgFile/ordered_include/oi23.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/cfgFile/ordered_include/oi2_nomacro.cfg b/regression_test/cfgFile/ordered_include/oi2_nomacro.cfg index b8d030516..4dfcc237a 100644 --- a/regression_test/cfgFile/ordered_include/oi2_nomacro.cfg +++ b/regression_test/cfgFile/ordered_include/oi2_nomacro.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/cfgFile/ordered_include/oi_after1.cfg b/regression_test/cfgFile/ordered_include/oi_after1.cfg index c2e416f7d..11e6f2849 100644 --- a/regression_test/cfgFile/ordered_include/oi_after1.cfg +++ b/regression_test/cfgFile/ordered_include/oi_after1.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/cfgFile/ordered_include/oi_after2.cfg b/regression_test/cfgFile/ordered_include/oi_after2.cfg index b6bf782c7..ea9a635b9 100644 --- a/regression_test/cfgFile/ordered_include/oi_after2.cfg +++ b/regression_test/cfgFile/ordered_include/oi_after2.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/cfgFile/ordered_include/oi_after_list1.cfg b/regression_test/cfgFile/ordered_include/oi_after_list1.cfg index 14be06f9c..d89cf1610 100644 --- a/regression_test/cfgFile/ordered_include/oi_after_list1.cfg +++ b/regression_test/cfgFile/ordered_include/oi_after_list1.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/cfgFile/ordered_include/oi_after_list2.cfg b/regression_test/cfgFile/ordered_include/oi_after_list2.cfg index 42c7fef8b..1cd50b427 100644 --- a/regression_test/cfgFile/ordered_include/oi_after_list2.cfg +++ b/regression_test/cfgFile/ordered_include/oi_after_list2.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/cfgFile/ordered_include/oi_before1.cfg b/regression_test/cfgFile/ordered_include/oi_before1.cfg index e55b64cde..4c97ee0f4 100644 --- a/regression_test/cfgFile/ordered_include/oi_before1.cfg +++ b/regression_test/cfgFile/ordered_include/oi_before1.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/cfgFile/ordered_include/oi_before2.cfg b/regression_test/cfgFile/ordered_include/oi_before2.cfg index 89118853f..3e592b56a 100644 --- a/regression_test/cfgFile/ordered_include/oi_before2.cfg +++ b/regression_test/cfgFile/ordered_include/oi_before2.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/cfgFile/ordered_include/oi_before3.cfg b/regression_test/cfgFile/ordered_include/oi_before3.cfg index e6c3169db..1d21240f7 100644 --- a/regression_test/cfgFile/ordered_include/oi_before3.cfg +++ b/regression_test/cfgFile/ordered_include/oi_before3.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/cfgFile/ordered_include/oi_before4.cfg b/regression_test/cfgFile/ordered_include/oi_before4.cfg index 400722e25..75243fddc 100644 --- a/regression_test/cfgFile/ordered_include/oi_before4.cfg +++ b/regression_test/cfgFile/ordered_include/oi_before4.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/cfgFile/ordered_include/oi_before5.cfg b/regression_test/cfgFile/ordered_include/oi_before5.cfg index 947f113ff..a78c93aac 100644 --- a/regression_test/cfgFile/ordered_include/oi_before5.cfg +++ b/regression_test/cfgFile/ordered_include/oi_before5.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/cfgFile/ordered_include/oi_include_interference.cfg b/regression_test/cfgFile/ordered_include/oi_include_interference.cfg index 76fde66b2..ada1118fd 100644 --- a/regression_test/cfgFile/ordered_include/oi_include_interference.cfg +++ b/regression_test/cfgFile/ordered_include/oi_include_interference.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/cfgFile/ordered_include/oi_include_mix.cfg b/regression_test/cfgFile/ordered_include/oi_include_mix.cfg index 9cce67977..8e31f4921 100644 --- a/regression_test/cfgFile/ordered_include/oi_include_mix.cfg +++ b/regression_test/cfgFile/ordered_include/oi_include_mix.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/cfgFile/ordered_include/oi_last1.cfg b/regression_test/cfgFile/ordered_include/oi_last1.cfg index 48e6487b2..6e1020656 100644 --- a/regression_test/cfgFile/ordered_include/oi_last1.cfg +++ b/regression_test/cfgFile/ordered_include/oi_last1.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/cfgFile/ordered_include/oi_last2.cfg b/regression_test/cfgFile/ordered_include/oi_last2.cfg index f89fd35cb..b07578a47 100644 --- a/regression_test/cfgFile/ordered_include/oi_last2.cfg +++ b/regression_test/cfgFile/ordered_include/oi_last2.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/cfgFile/ordered_include/oi_last3.cfg b/regression_test/cfgFile/ordered_include/oi_last3.cfg index 728bc3395..60270caca 100644 --- a/regression_test/cfgFile/ordered_include/oi_last3.cfg +++ b/regression_test/cfgFile/ordered_include/oi_last3.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/cfgFile/ordered_include/oi_subfolder1.cfg b/regression_test/cfgFile/ordered_include/oi_subfolder1.cfg index 3c605dd0e..21649c171 100644 --- a/regression_test/cfgFile/ordered_include/oi_subfolder1.cfg +++ b/regression_test/cfgFile/ordered_include/oi_subfolder1.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/cfgFile/testport_parameters/Makefile b/regression_test/cfgFile/testport_parameters/Makefile index 2c63d3af3..96148757d 100644 --- a/regression_test/cfgFile/testport_parameters/Makefile +++ b/regression_test/cfgFile/testport_parameters/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 @@ -17,6 +17,11 @@ DIR_SINGLE := dir_single_mode DIR_PARALLEL := dir_parallel_mode GENERATED_DIRS := $(DIR_SINGLE) $(DIR_PARALLEL) +COVERAGE_FLAG := +ifeq ($(COVERAGE), yes) + COVERAGE_FLAG += -C +endif + MAKE_PROG := $(MAKE) # List of fake targets: @@ -27,12 +32,12 @@ all: $(GENERATED_DIRS) dir_single_mode: mkdir $@ cd $@ && for file in $(FILES); do ln -s ../$$file || exit; done - cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen -s $(TTCN_MODULE) $(PORT) && $(MAKE_PROG) + cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen $(COVERAGE_FLAG) -s $(TTCN_MODULE) $(PORT) && $(MAKE_PROG) dir_parallel_mode: mkdir $@ cd $@ && for file in $(FILES); do ln -s ../$$file || exit; done - cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen $(TTCN_MODULE) $(PORT) && $(MAKE_PROG) + cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen $(COVERAGE_FLAG) $(TTCN_MODULE) $(PORT) && $(MAKE_PROG) run: $(GENERATED_DIRS) cd $(DIR_SINGLE) && ./$(RUNNABLE) $(CFG) diff --git a/regression_test/cfgFile/testport_parameters/PCOType.cc b/regression_test/cfgFile/testport_parameters/PCOType.cc index cda54f14c..8ca509e3b 100644 --- a/regression_test/cfgFile/testport_parameters/PCOType.cc +++ b/regression_test/cfgFile/testport_parameters/PCOType.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/cfgFile/testport_parameters/PCOType.hh b/regression_test/cfgFile/testport_parameters/PCOType.hh index 2e90bf42a..1bd416dd4 100644 --- a/regression_test/cfgFile/testport_parameters/PCOType.hh +++ b/regression_test/cfgFile/testport_parameters/PCOType.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/cfgFile/testport_parameters/array_index.cfg b/regression_test/cfgFile/testport_parameters/array_index.cfg index 3b5630dde..1e5b5c5d7 100644 --- a/regression_test/cfgFile/testport_parameters/array_index.cfg +++ b/regression_test/cfgFile/testport_parameters/array_index.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/cfgFile/testport_parameters/array_index.ttcn b/regression_test/cfgFile/testport_parameters/array_index.ttcn index 081d477ed..d071a3563 100644 --- a/regression_test/cfgFile/testport_parameters/array_index.ttcn +++ b/regression_test/cfgFile/testport_parameters/array_index.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/cfg_list_concat/Makefile b/regression_test/cfg_list_concat/Makefile index 18729c4aa..a734dec64 100644 --- a/regression_test/cfg_list_concat/Makefile +++ b/regression_test/cfg_list_concat/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/cfg_list_concat/concat.prj b/regression_test/cfg_list_concat/concat.prj index 750a5cbfc..c66c70393 100644 --- a/regression_test/cfg_list_concat/concat.prj +++ b/regression_test/cfg_list_concat/concat.prj @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/cfg_list_concat/concat.ttcn b/regression_test/cfg_list_concat/concat.ttcn index d06e7d1e1..954740442 100644 --- a/regression_test/cfg_list_concat/concat.ttcn +++ b/regression_test/cfg_list_concat/concat.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/cfg_list_concat/everything.cfg b/regression_test/cfg_list_concat/everything.cfg index 48b699755..f30e4db83 100644 --- a/regression_test/cfg_list_concat/everything.cfg +++ b/regression_test/cfg_list_concat/everything.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/cfg_list_concat/sub1.cfg b/regression_test/cfg_list_concat/sub1.cfg index 1125829bd..c60e0476b 100644 --- a/regression_test/cfg_list_concat/sub1.cfg +++ b/regression_test/cfg_list_concat/sub1.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/cfg_list_concat/sub2.cfg b/regression_test/cfg_list_concat/sub2.cfg index a39ca698c..b09086344 100644 --- a/regression_test/cfg_list_concat/sub2.cfg +++ b/regression_test/cfg_list_concat/sub2.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/charOper/Makefile b/regression_test/charOper/Makefile index 60304038f..01f765098 100644 --- a/regression_test/charOper/Makefile +++ b/regression_test/charOper/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/charOper/TcharOper.ttcn b/regression_test/charOper/TcharOper.ttcn index fa9c80164..7051294c8 100644 --- a/regression_test/charOper/TcharOper.ttcn +++ b/regression_test/charOper/TcharOper.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/charOper/config.cfg b/regression_test/charOper/config.cfg index 00d2aa635..d116d6250 100644 --- a/regression_test/charOper/config.cfg +++ b/regression_test/charOper/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/charstrOper/Makefile b/regression_test/charstrOper/Makefile index 24ee9fab0..8d22a0a80 100644 --- a/regression_test/charstrOper/Makefile +++ b/regression_test/charstrOper/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/charstrOper/TcharstrOper.ttcn b/regression_test/charstrOper/TcharstrOper.ttcn index 3651da426..f35d373e1 100644 --- a/regression_test/charstrOper/TcharstrOper.ttcn +++ b/regression_test/charstrOper/TcharstrOper.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/charstrOper/config.cfg b/regression_test/charstrOper/config.cfg index 1f65f79e6..f15e309ce 100644 --- a/regression_test/charstrOper/config.cfg +++ b/regression_test/charstrOper/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/commMessage/HS41022.ttcn b/regression_test/commMessage/HS41022.ttcn index 440772e25..4943434ab 100644 --- a/regression_test/commMessage/HS41022.ttcn +++ b/regression_test/commMessage/HS41022.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/commMessage/ImplMsgEncData.asn b/regression_test/commMessage/ImplMsgEncData.asn index c0ddebaae..ca452a92b 100644 --- a/regression_test/commMessage/ImplMsgEncData.asn +++ b/regression_test/commMessage/ImplMsgEncData.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/commMessage/Makefile b/regression_test/commMessage/Makefile index af873eaf1..d1623005f 100644 --- a/regression_test/commMessage/Makefile +++ b/regression_test/commMessage/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/commMessage/TcommMessage.ttcn b/regression_test/commMessage/TcommMessage.ttcn index 59e58a619..8c8e9a47f 100644 --- a/regression_test/commMessage/TcommMessage.ttcn +++ b/regression_test/commMessage/TcommMessage.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/commMessage/config.cfg b/regression_test/commMessage/config.cfg index 2553fc92c..de2682c2d 100644 --- a/regression_test/commMessage/config.cfg +++ b/regression_test/commMessage/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/commMessage/config_parallel.cfg b/regression_test/commMessage/config_parallel.cfg index f41ea383d..432a11cac 100644 --- a/regression_test/commMessage/config_parallel.cfg +++ b/regression_test/commMessage/config_parallel.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/commProcedure/ExtProcPort.cc b/regression_test/commProcedure/ExtProcPort.cc index 5873216a9..bd83016b7 100644 --- a/regression_test/commProcedure/ExtProcPort.cc +++ b/regression_test/commProcedure/ExtProcPort.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/commProcedure/ExtProcPort.hh b/regression_test/commProcedure/ExtProcPort.hh index 81d26816a..b914e7548 100644 --- a/regression_test/commProcedure/ExtProcPort.hh +++ b/regression_test/commProcedure/ExtProcPort.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/commProcedure/Makefile b/regression_test/commProcedure/Makefile index 59560abdd..20d73f808 100644 --- a/regression_test/commProcedure/Makefile +++ b/regression_test/commProcedure/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/commProcedure/PortAddress.cc b/regression_test/commProcedure/PortAddress.cc index b3dc83ac3..4dafcfec2 100644 --- a/regression_test/commProcedure/PortAddress.cc +++ b/regression_test/commProcedure/PortAddress.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/commProcedure/PortAddress.hh b/regression_test/commProcedure/PortAddress.hh index 24e517aff..35fc1d386 100644 --- a/regression_test/commProcedure/PortAddress.hh +++ b/regression_test/commProcedure/PortAddress.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/commProcedure/ProcPort.ttcn b/regression_test/commProcedure/ProcPort.ttcn index f03a2b962..7f1a3cd33 100644 --- a/regression_test/commProcedure/ProcPort.ttcn +++ b/regression_test/commProcedure/ProcPort.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 @@ -19,6 +19,7 @@ module ProcPort { signature MyProc5(in integer A, in integer B) return float exception(charstring, MyRecord); signature s_StopPTC(); + signature MyProc6(inout integer I); template s_StopPTC StopPTC := { } @@ -118,6 +119,10 @@ module ProcPort { out MyProc4; in MyProc5; } with { extension "address" } + + type port ProcPort3 procedure { + inout MyProc6; + } with { extension "internal" } type component ProcComponent { @@ -147,6 +152,10 @@ module ProcPort { { port PortAddress P; } + + type component ProcComponent3 { + port ProcPort3 pt; + } function GetCall_behav1() runs on ProcComponent2 { while(true) { @@ -223,6 +232,27 @@ module ProcPort { } } } + + // parameters values + const integer c_CallParam := 10; + const integer c_ReplyParam := 19; + + // error codes + template integer t_getCall_invalidValue := -1; + template integer t_getCall_timeout := -2; + + function GetCallParameters_behav() runs on ProcComponent3 { + var integer x := 0; + timer t := 1.0; + t.start; + alt { + [] pt.getcall(MyProc6:{?}) -> param (x) { + if (c_CallParam == x) { pt.reply(MyProc6:{c_ReplyParam}); } + else { pt.reply(MyProc6:{t_getCall_invalidValue}); } + } + [] t.timeout { pt.reply(MyProc6:{t_getCall_timeout}); } + } + } testcase Call_tc1() runs on ProcComponent { /* Non-blocking calls */ @@ -594,6 +624,27 @@ function signatureEncode(template MyProc par1, template MyProc par2) runs on add log(par1, par2); } + // tests the 'param' directive in functions 'getcall' and 'getreply', + // specificly with signatures containing 'inout' parameters (HT93096) + testcase GetReplyParameters_tc() runs on ProcComponent3 { + var ProcComponent3 c := ProcComponent3.create; + connect(c:pt, self:pt); + c.start(GetCallParameters_behav()); + + var integer x := 0; + pt.call(MyProc6:{c_CallParam}, 1.0) { + [] pt.getreply(MyProc6:{t_getCall_invalidValue}) { setverdict(fail, "invalid getcall parameter"); } + [] pt.getreply(MyProc6:{t_getCall_timeout}) { setverdict(fail, "getcall timed out"); } + [] pt.getreply(MyProc6:{?}) -> param (x) { + if (c_ReplyParam == x) { setverdict(pass); } + else { setverdict(fail, "invalid getreply parameter"); } + } + [] pt.catch(timeout) { setverdict(fail, "getreply timed out"); } + } + + c.done; + } + control { execute(Call_tc1()); execute(Call_tc2()); @@ -607,5 +658,6 @@ function signatureEncode(template MyProc par1, template MyProc par2) runs on add execute(PortAddress_internal_usage()); execute(PortAddress_external_usage1()); execute(PortAddress_external_usage2()); + execute(GetReplyParameters_tc()); } } diff --git a/regression_test/compileonly/Makefile b/regression_test/compileonly/Makefile index 580e20c7a..e4b421d6f 100644 --- a/regression_test/compileonly/Makefile +++ b/regression_test/compileonly/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 @@ -14,7 +14,7 @@ CODIRS := dynamicTemplate styleGuide topLevelPdu \ centralstorage mfgen-tpd \ openType optionalAssignCompare portConstructor \ isbound namedActualParameters assignmentNotation \ - attribQualif HT48786 selectCase + attribQualif HT48786 selectCase openTypeNames all dep clean distclean: for dir in $(CODIRS); do $(MAKE) -C $$dir $@ || exit; done diff --git a/regression_test/compileonly/assignmentNotation/Makefile b/regression_test/compileonly/assignmentNotation/Makefile index 4b28340df..877be3d65 100644 --- a/regression_test/compileonly/assignmentNotation/Makefile +++ b/regression_test/compileonly/assignmentNotation/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/assignmentNotation/TassignmentNotation.ttcn b/regression_test/compileonly/assignmentNotation/TassignmentNotation.ttcn index 050aa27bc..58ddea587 100644 --- a/regression_test/compileonly/assignmentNotation/TassignmentNotation.ttcn +++ b/regression_test/compileonly/assignmentNotation/TassignmentNotation.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/attribQualif/Makefile b/regression_test/compileonly/attribQualif/Makefile index d7b338ee0..1136916f3 100644 --- a/regression_test/compileonly/attribQualif/Makefile +++ b/regression_test/compileonly/attribQualif/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/attribQualif/TattribQualif.ttcn b/regression_test/compileonly/attribQualif/TattribQualif.ttcn index 1f8795018..78001709a 100644 --- a/regression_test/compileonly/attribQualif/TattribQualif.ttcn +++ b/regression_test/compileonly/attribQualif/TattribQualif.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/centralstorage/Makefile b/regression_test/compileonly/centralstorage/Makefile index d8c91f33f..a3a87963e 100644 --- a/regression_test/compileonly/centralstorage/Makefile +++ b/regression_test/compileonly/centralstorage/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/centralstorage/base_asn/Base_asn.asn b/regression_test/compileonly/centralstorage/base_asn/Base_asn.asn index a39a63771..44f25eebb 100644 --- a/regression_test/compileonly/centralstorage/base_asn/Base_asn.asn +++ b/regression_test/compileonly/centralstorage/base_asn/Base_asn.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/centralstorage/base_mixed/Base_mixed_asn.asn b/regression_test/compileonly/centralstorage/base_mixed/Base_mixed_asn.asn index 99ddc7b1a..be00cbc4c 100644 --- a/regression_test/compileonly/centralstorage/base_mixed/Base_mixed_asn.asn +++ b/regression_test/compileonly/centralstorage/base_mixed/Base_mixed_asn.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/centralstorage/base_mixed/base_mixed_PT.cc b/regression_test/compileonly/centralstorage/base_mixed/base_mixed_PT.cc index bd9ff4c91..dd4f95f98 100644 --- a/regression_test/compileonly/centralstorage/base_mixed/base_mixed_PT.cc +++ b/regression_test/compileonly/centralstorage/base_mixed/base_mixed_PT.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/centralstorage/base_mixed/base_mixed_PT.hh b/regression_test/compileonly/centralstorage/base_mixed/base_mixed_PT.hh index 9d04672e6..8daa98408 100644 --- a/regression_test/compileonly/centralstorage/base_mixed/base_mixed_PT.hh +++ b/regression_test/compileonly/centralstorage/base_mixed/base_mixed_PT.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/centralstorage/base_mixed/base_mixed_ttcn.ttcn b/regression_test/compileonly/centralstorage/base_mixed/base_mixed_ttcn.ttcn index 920d6abd0..cbf3bacb2 100644 --- a/regression_test/compileonly/centralstorage/base_mixed/base_mixed_ttcn.ttcn +++ b/regression_test/compileonly/centralstorage/base_mixed/base_mixed_ttcn.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/centralstorage/base_mixed/base_mixed_ttcnpp.ttcnpp b/regression_test/compileonly/centralstorage/base_mixed/base_mixed_ttcnpp.ttcnpp index 5a5b05090..11e43eae3 100644 --- a/regression_test/compileonly/centralstorage/base_mixed/base_mixed_ttcnpp.ttcnpp +++ b/regression_test/compileonly/centralstorage/base_mixed/base_mixed_ttcnpp.ttcnpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/centralstorage/base_ttcn/base_PT.cc b/regression_test/compileonly/centralstorage/base_ttcn/base_PT.cc index 3e06db682..2c32afb96 100644 --- a/regression_test/compileonly/centralstorage/base_ttcn/base_PT.cc +++ b/regression_test/compileonly/centralstorage/base_ttcn/base_PT.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/centralstorage/base_ttcn/base_PT.hh b/regression_test/compileonly/centralstorage/base_ttcn/base_PT.hh index 877fac6f8..74ed796f8 100644 --- a/regression_test/compileonly/centralstorage/base_ttcn/base_PT.hh +++ b/regression_test/compileonly/centralstorage/base_ttcn/base_PT.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/centralstorage/base_ttcn/base_ttcn.ttcnpp b/regression_test/compileonly/centralstorage/base_ttcn/base_ttcn.ttcnpp index aa4b14d71..41e719dca 100644 --- a/regression_test/compileonly/centralstorage/base_ttcn/base_ttcn.ttcnpp +++ b/regression_test/compileonly/centralstorage/base_ttcn/base_ttcn.ttcnpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/centralstorage/extended_ttcn/extended_ttcn.ttcn b/regression_test/compileonly/centralstorage/extended_ttcn/extended_ttcn.ttcn index 2ad18389e..2817efd61 100644 --- a/regression_test/compileonly/centralstorage/extended_ttcn/extended_ttcn.ttcn +++ b/regression_test/compileonly/centralstorage/extended_ttcn/extended_ttcn.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/centralstorage/extended_ttcn/extended_ttcnpp.ttcnpp b/regression_test/compileonly/centralstorage/extended_ttcn/extended_ttcnpp.ttcnpp index 150fe52f5..4a32e5d69 100644 --- a/regression_test/compileonly/centralstorage/extended_ttcn/extended_ttcnpp.ttcnpp +++ b/regression_test/compileonly/centralstorage/extended_ttcn/extended_ttcnpp.ttcnpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/centralstorage/separate_project/separate_PT.cc b/regression_test/compileonly/centralstorage/separate_project/separate_PT.cc index df78a8afc..be439b04a 100644 --- a/regression_test/compileonly/centralstorage/separate_project/separate_PT.cc +++ b/regression_test/compileonly/centralstorage/separate_project/separate_PT.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/centralstorage/separate_project/separate_PT.hh b/regression_test/compileonly/centralstorage/separate_project/separate_PT.hh index 52f192e31..ab28a50b4 100644 --- a/regression_test/compileonly/centralstorage/separate_project/separate_PT.hh +++ b/regression_test/compileonly/centralstorage/separate_project/separate_PT.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/centralstorage/separate_project/separate_ttcn.ttcn b/regression_test/compileonly/centralstorage/separate_project/separate_ttcn.ttcn index 9ea1826c0..37af7d9d2 100644 --- a/regression_test/compileonly/centralstorage/separate_project/separate_ttcn.ttcn +++ b/regression_test/compileonly/centralstorage/separate_project/separate_ttcn.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/centralstorage/separate_project/separate_ttcnpp.ttcnpp b/regression_test/compileonly/centralstorage/separate_project/separate_ttcnpp.ttcnpp index cc050c8bb..dd01dda15 100644 --- a/regression_test/compileonly/centralstorage/separate_project/separate_ttcnpp.ttcnpp +++ b/regression_test/compileonly/centralstorage/separate_project/separate_ttcnpp.ttcnpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/centralstorage/separate_user/config.cfg b/regression_test/compileonly/centralstorage/separate_user/config.cfg index f7cf2224c..c95a5c87c 100644 --- a/regression_test/compileonly/centralstorage/separate_user/config.cfg +++ b/regression_test/compileonly/centralstorage/separate_user/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/centralstorage/separate_user/separate_user.ttcn b/regression_test/compileonly/centralstorage/separate_user/separate_user.ttcn index 59582da5a..8e07356cb 100644 --- a/regression_test/compileonly/centralstorage/separate_user/separate_user.ttcn +++ b/regression_test/compileonly/centralstorage/separate_user/separate_user.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/centralstorage/user_all_bases/user_all_bases.ttcn b/regression_test/compileonly/centralstorage/user_all_bases/user_all_bases.ttcn index f0c24e2ad..2e858d163 100644 --- a/regression_test/compileonly/centralstorage/user_all_bases/user_all_bases.ttcn +++ b/regression_test/compileonly/centralstorage/user_all_bases/user_all_bases.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/centralstorage/user_ttcn/fake.ttcnpp b/regression_test/compileonly/centralstorage/user_ttcn/fake.ttcnpp index b0f8aa428..21f8704e0 100644 --- a/regression_test/compileonly/centralstorage/user_ttcn/fake.ttcnpp +++ b/regression_test/compileonly/centralstorage/user_ttcn/fake.ttcnpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/centralstorage/user_ttcn/user_ttcn.ttcn b/regression_test/compileonly/centralstorage/user_ttcn/user_ttcn.ttcn index 989c6e3a7..794163090 100644 --- a/regression_test/compileonly/centralstorage/user_ttcn/user_ttcn.ttcn +++ b/regression_test/compileonly/centralstorage/user_ttcn/user_ttcn.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/circularImport/A.asn b/regression_test/compileonly/circularImport/A.asn index 1955f4fbc..1abc41c0a 100644 --- a/regression_test/compileonly/circularImport/A.asn +++ b/regression_test/compileonly/circularImport/A.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/circularImport/B.asn b/regression_test/compileonly/circularImport/B.asn index 1db5ab900..638b94bb2 100644 --- a/regression_test/compileonly/circularImport/B.asn +++ b/regression_test/compileonly/circularImport/B.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/circularImport/Makefile b/regression_test/compileonly/circularImport/Makefile index 865dd917e..77a859825 100644 --- a/regression_test/compileonly/circularImport/Makefile +++ b/regression_test/compileonly/circularImport/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/compareImported/A.ttcn b/regression_test/compileonly/compareImported/A.ttcn index 2fceb859f..b1a74779e 100644 --- a/regression_test/compileonly/compareImported/A.ttcn +++ b/regression_test/compileonly/compareImported/A.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/compareImported/B.ttcn b/regression_test/compileonly/compareImported/B.ttcn index 064d93b69..5c5e4afb2 100644 --- a/regression_test/compileonly/compareImported/B.ttcn +++ b/regression_test/compileonly/compareImported/B.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/compareImported/C.ttcn b/regression_test/compileonly/compareImported/C.ttcn index 384c99beb..0ed2b3c0c 100644 --- a/regression_test/compileonly/compareImported/C.ttcn +++ b/regression_test/compileonly/compareImported/C.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/compareImported/Makefile b/regression_test/compileonly/compareImported/Makefile index 7d4a24096..a4f9610a4 100644 --- a/regression_test/compileonly/compareImported/Makefile +++ b/regression_test/compileonly/compareImported/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/compoundif/Makefile b/regression_test/compileonly/compoundif/Makefile index 12e484cb7..d76b906e8 100644 --- a/regression_test/compileonly/compoundif/Makefile +++ b/regression_test/compileonly/compoundif/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/compoundif/Tcompoundif.ttcn b/regression_test/compileonly/compoundif/Tcompoundif.ttcn index 564e71aa5..0190b8822 100644 --- a/regression_test/compileonly/compoundif/Tcompoundif.ttcn +++ b/regression_test/compileonly/compoundif/Tcompoundif.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/dynamicTemplate/DynamicTemplate.ttcn b/regression_test/compileonly/dynamicTemplate/DynamicTemplate.ttcn index e41a2345f..fbed702df 100644 --- a/regression_test/compileonly/dynamicTemplate/DynamicTemplate.ttcn +++ b/regression_test/compileonly/dynamicTemplate/DynamicTemplate.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/dynamicTemplate/Makefile b/regression_test/compileonly/dynamicTemplate/Makefile index 34671e7fc..f3aa74ba7 100644 --- a/regression_test/compileonly/dynamicTemplate/Makefile +++ b/regression_test/compileonly/dynamicTemplate/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/dynamicTemplate/external.cc b/regression_test/compileonly/dynamicTemplate/external.cc index efc42ea77..4a476189a 100644 --- a/regression_test/compileonly/dynamicTemplate/external.cc +++ b/regression_test/compileonly/dynamicTemplate/external.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/isbound/Makefile b/regression_test/compileonly/isbound/Makefile index 3002b83cc..5b1a36ea5 100644 --- a/regression_test/compileonly/isbound/Makefile +++ b/regression_test/compileonly/isbound/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/isbound/bad_SE.ttcn b/regression_test/compileonly/isbound/bad_SE.ttcn index 73d7db6f3..e7797067d 100644 --- a/regression_test/compileonly/isbound/bad_SE.ttcn +++ b/regression_test/compileonly/isbound/bad_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/isbound/bogus_SY.ttcn b/regression_test/compileonly/isbound/bogus_SY.ttcn index 732cbfbb6..a7ff36be7 100644 --- a/regression_test/compileonly/isbound/bogus_SY.ttcn +++ b/regression_test/compileonly/isbound/bogus_SY.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/isbound/isbound_component_OK.ttcn b/regression_test/compileonly/isbound/isbound_component_OK.ttcn index ed8d529e6..1e757fe6b 100644 --- a/regression_test/compileonly/isbound/isbound_component_OK.ttcn +++ b/regression_test/compileonly/isbound/isbound_component_OK.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/isbound/isbound_port_SE.ttcn b/regression_test/compileonly/isbound/isbound_port_SE.ttcn index 5ef147634..34dece705 100644 --- a/regression_test/compileonly/isbound/isbound_port_SE.ttcn +++ b/regression_test/compileonly/isbound/isbound_port_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/isbound/isbound_testcase_SE.ttcn b/regression_test/compileonly/isbound/isbound_testcase_SE.ttcn index 757c7f4f0..6d1a9d110 100644 --- a/regression_test/compileonly/isbound/isbound_testcase_SE.ttcn +++ b/regression_test/compileonly/isbound/isbound_testcase_SE.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/isbound/one_OK.ttcn b/regression_test/compileonly/isbound/one_OK.ttcn index 5a2b6c110..9da4a4e77 100644 --- a/regression_test/compileonly/isbound/one_OK.ttcn +++ b/regression_test/compileonly/isbound/one_OK.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/COMMON/ProtocolModules_Common.tpd b/regression_test/compileonly/mfgen-tpd/COMMON/ProtocolModules_Common.tpd index 90d7df23a..521397070 100644 --- a/regression_test/compileonly/mfgen-tpd/COMMON/ProtocolModules_Common.tpd +++ b/regression_test/compileonly/mfgen-tpd/COMMON/ProtocolModules_Common.tpd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/COMMON/src/General_Types.ttcn b/regression_test/compileonly/mfgen-tpd/COMMON/src/General_Types.ttcn index 5cdee6fee..2d6036eaa 100644 --- a/regression_test/compileonly/mfgen-tpd/COMMON/src/General_Types.ttcn +++ b/regression_test/compileonly/mfgen-tpd/COMMON/src/General_Types.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/COMMON/src/MobileDomainDefinitions.asn b/regression_test/compileonly/mfgen-tpd/COMMON/src/MobileDomainDefinitions.asn index 4811c0f9e..4cead883b 100644 --- a/regression_test/compileonly/mfgen-tpd/COMMON/src/MobileDomainDefinitions.asn +++ b/regression_test/compileonly/mfgen-tpd/COMMON/src/MobileDomainDefinitions.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/HP79745/Hello000/Hello000.tpd b/regression_test/compileonly/mfgen-tpd/HP79745/Hello000/Hello000.tpd index f140702b6..db032c2e4 100644 --- a/regression_test/compileonly/mfgen-tpd/HP79745/Hello000/Hello000.tpd +++ b/regression_test/compileonly/mfgen-tpd/HP79745/Hello000/Hello000.tpd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/HP79745/Hello000/src/MyExample0.ttcn b/regression_test/compileonly/mfgen-tpd/HP79745/Hello000/src/MyExample0.ttcn index e3fbd7c4e..6a778241e 100644 --- a/regression_test/compileonly/mfgen-tpd/HP79745/Hello000/src/MyExample0.ttcn +++ b/regression_test/compileonly/mfgen-tpd/HP79745/Hello000/src/MyExample0.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/HP79745/Hello123/Hello123.tpd b/regression_test/compileonly/mfgen-tpd/HP79745/Hello123/Hello123.tpd index c2f70f118..6ec4db271 100644 --- a/regression_test/compileonly/mfgen-tpd/HP79745/Hello123/Hello123.tpd +++ b/regression_test/compileonly/mfgen-tpd/HP79745/Hello123/Hello123.tpd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/HP79745/Hello123/src/MyExample1.ttcn b/regression_test/compileonly/mfgen-tpd/HP79745/Hello123/src/MyExample1.ttcn index e4605e536..a987404ed 100644 --- a/regression_test/compileonly/mfgen-tpd/HP79745/Hello123/src/MyExample1.ttcn +++ b/regression_test/compileonly/mfgen-tpd/HP79745/Hello123/src/MyExample1.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/HP79745/HelloTpd/HelloTpd.tpd b/regression_test/compileonly/mfgen-tpd/HP79745/HelloTpd/HelloTpd.tpd index b93ff1685..dc8ae3d8c 100644 --- a/regression_test/compileonly/mfgen-tpd/HP79745/HelloTpd/HelloTpd.tpd +++ b/regression_test/compileonly/mfgen-tpd/HP79745/HelloTpd/HelloTpd.tpd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/HP79745/HelloTpd/src/MyExample.ttcn b/regression_test/compileonly/mfgen-tpd/HP79745/HelloTpd/src/MyExample.ttcn index 0639438c6..378d27ab9 100644 --- a/regression_test/compileonly/mfgen-tpd/HP79745/HelloTpd/src/MyExample.ttcn +++ b/regression_test/compileonly/mfgen-tpd/HP79745/HelloTpd/src/MyExample.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/HP79745/Makefile b/regression_test/compileonly/mfgen-tpd/HP79745/Makefile index 57c6240eb..4e65db5e1 100644 --- a/regression_test/compileonly/mfgen-tpd/HP79745/Makefile +++ b/regression_test/compileonly/mfgen-tpd/HP79745/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/HQ56829/Makefile b/regression_test/compileonly/mfgen-tpd/HQ56829/Makefile index 5d29dcb11..d3c25d3af 100644 --- a/regression_test/compileonly/mfgen-tpd/HQ56829/Makefile +++ b/regression_test/compileonly/mfgen-tpd/HQ56829/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/HQ56834/Makefile b/regression_test/compileonly/mfgen-tpd/HQ56834/Makefile index 13e89ad70..fc8f1364c 100644 --- a/regression_test/compileonly/mfgen-tpd/HQ56834/Makefile +++ b/regression_test/compileonly/mfgen-tpd/HQ56834/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/HQ56834/counter.tpd b/regression_test/compileonly/mfgen-tpd/HQ56834/counter.tpd index e41cd8ce8..d63532afd 100644 --- a/regression_test/compileonly/mfgen-tpd/HQ56834/counter.tpd +++ b/regression_test/compileonly/mfgen-tpd/HQ56834/counter.tpd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/HQ56834/src/counter.ttcn b/regression_test/compileonly/mfgen-tpd/HQ56834/src/counter.ttcn index a027f23e4..e4750b755 100644 --- a/regression_test/compileonly/mfgen-tpd/HQ56834/src/counter.ttcn +++ b/regression_test/compileonly/mfgen-tpd/HQ56834/src/counter.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/HQ56848/Makefile b/regression_test/compileonly/mfgen-tpd/HQ56848/Makefile index e427578be..1623513bd 100644 --- a/regression_test/compileonly/mfgen-tpd/HQ56848/Makefile +++ b/regression_test/compileonly/mfgen-tpd/HQ56848/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/HQ56848/counter.tpd b/regression_test/compileonly/mfgen-tpd/HQ56848/counter.tpd index 369808f22..0e9f30a8c 100644 --- a/regression_test/compileonly/mfgen-tpd/HQ56848/counter.tpd +++ b/regression_test/compileonly/mfgen-tpd/HQ56848/counter.tpd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/HQ56848/src/counter.ttcn b/regression_test/compileonly/mfgen-tpd/HQ56848/src/counter.ttcn index a027f23e4..e4750b755 100644 --- a/regression_test/compileonly/mfgen-tpd/HQ56848/src/counter.ttcn +++ b/regression_test/compileonly/mfgen-tpd/HQ56848/src/counter.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/HQ60308/counter.tpd b/regression_test/compileonly/mfgen-tpd/HQ60308/counter.tpd index 625a674a9..b550b2e86 100644 --- a/regression_test/compileonly/mfgen-tpd/HQ60308/counter.tpd +++ b/regression_test/compileonly/mfgen-tpd/HQ60308/counter.tpd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/HQ60308/src/counter.ttcn b/regression_test/compileonly/mfgen-tpd/HQ60308/src/counter.ttcn index a027f23e4..e4750b755 100644 --- a/regression_test/compileonly/mfgen-tpd/HQ60308/src/counter.ttcn +++ b/regression_test/compileonly/mfgen-tpd/HQ60308/src/counter.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/HR30356/Makefile b/regression_test/compileonly/mfgen-tpd/HR30356/Makefile index 90644487d..ad02417d6 100644 --- a/regression_test/compileonly/mfgen-tpd/HR30356/Makefile +++ b/regression_test/compileonly/mfgen-tpd/HR30356/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/HR30356/client/client.tpd b/regression_test/compileonly/mfgen-tpd/HR30356/client/client.tpd index 251ceafce..a4d636fdf 100755 --- a/regression_test/compileonly/mfgen-tpd/HR30356/client/client.tpd +++ b/regression_test/compileonly/mfgen-tpd/HR30356/client/client.tpd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/HR30356/client/src/client.ttcn b/regression_test/compileonly/mfgen-tpd/HR30356/client/src/client.ttcn index 9666dd844..7575e789c 100755 --- a/regression_test/compileonly/mfgen-tpd/HR30356/client/src/client.ttcn +++ b/regression_test/compileonly/mfgen-tpd/HR30356/client/src/client.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/HR30356/controller/controller.tpd b/regression_test/compileonly/mfgen-tpd/HR30356/controller/controller.tpd index e7ccd0cee..49ecbf646 100755 --- a/regression_test/compileonly/mfgen-tpd/HR30356/controller/controller.tpd +++ b/regression_test/compileonly/mfgen-tpd/HR30356/controller/controller.tpd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/HR30356/controller/src/controller.ttcn b/regression_test/compileonly/mfgen-tpd/HR30356/controller/src/controller.ttcn index fd1b2ca3d..053cb739d 100755 --- a/regression_test/compileonly/mfgen-tpd/HR30356/controller/src/controller.ttcn +++ b/regression_test/compileonly/mfgen-tpd/HR30356/controller/src/controller.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/HR30356/server/server.tpd b/regression_test/compileonly/mfgen-tpd/HR30356/server/server.tpd index df04780f3..17f3d0125 100755 --- a/regression_test/compileonly/mfgen-tpd/HR30356/server/server.tpd +++ b/regression_test/compileonly/mfgen-tpd/HR30356/server/server.tpd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/HR30356/server/src/server.ttcn b/regression_test/compileonly/mfgen-tpd/HR30356/server/src/server.ttcn index f00bc21ca..c5c8dc9f2 100755 --- a/regression_test/compileonly/mfgen-tpd/HR30356/server/src/server.ttcn +++ b/regression_test/compileonly/mfgen-tpd/HR30356/server/src/server.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/HR30356/testport/src/testport.ttcn b/regression_test/compileonly/mfgen-tpd/HR30356/testport/src/testport.ttcn index e2ff27c6a..a8ee3ec88 100755 --- a/regression_test/compileonly/mfgen-tpd/HR30356/testport/src/testport.ttcn +++ b/regression_test/compileonly/mfgen-tpd/HR30356/testport/src/testport.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/HR30356/testport/testport.tpd b/regression_test/compileonly/mfgen-tpd/HR30356/testport/testport.tpd index ebc65dfb1..b726e29b0 100755 --- a/regression_test/compileonly/mfgen-tpd/HR30356/testport/testport.tpd +++ b/regression_test/compileonly/mfgen-tpd/HR30356/testport/testport.tpd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/HR30365/Hello000/Hello000.tpd b/regression_test/compileonly/mfgen-tpd/HR30365/Hello000/Hello000.tpd index f140702b6..db032c2e4 100644 --- a/regression_test/compileonly/mfgen-tpd/HR30365/Hello000/Hello000.tpd +++ b/regression_test/compileonly/mfgen-tpd/HR30365/Hello000/Hello000.tpd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/HR30365/Hello000/src/MyExample0.ttcn b/regression_test/compileonly/mfgen-tpd/HR30365/Hello000/src/MyExample0.ttcn index e3fbd7c4e..6a778241e 100644 --- a/regression_test/compileonly/mfgen-tpd/HR30365/Hello000/src/MyExample0.ttcn +++ b/regression_test/compileonly/mfgen-tpd/HR30365/Hello000/src/MyExample0.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/HR30365/Hello123/Hello123.tpd b/regression_test/compileonly/mfgen-tpd/HR30365/Hello123/Hello123.tpd index dee34f640..c1ddc59ff 100644 --- a/regression_test/compileonly/mfgen-tpd/HR30365/Hello123/Hello123.tpd +++ b/regression_test/compileonly/mfgen-tpd/HR30365/Hello123/Hello123.tpd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/HR30365/Hello123/src/MyExample1.ttcn b/regression_test/compileonly/mfgen-tpd/HR30365/Hello123/src/MyExample1.ttcn index e4605e536..a987404ed 100644 --- a/regression_test/compileonly/mfgen-tpd/HR30365/Hello123/src/MyExample1.ttcn +++ b/regression_test/compileonly/mfgen-tpd/HR30365/Hello123/src/MyExample1.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/HR30365/HelloTpd/HelloTpd.tpd b/regression_test/compileonly/mfgen-tpd/HR30365/HelloTpd/HelloTpd.tpd index b93ff1685..dc8ae3d8c 100644 --- a/regression_test/compileonly/mfgen-tpd/HR30365/HelloTpd/HelloTpd.tpd +++ b/regression_test/compileonly/mfgen-tpd/HR30365/HelloTpd/HelloTpd.tpd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/HR30365/HelloTpd/src/MyExample.ttcn b/regression_test/compileonly/mfgen-tpd/HR30365/HelloTpd/src/MyExample.ttcn index 0639438c6..378d27ab9 100644 --- a/regression_test/compileonly/mfgen-tpd/HR30365/HelloTpd/src/MyExample.ttcn +++ b/regression_test/compileonly/mfgen-tpd/HR30365/HelloTpd/src/MyExample.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/HR30365/Makefile b/regression_test/compileonly/mfgen-tpd/HR30365/Makefile index 628ea23ca..c898e5e95 100644 --- a/regression_test/compileonly/mfgen-tpd/HR30365/Makefile +++ b/regression_test/compileonly/mfgen-tpd/HR30365/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/Makefile b/regression_test/compileonly/mfgen-tpd/Makefile index a5073b7c7..2a04889d7 100644 --- a/regression_test/compileonly/mfgen-tpd/Makefile +++ b/regression_test/compileonly/mfgen-tpd/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/NAS_EPS_v9.7.0_CNL113729/NAS_EPS_v9.7.0_CNL113729.tpd b/regression_test/compileonly/mfgen-tpd/NAS_EPS_v9.7.0_CNL113729/NAS_EPS_v9.7.0_CNL113729.tpd index d1d4fed0f..02de4a232 100644 --- a/regression_test/compileonly/mfgen-tpd/NAS_EPS_v9.7.0_CNL113729/NAS_EPS_v9.7.0_CNL113729.tpd +++ b/regression_test/compileonly/mfgen-tpd/NAS_EPS_v9.7.0_CNL113729/NAS_EPS_v9.7.0_CNL113729.tpd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/NAS_EPS_v9.7.0_CNL113729/src/NAS_EPS_v970.ttcn b/regression_test/compileonly/mfgen-tpd/NAS_EPS_v9.7.0_CNL113729/src/NAS_EPS_v970.ttcn index ead65efda..eb92a01d8 100644 --- a/regression_test/compileonly/mfgen-tpd/NAS_EPS_v9.7.0_CNL113729/src/NAS_EPS_v970.ttcn +++ b/regression_test/compileonly/mfgen-tpd/NAS_EPS_v9.7.0_CNL113729/src/NAS_EPS_v970.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/NAS_EPS_v9.7.0_CNL113729/test/NAS_EPS_Test.cfg b/regression_test/compileonly/mfgen-tpd/NAS_EPS_v9.7.0_CNL113729/test/NAS_EPS_Test.cfg index d75fa526a..e90cc2d92 100644 --- a/regression_test/compileonly/mfgen-tpd/NAS_EPS_v9.7.0_CNL113729/test/NAS_EPS_Test.cfg +++ b/regression_test/compileonly/mfgen-tpd/NAS_EPS_v9.7.0_CNL113729/test/NAS_EPS_Test.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/NAS_EPS_v9.7.0_CNL113729/test/NAS_EPS_Test.ttcn b/regression_test/compileonly/mfgen-tpd/NAS_EPS_v9.7.0_CNL113729/test/NAS_EPS_Test.ttcn index b41bc4a2a..e6c162250 100644 --- a/regression_test/compileonly/mfgen-tpd/NAS_EPS_v9.7.0_CNL113729/test/NAS_EPS_Test.ttcn +++ b/regression_test/compileonly/mfgen-tpd/NAS_EPS_v9.7.0_CNL113729/test/NAS_EPS_Test.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/NAS_EPS_v9.7.0_CNL113729/test/NAS_EPS_v9.7.0_CNL113729_test.tpd b/regression_test/compileonly/mfgen-tpd/NAS_EPS_v9.7.0_CNL113729/test/NAS_EPS_v9.7.0_CNL113729_test.tpd index 8d68176a6..a38547dbd 100644 --- a/regression_test/compileonly/mfgen-tpd/NAS_EPS_v9.7.0_CNL113729/test/NAS_EPS_v9.7.0_CNL113729_test.tpd +++ b/regression_test/compileonly/mfgen-tpd/NAS_EPS_v9.7.0_CNL113729/test/NAS_EPS_v9.7.0_CNL113729_test.tpd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/buildconfig_param/HelloTpd/HelloTpd.tpd b/regression_test/compileonly/mfgen-tpd/buildconfig_param/HelloTpd/HelloTpd.tpd index 82b0a414c..75ac386c2 100644 --- a/regression_test/compileonly/mfgen-tpd/buildconfig_param/HelloTpd/HelloTpd.tpd +++ b/regression_test/compileonly/mfgen-tpd/buildconfig_param/HelloTpd/HelloTpd.tpd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/buildconfig_param/HelloTpd/src/MyExample.cfg b/regression_test/compileonly/mfgen-tpd/buildconfig_param/HelloTpd/src/MyExample.cfg index 797c9bf6f..48649fcfb 100644 --- a/regression_test/compileonly/mfgen-tpd/buildconfig_param/HelloTpd/src/MyExample.cfg +++ b/regression_test/compileonly/mfgen-tpd/buildconfig_param/HelloTpd/src/MyExample.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/buildconfig_param/HelloTpd/src/MyExample.ttcn b/regression_test/compileonly/mfgen-tpd/buildconfig_param/HelloTpd/src/MyExample.ttcn index 1ad05b953..3478e00fd 100644 --- a/regression_test/compileonly/mfgen-tpd/buildconfig_param/HelloTpd/src/MyExample.ttcn +++ b/regression_test/compileonly/mfgen-tpd/buildconfig_param/HelloTpd/src/MyExample.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/buildconfig_param/HelloTpd/src/PCOType.cc b/regression_test/compileonly/mfgen-tpd/buildconfig_param/HelloTpd/src/PCOType.cc index cd1234fce..29b13d7f6 100644 --- a/regression_test/compileonly/mfgen-tpd/buildconfig_param/HelloTpd/src/PCOType.cc +++ b/regression_test/compileonly/mfgen-tpd/buildconfig_param/HelloTpd/src/PCOType.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/buildconfig_param/HelloTpd/src/PCOType.hh b/regression_test/compileonly/mfgen-tpd/buildconfig_param/HelloTpd/src/PCOType.hh index b1990a792..60e22f2da 100644 --- a/regression_test/compileonly/mfgen-tpd/buildconfig_param/HelloTpd/src/PCOType.hh +++ b/regression_test/compileonly/mfgen-tpd/buildconfig_param/HelloTpd/src/PCOType.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/buildconfig_param/Makefile b/regression_test/compileonly/mfgen-tpd/buildconfig_param/Makefile index 88f349a20..9f7437158 100644 --- a/regression_test/compileonly/mfgen-tpd/buildconfig_param/Makefile +++ b/regression_test/compileonly/mfgen-tpd/buildconfig_param/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/consumer/consumer-ref-supplier-Default.tpd b/regression_test/compileonly/mfgen-tpd/consumer/consumer-ref-supplier-Default.tpd index 77829eb11..487df8fc3 100644 --- a/regression_test/compileonly/mfgen-tpd/consumer/consumer-ref-supplier-Default.tpd +++ b/regression_test/compileonly/mfgen-tpd/consumer/consumer-ref-supplier-Default.tpd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/consumer/creator.ttcn b/regression_test/compileonly/mfgen-tpd/consumer/creator.ttcn index 2010e3ef3..d0c90d3ec 100644 --- a/regression_test/compileonly/mfgen-tpd/consumer/creator.ttcn +++ b/regression_test/compileonly/mfgen-tpd/consumer/creator.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/consumer/src/consumer.ttcn b/regression_test/compileonly/mfgen-tpd/consumer/src/consumer.ttcn index 8dc134b45..d4736c178 100644 --- a/regression_test/compileonly/mfgen-tpd/consumer/src/consumer.ttcn +++ b/regression_test/compileonly/mfgen-tpd/consumer/src/consumer.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/consumer/src/userfun.cc b/regression_test/compileonly/mfgen-tpd/consumer/src/userfun.cc index 364633c3b..d30731cec 100644 --- a/regression_test/compileonly/mfgen-tpd/consumer/src/userfun.cc +++ b/regression_test/compileonly/mfgen-tpd/consumer/src/userfun.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/dependency_check/Makefile b/regression_test/compileonly/mfgen-tpd/dependency_check/Makefile index fa00fe94d..314509603 100644 --- a/regression_test/compileonly/mfgen-tpd/dependency_check/Makefile +++ b/regression_test/compileonly/mfgen-tpd/dependency_check/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/dependency_check/client/client.tpd b/regression_test/compileonly/mfgen-tpd/dependency_check/client/client.tpd index e89a1d082..af362be9d 100755 --- a/regression_test/compileonly/mfgen-tpd/dependency_check/client/client.tpd +++ b/regression_test/compileonly/mfgen-tpd/dependency_check/client/client.tpd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/dependency_check/client/src/client.ttcn b/regression_test/compileonly/mfgen-tpd/dependency_check/client/src/client.ttcn index 9666dd844..7575e789c 100755 --- a/regression_test/compileonly/mfgen-tpd/dependency_check/client/src/client.ttcn +++ b/regression_test/compileonly/mfgen-tpd/dependency_check/client/src/client.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/dependency_check/controller/controller.tpd b/regression_test/compileonly/mfgen-tpd/dependency_check/controller/controller.tpd index 3820628f2..121f7d227 100755 --- a/regression_test/compileonly/mfgen-tpd/dependency_check/controller/controller.tpd +++ b/regression_test/compileonly/mfgen-tpd/dependency_check/controller/controller.tpd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/dependency_check/controller/src/controller.ttcn b/regression_test/compileonly/mfgen-tpd/dependency_check/controller/src/controller.ttcn index fd1b2ca3d..053cb739d 100755 --- a/regression_test/compileonly/mfgen-tpd/dependency_check/controller/src/controller.ttcn +++ b/regression_test/compileonly/mfgen-tpd/dependency_check/controller/src/controller.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/dependency_check/server/server.tpd b/regression_test/compileonly/mfgen-tpd/dependency_check/server/server.tpd index b1e4c588e..6ba0ebaf6 100755 --- a/regression_test/compileonly/mfgen-tpd/dependency_check/server/server.tpd +++ b/regression_test/compileonly/mfgen-tpd/dependency_check/server/server.tpd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/dependency_check/server/src/server.ttcn b/regression_test/compileonly/mfgen-tpd/dependency_check/server/src/server.ttcn index f00bc21ca..c5c8dc9f2 100755 --- a/regression_test/compileonly/mfgen-tpd/dependency_check/server/src/server.ttcn +++ b/regression_test/compileonly/mfgen-tpd/dependency_check/server/src/server.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/dependency_check/testport/src/testport.ttcn b/regression_test/compileonly/mfgen-tpd/dependency_check/testport/src/testport.ttcn index e2ff27c6a..a8ee3ec88 100755 --- a/regression_test/compileonly/mfgen-tpd/dependency_check/testport/src/testport.ttcn +++ b/regression_test/compileonly/mfgen-tpd/dependency_check/testport/src/testport.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/dependency_check/testport/testport.tpd b/regression_test/compileonly/mfgen-tpd/dependency_check/testport/testport.tpd index d182075ad..d8a63bc6b 100755 --- a/regression_test/compileonly/mfgen-tpd/dependency_check/testport/testport.tpd +++ b/regression_test/compileonly/mfgen-tpd/dependency_check/testport/testport.tpd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/flagTest/Hello000/Hello000.tpd b/regression_test/compileonly/mfgen-tpd/flagTest/Hello000/Hello000.tpd index f140702b6..db032c2e4 100644 --- a/regression_test/compileonly/mfgen-tpd/flagTest/Hello000/Hello000.tpd +++ b/regression_test/compileonly/mfgen-tpd/flagTest/Hello000/Hello000.tpd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/flagTest/Hello000/src/MyExample0.ttcn b/regression_test/compileonly/mfgen-tpd/flagTest/Hello000/src/MyExample0.ttcn index e3fbd7c4e..6a778241e 100644 --- a/regression_test/compileonly/mfgen-tpd/flagTest/Hello000/src/MyExample0.ttcn +++ b/regression_test/compileonly/mfgen-tpd/flagTest/Hello000/src/MyExample0.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/flagTest/Hello123/Hello123.tpd b/regression_test/compileonly/mfgen-tpd/flagTest/Hello123/Hello123.tpd index c2f70f118..6ec4db271 100644 --- a/regression_test/compileonly/mfgen-tpd/flagTest/Hello123/Hello123.tpd +++ b/regression_test/compileonly/mfgen-tpd/flagTest/Hello123/Hello123.tpd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/flagTest/Hello123/src/MyExample1.ttcn b/regression_test/compileonly/mfgen-tpd/flagTest/Hello123/src/MyExample1.ttcn index e4605e536..a987404ed 100644 --- a/regression_test/compileonly/mfgen-tpd/flagTest/Hello123/src/MyExample1.ttcn +++ b/regression_test/compileonly/mfgen-tpd/flagTest/Hello123/src/MyExample1.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/flagTest/HelloTpd/HelloTpd.tpd b/regression_test/compileonly/mfgen-tpd/flagTest/HelloTpd/HelloTpd.tpd index b93ff1685..dc8ae3d8c 100644 --- a/regression_test/compileonly/mfgen-tpd/flagTest/HelloTpd/HelloTpd.tpd +++ b/regression_test/compileonly/mfgen-tpd/flagTest/HelloTpd/HelloTpd.tpd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/flagTest/HelloTpd/src/MyExample.ttcn b/regression_test/compileonly/mfgen-tpd/flagTest/HelloTpd/src/MyExample.ttcn index 0639438c6..378d27ab9 100644 --- a/regression_test/compileonly/mfgen-tpd/flagTest/HelloTpd/src/MyExample.ttcn +++ b/regression_test/compileonly/mfgen-tpd/flagTest/HelloTpd/src/MyExample.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/flagTest/HelloTpd2/HelloTpd2.tpd b/regression_test/compileonly/mfgen-tpd/flagTest/HelloTpd2/HelloTpd2.tpd index 0e243ca7f..76b5b8bd7 100644 --- a/regression_test/compileonly/mfgen-tpd/flagTest/HelloTpd2/HelloTpd2.tpd +++ b/regression_test/compileonly/mfgen-tpd/flagTest/HelloTpd2/HelloTpd2.tpd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/flagTest/HelloTpd2/src/MyExample2.ttcn b/regression_test/compileonly/mfgen-tpd/flagTest/HelloTpd2/src/MyExample2.ttcn index 86401b914..ae2813a6c 100644 --- a/regression_test/compileonly/mfgen-tpd/flagTest/HelloTpd2/src/MyExample2.ttcn +++ b/regression_test/compileonly/mfgen-tpd/flagTest/HelloTpd2/src/MyExample2.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/flagTest/Makefile b/regression_test/compileonly/mfgen-tpd/flagTest/Makefile index 2e387c223..88e26cd3c 100644 --- a/regression_test/compileonly/mfgen-tpd/flagTest/Makefile +++ b/regression_test/compileonly/mfgen-tpd/flagTest/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/handmade.ttcn b/regression_test/compileonly/mfgen-tpd/handmade.ttcn index 744ff5b4e..f9bc12b44 100644 --- a/regression_test/compileonly/mfgen-tpd/handmade.ttcn +++ b/regression_test/compileonly/mfgen-tpd/handmade.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_param/HelloTpd/HelloTpd.tpd b/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_param/HelloTpd/HelloTpd.tpd index 82b0a414c..75ac386c2 100644 --- a/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_param/HelloTpd/HelloTpd.tpd +++ b/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_param/HelloTpd/HelloTpd.tpd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_param/HelloTpd/src/MyExample.cfg b/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_param/HelloTpd/src/MyExample.cfg index 797c9bf6f..48649fcfb 100644 --- a/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_param/HelloTpd/src/MyExample.cfg +++ b/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_param/HelloTpd/src/MyExample.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_param/HelloTpd/src/MyExample.ttcn b/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_param/HelloTpd/src/MyExample.ttcn index 1ad05b953..3478e00fd 100644 --- a/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_param/HelloTpd/src/MyExample.ttcn +++ b/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_param/HelloTpd/src/MyExample.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_param/HelloTpd/src/PCOType.cc b/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_param/HelloTpd/src/PCOType.cc index cd1234fce..29b13d7f6 100644 --- a/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_param/HelloTpd/src/PCOType.cc +++ b/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_param/HelloTpd/src/PCOType.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_param/HelloTpd/src/PCOType.hh b/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_param/HelloTpd/src/PCOType.hh index b1990a792..60e22f2da 100644 --- a/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_param/HelloTpd/src/PCOType.hh +++ b/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_param/HelloTpd/src/PCOType.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_param/Makefile b/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_param/Makefile index e98152720..4a02cc9f7 100644 --- a/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_param/Makefile +++ b/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_param/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/Hello000/Hello000.tpd b/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/Hello000/Hello000.tpd index 4a53971f7..fdebaf69c 100644 --- a/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/Hello000/Hello000.tpd +++ b/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/Hello000/Hello000.tpd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/Hello000/src/MyExample0.cfg b/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/Hello000/src/MyExample0.cfg index b4f9f9296..9a8c6a993 100644 --- a/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/Hello000/src/MyExample0.cfg +++ b/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/Hello000/src/MyExample0.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/Hello000/src/MyExample0.ttcn b/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/Hello000/src/MyExample0.ttcn index fd38cf36f..4a319541a 100644 --- a/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/Hello000/src/MyExample0.ttcn +++ b/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/Hello000/src/MyExample0.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/Hello000/src/PCOType0.cc b/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/Hello000/src/PCOType0.cc index cd1234fce..29b13d7f6 100644 --- a/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/Hello000/src/PCOType0.cc +++ b/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/Hello000/src/PCOType0.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/Hello000/src/PCOType0.hh b/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/Hello000/src/PCOType0.hh index b1990a792..60e22f2da 100644 --- a/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/Hello000/src/PCOType0.hh +++ b/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/Hello000/src/PCOType0.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/Hello123/Hello123.tpd b/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/Hello123/Hello123.tpd index 0265fb014..1e6b74fe3 100644 --- a/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/Hello123/Hello123.tpd +++ b/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/Hello123/Hello123.tpd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/Hello123/src/MyExample1.cfg b/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/Hello123/src/MyExample1.cfg index 947f7bf30..e143238fa 100644 --- a/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/Hello123/src/MyExample1.cfg +++ b/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/Hello123/src/MyExample1.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/Hello123/src/MyExample1.ttcn b/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/Hello123/src/MyExample1.ttcn index ca9b3f9bf..cca2ce035 100644 --- a/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/Hello123/src/MyExample1.ttcn +++ b/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/Hello123/src/MyExample1.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/Hello123/src/PCOType1.cc b/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/Hello123/src/PCOType1.cc index cd1234fce..29b13d7f6 100644 --- a/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/Hello123/src/PCOType1.cc +++ b/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/Hello123/src/PCOType1.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/Hello123/src/PCOType1.hh b/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/Hello123/src/PCOType1.hh index b1990a792..60e22f2da 100644 --- a/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/Hello123/src/PCOType1.hh +++ b/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/Hello123/src/PCOType1.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/HelloTpd/HelloTpd.tpd b/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/HelloTpd/HelloTpd.tpd index 23980d176..90d3267da 100644 --- a/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/HelloTpd/HelloTpd.tpd +++ b/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/HelloTpd/HelloTpd.tpd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/HelloTpd/src/MyExample.cfg b/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/HelloTpd/src/MyExample.cfg index 797c9bf6f..48649fcfb 100644 --- a/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/HelloTpd/src/MyExample.cfg +++ b/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/HelloTpd/src/MyExample.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/HelloTpd/src/MyExample.ttcn b/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/HelloTpd/src/MyExample.ttcn index 1ad05b953..3478e00fd 100644 --- a/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/HelloTpd/src/MyExample.ttcn +++ b/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/HelloTpd/src/MyExample.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/HelloTpd/src/PCOType.cc b/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/HelloTpd/src/PCOType.cc index cd1234fce..29b13d7f6 100644 --- a/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/HelloTpd/src/PCOType.cc +++ b/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/HelloTpd/src/PCOType.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/HelloTpd/src/PCOType.hh b/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/HelloTpd/src/PCOType.hh index b1990a792..60e22f2da 100644 --- a/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/HelloTpd/src/PCOType.hh +++ b/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/HelloTpd/src/PCOType.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/Makefile b/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/Makefile index 0970fe692..e1fea8ac6 100644 --- a/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/Makefile +++ b/regression_test/compileonly/mfgen-tpd/invalid_buildconfig_tpd/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/library/HelloTpd/HelloTpd.tpd b/regression_test/compileonly/mfgen-tpd/library/HelloTpd/HelloTpd.tpd index a16a6f46f..3cbb78af3 100644 --- a/regression_test/compileonly/mfgen-tpd/library/HelloTpd/HelloTpd.tpd +++ b/regression_test/compileonly/mfgen-tpd/library/HelloTpd/HelloTpd.tpd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/library/HelloTpd/src/MyExample.cfg b/regression_test/compileonly/mfgen-tpd/library/HelloTpd/src/MyExample.cfg index 797c9bf6f..48649fcfb 100644 --- a/regression_test/compileonly/mfgen-tpd/library/HelloTpd/src/MyExample.cfg +++ b/regression_test/compileonly/mfgen-tpd/library/HelloTpd/src/MyExample.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/library/HelloTpd/src/MyExample.ttcn b/regression_test/compileonly/mfgen-tpd/library/HelloTpd/src/MyExample.ttcn index 1ad05b953..3478e00fd 100644 --- a/regression_test/compileonly/mfgen-tpd/library/HelloTpd/src/MyExample.ttcn +++ b/regression_test/compileonly/mfgen-tpd/library/HelloTpd/src/MyExample.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/library/HelloTpd/src/PCOType.cc b/regression_test/compileonly/mfgen-tpd/library/HelloTpd/src/PCOType.cc index cd1234fce..29b13d7f6 100644 --- a/regression_test/compileonly/mfgen-tpd/library/HelloTpd/src/PCOType.cc +++ b/regression_test/compileonly/mfgen-tpd/library/HelloTpd/src/PCOType.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/library/HelloTpd/src/PCOType.hh b/regression_test/compileonly/mfgen-tpd/library/HelloTpd/src/PCOType.hh index b1990a792..60e22f2da 100644 --- a/regression_test/compileonly/mfgen-tpd/library/HelloTpd/src/PCOType.hh +++ b/regression_test/compileonly/mfgen-tpd/library/HelloTpd/src/PCOType.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/library/HelloTpd2/HelloTpd.tpd b/regression_test/compileonly/mfgen-tpd/library/HelloTpd2/HelloTpd.tpd index e45f8e36c..7ffdddf4c 100644 --- a/regression_test/compileonly/mfgen-tpd/library/HelloTpd2/HelloTpd.tpd +++ b/regression_test/compileonly/mfgen-tpd/library/HelloTpd2/HelloTpd.tpd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/library/Makefile b/regression_test/compileonly/mfgen-tpd/library/Makefile index a4a5665c5..387894254 100644 --- a/regression_test/compileonly/mfgen-tpd/library/Makefile +++ b/regression_test/compileonly/mfgen-tpd/library/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/library/a.ttcn b/regression_test/compileonly/mfgen-tpd/library/a.ttcn index 2dd07dac7..4cb3652f1 100644 --- a/regression_test/compileonly/mfgen-tpd/library/a.ttcn +++ b/regression_test/compileonly/mfgen-tpd/library/a.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/library/b.ttcn b/regression_test/compileonly/mfgen-tpd/library/b.ttcn index 4c71dfe65..8d023e333 100644 --- a/regression_test/compileonly/mfgen-tpd/library/b.ttcn +++ b/regression_test/compileonly/mfgen-tpd/library/b.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/library/central_storage/central.ttcn b/regression_test/compileonly/mfgen-tpd/library/central_storage/central.ttcn index e7aaae1b3..d6411445e 100644 --- a/regression_test/compileonly/mfgen-tpd/library/central_storage/central.ttcn +++ b/regression_test/compileonly/mfgen-tpd/library/central_storage/central.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/outsider.ttcn b/regression_test/compileonly/mfgen-tpd/outsider.ttcn index bb8f8abc6..445253b8c 100644 --- a/regression_test/compileonly/mfgen-tpd/outsider.ttcn +++ b/regression_test/compileonly/mfgen-tpd/outsider.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/runner.pl b/regression_test/compileonly/mfgen-tpd/runner.pl index 4839f79f2..7c6d9de55 100644 --- a/regression_test/compileonly/mfgen-tpd/runner.pl +++ b/regression_test/compileonly/mfgen-tpd/runner.pl @@ -1,6 +1,6 @@ #!/usr/bin/perl -wl ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/subplier/src/subway.ttcn b/regression_test/compileonly/mfgen-tpd/subplier/src/subway.ttcn index fff4ddbd6..98e48a46e 100644 --- a/regression_test/compileonly/mfgen-tpd/subplier/src/subway.ttcn +++ b/regression_test/compileonly/mfgen-tpd/subplier/src/subway.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/subplier/subplier.tpd b/regression_test/compileonly/mfgen-tpd/subplier/subplier.tpd index 46f579a36..b7432af29 100644 --- a/regression_test/compileonly/mfgen-tpd/subplier/subplier.tpd +++ b/regression_test/compileonly/mfgen-tpd/subplier/subplier.tpd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/supplier/src/supplier.ttcn b/regression_test/compileonly/mfgen-tpd/supplier/src/supplier.ttcn index a5a941b14..f7d3d3b1c 100644 --- a/regression_test/compileonly/mfgen-tpd/supplier/src/supplier.ttcn +++ b/regression_test/compileonly/mfgen-tpd/supplier/src/supplier.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/supplier/src/supplier2.ttcn b/regression_test/compileonly/mfgen-tpd/supplier/src/supplier2.ttcn index f0e309be8..c0a9332e2 100644 --- a/regression_test/compileonly/mfgen-tpd/supplier/src/supplier2.ttcn +++ b/regression_test/compileonly/mfgen-tpd/supplier/src/supplier2.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/mfgen-tpd/supplier/supplier24.tpd b/regression_test/compileonly/mfgen-tpd/supplier/supplier24.tpd index 9e4bece7e..dfef5c9a7 100644 --- a/regression_test/compileonly/mfgen-tpd/supplier/supplier24.tpd +++ b/regression_test/compileonly/mfgen-tpd/supplier/supplier24.tpd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/namedActualParameters/Makefile b/regression_test/compileonly/namedActualParameters/Makefile index f074d3de0..84e215275 100644 --- a/regression_test/compileonly/namedActualParameters/Makefile +++ b/regression_test/compileonly/namedActualParameters/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/namedActualParameters/TnamedActualParameters.ttcn b/regression_test/compileonly/namedActualParameters/TnamedActualParameters.ttcn index 8f9e1aad3..98989753d 100644 --- a/regression_test/compileonly/namedActualParameters/TnamedActualParameters.ttcn +++ b/regression_test/compileonly/namedActualParameters/TnamedActualParameters.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/openType/Makefile b/regression_test/compileonly/openType/Makefile index 05f321991..c6d9910ef 100644 --- a/regression_test/compileonly/openType/Makefile +++ b/regression_test/compileonly/openType/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/openType/X.asn b/regression_test/compileonly/openType/X.asn index 1082b17dd..6e7be3aac 100644 --- a/regression_test/compileonly/openType/X.asn +++ b/regression_test/compileonly/openType/X.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/openTypeNames/IO_based_message.asn b/regression_test/compileonly/openTypeNames/IO_based_message.asn new file mode 100644 index 000000000..56071bb48 --- /dev/null +++ b/regression_test/compileonly/openTypeNames/IO_based_message.asn @@ -0,0 +1,86 @@ +--***************************************************************************** +-- Copyright (c) 2000-2015 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 +--***************************************************************************** + +IO-based-message DEFINITIONS + +AUTOMATIC TAGS ::= + +BEGIN + +--Types to be used in IO definitions +MySeq ::= SEQUENCE { + field1 INTEGER, + field2 OCTET STRING OPTIONAL +} + +MyEnum ::= ENUMERATED { first, second, third, fourth, fifth } + +--Defining IO class +MY-CLASS ::= CLASS { + &id INTEGER UNIQUE, -- id to distinguish the different IO instances + &OpenTypeField -- Open type field +} +WITH SYNTAX { ID &id TYPE &OpenTypeField } + +-- Defining the information objects +myIo1 MY-CLASS ::= { ID 1 TYPE MySeq } -- defining the type MySeq for the open type field, + -- instances of the object shall contain a value of this type + +myIo2 MY-CLASS ::= { ID 2 TYPE MyEnum } + +myIo3 MY-CLASS ::= { ID 3 TYPE INTEGER } + +-- Defining IO set to be used in message contraction + +MyIOSet MY-CLASS ::= { myIo1 | myIo2 | myIo3 } + +-- and now finally constructing the type + +MyMessage ::= SEQUENCE { + id MY-CLASS.&id ({MyIOSet}), -- integer field, values constrained to one of + -- the value defined for an IO, member of the set + content MY-CLASS.&OpenTypeField ({MyIOSet} {@id}) + -- open type field constrainedto the types defined for + -- the objects in the set; this is handled as an implicit + -- union by Titan and should be an anytype, i.e. using the + -- names of the types to select the given type. +} + +-- Values +a-message-id1-lower MyMessage ::= { + id 1, + content mySeq : { field1 23, field2 '1234'H } +} + +a-message-id2-lower MyMessage ::= { + id 2, + content myEnum : third +} + +a-message-id3-lower MyMessage ::= { + id 3, + content iNTEGER : 7 +} +/* +-- Not supported values +a-message-id1-upper MyMessage ::= { + id 1, + content MySeq : { field1 23, field2 '1234'H } +} + +a-message-id2-upper MyMessage ::= { + id 2, + content MyEnum : third +} + +a-message-id3-upper MyMessage ::= { + id 3, + content INTEGER : 7 +} +*/ +END diff --git a/regression_test/compileonly/openTypeNames/Makefile b/regression_test/compileonly/openTypeNames/Makefile new file mode 100644 index 000000000..275e59192 --- /dev/null +++ b/regression_test/compileonly/openTypeNames/Makefile @@ -0,0 +1,42 @@ +############################################################################### +# Copyright (c) 2000-2015 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 +############################################################################### +TOPDIR := ../.. +include $(TOPDIR)/Makefile.regression + +.PHONY: all clean dep + +TTCN3_LIB = ttcn3$(RT2_SUFFIX)$(DYNAMIC_SUFFIX) + +TTCN3_MODULES = Open_type_use.ttcn +ASN1_MODULES = IO_based_message.asn + +GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) $(ASN1_MODULES:.asn=.cc) +GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) +ifdef CODE_SPLIT +GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +endif + +OBJECTS = $(GENERATED_SOURCES:.cc=.o) + +TARGET = openTypeNames$(EXESUFFIX) + +all: $(TARGET) + +$(TARGET): $(GENERATED_SOURCES) $(USER_SOURCES) + $(CXX) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@ $^ -L$(TTCN3_DIR)/lib -l$(TTCN3_LIB) \ + -L$(OPENSSL_DIR)/lib -lcrypto $($(PLATFORM)_LIBS) + +$(GENERATED_SOURCES) $(GENERATED_HEADERS): $(TTCN3_MODULES) $(ASN1_MODULES) + $(TTCN3_COMPILER) $(COMPILER_FLAGS) $^ + +clean distclean: + $(RM) $(TARGET) $(OBJECTS) $(GENERATED_HEADERS) \ + $(GENERATED_SOURCES) compile *.log + +dep: $(GENERATED_SOURCES) + makedepend $(CPPFLAGS) $(GENERATED_SOURCES) diff --git a/regression_test/compileonly/openTypeNames/Open_type_use.ttcn b/regression_test/compileonly/openTypeNames/Open_type_use.ttcn new file mode 100644 index 000000000..75f69379e --- /dev/null +++ b/regression_test/compileonly/openTypeNames/Open_type_use.ttcn @@ -0,0 +1,212 @@ +/****************************************************************************** + * Copyright (c) 2000-2015 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 + ******************************************************************************/ + +// This module tests that the compiler allows both uppercase and lowercase +// first letters for the name of an open type alternative +module Open_type_use { + +import from IO_based_message language "ASN.1:2002" all; + +// Constants (lowercase first letter) +const MyMessage c_message_id1_lower := { + id := 1, + content := { mySeq := { field1 := 42, field2 := omit }} +} + +const MyMessage c_message_id2_lower := { + id := 2, + content := { myEnum := first} +} + +const MyMessage c_message_id3_lower := { + id := 3, + content := { iNTEGER := 42 } +} + +// Constants (uppercase first letter) +const MyMessage c_message_id1_upper := { + id := 1, + content := { MySeq := { field1 := 42, field2 := omit }} +} + +const MyMessage c_message_id2_upper := { + id := 2, + content := { MyEnum := first} +} + +const MyMessage c_message_id3_upper := { + id := 3, + content := { INTEGER := 42 } +} + +// Templates (lowercase first letter) +template MyMessage t_message_id1_lower := { + id := 1, + content := { mySeq := { field1 := 42, field2 := omit }} +} + +template MyMessage t_message_id2_lower := { + id := 2, + content := { myEnum := first} +} + +template MyMessage t_message_id3_lower := { + id := 3, + content := { iNTEGER := 42 } +} + +// Templates (uppercase first letter) +template MyMessage t_message_id1_upper := { + id := 1, + content := { MySeq := { field1 := 42, field2 := omit }} +} + +template MyMessage t_message_id2_upper := { + id := 2, + content := { MyEnum := first} +} + +template MyMessage t_message_id3_upper := { + id := 3, + content := { INTEGER := 42 } +} + +// Value list template (contains both lowercase and uppercase examples) +template MyMessage t_message_value_list := ( + { id := 1, content := { mySeq := { field1 := 42, field2 := omit }} }, + { id := 2, content := { myEnum := first} }, + { id := 3, content := { iNTEGER := 42 } }, + { id := 1, content := { MySeq := { field1 := -42, field2 := omit }} }, + { id := 2, content := { MyEnum := second} }, + { id := 3, content := { INTEGER := -42 } } +); + +// Dummy function to declare variables in +function f_dummy() { + // Variables (lowercase first letter) + var MyMessage v_message_id1_lower := { + id := 1, + content := { mySeq := { field1 := 42, field2 := omit }} + } + + var MyMessage v_message_id2_lower := { + id := 2, + content := { myEnum := first} + } + + var MyMessage v_message_id3_lower := { + id := 3, + content := { iNTEGER := 42 } + } + + // Variables (uppercase first letter) + var MyMessage v_message_id1_upper := { + id := 1, + content := { MySeq := { field1 := 42, field2 := omit }} + } + + var MyMessage v_message_id2_upper := { + id := 2, + content := { MyEnum := first} + } + + var MyMessage v_message_id3_upper := { + id := 3, + content := { INTEGER := 42 } + } + + // Template variables (lowercase first letter) + var template MyMessage vt_message_id1_lower := { + id := 1, + content := { mySeq := { field1 := 42, field2 := omit }} + } + + var template MyMessage vt_message_id2_lower := { + id := 2, + content := { myEnum := first} + } + + var template MyMessage vt_message_id3_lower := { + id := 3, + content := { iNTEGER := 42 } + } + + // Template variables (uppercase first letter) + var template MyMessage vt_message_id1_upper := { + id := 1, + content := { MySeq := { field1 := 42, field2 := omit }} + } + + var template MyMessage vt_message_id2_upper := { + id := 2, + content := { MyEnum := first} + } + + var template MyMessage vt_message_id3_upper := { + id := 3, + content := { INTEGER := 42 } + } + + // Value list template variable (contains both lowercase and uppercase examples) + var template MyMessage vt_message_value_list := ( + { id := 1, content := { mySeq := { field1 := 42, field2 := omit }} }, + { id := 2, content := { myEnum := first} }, + { id := 3, content := { iNTEGER := 42 } }, + { id := 1, content := { MySeq := { field1 := -42, field2 := omit }} }, + { id := 2, content := { MyEnum := second} }, + { id := 3, content := { INTEGER := -42 } } + ); + + // Referencing fields of open types (contains both lowercase and uppercase examples) + v_message_id1_lower.content.mySeq := { field1 := 41, field2 := omit }; + v_message_id1_upper.content.MySeq := { field1 := 41, field2 := omit }; + v_message_id2_lower.content.myEnum := second; + v_message_id2_upper.content.MyEnum := second; + v_message_id3_lower.content.iNTEGER := 15; + v_message_id3_upper.content.INTEGER := 15; + vt_message_id1_lower.content.mySeq := { field1 := 41, field2 := omit }; + vt_message_id1_upper.content.MySeq := { field1 := 41, field2 := omit }; + vt_message_id2_lower.content.myEnum := second; + vt_message_id2_upper.content.MyEnum := second; + vt_message_id3_lower.content.iNTEGER := 15; + vt_message_id3_upper.content.INTEGER := 15; + if (c_message_id1_lower.content.mySeq == { field1 := 41, field2 := omit } and + c_message_id1_upper.content.MySeq == { field1 := 41, field2 := omit } and + c_message_id2_lower.content.myEnum == second and + c_message_id2_upper.content.MyEnum == second and + c_message_id3_lower.content.iNTEGER == 15 and + c_message_id3_upper.content.INTEGER == 15) { + log("a"); + } + if (v_message_id1_lower.content.mySeq == { field1 := 41, field2 := omit } and + v_message_id1_upper.content.MySeq == { field1 := 41, field2 := omit } and + v_message_id2_lower.content.myEnum == second and + v_message_id2_upper.content.MyEnum == second and + v_message_id3_lower.content.iNTEGER == 15 and + v_message_id3_upper.content.INTEGER == 15) { + log("b"); + } + if (match({ field1 := 41, field2 := omit }, t_message_id1_lower.content.mySeq) and + match({ field1 := 41, field2 := omit }, t_message_id1_lower.content.MySeq) and + match(second, t_message_id2_lower.content.myEnum) and + match(second, t_message_id2_lower.content.MyEnum) and + match(15, t_message_id3_lower.content.iNTEGER) and + match(15, t_message_id3_lower.content.INTEGER)) { + log("c"); + } + if (match({ field1 := 41, field2 := omit }, vt_message_id1_upper.content.mySeq) and + match({ field1 := 41, field2 := omit }, vt_message_id1_upper.content.MySeq) and + match(second, vt_message_id2_upper.content.myEnum) and + match(second, vt_message_id2_upper.content.MyEnum) and + match(15, vt_message_id3_upper.content.iNTEGER) and + match(15, vt_message_id3_upper.content.INTEGER)) { + log("d"); + } +} + +} diff --git a/regression_test/compileonly/optionalAssignCompare/Makefile b/regression_test/compileonly/optionalAssignCompare/Makefile index 0340933f6..487946a8b 100644 --- a/regression_test/compileonly/optionalAssignCompare/Makefile +++ b/regression_test/compileonly/optionalAssignCompare/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/optionalAssignCompare/ToptionalAssignCompare.ttcn b/regression_test/compileonly/optionalAssignCompare/ToptionalAssignCompare.ttcn index ebb208024..f250aab03 100644 --- a/regression_test/compileonly/optionalAssignCompare/ToptionalAssignCompare.ttcn +++ b/regression_test/compileonly/optionalAssignCompare/ToptionalAssignCompare.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/portConstructor/Makefile b/regression_test/compileonly/portConstructor/Makefile index 8c370e0d1..91bb8e003 100644 --- a/regression_test/compileonly/portConstructor/Makefile +++ b/regression_test/compileonly/portConstructor/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/portConstructor/x.ttcn b/regression_test/compileonly/portConstructor/x.ttcn index a846ca9a9..8da3f8913 100644 --- a/regression_test/compileonly/portConstructor/x.ttcn +++ b/regression_test/compileonly/portConstructor/x.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/styleGuide/Another_module.ttcn b/regression_test/compileonly/styleGuide/Another_module.ttcn index b7ffef21c..e4a33b8f6 100644 --- a/regression_test/compileonly/styleGuide/Another_module.ttcn +++ b/regression_test/compileonly/styleGuide/Another_module.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/styleGuide/Makefile b/regression_test/compileonly/styleGuide/Makefile index 80567738e..e71bca836 100644 --- a/regression_test/compileonly/styleGuide/Makefile +++ b/regression_test/compileonly/styleGuide/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/styleGuide/MyASN1_module.asn b/regression_test/compileonly/styleGuide/MyASN1_module.asn index 3c526f432..f5c1b11fe 100644 --- a/regression_test/compileonly/styleGuide/MyASN1_module.asn +++ b/regression_test/compileonly/styleGuide/MyASN1_module.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/styleGuide/MySample_module.ttcn b/regression_test/compileonly/styleGuide/MySample_module.ttcn index 72b1492c4..f41e018fe 100644 --- a/regression_test/compileonly/styleGuide/MySample_module.ttcn +++ b/regression_test/compileonly/styleGuide/MySample_module.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/styleGuide/external.cc b/regression_test/compileonly/styleGuide/external.cc index ab3f523e7..f2060d129 100644 --- a/regression_test/compileonly/styleGuide/external.cc +++ b/regression_test/compileonly/styleGuide/external.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/topLevelPdu/A.asn b/regression_test/compileonly/topLevelPdu/A.asn index 04ea1df42..da8eeacb1 100644 --- a/regression_test/compileonly/topLevelPdu/A.asn +++ b/regression_test/compileonly/topLevelPdu/A.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/topLevelPdu/B.asn b/regression_test/compileonly/topLevelPdu/B.asn index 6edc731c0..e8db4f059 100644 --- a/regression_test/compileonly/topLevelPdu/B.asn +++ b/regression_test/compileonly/topLevelPdu/B.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/topLevelPdu/Makefile b/regression_test/compileonly/topLevelPdu/Makefile index 9971b18af..503b37f0a 100644 --- a/regression_test/compileonly/topLevelPdu/Makefile +++ b/regression_test/compileonly/topLevelPdu/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/typeInstantiation/A.asn b/regression_test/compileonly/typeInstantiation/A.asn index ff5887e08..bfa11b0df 100644 --- a/regression_test/compileonly/typeInstantiation/A.asn +++ b/regression_test/compileonly/typeInstantiation/A.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/typeInstantiation/B.asn b/regression_test/compileonly/typeInstantiation/B.asn index 72030e276..af00773ac 100644 --- a/regression_test/compileonly/typeInstantiation/B.asn +++ b/regression_test/compileonly/typeInstantiation/B.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/compileonly/typeInstantiation/Makefile b/regression_test/compileonly/typeInstantiation/Makefile index 03c6c38e4..43599fc4c 100644 --- a/regression_test/compileonly/typeInstantiation/Makefile +++ b/regression_test/compileonly/typeInstantiation/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/configOper/Makefile b/regression_test/configOper/Makefile index 6035e7658..0d3af6c6c 100644 --- a/regression_test/configOper/Makefile +++ b/regression_test/configOper/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/configOper/TconfigOper.ttcn b/regression_test/configOper/TconfigOper.ttcn index 8c32d5578..634d6da2d 100644 --- a/regression_test/configOper/TconfigOper.ttcn +++ b/regression_test/configOper/TconfigOper.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/controlTimer/Makefile b/regression_test/controlTimer/Makefile index e5f08b269..79a92e734 100644 --- a/regression_test/controlTimer/Makefile +++ b/regression_test/controlTimer/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/controlTimer/TcontrolTimer.ttcn b/regression_test/controlTimer/TcontrolTimer.ttcn index ce3c85319..28dbc4eb5 100644 --- a/regression_test/controlTimer/TcontrolTimer.ttcn +++ b/regression_test/controlTimer/TcontrolTimer.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/controlTimer/config.cfg b/regression_test/controlTimer/config.cfg index d2ab8c9af..b084f8520 100644 --- a/regression_test/controlTimer/config.cfg +++ b/regression_test/controlTimer/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/defaultOper/Makefile b/regression_test/defaultOper/Makefile index 2ecb1ee5d..3a2cbdf17 100644 --- a/regression_test/defaultOper/Makefile +++ b/regression_test/defaultOper/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/defaultOper/TdefaultOper.ttcn b/regression_test/defaultOper/TdefaultOper.ttcn index ae34373a2..fa3d1f351 100644 --- a/regression_test/defaultOper/TdefaultOper.ttcn +++ b/regression_test/defaultOper/TdefaultOper.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/defaultOper/config.cfg b/regression_test/defaultOper/config.cfg index 2aef5be69..f83fdaf06 100644 --- a/regression_test/defaultOper/config.cfg +++ b/regression_test/defaultOper/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/enumOper/Makefile b/regression_test/enumOper/Makefile index 6a227f93b..805b01747 100644 --- a/regression_test/enumOper/Makefile +++ b/regression_test/enumOper/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/enumOper/TenumOper.ttcn b/regression_test/enumOper/TenumOper.ttcn index 50ac0e0b3..1b95f8592 100644 --- a/regression_test/enumOper/TenumOper.ttcn +++ b/regression_test/enumOper/TenumOper.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 @@ -15,6 +15,14 @@ type enumerated myenum4 {xx9,xx10(3),xx11}; // partly with numbers type myenum1 myenumSubtype1 (xx1) type myenum1 myenumSubtype2 + +type record myrecord { + myenum1 e1 optional, + myenum3 e3 +} + +type record of myenum4 myrecordof; + // *************** Constanst *********************** const myenum1 cg_1:= xx2; const myenumSubtype1 cg_mye1 := xx1 @@ -259,6 +267,33 @@ testcase tc_enumIsvalue() runs on emptyComponent if ( isvalue(modifies subenum := xx2) ) { setverdict(pass); } else { setverdict(fail); }; } +testcase tc_int2enum() runs on emptyComponent +{ + var myenum1 e1 := xx1; + var myenum2 e2; + var integer i := 2; + var myrecord rec1 := { e1 := omit, e3 := xx7 }; + var myrecord rec2; + var myrecordof recof1 := { xx10, xx11 }; + var myrecordof recof2 := { xx9 }; + + int2enum(1, e1); + int2enum(i, e2); + int2enum(5 - 3, rec1.e3); + int2enum(lengthof(recof1), rec1.e1); + int2enum(enum2int(cg_1), rec2.e3); + int2enum(1 + str2int("2"), recof1[1]); + int2enum(2 / 2, recof2[2]); + + if (e1 != xx2) { setverdict(fail, "e1 = ", e1); } + if (e2 != xx5) { setverdict(fail, "e2 = ", e2); } + if (rec1 != { e1 := xx3, e3 := xx6 }) { setverdict(fail, "rec1 = ", rec1) }; + if (log2str(rec2) != "{ e1 := <unbound>, e3 := xx8 (1) }") { setverdict(fail, "rec2 = ", rec2); } + if (recof1 != { xx10, xx10 }) { setverdict(fail, "recof1 = ", recof1); } + if (log2str(recof2) != "{ xx9 (0), <unbound>, xx11 (1) }") { setverdict(fail, "recof2 = ", recof2); } + setverdict(pass); +} + control { const myenum1 cl_1 := xx1; // can constants be declared in the control part const myenum2 cl_2 := xx3; @@ -282,5 +317,6 @@ control { execute(tc_enumNumb3()); execute(tc_enumSubtypes()); execute(tc_enumIsvalue()); + execute(tc_int2enum()); } } diff --git a/regression_test/enumOper/config.cfg b/regression_test/enumOper/config.cfg index 3a5f236ba..e98432485 100644 --- a/regression_test/enumOper/config.cfg +++ b/regression_test/enumOper/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/floatOper/Makefile b/regression_test/floatOper/Makefile index 69019a2c7..dc0676abb 100644 --- a/regression_test/floatOper/Makefile +++ b/regression_test/floatOper/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/floatOper/TfloatOper.ttcn b/regression_test/floatOper/TfloatOper.ttcn index c29cdc588..e39feb095 100644 --- a/regression_test/floatOper/TfloatOper.ttcn +++ b/regression_test/floatOper/TfloatOper.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 @@ -419,7 +419,7 @@ testcase floatComparison() runs on floatOper_comptype { //---------------- var float NaN := not_a_number; - if (NaN == not_a_number) { log("not_a_number==not_a_number:OK") } else { setverdict(fail, __LINE__, ": not_a_number==not_a_number:NotOK") } + if (NaN != not_a_number) { setverdict(fail, __LINE__, ": not_a_number==not_a_number:NotOK") } } @@ -466,7 +466,7 @@ testcase constFloatComparison() runs on floatOper_comptype { //---------------- const float NaN := not_a_number; - if (NaN == not_a_number) { log("not_a_number==not_a_number:OK") } else { setverdict(fail, __LINE__, ": not_a_number==not_a_number:NotOK") } + if (NaN != not_a_number) { setverdict(fail, __LINE__, ": not_a_number==not_a_number:NotOK") } } diff --git a/regression_test/floatOper/config.cfg b/regression_test/floatOper/config.cfg index 1aa467c9a..52ff1a332 100644 --- a/regression_test/floatOper/config.cfg +++ b/regression_test/floatOper/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/functionReference/FuncRef.ttcn b/regression_test/functionReference/FuncRef.ttcn index 974ba8053..75b46c32d 100644 --- a/regression_test/functionReference/FuncRef.ttcn +++ b/regression_test/functionReference/FuncRef.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 @@ -64,8 +64,6 @@ testcase calculationTest() runs on FuncRef_comp { binary := refers(add) } }; var integer result_1 := calculate_expr(operands_1, operators_1); var integer result_2 := calculate_expr(operands_2, operators_2); - log("result 1 = ", result_1); - log("result 2 = ", result_2); if (result_1 == result_2) { setverdict(pass); } else { setverdict(fail); } } @@ -76,9 +74,6 @@ template bin_oper bin_oper_tmpl3 := omit; testcase funcTemplateTest() runs on FuncRef_comp { - log(bin_oper_tmpl); - log(bin_oper_tmpl2); - log(bin_oper_tmpl3); var bin_oper a := refers(add); var bin_oper s := refers(sub); var bin_oper m := refers(mul); @@ -166,7 +161,6 @@ type function fact_func_type(in integer num, inout integer steps, function factorial1(in integer num, inout integer steps) return integer { - //log("factorial1 called"); steps := steps + 1; if (num<2) { return 1; } else { return num*factorial1(num-1,steps); } @@ -176,7 +170,6 @@ function factorial1(in integer num, inout integer steps) return integer function factorial2(in integer num, inout integer steps, in fact_func_type ff) return integer { - //log("factorial2 called"); steps := steps + 1; if (num<2) { return 1; } else { return num*ff.apply(num-1,steps,refers(factorial3)); } @@ -185,7 +178,6 @@ return integer function factorial3(in integer num, inout integer steps, in fact_func_type ff) return integer { - //log("factorial3 called"); steps := steps + 1; if (num<2) { return 1; } else { return num*ff.apply(num-1,steps,refers(factorial2)); } diff --git a/regression_test/functionReference/Makefile b/regression_test/functionReference/Makefile index f92acd83d..162db45de 100644 --- a/regression_test/functionReference/Makefile +++ b/regression_test/functionReference/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/functionReference/config.cfg b/regression_test/functionReference/config.cfg index 6481e8bbc..7917f7038 100644 --- a/regression_test/functionReference/config.cfg +++ b/regression_test/functionReference/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/functionSubref/Makefile b/regression_test/functionSubref/Makefile new file mode 100644 index 000000000..1ca723e64 --- /dev/null +++ b/regression_test/functionSubref/Makefile @@ -0,0 +1,54 @@ +############################################################################### +# Copyright (c) 2000-2015 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 +############################################################################### +TOPDIR := .. +include $(TOPDIR)/Makefile.regression + +.SUFFIXES: .ttcn .hh +.PHONY: all clean dep run + +TTCN3_LIB = ttcn3$(RT2_SUFFIX)$(DYNAMIC_SUFFIX) + +TTCN3_MODULES = TfunctionSubref.ttcn TpardTemplateSubref.ttcn + +GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) +GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) +ifdef CODE_SPLIT +GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +endif +USER_SOURCES = +USER_HEADERS = $(USER_SOURCES:.cc=.hh) +OBJECTS = $(GENERATED_SOURCES:.cc=.o) $(USER_SOURCES:.cc=.o) + +TARGET = TfunctionSubref$(EXESUFFIX) + +all: $(TARGET) + +$(TARGET): $(GENERATED_SOURCES) $(USER_SOURCES) + $(CXX) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@ $^ -L$(TTCN3_DIR)/lib -l$(TTCN3_LIB) -L$(OPENSSL_DIR)/lib -lcrypto $($(PLATFORM)_LIBS) + +$(GENERATED_SOURCES) $(GENERATED_HEADERS): compile + @if [ ! -f $@ ]; then $(RM) compile; $(MAKE) compile; fi + +compile: $(TTCN3_MODULES) + $(filter-out -Nold -E, $(TTCN3_COMPILER)) $(COMPILER_FLAGS) $^ + touch compile + +clean distclean: + -rm -f $(TARGET) $(OBJECTS) $(GENERATED_HEADERS) \ + $(GENERATED_SOURCES) *.log Makefile.bak + +dep: $(GENERATED_SOURCES) + makedepend $(CPPFLAGS) $(GENERATED_SOURCES) + +run: $(TARGET) config.cfg + ./$^ + +.NOTPARALLEL: + +vpath $(USER_SOURCES) $(ABS_SRC) + diff --git a/regression_test/functionSubref/TfunctionSubref.ttcn b/regression_test/functionSubref/TfunctionSubref.ttcn new file mode 100644 index 000000000..1ff540fdb --- /dev/null +++ b/regression_test/functionSubref/TfunctionSubref.ttcn @@ -0,0 +1,586 @@ +/****************************************************************************** + * Copyright (c) 2000-2015 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 + ******************************************************************************/ + +// This module contains tests for using subreferences (field names and array indexes) on the +// return values of function calls. +module TfunctionSubref { + +/* * * * Types * * * */ +type record Rec { + integer num, + charstring str +} + +type record of integer RoI; + +type union Uni { + integer i, + float f, + boolean b, + bitstring bs, + hexstring hs, + octetstring os, + charstring cs, + universal charstring ucs, + verdicttype vt, + enumerated { Small, Medium, Large } size +} + +type octetstring Arr[4]; + +type record of Uni RoUni; + +type set Complex { + Rec rec, + RoI roi, + RoUni unis +} + +type port PT message { + inout integer, octetstring +} +with { extension "internal" }; + +type component CT { + timer t; + port PT pt; +} + +/* * * * Tested functions * * * */ +function f_rec(in Rec x) return Rec { return x; } + +function f_roi(in RoI x) return RoI { return x; } + +function f_uni(in Uni x) return Uni { return x; } + +function f_arr(in Arr x) return Arr { return x; } + +function f_complex(in Complex x) return Complex { return x; } + +function f_rec_temp(in template Rec x) return template Rec { return x; } + +function f_roi_temp(in template RoI x) return template RoI { return x; } + +function f_uni_temp(in template Uni x) return template Uni { return x; } + +function f_arr_temp(in template Arr x) return template Arr { return x; } + +function f_complex_temp(in template Complex x) return template Complex { return x; } + +/* * * * Helper functions for certain test cases * * * */ +function f_test(in charstring p1, in integer p2, in boolean p3, in octetstring p4) +{ + if (p1 == c_rec.str) { setverdict(pass); } + else { setverdict(fail, "Expected: ", c_rec.str, ", got: ", p1); } + if (p2 == c_roi[0]) { setverdict(pass); } + else { setverdict(fail, "Expected: ", c_roi[0], ", got: ", p2); } + if (p3 == c_unis[2].b) { setverdict(pass); } + else { setverdict(fail, "Expected: ", c_unis[2].b, ", got: ", p3); } + if (p4 == c_arr[1]) { setverdict(pass); } + else { setverdict(fail, "Expected: ", c_arr[1], ", got: ", p4); } +} + +function f_test_temp(in template charstring p1, in template integer p2, + in template boolean p3, in template octetstring p4) +{ + if (log2str(p1) == log2str(t_rec.str)) { setverdict(pass); } + else { setverdict(fail, "Expected: ", t_rec.str, ", got: ", p1); } + if (log2str(p2) == log2str(t_roi[0])) { setverdict(pass); } + else { setverdict(fail, "Expected: ", t_roi[0], ", got: ", p2); } + if (log2str(p3) == log2str(t_unis[2].b)) { setverdict(pass); } + else { setverdict(fail, "Expected: ", t_unis[2].b, ", got: ", p3); } + if (log2str(p4) == log2str(t_arr[1])) { setverdict(pass); } + else { setverdict(fail, "Expected: ", t_arr[1], ", got: ", p4); } +} + +external function ef_enc_int(in integer x) return octetstring + with { extension "prototype(convert) encode(JSON)" }; + +external function ef_enc_oct(in octetstring x) return octetstring + with { extension "prototype(convert) encode(JSON)" }; + +altstep as_ct() runs on CT +{ + var integer bad_int; + var octetstring bad_os; + [] pt.receive(integer:?) -> value bad_int { + setverdict(fail, "Expected octetstring value instead of ", bad_int); + } + [] pt.receive(octetstring:?) -> value bad_os { + setverdict(fail, "Expected integer value instead of ", bad_os); + } + [] t.timeout { + setverdict(inconc, "Receive timed out"); + } +} + +/* * * * Constants and templates * * * */ +const Rec c_rec := { num := 3, str := "a0" }; +const RoI c_roi := { 1, 2, 4, 8, 16 }; +const RoUni c_unis := { { i := -6 }, { f := 0.5 }, { b := true }, { bs := '1101'B }, { hs := '3D7'H }, + { os := '44A1'O }, { cs := "abc" }, { ucs := "vÃz" }, { vt := error }, { size := Small } }; +const Arr c_arr := { '01'O, 'DE'O, 'ABBA'O, '1234EEFF'O }; + +template Rec t_rec := { num := (0..100), str := pattern "a*b" }; +template RoI t_roi := { ?, 0, ((-10..-1), (1..10)) }; +template RoUni t_unis := { { i := (0..infinity) }, { f := (-1.0..1.0) }, { b := ? }, { bs := ? length (1..4) }, + { hs := '12345FF'H }, { os := ('0000'O, 'FFFF'O) }, { cs := ("a".."z") length (5) }, { ucs := "vÃz" }, + { vt := ? }, { size := (Small, Large) } }; +template Arr t_arr := { ? length (2), ?, 'FEFEFE'O, 'DEADBEEF'O }; + +/* * * * Test cases * * * */ +testcase tc_func_subref_var_assign() runs on CT +{ + var integer x1 := f_rec(c_rec).num; + var integer x2 := f_roi(c_roi)[4]; + var integer x3 := f_uni(c_unis[0]).i; + var charstring str1 := f_rec(c_rec).str; + var charstring str2 := f_uni(c_unis[6]).cs; + var octetstring os := f_arr(c_arr)[1]; + if (x1 == c_rec.num) { setverdict(pass); } + else { setverdict(fail, "Expected: ", c_rec.num, ", got: ", x1); } + if (x2 == c_roi[4]) { setverdict(pass); } + else { setverdict(fail, "Expected: ", c_roi[4], ", got: ", x2); } + if (x3 == c_unis[0].i) { setverdict(pass); } + else { setverdict(fail, "Expected: ", c_unis[0].i, ", got: ", x3); } + if (str1 == c_rec.str) { setverdict(pass); } + else { setverdict(fail, "Expected: ", c_rec.str, ", got: ", str1); } + if (str2 == c_unis[6].cs) { setverdict(pass); } + else { setverdict(fail, "Expected: ", c_unis[6].cs, ", got: ", str2); } + if (os == c_arr[1]) { setverdict(pass); } + else { setverdict(fail, "Expected: ", c_roi[1], ", got: ", os); } +} + +testcase tc_func_subref_equality() runs on CT +{ + if (f_rec(c_rec).str == c_rec.str) { setverdict(pass); } + else { setverdict(fail, "Expected: ", c_rec.str, ", got: ", f_rec(c_rec).str); } + if (f_roi(c_roi)[2] == c_roi[2]) { setverdict(pass); } + else { setverdict(fail, "Expected: ", c_roi[2], ", got: ", f_roi(c_roi)[2]); } + if (f_uni(c_unis[3]).bs == c_unis[3].bs) { setverdict(pass); } + else { setverdict(fail, "Expected: ", c_unis[3].bs, ", got: ", f_uni(c_unis[3]).bs); } + if (f_arr(c_arr)[3] == c_arr[3]) { setverdict(pass); } + else { setverdict(fail, "Expected: ", c_arr[3], ", got: ", f_arr(c_arr)[3]); } + if (f_rec(c_rec).num != 100) { setverdict(pass); } + else { setverdict(fail, "Expected anything other than 100"); } + if (f_roi(c_roi)[1] != 16) { setverdict(pass); } + else { setverdict(fail, "Expected anything other than 16"); } + if (f_uni(c_unis[8]).vt != pass) { setverdict(pass); } + else { setverdict(fail, "Expected anything other than pass"); } + if (f_arr(c_arr)[0] != 'DE'O) { setverdict(pass); } + else { setverdict(fail, "Expected anything other than 'DE'O"); } +} + +testcase tc_func_subref_bound_and_present() runs on CT +{ + if (isbound(f_rec(c_rec).str)) { setverdict(pass); } + else { setverdict(fail, "Expected bound record field"); } + if (isbound(f_roi(c_roi)[2])) { setverdict(pass); } + else { setverdict(fail, "Expected bound record of element"); } + if (isbound(f_uni(c_unis[2]).b)) { setverdict(pass); } + else { setverdict(fail, "Expected bound union alternative"); } + if (isbound(f_arr(c_arr)[2])) { setverdict(pass); } + else { setverdict(fail, "Expected bound array element"); } + if (ispresent(f_uni(c_unis[9]).size)) { setverdict(pass); } + else { setverdict(fail, "Expected present union alternative"); } +} + +testcase tc_func_subref_math_expr() runs on CT +{ + var integer int_expr := -f_rec(c_rec).num + f_roi(c_roi)[3] * f_uni(c_unis[0]).i; + var integer int_expr_e := -c_rec.num + c_roi[3] * c_unis[0].i; + var float float_expr := 4.0 / f_uni(c_unis[1]).f; + var float float_expr_e := 4.0 / c_unis[1].f; + if (int_expr == int_expr_e) { setverdict(pass); } + else { setverdict(fail, "Expected: ", int_expr_e, ", got: ", int_expr); } + if (float_expr == float_expr_e) { setverdict(pass); } + else { setverdict(fail, "Expected: ", float_expr_e, ", got: ", float_expr); } +} + +testcase tc_func_subref_bool_expr() runs on CT +{ + var boolean bool_expr := (not f_uni(c_unis[2]).b) or (f_rec(c_rec).num > 0 and + f_roi(c_roi)[2] < 10 xor f_uni(c_unis[9]).size >= Medium); + var boolean bool_expr_e := (not c_unis[2].b) or (c_rec.num > 0 and + c_roi[2] < 10 xor c_unis[9].size >= Medium); + if (bool_expr == bool_expr_e) { setverdict(pass); } + else { setverdict(fail, "Expected: ", bool_expr_e, ", got: ", bool_expr); } +} + +testcase tc_func_subref_binary_expr() runs on CT +{ + var bitstring bs_expr := f_uni(c_unis[3]).bs >> f_roi(c_roi)[1]; + var bitstring bs_expr_e := c_unis[3].bs >> c_roi[1]; + var hexstring hs_expr := f_uni(c_unis[4]).hs <@ f_rec(c_rec).num; + var hexstring hs_expr_e := c_unis[4].hs <@ c_rec.num; + var octetstring os_expr := f_uni(c_unis[5]).os and4b (not4b f_arr(c_arr)[2]); + var octetstring os_expr_e := c_unis[5].os and4b (not4b c_arr[2]); + if (bs_expr == bs_expr_e) { setverdict(pass); } + else { setverdict(fail, "Expected: ", bs_expr_e, ", got: ", bs_expr); } + if (hs_expr == hs_expr_e) { setverdict(pass); } + else { setverdict(fail, "Expected: ", hs_expr_e, ", got: ", hs_expr); } + if (os_expr == os_expr_e) { setverdict(pass); } + else { setverdict(fail, "Expected: ", os_expr_e, ", got: ", os_expr); } +} + +testcase tc_func_subref_str_concat() runs on CT +{ + var bitstring bs_expr := f_uni(c_unis[3]).bs & f_uni(c_unis[3]).bs; + var bitstring bs_expr_e := c_unis[3].bs & c_unis[3].bs; + var hexstring hs_expr := 'FF'H & f_uni(c_unis[4]).hs & 'FF'H; + var hexstring hs_expr_e := 'FF'H & c_unis[4].hs & 'FF'H; + var octetstring os_expr := f_uni(c_unis[5]).os & f_arr(c_arr)[3]; + var octetstring os_expr_e := c_unis[5].os & c_arr[3]; + var charstring cs_expr := f_uni(c_unis[6]).cs & " " & f_rec(c_rec).str; + var charstring cs_expr_e := c_unis[6].cs & " " & c_rec.str; + var universal charstring ucs_expr := "x" & f_uni(c_unis[7]).ucs & "x"; + var universal charstring ucs_expr_e := "x" & c_unis[7].ucs & "x"; + if (bs_expr == bs_expr_e) { setverdict(pass); } + else { setverdict(fail, "Expected: ", bs_expr_e, ", got: ", bs_expr); } + if (hs_expr == hs_expr_e) { setverdict(pass); } + else { setverdict(fail, "Expected: ", hs_expr_e, ", got: ", hs_expr); } + if (os_expr == os_expr_e) { setverdict(pass); } + else { setverdict(fail, "Expected: ", os_expr_e, ", got: ", os_expr); } + if (cs_expr == cs_expr_e) { setverdict(pass); } + else { setverdict(fail, "Expected: ", cs_expr_e, ", got: ", cs_expr); } + if (ucs_expr == ucs_expr_e) { setverdict(pass); } + else { setverdict(fail, "Expected: ", ucs_expr_e, ", got: ", ucs_expr); } +} + +testcase tc_func_subref_str_length() runs on CT +{ + if (lengthof(f_uni(c_unis[3]).bs) == lengthof(c_unis[3].bs)) { setverdict(pass); } + else { setverdict(fail, "Expected: ", lengthof(c_unis[3].bs), ", got: ", lengthof(f_uni(c_unis[3]).bs)); } + if (lengthof(f_uni(c_unis[4]).hs) == lengthof(c_unis[4].hs)) { setverdict(pass); } + else { setverdict(fail, "Expected: ", lengthof(c_unis[4].hs), ", got: ", lengthof(f_uni(c_unis[4]).hs)); } + if (lengthof(f_uni(c_unis[5]).os) == lengthof(c_unis[5].os)) { setverdict(pass); } + else { setverdict(fail, "Expected: ", lengthof(c_unis[5].os), ", got: ", lengthof(f_uni(c_unis[5]).os)); } + if (lengthof(f_arr(c_arr)[1]) == lengthof(c_arr[1])) { setverdict(pass); } + else { setverdict(fail, "Expected: ", lengthof(c_arr[1]), ", got: ", lengthof(f_arr(c_arr)[1])); } + if (lengthof(f_uni(c_unis[6]).cs) == lengthof(c_unis[6].cs)) { setverdict(pass); } + else { setverdict(fail, "Expected: ", lengthof(c_unis[6].cs), ", got: ", lengthof(f_uni(c_unis[6]).cs)); } + if (lengthof(f_rec(c_rec).str) == lengthof(c_rec.str)) { setverdict(pass); } + else { setverdict(fail, "Expected: ", lengthof(c_rec.str), ", got: ", lengthof(f_rec(c_rec).str)); } + if (lengthof(f_uni(c_unis[7]).ucs) == lengthof(c_unis[7].ucs)) { setverdict(pass); } + else { setverdict(fail, "Expected: ", lengthof(c_unis[7].ucs), ", got: ", lengthof(f_uni(c_unis[7]).ucs)); } +} + +testcase tc_func_subref_str_index() runs on CT +{ + if (f_uni(c_unis[3]).bs[2] == c_unis[3].bs[2]) { setverdict(pass); } + else { setverdict(fail, "Expected: ", c_unis[3].bs[2], ", got: ", f_uni(c_unis[3]).bs[2]); } + if (f_uni(c_unis[4]).hs[2] == c_unis[4].hs[2]) { setverdict(pass); } + else { setverdict(fail, "Expected: ", c_unis[4].hs[2], ", got: ", f_uni(c_unis[4]).hs[2]); } + if (f_uni(c_unis[5]).os[1] == c_unis[5].os[1]) { setverdict(pass); } + else { setverdict(fail, "Expected: ", c_unis[5].os[1], ", got: ", f_uni(c_unis[5]).os[1]); } + if (f_arr(c_arr)[2][1] == c_arr[2][1]) { setverdict(pass); } + else { setverdict(fail, "Expected: ", c_arr[2][1], ", got: ", f_arr(c_arr)[2][1]); } + if (f_uni(c_unis[6]).cs[2] == c_unis[6].cs[2]) { setverdict(pass); } + else { setverdict(fail, "Expected: ", c_unis[6].cs[2], ", got: ", f_uni(c_unis[6]).cs[2]); } + if (f_rec(c_rec).str[0] == c_rec.str[0]) { setverdict(pass); } + else { setverdict(fail, "Expected: ", c_rec.str[0], ", got: ", f_rec(c_rec).str[0]); } + if (f_uni(c_unis[7]).ucs[2] == c_unis[7].ucs[2]) { setverdict(pass); } + else { setverdict(fail, "Expected: ", c_unis[7].ucs[2], ", got: ", f_uni(c_unis[7]).ucs[2]); } +} + +testcase tc_func_subref_log() runs on CT +{ + var charstring sep := " | "; + var charstring log_str := log2str(f_rec(c_rec).str, sep, f_roi(c_roi)[3], sep, f_uni(c_unis[9]).size, + sep, f_arr(c_arr)[0]); + var charstring log_str_e := log2str(c_rec.str, sep, c_roi[3], sep, c_unis[9].size, sep, c_arr[0]); + if (log_str == log_str_e) { setverdict(pass); } + else { setverdict(fail, "Expected: ", log_str_e, ", got: ", log_str); } + log(f_rec(c_rec).str,f_roi(c_roi)[3], f_uni(c_unis[9]).size, f_arr(c_arr)[0]); +} + +testcase tc_func_subref_structure() runs on CT +{ + var Rec rec1 := { num := f_rec(c_rec).num, str := f_rec(c_rec).str }; // == c_rec + var Rec rec2 := { f_roi(c_roi)[1], f_uni(c_unis[6]).cs }; + var Rec rec2_e := { c_roi[1], c_unis[6].cs }; + var RoI roi := { f_uni(c_unis[0]).i, 91, f_roi(c_roi)[3], 0 }; + var RoI roi_e := { c_unis[0].i, 91, c_roi[3], 0 }; + var Uni uni := { vt := f_uni(c_unis[8]).vt }; // == c_unis[8] + var Arr arr := { [0] := f_arr(c_arr)[0], [1] := f_arr(c_arr)[1], + [2] := f_arr(c_arr)[2], [3] := f_arr(c_arr)[3] }; // == c_arr + if (rec1 == c_rec) { setverdict(pass); } + else { setverdict(fail, "Expected: ", c_rec, ", got: ", rec1); } + if (rec2 == rec2_e) { setverdict(pass); } + else { setverdict(fail, "Expected: ", rec2_e, ", got: ", rec2); } + if (roi == roi_e) { setverdict(pass); } + else { setverdict(fail, "Expected: ", roi_e, ", got: ", roi); } + if (uni == c_unis[8]) { setverdict(pass); } + else { setverdict(fail, "Expected: ", c_unis[8], ", got: ", uni); } + if (arr == c_arr) { setverdict(pass); } + else { setverdict(fail, "Expected: ", c_arr, ", got: ", arr); } +} + +testcase tc_func_subref_convert() runs on CT +{ + var integer int_res := hex2int(f_uni(c_unis[4]).hs) + oct2int(f_arr(c_arr)[3]); + var integer int_res_e := hex2int(c_unis[4].hs) + oct2int(c_arr[3]); + var Arr arr_res := { int2oct(f_roi(c_roi)[3], 2), str2oct(f_rec(c_rec).str), + char2oct(f_uni(c_unis[6]).cs), unichar2oct(f_uni(c_unis[7]).ucs, "UTF-8") }; + var Arr arr_res_e := { int2oct(c_roi[3], 2), str2oct(c_rec.str), + char2oct(c_unis[6].cs), unichar2oct(c_unis[7].ucs, "UTF-8") }; + if (int_res == int_res_e) { setverdict(pass); } + else { setverdict(fail, "Expected: ", int_res_e, ", got: ", int_res); } + if (arr_res == arr_res_e) { setverdict(pass); } + else { setverdict(fail, "Expected: ", arr_res_e, ", got: ", arr_res); } +} + +testcase tc_func_subref_parameter() runs on CT +{ + f_test(f_rec(c_rec).str, f_roi(c_roi)[0], f_uni(c_unis[2]).b, f_arr(c_arr)[1]); + var Arr enc_arr := { ef_enc_int(f_rec(c_rec).num), ef_enc_int(f_roi(c_roi)[2]), + ef_enc_oct(f_uni(c_unis[5]).os), ef_enc_oct(f_arr(c_arr)[3]) }; + var Arr enc_arr_e := { ef_enc_int(c_rec.num), ef_enc_int(c_roi[2]), + ef_enc_oct(c_unis[5].os), ef_enc_oct(c_arr[3]) }; + if (enc_arr == enc_arr_e) { setverdict(pass); } + else { setverdict(fail, "Expected: ", enc_arr_e, ", got: ", enc_arr); } +} + +testcase tc_func_subref_send() runs on CT +{ + connect(mtc:pt, mtc:pt); + pt.send(f_rec(c_rec).num); + pt.send(f_roi(c_roi)[1]); + pt.send(f_uni(c_unis[0]).i); + pt.send(f_arr(c_arr)[2]); + var default def := activate(as_ct()); + var integer bad_int; + var octetstring bad_os; + t.start(1.0); + alt { + [] pt.receive(c_rec.num) { setverdict(pass); } + [] pt.receive(integer:?) -> value bad_int + { setverdict(fail, "Expected: ", c_rec.num, ", got: ", bad_int); } + } + alt { + [] pt.receive(c_roi[1]) { setverdict(pass); } + [] pt.receive(integer:?) -> value bad_int + { setverdict(fail, "Expected: ", c_roi[1], ", got: ", bad_int); } + } + alt { + [] pt.receive(c_unis[0].i) { setverdict(pass); } + [] pt.receive(integer:?) -> value bad_int + { setverdict(fail, "Expected: ", c_unis[0].i, ", got: ", bad_int); } + } + alt { + [] pt.receive(c_arr[2]) { setverdict(pass); } + [] pt.receive(octetstring:?) -> value bad_os + { setverdict(fail, "Expected: ", c_arr[2], ", got: ", bad_os); } + } + deactivate(def); +} + +testcase tc_func_subref_complex() runs on CT +{ + var Complex x := { rec := c_rec, roi := c_roi, unis := c_unis }; + var RoI roi_res := { f_complex(x).rec.num, 3 * f_complex(x).roi[2], + float2int(f_complex(x).unis[1].f) - lengthof(f_complex(x).roi) }; + var RoI roi_res_e := { x.rec.num, 3 * x.roi[2], + float2int(x.unis[1].f) - lengthof(x.roi) }; + if (roi_res == roi_res_e) { setverdict(pass); } + else { setverdict(fail, "Expected: ", roi_res_e, ", got: ", roi_res); } + if (f_complex(x).unis[9].size == x.unis[9].size) { setverdict(pass); } + else { setverdict(fail, "Expected: ", x.unis[9].size, ", got: ", f_complex(x).unis[9].size); } + if (isbound(f_complex(x).rec)) { setverdict(pass); } + else { setverdict(fail, "Expected bound record field"); } +} + +testcase tc_func_subref_ttcn2string() runs on CT +{ + var charstring str1 := ttcn2string(f_rec(c_rec).str); + var charstring str1_e := ttcn2string(c_rec.str); + var charstring str2 := ttcn2string(f_roi(c_roi)[1]); + var charstring str2_e := ttcn2string(c_roi[1]); + var charstring str3 := ttcn2string(f_uni(c_unis[7]).ucs); + var charstring str3_e := ttcn2string(c_unis[7].ucs); + var charstring str4 := ttcn2string(f_arr(c_arr)[2]); + var charstring str4_e := ttcn2string(c_arr[2]); + if (str1 == str1_e) { setverdict(pass); } + else { setverdict(fail, "Expected: ", str1_e, ", got: ", str1); } + if (str2 == str2_e) { setverdict(pass); } + else { setverdict(fail, "Expected: ", str2_e, ", got: ", str2); } + if (str3 == str3_e) { setverdict(pass); } + else { setverdict(fail, "Expected: ", str3_e, ", got: ", str3); } + if (str4 == str4_e) { setverdict(pass); } + else { setverdict(fail, "Expected: ", str4_e, ", got: ", str4); } +} + +testcase tc_func_subref_temp_var_assign() runs on CT +{ + var template charstring vt1 := f_rec_temp(t_rec).str; + var template integer vt2 := f_roi_temp(t_roi)[0]; + var template verdicttype vt3 := f_uni_temp(t_unis[8]).vt; + var template octetstring vt4 := f_arr_temp(t_arr)[3]; + if (log2str(vt1) == log2str(t_rec.str)) { setverdict(pass); } + else { setverdict(fail, "Expected: ", t_rec.str, ", got: ", vt1); } + if (log2str(vt2) == log2str(t_roi[0])) { setverdict(pass); } + else { setverdict(fail, "Expected: ", t_roi[0], ", got: ", vt2); } + if (log2str(vt3) == log2str(t_unis[8].vt)) { setverdict(pass); } + else { setverdict(fail, "Expected: ", t_unis[8].vt, ", got: ", vt3); } + if (log2str(vt4) == log2str(t_arr[3])) { setverdict(pass); } + else { setverdict(fail, "Expected: ", t_arr[3], ", got: ", vt4); } +} + +testcase tc_func_subref_temp_match() runs on CT +{ + var charstring v_good1 := "affx_Y1b"; + var integer v_good2 := -19; + var float v_good3 := 0.6; + var octetstring v_good4 := '12EF'O; + var integer v_bad1 := 331; + var integer v_bad2 := -20; + var bitstring v_bad3 := '110111'B; + var octetstring v_bad4 := 'ABCDEF'O; + if (match(v_good1, f_rec_temp(t_rec).str)) { setverdict(pass); } + else { setverdict(fail, "Expected ", v_good1, " to match ", f_rec_temp(t_rec).str); } + if (match(v_good2, f_roi_temp(t_roi)[0])) { setverdict(pass); } + else { setverdict(fail, "Expected ", v_good2, " to match ", f_roi_temp(t_roi)[0]); } + if (match(v_good3, f_uni_temp(t_unis[1]).f)) { setverdict(pass); } + else { setverdict(fail, "Expected ", v_good3, " to match ", f_uni_temp(t_unis[1]).f); } + if (match(v_good4, f_arr_temp(t_arr)[0])) { setverdict(pass); } + else { setverdict(fail, "Expected ", v_good4, " to match ", f_arr_temp(t_arr)[0]); } + if (not match(v_bad1, f_rec_temp(t_rec).num)) { setverdict(pass); } + else { setverdict(fail, "Expected ", v_bad1, " not to match ", f_rec_temp(t_rec).num); } + if (not match(v_bad2, f_roi_temp(t_roi)[2])) { setverdict(pass); } + else { setverdict(fail, "Expected ", v_bad2, " not to match ", f_roi_temp(t_roi)[2]); } + if (not match(v_bad3, f_uni_temp(t_unis[3]).bs)) { setverdict(pass); } + else { setverdict(fail, "Expected ", v_bad3, " not to match ", f_uni_temp(t_unis[3]).bs); } + if (not match(v_bad4, f_arr_temp(t_arr)[3])) { setverdict(pass); } + else { setverdict(fail, "Expected ", v_bad4, " not to match ", f_arr_temp(t_arr)[3]); } +} + +testcase tc_func_subref_temp_value() runs on CT +{ + if (not isvalue(f_rec_temp(t_rec).num)) { setverdict(pass); } + else { setverdict(fail, "Expected ", f_rec_temp(t_rec).num, " to not be a value."); } + if (isvalue(f_roi_temp(t_roi)[1])) { setverdict(pass); } + else { setverdict(fail, "Expected ", f_roi_temp(t_roi)[1], " to be a value."); } + if (isvalue(f_uni_temp(t_unis[4]).hs)) { setverdict(pass); } + else { setverdict(fail, "Expected ", f_uni_temp(t_unis[4]).hs, " to be a value."); } + if (isvalue(f_arr_temp(t_arr)[2])) { setverdict(pass); } + else { setverdict(fail, "Expected ", f_arr_temp(t_arr)[2], " to be a value."); } + if (valueof(f_roi_temp(t_roi)[1]) == valueof(t_roi[1])) { setverdict(pass); } + else { setverdict(fail, "Expected: ", t_roi[1], ", got: ", f_roi_temp(t_roi)[1]); } + if (valueof(f_uni_temp(t_unis[7]).ucs) == valueof(t_unis[7].ucs)) { setverdict(pass); } + else { setverdict(fail, "Expected: ", t_unis[7].ucs, ", got: ", f_uni_temp(t_unis[7]).ucs); } + if (valueof(f_arr_temp(t_arr)[3]) == valueof(t_arr[3])) { setverdict(pass); } + else { setverdict(fail, "Expected: ", t_arr[3], ", got: ", f_arr_temp(t_arr)[3]); } +} + +testcase tc_func_subref_temp_structure() runs on CT +{ + var template Rec rec1 := { num := f_rec_temp(t_rec).num, str := f_rec_temp(t_rec).str }; // == t_rec + var template Rec rec2 := { f_roi_temp(t_roi)[1], f_uni_temp(t_unis[6]).cs }; + var template Rec rec2_e := { t_roi[1], t_unis[6].cs }; + var template RoI roi := { f_uni_temp(t_unis[0]).i, 91, f_roi_temp(t_roi)[2], (0..infinity) }; + var template RoI roi_e := { t_unis[0].i, 91, t_roi[2], (0..infinity) }; + var template Uni uni := { vt := f_uni_temp(t_unis[8]).vt }; // == t_unis[8] + var template Arr arr := { [3] := f_arr_temp(t_arr)[3], [2] := f_arr_temp(t_arr)[2], + [1] := f_arr_temp(t_arr)[1], [0] := f_arr_temp(t_arr)[0] }; // == t_arr + if (log2str(rec1) == log2str(t_rec)) { setverdict(pass); } + else { setverdict(fail, "Expected: ", t_rec, ", got: ", rec1); } + if (log2str(rec2) == log2str(rec2_e)) { setverdict(pass); } + else { setverdict(fail, "Expected: ", rec2_e, ", got: ", rec2); } + if (log2str(roi) == log2str(roi_e)) { setverdict(pass); } + else { setverdict(fail, "Expected: ", roi_e, ", got: ", roi); } + if (log2str(uni) == log2str(t_unis[8])) { setverdict(pass); } + else { setverdict(fail, "Expected: ", t_unis[8], ", got: ", uni); } + if (log2str(arr) == log2str(t_arr)) { setverdict(pass); } + else { setverdict(fail, "Expected: ", t_arr, ", got: ", arr); } +} + +testcase tc_func_subref_temp_parameter() runs on CT +{ + f_test_temp(f_rec_temp(t_rec).str, f_roi_temp(t_roi)[0], + f_uni_temp(t_unis[2]).b, f_arr_temp(t_arr)[1]); +} + +testcase tc_func_subref_temp_send_receive() runs on CT +{ + connect(mtc:pt, mtc:pt); + pt.send(17); + pt.send(f_roi_temp(t_roi)[1]); + pt.send(123456789101112); + pt.send(f_arr_temp(t_arr)[2]); + var default def := activate(as_ct()); + var integer bad_int; + var octetstring bad_os; + t.start(1.0); + alt { + [] pt.receive(f_rec_temp(t_rec).num) { setverdict(pass); } + [] pt.receive(integer:?) -> value bad_int + { setverdict(fail, "Expected: ", f_rec_temp(t_rec).num, ", got: ", bad_int); } + } + alt { + [] pt.receive(f_roi_temp(t_roi)[1]) { setverdict(pass); } + [] pt.receive(integer:?) -> value bad_int + { setverdict(fail, "Expected: ", f_roi_temp(t_roi)[1], ", got: ", bad_int); } + } + alt { + [] pt.receive(f_uni_temp(t_unis[0]).i) { setverdict(pass); } + [] pt.receive(integer:?) -> value bad_int + { setverdict(fail, "Expected: ", f_uni_temp(t_unis[0]).i, ", got: ", bad_int); } + } + alt { + [] pt.receive(f_arr_temp(t_arr)[2]) { setverdict(pass); } + [] pt.receive(octetstring:?) -> value bad_os + { setverdict(fail, "Expected: ", f_arr_temp(t_arr)[2], ", got: ", bad_os); } + } + deactivate(def); +} + +testcase tc_func_subref_temp_complex() runs on CT +{ + var template Complex x := { rec := t_rec, roi := t_roi, unis := t_unis }; + var template RoI roi_res := { f_complex_temp(x).rec.num, f_complex_temp(x).roi[2], + f_complex_temp(x).unis[0].i }; + var template RoI roi_res_e := { x.rec.num, x.roi[2], x.unis[0].i }; + if (log2str(roi_res) == log2str(roi_res_e)) { setverdict(pass); } + else { setverdict(fail, "Expected: ", roi_res_e, ", got: ", roi_res); } + if (match(valueof(x.unis[7].ucs), f_complex_temp(x).unis[7].ucs)) { setverdict(pass); } + else { setverdict(fail, "Expected ", x.unis[7].ucs, " to match ", f_complex_temp(x).unis[7].ucs); } + if (not isvalue(f_complex_temp(x).rec)) { setverdict(pass); } + else { setverdict(fail, "Expected ", f_complex_temp(x).rec, " not to be a value"); } +} + +/* * * * Control part * * * */ +control { + // test cases for functions returning values + execute(tc_func_subref_var_assign()); + execute(tc_func_subref_equality()); + execute(tc_func_subref_bound_and_present()); + execute(tc_func_subref_math_expr()); + execute(tc_func_subref_bool_expr()); + execute(tc_func_subref_binary_expr()); + execute(tc_func_subref_str_concat()); + execute(tc_func_subref_str_length()); + execute(tc_func_subref_str_index()); + execute(tc_func_subref_log()); + execute(tc_func_subref_structure()); + execute(tc_func_subref_convert()); + execute(tc_func_subref_parameter()); + execute(tc_func_subref_send()); + execute(tc_func_subref_complex()); + execute(tc_func_subref_ttcn2string()); + + // test cases for functions returning templates + execute(tc_func_subref_temp_var_assign()); + execute(tc_func_subref_temp_match()); + execute(tc_func_subref_temp_value()); + execute(tc_func_subref_temp_structure()); + execute(tc_func_subref_temp_parameter()); + execute(tc_func_subref_temp_send_receive()); + execute(tc_func_subref_temp_complex()); +} + +} diff --git a/regression_test/functionSubref/TpardTemplateSubref.ttcn b/regression_test/functionSubref/TpardTemplateSubref.ttcn new file mode 100644 index 000000000..0c9a4d6a1 --- /dev/null +++ b/regression_test/functionSubref/TpardTemplateSubref.ttcn @@ -0,0 +1,205 @@ +/****************************************************************************** + * Copyright (c) 2000-2015 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 + ******************************************************************************/ + +// This module contains tests for using subreferences (field names and array indexes) on +// parameterized templates. +module TpardTemplateSubref { + +import from TfunctionSubref all; + +/* * * * Parameterized templates * * * */ +template Rec t_pard_rec(in template integer p_num, in template charstring p_str) := + { num := p_num, str := p_str }; + +template RoI t_pard_roi(in integer p_init, in integer p_mul) := + { p_init, p_init * p_mul, p_init * p_mul * p_mul }; + +template Uni t_pard_uni(in template octetstring p_val) := + { os := p_val }; + +template Arr t_pard_arr(in template Arr p_val) := + { p_val[3], p_val[2], p_val[1], p_val[0] }; + +template Complex t_pard_complex(in template Rec p_rec, in template RoI p_roi) := + { rec := p_rec, roi := p_roi, unis := { { os := t_os }, { i := c_init } } }; + +/* * * * Constants and templates * * * */ +template integer t_int := 10; +template charstring t_cs := ? length(1..4); +const integer c_init := 6; +const integer c_mul := 2; +template octetstring t_os := ('00'O, '11'O, '22'O, '33'O); + +/* * * * Helper function * * * */ +function f_test_pard_temp(in template charstring p1, in template integer p2, + in template octetstring p3, in template octetstring p4) +{ + if (log2str(p1) == log2str(t_cs)) { setverdict(pass); } + else { setverdict(fail, "Expected: ", t_cs, ", got: ", p1); } + if (log2str(p2) == log2str(c_init)) { setverdict(pass); } + else { setverdict(fail, "Expected: ", c_init, ", got: ", p2); } + if (log2str(p3) == log2str(t_os)) { setverdict(pass); } + else { setverdict(fail, "Expected: ", t_os, ", got: ", p3); } + if (log2str(p4) == log2str(t_arr[1])) { setverdict(pass); } + else { setverdict(fail, "Expected: ", t_arr[1], ", got: ", p4); } +} + +/* * * * Test cases * * * */ +testcase tc_pard_temp_var_assign() runs on CT +{ + var template charstring vt1 := t_pard_rec(t_int, t_cs).str; + var template integer vt2 := t_pard_roi(c_init, c_mul)[0]; + var template octetstring vt3 := t_pard_uni(t_os).os; + var template octetstring vt4 := t_pard_arr(t_arr)[3]; + if (log2str(vt1) == log2str(t_cs)) { setverdict(pass); } + else { setverdict(fail, "Expected: ", t_cs, ", got: ", vt1); } + if (log2str(vt2) == log2str(c_init)) { setverdict(pass); } + else { setverdict(fail, "Expected: ", c_init, ", got: ", vt2); } + if (log2str(vt3) == log2str(t_os)) { setverdict(pass); } + else { setverdict(fail, "Expected: ", t_os, ", got: ", vt3); } + if (log2str(vt4) == log2str(t_arr[0])) { setverdict(pass); } + else { setverdict(fail, "Expected: ", t_arr[0], ", got: ", vt4); } +} + +testcase tc_pard_temp_match() runs on CT +{ + var charstring v_good1 := "rT.8"; + var integer v_good2 := 12; + var octetstring v_good3 := '22'O; + var octetstring v_good4 := '12EF'O; + var integer v_bad1 := 331; + var integer v_bad2 := 7; + var octetstring v_bad3 := '44'O; + var octetstring v_bad4 := 'ABCDEF'O; + if (match(v_good1, t_pard_rec(t_int, t_cs).str)) { setverdict(pass); } + else { setverdict(fail, "Expected ", v_good1, " to match ", t_pard_rec(t_int, t_cs).str); } + if (match(v_good2, t_pard_roi(c_init, c_mul)[1])) { setverdict(pass); } + else { setverdict(fail, "Expected ", v_good2, " to match ", t_pard_roi(c_init, c_mul)[1]); } + if (match(v_good3, t_pard_uni(t_os).os)) { setverdict(pass); } + else { setverdict(fail, "Expected ", v_good3, " to match ", t_pard_uni(t_os).os); } + if (match(v_good4, t_pard_arr(t_arr)[3])) { setverdict(pass); } + else { setverdict(fail, "Expected ", v_good4, " to match ", t_pard_arr(t_arr)[3]); } + if (not match(v_bad1, t_pard_rec(t_int, t_cs).num)) { setverdict(pass); } + else { setverdict(fail, "Expected ", v_bad1, " not to match ", t_pard_rec(t_int, t_cs).num); } + if (not match(v_bad2, t_pard_roi(c_init, c_mul)[2])) { setverdict(pass); } + else { setverdict(fail, "Expected ", v_bad2, " not to match ", t_pard_roi(c_init, c_mul)[2]); } + if (not match(v_bad3, t_pard_uni(t_os).os)) { setverdict(pass); } + else { setverdict(fail, "Expected ", v_bad3, " not to match ", t_pard_uni(t_os).os); } + if (not match(v_bad4, t_pard_arr(t_arr)[1])) { setverdict(pass); } + else { setverdict(fail, "Expected ", v_bad4, " not to match ", t_pard_arr(t_arr)[1]); } +} + +testcase tc_pard_temp_value() runs on CT +{ + if (isvalue(t_pard_rec(t_int, t_cs).num)) { setverdict(pass); } + else { setverdict(fail, "Expected ", t_pard_rec(t_int, t_cs).num, " to be a value."); } + if (isvalue(t_pard_roi(c_init, c_mul)[1])) { setverdict(pass); } + else { setverdict(fail, "Expected ", t_pard_roi(c_init, c_mul)[1], " to be a value."); } + if (not isvalue(t_pard_uni(t_os).os)) { setverdict(pass); } + else { setverdict(fail, "Expected ", t_pard_uni(t_os).os, " to not be a value."); } + if (isvalue(t_pard_arr(t_arr)[0])) { setverdict(pass); } + else { setverdict(fail, "Expected ", t_pard_arr(t_arr)[0], " to be a value."); } + if (valueof(t_pard_rec(t_int, t_cs).num) == valueof(t_int)) { setverdict(pass); } + else { setverdict(fail, "Expected: ", t_int, ", got: ", t_pard_rec(t_int, t_cs).num); } + if (valueof(t_pard_roi(c_init, c_mul)[0]) == c_init) { setverdict(pass); } + else { setverdict(fail, "Expected: ", c_init, ", got: ", t_pard_roi(c_init, c_mul)[0]); } + if (valueof(t_pard_arr(t_arr)[1]) == valueof(t_arr[2])) { setverdict(pass); } + else { setverdict(fail, "Expected: ", t_arr[2], ", got: ", t_pard_arr(t_arr)[1]); } +} + +testcase tc_pard_temp_structure() runs on CT +{ + var template Rec rec1 := { num := t_pard_rec(t_int, t_cs).num, str := t_pard_rec(t_int, t_cs).str }; + var template Rec rec1_e := { num := t_int, str := t_cs }; + var template Rec rec2 := { t_pard_roi(c_init, c_mul)[1], "abc" }; + var template Rec rec2_e := { c_init * c_mul, "abc" }; + var template RoI roi := { t_pard_roi(c_init, c_mul)[2], (0..infinity) }; + var template RoI roi_e := { c_init * c_mul * c_mul, (0..infinity) }; + var template Uni uni := { os := t_pard_uni(t_os).os }; + var template Uni uni_e := { os := t_os }; + var template Arr arr := { [0] := t_pard_arr(t_arr)[3], [1] := t_pard_arr(t_arr)[2], + [2] := t_pard_arr(t_arr)[1], [3] := t_pard_arr(t_arr)[0] }; // == t_arr + if (log2str(rec1) == log2str(rec1_e)) { setverdict(pass); } + else { setverdict(fail, "Expected: ", rec1_e, ", got: ", rec1); } + if (log2str(rec2) == log2str(rec2_e)) { setverdict(pass); } + else { setverdict(fail, "Expected: ", rec2_e, ", got: ", rec2); } + if (log2str(roi) == log2str(roi_e)) { setverdict(pass); } + else { setverdict(fail, "Expected: ", roi_e, ", got: ", roi); } + if (log2str(uni) == log2str(uni_e)) { setverdict(pass); } + else { setverdict(fail, "Expected: ", uni_e, ", got: ", uni); } + if (log2str(arr) == log2str(t_arr)) { setverdict(pass); } + else { setverdict(fail, "Expected: ", t_arr, ", got: ", arr); } +} + +testcase tc_pard_temp_parameter() runs on CT +{ + f_test_pard_temp(t_pard_rec(t_int, t_cs).str, t_pard_roi(c_init, c_mul)[0], + t_pard_uni(t_os).os, t_pard_arr(t_arr)[2]); +} + +testcase tc_pard_temp_send_receive() runs on CT +{ + connect(mtc:pt, mtc:pt); + pt.send(t_pard_rec(t_int, t_cs).num); + pt.send(t_pard_roi(c_init, c_mul)[1]); + pt.send('11'O); + pt.send(t_pard_arr(t_arr)[0]); + var default def := activate(as_ct()); + var integer bad_int; + var octetstring bad_os; + t.start(1.0); + alt { + [] pt.receive(t_pard_rec(t_int, t_cs).num) { setverdict(pass); } + [] pt.receive(integer:?) -> value bad_int + { setverdict(fail, "Expected: ", t_pard_rec(t_int, t_cs).num, ", got: ", bad_int); } + } + alt { + [] pt.receive(t_pard_roi(c_init, c_mul)[1]) { setverdict(pass); } + [] pt.receive(integer:?) -> value bad_int + { setverdict(fail, "Expected: ", t_pard_roi(c_init, c_mul)[1], ", got: ", bad_int); } + } + alt { + [] pt.receive(t_pard_uni(t_os).os) { setverdict(pass); } + [] pt.receive(octetstring:?) -> value bad_os + { setverdict(fail, "Expected: ", t_pard_uni(t_os).os, ", got: ", bad_os); } + } + alt { + [] pt.receive(t_pard_arr(t_arr)[0]) { setverdict(pass); } + [] pt.receive(octetstring:?) -> value bad_os + { setverdict(fail, "Expected: ", t_pard_arr(t_arr)[0], ", got: ", bad_os); } + } + deactivate(def); +} + +testcase tc_pard_temp_complex() runs on CT +{ + var template Rec rec := { t_int, t_cs }; + var template RoI roi := { 1, 2, 3 }; + var template RoI roi_res := { t_pard_complex(rec, roi).rec.num, t_pard_complex(rec, roi).roi[2], + t_pard_complex(rec, roi).unis[1].i }; + var template RoI roi_res_e := { rec.num, roi[2], c_init }; + if (log2str(roi_res) == log2str(roi_res_e)) { setverdict(pass); } + else { setverdict(fail, "Expected: ", roi_res_e, ", got: ", roi_res); } + if (match('00'O, t_pard_complex(rec, {}).unis[0].os)) { setverdict(pass); } + else { setverdict(fail, "Expected '00'O to match ", t_pard_complex(rec, {}).unis[0].os); } + if (isvalue(t_pard_complex(t_pard_rec(t_int, t_cs), t_pard_roi(c_init, c_mul)).roi[2])) { setverdict(pass); } + else { setverdict(fail, "Expected ", t_pard_complex(t_pard_rec(t_int, t_cs), t_pard_roi(c_init, c_mul)).roi[2], " to be a value"); } +} + +/* * * * Control part * * * */ +control { + execute(tc_pard_temp_var_assign()); + execute(tc_pard_temp_match()); + execute(tc_pard_temp_value()); + execute(tc_pard_temp_structure()); + execute(tc_pard_temp_parameter()); + execute(tc_pard_temp_send_receive()); + execute(tc_pard_temp_complex()); +} + +} diff --git a/regression_test/functionSubref/config.cfg b/regression_test/functionSubref/config.cfg new file mode 100644 index 000000000..ee68ab69a --- /dev/null +++ b/regression_test/functionSubref/config.cfg @@ -0,0 +1,15 @@ +############################################################################### +# Copyright (c) 2000-2015 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 +############################################################################### +[MODULE_PARAMETERS] +[LOGGING] +Logfile := "functionSubref.log" +FileMask := LOG_ALL +ConsoleMask := TTCN_WARNING | TTCN_ERROR | TTCN_TESTCASE | TTCN_STATISTICS +[EXECUTE] +TfunctionSubref +TpardTemplateSubref diff --git a/regression_test/hexstrOper/Makefile b/regression_test/hexstrOper/Makefile index 8d800150a..bfa16ab56 100644 --- a/regression_test/hexstrOper/Makefile +++ b/regression_test/hexstrOper/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/hexstrOper/ThexstrOper.ttcn b/regression_test/hexstrOper/ThexstrOper.ttcn index 9503f6076..8f882fe69 100644 --- a/regression_test/hexstrOper/ThexstrOper.ttcn +++ b/regression_test/hexstrOper/ThexstrOper.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/hexstrOper/config.cfg b/regression_test/hexstrOper/config.cfg index 2bd98ead0..2634ae405 100644 --- a/regression_test/hexstrOper/config.cfg +++ b/regression_test/hexstrOper/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/iconv/Makefile b/regression_test/iconv/Makefile index 7efb02c6c..212309ce3 100644 --- a/regression_test/iconv/Makefile +++ b/regression_test/iconv/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/iconv/config.cfg b/regression_test/iconv/config.cfg index 746e0326f..1a18090c0 100644 --- a/regression_test/iconv/config.cfg +++ b/regression_test/iconv/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/iconv/converter.ttcn b/regression_test/iconv/converter.ttcn index b5f6d9d75..4e8ccc458 100644 --- a/regression_test/iconv/converter.ttcn +++ b/regression_test/iconv/converter.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/iconv/convertest.ttcn b/regression_test/iconv/convertest.ttcn index 7bc3328fd..dcb4fa2f3 100644 --- a/regression_test/iconv/convertest.ttcn +++ b/regression_test/iconv/convertest.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 @@ -69,9 +69,8 @@ testcase tc_o2u() runs on C errno := o2u("US-ASCII", input, output); if (errno != 0) { setverdict(fail, "conversion failed: ", errno); } - log(output); if (output == "31415") {setverdict(pass);} - else {setverdict(fail);} + else {setverdict(fail, "output is ", output);} { var universal charstring rez; errno := o2u("UTF-16LE", nagy_utf16le, rez); @@ -130,10 +129,9 @@ testcase tc_u2o() runs on C errno := u2o("UTF-8", input, output); if (errno != 0) { setverdict(fail, "conversion failed: ", errno); } - log(output); if (output == '323731383238'O) {setverdict(pass);} - else {setverdict(fail);} + else {setverdict(fail, "output is ", output);} /* var octetstring rez := u2o("UTF-16LE", nagy_arvizturo); diff --git a/regression_test/iconv/iconver.cc b/regression_test/iconv/iconver.cc index e53b818c0..689318d7f 100644 --- a/regression_test/iconv/iconver.cc +++ b/regression_test/iconv/iconver.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/implicitMsgEncoding/Makefile b/regression_test/implicitMsgEncoding/Makefile index cd5abe455..aaea797fd 100644 --- a/regression_test/implicitMsgEncoding/Makefile +++ b/regression_test/implicitMsgEncoding/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/implicitMsgEncoding/PCOType.cc b/regression_test/implicitMsgEncoding/PCOType.cc index 547dc68ea..75619d3a7 100644 --- a/regression_test/implicitMsgEncoding/PCOType.cc +++ b/regression_test/implicitMsgEncoding/PCOType.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/implicitMsgEncoding/PCOType.hh b/regression_test/implicitMsgEncoding/PCOType.hh index 8fb4c1b74..d80d5f4d1 100644 --- a/regression_test/implicitMsgEncoding/PCOType.hh +++ b/regression_test/implicitMsgEncoding/PCOType.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/implicitMsgEncoding/TimplicitEnc.ttcn b/regression_test/implicitMsgEncoding/TimplicitEnc.ttcn index 85efa8250..9ddb8a9e2 100644 --- a/regression_test/implicitMsgEncoding/TimplicitEnc.ttcn +++ b/regression_test/implicitMsgEncoding/TimplicitEnc.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/implicitMsgEncoding/config.cfg b/regression_test/implicitMsgEncoding/config.cfg index 7417a917a..120207417 100644 --- a/regression_test/implicitMsgEncoding/config.cfg +++ b/regression_test/implicitMsgEncoding/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/implicitOmit/Makefile b/regression_test/implicitOmit/Makefile index 4412748ba..a892b09fd 100644 --- a/regression_test/implicitOmit/Makefile +++ b/regression_test/implicitOmit/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/implicitOmit/config.cfg b/regression_test/implicitOmit/config.cfg index 294dda61f..d86e3a182 100644 --- a/regression_test/implicitOmit/config.cfg +++ b/regression_test/implicitOmit/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/implicitOmit/io.ttcn b/regression_test/implicitOmit/io.ttcn index e58a0616f..f326c6d11 100644 --- a/regression_test/implicitOmit/io.ttcn +++ b/regression_test/implicitOmit/io.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/intOper/Makefile b/regression_test/intOper/Makefile index 79ff67ddc..0f89c286d 100644 --- a/regression_test/intOper/Makefile +++ b/regression_test/intOper/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/intOper/PCOType.cc b/regression_test/intOper/PCOType.cc index 21692f0cc..19febd853 100644 --- a/regression_test/intOper/PCOType.cc +++ b/regression_test/intOper/PCOType.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/intOper/PCOType.hh b/regression_test/intOper/PCOType.hh index b65cb74bd..bbfa05fdc 100644 --- a/regression_test/intOper/PCOType.hh +++ b/regression_test/intOper/PCOType.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/intOper/TintOper.ttcn b/regression_test/intOper/TintOper.ttcn index 263b0ec75..0a212fedf 100644 --- a/regression_test/intOper/TintOper.ttcn +++ b/regression_test/intOper/TintOper.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 @@ -606,68 +606,68 @@ testcase bigIntLogicalOps() runs on bigIntOper_comptype { // Only Cond2/Cond4/Cond6/Cond7/Cond10/Cond11/Cond15/Cond17/Cond18 should // stay. Test for conditional operators and CP on big integers. - if (12345678910111213141516 < 0) { log("Cond1"); setverdict(fail) } // Removed by CP. - if (12345678910111213141516 > 0) { log("Cond2"); setverdict(pass) } - if (12345678910111213141516 == 0) { log("Cond3"); setverdict(fail) } // Removed by CP. - if (12345678910111213141516 != 0) { log("Cond4"); setverdict(pass) } - if (12345678910111213141516 <= 0) { log("Cond5"); setverdict(fail) } // Removed by CP. - if (12345678910111213141516 >= 0) { log("Cond6"); setverdict(pass) } - if (0 < 12345678910111213141516) { log("Cond7"); setverdict(pass) } - if (0 > 12345678910111213141516) { log("Cond8"); setverdict(fail) } // Removed by CP. - if (0 == 12345678910111213141516) { log("Cond9"); setverdict(fail) } // Removed by CP. - if (0 != 12345678910111213141516) { log("Cond10"); setverdict(pass) } - if (0 <= 12345678910111213141516) { log("Cond11"); setverdict(pass) } - if (0 >= 12345678910111213141516) { log("Cond12"); setverdict(fail) } // Removed by CP. - if (12345678910111213141516 < 12345678910111213141516) { log("Cond13"); setverdict(fail) } // Removed by CP. - if (12345678910111213141516 > 12345678910111213141516) { log("Cond14"); setverdict(fail) } // Removed by CP. - if (12345678910111213141516 == 12345678910111213141516) { log("Cond15"); setverdict(pass) } - if (12345678910111213141516 != 12345678910111213141516) { log("Cond16"); setverdict(fail) } // Removed by CP. - if (12345678910111213141516 <= 12345678910111213141516) { log("Cond17"); setverdict(pass) } - if (12345678910111213141516 >= 12345678910111213141516) { log("Cond18"); setverdict(pass) } + if (12345678910111213141516 < 0) { setverdict(fail) } // Removed by CP. + if (12345678910111213141516 > 0) { setverdict(pass) } + if (12345678910111213141516 == 0) { setverdict(fail) } // Removed by CP. + if (12345678910111213141516 != 0) { setverdict(pass) } + if (12345678910111213141516 <= 0) { setverdict(fail) } // Removed by CP. + if (12345678910111213141516 >= 0) { setverdict(pass) } + if (0 < 12345678910111213141516) { setverdict(pass) } + if (0 > 12345678910111213141516) { setverdict(fail) } // Removed by CP. + if (0 == 12345678910111213141516) { setverdict(fail) } // Removed by CP. + if (0 != 12345678910111213141516) { setverdict(pass) } + if (0 <= 12345678910111213141516) { setverdict(pass) } + if (0 >= 12345678910111213141516) { setverdict(fail) } // Removed by CP. + if (12345678910111213141516 < 12345678910111213141516) { setverdict(fail) } // Removed by CP. + if (12345678910111213141516 > 12345678910111213141516) { setverdict(fail) } // Removed by CP. + if (12345678910111213141516 == 12345678910111213141516) { setverdict(pass) } + if (12345678910111213141516 != 12345678910111213141516) { setverdict(fail) } // Removed by CP. + if (12345678910111213141516 <= 12345678910111213141516) { setverdict(pass) } + if (12345678910111213141516 >= 12345678910111213141516) { setverdict(pass) } } { // With a constant. Same as the previous. const integer i := 0, j := 12345678910111213141516 - if (j < i) { log("Cond19"); setverdict(fail) } // Removed by CP. - if (j > i) { log("Cond20"); setverdict(pass) } - if (j == i) { log("Cond21"); setverdict(fail) } // Removed by CP. - if (j != i) { log("Cond22"); setverdict(pass) } - if (j <= i) { log("Cond23"); setverdict(fail) } // Removed by CP. - if (j >= i) { log("Cond24"); setverdict(pass) } - if (i < j) { log("Cond25"); setverdict(pass) } - if (i > j) { log("Cond26"); setverdict(fail) } // Removed by CP. - if (i == j) { log("Cond27"); setverdict(fail) } // Removed by CP. - if (i != j) { log("Cond28"); setverdict(pass) } - if (i <= j) { log("Cond29"); setverdict(pass) } - if (i >= j) { log("Cond30"); setverdict(fail) } // Removed by CP. - if (j < j) { log("Cond31"); setverdict(fail) } // Removed by CP. - if (j > j) { log("Cond32"); setverdict(fail) } // Removed by CP. - if (j == j) { log("Cond33"); setverdict(pass) } - if (j != j) { log("Cond34"); setverdict(fail) } // Removed by CP. - if (j <= j) { log("Cond35"); setverdict(pass) } - if (j >= j) { log("Cond36"); setverdict(pass) } + if (j < i) { setverdict(fail) } // Removed by CP. + if (j > i) { setverdict(pass) } + if (j == i) { setverdict(fail) } // Removed by CP. + if (j != i) { setverdict(pass) } + if (j <= i) { setverdict(fail) } // Removed by CP. + if (j >= i) { setverdict(pass) } + if (i < j) { setverdict(pass) } + if (i > j) { setverdict(fail) } // Removed by CP. + if (i == j) { setverdict(fail) } // Removed by CP. + if (i != j) { setverdict(pass) } + if (i <= j) { setverdict(pass) } + if (i >= j) { setverdict(fail) } // Removed by CP. + if (j < j) { setverdict(fail) } // Removed by CP. + if (j > j) { setverdict(fail) } // Removed by CP. + if (j == j) { setverdict(pass) } + if (j != j) { setverdict(fail) } // Removed by CP. + if (j <= j) { setverdict(pass) } + if (j >= j) { setverdict(pass) } } { // With variable operands. No CP. var integer i := 0, j := 12345678910111213141516, result := 0 - if (12345678910111213141516 < i) { log("Cond37"); result := result + 1 } - if (12345678910111213141516 > i) { log("Cond38"); result := result + 1 } - if (12345678910111213141516 == i) { log("Cond39"); result := result + 1 } - if (12345678910111213141516 != i) { log("Cond40"); result := result + 1 } - if (12345678910111213141516 <= i) { log("Cond41"); result := result + 1 } - if (12345678910111213141516 >= i) { log("Cond42"); result := result + 1 } - if (i < 12345678910111213141516) { log("Cond43"); result := result + 1 } - if (i > 12345678910111213141516) { log("Cond44"); result := result + 1 } - if (i == 12345678910111213141516) { log("Cond45"); result := result + 1 } - if (i != 12345678910111213141516) { log("Cond46"); result := result + 1 } - if (i <= 12345678910111213141516) { log("Cond47"); result := result + 1 } - if (i >= 12345678910111213141516) { log("Cond48"); result := result + 1 } - if (12345678910111213141516 < j) { log("Cond49"); result := result + 1 } - if (j > 12345678910111213141516) { log("Cond50"); result := result + 1 } - if (12345678910111213141516 == j) { log("Cond51"); result := result + 1 } - if (j != 12345678910111213141516) { log("Cond52"); result := result + 1 } - if (12345678910111213141516 <= j) { log("Cond53"); result := result + 1 } - if (j >= 12345678910111213141516) { log("Cond54"); result := result + 1 } + if (12345678910111213141516 < i) { result := result + 1 } + if (12345678910111213141516 > i) { result := result + 1 } + if (12345678910111213141516 == i) { result := result + 1 } + if (12345678910111213141516 != i) { result := result + 1 } + if (12345678910111213141516 <= i) { result := result + 1 } + if (12345678910111213141516 >= i) { result := result + 1 } + if (i < 12345678910111213141516) { result := result + 1 } + if (i > 12345678910111213141516) { result := result + 1 } + if (i == 12345678910111213141516) { result := result + 1 } + if (i != 12345678910111213141516) { result := result + 1 } + if (i <= 12345678910111213141516) { result := result + 1 } + if (i >= 12345678910111213141516) { result := result + 1 } + if (12345678910111213141516 < j) { result := result + 1 } + if (j > 12345678910111213141516) { result := result + 1 } + if (12345678910111213141516 == j) { result := result + 1 } + if (j != 12345678910111213141516) { result := result + 1 } + if (12345678910111213141516 <= j) { result := result + 1 } + if (j >= 12345678910111213141516) { result := result + 1 } if (result == 9) { setverdict(pass) } // Number of branches executed. else { setverdict(fail) } } diff --git a/regression_test/intOper/config.cfg b/regression_test/intOper/config.cfg index 10f0baebb..e2e611256 100644 --- a/regression_test/intOper/config.cfg +++ b/regression_test/intOper/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ipv6/Makefile b/regression_test/ipv6/Makefile index 9efcac8fd..fd69ecec8 100644 --- a/regression_test/ipv6/Makefile +++ b/regression_test/ipv6/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ipv6/host_ipv6_global.cfg b/regression_test/ipv6/host_ipv6_global.cfg index 5e7a85dcf..74390e72d 100644 --- a/regression_test/ipv6/host_ipv6_global.cfg +++ b/regression_test/ipv6/host_ipv6_global.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ipv6/host_link_local.cfg b/regression_test/ipv6/host_link_local.cfg index 5d4d6da50..8574b40c3 100644 --- a/regression_test/ipv6/host_link_local.cfg +++ b/regression_test/ipv6/host_link_local.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ipv6/invalid_global_ipv6.cfg b/regression_test/ipv6/invalid_global_ipv6.cfg index 431e3b853..5a8a396f2 100644 --- a/regression_test/ipv6/invalid_global_ipv6.cfg +++ b/regression_test/ipv6/invalid_global_ipv6.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ipv6/invalid_global_ipv6_long.cfg b/regression_test/ipv6/invalid_global_ipv6_long.cfg index c365e6944..9d339aff3 100644 --- a/regression_test/ipv6/invalid_global_ipv6_long.cfg +++ b/regression_test/ipv6/invalid_global_ipv6_long.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ipv6/ip_create_on_host.cfg b/regression_test/ipv6/ip_create_on_host.cfg index f9cb14fd4..15d3665d6 100644 --- a/regression_test/ipv6/ip_create_on_host.cfg +++ b/regression_test/ipv6/ip_create_on_host.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ipv6/ipv6.ttcn b/regression_test/ipv6/ipv6.ttcn index 39f99715f..91591d09e 100644 --- a/regression_test/ipv6/ipv6.ttcn +++ b/regression_test/ipv6/ipv6.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/ipv6/ipv6_all_global.cfg b/regression_test/ipv6/ipv6_all_global.cfg index 9cabe2136..22733f362 100644 --- a/regression_test/ipv6/ipv6_all_global.cfg +++ b/regression_test/ipv6/ipv6_all_global.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ipv6/ipv6_long_short_global.cfg b/regression_test/ipv6/ipv6_long_short_global.cfg index 923c173fb..351d4b5f8 100644 --- a/regression_test/ipv6/ipv6_long_short_global.cfg +++ b/regression_test/ipv6/ipv6_long_short_global.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ipv6/ipv_hostname_macro.cfg b/regression_test/ipv6/ipv_hostname_macro.cfg index 9a11521ed..116246df4 100644 --- a/regression_test/ipv6/ipv_hostname_macro.cfg +++ b/regression_test/ipv6/ipv_hostname_macro.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ipv6/link_local_ipv6.cfg b/regression_test/ipv6/link_local_ipv6.cfg index a409e5d00..489166b3d 100644 --- a/regression_test/ipv6/link_local_ipv6.cfg +++ b/regression_test/ipv6/link_local_ipv6.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ipv6/localhost_create_on_host.cfg b/regression_test/ipv6/localhost_create_on_host.cfg index 9ecb4fe03..d2a356987 100644 --- a/regression_test/ipv6/localhost_create_on_host.cfg +++ b/regression_test/ipv6/localhost_create_on_host.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ipv6/localhost_ip_create_on_host.cfg b/regression_test/ipv6/localhost_ip_create_on_host.cfg index 780179d43..841731eec 100644 --- a/regression_test/ipv6/localhost_ip_create_on_host.cfg +++ b/regression_test/ipv6/localhost_ip_create_on_host.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ipv6/long_host_ipv6_global.cfg b/regression_test/ipv6/long_host_ipv6_global.cfg index 22768bfa3..be60cf1d6 100644 --- a/regression_test/ipv6/long_host_ipv6_global.cfg +++ b/regression_test/ipv6/long_host_ipv6_global.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ipv6/long_ipv6_global.cfg b/regression_test/ipv6/long_ipv6_global.cfg index fc3c98790..b3f25a8be 100644 --- a/regression_test/ipv6/long_ipv6_global.cfg +++ b/regression_test/ipv6/long_ipv6_global.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ipv6/no_full_syntax_check_link_local.cfg b/regression_test/ipv6/no_full_syntax_check_link_local.cfg index 98c29c110..e1cf94c4c 100644 --- a/regression_test/ipv6/no_full_syntax_check_link_local.cfg +++ b/regression_test/ipv6/no_full_syntax_check_link_local.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ipv6/no_full_syntax_check_link_local_long.cfg b/regression_test/ipv6/no_full_syntax_check_link_local_long.cfg index e2102eaf4..bcb52d6d9 100644 --- a/regression_test/ipv6/no_full_syntax_check_link_local_long.cfg +++ b/regression_test/ipv6/no_full_syntax_check_link_local_long.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ipv6/total_link_local.cfg b/regression_test/ipv6/total_link_local.cfg index 8baeef121..85992d3c9 100644 --- a/regression_test/ipv6/total_link_local.cfg +++ b/regression_test/ipv6/total_link_local.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ipv6/valid_global_ipv6.cfg b/regression_test/ipv6/valid_global_ipv6.cfg index ee0cf8d60..909dd955b 100644 --- a/regression_test/ipv6/valid_global_ipv6.cfg +++ b/regression_test/ipv6/valid_global_ipv6.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ispresent/IsPresent_Test.cfg b/regression_test/ispresent/IsPresent_Test.cfg index 34b7b274a..5236bf050 100644 --- a/regression_test/ispresent/IsPresent_Test.cfg +++ b/regression_test/ispresent/IsPresent_Test.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ispresent/IsPresent_Test.ttcn b/regression_test/ispresent/IsPresent_Test.ttcn index b89eb0ce5..999bc58b6 100644 --- a/regression_test/ispresent/IsPresent_Test.ttcn +++ b/regression_test/ispresent/IsPresent_Test.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 @@ -181,7 +181,6 @@ type record of MyRec2 MyRecOf }; function f_empty() runs on MTC_CT { - log("f_empty called"); } testcase tc_special_default_value_unbound() runs on MTC_CT { @@ -195,23 +194,19 @@ type record of MyRec2 MyRecOf } testcase tc_special_default_value_isvalue() runs on MTC_CT { var default vl_default := activate(as_empty()); - //log("default altstep after activate:", vl_default); if(ispresent(vl_default)){setverdict(pass)}else {setverdict(fail)}; deactivate(vl_default); - //log("default altstep after deactivate:", vl_default); if(ispresent(vl_default)){setverdict(pass)}else {setverdict(fail)}; } testcase tc_special_compref_unbound() runs on MTC_CT { var MTC_CT vc_myComp; - log("vc_myComp before create:", vc_myComp); if(ispresent(vc_myComp)){setverdict(fail)}else {setverdict(pass)}; } testcase tc_special_compref_isvalue() runs on MTC_CT { var MTC_CT vc_myComp:= MTC_CT.create("hali"); - log("vc_myComp after create:", vc_myComp); if(ispresent(vc_myComp)){setverdict(pass)}else {setverdict(fail)}; vc_myComp.start(f_empty()); @@ -238,7 +233,6 @@ type record of MyRec2 MyRecOf if(ispresent(vl_u.roi)){setverdict(fail)}else {setverdict(pass)} if(ispresent(vl_u.roi[0])){setverdict(fail)}else {setverdict(pass)} if(ispresent(vl_u.roi[1])){setverdict(fail)} else {setverdict(pass)} - log(vl_u.roc); } testcase tc_unionOfRecordOfs2() runs on MTC_CT { @@ -291,7 +285,6 @@ type record of MyRec2 MyRecOf if(ispresent(vl_u.roi)){setverdict(fail)} if(ispresent(vl_u.roi[0])){setverdict(fail)} if(ispresent(vl_u.roi[1])){setverdict(fail)} else {setverdict(pass)} - log(vl_u.roc); } //expected:error testcase tc_sideeffect1() runs on MTC_CT { @@ -314,7 +307,6 @@ type record of MyRec2 MyRecOf if(ispresent(vl_u.roc[4])) {setverdict(fail)}else {setverdict(pass)} vl_newsize:=sizeof(vl_u.roc); if(vl_newsize == vl_oldsize) {setverdict(pass)}else {setverdict(fail)} - //log(vl_u.i); } //====== DEEP 2-3 =============== @@ -464,7 +456,6 @@ type record of MyRec2 MyRecOf testcase tc_union_OneOption_WithWildcard() runs on MTC_CT { var template MyRec4 vtl_rec:=? if(ispresent(vtl_rec)){setverdict(pass)}else {setverdict(fail)}; - //log(vtl_rec.u); log("DTE is expected in the next line") if(ispresent(vtl_rec.u.i)){setverdict(fail)}; } @@ -667,7 +658,7 @@ type record of MyRec2 MyRecOf vtl_rec2:={ u := ? } - //log("The value of the record:",vtl_rec2.u); + if(ispresent(vtl_rec2.u.i)){setverdict(fail)}else{setverdict(pass)}; //pass } @@ -676,8 +667,7 @@ type record of MyRec2 MyRecOf vtl_rec2:={ u := ? } - //log("The value of the record:",vtl_rec2.u.i); <== This line would modify the verdict for "pass", see next testcase - log("The value of the record:",vtl_rec2.u); + if(ispresent(vtl_rec2.u.i)){setverdict(fail)}else{setverdict(pass)}; //pass } @@ -686,7 +676,6 @@ type record of MyRec2 MyRecOf vtl_rec2:={ u := ? } - log("The value of the record:",vtl_rec2.u.i); if(ispresent(vtl_rec2.u.i)){setverdict(fail)}else {setverdict(pass)}; //fail } diff --git a/regression_test/ispresent/Makefile b/regression_test/ispresent/Makefile index ec65b9dde..424445420 100644 --- a/regression_test/ispresent/Makefile +++ b/regression_test/ispresent/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/json/AttributeTestcases.ttcn b/regression_test/json/AttributeTestcases.ttcn index c5d6383f0..2c529e67f 100755 --- a/regression_test/json/AttributeTestcases.ttcn +++ b/regression_test/json/AttributeTestcases.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 @@ -181,8 +181,126 @@ testcase tc_attribute_default() runs on MTC { f_bool2verdict( match(f_dec_def(os), d) ); } +// Encoding a few values of ASN.1 types with the coding instruction "as value" +// Results are the same as with the TTCN-3 types +testcase tc_attribute_as_value_asn() runs on MTC { + var AsnStuff stuff := { { nval := NULL }, { ival := -10 }, { anyval := 'DCBA'O }, { vsval := "something" }, { pardval := { id := 0, priority := low, val := { iNTEGER := -10 } } } }; + var octetstring os := char2oct("[null,-10,\"DCBA\",\"something\",{\"id\":0,\"priority\":\"low\",\"val\":{\"iNTEGER\":-10}}]"); + f_check_encoding(encoded := f_enc_asn_stuff(stuff), expected := os); + f_bool2verdict( match(f_dec_asn_stuff(f_enc_asn_stuff(stuff)), stuff) ); +} + +// Encoding a record with 2 optional union fields encoded as JSON values (attribute 'as value') +// and as the 'null' value when omitted (attribute 'omit as null'). +// One of the unions ('uniAsn') can decode the JSON value 'null' (field 'nval'), thus omitting +// the union and setting this field have the same encoding, and decoding 'null' always sets the +// field instead of omitting the union. +// The other union ('uniTtcn') cannot decode the JSON value 'null', thus decoding 'null' omits +// the union. +testcase tc_attribute_optional_as_value() runs on MTC { + var OptionalUnions val1 := { dummy := "nothing", uniTtcn := omit, uniAsn := omit }; + var OptionalUnions val2 := { dummy := "nothing", uniTtcn := omit, uniAsn := { nval := NULL } }; + var octetstring os := char2oct("{\"dummy\":\"nothing\",\"uniTtcn\":null,\"uniAsn\":null}"); + f_check_encoding(encoded := f_enc_opt_uni(val1), expected := os); + f_check_encoding(encoded := f_enc_opt_uni(val2), expected := os); + f_bool2verdict( match(f_dec_opt_uni(os), val2) ); +} + +// Encoding records and sets with unbound fields with meta info (attribute 'metainfo for unbound') +// The unbound fields will have the 'null' value and an extra (meta info) field will be inserted +// into the JSON document (after the current field) to specify that the field is unbound. +testcase tc_attribute_metainfo_for_unbound() runs on MTC { + // regular encoding and decoding tests + var MetainfoRecord r := { num := 6 }; + var octetstring os := char2oct("{\"num\":6,\"str\":null,\"metainfo str\":\"unbound\"}"); + f_check_encoding(encoded := f_enc_meta_rec(r), expected := os); + f_bool2verdict( log2str(f_dec_meta_rec(os)) == log2str(r) ); + + var MetainfoSet s := { str := "abc" }; + os := char2oct("{\"int\":null,\"metainfo int\":\"unbound\",\"str\":\"abc\",\"octets\":null,\"metainfo octets\":\"unbound\"}"); + f_check_encoding(encoded := f_enc_meta_set(s), expected := os); + f_bool2verdict( log2str(f_dec_meta_set(os)) == log2str(s) ); + + // positive decoding tests (these cannot be produced by the encoder, but are still accepted by the decoder) + os := char2oct("{ \"int\" : 3, \"str\" : \"abc\", \"octets\" : \"1234\", \"metainfo int\" : \"unbound\" }"); + var MetainfoSet res := { str := "abc", octets := '1234'O }; + f_bool2verdict( log2str(f_dec_meta_set(os)) == log2str(res) ); + + os := char2oct("{ \"metainfo int\" : \"unbound\", \"int\" : null, \"str\" : \"abc\", \"octets\" : \"1234\" }"); + f_bool2verdict( log2str(f_dec_meta_set(os)) == log2str(res) ); // same expected result +} -//set +// Negative tests for decoding with the unbound meta info attribute +testcase tc_attribute_metainfo_for_unbound_negtest() runs on MTC { + var octetstring os := char2oct("{ \"metainfo num\" : \"unbound\", \"num\" : 6, \"str\" : \"qwe\" }"); + var MetainfoRecord dummyRec; + @try { + dummyRec := f_dec_meta_rec(os); + setverdict(fail, "Expected error when decoding ", os); + } + @catch (msg) { + if (not match (msg, pattern "*Meta info not applicable to field 'num'")) { + setverdict(fail, "Unexpected error message when decoding ", os, " (msg: ", msg, ")"); + } + } + + os := char2oct("{ \"metainfo dummy\" : \"unbound\", \"num\" : 6, \"str\" : \"qwe\" }"); + @try { + dummyRec := f_dec_meta_rec(os); + setverdict(fail, "Expected error when decoding ", os); + } + @catch (msg) { + if (not match (msg, pattern "*Meta info provided for non-existent field 'dummy'")) { + setverdict(fail, "Unexpected error message when decoding ", os, " (msg: ", msg, ")"); + } + } + + os := char2oct("{ \"int\" : 3, \"str\" : \"abc\", \"octets\" : \"1234\", \"metainfo int\" : \"bound\" }"); + var MetainfoSet dummySet; + @try { + dummySet := f_dec_meta_set(os); + setverdict(fail, "Expected error when decoding ", os); + } + @catch (msg) { + if (not match (msg, pattern "*Invalid meta info for field 'num'")) { + setverdict(fail, "Unexpected error message when decoding ", os, " (msg: ", msg, ")"); + } + } + + os := char2oct("{ \"int\" : 3, \"str\" : \"abc\", \"octets\" : \"1234\", \"metainfo int\" : 88 }"); + @try { + dummySet := f_dec_meta_set(os); + setverdict(fail, "Expected error when decoding ", os); + } + @catch (msg) { + if (not match (msg, pattern "*Invalid meta info for field 'num'")) { + setverdict(fail, "Unexpected error message when decoding ", os, " (msg: ", msg, ")"); + } + } + + os := char2oct("{ \"int\" : null, \"str\" : \"abc\", \"octets\" : \"1234\" }"); + @try { + dummySet := f_dec_meta_set(os); + setverdict(fail, "Expected error when decoding ", os); + } + @catch (msg) { + if (not match (msg, pattern "*Invalid JSON token found while decoding field 'num'")) { + setverdict(fail, "Unexpected error message when decoding ", os, " (msg: ", msg, ")"); + } + } + + os := char2oct("{ \"metainfo int\" : \"unbound\", \"int\" : [ 1, 3 ], \"str\" : \"abc\", \"octets\" : \"1234\" }"); + @try { + dummySet := f_dec_meta_set(os); + setverdict(fail, "Expected error when decoding ", os); + } + @catch (msg) { + if (not match (msg, pattern "*Invalid JSON token found while decoding field 'num'")) { + setverdict(fail, "Unexpected error message when decoding ", os, " (msg: ", msg, ")"); + } + } + setverdict(pass); +} control { @@ -197,5 +315,9 @@ control { execute(tc_attribute_union()); execute(tc_attribute_as_value()); //execute(tc_attribute_default()); + execute(tc_attribute_as_value_asn()); + execute(tc_attribute_optional_as_value()); + execute(tc_attribute_metainfo_for_unbound()); + execute(tc_attribute_metainfo_for_unbound_negtest()); } } diff --git a/regression_test/json/Functions.ttcn b/regression_test/json/Functions.ttcn index 6064b6269..912df569b 100755 --- a/regression_test/json/Functions.ttcn +++ b/regression_test/json/Functions.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 @@ -62,7 +62,6 @@ external function f_enc_A(in A u) return octetstring external function f_enc_ER(in EmptyRec u) return octetstring with { extension "prototype(convert)"; extension "encode(JSON)"; } - external function f_enc_roi(in RoI u) return octetstring with { extension "prototype(convert)"; extension "encode(JSON)"; } @@ -105,6 +104,18 @@ external function f_enc_stuff(in Stuff x) return octetstring external function f_enc_hpt(in HasPardType x) return octetstring with { extension "prototype(convert) encode(JSON)" } +external function f_enc_asn_stuff(in AsnStuff x) return octetstring + with { extension "prototype(convert) encode(JSON)" } + +external function f_enc_opt_uni(in OptionalUnions x) return octetstring + with { extension "prototype(convert) encode(JSON)" } + +external function f_enc_meta_rec(in MetainfoRecord x) return octetstring + with { extension "prototype(convert) encode(JSON)" } + +external function f_enc_meta_set(in MetainfoSet x) return octetstring + with { extension "prototype(convert) encode(JSON)" } + // for ASN.1 types external function f_enc_seqofint(in SeqOfInt x) return octetstring with { extension "prototype(convert) encode(JSON)" } @@ -211,6 +222,18 @@ external function f_dec_def(in octetstring x) return RecDef external function f_dec_hpt(in octetstring x) return HasPardType with { extension "prototype(convert) decode(JSON)" } +external function f_dec_asn_stuff(in octetstring x) return AsnStuff + with { extension "prototype(convert) decode(JSON)" } + +external function f_dec_opt_uni(in octetstring x) return OptionalUnions + with { extension "prototype(convert) decode(JSON)" } + +external function f_dec_meta_rec(in octetstring x) return MetainfoRecord + with { extension "prototype(convert) decode(JSON)" } + +external function f_dec_meta_set(in octetstring x) return MetainfoSet + with { extension "prototype(convert) decode(JSON)" } + // for ASN.1 types external function f_dec_seqofint(in octetstring x) return SeqOfInt with { extension "prototype(convert) decode(JSON)" } diff --git a/regression_test/json/JSON.cfg b/regression_test/json/JSON.cfg index ab0d13edc..a64455aa2 100755 --- a/regression_test/json/JSON.cfg +++ b/regression_test/json/JSON.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/json/JsonData.asn b/regression_test/json/JsonData.asn index 962186e5f..212017686 100644 --- a/regression_test/json/JsonData.asn +++ b/regression_test/json/JsonData.asn @@ -1,5 +1,5 @@ --***************************************************************************** --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 @@ -138,6 +138,12 @@ HasNull ::= SEQUENCE theNull NULL OPTIONAL } +-- Renaming basic ASN.1 types for use in TTCN-3 +AsnNull ::= NULL +AsnInt ::= INTEGER +AsnVisibleString ::= VisibleString +AsnAny ::= ANY + -- Values and their encoding -- ------------------------------- diff --git a/regression_test/json/Makefile b/regression_test/json/Makefile index 33a75adec..091d8653d 100755 --- a/regression_test/json/Makefile +++ b/regression_test/json/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/json/SemanticCheck.ttcn b/regression_test/json/SemanticCheck.ttcn index 271074d98..9ecb78df3 100644 --- a/regression_test/json/SemanticCheck.ttcn +++ b/regression_test/json/SemanticCheck.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/json/Testcases.ttcn b/regression_test/json/Testcases.ttcn index e452ecc24..f72993ec8 100755 --- a/regression_test/json/Testcases.ttcn +++ b/regression_test/json/Testcases.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/json/Types.ttcn b/regression_test/json/Types.ttcn index 21eef2829..b3ed9a21a 100755 --- a/regression_test/json/Types.ttcn +++ b/regression_test/json/Types.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 @@ -164,6 +164,45 @@ type record HasPardType { Price price } +type union AsnThing { + AsnNull nval, + AsnInt ival, + AsnAny anyval, + AsnVisibleString vsval, + ProtocolElem_Field1 pardval +} with { + variant "JSON: as value"; +} + +type record of AsnThing AsnStuff; + +type record OptionalUnions { + charstring dummy, + Thing uniTtcn optional, + AsnThing uniAsn optional +} with { + variant(uniTtcn) "JSON: omit as null"; + variant(uniAsn) " JSON: omit as null "; +} + +type record MetainfoRecord { + integer num, + charstring str +} +with { + variant(str) "JSON: metainfo for unbound"; +} + +type set MetainfoSet { + integer num, + charstring str, + octetstring octets optional +} +with { + variant " JSON : metainfo for unbound "; + variant (num) " JSON : name as int "; +} + } with { encode "JSON"; } diff --git a/regression_test/junitlogger/Makefile b/regression_test/junitlogger/Makefile index 9a271bcbc..151ec63e9 100644 --- a/regression_test/junitlogger/Makefile +++ b/regression_test/junitlogger/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/junitlogger/main1.cfg b/regression_test/junitlogger/main1.cfg index 0b79d8a46..d8ae97e0f 100644 --- a/regression_test/junitlogger/main1.cfg +++ b/regression_test/junitlogger/main1.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/junitlogger/main1.ttcn b/regression_test/junitlogger/main1.ttcn index 3a41eb785..be9dbea75 100644 --- a/regression_test/junitlogger/main1.ttcn +++ b/regression_test/junitlogger/main1.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/junitlogger/test_junitlog.pl b/regression_test/junitlogger/test_junitlog.pl index 26035b999..835139938 100755 --- a/regression_test/junitlogger/test_junitlog.pl +++ b/regression_test/junitlogger/test_junitlog.pl @@ -1,6 +1,6 @@ #!/usr/bin/perl ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/junitlogger/test_junitlog.sh b/regression_test/junitlogger/test_junitlog.sh index ebe783d23..909d8217c 100755 --- a/regression_test/junitlogger/test_junitlog.sh +++ b/regression_test/junitlogger/test_junitlog.sh @@ -1,6 +1,6 @@ #!/bin/bash ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/lazyEval/LazyASNTypes.asn b/regression_test/lazyEval/LazyASNTypes.asn index f81464aa3..aa4aff468 100644 --- a/regression_test/lazyEval/LazyASNTypes.asn +++ b/regression_test/lazyEval/LazyASNTypes.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/lazyEval/Makefile b/regression_test/lazyEval/Makefile index df2df37eb..5a4e5cee3 100644 --- a/regression_test/lazyEval/Makefile +++ b/regression_test/lazyEval/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 @@ -22,6 +22,11 @@ RUNNABLE := $(TTCN_FILE:.ttcn=) #RUNNABLE += .exe #endif +COVERAGE_FLAG := +ifeq ($(COVERAGE), yes) + COVERAGE_FLAG += -C +endif + DIR_SINGLE := dir_single_mode DIR_PARALLEL := dir_parallel_mode GENERATED_DIRS := $(DIR_SINGLE) $(DIR_PARALLEL) @@ -34,12 +39,12 @@ all: $(GENERATED_DIRS) $(DIR_SINGLE): mkdir $@ cd $@ && for file in $(FILES); do ln -s ../$$file || exit; done - cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen -s -e $(RUNNABLE) ./* && $(MAKE_PROG) + cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen $(COVERAGE_FLAG) -s -e $(RUNNABLE) ./* && $(MAKE_PROG) $(DIR_PARALLEL): mkdir $@ cd $@ && for file in $(FILES); do ln -s ../$$file || exit; done - cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen -e $(RUNNABLE) ./* && $(MAKE_PROG) + cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen $(COVERAGE_FLAG) -e $(RUNNABLE) ./* && $(MAKE_PROG) run: $(GENERATED_DIRS) cd $(DIR_SINGLE) && ./$(RUNNABLE) $(CFG) && grep "Overall verdict: pass" *.log diff --git a/regression_test/lazyEval/lazy.cfg b/regression_test/lazyEval/lazy.cfg index 709057a59..9eecaf8d9 100644 --- a/regression_test/lazyEval/lazy.cfg +++ b/regression_test/lazyEval/lazy.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/lazyEval/lazy_A.ttcn b/regression_test/lazyEval/lazy_A.ttcn index a84a5328b..847f864c0 100644 --- a/regression_test/lazyEval/lazy_A.ttcn +++ b/regression_test/lazyEval/lazy_A.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/lazyEval/lazy_B.ttcn b/regression_test/lazyEval/lazy_B.ttcn index 727c0d38b..19eaad6b2 100644 --- a/regression_test/lazyEval/lazy_B.ttcn +++ b/regression_test/lazyEval/lazy_B.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/lazyEval/lazy_defs.ttcn b/regression_test/lazyEval/lazy_defs.ttcn index 883608446..42ed59607 100644 --- a/regression_test/lazyEval/lazy_defs.ttcn +++ b/regression_test/lazyEval/lazy_defs.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/lazyEval/lazy_main.ttcn b/regression_test/lazyEval/lazy_main.ttcn index 01c3b3b44..dca97ad1d 100644 --- a/regression_test/lazyEval/lazy_main.ttcn +++ b/regression_test/lazyEval/lazy_main.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/logFiles/CommonStuff.ttcn b/regression_test/logFiles/CommonStuff.ttcn index 887d4f587..1fe9152e5 100644 --- a/regression_test/logFiles/CommonStuff.ttcn +++ b/regression_test/logFiles/CommonStuff.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/logFiles/LogFiles.cfg b/regression_test/logFiles/LogFiles.cfg index e98003300..6e18e7033 100755 --- a/regression_test/logFiles/LogFiles.cfg +++ b/regression_test/logFiles/LogFiles.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logFiles/LogFiles.ttcn b/regression_test/logFiles/LogFiles.ttcn index 0ca33cdd2..cec8c5944 100755 --- a/regression_test/logFiles/LogFiles.ttcn +++ b/regression_test/logFiles/LogFiles.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/logFiles/LogFiles2.cfg b/regression_test/logFiles/LogFiles2.cfg index ba22061e9..a6f2096ff 100755 --- a/regression_test/logFiles/LogFiles2.cfg +++ b/regression_test/logFiles/LogFiles2.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logFiles/LogFilesInc.cfg b/regression_test/logFiles/LogFilesInc.cfg index aedaa0158..e4b62b6fa 100755 --- a/regression_test/logFiles/LogFilesInc.cfg +++ b/regression_test/logFiles/LogFilesInc.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logFiles/LogFilesProc.cfg b/regression_test/logFiles/LogFilesProc.cfg index 2fc24e79f..2cbbb8351 100755 --- a/regression_test/logFiles/LogFilesProc.cfg +++ b/regression_test/logFiles/LogFilesProc.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logFiles/Makefile b/regression_test/logFiles/Makefile index a036f9bfe..f654dfdda 100755 --- a/regression_test/logFiles/Makefile +++ b/regression_test/logFiles/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 @@ -70,6 +70,7 @@ dep: $(GENERATED_SOURCES) makedepend $(CPPFLAGS) $(GENERATED_SOURCES) extfunc.cc run: $(TARGET) + ./logfilter.sh $(TTCN3_DIR)/bin/ttcn3_start $(TARGET) LogFiles.cfg $(TTCN3_DIR)/bin/ttcn3_start $(TARGET) LogFiles2.cfg $(TTCN3_DIR)/bin/ttcn3_start $(TARGET) LogFilesProc.cfg diff --git a/regression_test/logFiles/TitanLogTest.cfg b/regression_test/logFiles/TitanLogTest.cfg index 70ad6ab45..c440a77bf 100644 --- a/regression_test/logFiles/TitanLogTest.cfg +++ b/regression_test/logFiles/TitanLogTest.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logFiles/TitanLogTest.ttcn b/regression_test/logFiles/TitanLogTest.ttcn index e0ba12848..91a5955e5 100644 --- a/regression_test/logFiles/TitanLogTest.ttcn +++ b/regression_test/logFiles/TitanLogTest.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/logFiles/extfunc.cc b/regression_test/logFiles/extfunc.cc index b54148742..339cf7d58 100755 --- a/regression_test/logFiles/extfunc.cc +++ b/regression_test/logFiles/extfunc.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/logFiles/filtered_e.log2 b/regression_test/logFiles/filtered_e.log2 new file mode 100644 index 000000000..cc834ae62 --- /dev/null +++ b/regression_test/logFiles/filtered_e.log2 @@ -0,0 +1,2 @@ +2015/Sep/07 06:45:07.380293 MATCHING - TTCN Logger v2.2 options: TimeStampFormat:=DateTime; LogEntityName:=Yes; LogEventTypes:=Yes; SourceInfoFormat:=Stack; *.FileMask:=LOG_ALL DEBUG; *.ConsoleMask:=ACTION | MATCHING | DEBUG_UNQUALIFIED; LogFileSize:=0; LogFileNumber:=1; DiskFullAction:=Error +10:57:32.676034 PARALLEL Component type MyExample.MTCType was initialized. diff --git a/regression_test/logFiles/lfilter.log2 b/regression_test/logFiles/lfilter.log2 new file mode 100644 index 000000000..e5cf64d15 --- /dev/null +++ b/regression_test/logFiles/lfilter.log2 @@ -0,0 +1,4 @@ +2015/Sep/07 06:45:07.380293 EXECUTOR - TTCN Logger v2.2 options: TimeStampFormat:=DateTime; LogEntityName:=Yes; LogEventTypes:=Yes; SourceInfoFormat:=Stack; *.FileMask:=LOG_ALL | MATCHING | DEBUG; *.ConsoleMask:=ACTION | MATCHING | PARALLEL | DEBUG_UNQUALIFIED; LogFileSize:=0; LogFileNumber:=1; DiskFullAction:=Error +2015/Sep/07 06:45:07.380293 MATCHING - TTCN Logger v2.2 options: TimeStampFormat:=DateTime; LogEntityName:=Yes; LogEventTypes:=Yes; SourceInfoFormat:=Stack; *.FileMask:=LOG_ALL DEBUG; *.ConsoleMask:=ACTION | MATCHING | DEBUG_UNQUALIFIED; LogFileSize:=0; LogFileNumber:=1; DiskFullAction:=Error +10:57:32.676016 PORTEVENT Port MyPCO was started. +10:57:32.676034 PARALLEL Component type MyExample.MTCType was initialized. diff --git a/regression_test/logFiles/logFiles_doc.script b/regression_test/logFiles/logFiles_doc.script index f092054e9..71d8e1e02 100755 --- a/regression_test/logFiles/logFiles_doc.script +++ b/regression_test/logFiles/logFiles_doc.script @@ -1,5 +1,5 @@ .****************************************************************************** -.* Copyright (c) 2000-2014 Ericsson Telecom AB +.* Copyright (c) 2000-2015 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 diff --git a/regression_test/logFiles/logfilter.sh b/regression_test/logFiles/logfilter.sh new file mode 100755 index 000000000..33e571a98 --- /dev/null +++ b/regression_test/logFiles/logfilter.sh @@ -0,0 +1,22 @@ +#!/bin/bash +############################################################################### +# Copyright (c) 2000-2015 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 +############################################################################### + +LOGFILE="lfilter.log2" +FILTERED_LOG_FILE="filtered.log" +EXPECTED_LOG_FILE="filtered_e.log2" + +ttcn3_logfilter -o $FILTERED_LOG_FILE $LOGFILE MATCHING+ PARALLEL+ +diff $FILTERED_LOG_FILE $EXPECTED_LOG_FILE +if [ $? -ne 0 ]; then + echo "Logfilter test failed! Overall verdict: fail" + exit 1 +else + echo "Logfilter test valid! Overall verdict: pass" + exit 0 +fi diff --git a/regression_test/logger/Makefile b/regression_test/logger/Makefile index 0b7520664..95f6d4f20 100644 --- a/regression_test/logger/Makefile +++ b/regression_test/logger/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/emergency_logging/Console_N.txt b/regression_test/logger/emergency_logging/Console_N.txt index 836785c58..aa7d8883f 100644 --- a/regression_test/logger/emergency_logging/Console_N.txt +++ b/regression_test/logger/emergency_logging/Console_N.txt @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/emergency_logging/Console_O.txt b/regression_test/logger/emergency_logging/Console_O.txt index df9240138..39448dce5 100644 --- a/regression_test/logger/emergency_logging/Console_O.txt +++ b/regression_test/logger/emergency_logging/Console_O.txt @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/emergency_logging/EL_BufferAll_1.cfg b/regression_test/logger/emergency_logging/EL_BufferAll_1.cfg index d14d588fa..d77b7c0ca 100644 --- a/regression_test/logger/emergency_logging/EL_BufferAll_1.cfg +++ b/regression_test/logger/emergency_logging/EL_BufferAll_1.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/emergency_logging/EL_BufferAll_10.cfg b/regression_test/logger/emergency_logging/EL_BufferAll_10.cfg index 167c74785..53b75b7b1 100644 --- a/regression_test/logger/emergency_logging/EL_BufferAll_10.cfg +++ b/regression_test/logger/emergency_logging/EL_BufferAll_10.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/emergency_logging/EL_BufferAll_11.cfg b/regression_test/logger/emergency_logging/EL_BufferAll_11.cfg index 8badf6c3c..cf11add7b 100644 --- a/regression_test/logger/emergency_logging/EL_BufferAll_11.cfg +++ b/regression_test/logger/emergency_logging/EL_BufferAll_11.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/emergency_logging/EL_BufferAll_12.cfg b/regression_test/logger/emergency_logging/EL_BufferAll_12.cfg index d84d42ed8..76da758dd 100644 --- a/regression_test/logger/emergency_logging/EL_BufferAll_12.cfg +++ b/regression_test/logger/emergency_logging/EL_BufferAll_12.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/emergency_logging/EL_BufferAll_13.cfg b/regression_test/logger/emergency_logging/EL_BufferAll_13.cfg index c718a663e..13c3ef725 100644 --- a/regression_test/logger/emergency_logging/EL_BufferAll_13.cfg +++ b/regression_test/logger/emergency_logging/EL_BufferAll_13.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/emergency_logging/EL_BufferAll_1_NOEL.cfg b/regression_test/logger/emergency_logging/EL_BufferAll_1_NOEL.cfg index 9fda012ac..377b51ee3 100644 --- a/regression_test/logger/emergency_logging/EL_BufferAll_1_NOEL.cfg +++ b/regression_test/logger/emergency_logging/EL_BufferAll_1_NOEL.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/emergency_logging/EL_BufferAll_2.cfg b/regression_test/logger/emergency_logging/EL_BufferAll_2.cfg index ca7deeeb6..523231bff 100644 --- a/regression_test/logger/emergency_logging/EL_BufferAll_2.cfg +++ b/regression_test/logger/emergency_logging/EL_BufferAll_2.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/emergency_logging/EL_BufferAll_3.cfg b/regression_test/logger/emergency_logging/EL_BufferAll_3.cfg index a01504f7a..30ce99982 100644 --- a/regression_test/logger/emergency_logging/EL_BufferAll_3.cfg +++ b/regression_test/logger/emergency_logging/EL_BufferAll_3.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/emergency_logging/EL_BufferAll_3_NOEL.cfg b/regression_test/logger/emergency_logging/EL_BufferAll_3_NOEL.cfg index 1b3c2658d..8a922c397 100644 --- a/regression_test/logger/emergency_logging/EL_BufferAll_3_NOEL.cfg +++ b/regression_test/logger/emergency_logging/EL_BufferAll_3_NOEL.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/emergency_logging/EL_BufferAll_4.cfg b/regression_test/logger/emergency_logging/EL_BufferAll_4.cfg index 5ac2021b2..6901f0313 100644 --- a/regression_test/logger/emergency_logging/EL_BufferAll_4.cfg +++ b/regression_test/logger/emergency_logging/EL_BufferAll_4.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/emergency_logging/EL_BufferAll_5.cfg b/regression_test/logger/emergency_logging/EL_BufferAll_5.cfg index d3429452f..ecdee716d 100644 --- a/regression_test/logger/emergency_logging/EL_BufferAll_5.cfg +++ b/regression_test/logger/emergency_logging/EL_BufferAll_5.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/emergency_logging/EL_BufferAll_6.cfg b/regression_test/logger/emergency_logging/EL_BufferAll_6.cfg index 895da4a91..aed0471ad 100644 --- a/regression_test/logger/emergency_logging/EL_BufferAll_6.cfg +++ b/regression_test/logger/emergency_logging/EL_BufferAll_6.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/emergency_logging/EL_BufferAll_7.cfg b/regression_test/logger/emergency_logging/EL_BufferAll_7.cfg index 5a752c41f..8447b6ee1 100644 --- a/regression_test/logger/emergency_logging/EL_BufferAll_7.cfg +++ b/regression_test/logger/emergency_logging/EL_BufferAll_7.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/emergency_logging/EL_BufferAll_7A.cfg b/regression_test/logger/emergency_logging/EL_BufferAll_7A.cfg index 312ae6d75..2085bbb2b 100644 --- a/regression_test/logger/emergency_logging/EL_BufferAll_7A.cfg +++ b/regression_test/logger/emergency_logging/EL_BufferAll_7A.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/emergency_logging/EL_BufferAll_8.cfg b/regression_test/logger/emergency_logging/EL_BufferAll_8.cfg index cb85e0417..e812348a8 100644 --- a/regression_test/logger/emergency_logging/EL_BufferAll_8.cfg +++ b/regression_test/logger/emergency_logging/EL_BufferAll_8.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/emergency_logging/EL_BufferAll_9.cfg b/regression_test/logger/emergency_logging/EL_BufferAll_9.cfg index 0050e4e5f..656b18d50 100644 --- a/regression_test/logger/emergency_logging/EL_BufferAll_9.cfg +++ b/regression_test/logger/emergency_logging/EL_BufferAll_9.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/emergency_logging/EL_BufferMasked_1.cfg b/regression_test/logger/emergency_logging/EL_BufferMasked_1.cfg index f062927a1..72391ee58 100644 --- a/regression_test/logger/emergency_logging/EL_BufferMasked_1.cfg +++ b/regression_test/logger/emergency_logging/EL_BufferMasked_1.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/emergency_logging/EL_BufferMasked_10.cfg b/regression_test/logger/emergency_logging/EL_BufferMasked_10.cfg index f24f34d28..871198691 100644 --- a/regression_test/logger/emergency_logging/EL_BufferMasked_10.cfg +++ b/regression_test/logger/emergency_logging/EL_BufferMasked_10.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/emergency_logging/EL_BufferMasked_11.cfg b/regression_test/logger/emergency_logging/EL_BufferMasked_11.cfg index 2372d4aa8..60c7356e8 100644 --- a/regression_test/logger/emergency_logging/EL_BufferMasked_11.cfg +++ b/regression_test/logger/emergency_logging/EL_BufferMasked_11.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/emergency_logging/EL_BufferMasked_12.cfg b/regression_test/logger/emergency_logging/EL_BufferMasked_12.cfg index dd7053f58..77e857b69 100644 --- a/regression_test/logger/emergency_logging/EL_BufferMasked_12.cfg +++ b/regression_test/logger/emergency_logging/EL_BufferMasked_12.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/emergency_logging/EL_BufferMasked_13.cfg b/regression_test/logger/emergency_logging/EL_BufferMasked_13.cfg index 8a1edab2e..9c2037568 100644 --- a/regression_test/logger/emergency_logging/EL_BufferMasked_13.cfg +++ b/regression_test/logger/emergency_logging/EL_BufferMasked_13.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/emergency_logging/EL_BufferMasked_2.cfg b/regression_test/logger/emergency_logging/EL_BufferMasked_2.cfg index 7bb9fd5f6..48d287937 100644 --- a/regression_test/logger/emergency_logging/EL_BufferMasked_2.cfg +++ b/regression_test/logger/emergency_logging/EL_BufferMasked_2.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/emergency_logging/EL_BufferMasked_3.cfg b/regression_test/logger/emergency_logging/EL_BufferMasked_3.cfg index 015381c96..739645074 100644 --- a/regression_test/logger/emergency_logging/EL_BufferMasked_3.cfg +++ b/regression_test/logger/emergency_logging/EL_BufferMasked_3.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/emergency_logging/EL_BufferMasked_4.cfg b/regression_test/logger/emergency_logging/EL_BufferMasked_4.cfg index 69ca01870..ea377f414 100644 --- a/regression_test/logger/emergency_logging/EL_BufferMasked_4.cfg +++ b/regression_test/logger/emergency_logging/EL_BufferMasked_4.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/emergency_logging/EL_BufferMasked_5.cfg b/regression_test/logger/emergency_logging/EL_BufferMasked_5.cfg index 00a12eaf5..616eb49b6 100644 --- a/regression_test/logger/emergency_logging/EL_BufferMasked_5.cfg +++ b/regression_test/logger/emergency_logging/EL_BufferMasked_5.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/emergency_logging/EL_BufferMasked_6.cfg b/regression_test/logger/emergency_logging/EL_BufferMasked_6.cfg index 923eded3a..bd07fde5e 100644 --- a/regression_test/logger/emergency_logging/EL_BufferMasked_6.cfg +++ b/regression_test/logger/emergency_logging/EL_BufferMasked_6.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/emergency_logging/EL_BufferMasked_7.cfg b/regression_test/logger/emergency_logging/EL_BufferMasked_7.cfg index 1bf975e67..e3c6d591d 100644 --- a/regression_test/logger/emergency_logging/EL_BufferMasked_7.cfg +++ b/regression_test/logger/emergency_logging/EL_BufferMasked_7.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/emergency_logging/EL_BufferMasked_8.cfg b/regression_test/logger/emergency_logging/EL_BufferMasked_8.cfg index 9af4cfacb..5ce85d0e1 100644 --- a/regression_test/logger/emergency_logging/EL_BufferMasked_8.cfg +++ b/regression_test/logger/emergency_logging/EL_BufferMasked_8.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/emergency_logging/EL_BufferMasked_9.cfg b/regression_test/logger/emergency_logging/EL_BufferMasked_9.cfg index 30b711589..a84c7b596 100644 --- a/regression_test/logger/emergency_logging/EL_BufferMasked_9.cfg +++ b/regression_test/logger/emergency_logging/EL_BufferMasked_9.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/emergency_logging/EmergencyLogTest.sh b/regression_test/logger/emergency_logging/EmergencyLogTest.sh index b58613ef8..8790539a2 100755 --- a/regression_test/logger/emergency_logging/EmergencyLogTest.sh +++ b/regression_test/logger/emergency_logging/EmergencyLogTest.sh @@ -1,6 +1,6 @@ #!/bin/bash ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/emergency_logging/EmergencyLoggingTest.ttcn b/regression_test/logger/emergency_logging/EmergencyLoggingTest.ttcn index af80b65da..9833be9e2 100644 --- a/regression_test/logger/emergency_logging/EmergencyLoggingTest.ttcn +++ b/regression_test/logger/emergency_logging/EmergencyLoggingTest.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/emergency_logging/EmergencyLoggingTest_BuffMasked.cfg b/regression_test/logger/emergency_logging/EmergencyLoggingTest_BuffMasked.cfg index 3e6fac24d..aab553400 100644 --- a/regression_test/logger/emergency_logging/EmergencyLoggingTest_BuffMasked.cfg +++ b/regression_test/logger/emergency_logging/EmergencyLoggingTest_BuffMasked.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/emergency_logging/Makefile b/regression_test/logger/emergency_logging/Makefile index dae38e7ff..a68143973 100644 --- a/regression_test/logger/emergency_logging/Makefile +++ b/regression_test/logger/emergency_logging/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/emergency_logging/PCO_PT.cc b/regression_test/logger/emergency_logging/PCO_PT.cc index b4bf5dbd7..99c6abb86 100644 --- a/regression_test/logger/emergency_logging/PCO_PT.cc +++ b/regression_test/logger/emergency_logging/PCO_PT.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/emergency_logging/PCO_PT.hh b/regression_test/logger/emergency_logging/PCO_PT.hh index b7b09cf02..f8f88919f 100644 --- a/regression_test/logger/emergency_logging/PCO_PT.hh +++ b/regression_test/logger/emergency_logging/PCO_PT.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/emergency_logging/Titan_LogTest.ttcn b/regression_test/logger/emergency_logging/Titan_LogTest.ttcn index 5d37d57b5..7e01af493 100644 --- a/regression_test/logger/emergency_logging/Titan_LogTest.ttcn +++ b/regression_test/logger/emergency_logging/Titan_LogTest.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/emergency_logging/Titan_LogTestDefinitions.ttcn b/regression_test/logger/emergency_logging/Titan_LogTestDefinitions.ttcn index 90fbb2250..84d1e1c5e 100644 --- a/regression_test/logger/emergency_logging/Titan_LogTestDefinitions.ttcn +++ b/regression_test/logger/emergency_logging/Titan_LogTestDefinitions.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/emergency_logging/failed_testcases.txt b/regression_test/logger/emergency_logging/failed_testcases.txt index 992a472a1..e9e69c0c9 100644 --- a/regression_test/logger/emergency_logging/failed_testcases.txt +++ b/regression_test/logger/emergency_logging/failed_testcases.txt @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/emergency_logging/runlog.txt b/regression_test/logger/emergency_logging/runlog.txt index 956422869..890d8aad5 100644 --- a/regression_test/logger/emergency_logging/runlog.txt +++ b/regression_test/logger/emergency_logging/runlog.txt @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/logcontrol/Makefile b/regression_test/logger/logcontrol/Makefile index 90bd66c51..e5d1b21ad 100644 --- a/regression_test/logger/logcontrol/Makefile +++ b/regression_test/logger/logcontrol/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/logcontrol/Titan_LogControlTest.cfg b/regression_test/logger/logcontrol/Titan_LogControlTest.cfg index 898c1eaa4..2fe8db476 100644 --- a/regression_test/logger/logcontrol/Titan_LogControlTest.cfg +++ b/regression_test/logger/logcontrol/Titan_LogControlTest.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/logcontrol/Titan_LogControlTest.ttcn b/regression_test/logger/logcontrol/Titan_LogControlTest.ttcn index 23253cb5c..36e3ba29f 100644 --- a/regression_test/logger/logcontrol/Titan_LogControlTest.ttcn +++ b/regression_test/logger/logcontrol/Titan_LogControlTest.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/logtest/Console_original_merged_log.txt b/regression_test/logger/logtest/Console_original_merged_log.txt index 562876687..9ca99029a 100644 --- a/regression_test/logger/logtest/Console_original_merged_log.txt +++ b/regression_test/logger/logtest/Console_original_merged_log.txt @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/logtest/Makefile b/regression_test/logger/logtest/Makefile index 39503c1b2..0fe29ee7a 100644 --- a/regression_test/logger/logtest/Makefile +++ b/regression_test/logger/logtest/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/logtest/PCO_PT.cc b/regression_test/logger/logtest/PCO_PT.cc index 21eef286f..e9f1420cf 100644 --- a/regression_test/logger/logtest/PCO_PT.cc +++ b/regression_test/logger/logtest/PCO_PT.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/logtest/PCO_PT.hh b/regression_test/logger/logtest/PCO_PT.hh index b7b09cf02..f8f88919f 100644 --- a/regression_test/logger/logtest/PCO_PT.hh +++ b/regression_test/logger/logtest/PCO_PT.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/logtest/Titan_LogTest.cfg b/regression_test/logger/logtest/Titan_LogTest.cfg index 0368316a2..1daededd6 100644 --- a/regression_test/logger/logtest/Titan_LogTest.cfg +++ b/regression_test/logger/logtest/Titan_LogTest.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/logtest/Titan_LogTest.ttcn b/regression_test/logger/logtest/Titan_LogTest.ttcn index 5d37d57b5..7e01af493 100644 --- a/regression_test/logger/logtest/Titan_LogTest.ttcn +++ b/regression_test/logger/logtest/Titan_LogTest.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/logtest/Titan_LogTestDefinitions.ttcn b/regression_test/logger/logtest/Titan_LogTestDefinitions.ttcn index 90fbb2250..84d1e1c5e 100644 --- a/regression_test/logger/logtest/Titan_LogTestDefinitions.ttcn +++ b/regression_test/logger/logtest/Titan_LogTestDefinitions.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/logtest/Titan_LogTest_ACTION.cfg b/regression_test/logger/logtest/Titan_LogTest_ACTION.cfg index 76f884cda..077c6f4de 100644 --- a/regression_test/logger/logtest/Titan_LogTest_ACTION.cfg +++ b/regression_test/logger/logtest/Titan_LogTest_ACTION.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/logtest/Titan_LogTest_ACTIONplusEXECUTOR_RT.cfg b/regression_test/logger/logtest/Titan_LogTest_ACTIONplusEXECUTOR_RT.cfg index 2fb0a63ed..1e8c2bef9 100644 --- a/regression_test/logger/logtest/Titan_LogTest_ACTIONplusEXECUTOR_RT.cfg +++ b/regression_test/logger/logtest/Titan_LogTest_ACTIONplusEXECUTOR_RT.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/logtest/Titan_LogTest_DEBUG.cfg b/regression_test/logger/logtest/Titan_LogTest_DEBUG.cfg index 207c6ca2b..377f4ea34 100644 --- a/regression_test/logger/logtest/Titan_LogTest_DEBUG.cfg +++ b/regression_test/logger/logtest/Titan_LogTest_DEBUG.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/logtest/Titan_LogTest_DEFAULT_OPplusEXECUTOR_RT.cfg b/regression_test/logger/logtest/Titan_LogTest_DEFAULT_OPplusEXECUTOR_RT.cfg index 40af07148..67cff25e9 100644 --- a/regression_test/logger/logtest/Titan_LogTest_DEFAULT_OPplusEXECUTOR_RT.cfg +++ b/regression_test/logger/logtest/Titan_LogTest_DEFAULT_OPplusEXECUTOR_RT.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/logtest/Titan_LogTest_ERRORplusRT.cfg b/regression_test/logger/logtest/Titan_LogTest_ERRORplusRT.cfg index 3a7f3b501..73d5bf924 100644 --- a/regression_test/logger/logtest/Titan_LogTest_ERRORplusRT.cfg +++ b/regression_test/logger/logtest/Titan_LogTest_ERRORplusRT.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/logtest/Titan_LogTest_EXECUTOR_LOGOPT.cfg b/regression_test/logger/logtest/Titan_LogTest_EXECUTOR_LOGOPT.cfg index 4a61e5c17..9d290c7a1 100644 --- a/regression_test/logger/logtest/Titan_LogTest_EXECUTOR_LOGOPT.cfg +++ b/regression_test/logger/logtest/Titan_LogTest_EXECUTOR_LOGOPT.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/logtest/Titan_LogTest_EXECUTOR_RTplusCOMP.cfg b/regression_test/logger/logtest/Titan_LogTest_EXECUTOR_RTplusCOMP.cfg index e3259ff32..797cb9781 100644 --- a/regression_test/logger/logtest/Titan_LogTest_EXECUTOR_RTplusCOMP.cfg +++ b/regression_test/logger/logtest/Titan_LogTest_EXECUTOR_RTplusCOMP.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/logtest/Titan_LogTest_EXECUTOR_RTplusLOGOPT.cfg b/regression_test/logger/logtest/Titan_LogTest_EXECUTOR_RTplusLOGOPT.cfg index 343fda836..c63356ed5 100644 --- a/regression_test/logger/logtest/Titan_LogTest_EXECUTOR_RTplusLOGOPT.cfg +++ b/regression_test/logger/logtest/Titan_LogTest_EXECUTOR_RTplusLOGOPT.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/logtest/Titan_LogTest_EXEC_RT.cfg b/regression_test/logger/logtest/Titan_LogTest_EXEC_RT.cfg index 160890af6..3e7cedfd7 100644 --- a/regression_test/logger/logtest/Titan_LogTest_EXEC_RT.cfg +++ b/regression_test/logger/logtest/Titan_LogTest_EXEC_RT.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/logtest/Titan_LogTest_EX_UNQUAL.cfg b/regression_test/logger/logtest/Titan_LogTest_EX_UNQUAL.cfg index a742e88a9..9adbe02be 100644 --- a/regression_test/logger/logtest/Titan_LogTest_EX_UNQUAL.cfg +++ b/regression_test/logger/logtest/Titan_LogTest_EX_UNQUAL.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/logtest/Titan_LogTest_E_RTplus_E_CONFIGDATA.cfg b/regression_test/logger/logtest/Titan_LogTest_E_RTplus_E_CONFIGDATA.cfg index c5752ea6a..40cdf4975 100644 --- a/regression_test/logger/logtest/Titan_LogTest_E_RTplus_E_CONFIGDATA.cfg +++ b/regression_test/logger/logtest/Titan_LogTest_E_RTplus_E_CONFIGDATA.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/logtest/Titan_LogTest_FUNC.cfg b/regression_test/logger/logtest/Titan_LogTest_FUNC.cfg index 0b0c301be..36cd230c6 100644 --- a/regression_test/logger/logtest/Titan_LogTest_FUNC.cfg +++ b/regression_test/logger/logtest/Titan_LogTest_FUNC.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/logtest/Titan_LogTest_MATCH.cfg b/regression_test/logger/logtest/Titan_LogTest_MATCH.cfg index 595d73a24..65d5c1518 100644 --- a/regression_test/logger/logtest/Titan_LogTest_MATCH.cfg +++ b/regression_test/logger/logtest/Titan_LogTest_MATCH.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/logtest/Titan_LogTest_PARALLEL.cfg b/regression_test/logger/logtest/Titan_LogTest_PARALLEL.cfg index d1a4f1df9..dd0423429 100644 --- a/regression_test/logger/logtest/Titan_LogTest_PARALLEL.cfg +++ b/regression_test/logger/logtest/Titan_LogTest_PARALLEL.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/logtest/Titan_LogTest_PORTEVENT.cfg b/regression_test/logger/logtest/Titan_LogTest_PORTEVENT.cfg index 84c4d93da..53cb4bd34 100644 --- a/regression_test/logger/logtest/Titan_LogTest_PORTEVENT.cfg +++ b/regression_test/logger/logtest/Titan_LogTest_PORTEVENT.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/logtest/Titan_LogTest_STAT.cfg b/regression_test/logger/logtest/Titan_LogTest_STAT.cfg index 4e5b5c46e..8840c6c75 100644 --- a/regression_test/logger/logtest/Titan_LogTest_STAT.cfg +++ b/regression_test/logger/logtest/Titan_LogTest_STAT.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/logtest/Titan_LogTest_TC.cfg b/regression_test/logger/logtest/Titan_LogTest_TC.cfg index 7598c66bb..4e9515f6d 100644 --- a/regression_test/logger/logtest/Titan_LogTest_TC.cfg +++ b/regression_test/logger/logtest/Titan_LogTest_TC.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/logtest/Titan_LogTest_TIMER.cfg b/regression_test/logger/logtest/Titan_LogTest_TIMER.cfg index 5c886d670..6f1bd8dd8 100644 --- a/regression_test/logger/logtest/Titan_LogTest_TIMER.cfg +++ b/regression_test/logger/logtest/Titan_LogTest_TIMER.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/logtest/Titan_LogTest_TTCN_ACTION.cfg b/regression_test/logger/logtest/Titan_LogTest_TTCN_ACTION.cfg index 2d1b63f53..dcf8d16f6 100644 --- a/regression_test/logger/logtest/Titan_LogTest_TTCN_ACTION.cfg +++ b/regression_test/logger/logtest/Titan_LogTest_TTCN_ACTION.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/logtest/Titan_LogTest_USER.cfg b/regression_test/logger/logtest/Titan_LogTest_USER.cfg index 02a6357a6..a9d14da3d 100644 --- a/regression_test/logger/logtest/Titan_LogTest_USER.cfg +++ b/regression_test/logger/logtest/Titan_LogTest_USER.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/logtest/Titan_LogTest_VERDICT.cfg b/regression_test/logger/logtest/Titan_LogTest_VERDICT.cfg index ccb0d3ad5..a246c8ce5 100644 --- a/regression_test/logger/logtest/Titan_LogTest_VERDICT.cfg +++ b/regression_test/logger/logtest/Titan_LogTest_VERDICT.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/logtest/Titan_LogTest_WARNING.cfg b/regression_test/logger/logtest/Titan_LogTest_WARNING.cfg index dfeaff2e5..bb8a1da66 100644 --- a/regression_test/logger/logtest/Titan_LogTest_WARNING.cfg +++ b/regression_test/logger/logtest/Titan_LogTest_WARNING.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/logtest/logtest.sh b/regression_test/logger/logtest/logtest.sh index 59d26ddfe..f629e0191 100755 --- a/regression_test/logger/logtest/logtest.sh +++ b/regression_test/logger/logtest/logtest.sh @@ -1,6 +1,6 @@ #!/bin/bash ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/logtest/original_merged_log.txt b/regression_test/logger/logtest/original_merged_log.txt index d2c6885f8..f8c8f807c 100644 --- a/regression_test/logger/logtest/original_merged_log.txt +++ b/regression_test/logger/logtest/original_merged_log.txt @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger/logtest/original_merged_log_modified.txt b/regression_test/logger/logtest/original_merged_log_modified.txt index 31a024994..df4319f9b 100644 --- a/regression_test/logger/logtest/original_merged_log_modified.txt +++ b/regression_test/logger/logtest/original_merged_log_modified.txt @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger_control/Makefile b/regression_test/logger_control/Makefile index 3b08888eb..d73469f8c 100644 --- a/regression_test/logger_control/Makefile +++ b/regression_test/logger_control/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger_control/config.cfg b/regression_test/logger_control/config.cfg index 4c9d12710..fdb8da4a8 100644 --- a/regression_test/logger_control/config.cfg +++ b/regression_test/logger_control/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/logger_control/logcontrol.ttcn b/regression_test/logger_control/logcontrol.ttcn index 01a4474df..e8925cf1b 100644 --- a/regression_test/logger_control/logcontrol.ttcn +++ b/regression_test/logger_control/logcontrol.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/loggerplugin/Makefile b/regression_test/loggerplugin/Makefile index 43bc7810f..c583c6164 100644 --- a/regression_test/loggerplugin/Makefile +++ b/regression_test/loggerplugin/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/loggerplugin/a.ttcn b/regression_test/loggerplugin/a.ttcn index c8508cace..409df5f56 100644 --- a/regression_test/loggerplugin/a.ttcn +++ b/regression_test/loggerplugin/a.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/loggerplugin/config.cfg b/regression_test/loggerplugin/config.cfg index b3ff3ef64..6ed5a7fc7 100644 --- a/regression_test/loggerplugin/config.cfg +++ b/regression_test/loggerplugin/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/lostTimer/Makefile b/regression_test/lostTimer/Makefile index e82c9382d..2f9906684 100644 --- a/regression_test/lostTimer/Makefile +++ b/regression_test/lostTimer/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/lostTimer/TlostTimer.ttcn b/regression_test/lostTimer/TlostTimer.ttcn index 7180e6d7e..9aa6e5089 100644 --- a/regression_test/lostTimer/TlostTimer.ttcn +++ b/regression_test/lostTimer/TlostTimer.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 @@ -13,14 +13,11 @@ type component CT { testcase tc1() runs on CT { - log(T1); T1.start; T2.start; - log(T2); T2.timeout; if (T1.read != 0.0) { setverdict(fail); } if (T1.running) { setverdict(fail); } - log(T1); alt { [] any timer.timeout { setverdict(pass); } [else] { setverdict(fail); } diff --git a/regression_test/lostTimer/config.cfg b/regression_test/lostTimer/config.cfg index e9cf294f7..afc9d2a1c 100644 --- a/regression_test/lostTimer/config.cfg +++ b/regression_test/lostTimer/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/macros/Macros.ttcn b/regression_test/macros/Macros.ttcn index f95d01825..54206f35f 100644 --- a/regression_test/macros/Macros.ttcn +++ b/regression_test/macros/Macros.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/macros/Makefile b/regression_test/macros/Makefile index 17e4fda72..af93ed160 100644 --- a/regression_test/macros/Makefile +++ b/regression_test/macros/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/macros/config.cfg b/regression_test/macros/config.cfg index bee48a503..7595556a6 100644 --- a/regression_test/macros/config.cfg +++ b/regression_test/macros/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/modifiedTemplate/Makefile b/regression_test/modifiedTemplate/Makefile index f2e159c7b..0035929ab 100644 --- a/regression_test/modifiedTemplate/Makefile +++ b/regression_test/modifiedTemplate/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/modifiedTemplate/TmodifiedTemplate.ttcn b/regression_test/modifiedTemplate/TmodifiedTemplate.ttcn index 115046921..0a9688b80 100644 --- a/regression_test/modifiedTemplate/TmodifiedTemplate.ttcn +++ b/regression_test/modifiedTemplate/TmodifiedTemplate.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/modifiedTemplate/config.cfg b/regression_test/modifiedTemplate/config.cfg index c517d5687..16540d41c 100644 --- a/regression_test/modifiedTemplate/config.cfg +++ b/regression_test/modifiedTemplate/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/namedActualParameters/Makefile b/regression_test/namedActualParameters/Makefile index b1ae74b2f..b0e1bd5cc 100644 --- a/regression_test/namedActualParameters/Makefile +++ b/regression_test/namedActualParameters/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/namedActualParameters/config.cfg b/regression_test/namedActualParameters/config.cfg index f695ffd3a..d53a6ebb5 100644 --- a/regression_test/namedActualParameters/config.cfg +++ b/regression_test/namedActualParameters/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/namedActualParameters/inlinetemplate.ttcn b/regression_test/namedActualParameters/inlinetemplate.ttcn index 8a92f9313..13f587f72 100644 --- a/regression_test/namedActualParameters/inlinetemplate.ttcn +++ b/regression_test/namedActualParameters/inlinetemplate.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/namedActualParameters/namedparam.ttcn b/regression_test/namedActualParameters/namedparam.ttcn index d79aef001..4d7f1a383 100644 --- a/regression_test/namedActualParameters/namedparam.ttcn +++ b/regression_test/namedActualParameters/namedparam.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/namedActualParameters/small.ttcn b/regression_test/namedActualParameters/small.ttcn index 8c448430a..96d6a53e2 100644 --- a/regression_test/namedActualParameters/small.ttcn +++ b/regression_test/namedActualParameters/small.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/namedActualParameters/templates.ttcn b/regression_test/namedActualParameters/templates.ttcn index 92a510c35..6d40500e2 100644 --- a/regression_test/namedActualParameters/templates.ttcn +++ b/regression_test/namedActualParameters/templates.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/negativeTest/Makefile b/regression_test/negativeTest/Makefile index 5a3b24a84..d54e12aa1 100755 --- a/regression_test/negativeTest/Makefile +++ b/regression_test/negativeTest/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/negativeTest/NegTest.cfg b/regression_test/negativeTest/NegTest.cfg index 23c801100..37f0d4e53 100644 --- a/regression_test/negativeTest/NegTest.cfg +++ b/regression_test/negativeTest/NegTest.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/negativeTest/NegTestTestcases.ttcn b/regression_test/negativeTest/NegTestTestcases.ttcn index 9f87adc84..5f0e1fc5b 100644 --- a/regression_test/negativeTest/NegTestTestcases.ttcn +++ b/regression_test/negativeTest/NegTestTestcases.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/negativeTest/NegTestTypes.asn b/regression_test/negativeTest/NegTestTypes.asn index 2bc01c284..5e52d613c 100644 --- a/regression_test/negativeTest/NegTestTypes.asn +++ b/regression_test/negativeTest/NegTestTypes.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/negativeTest/NegTest_RAW.cfg b/regression_test/negativeTest/NegTest_RAW.cfg index c4a289df2..e571ccedb 100644 --- a/regression_test/negativeTest/NegTest_RAW.cfg +++ b/regression_test/negativeTest/NegTest_RAW.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/negativeTest/NegTest_RAW_Testcases.ttcn b/regression_test/negativeTest/NegTest_RAW_Testcases.ttcn index abc0c2e17..301809a4a 100644 --- a/regression_test/negativeTest/NegTest_RAW_Testcases.ttcn +++ b/regression_test/negativeTest/NegTest_RAW_Testcases.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/negativeTest/NegTest_RAW_Types.ttcn b/regression_test/negativeTest/NegTest_RAW_Types.ttcn index 4b37a184a..b3f64e837 100644 --- a/regression_test/negativeTest/NegTest_RAW_Types.ttcn +++ b/regression_test/negativeTest/NegTest_RAW_Types.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/negativeTest/NegTest_TEXT.cfg b/regression_test/negativeTest/NegTest_TEXT.cfg index 4988e23bb..93c423b1c 100644 --- a/regression_test/negativeTest/NegTest_TEXT.cfg +++ b/regression_test/negativeTest/NegTest_TEXT.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/negativeTest/NegTest_TEXT_Testcases.ttcn b/regression_test/negativeTest/NegTest_TEXT_Testcases.ttcn index f1e048eca..eccd83666 100644 --- a/regression_test/negativeTest/NegTest_TEXT_Testcases.ttcn +++ b/regression_test/negativeTest/NegTest_TEXT_Testcases.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/negativeTest/NegTest_TEXT_Types.ttcn b/regression_test/negativeTest/NegTest_TEXT_Types.ttcn index 250ff29a9..a73577004 100644 --- a/regression_test/negativeTest/NegTest_TEXT_Types.ttcn +++ b/regression_test/negativeTest/NegTest_TEXT_Types.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/negativeTest/NegTest_XML.cfg b/regression_test/negativeTest/NegTest_XML.cfg index b59cb6c3a..0f8da48e0 100644 --- a/regression_test/negativeTest/NegTest_XML.cfg +++ b/regression_test/negativeTest/NegTest_XML.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/negativeTest/NegTest_XML_Testcases.ttcn b/regression_test/negativeTest/NegTest_XML_Testcases.ttcn index aa7886681..53c835211 100644 --- a/regression_test/negativeTest/NegTest_XML_Testcases.ttcn +++ b/regression_test/negativeTest/NegTest_XML_Testcases.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/negativeTest/NegTest_XML_Types.xsd b/regression_test/negativeTest/NegTest_XML_Types.xsd index 4f5aa57d7..7c6372872 100644 --- a/regression_test/negativeTest/NegTest_XML_Types.xsd +++ b/regression_test/negativeTest/NegTest_XML_Types.xsd @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/regression_test/negativeTest/NegTest_all.cfg b/regression_test/negativeTest/NegTest_all.cfg index 09fc3b3fe..daf7f270c 100644 --- a/regression_test/negativeTest/NegTest_all.cfg +++ b/regression_test/negativeTest/NegTest_all.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/negativeTest/Types.asn b/regression_test/negativeTest/Types.asn index df3b7888f..d7343d631 100755 --- a/regression_test/negativeTest/Types.asn +++ b/regression_test/negativeTest/Types.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/negativeTest/UsefulTtcn3Types.ttcn b/regression_test/negativeTest/UsefulTtcn3Types.ttcn index e680ab0eb..bac9ef501 100644 --- a/regression_test/negativeTest/UsefulTtcn3Types.ttcn +++ b/regression_test/negativeTest/UsefulTtcn3Types.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/negativeTest/XSD.ttcn b/regression_test/negativeTest/XSD.ttcn index 8ee4fc267..d35abb763 100644 --- a/regression_test/negativeTest/XSD.ttcn +++ b/regression_test/negativeTest/XSD.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/negativeTest/config.cfg b/regression_test/negativeTest/config.cfg index 97456d741..fdd4a7dc8 100755 --- a/regression_test/negativeTest/config.cfg +++ b/regression_test/negativeTest/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/negativeTest/negtest.ttcn b/regression_test/negativeTest/negtest.ttcn index 58155bea8..e9d707be9 100755 --- a/regression_test/negativeTest/negtest.ttcn +++ b/regression_test/negativeTest/negtest.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/negativeTest/www_XmlTest_org_negativeTest_XML_Types.ttcn b/regression_test/negativeTest/www_XmlTest_org_negativeTest_XML_Types.ttcn index 2a6ea6ce0..d3013709b 100644 --- a/regression_test/negativeTest/www_XmlTest_org_negativeTest_XML_Types.ttcn +++ b/regression_test/negativeTest/www_XmlTest_org_negativeTest_XML_Types.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/nonMandatoryPar/Makefile b/regression_test/nonMandatoryPar/Makefile index 44f1c7c2b..a9a7ffe48 100644 --- a/regression_test/nonMandatoryPar/Makefile +++ b/regression_test/nonMandatoryPar/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/nonMandatoryPar/PCOType.cc b/regression_test/nonMandatoryPar/PCOType.cc index 06b0d5ba4..de3e2fefc 100644 --- a/regression_test/nonMandatoryPar/PCOType.cc +++ b/regression_test/nonMandatoryPar/PCOType.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/nonMandatoryPar/PCOType.hh b/regression_test/nonMandatoryPar/PCOType.hh index bd82a663c..c4d906669 100644 --- a/regression_test/nonMandatoryPar/PCOType.hh +++ b/regression_test/nonMandatoryPar/PCOType.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/nonMandatoryPar/TnonMandatory.ttcn b/regression_test/nonMandatoryPar/TnonMandatory.ttcn index 5f678faab..4aaa4e2b9 100644 --- a/regression_test/nonMandatoryPar/TnonMandatory.ttcn +++ b/regression_test/nonMandatoryPar/TnonMandatory.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/nonMandatoryPar/config.cfg b/regression_test/nonMandatoryPar/config.cfg index 527de29ad..47feb42c5 100644 --- a/regression_test/nonMandatoryPar/config.cfg +++ b/regression_test/nonMandatoryPar/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/objidOper/Makefile b/regression_test/objidOper/Makefile index a98a0a181..baabc430a 100644 --- a/regression_test/objidOper/Makefile +++ b/regression_test/objidOper/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/objidOper/TobjidOper.ttcn b/regression_test/objidOper/TobjidOper.ttcn index a66beec19..7247fdd83 100644 --- a/regression_test/objidOper/TobjidOper.ttcn +++ b/regression_test/objidOper/TobjidOper.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 @@ -172,9 +172,7 @@ testcase encdec() runs on objidOper_comptype else { setverdict(fail, match(oi, c_0_1_infinity)); } os := enco(c_bits); - log(os); oi := deco(os); - log(oi); if (sizeof(oi) != sizeof(c_bits)) { setverdict(fail, "Number of objid components: ", @@ -192,9 +190,7 @@ testcase encdec() runs on objidOper_comptype } os := enco(c_pow2); - log(os); oi := deco(os); - log(oi); if (sizeof(oi) != sizeof(c_pow2)) { setverdict(fail, "Number of objid components: ", @@ -221,7 +217,6 @@ testcase objidWithVars() runs on objidOper_comptype var integer v4 := -87; const integer c1 := 0; var objid o1 := objid { c1 v1 }; - log(o1); if (o1 == objid { 0 1 }) { setverdict(pass); } else { setverdict(fail, o1, " != ", objid { 0 1 }); } @@ -246,8 +241,6 @@ testcase objidWithVars() runs on objidOper_comptype } var template objid to1 := (objid { 0 1 6 }, objid { v1 6 v3 }); - log(to1); - log(sizeof(to1)); if (match(objid { 1 6 v3 }, to1)) { setverdict(pass); } else { setverdict(fail, objid { 1 6 v3 }, " doesn't match ", to1); } diff --git a/regression_test/objidOper/config.cfg b/regression_test/objidOper/config.cfg index 7a0c1a6f1..df5579261 100644 --- a/regression_test/objidOper/config.cfg +++ b/regression_test/objidOper/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/objidOper/indexer.cc b/regression_test/objidOper/indexer.cc index 34ef38b51..b46dea388 100644 --- a/regression_test/objidOper/indexer.cc +++ b/regression_test/objidOper/indexer.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/octetstrOper/Makefile b/regression_test/octetstrOper/Makefile index e4423cb57..fca6f33dc 100644 --- a/regression_test/octetstrOper/Makefile +++ b/regression_test/octetstrOper/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/octetstrOper/ToctetstrOper.ttcn b/regression_test/octetstrOper/ToctetstrOper.ttcn index 62dce3e8a..9021d6653 100644 --- a/regression_test/octetstrOper/ToctetstrOper.ttcn +++ b/regression_test/octetstrOper/ToctetstrOper.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 @@ -269,7 +269,6 @@ testcase octetstrXor_str_str() runs on octetstrOper_comptype x1:='ACDE9833'O; x2:='B8352765'O; x3:=x1 xor4b x2; - log(x3); if (x3=='14EBBF56'O) {setverdict(pass);} else {setverdict(fail);} } diff --git a/regression_test/octetstrOper/config.cfg b/regression_test/octetstrOper/config.cfg index 0cad032de..c9875a85b 100644 --- a/regression_test/octetstrOper/config.cfg +++ b/regression_test/octetstrOper/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/omitdef/Datatypes.asn b/regression_test/omitdef/Datatypes.asn index 799a71dc0..e57a95453 100644 --- a/regression_test/omitdef/Datatypes.asn +++ b/regression_test/omitdef/Datatypes.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/omitdef/Dumping.hh b/regression_test/omitdef/Dumping.hh index fee7725a3..19ed2185c 100644 --- a/regression_test/omitdef/Dumping.hh +++ b/regression_test/omitdef/Dumping.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/omitdef/Makefile b/regression_test/omitdef/Makefile index 495dc71c3..d9a3b5029 100644 --- a/regression_test/omitdef/Makefile +++ b/regression_test/omitdef/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/omitdef/PT_DefOpt.cc b/regression_test/omitdef/PT_DefOpt.cc index c83c7e40a..e38e78dff 100644 --- a/regression_test/omitdef/PT_DefOpt.cc +++ b/regression_test/omitdef/PT_DefOpt.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/omitdef/PT_DefOpt.hh b/regression_test/omitdef/PT_DefOpt.hh index ccef3dd70..ac6c306a2 100644 --- a/regression_test/omitdef/PT_DefOpt.hh +++ b/regression_test/omitdef/PT_DefOpt.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/omitdef/Tsenderos.ttcn b/regression_test/omitdef/Tsenderos.ttcn index d937b1799..ea1fcb0dd 100644 --- a/regression_test/omitdef/Tsenderos.ttcn +++ b/regression_test/omitdef/Tsenderos.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/omitdef/config.cfg b/regression_test/omitdef/config.cfg index 44f4a33c1..4e3ef963c 100644 --- a/regression_test/omitdef/config.cfg +++ b/regression_test/omitdef/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/pattern_quadruples/Makefile b/regression_test/pattern_quadruples/Makefile index 3e37617be..7756306ff 100644 --- a/regression_test/pattern_quadruples/Makefile +++ b/regression_test/pattern_quadruples/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/pattern_quadruples/config.cfg b/regression_test/pattern_quadruples/config.cfg index 4e6737124..f028858ef 100644 --- a/regression_test/pattern_quadruples/config.cfg +++ b/regression_test/pattern_quadruples/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/pattern_quadruples/pattern_quadruples.ttcn b/regression_test/pattern_quadruples/pattern_quadruples.ttcn index 865cee031..f83d631fa 100644 --- a/regression_test/pattern_quadruples/pattern_quadruples.ttcn +++ b/regression_test/pattern_quadruples/pattern_quadruples.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/preCompilerFlags/Makefile b/regression_test/preCompilerFlags/Makefile index b1fc898d6..3bbcb964a 100644 --- a/regression_test/preCompilerFlags/Makefile +++ b/regression_test/preCompilerFlags/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/preCompilerFlags/TpreCompilerFlags.ttcnpp b/regression_test/preCompilerFlags/TpreCompilerFlags.ttcnpp index 7f86de75e..9444f9e16 100755 --- a/regression_test/preCompilerFlags/TpreCompilerFlags.ttcnpp +++ b/regression_test/preCompilerFlags/TpreCompilerFlags.ttcnpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/preCompilerFlags/config.cfg b/regression_test/preCompilerFlags/config.cfg index 5f14b6407..29cb4d0e8 100755 --- a/regression_test/preCompilerFlags/config.cfg +++ b/regression_test/preCompilerFlags/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/predefFunction/Makefile b/regression_test/predefFunction/Makefile index 212243956..2de616eca 100644 --- a/regression_test/predefFunction/Makefile +++ b/regression_test/predefFunction/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/predefFunction/PreDef.cfg b/regression_test/predefFunction/PreDef.cfg index 595329510..9bc5f8f47 100644 --- a/regression_test/predefFunction/PreDef.cfg +++ b/regression_test/predefFunction/PreDef.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/predefFunction/bit_to_OK.ttcn b/regression_test/predefFunction/bit_to_OK.ttcn index 43c5ca762..c4a5f85ae 100644 --- a/regression_test/predefFunction/bit_to_OK.ttcn +++ b/regression_test/predefFunction/bit_to_OK.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/predefFunction/bit_to_SW.ttcn b/regression_test/predefFunction/bit_to_SW.ttcn index 78bb7c9ed..22f4aba4d 100644 --- a/regression_test/predefFunction/bit_to_SW.ttcn +++ b/regression_test/predefFunction/bit_to_SW.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/predefFunction/char_to_OK.ttcn b/regression_test/predefFunction/char_to_OK.ttcn index d1c51fba7..95978d48e 100644 --- a/regression_test/predefFunction/char_to_OK.ttcn +++ b/regression_test/predefFunction/char_to_OK.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/predefFunction/char_to_SW.ttcn b/regression_test/predefFunction/char_to_SW.ttcn index e8ec62f3d..36893da96 100644 --- a/regression_test/predefFunction/char_to_SW.ttcn +++ b/regression_test/predefFunction/char_to_SW.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/predefFunction/encdec_OK.ttcn b/regression_test/predefFunction/encdec_OK.ttcn index 7e58a354a..5aa3c9d5c 100644 --- a/regression_test/predefFunction/encdec_OK.ttcn +++ b/regression_test/predefFunction/encdec_OK.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/predefFunction/enum_to_OK.ttcn b/regression_test/predefFunction/enum_to_OK.ttcn index 2c573739a..f1464a340 100644 --- a/regression_test/predefFunction/enum_to_OK.ttcn +++ b/regression_test/predefFunction/enum_to_OK.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/predefFunction/enum_to_SW.ttcn b/regression_test/predefFunction/enum_to_SW.ttcn index 7ce8f579f..0cd4039c3 100644 --- a/regression_test/predefFunction/enum_to_SW.ttcn +++ b/regression_test/predefFunction/enum_to_SW.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/predefFunction/float_to_OK.ttcn b/regression_test/predefFunction/float_to_OK.ttcn index a2e5e2b20..597ea115b 100644 --- a/regression_test/predefFunction/float_to_OK.ttcn +++ b/regression_test/predefFunction/float_to_OK.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/predefFunction/float_to_SW.ttcn b/regression_test/predefFunction/float_to_SW.ttcn index c146a3ad8..0335ffa77 100644 --- a/regression_test/predefFunction/float_to_SW.ttcn +++ b/regression_test/predefFunction/float_to_SW.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/predefFunction/hex_to_OK.ttcn b/regression_test/predefFunction/hex_to_OK.ttcn index 5ff122148..d9fd32e52 100644 --- a/regression_test/predefFunction/hex_to_OK.ttcn +++ b/regression_test/predefFunction/hex_to_OK.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/predefFunction/hex_to_SW.ttcn b/regression_test/predefFunction/hex_to_SW.ttcn index 3402dab75..85a9672d3 100644 --- a/regression_test/predefFunction/hex_to_SW.ttcn +++ b/regression_test/predefFunction/hex_to_SW.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/predefFunction/int_to_OK.ttcn b/regression_test/predefFunction/int_to_OK.ttcn index 0a1b53685..d7105a31f 100644 --- a/regression_test/predefFunction/int_to_OK.ttcn +++ b/regression_test/predefFunction/int_to_OK.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/predefFunction/int_to_SW.ttcn b/regression_test/predefFunction/int_to_SW.ttcn index fb23578b4..31072008b 100644 --- a/regression_test/predefFunction/int_to_SW.ttcn +++ b/regression_test/predefFunction/int_to_SW.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/predefFunction/isprecho_OK.ttcn b/regression_test/predefFunction/isprecho_OK.ttcn index 82d0b0cde..4eed6d62d 100644 --- a/regression_test/predefFunction/isprecho_OK.ttcn +++ b/regression_test/predefFunction/isprecho_OK.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/predefFunction/length_of_OK.ttcn b/regression_test/predefFunction/length_of_OK.ttcn index 33f3a8e3b..f2700f775 100644 --- a/regression_test/predefFunction/length_of_OK.ttcn +++ b/regression_test/predefFunction/length_of_OK.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/predefFunction/length_of_SW.ttcn b/regression_test/predefFunction/length_of_SW.ttcn index 30ae4c926..ebee2eae3 100644 --- a/regression_test/predefFunction/length_of_SW.ttcn +++ b/regression_test/predefFunction/length_of_SW.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/predefFunction/oct_to_OK.ttcn b/regression_test/predefFunction/oct_to_OK.ttcn index 2a7fd45d7..e7b7bc854 100644 --- a/regression_test/predefFunction/oct_to_OK.ttcn +++ b/regression_test/predefFunction/oct_to_OK.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/predefFunction/oct_to_SW.ttcn b/regression_test/predefFunction/oct_to_SW.ttcn index c295b225c..67207165a 100644 --- a/regression_test/predefFunction/oct_to_SW.ttcn +++ b/regression_test/predefFunction/oct_to_SW.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/predefFunction/regex_OK.ttcn b/regression_test/predefFunction/regex_OK.ttcn index 7c50562dd..da2131fa5 100644 --- a/regression_test/predefFunction/regex_OK.ttcn +++ b/regression_test/predefFunction/regex_OK.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/predefFunction/replacer_OK.ttcn b/regression_test/predefFunction/replacer_OK.ttcn index b14884baa..3ea5d9b84 100644 --- a/regression_test/predefFunction/replacer_OK.ttcn +++ b/regression_test/predefFunction/replacer_OK.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/predefFunction/replacer_SW.ttcn b/regression_test/predefFunction/replacer_SW.ttcn index c9ac1a2b7..53dda9333 100644 --- a/regression_test/predefFunction/replacer_SW.ttcn +++ b/regression_test/predefFunction/replacer_SW.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/predefFunction/rotter_OK.ttcn b/regression_test/predefFunction/rotter_OK.ttcn index e42ef0087..06560bc23 100644 --- a/regression_test/predefFunction/rotter_OK.ttcn +++ b/regression_test/predefFunction/rotter_OK.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/predefFunction/rotter_SW.ttcn b/regression_test/predefFunction/rotter_SW.ttcn index 8d73855cc..157a1b603 100644 --- a/regression_test/predefFunction/rotter_SW.ttcn +++ b/regression_test/predefFunction/rotter_SW.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/predefFunction/shifty_OK.ttcn b/regression_test/predefFunction/shifty_OK.ttcn index 308c520f9..220d65a5c 100644 --- a/regression_test/predefFunction/shifty_OK.ttcn +++ b/regression_test/predefFunction/shifty_OK.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/predefFunction/shifty_SW.ttcn b/regression_test/predefFunction/shifty_SW.ttcn index b21e0550b..e0af96fbb 100644 --- a/regression_test/predefFunction/shifty_SW.ttcn +++ b/regression_test/predefFunction/shifty_SW.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/predefFunction/size_of_OK.ttcn b/regression_test/predefFunction/size_of_OK.ttcn index a15731da8..3e8794154 100644 --- a/regression_test/predefFunction/size_of_OK.ttcn +++ b/regression_test/predefFunction/size_of_OK.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/predefFunction/size_of_SW.ttcn b/regression_test/predefFunction/size_of_SW.ttcn index 7da8e6009..be0b46822 100644 --- a/regression_test/predefFunction/size_of_SW.ttcn +++ b/regression_test/predefFunction/size_of_SW.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/predefFunction/str_to_OK.ttcn b/regression_test/predefFunction/str_to_OK.ttcn index c61543413..7c9acfa61 100644 --- a/regression_test/predefFunction/str_to_OK.ttcn +++ b/regression_test/predefFunction/str_to_OK.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/predefFunction/str_to_SW.ttcn b/regression_test/predefFunction/str_to_SW.ttcn index f5db382ad..5b92ccb49 100644 --- a/regression_test/predefFunction/str_to_SW.ttcn +++ b/regression_test/predefFunction/str_to_SW.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/predefFunction/sub_str_OK.ttcn b/regression_test/predefFunction/sub_str_OK.ttcn index 72ae19eed..2d4e660d3 100644 --- a/regression_test/predefFunction/sub_str_OK.ttcn +++ b/regression_test/predefFunction/sub_str_OK.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/predefFunction/sub_str_SW.ttcn b/regression_test/predefFunction/sub_str_SW.ttcn index 91072a57e..5587a2fde 100644 --- a/regression_test/predefFunction/sub_str_SW.ttcn +++ b/regression_test/predefFunction/sub_str_SW.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/predefFunction/tcname_OK.ttcn b/regression_test/predefFunction/tcname_OK.ttcn index 19a0ead56..920b0402b 100644 --- a/regression_test/predefFunction/tcname_OK.ttcn +++ b/regression_test/predefFunction/tcname_OK.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/predefFunction/tcname_SW.ttcn b/regression_test/predefFunction/tcname_SW.ttcn index 645d42fff..b40bf0abf 100644 --- a/regression_test/predefFunction/tcname_SW.ttcn +++ b/regression_test/predefFunction/tcname_SW.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/prereq.pl b/regression_test/prereq.pl index 4188756d0..1ef3d72d8 100755 --- a/regression_test/prereq.pl +++ b/regression_test/prereq.pl @@ -1,6 +1,6 @@ #!/usr/bin/perl -wT ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/profiler/Makefile b/regression_test/profiler/Makefile index 58a458012..8defed6bb 100755 --- a/regression_test/profiler/Makefile +++ b/regression_test/profiler/Makefile @@ -43,7 +43,8 @@ PROF_OBJECTS = $(PROF_GENERATED_SOURCES:.cc=.o) PROF_TARGET = prof.exe -TEMP_FILES = $(PROF_GENERATED_SOURCES) $(PROF_GENERATED_HEADERS) $(PROF_OBJECTS) $(PROF_TARGET) data.json prof1.stats empty.stats +TEMP_FILES = $(PROF_GENERATED_SOURCES) $(PROF_GENERATED_HEADERS) $(PROF_OBJECTS) $(PROF_TARGET) \ +data.json data2.json data3.json prof1.stats empty.stats double.json double.stats merged.json merged.stats # Rules for tester modules all: $(TARGET) diff --git a/regression_test/profiler/PIPEasp_PT.cc b/regression_test/profiler/PIPEasp_PT.cc index 2b57a1698..ea6fbf86c 100644 --- a/regression_test/profiler/PIPEasp_PT.cc +++ b/regression_test/profiler/PIPEasp_PT.cc @@ -1,5 +1,5 @@ /******************************************************************************* -* Copyright (c) 2000-2014 Ericsson Telecom AB +* Copyright (c) 2000-2015 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 diff --git a/regression_test/profiler/PIPEasp_PT.hh b/regression_test/profiler/PIPEasp_PT.hh index df7624021..47c44bb20 100644 --- a/regression_test/profiler/PIPEasp_PT.hh +++ b/regression_test/profiler/PIPEasp_PT.hh @@ -1,5 +1,5 @@ /******************************************************************************* -* Copyright (c) 2000-2014 Ericsson Telecom AB +* Copyright (c) 2000-2015 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 diff --git a/regression_test/profiler/PIPEasp_PortType.ttcn b/regression_test/profiler/PIPEasp_PortType.ttcn index 1d43b6fa8..afaf5b9a1 100644 --- a/regression_test/profiler/PIPEasp_PortType.ttcn +++ b/regression_test/profiler/PIPEasp_PortType.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/profiler/PIPEasp_Templates.ttcn b/regression_test/profiler/PIPEasp_Templates.ttcn index 988bd4824..ead0f96cc 100644 --- a/regression_test/profiler/PIPEasp_Templates.ttcn +++ b/regression_test/profiler/PIPEasp_Templates.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/profiler/PIPEasp_Types.ttcn b/regression_test/profiler/PIPEasp_Types.ttcn index da8ea94df..b63bccda1 100644 --- a/regression_test/profiler/PIPEasp_Types.ttcn +++ b/regression_test/profiler/PIPEasp_Types.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/profiler/Shell.ttcn b/regression_test/profiler/Shell.ttcn index 0db58a134..0c08218ee 100644 --- a/regression_test/profiler/Shell.ttcn +++ b/regression_test/profiler/Shell.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 @@ -47,7 +47,8 @@ type component mtc_CT {} const integer c_shell_successWithoutWarningAndError:=0; const integer c_shell_success := 0; -const integer c_shell_successWithWarning:=1; //temp until licence is solved +const integer c_shell_successWithWarning:=1; +const integer c_shell_successWithoutError:=2; const integer c_shell_error:=256; const integer c_shell_error_noSuchFileOrDirectory:=512; @@ -156,7 +157,8 @@ runs on Shell_CT var integer vl_expectedCode:=-1; if(pl_expected_result==c_shell_successWithoutWarningAndError or - pl_expected_result==c_shell_successWithWarning) { + pl_expected_result==c_shell_successWithWarning or + pl_expected_result==c_shell_successWithoutError) { vl_expectedCode:=0 } else { vl_expectedCode:= pl_expected_result; @@ -205,6 +207,16 @@ runs on Shell_CT pl_success:=true; } }//case + case(c_shell_successWithoutError) { + vl_pattern:="*(Error|ERROR|error)*"; + if(regexp(v_ASP_PResult.stderr,vl_pattern,0)!=""){ + log("That is an unexpected Error!") + pl_success:=false; + } else { + log("No Error in the stderr string"); + pl_success:=true; + } + } case(c_shell_error) { log("Command returned with ERROR as expected"); pl_success:=true; diff --git a/regression_test/profiler/Testcases.ttcn b/regression_test/profiler/Testcases.ttcn index 67765a5d2..4f60bd072 100644 --- a/regression_test/profiler/Testcases.ttcn +++ b/regression_test/profiler/Testcases.ttcn @@ -12,11 +12,24 @@ import from Shell all; type record of charstring CharstringList; +function f_compare_output_files(in CharstringList p_output_files, + in CharstringList p_exp_output_files) runs on Shell_CT +{ + var integer i; + for (i := 0; i < sizeof(p_output_files); i := i + 1) { + f_compareFiles(p_output_files[i], p_exp_output_files[i], 0); + if (getverdict != pass) { + action("Output file '" & p_output_files[i] & "' does not match the expected file '" & + p_exp_output_files[i] & "'"); + } + } +} + function f_test_profiler(in charstring p_target_file, in charstring p_config_file, in CharstringList p_output_files, in CharstringList p_exp_output_files) runs on Shell_CT { // make the target (the makefile must have a rule for it) - f_shellCommandWithVerdict("make " & p_target_file, "", c_shell_successWithoutWarningAndError); + f_shellCommandWithVerdict("make " & p_target_file, "", c_shell_successWithoutError); if (getverdict == pass) { // run the executable with the specified configuration file @@ -24,15 +37,7 @@ function f_test_profiler(in charstring p_target_file, in charstring p_config_fil c_shell_successWithoutWarningAndError); if (getverdict == pass) { - // compare the output files - var integer i; - for (i := 0; i < sizeof(p_output_files); i := i + 1) { - f_compareFiles(p_output_files[i], p_exp_output_files[i], 0); - if (getverdict != pass) { - action("Output file '" & p_output_files[i] & "' does not match the expected file '" & - p_exp_output_files[i] & "'"); - } - } + f_compare_output_files(p_output_files, p_exp_output_files); } else { action("Failed to run target '", p_target_file, "', with configuration file '", p_config_file, "'"); @@ -43,6 +48,20 @@ function f_test_profiler(in charstring p_target_file, in charstring p_config_fil } } +function f_test_profmerge(in charstring p_arguments, in CharstringList p_output_files, + in CharstringList p_exp_output_files) runs on Shell_CT +{ + // run the profmerge command + f_shellCommandWithVerdict("ttcn3_profmerge " & p_arguments, "", + c_shell_successWithoutWarningAndError); + if (getverdict == pass) { + f_compare_output_files(p_output_files, p_exp_output_files); + } + else { + action("Failed to run profmerge with arguments '", p_arguments, "'"); + } +} + testcase tc_coverage() runs on Shell_CT { // only code coverage is done in this case, since that is exact, and the results can be checked with @@ -65,10 +84,37 @@ testcase tc_profiling_and_coverage() runs on Shell_CT f_test_profiler("prof.exe", "prof3.cfg", { "empty.stats" }, { "empty_e.stats" } ); } +testcase tc_profmerge_double() runs on Shell_CT +{ + // the database file of the coverage-only test is merged with itself (values are doubled) + // the results can be compared, since they only contain coverage data and zero times + // all average time related statistics are filtered out (since they're all zeros), + // as well as all sorted statistics (since those are platform dependent) + f_test_profmerge("-s double.stats -o double.json -f 1800007 data.json data.json", + { "double.json", "double.stats" }, { "double_e.json", "double_e.stats" } ); +} + +testcase tc_profmerge_all() runs on Shell_CT +{ + // the database files of the 3 profiler tests are merged (values are again doubled) + // profiler data is discarded (-p), so the results can be compared + // (the output database is the same as the previous test, the statistics file is not, + // since it contains no time data instead of zero times) + f_test_profmerge("-p -o merged.json -s merged.stats -f 1800007 data.json data2.json data3.json", + { "merged.json", "merged.stats" }, { "double_e.json", "merged_e.stats" } ); +} + control { - execute(tc_coverage()); - execute(tc_profiling()); - execute(tc_profiling_and_coverage()); + // the profmerge tests require the output files generated by the profiler tests + var verdicttype vt1 := execute(tc_coverage()); + var verdicttype vt2 := execute(tc_profiling()); + var verdicttype vt3 := execute(tc_profiling_and_coverage()); + if (vt1 == pass) { + execute(tc_profmerge_double()); + } + if (vt1 == pass and vt2 == pass and vt3 == pass) { + execute(tc_profmerge_all()); + } } } diff --git a/regression_test/profiler/data_e.json b/regression_test/profiler/data_e.json index 4a1737eff..b972387bc 100644 --- a/regression_test/profiler/data_e.json +++ b/regression_test/profiler/data_e.json @@ -13,6 +13,12 @@ "start line" : 19, "execution count" : 1, "total time" : 0.000000 + }, + { + "name" : "control", + "start line" : 26, + "execution count" : 0, + "total time" : 0.000000 } ], "lines" : [ @@ -55,6 +61,16 @@ "number" : 23, "execution count" : 1, "total time" : 0.000000 + }, + { + "number" : 26, + "execution count" : 0, + "total time" : 0.000000 + }, + { + "number" : 27, + "execution count" : 0, + "total time" : 0.000000 } ] }, @@ -78,6 +94,12 @@ "start line" : 24, "execution count" : 1, "total time" : 0.000000 + }, + { + "name" : "control", + "start line" : 32, + "execution count" : 0, + "total time" : 0.000000 } ], "lines" : [ @@ -91,6 +113,11 @@ "execution count" : 2, "total time" : 0.000000 }, + { + "number" : 15, + "execution count" : 0, + "total time" : 0.000000 + }, { "number" : 18, "execution count" : 2, @@ -130,6 +157,16 @@ "number" : 29, "execution count" : 1, "total time" : 0.000000 + }, + { + "number" : 32, + "execution count" : 0, + "total time" : 0.000000 + }, + { + "number" : 33, + "execution count" : 0, + "total time" : 0.000000 } ] }, diff --git a/regression_test/profiler/double_e.json b/regression_test/profiler/double_e.json new file mode 100644 index 000000000..00826b51d --- /dev/null +++ b/regression_test/profiler/double_e.json @@ -0,0 +1,263 @@ +[ + { + "file" : "prof1.ttcn", + "functions" : [ + { + "name" : "f1", + "start line" : 15, + "execution count" : 6, + "total time" : 0.000000 + }, + { + "name" : "tc1", + "start line" : 19, + "execution count" : 2, + "total time" : 0.000000 + }, + { + "name" : "control", + "start line" : 26, + "execution count" : 0, + "total time" : 0.000000 + } + ], + "lines" : [ + { + "number" : 13, + "execution count" : 6, + "total time" : 0.000000 + }, + { + "number" : 15, + "execution count" : 6, + "total time" : 0.000000 + }, + { + "number" : 16, + "execution count" : 6, + "total time" : 0.000000 + }, + { + "number" : 19, + "execution count" : 2, + "total time" : 0.000000 + }, + { + "number" : 20, + "execution count" : 2, + "total time" : 0.000000 + }, + { + "number" : 21, + "execution count" : 2, + "total time" : 0.000000 + }, + { + "number" : 22, + "execution count" : 2, + "total time" : 0.000000 + }, + { + "number" : 23, + "execution count" : 2, + "total time" : 0.000000 + }, + { + "number" : 26, + "execution count" : 0, + "total time" : 0.000000 + }, + { + "number" : 27, + "execution count" : 0, + "total time" : 0.000000 + } + ] + }, + { + "file" : "prof2.ttcn", + "functions" : [ + { + "name" : "f2", + "start line" : 13, + "execution count" : 4, + "total time" : 0.000000 + }, + { + "name" : "t1", + "start line" : 22, + "execution count" : 2, + "total time" : 0.000000 + }, + { + "name" : "tc2", + "start line" : 24, + "execution count" : 2, + "total time" : 0.000000 + }, + { + "name" : "control", + "start line" : 32, + "execution count" : 0, + "total time" : 0.000000 + } + ], + "lines" : [ + { + "number" : 13, + "execution count" : 4, + "total time" : 0.000000 + }, + { + "number" : 14, + "execution count" : 4, + "total time" : 0.000000 + }, + { + "number" : 15, + "execution count" : 0, + "total time" : 0.000000 + }, + { + "number" : 18, + "execution count" : 4, + "total time" : 0.000000 + }, + { + "number" : 22, + "execution count" : 2, + "total time" : 0.000000 + }, + { + "number" : 24, + "execution count" : 2, + "total time" : 0.000000 + }, + { + "number" : 25, + "execution count" : 2, + "total time" : 0.000000 + }, + { + "number" : 26, + "execution count" : 2, + "total time" : 0.000000 + }, + { + "number" : 27, + "execution count" : 2, + "total time" : 0.000000 + }, + { + "number" : 28, + "execution count" : 2, + "total time" : 0.000000 + }, + { + "number" : 29, + "execution count" : 2, + "total time" : 0.000000 + }, + { + "number" : 32, + "execution count" : 0, + "total time" : 0.000000 + }, + { + "number" : 33, + "execution count" : 0, + "total time" : 0.000000 + } + ] + }, + { + "file" : "prof3.ttcn", + "functions" : [ + { + "name" : "f3", + "start line" : 14, + "execution count" : 2, + "total time" : 0.000000 + }, + { + "name" : "tc3", + "start line" : 21, + "execution count" : 2, + "total time" : 0.000000 + }, + { + "name" : "control", + "start line" : 31, + "execution count" : 2, + "total time" : 0.000000 + } + ], + "lines" : [ + { + "number" : 14, + "execution count" : 2, + "total time" : 0.000000 + }, + { + "number" : 16, + "execution count" : 2, + "total time" : 0.000000 + }, + { + "number" : 17, + "execution count" : 2, + "total time" : 0.000000 + }, + { + "number" : 18, + "execution count" : 2, + "total time" : 0.000000 + }, + { + "number" : 21, + "execution count" : 2, + "total time" : 0.000000 + }, + { + "number" : 23, + "execution count" : 2, + "total time" : 0.000000 + }, + { + "number" : 24, + "execution count" : 2, + "total time" : 0.000000 + }, + { + "number" : 25, + "execution count" : 2, + "total time" : 0.000000 + }, + { + "number" : 26, + "execution count" : 2, + "total time" : 0.000000 + }, + { + "number" : 27, + "execution count" : 2, + "total time" : 0.000000 + }, + { + "number" : 28, + "execution count" : 2, + "total time" : 0.000000 + }, + { + "number" : 31, + "execution count" : 2, + "total time" : 0.000000 + }, + { + "number" : 32, + "execution count" : 2, + "total time" : 0.000000 + } + ] + } +] diff --git a/regression_test/profiler/double_e.stats b/regression_test/profiler/double_e.stats new file mode 100644 index 000000000..f3770c8da --- /dev/null +++ b/regression_test/profiler/double_e.stats @@ -0,0 +1,84 @@ +################################################## +## TTCN-3 profiler and code coverage statistics ## +################################################## + + +-------------------------------------- +- Number of code lines and functions - +-------------------------------------- +prof1.ttcn: 10 lines, 3 functions +prof2.ttcn: 13 lines, 4 functions +prof3.ttcn: 13 lines, 3 functions +-------------------------------------- +Total: 36 lines, 10 functions + +------------------------------------------------- +- Code line data (total time / execution count) - +------------------------------------------------- +0.000000s / 6 prof1.ttcn:13 +0.000000s / 6 prof1.ttcn:15 [f1] +0.000000s / 6 prof1.ttcn:16 +0.000000s / 2 prof1.ttcn:19 [tc1] +0.000000s / 2 prof1.ttcn:20 +0.000000s / 2 prof1.ttcn:21 +0.000000s / 2 prof1.ttcn:22 +0.000000s / 2 prof1.ttcn:23 +------------------------------------------------- +0.000000s / 4 prof2.ttcn:13 [f2] +0.000000s / 4 prof2.ttcn:14 +0.000000s / 4 prof2.ttcn:18 +0.000000s / 2 prof2.ttcn:22 [t1] +0.000000s / 2 prof2.ttcn:24 [tc2] +0.000000s / 2 prof2.ttcn:25 +0.000000s / 2 prof2.ttcn:26 +0.000000s / 2 prof2.ttcn:27 +0.000000s / 2 prof2.ttcn:28 +0.000000s / 2 prof2.ttcn:29 +------------------------------------------------- +0.000000s / 2 prof3.ttcn:14 [f3] +0.000000s / 2 prof3.ttcn:16 +0.000000s / 2 prof3.ttcn:17 +0.000000s / 2 prof3.ttcn:18 +0.000000s / 2 prof3.ttcn:21 [tc3] +0.000000s / 2 prof3.ttcn:23 +0.000000s / 2 prof3.ttcn:24 +0.000000s / 2 prof3.ttcn:25 +0.000000s / 2 prof3.ttcn:26 +0.000000s / 2 prof3.ttcn:27 +0.000000s / 2 prof3.ttcn:28 +0.000000s / 2 prof3.ttcn:31 [control] +0.000000s / 2 prof3.ttcn:32 + +------------------------------------------------ +- Function data (total time / execution count) - +------------------------------------------------ +0.000000s / 6 prof1.ttcn:15 [f1] +0.000000s / 2 prof1.ttcn:19 [tc1] +------------------------------------------------ +0.000000s / 4 prof2.ttcn:13 [f2] +0.000000s / 2 prof2.ttcn:22 [t1] +0.000000s / 2 prof2.ttcn:24 [tc2] +------------------------------------------------ +0.000000s / 2 prof3.ttcn:14 [f3] +0.000000s / 2 prof3.ttcn:21 [tc3] +0.000000s / 2 prof3.ttcn:31 [control] + +--------------------- +- Unused code lines - +--------------------- +prof1.ttcn:26 [control] +prof1.ttcn:27 +--------------------- +prof2.ttcn:15 +prof2.ttcn:32 [control] +prof2.ttcn:33 +--------------------- + +-------------------- +- Unused functions - +-------------------- +prof1.ttcn:26 [control] +-------------------- +prof2.ttcn:32 [control] +-------------------- + diff --git a/regression_test/profiler/merged_e.stats b/regression_test/profiler/merged_e.stats new file mode 100644 index 000000000..240fd3e68 --- /dev/null +++ b/regression_test/profiler/merged_e.stats @@ -0,0 +1,84 @@ +################################################## +######### TTCN-3 code coverage statistics ######## +################################################## + + +-------------------------------------- +- Number of code lines and functions - +-------------------------------------- +prof1.ttcn: 10 lines, 3 functions +prof2.ttcn: 13 lines, 4 functions +prof3.ttcn: 13 lines, 3 functions +-------------------------------------- +Total: 36 lines, 10 functions + +------------------------------------------------- +-------- Code line data (execution count) ------- +------------------------------------------------- +6 prof1.ttcn:13 +6 prof1.ttcn:15 [f1] +6 prof1.ttcn:16 +2 prof1.ttcn:19 [tc1] +2 prof1.ttcn:20 +2 prof1.ttcn:21 +2 prof1.ttcn:22 +2 prof1.ttcn:23 +------------------------------------------------- +4 prof2.ttcn:13 [f2] +4 prof2.ttcn:14 +4 prof2.ttcn:18 +2 prof2.ttcn:22 [t1] +2 prof2.ttcn:24 [tc2] +2 prof2.ttcn:25 +2 prof2.ttcn:26 +2 prof2.ttcn:27 +2 prof2.ttcn:28 +2 prof2.ttcn:29 +------------------------------------------------- +2 prof3.ttcn:14 [f3] +2 prof3.ttcn:16 +2 prof3.ttcn:17 +2 prof3.ttcn:18 +2 prof3.ttcn:21 [tc3] +2 prof3.ttcn:23 +2 prof3.ttcn:24 +2 prof3.ttcn:25 +2 prof3.ttcn:26 +2 prof3.ttcn:27 +2 prof3.ttcn:28 +2 prof3.ttcn:31 [control] +2 prof3.ttcn:32 + +------------------------------------------------ +-------- Function data (execution count) ------- +------------------------------------------------ +6 prof1.ttcn:15 [f1] +2 prof1.ttcn:19 [tc1] +------------------------------------------------ +4 prof2.ttcn:13 [f2] +2 prof2.ttcn:22 [t1] +2 prof2.ttcn:24 [tc2] +------------------------------------------------ +2 prof3.ttcn:14 [f3] +2 prof3.ttcn:21 [tc3] +2 prof3.ttcn:31 [control] + +--------------------- +- Unused code lines - +--------------------- +prof1.ttcn:26 [control] +prof1.ttcn:27 +--------------------- +prof2.ttcn:15 +prof2.ttcn:32 [control] +prof2.ttcn:33 +--------------------- + +-------------------- +- Unused functions - +-------------------- +prof1.ttcn:26 [control] +-------------------- +prof2.ttcn:32 [control] +-------------------- + diff --git a/regression_test/profiler/prof2.cfg b/regression_test/profiler/prof2.cfg index f0c7c0c8a..26585dc32 100644 --- a/regression_test/profiler/prof2.cfg +++ b/regression_test/profiler/prof2.cfg @@ -12,7 +12,7 @@ prof3.control [PROFILER] DisableProfiler := false DisableCoverage := true -DatabaseFile := "data.json" +DatabaseFile := "data2.json" AggregateData := true DisableStatistics := true [LOGGING] diff --git a/regression_test/profiler/prof3.cfg b/regression_test/profiler/prof3.cfg index 20bab99b1..e9d60f31f 100644 --- a/regression_test/profiler/prof3.cfg +++ b/regression_test/profiler/prof3.cfg @@ -12,7 +12,7 @@ prof3.control [PROFILER] DisableProfiler := false DisableCoverage := false -DatabaseFile := "data.json" +DatabaseFile := "data3.json" AggregateData := false StatisticsFile := "empty.stats" DisableStatistics := false diff --git a/regression_test/recofOper/BerType.asn b/regression_test/recofOper/BerType.asn index d76ad2fe6..0d1c39060 100644 --- a/regression_test/recofOper/BerType.asn +++ b/regression_test/recofOper/BerType.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/recofOper/Circular1.ttcn b/regression_test/recofOper/Circular1.ttcn new file mode 100644 index 000000000..de8852001 --- /dev/null +++ b/regression_test/recofOper/Circular1.ttcn @@ -0,0 +1,22 @@ +/****************************************************************************** + * Copyright (c) 2000-2015 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 + ******************************************************************************/ + +module Circular1 { + +// testing pre-generated record of/set of types with circular import (HT95344) +// modules Circular1 and Circular2 import each other +// type CharstringList is defined in Circular2 and used here +// (only compilation and the C++ build are tested) +import from Circular2 all; + +function f_dummy(CharstringList p_param) +{ + log(p_param); +} + +} diff --git a/regression_test/recofOper/Circular2.ttcn b/regression_test/recofOper/Circular2.ttcn new file mode 100644 index 000000000..a4ff0850b --- /dev/null +++ b/regression_test/recofOper/Circular2.ttcn @@ -0,0 +1,17 @@ +/****************************************************************************** + * Copyright (c) 2000-2015 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 + ******************************************************************************/ + +module Circular2 { + +// nothing is actually used from module Circular1, this is only here to test +// pre-generated record of/set of types in circularly imported modules +import from Circular1 all; + +type record of charstring CharstringList; + +} diff --git a/regression_test/recofOper/Makefile b/regression_test/recofOper/Makefile index f4afb600b..199bf83f7 100644 --- a/regression_test/recofOper/Makefile +++ b/regression_test/recofOper/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 @@ -13,7 +13,7 @@ include $(TOPDIR)/Makefile.regression TTCN3_LIB = ttcn3$(RT2_SUFFIX)$(DYNAMIC_SUFFIX) -TTCN3_MODULES = TrecofOper.ttcn TrecofCompat.ttcn +TTCN3_MODULES = TrecofOper.ttcn TrecofCompat.ttcn Circular1.ttcn Circular2.ttcn ifdef RT2 TTCN3_MODULES += TrecofParamRef.ttcn ASN1_MODULES = BerType.asn diff --git a/regression_test/recofOper/TrecofOper.ttcn b/regression_test/recofOper/TrecofOper.ttcn index 364528991..284b29f59 100644 --- a/regression_test/recofOper/TrecofOper.ttcn +++ b/regression_test/recofOper/TrecofOper.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/recofOper/TrecofParamRef.ttcn b/regression_test/recofOper/TrecofParamRef.ttcn index 0485ee9a7..cdb1d6017 100644 --- a/regression_test/recofOper/TrecofParamRef.ttcn +++ b/regression_test/recofOper/TrecofParamRef.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/recofOper/config.cfg b/regression_test/recofOper/config.cfg index 0cbecade1..b38cbd24c 100644 --- a/regression_test/recofOper/config.cfg +++ b/regression_test/recofOper/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/recordOper/Makefile b/regression_test/recordOper/Makefile index fe76ea039..5be636638 100644 --- a/regression_test/recordOper/Makefile +++ b/regression_test/recordOper/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/recordOper/TrecordOper.ttcn b/regression_test/recordOper/TrecordOper.ttcn index cc37d83e8..8e35633ce 100644 --- a/regression_test/recordOper/TrecordOper.ttcn +++ b/regression_test/recordOper/TrecordOper.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/recordOper/config.cfg b/regression_test/recordOper/config.cfg index 24d589144..40cb419a2 100644 --- a/regression_test/recordOper/config.cfg +++ b/regression_test/recordOper/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/setOper/Makefile b/regression_test/setOper/Makefile index 8523c2011..feeb34fed 100644 --- a/regression_test/setOper/Makefile +++ b/regression_test/setOper/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/setOper/TsetOper.ttcn b/regression_test/setOper/TsetOper.ttcn index 099697e0d..f29f144f8 100644 --- a/regression_test/setOper/TsetOper.ttcn +++ b/regression_test/setOper/TsetOper.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/setOper/config.cfg b/regression_test/setOper/config.cfg index 6c1337b5b..6fd25be0d 100644 --- a/regression_test/setOper/config.cfg +++ b/regression_test/setOper/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/setofMatch/Makefile b/regression_test/setofMatch/Makefile index e8c3445bf..c429272c3 100644 --- a/regression_test/setofMatch/Makefile +++ b/regression_test/setofMatch/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/setofMatch/TsetofMatch.ttcn b/regression_test/setofMatch/TsetofMatch.ttcn index 9f5cd8bfb..c6d05bbcb 100644 --- a/regression_test/setofMatch/TsetofMatch.ttcn +++ b/regression_test/setofMatch/TsetofMatch.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/setofMatch/config.cfg b/regression_test/setofMatch/config.cfg index 07fe5e1b5..e3afff69c 100644 --- a/regression_test/setofMatch/config.cfg +++ b/regression_test/setofMatch/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/setofOper/Makefile b/regression_test/setofOper/Makefile index f0fbbd687..9d22c745e 100644 --- a/regression_test/setofOper/Makefile +++ b/regression_test/setofOper/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/setofOper/TsetofOper.ttcn b/regression_test/setofOper/TsetofOper.ttcn index 7352b0ac2..a776233b7 100644 --- a/regression_test/setofOper/TsetofOper.ttcn +++ b/regression_test/setofOper/TsetofOper.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/setofOper/config.cfg b/regression_test/setofOper/config.cfg index 59075f2a9..0b1d9efa5 100644 --- a/regression_test/setofOper/config.cfg +++ b/regression_test/setofOper/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/singlecontrol/Makefile b/regression_test/singlecontrol/Makefile index a7ad92101..d1bde4180 100644 --- a/regression_test/singlecontrol/Makefile +++ b/regression_test/singlecontrol/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/singlecontrol/alsohascontrolpart.ttcn b/regression_test/singlecontrol/alsohascontrolpart.ttcn index 84f4cede3..d033cbdb8 100644 --- a/regression_test/singlecontrol/alsohascontrolpart.ttcn +++ b/regression_test/singlecontrol/alsohascontrolpart.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/singlecontrol/config.cfg b/regression_test/singlecontrol/config.cfg index aa369eed5..a05142895 100644 --- a/regression_test/singlecontrol/config.cfg +++ b/regression_test/singlecontrol/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/singlecontrol/config1.cfg b/regression_test/singlecontrol/config1.cfg index 1baf5d9f3..009e88d82 100644 --- a/regression_test/singlecontrol/config1.cfg +++ b/regression_test/singlecontrol/config1.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/singlecontrol/config2.cfg b/regression_test/singlecontrol/config2.cfg index 1243920aa..c626cd18a 100644 --- a/regression_test/singlecontrol/config2.cfg +++ b/regression_test/singlecontrol/config2.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/singlecontrol/config_noexec.cfg b/regression_test/singlecontrol/config_noexec.cfg index bfb57da60..0b2d53cb2 100644 --- a/regression_test/singlecontrol/config_noexec.cfg +++ b/regression_test/singlecontrol/config_noexec.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/singlecontrol/hascontrolpart.ttcn b/regression_test/singlecontrol/hascontrolpart.ttcn index d7ebbdd65..0b8f28776 100644 --- a/regression_test/singlecontrol/hascontrolpart.ttcn +++ b/regression_test/singlecontrol/hascontrolpart.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/singlecontrol/nocontrolpart.ttcn b/regression_test/singlecontrol/nocontrolpart.ttcn index 8a1b2a0ee..37283deff 100644 --- a/regression_test/singlecontrol/nocontrolpart.ttcn +++ b/regression_test/singlecontrol/nocontrolpart.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/singlecontrol/ouch.cfg b/regression_test/singlecontrol/ouch.cfg index 9092116cb..08fb70f8b 100644 --- a/regression_test/singlecontrol/ouch.cfg +++ b/regression_test/singlecontrol/ouch.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/slider/Makefile b/regression_test/slider/Makefile index 2ab010390..a21a00308 100644 --- a/regression_test/slider/Makefile +++ b/regression_test/slider/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/slider/PT1.cc b/regression_test/slider/PT1.cc index dba722c28..610ea24a3 100644 --- a/regression_test/slider/PT1.cc +++ b/regression_test/slider/PT1.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/slider/PT1.hh b/regression_test/slider/PT1.hh index 113338062..a19c7dfdc 100644 --- a/regression_test/slider/PT1.hh +++ b/regression_test/slider/PT1.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/slider/UNDER.cc b/regression_test/slider/UNDER.cc index 0d855770c..065a43fc3 100644 --- a/regression_test/slider/UNDER.cc +++ b/regression_test/slider/UNDER.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/slider/UNDER.hh b/regression_test/slider/UNDER.hh index 6c90ec4af..ba96969e4 100644 --- a/regression_test/slider/UNDER.hh +++ b/regression_test/slider/UNDER.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/slider/dual.ttcn b/regression_test/slider/dual.ttcn index ccf271bd9..807482cb2 100644 --- a/regression_test/slider/dual.ttcn +++ b/regression_test/slider/dual.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/slider/dual2.ttcn b/regression_test/slider/dual2.ttcn index 84c32df9a..688005175 100644 --- a/regression_test/slider/dual2.ttcn +++ b/regression_test/slider/dual2.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/slider/dualnegtest.ttcn b/regression_test/slider/dualnegtest.ttcn index 28bb64ae5..85c344da9 100644 --- a/regression_test/slider/dualnegtest.ttcn +++ b/regression_test/slider/dualnegtest.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/slider/run.cfg b/regression_test/slider/run.cfg index d08bd7d90..380a50761 100644 --- a/regression_test/slider/run.cfg +++ b/regression_test/slider/run.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/slider/slider.ttcn b/regression_test/slider/slider.ttcn index eb3796723..f75665a53 100644 --- a/regression_test/slider/slider.ttcn +++ b/regression_test/slider/slider.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/templateAnytype/Makefile b/regression_test/templateAnytype/Makefile index b84faf2c4..15a561f24 100644 --- a/regression_test/templateAnytype/Makefile +++ b/regression_test/templateAnytype/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/templateAnytype/TtemplateAnytype.ttcn b/regression_test/templateAnytype/TtemplateAnytype.ttcn index a88b04786..4cdffce6c 100644 --- a/regression_test/templateAnytype/TtemplateAnytype.ttcn +++ b/regression_test/templateAnytype/TtemplateAnytype.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/templateAnytype/config.cfg b/regression_test/templateAnytype/config.cfg index cc0f60ab4..3187a5c1d 100644 --- a/regression_test/templateAnytype/config.cfg +++ b/regression_test/templateAnytype/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/templateBitstr/Makefile b/regression_test/templateBitstr/Makefile index d122b64b3..582e6a437 100644 --- a/regression_test/templateBitstr/Makefile +++ b/regression_test/templateBitstr/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/templateBitstr/TtemplateBitstr.ttcn b/regression_test/templateBitstr/TtemplateBitstr.ttcn index 2911c0615..9d239af82 100644 --- a/regression_test/templateBitstr/TtemplateBitstr.ttcn +++ b/regression_test/templateBitstr/TtemplateBitstr.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/templateBitstr/config.cfg b/regression_test/templateBitstr/config.cfg index 26752ad7d..588e2ce10 100644 --- a/regression_test/templateBitstr/config.cfg +++ b/regression_test/templateBitstr/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/templateBool/Makefile b/regression_test/templateBool/Makefile index b251fa13a..2bffb7460 100644 --- a/regression_test/templateBool/Makefile +++ b/regression_test/templateBool/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/templateBool/TtemplateBool.ttcn b/regression_test/templateBool/TtemplateBool.ttcn index 3c8d523aa..2a929b75b 100644 --- a/regression_test/templateBool/TtemplateBool.ttcn +++ b/regression_test/templateBool/TtemplateBool.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/templateBool/config.cfg b/regression_test/templateBool/config.cfg index 7dcdb8842..abf7c3f4e 100644 --- a/regression_test/templateBool/config.cfg +++ b/regression_test/templateBool/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/templateChar/Makefile b/regression_test/templateChar/Makefile index 9eebaf903..006a87703 100644 --- a/regression_test/templateChar/Makefile +++ b/regression_test/templateChar/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/templateChar/TtemplateChar.ttcn b/regression_test/templateChar/TtemplateChar.ttcn index 392023bc5..1c9dd84de 100644 --- a/regression_test/templateChar/TtemplateChar.ttcn +++ b/regression_test/templateChar/TtemplateChar.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/templateChar/config.cfg b/regression_test/templateChar/config.cfg index 2ec734c6c..f5b682905 100644 --- a/regression_test/templateChar/config.cfg +++ b/regression_test/templateChar/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/templateCharstr/Makefile b/regression_test/templateCharstr/Makefile index 038b92e1a..447829c4d 100644 --- a/regression_test/templateCharstr/Makefile +++ b/regression_test/templateCharstr/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/templateCharstr/TtemplateCharstr.ttcn b/regression_test/templateCharstr/TtemplateCharstr.ttcn index 70f3c2129..b91d83867 100644 --- a/regression_test/templateCharstr/TtemplateCharstr.ttcn +++ b/regression_test/templateCharstr/TtemplateCharstr.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/templateCharstr/config.cfg b/regression_test/templateCharstr/config.cfg index ab86c70a4..b16bf8eef 100644 --- a/regression_test/templateCharstr/config.cfg +++ b/regression_test/templateCharstr/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/templateEnum/Makefile b/regression_test/templateEnum/Makefile index d734f9cea..30d908df6 100644 --- a/regression_test/templateEnum/Makefile +++ b/regression_test/templateEnum/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/templateEnum/TtemplateEnum.ttcn b/regression_test/templateEnum/TtemplateEnum.ttcn index 93925006e..4cff88442 100644 --- a/regression_test/templateEnum/TtemplateEnum.ttcn +++ b/regression_test/templateEnum/TtemplateEnum.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/templateEnum/config.cfg b/regression_test/templateEnum/config.cfg index a36dde074..5bcd6b3a2 100644 --- a/regression_test/templateEnum/config.cfg +++ b/regression_test/templateEnum/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/templateFloat/Makefile b/regression_test/templateFloat/Makefile index ecdc49223..8a5a9c7e6 100644 --- a/regression_test/templateFloat/Makefile +++ b/regression_test/templateFloat/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/templateFloat/TtemplateFloat.ttcn b/regression_test/templateFloat/TtemplateFloat.ttcn index 4892c1d02..33fce8028 100644 --- a/regression_test/templateFloat/TtemplateFloat.ttcn +++ b/regression_test/templateFloat/TtemplateFloat.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 @@ -55,6 +55,10 @@ template templateFloat_rec templateFloat_tIfpresent :={ //specific value and ifp x1:=1.1, x2:=2.1, x3:=3.1 ifpresent }; + +template float templateFloat_tNaN := not_a_number; +template float templateFloat_tPosInf := infinity; +template float templateFloat_tNegInf := -infinity; testcase templateFloatSpec() runs on templateFloat_mycomp { var templateFloat_rec x1,x2; //specific value @@ -232,6 +236,21 @@ if (not(match(x4,templateFloat_tIfpresent))) {setverdict(pass);} else {setverdict(fail);} } +testcase templateFloatSpecialValues() runs on templateFloat_mycomp { + var float v_nan := not_a_number; + var float v_pos_inf := infinity; + var float v_neg_inf := -infinity; + + if (match(v_nan, templateFloat_tNaN)) { setverdict(pass); } + else { setverdict(fail, "not_a_number should match itself"); } + + if (match(v_pos_inf, templateFloat_tPosInf)) { setverdict(pass); } + else { setverdict(fail, "infinity should match itself"); } + + if (match(v_neg_inf, templateFloat_tNegInf)) { setverdict(pass); } + else { setverdict(fail, "-infinity should match itself"); } +} + control { execute(templateFloatSpec()); execute(templateFloatList()); @@ -244,5 +263,6 @@ control { execute(templateFloatRange3()); execute(templateFloatRange4()); execute(templateFloatIfpresent()); + execute(templateFloatSpecialValues()); } } diff --git a/regression_test/templateFloat/config.cfg b/regression_test/templateFloat/config.cfg index 98ee3f27a..d5f1f6a52 100644 --- a/regression_test/templateFloat/config.cfg +++ b/regression_test/templateFloat/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/templateInt/Makefile b/regression_test/templateInt/Makefile index 33dfd099d..0080b6751 100644 --- a/regression_test/templateInt/Makefile +++ b/regression_test/templateInt/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/templateInt/TtemplateInt.ttcn b/regression_test/templateInt/TtemplateInt.ttcn index 8d16448fe..26341104e 100644 --- a/regression_test/templateInt/TtemplateInt.ttcn +++ b/regression_test/templateInt/TtemplateInt.ttcn @@ -1,16 +1,19 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 ******************************************************************************/ module TtemplateInt { + type component templateInt_mycomp {}; type record templateInt_rec { integer x1, integer x2, integer x3 optional }; +type integer templateInt_subtype (0..1457664); + template templateInt_rec templateInt_tSpec :={ //specific values x1:=1, x2:=2, @@ -258,6 +261,33 @@ testcase TR_HJ94652() runs on templateInt_mycomp { } } +testcase templateIntSubtype() runs on templateInt_mycomp { + // this tests the use of inline templates (value ranges) + // with subtypes and variables + var templateInt_subtype x := 312; + var templateInt_subtype lower_limit := 100; + var templateInt_subtype upper_limit := 65535; + if (not match(x, templateInt_subtype:(0..upper_limit))) { // TR: artf602477 + setverdict(fail); + } + if (not match(x, integer:(100..upper_limit))) { + setverdict(fail); + } + if (not match(312, templateInt_subtype:(100..upper_limit))) { + setverdict(fail); + } + if (not match(x, templateInt_subtype:(100..65535))) { + setverdict(fail); + } + if (not match(x, templateInt_subtype:(lower_limit..65535))) { + setverdict(fail); + } + if (not match(x, templateInt_subtype:(lower_limit..upper_limit))) { + setverdict(fail); + } + setverdict(pass); +} + control { execute(templateIntSpec()); execute(templateIntList()); @@ -271,5 +301,6 @@ control { execute(templateIntRange4()); execute(templateIntIfpresent()); execute(TR_HJ94652()); + execute(templateIntSubtype()); } } diff --git a/regression_test/templateInt/config.cfg b/regression_test/templateInt/config.cfg index 6862ad9b4..bc38a589c 100644 --- a/regression_test/templateInt/config.cfg +++ b/regression_test/templateInt/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/templateOctetstr/Makefile b/regression_test/templateOctetstr/Makefile index 9114b83b6..3b3ae0a14 100644 --- a/regression_test/templateOctetstr/Makefile +++ b/regression_test/templateOctetstr/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/templateOctetstr/TtemplateOctetstr.ttcn b/regression_test/templateOctetstr/TtemplateOctetstr.ttcn index 8d4bad34a..a9204775b 100644 --- a/regression_test/templateOctetstr/TtemplateOctetstr.ttcn +++ b/regression_test/templateOctetstr/TtemplateOctetstr.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/templateOctetstr/config.cfg b/regression_test/templateOctetstr/config.cfg index 1306cddfa..c1cb97ee9 100644 --- a/regression_test/templateOctetstr/config.cfg +++ b/regression_test/templateOctetstr/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/templateOmit/Common/Templates.ttcn b/regression_test/templateOmit/Common/Templates.ttcn new file mode 100644 index 000000000..7cb58c379 --- /dev/null +++ b/regression_test/templateOmit/Common/Templates.ttcn @@ -0,0 +1,51 @@ +/****************************************************************************** + * Copyright (c) 2000-2015 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 + ******************************************************************************/ + +module Templates { + +import from Types all; + +/* * * * Templates * * * */ +template integer t_int_value_list := ( 1, 3, 5, 7 ); +template integer t_int_comp_list := complement ( 2, 4, 6, 8 ); + +template charstring t_char_value_list := ( "a", "aa", "aaa" ); +template charstring t_char_comp_list := complement ( "b", "bb", "bbb" ); + +template Rec t_rec_value_list := ( { 3.0, '03'O }, { 1.0, '01'O } ); +template Rec t_rec_comp_list := complement ( { 2.0, '02'O }, { 4.0, '04'O } ); + +template SoBS t_setof_value_list := ( { '1'B, '10'B, '11'B }, { '100'B, '101'B, '110'B } ); +template SoBS t_setof_comp_list := complement ( { '111'B, '1110'B, '1111'B }, { '100'B, '101'B, '110'B } ); + +template Uni t_uni_value_list := ( { b := true }, { hs := 'DEADBEEF'H }, { ucs := "x" }, { vt := fail } ); +template Uni t_uni_comp_list := complement ( { b := false }, { hs := 'DEADBEEF'H }, { ucs := "x" }, { vt := fail } ); + +template Enum t_enum_value_list := ( First, Second ); +template Enum t_enum_comp_list := complement ( Second, Third ); + +template Everything t_every_value_list := { t_int_value_list, t_char_value_list, t_rec_value_list, t_setof_value_list, t_uni_value_list, t_enum_value_list }; +template Everything t_every_comp_list := { t_int_comp_list, t_char_comp_list, t_rec_comp_list, t_setof_comp_list, t_uni_comp_list, t_enum_comp_list }; + +/* * * * Test values * * * */ +const Everything c_int_omitted := { omit, "a", { 1.0, '01'O }, { '1'B, '10'B, '11'B }, { b := true }, First }; +const Everything c_char_omitted := { 3, omit, { 1.0, '01'O }, { '1'B, '10'B, '11'B }, { b := true }, First }; +const Everything c_rec_omitted := { 3, "a", omit, { '1'B, '10'B, '11'B }, { b := true }, First }; +const Everything c_setof_omitted := { 3, "a", { 1.0, '01'O }, omit, { b := true }, First }; +const Everything c_uni_omitted := { 3, "a", { 1.0, '01'O }, { '1'B, '10'B, '11'B }, omit, First }; +const Everything c_enum_omitted := { 3, "a", { 1.0, '01'O }, { '1'B, '10'B, '11'B }, { b := true }, omit }; + +// Template for matching the result of a logged matching :) +template charstring t_unmatched := pattern "*unmatched*"; + +// Error signal template +// (this is sent as the reply's 'out' parameter when 'getcall' fails, +// it is also used in the 'getreply' operations to match error signals) +template Everything t_bad_call := { -1, ? /* will contain the error message */, { -1.0, ''O }, {}, { b := false }, First }; + +} diff --git a/regression_test/templateOmit/Common/Types.ttcn b/regression_test/templateOmit/Common/Types.ttcn new file mode 100644 index 000000000..fdb254569 --- /dev/null +++ b/regression_test/templateOmit/Common/Types.ttcn @@ -0,0 +1,53 @@ +/****************************************************************************** + * Copyright (c) 2000-2015 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 + ******************************************************************************/ + +module Types { + +type record Rec { + float num, + octetstring bytes +} + +type set of bitstring SoBS; + +type union Uni { + boolean b, + hexstring hs, + universal charstring ucs, + verdicttype vt +} + +type enumerated Enum { First, Second, Third }; + +type record Everything { + integer i optional, + charstring cs optional, + Rec rec optional, + SoBS setof optional, + Uni uni optional, + Enum enum_ optional +} + +signature Sig(in Everything p_in, out Everything p_out) exception (Everything); + +type port PT_Proc procedure { + inout Sig +} +with { extension "internal" } + +type port PT_Msg message { + inout Everything +} +with { extension "internal" } + +type component CT { + port PT_Proc proc; + port PT_Msg msg; +} + +} diff --git a/regression_test/templateOmit/LegacyTests/LegacyTestcases.ttcn b/regression_test/templateOmit/LegacyTests/LegacyTestcases.ttcn new file mode 100644 index 000000000..866571726 --- /dev/null +++ b/regression_test/templateOmit/LegacyTests/LegacyTestcases.ttcn @@ -0,0 +1,529 @@ +/****************************************************************************** + * Copyright (c) 2000-2015 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 + ******************************************************************************/ + +module LegacyTestcases { +// This module contains tests related to the matching of omitted fields. +// Legacy behavior (before change request artf564824): +// - 'omit' can be used in value list and complement list templates +// e.g.: 't := (1, 2, omit)' and 't := complement(1, 2, omit)' are allowed +// - a value list template only matches the value 'omit', if the value list +// contains this value +// - a complement list template always matches the value 'omit', unless +// the complement list contains this value +// Note: this behavior requires compiler option -M + +import from Types all; +import from Templates all; + +// Testing the matching of an omitted field +// A different field is omitted in each of the 6 values. +// The value list template should not match any of the values. +// The complement list template should match all 6 values. +testcase tc_match_omit_legacy() runs on CT +{ + if (match(c_int_omitted, t_every_value_list)) { + setverdict(fail, c_int_omitted, " should not match ", t_every_value_list); + } + if (not match(c_int_omitted, t_every_comp_list)) { + setverdict(fail, c_int_omitted, " should match ", t_every_comp_list); + } + if (match(c_char_omitted, t_every_value_list)) { + setverdict(fail, c_char_omitted, " should not match ", t_every_value_list); + } + if (not match(c_char_omitted, t_every_comp_list)) { + setverdict(fail, c_char_omitted, " should match ", t_every_comp_list); + } + if (match(c_rec_omitted, t_every_value_list)) { + setverdict(fail, c_rec_omitted, " should not match ", t_every_value_list); + } + if (not match(c_rec_omitted, t_every_comp_list)) { + setverdict(fail, c_rec_omitted, " should match ", t_every_comp_list); + } + if (match(c_setof_omitted, t_every_value_list)) { + setverdict(fail, c_setof_omitted, " should not match ", t_every_value_list); + } + if (not match(c_setof_omitted, t_every_comp_list)) { + setverdict(fail, c_setof_omitted, " should match ", t_every_comp_list); + } + if (match(c_uni_omitted, t_every_value_list)) { + setverdict(fail, c_uni_omitted, " should not match ", t_every_value_list); + } + if (not match(c_uni_omitted, t_every_comp_list)) { + setverdict(fail, c_uni_omitted, " should match ", t_every_comp_list); + } + if (match(c_enum_omitted, t_every_value_list)) { + setverdict(fail, c_enum_omitted, " should not match ", t_every_value_list); + } + if (not match(c_enum_omitted, t_every_comp_list)) { + setverdict(fail, c_enum_omitted, " should match ", t_every_comp_list); + } + setverdict(pass); +} + +// Testing the 'ispresent' clause on templates +// The value list templates are 'present', as these do not match the 'omit' value. +// The complement list templates are not 'present'. +testcase tc_ispresent_legacy() runs on CT +{ + if (not ispresent(t_int_value_list)) { + setverdict(fail, t_int_value_list, " should be present"); + } + if (not ispresent(t_char_value_list)) { + setverdict(fail, t_char_value_list, " should be present"); + } + if (not ispresent(t_rec_value_list)) { + setverdict(fail, t_rec_value_list, " should be present"); + } + if (not ispresent(t_setof_value_list)) { + setverdict(fail, t_setof_value_list, " should be present"); + } + if (not ispresent(t_uni_value_list)) { + setverdict(fail, t_uni_value_list, " should be present"); + } + if (not ispresent(t_enum_value_list)) { + setverdict(fail, t_enum_value_list, " should be present"); + } + if (ispresent(t_int_comp_list)) { + setverdict(fail, t_int_comp_list, " should not be present"); + } + if (ispresent(t_char_comp_list)) { + setverdict(fail, t_char_comp_list, " should not be present"); + } + if (ispresent(t_rec_comp_list)) { + setverdict(fail, t_rec_comp_list, " should not be present"); + } + if (ispresent(t_setof_comp_list)) { + setverdict(fail, t_setof_comp_list, " should not be present"); + } + if (ispresent(t_uni_comp_list)) { + setverdict(fail, t_uni_comp_list, " should not be present"); + } + if (ispresent(t_enum_comp_list)) { + setverdict(fail, t_enum_comp_list, " should not be present"); + } + setverdict(pass); +} + +// Testing the logging of matching an omitted field +// The results should be the same as with the matching tests +// (this is needed, because a different function is called when logging a match operation) +testcase tc_log_match_legacy() runs on CT +{ + // omitted integer + var charstring v_log_match_res := log2str(match(c_int_omitted, t_every_value_list)); + if (not match(v_log_match_res, t_unmatched)) { + setverdict(fail, c_int_omitted, " should not match ", t_every_value_list); + } + v_log_match_res := log2str(match(c_int_omitted, t_every_comp_list)); + if (match(v_log_match_res, t_unmatched)) { + setverdict(fail, c_int_omitted, " should match ", t_every_comp_list); + } + + // omitted charstring + v_log_match_res := log2str(match(c_char_omitted, t_every_value_list)); + if (not match(v_log_match_res, t_unmatched)) { + setverdict(fail, c_char_omitted, " should not match ", t_every_value_list); + } + v_log_match_res := log2str(match(c_char_omitted, t_every_comp_list)); + if (match(v_log_match_res, t_unmatched)) { + setverdict(fail, c_char_omitted, " should match ", t_every_comp_list); + } + + // omitted record + v_log_match_res := log2str(match(c_rec_omitted, t_every_value_list)); + if (not match(v_log_match_res, t_unmatched)) { + setverdict(fail, c_rec_omitted, " should not match ", t_every_value_list); + } + v_log_match_res := log2str(match(c_rec_omitted, t_every_comp_list)); + if (match(v_log_match_res, t_unmatched)) { + setverdict(fail, c_rec_omitted, " should match ", t_every_comp_list); + } + + // omitted set of + v_log_match_res := log2str(match(c_setof_omitted, t_every_value_list)); + if (not match(v_log_match_res, t_unmatched)) { + setverdict(fail, c_setof_omitted, " should not match ", t_every_value_list); + } + v_log_match_res := log2str(match(c_setof_omitted, t_every_comp_list)); + if (match(v_log_match_res, t_unmatched)) { + setverdict(fail, c_setof_omitted, " should match ", t_every_comp_list); + } + + // omitted union + v_log_match_res := log2str(match(c_uni_omitted, t_every_value_list)); + if (not match(v_log_match_res, t_unmatched)) { + setverdict(fail, c_uni_omitted, " should not match ", t_every_value_list); + } + v_log_match_res := log2str(match(c_uni_omitted, t_every_comp_list)); + if (match(v_log_match_res, t_unmatched)) { + setverdict(fail, c_uni_omitted, " should match ", t_every_comp_list); + } + + // omitted enumerated + v_log_match_res := log2str(match(c_enum_omitted, t_every_value_list)); + if (not match(v_log_match_res, t_unmatched)) { + setverdict(fail, c_enum_omitted, " should not match ", t_every_value_list); + } + v_log_match_res := log2str(match(c_enum_omitted, t_every_comp_list)); + if (match(v_log_match_res, t_unmatched)) { + setverdict(fail, c_enum_omitted, " should match ", t_every_comp_list); + } + setverdict(pass); +} + +// Testing the 'omit' value in a template's value list and complement list +testcase tc_omit_in_value_list_legacy() runs on CT +{ + // template + template integer t_int_value_list_omit := ( 1, 3, 5, 7, omit ); + template integer t_int_comp_list_omit := complement ( 2, 4, 6, 8, omit ); + + template charstring t_char_value_list_omit := ( "a", "aa", "aaa", omit ); + template charstring t_char_comp_list_omit := complement ( "b", "bb", "bbb", omit ); + + template Rec t_rec_value_list_omit := ( { 3.0, '03'O }, { 1.0, '01'O }, omit ); + template Rec t_rec_comp_list_omit := complement ( { 2.0, '02'O }, { 4.0, '04'O }, omit ); + + template SoBS t_setof_value_list_omit := ( { '1'B, '10'B, '11'B }, { '100'B, '101'B, '110'B }, omit ); + template SoBS t_setof_comp_list_omit := complement ( { '111'B, '1110'B, '1111'B }, { '100'B, '101'B, '110'B }, omit ); + + template Uni t_uni_value_list_omit := ( { b := true }, { hs := 'DEADBEEF'H }, { ucs := "x" }, { vt := fail }, omit ); + template Uni t_uni_comp_list_omit := complement ( { b := false }, { hs := 'DEADBEEF'H }, { ucs := "x" }, { vt := fail }, omit ); + + template Enum t_enum_value_list_omit := ( First, Second, omit ); + template Enum t_enum_comp_list_omit := complement ( Second, Third, omit ); + + template Everything t_every_value_list_omit := { t_int_value_list_omit, t_char_value_list_omit, + t_rec_value_list_omit, t_setof_value_list_omit, t_uni_value_list_omit, t_enum_value_list_omit }; + template Everything t_every_comp_list_omit := { t_int_comp_list_omit, t_char_comp_list_omit, + t_rec_comp_list_omit, t_setof_comp_list_omit, t_uni_comp_list_omit, t_enum_comp_list_omit }; + + // template variable + var template integer vt_int_value_list_omit := ( -1, 3, 5, 7, omit ); + var template integer vt_int_comp_list_omit := complement ( 2, 4, 6, 8, omit ); + + var template charstring vt_char_value_list_omit := ( "a", "aa", "aaa", omit ); + var template charstring vt_char_comp_list_omit := complement ( "b", "bb", "bbb", omit ); + + var template Rec vt_rec_value_list_omit := ( { 3.0, '03'O }, { 1.0, '01'O }, omit ); + var template Rec vt_rec_comp_list_omit := complement ( { 2.0, '02'O }, { 4.0, '04'O }, omit ); + + var template SoBS vt_setof_value_list_omit := ( { '1'B, '10'B, '11'B }, { '100'B, '101'B, '110'B }, omit ); + var template SoBS vt_setof_comp_list_omit := complement ( { '111'B, '1110'B, '1111'B }, { '100'B, '101'B, '110'B }, omit ); + + var template Uni vt_uni_value_list_omit := ( { b := true }, { hs := 'DEADBEEF'H }, { ucs := "x" }, { vt := fail }, omit ); + var template Uni vt_uni_comp_list_omit := complement ( { b := false }, { hs := 'DEADBEEF'H }, { ucs := "x" }, { vt := fail }, omit ); + + var template Enum vt_enum_value_list_omit := ( First, Second, omit ); + var template Enum vt_enum_comp_list_omit := complement ( Second, Third, omit ); + + var template Everything vt_every_value_list_omit := { vt_int_value_list_omit, vt_char_value_list_omit, + vt_rec_value_list_omit, vt_setof_value_list_omit, vt_uni_value_list_omit, vt_enum_value_list_omit }; + var template Everything vt_every_comp_list_omit := { vt_int_comp_list_omit, vt_char_comp_list_omit, + vt_rec_comp_list_omit, vt_setof_comp_list_omit, vt_uni_comp_list_omit, vt_enum_comp_list_omit }; + + // match + if (not match(c_int_omitted, t_every_value_list_omit)) { + setverdict(fail, c_int_omitted, " should match ", t_every_value_list_omit); + } + if (not match(c_char_omitted, vt_every_value_list_omit)) { + setverdict(fail, c_char_omitted, " should match ", vt_every_value_list_omit); + } + if (match(c_rec_omitted, t_every_comp_list_omit)) { + setverdict(fail, c_rec_omitted, " should not match ", t_every_comp_list_omit); + } + if (match(c_setof_omitted, t_every_comp_list_omit)) { + setverdict(fail, c_setof_omitted, " should not match ", t_every_comp_list_omit); + } + + // ispresent + if (ispresent(t_every_value_list_omit.i)) { + setverdict(fail, t_every_value_list_omit.i, " should not be present"); + } + if (ispresent(vt_every_value_list_omit.cs)) { + setverdict(fail, vt_every_value_list_omit.cs, " should not be present"); + } + if (not ispresent(t_every_comp_list_omit.setof)) { + setverdict(fail, t_every_comp_list_omit.setof, " should be present"); + } + if (not ispresent(vt_every_comp_list_omit.uni)) { + setverdict(fail, vt_every_comp_list_omit.uni, " should be present"); + } + + // log match + var charstring v_log_res := log2str(match(c_rec_omitted, t_every_value_list_omit)); + if (match(v_log_res, t_unmatched)) { + setverdict(fail, c_rec_omitted, " should match ", t_every_value_list_omit); + } + v_log_res := log2str(match(c_setof_omitted, vt_every_value_list_omit)); + if (match(v_log_res, t_unmatched)) { + setverdict(fail, c_setof_omitted, " should match ", vt_every_value_list_omit); + } + v_log_res := log2str(match(c_uni_omitted, t_every_comp_list_omit)); + if (not match(v_log_res, t_unmatched)) { + setverdict(fail, c_uni_omitted, " should not match ", t_every_comp_list_omit); + } + v_log_res := log2str(match(c_enum_omitted, vt_every_comp_list_omit)); + if (not match(v_log_res, t_unmatched)) { + setverdict(fail, c_enum_omitted, " should not match ", vt_every_comp_list_omit); + } + + setverdict(pass); +} + +// A component's behavior function for the procedure-based port matching test +// Tests matching of 'omit' values in the 'getcall' operation: +// - on success replies with one of the test values +// - on failure replies with a specific template containing an error message +function f_behavior_proc_legacy() runs on CT +{ + var template Everything vt_bad := t_bad_call; + timer t1 := 1.0; + t1.start; + alt { + [] proc.getcall(Sig:{t_every_value_list, -}) { + vt_bad.cs := log2str("getcall parameters should not match ", t_every_value_list); + proc.reply(Sig:{-, vt_bad}); + } + [] proc.getcall(Sig:{?, -}) { + // this is the expected behavior, since the incomming call is not supposed to match the template + proc.reply(Sig:{-, c_rec_omitted}); + } + [] t1.timeout { + vt_bad.cs := "getcall timed out"; + proc.reply(Sig:{-, vt_bad}); + } + } + + timer t2 := 1.0; + t2.start; + alt { + [] proc.getcall(Sig:{t_every_comp_list, -}) { + // this is the expected behavior, since the incomming call is supposed to match the template + proc.reply(Sig:{-, c_setof_omitted}); + } + [] proc.getcall(Sig:{?, -}) { + vt_bad.cs := log2str("getcall parameters should match ", t_every_comp_list); + proc.reply(Sig:{-, vt_bad}); + } + [] t2.timeout { + vt_bad.cs := "getcall timed out"; + proc.reply(Sig:{-, vt_bad}); + } + } + + timer t3 := 1.0; + t3.start; + alt { + [] proc.getcall(Sig:{t_every_value_list, -}) { + vt_bad.cs := log2str("getcall parameters should not match ", t_every_value_list); + proc.reply(Sig:{-, vt_bad}); + } + [] proc.getcall(Sig:{?, -}) { + // this is the expected behavior, since the incomming call is not supposed to match the template + proc.raise(Sig, c_uni_omitted); + } + [] t2.timeout { + vt_bad.cs := "getcall timed out"; + proc.reply(Sig:{-, vt_bad}); + } + } + + timer t4 := 1.0; + t4.start; + alt { + [] proc.getcall(Sig:{t_every_comp_list, -}) { + // this is the expected behavior, since the incomming call is supposed to match the template + proc.raise(Sig, c_char_omitted); + } + [] proc.getcall(Sig:{?, -}) { + vt_bad.cs := log2str("getcall parameters should not match ", t_every_comp_list); + proc.reply(Sig:{-, vt_bad}); + } + [] t2.timeout { + vt_bad.cs := "getcall timed out"; + proc.reply(Sig:{-, vt_bad}); + } + } +} + +// Tests the matching of 'omit' values in procedure-based port operations +// ('getcall' is tested in the newly created component's behavior function, +// 'getreply' and 'catch' are tested here). +testcase tc_proc_port_match_legacy() runs on CT +{ + var CT v_comp := CT.create; + connect(v_comp:proc, self:proc); + v_comp.start(f_behavior_proc_legacy()); + + // testing 'getcall' and 'getreply' with the value list template + var Everything v_pars; + proc.call(Sig:{c_int_omitted, -}, 1.0) { + [] proc.getreply(Sig:{-, t_every_value_list}) { + setverdict(fail, "getreply parameters should not match ", t_every_value_list); + } + [] proc.getreply(Sig:{-, t_bad_call}) -> param (v_pars) { + // the 'getcall' operation did not succeed, display the received error message + setverdict(fail, v_pars.cs); + } + [] proc.getreply(Sig:{-, ?}) { + // this is the expected behavior, since the incomming reply is not supposed to match the template + setverdict(pass); + } + [] proc.catch(Sig, ?) { + setverdict(fail, "caught unexpected exception"); + } + [] proc.catch(timeout) { + setverdict(fail, "getreply timed out"); + } + } + + // testing 'getcall' and 'getreply' with the complement list template + proc.call(Sig:{c_enum_omitted, -}, 1.0) { + [] proc.getreply(Sig:{-, t_every_comp_list}) { + // this is the expected behavior, since the incomming reply is supposed to match the template + setverdict(pass); + } + [] proc.getreply(Sig:{-, t_bad_call}) -> param (v_pars) { + // the 'getcall' operation did not succeed, display the received error message + setverdict(fail, v_pars.cs); + } + [] proc.getreply(Sig:{-, ?}) { + setverdict(fail, "getreply parameters should match ", t_every_comp_list); + } + [] proc.catch(Sig, ?) { + setverdict(fail, "caught unexpected exception"); + } + [] proc.catch(timeout) { + setverdict(fail, "getreply timed out"); + } + } + + // testing 'getcall' and 'catch' with the value list template + proc.call(Sig:{c_char_omitted, -}, 1.0) { + [] proc.getreply(Sig:{-, t_bad_call}) -> param (v_pars) { + // the 'getcall' operation did not succeed, display the received error message + setverdict(fail, v_pars.cs); + } + [] proc.getreply(Sig:{-, ?}) { + setverdict(fail, "received unexpected reply"); + } + [] proc.catch(Sig, t_every_value_list) { + setverdict(fail, "caught exception should not match ", t_every_value_list); + } + [] proc.catch(Sig, ?) { + // this is the expected behavior, since the incomming exception is not supposed to match the template + setverdict(pass); + } + [] proc.catch(timeout) { + setverdict(fail, "catch timed out"); + } + } + + // testing 'getcall' and 'catch' with the complement list template + proc.call(Sig:{c_uni_omitted, -}, 1.0) { + [] proc.getreply(Sig:{-, t_bad_call}) -> param (v_pars) { + // the 'getcall' operation did not succeed, display the received error message + setverdict(fail, v_pars.cs); + } + [] proc.getreply(Sig:{-, ?}) { + setverdict(fail, "received unexpected reply"); + } + [] proc.catch(Sig, t_every_comp_list) { + // this is the expected behavior, since the incomming exception is supposed to match the template + setverdict(pass); + } + [] proc.catch(Sig, ?) { + setverdict(fail, "caught exception should match ", t_every_comp_list); + } + [] proc.catch(timeout) { + setverdict(fail, "catch timed out"); + } + } + + v_comp.done; +} + +// A component's behavior function for the message-based port matching test +// Sends test messages to the caller test case for matching. +function f_behavior_msg_legacy() runs on CT +{ + msg.send(c_int_omitted); + msg.send(c_char_omitted); + msg.send(c_rec_omitted); + msg.send(c_setof_omitted); + msg.send(c_uni_omitted); + msg.send(c_enum_omitted); +} + +// Tests the matching of 'omit' values in message-based port operations +// (the newly created component's behavior function sends us 6 test messages, +// these are matched against value list and complement list templates). +testcase tc_msg_port_match_legacy() runs on CT +{ + var CT v_comp := CT.create; + connect(v_comp:msg, self:msg); + v_comp.start(f_behavior_msg_legacy()); + + var integer v_msg_count := 1; + timer t := 1.0; + t.start; + alt { + [] msg.receive(t_every_value_list) { + setverdict(fail, "Message ", v_msg_count, " should not match ", t_every_value_list); + } + [] msg.receive(t_every_comp_list) { + // this is the expected behavior, since the incomming messages should not match + // the previous template, only this one + if (v_msg_count < 6) { + // repeat until all 6 messages have been received + v_msg_count := v_msg_count + 1; + repeat; + } + } + [] msg.receive(?) { + setverdict(fail, "Message ", v_msg_count, " should match ", t_every_comp_list); + } + [] t.timeout { + setverdict(fail, "receive timed out"); + } + } + + v_comp.done; + msg.clear; + setverdict(pass); +} + +// Testing the 'present' template restriction +// (complement list templates are 'present' if the list contains the 'omit' value, +// value lists are 'present' if the list does not contain the 'omit' value) +testcase tc_present_template_legacy() runs on CT +{ + template(present) integer t_present_value_list := (1, 2, 3); + template(present) integer t_present_comp_list := complement (1, 2, 3, omit); + + var template(present) integer vt_present_value_list := (1, 2, 3); + var template(present) integer vt_present_comp_list := complement (1, 2, 3, omit); + + vt_present_value_list := (4, 5, 6); + vt_present_comp_list := complement (4, 5, 6, omit); + + setverdict(pass); +} + +control { + execute(tc_match_omit_legacy()); + execute(tc_ispresent_legacy()); + execute(tc_log_match_legacy()); + execute(tc_omit_in_value_list_legacy()); + execute(tc_proc_port_match_legacy()); + execute(tc_msg_port_match_legacy()); + execute(tc_present_template_legacy()); +} + +} diff --git a/regression_test/templateOmit/LegacyTests/Makefile b/regression_test/templateOmit/LegacyTests/Makefile new file mode 100644 index 000000000..034d93342 --- /dev/null +++ b/regression_test/templateOmit/LegacyTests/Makefile @@ -0,0 +1,58 @@ +############################################################################### +# Copyright (c) 2000-2015 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 +############################################################################### +TOPDIR := ../.. +include $(TOPDIR)/Makefile.regression + +.SUFFIXES: .ttcn .hh +.PHONY: all clean dep run + +TTCN3_LIB = ttcn3$(RT2_SUFFIX)-parallel$(DYNAMIC_SUFFIX) + +SYMLINK_MODULES = Types.ttcn Templates.ttcn + +TTCN3_MODULES = $(SYMLINK_MODULES) LegacyTestcases.ttcn + +GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) +GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) +ifdef CODE_SPLIT +GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +endif + +OBJECTS = $(GENERATED_SOURCES:.cc=.o) + +TARGET = templateOmitLegacy$(EXESUFFIX) + +COMPILER_FLAGS += -M + +all: $(TARGET) + +$(SYMLINK_MODULES): + ln -s ../Common/$@ $@ + +$(TARGET): $(GENERATED_SOURCES) $(USER_SOURCES) + $(CXX) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@ $^ -L$(TTCN3_DIR)/lib -l$(TTCN3_LIB) -L$(OPENSSL_DIR)/lib -lcrypto $($(PLATFORM)_LIBS) + +$(GENERATED_SOURCES) $(GENERATED_HEADERS) $(USER_SOURCES) $(USER_HEADERS): compile + @if [ ! -f $@ ]; then $(RM) compile; $(MAKE) compile; fi + +compile: $(TTCN3_MODULES) + $(TTCN3_COMPILER) $(COMPILER_FLAGS) $^ - $? + touch $@ + +clean distclean: + -rm -f $(TARGET) $(OBJECTS) $(GENERATED_HEADERS) \ + $(GENERATED_SOURCES) *.log Makefile.bak compile + +dep: $(GENERATED_SOURCES) + makedepend $(CPPFLAGS) $(GENERATED_SOURCES) + +run: $(TARGET) legacy.cfg + $(TTCN3_DIR)/bin/ttcn3_start $^ + +.NOTPARALLEL: + diff --git a/regression_test/templateOmit/LegacyTests/legacy.cfg b/regression_test/templateOmit/LegacyTests/legacy.cfg new file mode 100644 index 000000000..5f3f4e621 --- /dev/null +++ b/regression_test/templateOmit/LegacyTests/legacy.cfg @@ -0,0 +1,14 @@ +############################################################################### +# Copyright (c) 2000-2015 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 +############################################################################### +[MODULE_PARAMETERS] +[LOGGING] +Logfile := "templateOmitLegacy_%r.log" +FileMask := LOG_ALL +ConsoleMask := TTCN_WARNING | TTCN_ERROR | TTCN_TESTCASE | TTCN_STATISTICS +[EXECUTE] +LegacyTestcases diff --git a/regression_test/templateOmit/Makefile b/regression_test/templateOmit/Makefile new file mode 100644 index 000000000..cfd3fa558 --- /dev/null +++ b/regression_test/templateOmit/Makefile @@ -0,0 +1,24 @@ +############################################################################### +# Copyright (c) 2000-2015 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 +############################################################################### +TOPDIR := .. +include ../Makefile.regression +unexport ABS_SRC +unexport SRCDIR + +# List of fake targets: +.PHONY: all dep clean run Common NewTests LegacyTests /Common /NewTests /LegacyTests profile + +all dep clean distclean run: + $(MAKE) -C NewTests $@ + $(MAKE) -C LegacyTests $@ + +new: + $(MAKE) -C NewTests run + +legacy: + $(MAKE) -C LegacyTests run diff --git a/regression_test/templateOmit/NewTests/Makefile b/regression_test/templateOmit/NewTests/Makefile new file mode 100644 index 000000000..abee982e8 --- /dev/null +++ b/regression_test/templateOmit/NewTests/Makefile @@ -0,0 +1,56 @@ +############################################################################### +# Copyright (c) 2000-2015 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 +############################################################################### +TOPDIR := ../.. +include $(TOPDIR)/Makefile.regression + +.SUFFIXES: .ttcn .hh +.PHONY: all clean dep run + +TTCN3_LIB = ttcn3$(RT2_SUFFIX)-parallel$(DYNAMIC_SUFFIX) + +SYMLINK_MODULES = Types.ttcn Templates.ttcn + +TTCN3_MODULES = $(SYMLINK_MODULES) NewTestcases.ttcn + +GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) +GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) +ifdef CODE_SPLIT +GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +endif + +OBJECTS = $(GENERATED_SOURCES:.cc=.o) + +TARGET = templateOmitNew$(EXESUFFIX) + +all: $(TARGET) + +$(SYMLINK_MODULES): + ln -s ../Common/$@ $@ + +$(TARGET): $(GENERATED_SOURCES) $(USER_SOURCES) + $(CXX) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@ $^ -L$(TTCN3_DIR)/lib -l$(TTCN3_LIB) -L$(OPENSSL_DIR)/lib -lcrypto $($(PLATFORM)_LIBS) + +$(GENERATED_SOURCES) $(GENERATED_HEADERS) $(USER_SOURCES) $(USER_HEADERS): compile + @if [ ! -f $@ ]; then $(RM) compile; $(MAKE) compile; fi + +compile: $(TTCN3_MODULES) + $(TTCN3_COMPILER) $(COMPILER_FLAGS) $^ - $? + touch $@ + +clean distclean: + -rm -f $(TARGET) $(OBJECTS) $(GENERATED_HEADERS) \ + $(GENERATED_SOURCES) *.log Makefile.bak compile + +dep: $(GENERATED_SOURCES) + makedepend $(CPPFLAGS) $(GENERATED_SOURCES) + +run: $(TARGET) new.cfg + $(TTCN3_DIR)/bin/ttcn3_start $^ + +.NOTPARALLEL: + diff --git a/regression_test/templateOmit/NewTests/NewTestcases.ttcn b/regression_test/templateOmit/NewTests/NewTestcases.ttcn new file mode 100644 index 000000000..b138b9686 --- /dev/null +++ b/regression_test/templateOmit/NewTests/NewTestcases.ttcn @@ -0,0 +1,423 @@ +/****************************************************************************** + * Copyright (c) 2000-2015 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 + ******************************************************************************/ + +module NewTestcases { +// This module contains tests related to the matching of omitted fields. +// New behavior (after change request artf564824): +// - 'omit' can no longer be used in value list and complement list templates +// e.g.: 't := (1, 2, omit)' and 't := complement(1, 2, omit)' are not allowed +// - value list and complement list templates do not match the value 'omit', +// the 'ifpresent' clause should be used instead + +import from Types all; +import from Templates all; + +// Testing the matching of an omitted field +// A different field is omitted in each of the 6 tested values. +// Both the value list template and the complement list template should not match +// any of the values. +testcase tc_match_omit() runs on CT +{ + if (match(c_int_omitted, t_every_value_list)) { + setverdict(fail, c_int_omitted, " should not match ", t_every_value_list); + } + if (match(c_int_omitted, t_every_comp_list)) { + setverdict(fail, c_int_omitted, " should not match ", t_every_comp_list); + } + if (match(c_char_omitted, t_every_value_list)) { + setverdict(fail, c_char_omitted, " should not match ", t_every_value_list); + } + if (match(c_char_omitted, t_every_comp_list)) { + setverdict(fail, c_char_omitted, " should not match ", t_every_comp_list); + } + if (match(c_rec_omitted, t_every_value_list)) { + setverdict(fail, c_rec_omitted, " should not match ", t_every_value_list); + } + if (match(c_rec_omitted, t_every_comp_list)) { + setverdict(fail, c_rec_omitted, " should not match ", t_every_comp_list); + } + if (match(c_setof_omitted, t_every_value_list)) { + setverdict(fail, c_setof_omitted, " should not match ", t_every_value_list); + } + if (match(c_setof_omitted, t_every_comp_list)) { + setverdict(fail, c_setof_omitted, " should not match ", t_every_comp_list); + } + if (match(c_uni_omitted, t_every_value_list)) { + setverdict(fail, c_uni_omitted, " should not match ", t_every_value_list); + } + if (match(c_uni_omitted, t_every_comp_list)) { + setverdict(fail, c_uni_omitted, " should not match ", t_every_comp_list); + } + if (match(c_enum_omitted, t_every_value_list)) { + setverdict(fail, c_enum_omitted, " should not match ", t_every_value_list); + } + if (match(c_enum_omitted, t_every_comp_list)) { + setverdict(fail, c_enum_omitted, " should not match ", t_every_comp_list); + } + setverdict(pass); +} + +// Testing the 'ispresent' clause on templates +// All of the tested templates are 'present', as none of them match the 'omit' value. +testcase tc_ispresent() runs on CT +{ + if (not ispresent(t_int_value_list)) { + setverdict(fail, t_int_value_list, " should be present"); + } + if (not ispresent(t_char_value_list)) { + setverdict(fail, t_char_value_list, " should be present"); + } + if (not ispresent(t_rec_value_list)) { + setverdict(fail, t_rec_value_list, " should be present"); + } + if (not ispresent(t_setof_value_list)) { + setverdict(fail, t_setof_value_list, " should be present"); + } + if (not ispresent(t_uni_value_list)) { + setverdict(fail, t_uni_value_list, " should be present"); + } + if (not ispresent(t_enum_value_list)) { + setverdict(fail, t_enum_value_list, " should be present"); + } + if (not ispresent(t_int_comp_list)) { + setverdict(fail, t_int_comp_list, " should be present"); + } + if (not ispresent(t_char_comp_list)) { + setverdict(fail, t_char_comp_list, " should be present"); + } + if (not ispresent(t_rec_comp_list)) { + setverdict(fail, t_rec_comp_list, " should be present"); + } + if (not ispresent(t_setof_comp_list)) { + setverdict(fail, t_setof_comp_list, " should be present"); + } + if (not ispresent(t_uni_comp_list)) { + setverdict(fail, t_uni_comp_list, " should be present"); + } + if (not ispresent(t_enum_comp_list)) { + setverdict(fail, t_enum_comp_list, " should be present"); + } + setverdict(pass); +} + +// Testing the logging of matching an omitted field +// The results should be the same as with the matching tests +// (this is needed, because a different function is called when logging a match operation) +testcase tc_log_match() runs on CT +{ + // omitted integer + var charstring v_log_match_res := log2str(match(c_int_omitted, t_every_value_list)); + if (not match(v_log_match_res, t_unmatched)) { + setverdict(fail, c_int_omitted, " should not match ", t_every_value_list); + } + v_log_match_res := log2str(match(c_int_omitted, t_every_comp_list)); + if (not match(v_log_match_res, t_unmatched)) { + setverdict(fail, c_int_omitted, " should not match ", t_every_comp_list); + } + + // omitted charstring + v_log_match_res := log2str(match(c_char_omitted, t_every_value_list)); + if (not match(v_log_match_res, t_unmatched)) { + setverdict(fail, c_char_omitted, " should not match ", t_every_value_list); + } + v_log_match_res := log2str(match(c_char_omitted, t_every_comp_list)); + if (not match(v_log_match_res, t_unmatched)) { + setverdict(fail, c_char_omitted, " should not match ", t_every_comp_list); + } + + // omitted record + v_log_match_res := log2str(match(c_rec_omitted, t_every_value_list)); + if (not match(v_log_match_res, t_unmatched)) { + setverdict(fail, c_rec_omitted, " should not match ", t_every_value_list); + } + v_log_match_res := log2str(match(c_rec_omitted, t_every_comp_list)); + if (not match(v_log_match_res, t_unmatched)) { + setverdict(fail, c_rec_omitted, " should not match ", t_every_comp_list); + } + + // omitted set of + v_log_match_res := log2str(match(c_setof_omitted, t_every_value_list)); + if (not match(v_log_match_res, t_unmatched)) { + setverdict(fail, c_setof_omitted, " should not match ", t_every_value_list); + } + v_log_match_res := log2str(match(c_setof_omitted, t_every_comp_list)); + if (not match(v_log_match_res, t_unmatched)) { + setverdict(fail, c_setof_omitted, " should not match ", t_every_comp_list); + } + + // omitted union + v_log_match_res := log2str(match(c_uni_omitted, t_every_value_list)); + if (not match(v_log_match_res, t_unmatched)) { + setverdict(fail, c_uni_omitted, " should not match ", t_every_value_list); + } + v_log_match_res := log2str(match(c_uni_omitted, t_every_comp_list)); + if (not match(v_log_match_res, t_unmatched)) { + setverdict(fail, c_uni_omitted, " should not match ", t_every_comp_list); + } + + // omitted enumerated + v_log_match_res := log2str(match(c_enum_omitted, t_every_value_list)); + if (not match(v_log_match_res, t_unmatched)) { + setverdict(fail, c_enum_omitted, " should not match ", t_every_value_list); + } + v_log_match_res := log2str(match(c_enum_omitted, t_every_comp_list)); + if (not match(v_log_match_res, t_unmatched)) { + setverdict(fail, c_enum_omitted, " should not match ", t_every_comp_list); + } + setverdict(pass); +} + +// A component's behavior function for the procedure-based port matching test +// Tests matching of 'omit' values in the 'getcall' operation: +// - on success replies with or raises an exception with one of the test values +// - on failure replies with a specific template containing an error message +function f_behavior_proc() runs on CT +{ + var template Everything vt_bad := t_bad_call; + timer t1 := 1.0; + t1.start; + alt { + [] proc.getcall(Sig:{t_every_value_list, -}) { + vt_bad.cs := log2str("getcall parameters should not match ", t_every_value_list); + proc.reply(Sig:{-, vt_bad}); + } + [] proc.getcall(Sig:{?, -}) { + // this is the expected behavior, since the incomming call is not supposed to match the template + proc.reply(Sig:{-, c_rec_omitted}); + } + [] t1.timeout { + vt_bad.cs := "getcall timed out"; + proc.reply(Sig:{-, vt_bad}); + } + } + + timer t2 := 1.0; + t2.start; + alt { + [] proc.getcall(Sig:{t_every_comp_list, -}) { + vt_bad.cs := log2str("getcall parameters should not match ", t_every_comp_list); + proc.reply(Sig:{-, vt_bad}); + } + [] proc.getcall(Sig:{?, -}) { + // this is the expected behavior, since the incomming call is not supposed to match the template + proc.reply(Sig:{-, c_setof_omitted}); + } + [] t2.timeout { + vt_bad.cs := "getcall timed out"; + proc.reply(Sig:{-, vt_bad}); + } + } + + timer t3 := 1.0; + t3.start; + alt { + [] proc.getcall(Sig:{t_every_value_list, -}) { + vt_bad.cs := log2str("getcall parameters should not match ", t_every_value_list); + proc.reply(Sig:{-, vt_bad}); + } + [] proc.getcall(Sig:{?, -}) { + // this is the expected behavior, since the incomming call is not supposed to match the template + proc.raise(Sig, c_uni_omitted); + } + [] t2.timeout { + vt_bad.cs := "getcall timed out"; + proc.reply(Sig:{-, vt_bad}); + } + } + + timer t4 := 1.0; + t4.start; + alt { + [] proc.getcall(Sig:{t_every_comp_list, -}) { + vt_bad.cs := log2str("getcall parameters should not match ", t_every_comp_list); + proc.reply(Sig:{-, vt_bad}); + } + [] proc.getcall(Sig:{?, -}) { + // this is the expected behavior, since the incomming call is not supposed to match the template + proc.raise(Sig, c_char_omitted); + } + [] t2.timeout { + vt_bad.cs := "getcall timed out"; + proc.reply(Sig:{-, vt_bad}); + } + } +} + +// Tests the matching of 'omit' values in procedure-based port operations +// ('getcall' is tested in the newly created component's behavior function, +// 'getreply' and 'catch' are tested here). +testcase tc_proc_port_match() runs on CT +{ + var CT v_comp := CT.create; + connect(v_comp:proc, self:proc); + v_comp.start(f_behavior_proc()); + + // testing 'getcall' and 'getreply' with the value list template + var Everything v_pars; + proc.call(Sig:{c_int_omitted, -}, 1.0) { + [] proc.getreply(Sig:{-, t_every_value_list}) { + setverdict(fail, "getreply parameters should not match ", t_every_value_list); + } + [] proc.getreply(Sig:{-, t_bad_call}) -> param (v_pars) { + // the 'getcall' operation did not succeed, display the received error message + setverdict(fail, v_pars.cs); + } + [] proc.getreply(Sig:{-, ?}) { + // this is the expected behavior, since the incomming reply is not supposed to match the template + setverdict(pass); + } + [] proc.catch(Sig, ?) { + setverdict(fail, "caught unexpected exception"); + } + [] proc.catch(timeout) { + setverdict(fail, "getreply timed out"); + } + } + + // testing 'getcall' and 'getreply' with the complement list template + proc.call(Sig:{c_enum_omitted, -}, 1.0) { + [] proc.getreply(Sig:{-, t_every_comp_list}) { + setverdict(fail, "getreply parameters should not match ", t_every_comp_list); + } + [] proc.getreply(Sig:{-, t_bad_call}) -> param (v_pars) { + // the 'getcall' operation did not succeed, display the received error message + setverdict(fail, v_pars.cs); + } + [] proc.getreply(Sig:{-, ?}) { + // this is the expected behavior, since the incomming reply is not supposed to match the template + setverdict(pass); + } + [] proc.catch(Sig, ?) { + setverdict(fail, "caught unexpected exception"); + } + [] proc.catch(timeout) { + setverdict(fail, "getreply timed out"); + } + } + + // testing 'getcall' and 'catch' with the value list template + proc.call(Sig:{c_char_omitted, -}, 1.0) { + [] proc.getreply(Sig:{-, t_bad_call}) -> param (v_pars) { + // the 'getcall' operation did not succeed, display the received error message + setverdict(fail, v_pars.cs); + } + [] proc.getreply(Sig:{-, ?}) { + setverdict(fail, "received unexpected reply"); + } + [] proc.catch(Sig, t_every_value_list) { + setverdict(fail, "caught exception should not match ", t_every_value_list); + } + [] proc.catch(Sig, ?) { + // this is the expected behavior, since the incomming exception is not supposed to match the template + setverdict(pass); + } + [] proc.catch(timeout) { + setverdict(fail, "catch timed out"); + } + } + + // testing 'getcall' and 'catch' with the complement list template + proc.call(Sig:{c_uni_omitted, -}, 1.0) { + [] proc.getreply(Sig:{-, t_bad_call}) -> param (v_pars) { + // the 'getcall' operation did not succeed, display the received error message + setverdict(fail, v_pars.cs); + } + [] proc.getreply(Sig:{-, ?}) { + setverdict(fail, "received unexpected reply"); + } + [] proc.catch(Sig, t_every_comp_list) { + setverdict(fail, "caught exception should not match ", t_every_comp_list); + } + [] proc.catch(Sig, ?) { + // this is the expected behavior, since the incomming exception is not supposed to match the template + setverdict(pass); + } + [] proc.catch(timeout) { + setverdict(fail, "catch timed out"); + } + } + + v_comp.done; +} + +// A component's behavior function for the message-based port matching test +// Sends test messages to the caller test case for matching. +function f_behavior_msg() runs on CT +{ + msg.send(c_int_omitted); + msg.send(c_char_omitted); + msg.send(c_rec_omitted); + msg.send(c_setof_omitted); + msg.send(c_uni_omitted); + msg.send(c_enum_omitted); +} + +// Tests the matching of 'omit' values in message-based port operations +// (the newly created component's behavior function sends us 6 test messages, +// these are matched against value list and complement list templates). +testcase tc_msg_port_match() runs on CT +{ + var CT v_comp := CT.create; + connect(v_comp:msg, self:msg); + v_comp.start(f_behavior_msg()); + + var integer v_msg_count := 1; + timer t := 1.0; + t.start; + alt { + [] msg.receive(t_every_value_list) { + setverdict(fail, "Message ", v_msg_count, " should not match ", t_every_value_list); + } + [] msg.receive(t_every_comp_list) { + setverdict(fail, "Message ", v_msg_count, " should not match ", t_every_comp_list); + } + [] msg.receive(?) { + // this is the expected behavior, since the incomming messages should not match + // either of the templates + if (v_msg_count < 6) { + // repeat until all 6 messages have been received + v_msg_count := v_msg_count + 1; + repeat; + } + } + [] t.timeout { + setverdict(fail, "receive timed out"); + } + } + + v_comp.done; + msg.clear; + setverdict(pass); +} + +// Testing the 'present' template restriction +// (all value list and complement list templates are 'present') +testcase tc_present_template() runs on CT +{ + template(present) integer t_present_value_list := (1, 2, 3); + template(present) integer t_present_comp_list := complement (1, 2, 3); + + var template(present) integer vt_present_value_list := (1, 2, 3); + var template(present) integer vt_present_comp_list := complement (1, 2, 3); + + vt_present_value_list := (4, 5, 6); + vt_present_comp_list := complement (4, 5, 6); + + setverdict(pass); +} + +control { + execute(tc_match_omit()); + execute(tc_ispresent()); + execute(tc_log_match()); + execute(tc_proc_port_match()); + execute(tc_msg_port_match()); + execute(tc_present_template()); +} + +} diff --git a/regression_test/templateOmit/NewTests/new.cfg b/regression_test/templateOmit/NewTests/new.cfg new file mode 100644 index 000000000..c272b734a --- /dev/null +++ b/regression_test/templateOmit/NewTests/new.cfg @@ -0,0 +1,14 @@ +############################################################################### +# Copyright (c) 2000-2015 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 +############################################################################### +[MODULE_PARAMETERS] +[LOGGING] +Logfile := "templateOmitNew_%r.log" +FileMask := LOG_ALL +ConsoleMask := TTCN_WARNING | TTCN_ERROR | TTCN_TESTCASE | TTCN_STATISTICS +[EXECUTE] +NewTestcases diff --git a/regression_test/templateRec/Makefile b/regression_test/templateRec/Makefile index e0c46aad6..f83b58157 100644 --- a/regression_test/templateRec/Makefile +++ b/regression_test/templateRec/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 @@ -20,6 +20,8 @@ TTCN3_MODULES = TtemplateRec.ttcn GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) $(ASN1_MODULES:.asn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) +COMPILER_FLAGS += -M + ifdef CODE_SPLIT GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) endif diff --git a/regression_test/templateRec/TtemplateRec.ttcn b/regression_test/templateRec/TtemplateRec.ttcn index ceee9ef1d..e11e05e3a 100644 --- a/regression_test/templateRec/TtemplateRec.ttcn +++ b/regression_test/templateRec/TtemplateRec.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 @@ -92,13 +92,13 @@ x2:={ x1:={f1:=1,f2:=1.2}, x2:={f1:=7,f2:=1.2}, x3:=temp }; x3:={ x1:={f1:=8,f2:=1.2}, x2:={f1:=6,f2:=1.2}, x3:=temp }; //match if (match(x1,templateRec_tList)) {setverdict(pass);} - else {setverdict(fail);} + else {setverdict(fail, 1);} //no match: out of list if (not(match(x2,templateRec_tList))) {setverdict(pass);} - else {setverdict(fail);} + else {setverdict(fail, 2);} //no match: other field if (not(match(x3,templateRec_tList))) {setverdict(pass);} - else {setverdict(fail);} + else {setverdict(fail, 3);} } testcase templateRecComp() runs on templateRec_mycomp { @@ -109,13 +109,13 @@ x2:={ x1:={f1:=1,f2:=1.2}, x2:={f1:=6,f2:=1.2}, x3:=temp }; x3:={ x1:={f1:=2,f2:=1.2}, x2:={f1:=7,f2:=1.2}, x3:=temp }; //match if (match(x1,templateRec_tComp)) {setverdict(pass);} - else {setverdict(fail);} + else {setverdict(fail, 1);} //no match: in the list if (not(match(x2,templateRec_tComp))) {setverdict(pass);} - else {setverdict(fail);} + else {setverdict(fail, 2);} //no match: other field if (not(match(x3,templateRec_tComp))) {setverdict(pass);} - else {setverdict(fail);} + else {setverdict(fail, 3);} } testcase templateRecOmit() runs on templateRec_mycomp { @@ -205,6 +205,7 @@ template R tr := { i := 1, str := ( omit , omit ) } template R tr2 := { i := 1, str := complement( omit , omit ) } template R trc := cr; // HQ46602 +// Note: this tests legacy behavior and requires the -M compiler option! testcase MTTSM00015947() runs on templateRec_mycomp { if (not match(cr, tRrec1)) { setverdict(fail); } diff --git a/regression_test/templateRec/TtemplateRecAsn.asn b/regression_test/templateRec/TtemplateRecAsn.asn index e93be55e0..c643900f0 100644 --- a/regression_test/templateRec/TtemplateRecAsn.asn +++ b/regression_test/templateRec/TtemplateRecAsn.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/templateRec/config.cfg b/regression_test/templateRec/config.cfg index b08f11912..f70cc1d32 100644 --- a/regression_test/templateRec/config.cfg +++ b/regression_test/templateRec/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/templateRecof/Makefile b/regression_test/templateRecof/Makefile index a5680f1c0..ec7257cf7 100644 --- a/regression_test/templateRecof/Makefile +++ b/regression_test/templateRecof/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/templateRecof/TmultiplePermutations.ttcn b/regression_test/templateRecof/TmultiplePermutations.ttcn index 96478900d..e13a7b92e 100644 --- a/regression_test/templateRecof/TmultiplePermutations.ttcn +++ b/regression_test/templateRecof/TmultiplePermutations.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/templateRecof/TtemplateRecof.ttcn b/regression_test/templateRecof/TtemplateRecof.ttcn index daca9cda6..ef9d65b1b 100644 --- a/regression_test/templateRecof/TtemplateRecof.ttcn +++ b/regression_test/templateRecof/TtemplateRecof.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/templateRecof/config.cfg b/regression_test/templateRecof/config.cfg index 30c1f69ee..8f8f8a129 100644 --- a/regression_test/templateRecof/config.cfg +++ b/regression_test/templateRecof/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/templateSet/Makefile b/regression_test/templateSet/Makefile index 8af2632ec..46ecda7fd 100644 --- a/regression_test/templateSet/Makefile +++ b/regression_test/templateSet/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/templateSet/TtemplateSet.ttcn b/regression_test/templateSet/TtemplateSet.ttcn index 06c95fa94..3c6f72495 100644 --- a/regression_test/templateSet/TtemplateSet.ttcn +++ b/regression_test/templateSet/TtemplateSet.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/templateSet/config.cfg b/regression_test/templateSet/config.cfg index e6eb9a1ce..1b1c0351b 100644 --- a/regression_test/templateSet/config.cfg +++ b/regression_test/templateSet/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/templateSetof/Makefile b/regression_test/templateSetof/Makefile index 07c4149c8..dcf0b8865 100644 --- a/regression_test/templateSetof/Makefile +++ b/regression_test/templateSetof/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/templateSetof/TtemplateSetof.ttcn b/regression_test/templateSetof/TtemplateSetof.ttcn index 823d1626b..cd8f6bb8c 100644 --- a/regression_test/templateSetof/TtemplateSetof.ttcn +++ b/regression_test/templateSetof/TtemplateSetof.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/templateSetof/config.cfg b/regression_test/templateSetof/config.cfg index 1127d4d0b..f0770b7c9 100644 --- a/regression_test/templateSetof/config.cfg +++ b/regression_test/templateSetof/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/templateUnion/Makefile b/regression_test/templateUnion/Makefile index 6fa9f9c6f..88813ea57 100644 --- a/regression_test/templateUnion/Makefile +++ b/regression_test/templateUnion/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/templateUnion/TtemplateUnion.ttcn b/regression_test/templateUnion/TtemplateUnion.ttcn index d3eeb95f0..ae1236812 100644 --- a/regression_test/templateUnion/TtemplateUnion.ttcn +++ b/regression_test/templateUnion/TtemplateUnion.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/templateUnion/config.cfg b/regression_test/templateUnion/config.cfg index 8addb18bc..75e797c8e 100644 --- a/regression_test/templateUnion/config.cfg +++ b/regression_test/templateUnion/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/testcase_defparam/Makefile b/regression_test/testcase_defparam/Makefile index c874dd8d7..962f7303e 100644 --- a/regression_test/testcase_defparam/Makefile +++ b/regression_test/testcase_defparam/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/testcase_defparam/config.cfg b/regression_test/testcase_defparam/config.cfg index 947056980..0ec703f0c 100644 --- a/regression_test/testcase_defparam/config.cfg +++ b/regression_test/testcase_defparam/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/testcase_defparam/tcdefparam.ttcn b/regression_test/testcase_defparam/tcdefparam.ttcn index 0bcc773ac..9d7feed28 100644 --- a/regression_test/testcase_defparam/tcdefparam.ttcn +++ b/regression_test/testcase_defparam/tcdefparam.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/text2ttcn/Makefile b/regression_test/text2ttcn/Makefile index e9a231937..a138d3699 100644 --- a/regression_test/text2ttcn/Makefile +++ b/regression_test/text2ttcn/Makefile @@ -1,62 +1,67 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 ############################################################################### -TOPDIR := ../ -include $(TOPDIR)/Makefile.regression - -MAKE_PROG := $(MAKE) - +TOPDIR := ../ +include $(TOPDIR)/Makefile.regression + +MAKE_PROG := $(MAKE) + TTCN_FILES := array_test.ttcn bitstring_test.ttcn boolean_test.ttcn charstring_test.ttcn enum_test.ttcn float_test.ttcn functions.ttcn hexstring_test.ttcn integer_test.ttcn octetstring_test.ttcn record_test.ttcn recordof_test.ttcn set_test.ttcn setof_test.ttcn types.ttcn ucharstring_test.ttcn union_test.ttcn objid_test.ttcn TTCN_PARALLEL_FILES := component_test.ttcn - + SINGLE_CFG := text2ttcn_1.cfg -PARALLEL_CFG := text2ttcn_2.cfg +PARALLEL_CFG := text2ttcn_2.cfg SINGLE_FILES := $(TTCN_FILES) $(SINGLE_CFG) -PARALLEL_FILES := $(TTCN_FILES) $(TTCN_PARALLEL_FILES) $(PARALLEL_CFG) - -RUNNABLE := text2ttcn - -ifeq ($(PLATFORM), WIN32) -RUNNABLE := $(RUNNABLE).exe -endif - -DIR_SINGLE := dir_single_mode -DIR_PARALLEL := dir_parallel_mode -GENERATED_DIRS := $(DIR_SINGLE) $(DIR_PARALLEL) - -# List of fake targets: -.PHONY: all clean run run_single run_parallel runall - -all: $(GENERATED_DIRS) - -$(DIR_SINGLE): - mkdir $@ - cd $@ && for file in $(SINGLE_FILES); do ln -s ../$$file || exit; done - cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen -s -e $(RUNNABLE) ./* && $(MAKE_PROG) - -$(DIR_PARALLEL): - mkdir $@ - cd $@ && for file in $(PARALLEL_FILES); do ln -s ../$$file || exit; done - cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen -e $(RUNNABLE) ./* && $(MAKE_PROG) - -run: $(GENERATED_DIRS) - cd $(DIR_SINGLE) && ./$(RUNNABLE) $(SINGLE_CFG) && grep "Overall verdict: pass" *.log - cd $(DIR_PARALLEL) && $(TTCN3_DIR)/bin/ttcn3_start $(RUNNABLE) $(PARALLEL_CFG) && grep "Overall verdict: pass" *.log - -# To run all tests, possibly in parallel -run_single: $(DIR_SINGLE) - cd $(DIR_SINGLE) && ./$(RUNNABLE) $(SINGLE_CFG) && grep "Overall verdict: pass" *.log - -run_parallel: $(DIR_PARALLEL) - cd $(DIR_PARALLEL) && $(TTCN3_DIR)/bin/ttcn3_start $(RUNNABLE) $(PARALLEL_CFG) && grep "Overall verdict: pass" *.log - -runall: run_single run_parallel - -clean distclean: - rm -rf $(GENERATED_DIRS) - +PARALLEL_FILES := $(TTCN_FILES) $(TTCN_PARALLEL_FILES) $(PARALLEL_CFG) + +RUNNABLE := text2ttcn + +ifeq ($(PLATFORM), WIN32) +RUNNABLE := $(RUNNABLE).exe +endif + +COVERAGE_FLAG := +ifeq ($(COVERAGE), yes) + COVERAGE_FLAG += -C +endif + +DIR_SINGLE := dir_single_mode +DIR_PARALLEL := dir_parallel_mode +GENERATED_DIRS := $(DIR_SINGLE) $(DIR_PARALLEL) + +# List of fake targets: +.PHONY: all clean run run_single run_parallel runall + +all: $(GENERATED_DIRS) + +$(DIR_SINGLE): + mkdir $@ + cd $@ && for file in $(SINGLE_FILES); do ln -s ../$$file || exit; done + cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen $(COVERAGE_FLAG) -sM -e $(RUNNABLE) ./* && $(MAKE_PROG) + +$(DIR_PARALLEL): + mkdir $@ + cd $@ && for file in $(PARALLEL_FILES); do ln -s ../$$file || exit; done + cd $@ && $(TTCN3_DIR)/bin/ttcn3_makefilegen $(COVERAGE_FLAG) -M -e $(RUNNABLE) ./* && $(MAKE_PROG) + +run: $(GENERATED_DIRS) + cd $(DIR_SINGLE) && ./$(RUNNABLE) $(SINGLE_CFG) && grep "Overall verdict: pass" *.log + cd $(DIR_PARALLEL) && $(TTCN3_DIR)/bin/ttcn3_start $(RUNNABLE) $(PARALLEL_CFG) && grep "Overall verdict: pass" *.log + +# To run all tests, possibly in parallel +run_single: $(DIR_SINGLE) + cd $(DIR_SINGLE) && ./$(RUNNABLE) $(SINGLE_CFG) && grep "Overall verdict: pass" *.log + +run_parallel: $(DIR_PARALLEL) + cd $(DIR_PARALLEL) && $(TTCN3_DIR)/bin/ttcn3_start $(RUNNABLE) $(PARALLEL_CFG) && grep "Overall verdict: pass" *.log + +runall: run_single run_parallel + +clean distclean: + rm -rf $(GENERATED_DIRS) + diff --git a/regression_test/text2ttcn/array_test.ttcn b/regression_test/text2ttcn/array_test.ttcn index 477e3b0b3..441fd2035 100755 --- a/regression_test/text2ttcn/array_test.ttcn +++ b/regression_test/text2ttcn/array_test.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/text2ttcn/bitstring_test.ttcn b/regression_test/text2ttcn/bitstring_test.ttcn index d87794624..01c9bbde1 100755 --- a/regression_test/text2ttcn/bitstring_test.ttcn +++ b/regression_test/text2ttcn/bitstring_test.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/text2ttcn/boolean_test.ttcn b/regression_test/text2ttcn/boolean_test.ttcn index 3cba79789..cf6bc46a4 100755 --- a/regression_test/text2ttcn/boolean_test.ttcn +++ b/regression_test/text2ttcn/boolean_test.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/text2ttcn/charstring_test.ttcn b/regression_test/text2ttcn/charstring_test.ttcn index fb88956d4..33394489b 100755 --- a/regression_test/text2ttcn/charstring_test.ttcn +++ b/regression_test/text2ttcn/charstring_test.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 @@ -517,18 +517,21 @@ testcase tc_cs_vl3_emb() runs on MC { var RoRCS vl_wrong_values := {{omit},{"AB"},{"ab"},{"ba"},{"12"},{"A1"},{" "},{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}} f_checkMatchingValues_rcs(t_rcs(t_cs_vl3), vl_good_values,vl_wrong_values); } +// Note: this tests legacy behavior and requires the -M compiler option! //complement("ABBA") testcase tc_cs_c1_emb() runs on MC { var RoRCS vl_good_values := {{omit},{"AB"},{"ab"},{"ba"},{"12"},{"A1"},{" """},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}} var RoRCS vl_wrong_values := {{"ABBA"}} f_checkMatchingValues_rcs(t_rcs(t_cs_c1), vl_good_values,vl_wrong_values); } +// Note: this tests legacy behavior and requires the -M compiler option! //complement("ABBA","baba"); testcase tc_cs_c2_emb() runs on MC { var RoRCS vl_good_values :={{omit},{"AB"},{"ab"},{"ba"},{"12"},{"A1"},{" "},{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}} var RoRCS vl_wrong_values := {{"ABBA"},{"baba"}} f_checkMatchingValues_rcs(t_rcs(t_cs_c2), vl_good_values,vl_wrong_values); } +// Note: this tests legacy behavior and requires the -M compiler option! //complement("ABBA","baba","Bye"); testcase tc_cs_c3_emb() runs on MC { var RoRCS vl_good_values := {{omit},{"AB"},{ "ab"},{"ba"},{"12"},{"A1"},{" "},{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}} @@ -827,18 +830,21 @@ testcase tc_cs_mod4vl3_emb() runs on MC { var RoRCS vl_wrong_values := {{omit},{"AB"},{"ab"},{"ba"},{"12"},{"A1"},{" "},{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}} f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4vl3), vl_good_values,vl_wrong_values); } +// Note: this tests legacy behavior and requires the -M compiler option! //complement("ABBA") testcase tc_cs_mod4c1_emb() runs on MC { var RoRCS vl_good_values := {{omit},{"AB"},{"ab"},{"ba"},{"12"},{"A1"},{" """},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}} var RoRCS vl_wrong_values := {{"ABBA"}} f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4c1), vl_good_values,vl_wrong_values); } +// Note: this tests legacy behavior and requires the -M compiler option! //complement("ABBA","baba"); testcase tc_cs_mod4c2_emb() runs on MC { var RoRCS vl_good_values :={{omit},{"AB"},{"ab"},{"ba"},{"12"},{"A1"},{" "},{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}} var RoRCS vl_wrong_values := {{"ABBA"},{"baba"}} f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4c2), vl_good_values,vl_wrong_values); } +// Note: this tests legacy behavior and requires the -M compiler option! //complement("ABBA","baba","Bye"); testcase tc_cs_mod4c3_emb() runs on MC { var RoRCS vl_good_values := {{omit},{"AB"},{ "ab"},{"ba"},{"12"},{"A1"},{" "},{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}} diff --git a/regression_test/text2ttcn/component_test.ttcn b/regression_test/text2ttcn/component_test.ttcn index fb298a176..82e825584 100644 --- a/regression_test/text2ttcn/component_test.ttcn +++ b/regression_test/text2ttcn/component_test.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/text2ttcn/enum_test.ttcn b/regression_test/text2ttcn/enum_test.ttcn index cfcba27eb..a1a9202a4 100755 --- a/regression_test/text2ttcn/enum_test.ttcn +++ b/regression_test/text2ttcn/enum_test.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/text2ttcn/float_test.ttcn b/regression_test/text2ttcn/float_test.ttcn index b625aabd3..9026a44b9 100755 --- a/regression_test/text2ttcn/float_test.ttcn +++ b/regression_test/text2ttcn/float_test.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/text2ttcn/functions.ttcn b/regression_test/text2ttcn/functions.ttcn index 7fc2d27c4..ebbaa2d3e 100644 --- a/regression_test/text2ttcn/functions.ttcn +++ b/regression_test/text2ttcn/functions.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/text2ttcn/hexstring_test.ttcn b/regression_test/text2ttcn/hexstring_test.ttcn index 1445680bf..e8d180742 100755 --- a/regression_test/text2ttcn/hexstring_test.ttcn +++ b/regression_test/text2ttcn/hexstring_test.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/text2ttcn/integer_test.ttcn b/regression_test/text2ttcn/integer_test.ttcn index ece89b6c8..0d70453fe 100755 --- a/regression_test/text2ttcn/integer_test.ttcn +++ b/regression_test/text2ttcn/integer_test.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/text2ttcn/objid_test.ttcn b/regression_test/text2ttcn/objid_test.ttcn index 1ef69c9d5..9db1dbd31 100644 --- a/regression_test/text2ttcn/objid_test.ttcn +++ b/regression_test/text2ttcn/objid_test.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/text2ttcn/octetstring_test.ttcn b/regression_test/text2ttcn/octetstring_test.ttcn index b6f4890b2..adb618abd 100755 --- a/regression_test/text2ttcn/octetstring_test.ttcn +++ b/regression_test/text2ttcn/octetstring_test.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/text2ttcn/record_test.ttcn b/regression_test/text2ttcn/record_test.ttcn index cc413e7f4..49cd1afd1 100755 --- a/regression_test/text2ttcn/record_test.ttcn +++ b/regression_test/text2ttcn/record_test.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/text2ttcn/recordof_test.ttcn b/regression_test/text2ttcn/recordof_test.ttcn index eb7f3dd61..cb45b0df9 100755 --- a/regression_test/text2ttcn/recordof_test.ttcn +++ b/regression_test/text2ttcn/recordof_test.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/text2ttcn/set_test.ttcn b/regression_test/text2ttcn/set_test.ttcn index d1c99acc8..b5f5c2ec2 100755 --- a/regression_test/text2ttcn/set_test.ttcn +++ b/regression_test/text2ttcn/set_test.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 @@ -218,6 +218,7 @@ testcase tc_set_mod4o_emb() runs on MC { } f_checkMatchingValues_rset(t_rset(tspt_set_mod4o),vl_good_values,vl_wrong_values); } +// Note: this tests legacy behavior and requires the -M compiler option! //tspt_set_mod4c1 := complement({ b:=true, cs:= "sth", f:=0.0, bs:=omit, os:=?,hs:=?,i:=99}) testcase tc_set_mod4c1_emb() runs on MC { log(t_rset(tspt_set_mod4c1)); diff --git a/regression_test/text2ttcn/setof_test.ttcn b/regression_test/text2ttcn/setof_test.ttcn index b030d49a5..275137931 100755 --- a/regression_test/text2ttcn/setof_test.ttcn +++ b/regression_test/text2ttcn/setof_test.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/text2ttcn/text2ttcn_1.cfg b/regression_test/text2ttcn/text2ttcn_1.cfg index f779a8fe1..4f59d1f3e 100644 --- a/regression_test/text2ttcn/text2ttcn_1.cfg +++ b/regression_test/text2ttcn/text2ttcn_1.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/text2ttcn/types.ttcn b/regression_test/text2ttcn/types.ttcn index 3748222a7..42576ec4c 100644 --- a/regression_test/text2ttcn/types.ttcn +++ b/regression_test/text2ttcn/types.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/text2ttcn/ucharstring_test.ttcn b/regression_test/text2ttcn/ucharstring_test.ttcn index 26bd4c252..7ff2c831d 100755 --- a/regression_test/text2ttcn/ucharstring_test.ttcn +++ b/regression_test/text2ttcn/ucharstring_test.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/text2ttcn/union_test.ttcn b/regression_test/text2ttcn/union_test.ttcn index e29736326..d2fb19882 100755 --- a/regression_test/text2ttcn/union_test.ttcn +++ b/regression_test/text2ttcn/union_test.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/transparent/Makefile b/regression_test/transparent/Makefile index f769504fd..5bfac57c2 100644 --- a/regression_test/transparent/Makefile +++ b/regression_test/transparent/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/transparent/run.cfg b/regression_test/transparent/run.cfg index 82371bb68..4344fa5a8 100644 --- a/regression_test/transparent/run.cfg +++ b/regression_test/transparent/run.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/transparent/transparent.ttcn b/regression_test/transparent/transparent.ttcn index fcf2e86dd..0b6b6cef4 100644 --- a/regression_test/transparent/transparent.ttcn +++ b/regression_test/transparent/transparent.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/tryCatch/Makefile b/regression_test/tryCatch/Makefile index 52e548491..2acf7ad4f 100644 --- a/regression_test/tryCatch/Makefile +++ b/regression_test/tryCatch/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/tryCatch/PCOType.cc b/regression_test/tryCatch/PCOType.cc index bcf498baa..a10755d93 100644 --- a/regression_test/tryCatch/PCOType.cc +++ b/regression_test/tryCatch/PCOType.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/tryCatch/PCOType.hh b/regression_test/tryCatch/PCOType.hh index 88f4a6ed5..f767dedea 100644 --- a/regression_test/tryCatch/PCOType.hh +++ b/regression_test/tryCatch/PCOType.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/tryCatch/external_function.cc b/regression_test/tryCatch/external_function.cc index 84dcb7aed..6c5a6df37 100644 --- a/regression_test/tryCatch/external_function.cc +++ b/regression_test/tryCatch/external_function.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/tryCatch/tryCatch.cfg b/regression_test/tryCatch/tryCatch.cfg index 9ba43a8e0..faa4d9a8b 100644 --- a/regression_test/tryCatch/tryCatch.cfg +++ b/regression_test/tryCatch/tryCatch.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/tryCatch/tryCatch_Functions.ttcn b/regression_test/tryCatch/tryCatch_Functions.ttcn index d07716eb7..55539fd85 100644 --- a/regression_test/tryCatch/tryCatch_Functions.ttcn +++ b/regression_test/tryCatch/tryCatch_Functions.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/tryCatch/tryCatch_Testcases.ttcn b/regression_test/tryCatch/tryCatch_Testcases.ttcn index 3ae2000b6..b72359e5c 100644 --- a/regression_test/tryCatch/tryCatch_Testcases.ttcn +++ b/regression_test/tryCatch/tryCatch_Testcases.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/ttcn2json/CompareSchemas.ttcn b/regression_test/ttcn2json/CompareSchemas.ttcn index 426111b7e..a7c7e5312 100644 --- a/regression_test/ttcn2json/CompareSchemas.ttcn +++ b/regression_test/ttcn2json/CompareSchemas.ttcn @@ -36,13 +36,15 @@ type record TypeSchemaElement { } type enumerated ElemKey { - Ref, Type, SubType, Pattern, OriginalName, UnusedAlias, MinItems, MaxItems, // strVal - AdditionalProperties, OmitAsNull, // boolVal + Ref, Type, SubType, Pattern, OriginalName, UnusedAlias, MinItems, MaxItems, MinLength, MaxLength, Minimum, Maximum, // strVal + AdditionalProperties, OmitAsNull, exclusiveMinimum, exclusiveMaximum, // boolVal Default, // strVal or boolVal - Enum, NumericValues, Required, FieldOrder, // strArrayVal + NumericValues, Required, FieldOrder, // strArrayVal + Enum, // arrayVal Items, // typeVal - AnyOf, // typeArrayVal - Properties // fieldSetVal + AnyOf, AllOf, // typeArrayVal + Properties, // fieldSetVal + Extension // extVal } type union ElemValue { @@ -51,7 +53,9 @@ type union ElemValue { record of charstring strArrayVal, TypeSchema typeVal, record of TypeSchema typeArrayVal, - set of FieldValue fieldSetVal + set of FieldValue fieldSetVal, + ExtensionValue extVal, + ArrayValue arrayVal } type record FieldValue { @@ -59,6 +63,27 @@ type record FieldValue { TypeSchema schema } +type record ExtensionValue { + charstring key, + charstring val +} + +type union AnyValue { + charstring strVal, // number, string or null + boolean boolVal, + ObjectValue objectVal, + ArrayValue arrayVal +} + +type record ObjectSegment { + charstring key, + AnyValue val +} + +type set of ObjectSegment ObjectValue; + +type record of AnyValue ArrayValue; + // references/functions section: type set of RefSchema RefSchemas; diff --git a/regression_test/ttcn2json/General_Types.ttcn b/regression_test/ttcn2json/General_Types.ttcn index fb0fbae82..40630f013 100644 --- a/regression_test/ttcn2json/General_Types.ttcn +++ b/regression_test/ttcn2json/General_Types.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/ttcn2json/General_Types_e.json b/regression_test/ttcn2json/General_Types_e.json index 3fc889a28..b6a733f76 100644 --- a/regression_test/ttcn2json/General_Types_e.json +++ b/regression_test/ttcn2json/General_Types_e.json @@ -1,374 +1,593 @@ { + "$schema" : "http://json-schema.org/draft-04/schema#", "definitions" : { "General_Types" : { "BIT1" : { "type" : "string", "subType" : "bitstring", - "pattern" : "^[01]*$" + "pattern" : "^[01]*$", + "minLength" : 1, + "maxLength" : 1 }, "BIT10" : { "type" : "string", "subType" : "bitstring", - "pattern" : "^[01]*$" + "pattern" : "^[01]*$", + "minLength" : 10, + "maxLength" : 10 }, "BIT11" : { "type" : "string", "subType" : "bitstring", - "pattern" : "^[01]*$" + "pattern" : "^[01]*$", + "minLength" : 11, + "maxLength" : 11 }, "BIT12" : { "type" : "string", "subType" : "bitstring", - "pattern" : "^[01]*$" + "pattern" : "^[01]*$", + "minLength" : 12, + "maxLength" : 12 }, "BIT12n" : { "type" : "string", "subType" : "bitstring", - "pattern" : "^[01]*$" + "pattern" : "^[01]*$", + "minLength" : 12, + "maxLength" : 12 }, "BIT14" : { "type" : "string", "subType" : "bitstring", - "pattern" : "^[01]*$" + "pattern" : "^[01]*$", + "minLength" : 14, + "maxLength" : 14 }, "BIT14_24n" : { "type" : "string", "subType" : "bitstring", - "pattern" : "^[01]*$" + "pattern" : "^[01]*$", + "minLength" : 14, + "maxLength" : 24 }, "BIT14n" : { "type" : "string", "subType" : "bitstring", - "pattern" : "^[01]*$" + "pattern" : "^[01]*$", + "minLength" : 14, + "maxLength" : 14 }, "BIT15" : { "type" : "string", "subType" : "bitstring", - "pattern" : "^[01]*$" + "pattern" : "^[01]*$", + "minLength" : 15, + "maxLength" : 15 }, "BIT15n" : { "type" : "string", "subType" : "bitstring", - "pattern" : "^[01]*$" + "pattern" : "^[01]*$", + "minLength" : 15, + "maxLength" : 15 }, "BIT15np" : { "type" : "string", "subType" : "bitstring", - "pattern" : "^[01]*$" + "pattern" : "^[01]*$", + "minLength" : 15, + "maxLength" : 15 }, "BIT16" : { "type" : "string", "subType" : "bitstring", - "pattern" : "^[01]*$" + "pattern" : "^[01]*$", + "minLength" : 16, + "maxLength" : 16 }, "BIT16_BO_LAST" : { "type" : "string", "subType" : "bitstring", - "pattern" : "^[01]*$" + "pattern" : "^[01]*$", + "minLength" : 16, + "maxLength" : 16 }, "BIT16n" : { "type" : "string", "subType" : "bitstring", - "pattern" : "^[01]*$" + "pattern" : "^[01]*$", + "minLength" : 16, + "maxLength" : 16 }, "BIT1n" : { "type" : "string", "subType" : "bitstring", - "pattern" : "^[01]*$" + "pattern" : "^[01]*$", + "minLength" : 1, + "maxLength" : 1 }, "BIT1np" : { "type" : "string", "subType" : "bitstring", - "pattern" : "^[01]*$" + "pattern" : "^[01]*$", + "minLength" : 1, + "maxLength" : 1 }, "BIT2" : { "type" : "string", "subType" : "bitstring", - "pattern" : "^[01]*$" + "pattern" : "^[01]*$", + "minLength" : 2, + "maxLength" : 2 }, "BIT24" : { "type" : "string", "subType" : "bitstring", - "pattern" : "^[01]*$" + "pattern" : "^[01]*$", + "minLength" : 24, + "maxLength" : 24 }, "BIT2n" : { "type" : "string", "subType" : "bitstring", - "pattern" : "^[01]*$" + "pattern" : "^[01]*$", + "minLength" : 2, + "maxLength" : 2 }, "BIT2np" : { "type" : "string", "subType" : "bitstring", - "pattern" : "^[01]*$" + "pattern" : "^[01]*$", + "minLength" : 2, + "maxLength" : 2 }, "BIT3" : { "type" : "string", "subType" : "bitstring", - "pattern" : "^[01]*$" + "pattern" : "^[01]*$", + "minLength" : 3, + "maxLength" : 3 }, "BIT31" : { "type" : "string", "subType" : "bitstring", - "pattern" : "^[01]*$" + "pattern" : "^[01]*$", + "minLength" : 31, + "maxLength" : 31 }, "BIT32_BO_LAST" : { "type" : "string", "subType" : "bitstring", - "pattern" : "^[01]*$" + "pattern" : "^[01]*$", + "minLength" : 32, + "maxLength" : 32 }, "BIT3n" : { "type" : "string", "subType" : "bitstring", - "pattern" : "^[01]*$" + "pattern" : "^[01]*$", + "minLength" : 3, + "maxLength" : 3 }, "BIT3np" : { "type" : "string", "subType" : "bitstring", - "pattern" : "^[01]*$" + "pattern" : "^[01]*$", + "minLength" : 3, + "maxLength" : 3 }, "BIT4" : { "type" : "string", "subType" : "bitstring", - "pattern" : "^[01]*$" + "pattern" : "^[01]*$", + "minLength" : 4, + "maxLength" : 4 }, "BIT4n" : { "type" : "string", "subType" : "bitstring", - "pattern" : "^[01]*$" + "pattern" : "^[01]*$", + "minLength" : 4, + "maxLength" : 4 }, "BIT4np" : { "type" : "string", "subType" : "bitstring", - "pattern" : "^[01]*$" + "pattern" : "^[01]*$", + "minLength" : 4, + "maxLength" : 4 }, "BIT5" : { "type" : "string", "subType" : "bitstring", - "pattern" : "^[01]*$" + "pattern" : "^[01]*$", + "minLength" : 5, + "maxLength" : 5 }, "BIT56" : { "type" : "string", "subType" : "bitstring", - "pattern" : "^[01]*$" + "pattern" : "^[01]*$", + "minLength" : 56, + "maxLength" : 56 }, "BIT56n" : { "type" : "string", "subType" : "bitstring", - "pattern" : "^[01]*$" + "pattern" : "^[01]*$", + "minLength" : 56, + "maxLength" : 56 }, "BIT5n" : { "type" : "string", "subType" : "bitstring", - "pattern" : "^[01]*$" + "pattern" : "^[01]*$", + "minLength" : 5, + "maxLength" : 5 }, "BIT5np" : { "type" : "string", "subType" : "bitstring", - "pattern" : "^[01]*$" + "pattern" : "^[01]*$", + "minLength" : 5, + "maxLength" : 5 }, "BIT6" : { "type" : "string", "subType" : "bitstring", - "pattern" : "^[01]*$" + "pattern" : "^[01]*$", + "minLength" : 6, + "maxLength" : 6 }, "BIT6_BO_LAST" : { "type" : "string", "subType" : "bitstring", - "pattern" : "^[01]*$" + "pattern" : "^[01]*$", + "minLength" : 6, + "maxLength" : 6 }, "BIT6n" : { "type" : "string", "subType" : "bitstring", - "pattern" : "^[01]*$" + "pattern" : "^[01]*$", + "minLength" : 6, + "maxLength" : 6 }, "BIT6np" : { "type" : "string", "subType" : "bitstring", - "pattern" : "^[01]*$" + "pattern" : "^[01]*$", + "minLength" : 6, + "maxLength" : 6 }, "BIT7" : { "type" : "string", "subType" : "bitstring", - "pattern" : "^[01]*$" + "pattern" : "^[01]*$", + "minLength" : 7, + "maxLength" : 7 }, "BIT7n" : { "type" : "string", "subType" : "bitstring", - "pattern" : "^[01]*$" + "pattern" : "^[01]*$", + "minLength" : 7, + "maxLength" : 7 }, "BIT7np" : { "type" : "string", "subType" : "bitstring", - "pattern" : "^[01]*$" + "pattern" : "^[01]*$", + "minLength" : 7, + "maxLength" : 7 }, "BIT8" : { "type" : "string", "subType" : "bitstring", - "pattern" : "^[01]*$" + "pattern" : "^[01]*$", + "minLength" : 8, + "maxLength" : 8 }, "BIT8n" : { "type" : "string", "subType" : "bitstring", - "pattern" : "^[01]*$" + "pattern" : "^[01]*$", + "minLength" : 8, + "maxLength" : 8 }, "BIT9" : { "type" : "string", "subType" : "bitstring", - "pattern" : "^[01]*$" + "pattern" : "^[01]*$", + "minLength" : 9, + "maxLength" : 9 }, "BIT9n" : { "type" : "string", "subType" : "bitstring", - "pattern" : "^[01]*$" + "pattern" : "^[01]*$", + "minLength" : 9, + "maxLength" : 9 }, "CHAR4" : { "type" : "string", - "subType" : "charstring" + "subType" : "charstring", + "minLength" : 4, + "maxLength" : 4 }, "Dummy" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 0, + "maxLength" : 0 }, "HEX0_16" : { "type" : "string", "subType" : "hexstring", - "pattern" : "^[0-9A-Fa-f]*$" + "pattern" : "^[0-9A-Fa-f]*$", + "minLength" : 0, + "maxLength" : 16 }, "HEX0_18n" : { "type" : "string", "subType" : "hexstring", - "pattern" : "^[0-9A-Fa-f]*$" + "pattern" : "^[0-9A-Fa-f]*$", + "minLength" : 0, + "maxLength" : 18 }, "HEX1" : { "type" : "string", "subType" : "hexstring", - "pattern" : "^[0-9A-Fa-f]*$" + "pattern" : "^[0-9A-Fa-f]*$", + "minLength" : 1, + "maxLength" : 1 }, "HEX15n" : { "type" : "string", "subType" : "hexstring", - "pattern" : "^[0-9A-Fa-f]*$" + "pattern" : "^[0-9A-Fa-f]*$", + "minLength" : 15, + "maxLength" : 15 }, "HEX16n" : { "type" : "string", "subType" : "hexstring", - "pattern" : "^[0-9A-Fa-f]*$" + "pattern" : "^[0-9A-Fa-f]*$", + "minLength" : 16, + "maxLength" : 16 }, "HEX1_20n" : { "type" : "string", "subType" : "hexstring", - "pattern" : "^[0-9A-Fa-f]*$" + "pattern" : "^[0-9A-Fa-f]*$", + "minLength" : 1, + "maxLength" : 20 }, "HEX1_32" : { "type" : "string", "subType" : "hexstring", - "pattern" : "^[0-9A-Fa-f]*$" + "pattern" : "^[0-9A-Fa-f]*$", + "minLength" : 1, + "maxLength" : 32 }, "HEX1_34n" : { "type" : "string", "subType" : "hexstring", - "pattern" : "^[0-9A-Fa-f]*$" + "pattern" : "^[0-9A-Fa-f]*$", + "minLength" : 1, + "maxLength" : 34 }, "HEX24n" : { "type" : "string", "subType" : "hexstring", - "pattern" : "^[0-9A-Fa-f]*$" + "pattern" : "^[0-9A-Fa-f]*$", + "minLength" : 24, + "maxLength" : 24 }, "HEX4n" : { "type" : "string", "subType" : "hexstring", - "pattern" : "^[0-9A-Fa-f]*$" + "pattern" : "^[0-9A-Fa-f]*$", + "minLength" : 4, + "maxLength" : 4 }, "HEX5_16" : { "type" : "string", "subType" : "hexstring", - "pattern" : "^[0-9A-Fa-f]*$" + "pattern" : "^[0-9A-Fa-f]*$", + "minLength" : 5, + "maxLength" : 16 }, "HEX6n" : { "type" : "string", "subType" : "hexstring", - "pattern" : "^[0-9A-Fa-f]*$" + "pattern" : "^[0-9A-Fa-f]*$", + "minLength" : 6, + "maxLength" : 6 }, "HEX8n" : { "type" : "string", "subType" : "hexstring", - "pattern" : "^[0-9A-Fa-f]*$" + "pattern" : "^[0-9A-Fa-f]*$", + "minLength" : 8, + "maxLength" : 8 }, "INT1" : { - "type" : "integer" + "type" : "integer", + "minimum" : 0, + "exclusiveMinimum" : false, + "maximum" : 255, + "exclusiveMaximum" : false }, "INT11b_BO_LAST" : { - "type" : "integer" + "type" : "integer", + "minimum" : 0, + "exclusiveMinimum" : false, + "maximum" : 2047, + "exclusiveMaximum" : false }, "INT12b_BO_LAST" : { - "type" : "integer" + "type" : "integer", + "minimum" : 0, + "exclusiveMinimum" : false, + "maximum" : 4095, + "exclusiveMaximum" : false }, "INT13b_BO_LAST" : { - "type" : "integer" + "type" : "integer", + "minimum" : 0, + "exclusiveMinimum" : false, + "maximum" : 8191, + "exclusiveMaximum" : false }, "INT13nbp" : { - "type" : "integer" + "type" : "integer", + "minimum" : 0, + "exclusiveMinimum" : false, + "maximum" : 8191, + "exclusiveMaximum" : false }, "INT14b_BO_LAST" : { - "type" : "integer" + "type" : "integer", + "minimum" : 0, + "exclusiveMinimum" : false, + "maximum" : 16383, + "exclusiveMaximum" : false }, "INT15nbp" : { - "type" : "integer" + "type" : "integer", + "minimum" : 0, + "exclusiveMinimum" : false, + "maximum" : 32767, + "exclusiveMaximum" : false }, "INT1b" : { - "type" : "integer" + "type" : "integer", + "minimum" : 0, + "exclusiveMinimum" : false, + "maximum" : 1, + "exclusiveMaximum" : false }, "INT1nbp" : { - "type" : "integer" + "type" : "integer", + "minimum" : 0, + "exclusiveMinimum" : false, + "maximum" : 1, + "exclusiveMaximum" : false }, "INT20b_BO_LAST" : { - "type" : "integer" + "type" : "integer", + "minimum" : 0, + "exclusiveMinimum" : false, + "maximum" : 1048575, + "exclusiveMaximum" : false }, "INT2b" : { - "type" : "integer" + "type" : "integer", + "minimum" : 0, + "exclusiveMinimum" : false, + "maximum" : 3, + "exclusiveMaximum" : false }, "INT2nbp" : { - "type" : "integer" + "type" : "integer", + "minimum" : 0, + "exclusiveMinimum" : false, + "maximum" : 3, + "exclusiveMaximum" : false }, "INT31b_BO_LAST" : { - "type" : "integer" + "type" : "integer", + "minimum" : 0, + "exclusiveMinimum" : false, + "maximum" : 2147483647, + "exclusiveMaximum" : false }, "INT3b" : { - "type" : "integer" + "type" : "integer", + "minimum" : 0, + "exclusiveMinimum" : false, + "maximum" : 7, + "exclusiveMaximum" : false }, "INT3nb" : { - "type" : "integer" + "type" : "integer", + "minimum" : 0, + "exclusiveMinimum" : false, + "maximum" : 7, + "exclusiveMaximum" : false }, "INT3nbp" : { - "type" : "integer" + "type" : "integer", + "minimum" : 0, + "exclusiveMinimum" : false, + "maximum" : 7, + "exclusiveMaximum" : false }, "INT4b" : { - "type" : "integer" + "type" : "integer", + "minimum" : 0, + "exclusiveMinimum" : false, + "maximum" : 15, + "exclusiveMaximum" : false }, "INT4nb" : { - "type" : "integer" + "type" : "integer", + "minimum" : 0, + "exclusiveMinimum" : false, + "maximum" : 15, + "exclusiveMaximum" : false }, "INT5b" : { - "type" : "integer" + "type" : "integer", + "minimum" : 0, + "exclusiveMinimum" : false, + "maximum" : 31, + "exclusiveMaximum" : false }, "INT5nb" : { - "type" : "integer" + "type" : "integer", + "minimum" : 0, + "exclusiveMinimum" : false, + "maximum" : 31, + "exclusiveMaximum" : false }, "INT5nbp" : { - "type" : "integer" + "type" : "integer", + "minimum" : 0, + "exclusiveMinimum" : false, + "maximum" : 31, + "exclusiveMaximum" : false }, "INT6b" : { - "type" : "integer" + "type" : "integer", + "minimum" : 0, + "exclusiveMinimum" : false, + "maximum" : 63, + "exclusiveMaximum" : false }, "INT7b" : { - "type" : "integer" + "type" : "integer", + "minimum" : 0, + "exclusiveMinimum" : false, + "maximum" : 127, + "exclusiveMaximum" : false }, "INT8nb" : { - "type" : "integer" + "type" : "integer", + "minimum" : 0, + "exclusiveMinimum" : false, + "maximum" : 255, + "exclusiveMaximum" : false }, "INT9nbp" : { - "type" : "integer" + "type" : "integer", + "minimum" : 0, + "exclusiveMinimum" : false, + "maximum" : 511, + "exclusiveMaximum" : false }, "Integer_array" : { "type" : "array", @@ -385,144 +604,214 @@ } }, "LIN1" : { - "type" : "integer" + "type" : "integer", + "minimum" : 0, + "exclusiveMinimum" : false, + "maximum" : 255, + "exclusiveMaximum" : false }, "LIN2" : { - "type" : "integer" + "type" : "integer", + "minimum" : 0, + "exclusiveMinimum" : false, + "maximum" : 65535, + "exclusiveMaximum" : false }, "LIN2_BO_LAST" : { - "type" : "integer" + "type" : "integer", + "minimum" : 0, + "exclusiveMinimum" : false, + "maximum" : 65535, + "exclusiveMaximum" : false }, "LIN3_BO_LAST" : { - "type" : "integer" + "type" : "integer", + "minimum" : 0, + "exclusiveMinimum" : false, + "maximum" : 16777215, + "exclusiveMaximum" : false }, "LIN4_BO_LAST" : { - "type" : "integer" + "type" : "integer", + "minimum" : 0, + "exclusiveMinimum" : false, + "maximum" : 4294967295, + "exclusiveMaximum" : false }, "OCT0" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 0, + "maxLength" : 0 }, "OCT0n" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 0, + "maxLength" : 0 }, "OCT1" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 1, + "maxLength" : 1 }, "OCT10" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 10, + "maxLength" : 10 }, "OCT100n" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 100, + "maxLength" : 100 }, "OCT10n" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 10, + "maxLength" : 10 }, "OCT11" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 11, + "maxLength" : 11 }, "OCT11n" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 11, + "maxLength" : 11 }, "OCT12" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 12, + "maxLength" : 12 }, "OCT128n" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 128, + "maxLength" : 128 }, "OCT12n" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 12, + "maxLength" : 12 }, "OCT13" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 13, + "maxLength" : 13 }, "OCT13n" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 13, + "maxLength" : 13 }, "OCT14" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 14, + "maxLength" : 14 }, "OCT14n" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 14, + "maxLength" : 14 }, "OCT15" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 15, + "maxLength" : 15 }, "OCT15n" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 15, + "maxLength" : 15 }, "OCT16" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 16, + "maxLength" : 16 }, "OCT16n" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 16, + "maxLength" : 16 }, "OCT17" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 17, + "maxLength" : 17 }, "OCT17n" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 17, + "maxLength" : 17 }, "OCT18" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 18, + "maxLength" : 18 }, "OCT18n" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 18, + "maxLength" : 18 }, "OCT19" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 19, + "maxLength" : 19 }, "OCT19n" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 19, + "maxLength" : 19 }, "OCT1List" : { "type" : "array", @@ -534,152 +823,212 @@ "OCT1_112n" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 1, + "maxLength" : 112 }, "OCT1_12" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 1, + "maxLength" : 12 }, "OCT1_127n" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 1, + "maxLength" : 127 }, "OCT1_128n" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 1, + "maxLength" : 128 }, "OCT1_12n" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 1, + "maxLength" : 12 }, "OCT1_15n" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 1, + "maxLength" : 15 }, "OCT1_16n" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 1, + "maxLength" : 16 }, "OCT1_172n" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 1, + "maxLength" : 172 }, "OCT1_18n" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 1, + "maxLength" : 18 }, "OCT1_20n" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 1, + "maxLength" : 20 }, "OCT1_24n" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 1, + "maxLength" : 24 }, "OCT1_260" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 1, + "maxLength" : 260 }, "OCT1_32" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 1, + "maxLength" : 32 }, "OCT1_32n" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 1, + "maxLength" : 32 }, "OCT1_34n" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 1, + "maxLength" : 34 }, "OCT1_3n" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 1, + "maxLength" : 3 }, "OCT1_46n" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 1, + "maxLength" : 46 }, "OCT1_4n" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 1, + "maxLength" : 4 }, "OCT1_50" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 1, + "maxLength" : 50 }, "OCT1_50n" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 1, + "maxLength" : 50 }, "OCT1_5n" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 1, + "maxLength" : 5 }, "OCT1_6n" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 1, + "maxLength" : 6 }, "OCT1_7n" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 1, + "maxLength" : 7 }, "OCT1_8" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 1, + "maxLength" : 8 }, "OCT1_8n" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 1, + "maxLength" : 8 }, "OCT1n" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 1, + "maxLength" : 1 }, "OCT2" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 2, + "maxLength" : 2 }, "OCT20" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 20, + "maxLength" : 20 }, "OCT20n" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 20, + "maxLength" : 20 }, "OCT28n" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 28, + "maxLength" : 28 }, "OCT2List" : { "type" : "array", @@ -691,32 +1040,44 @@ "OCT2n" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 2, + "maxLength" : 2 }, "OCT3" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 3, + "maxLength" : 3 }, "OCT32" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 32, + "maxLength" : 32 }, "OCT32n" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 32, + "maxLength" : 32 }, "OCT34" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 34, + "maxLength" : 34 }, "OCT34n" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 34, + "maxLength" : 34 }, "OCT3List" : { "type" : "array", @@ -728,52 +1089,72 @@ "OCT3_14n" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 3, + "maxLength" : 14 }, "OCT3_17n" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 3, + "maxLength" : 17 }, "OCT3_5n" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 3, + "maxLength" : 5 }, "OCT3_7n" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 3, + "maxLength" : 7 }, "OCT3_8" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 3, + "maxLength" : 8 }, "OCT3_8n" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 3, + "maxLength" : 8 }, "OCT3n" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 3, + "maxLength" : 3 }, "OCT4" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 4, + "maxLength" : 4 }, "OCT46" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 46, + "maxLength" : 46 }, "OCT46n" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 46, + "maxLength" : 46 }, "OCT4List" : { "type" : "array", @@ -785,27 +1166,37 @@ "OCT4_8n" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 4, + "maxLength" : 8 }, "OCT4n" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 4, + "maxLength" : 4 }, "OCT5" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 5, + "maxLength" : 5 }, "OCT500n" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 500, + "maxLength" : 500 }, "OCT50n" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 50, + "maxLength" : 50 }, "OCT5List" : { "type" : "array", @@ -817,17 +1208,23 @@ "OCT5n" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 5, + "maxLength" : 5 }, "OCT6" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 6, + "maxLength" : 6 }, "OCT69n" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 69, + "maxLength" : 69 }, "OCT6List" : { "type" : "array", @@ -839,12 +1236,16 @@ "OCT6n" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 6, + "maxLength" : 6 }, "OCT7" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 7, + "maxLength" : 7 }, "OCT7List" : { "type" : "array", @@ -856,27 +1257,37 @@ "OCT7n" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 7, + "maxLength" : 7 }, "OCT8" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 8, + "maxLength" : 8 }, "OCT8n" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 8, + "maxLength" : 8 }, "OCT9" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 9, + "maxLength" : 9 }, "OCT9n" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "minLength" : 9, + "maxLength" : 9 }, "OCTN" : { "type" : "string", @@ -931,7 +1342,7 @@ "$ref" : "#/definitions/General_Types/OCT8n" }, { - "$ref" : "#/definitions/General_Types/OCT9n" + "$ref" : "#/definitions/General_Types/BIT1n" }, { "$ref" : "#/definitions/General_Types/BIT2n" @@ -1014,9 +1425,6 @@ { "$ref" : "#/definitions/General_Types/BIT4" }, - { - "$ref" : "#/definitions/General_Types/BIT1n" - }, { "$ref" : "#/definitions/General_Types/BIT5" }, @@ -1080,6 +1488,9 @@ { "$ref" : "#/definitions/General_Types/OCT6n" }, + { + "$ref" : "#/definitions/General_Types/OCT9n" + }, { "$ref" : "#/definitions/General_Types/OCT10n" }, diff --git a/regression_test/ttcn2json/Main_e.json b/regression_test/ttcn2json/Main_e.json index 40a29b30e..3f419575c 100644 --- a/regression_test/ttcn2json/Main_e.json +++ b/regression_test/ttcn2json/Main_e.json @@ -1,4 +1,5 @@ { + "$schema" : "http://json-schema.org/draft-04/schema#", "definitions" : { "Main" : { "HasPardType" : { diff --git a/regression_test/ttcn2json/Makefile b/regression_test/ttcn2json/Makefile index 30664bbb1..46b1bccdc 100755 --- a/regression_test/ttcn2json/Makefile +++ b/regression_test/ttcn2json/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 @@ -30,7 +30,7 @@ OBJECTS = $(GENERATED_SOURCES:.cc=.o) $(USER_SOURCES:.cc=.o) TARGET = ttcn2json$(EXESUFFIX) -TEMP_FILES = General_Types.json one.json two.json three.json Main.json +TEMP_FILES = General_Types.json one.json two.json three.json Main.json SubType.json all: $(TARGET) diff --git a/regression_test/ttcn2json/MiniRanap_e.json b/regression_test/ttcn2json/MiniRanap_e.json index 534ec07f6..9dcf32afd 100644 --- a/regression_test/ttcn2json/MiniRanap_e.json +++ b/regression_test/ttcn2json/MiniRanap_e.json @@ -1,4 +1,5 @@ { + "$schema" : "http://json-schema.org/draft-04/schema#", "definitions" : { "MiniRanap" : { "Criticality" : { diff --git a/regression_test/ttcn2json/PIPEasp_PT.cc b/regression_test/ttcn2json/PIPEasp_PT.cc index 2b57a1698..ea6fbf86c 100644 --- a/regression_test/ttcn2json/PIPEasp_PT.cc +++ b/regression_test/ttcn2json/PIPEasp_PT.cc @@ -1,5 +1,5 @@ /******************************************************************************* -* Copyright (c) 2000-2014 Ericsson Telecom AB +* Copyright (c) 2000-2015 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 diff --git a/regression_test/ttcn2json/PIPEasp_PT.hh b/regression_test/ttcn2json/PIPEasp_PT.hh index df7624021..47c44bb20 100644 --- a/regression_test/ttcn2json/PIPEasp_PT.hh +++ b/regression_test/ttcn2json/PIPEasp_PT.hh @@ -1,5 +1,5 @@ /******************************************************************************* -* Copyright (c) 2000-2014 Ericsson Telecom AB +* Copyright (c) 2000-2015 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 diff --git a/regression_test/ttcn2json/PIPEasp_PortType.ttcn b/regression_test/ttcn2json/PIPEasp_PortType.ttcn index 1d43b6fa8..afaf5b9a1 100644 --- a/regression_test/ttcn2json/PIPEasp_PortType.ttcn +++ b/regression_test/ttcn2json/PIPEasp_PortType.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/ttcn2json/PIPEasp_Templates.ttcn b/regression_test/ttcn2json/PIPEasp_Templates.ttcn index 988bd4824..ead0f96cc 100644 --- a/regression_test/ttcn2json/PIPEasp_Templates.ttcn +++ b/regression_test/ttcn2json/PIPEasp_Templates.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/ttcn2json/PIPEasp_Types.ttcn b/regression_test/ttcn2json/PIPEasp_Types.ttcn index da8ea94df..b63bccda1 100644 --- a/regression_test/ttcn2json/PIPEasp_Types.ttcn +++ b/regression_test/ttcn2json/PIPEasp_Types.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/ttcn2json/Shell.ttcn b/regression_test/ttcn2json/Shell.ttcn index 85d53f1a0..50dff6f08 100644 --- a/regression_test/ttcn2json/Shell.ttcn +++ b/regression_test/ttcn2json/Shell.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/ttcn2json/SubType.ttcn b/regression_test/ttcn2json/SubType.ttcn new file mode 100644 index 000000000..4df8c2289 --- /dev/null +++ b/regression_test/ttcn2json/SubType.ttcn @@ -0,0 +1,125 @@ +/****************************************************************************** + * Copyright (c) 2000-2015 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 + ******************************************************************************/ + +module SubType { + +const integer ZERO := 0; + +type integer PosInt (!ZERO..infinity); + +type PosInt PosIntValues (1, 5, 7, 10); + +type record Rec { + PosIntValues val optional, + Int i (0..6-3), + octetstring os ('1010'O, '1001'O, '1100'O) optional, + boolean b optional +} +with { + variant(val) "JSON: name as posInt"; + variant(i) "JSON: name as int"; +} + +type Rec RecValues ( + { 1, 0, '1010'O, false }, + { 5, 0, '1001'O, true }, + { 7, 2, omit, true }, + { omit, 1, omit, omit } +); + +type integer Int; + +type PosInt PosIntCopy; + +type enumerated Size { Small, Medium, Large }; + +type Size LargeSize ( Large ); + +type charstring CapitalLetters ("A".."Z") length (1..6); + +type float NegFloat (-infinity..0.0); + +type float NegFloatExcl (!-infinity..!0.0); + +type float SpecialFloat (-infinity, infinity, not_a_number); + +type record length (3..infinity) of PosInt PosIntList; + +type set length (2) of CapitalLetters CapitalStringList; + +type record of integer OnesAndTwos ( 1, 2 ); + +type OnesAndTwos OneTwo ( + { 1, 2 }, + { [3] := 2, [0] := 1, [2] := 1, [1] := 2 } +); + +type verdicttype SimpleVerdict (pass, fail, error); + +type union RegularUnion { + Int i, + charstring str +} +with { + variant(i) "JSON: name as int"; +} + +type RegularUnion RegularUnionValues ( + { i := 3 }, + { str := "abc" } +); + +type union AsValueUnion { + Int i, + charstring str +} +with { + variant "JSON: as value"; +} + +type AsValueUnion AsValueUnionValues ( + { i := 3 }, + { str := "abc" } +); + +type AsValueUnion MoreAsValueUnionValues ( + AsValueUnionValues, + { i := 6 } +); + +type anytype AnyTypeValues ( + { integer := 5 }, + { boolean := false }, + { bitstring := '0011'B }, + { charstring := "mine" } +); + +type universal charstring StringValues ( "almafa", "áram", "űrhajó" ); + +type charstring Alphanumeric ( "a".."z", "A".."Z", "0".."9" ) ; + +type integer NonZero (-infinity..!0, !0..infinity); + +type float ItsComplicated (-infinity..-1.0, 0.0, 0.5, 1.0, 3.14, not_a_number); + +type universal charstring UnicodeStringRanges ( char(0, 0, 1, 81)..char(0, 0, 1, 113), char(0, 0, 1, 66)..char(0, 0, 1, 97) ); + +type charstring CharstringPattern (pattern "abc*xyz"); + +type charstring CharstringPatternLong (pattern "*ab?\*\?\(\+[0-9a-fA-F*?\n]#(2,4)xx([^abc]+)|([abc]+)xx\d\dx\wx\nx\rx\sx\"x""x\\d"); + +const charstring ConstRef := "ab?c"; + +type charstring CharstringPatternRef (pattern "x{ConstRef}x"); + +type universal charstring UnicodePattern (pattern "abc?\q{ 0, 0, 1, 113}z\\q1\q{0,0,0,2}"); + +} +with { + extension "anytype integer, boolean, bitstring, charstring" +} diff --git a/regression_test/ttcn2json/SubType_e.json b/regression_test/ttcn2json/SubType_e.json new file mode 100644 index 000000000..e7b145ca0 --- /dev/null +++ b/regression_test/ttcn2json/SubType_e.json @@ -0,0 +1,632 @@ +{ + "$schema" : "http://json-schema.org/draft-04/schema#", + "definitions" : { + "SubType" : { + "Alphanumeric" : { + "type" : "string", + "subType" : "charstring", + "pattern" : "^[a-zA-Z0-9]*$" + }, + "AnyTypeValues" : { + "allOf" : [ + { + "$ref" : "#/definitions/SubType/anytype" + }, + { + "enum" : [ + { + "integer" : 5 + }, + { + "boolean" : false + }, + { + "bitstring" : "0011" + }, + { + "charstring" : "mine" + } + ] + } + ] + }, + "AsValueUnion" : { + "anyOf" : [ + { + "originalName" : "i", + "$ref" : "#/definitions/SubType/Int" + }, + { + "originalName" : "str", + "type" : "string", + "subType" : "charstring" + } + ] + }, + "AsValueUnionValues" : { + "allOf" : [ + { + "$ref" : "#/definitions/SubType/AsValueUnion" + }, + { + "enum" : [ + 3, + "abc" + ] + } + ] + }, + "CapitalLetters" : { + "type" : "string", + "subType" : "charstring", + "minLength" : 1, + "maxLength" : 6, + "pattern" : "^[A-Z]*$" + }, + "CapitalStringList" : { + "type" : "array", + "subType" : "set of", + "items" : { + "$ref" : "#/definitions/SubType/CapitalLetters" + }, + "minItems" : 2, + "maxItems" : 2 + }, + "CharstringPattern" : { + "type" : "string", + "subType" : "charstring", + "pattern" : "^abc.*xyz$" + }, + "CharstringPatternLong" : { + "type" : "string", + "subType" : "charstring", + "pattern" : "^.*ab.\\*\\?\\(\\+[\n-\r*0-9?A-Fa-f]{2,4}xx([^a-c]+)$|^([a-c]+)xx[0-9][0-9]x[0-9A-Za-z]x[\n-\r]x\rx[\t-\r ]x\"x\"x\\\\d$" + }, + "CharstringPatternRef" : { + "type" : "string", + "subType" : "charstring", + "pattern" : "^xab.cx$" + }, + "Int" : { + "type" : "integer" + }, + "ItsComplicated" : { + "anyOf" : [ + { + "type" : "number", + "anyOf" : [ + { + "enum" : [ + 0.000000, + 0.500000, + 1.000000, + 3.140000 + ] + }, + { + "maximum" : -1.000000, + "exclusiveMaximum" : false + } + ] + }, + { + "enum" : [ + "not_a_number", + "-infinity" + ] + } + ] + }, + "LargeSize" : { + "allOf" : [ + { + "$ref" : "#/definitions/SubType/Size" + }, + { + "enum" : [ + "Large" + ] + } + ] + }, + "MoreAsValueUnionValues" : { + "allOf" : [ + { + "$ref" : "#/definitions/SubType/AsValueUnion" + }, + { + "enum" : [ + 3, + "abc", + 6 + ] + } + ] + }, + "NegFloat" : { + "anyOf" : [ + { + "type" : "number", + "maximum" : 0.000000, + "exclusiveMaximum" : false + }, + { + "enum" : [ + "-infinity" + ] + } + ] + }, + "NegFloatExcl" : { + "type" : "number", + "maximum" : 0.000000, + "exclusiveMaximum" : true + }, + "NonZero" : { + "type" : "integer", + "anyOf" : [ + { + "maximum" : 0, + "exclusiveMaximum" : true + }, + { + "minimum" : 0, + "exclusiveMinimum" : true + } + ] + }, + "OneTwo" : { + "allOf" : [ + { + "$ref" : "#/definitions/SubType/OnesAndTwos" + }, + { + "enum" : [ + [ + 1, + 2 + ], + [ + 1, + 2, + 1, + 2 + ] + ] + } + ] + }, + "OnesAndTwos" : { + "type" : "array", + "subType" : "record of", + "items" : { + "type" : "integer", + "enum" : [ + 1, + 2 + ] + } + }, + "PosInt" : { + "type" : "integer", + "minimum" : 0, + "exclusiveMinimum" : true + }, + "PosIntCopy" : { + "$ref" : "#/definitions/SubType/PosInt" + }, + "PosIntList" : { + "type" : "array", + "subType" : "record of", + "items" : { + "$ref" : "#/definitions/SubType/PosInt" + }, + "minItems" : 3 + }, + "PosIntValues" : { + "allOf" : [ + { + "$ref" : "#/definitions/SubType/PosInt" + }, + { + "enum" : [ + 1, + 5, + 7, + 10 + ] + } + ] + }, + "Rec" : { + "type" : "object", + "subType" : "record", + "properties" : { + "posInt" : { + "anyOf" : [ + { + "type" : "null" + }, + { + "originalName" : "val", + "$ref" : "#/definitions/SubType/PosIntValues" + } + ], + "omitAsNull" : false + }, + "int" : { + "originalName" : "i", + "allOf" : [ + { + "$ref" : "#/definitions/SubType/Int" + }, + { + "minimum" : 0, + "exclusiveMinimum" : false, + "maximum" : 3, + "exclusiveMaximum" : false + } + ] + }, + "os" : { + "anyOf" : [ + { + "type" : "null" + }, + { + "type" : "string", + "subType" : "octetstring", + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "enum" : [ + "1010", + "1001", + "1100" + ] + } + ], + "omitAsNull" : false + }, + "b" : { + "anyOf" : [ + { + "type" : "null" + }, + { + "type" : "boolean" + } + ], + "omitAsNull" : false + } + }, + "additionalProperties" : false, + "fieldOrder" : [ + "posInt", + "int", + "os", + "b" + ], + "required" : [ + "int" + ] + }, + "RecValues" : { + "allOf" : [ + { + "$ref" : "#/definitions/SubType/Rec" + }, + { + "enum" : [ + { + "posInt" : 1, + "int" : 0, + "os" : "1010", + "b" : false + }, + { + "posInt" : 5, + "int" : 0, + "os" : "1001", + "b" : true + }, + { + "posInt" : 7, + "int" : 2, + "b" : true + }, + { + "posInt" : 7, + "int" : 2, + "os" : null, + "b" : true + }, + { + "int" : 1 + }, + { + "posInt" : null, + "int" : 1 + }, + { + "int" : 1, + "os" : null + }, + { + "posInt" : null, + "int" : 1, + "os" : null + }, + { + "int" : 1, + "b" : null + }, + { + "posInt" : null, + "int" : 1, + "b" : null + }, + { + "int" : 1, + "os" : null, + "b" : null + }, + { + "posInt" : null, + "int" : 1, + "os" : null, + "b" : null + } + ] + } + ] + }, + "RegularUnion" : { + "anyOf" : [ + { + "type" : "object", + "properties" : { + "int" : { + "originalName" : "i", + "$ref" : "#/definitions/SubType/Int" + } + }, + "additionalProperties" : false, + "required" : [ + "int" + ] + }, + { + "type" : "object", + "properties" : { + "str" : { + "type" : "string", + "subType" : "charstring" + } + }, + "additionalProperties" : false, + "required" : [ + "str" + ] + } + ] + }, + "RegularUnionValues" : { + "allOf" : [ + { + "$ref" : "#/definitions/SubType/RegularUnion" + }, + { + "enum" : [ + { + "int" : 3 + }, + { + "str" : "abc" + } + ] + } + ] + }, + "SimpleVerdict" : { + "enum" : [ + "pass", + "fail", + "error" + ] + }, + "Size" : { + "enum" : [ + "Small", + "Medium", + "Large" + ], + "numericValues" : [ + 0, + 1, + 2 + ] + }, + "SpecialFloat" : { + "enum" : [ + "not_a_number", + "infinity", + "-infinity" + ] + }, + "StringValues" : { + "type" : "string", + "subType" : "universal charstring", + "enum" : [ + "almafa", + "áram", + "űrhajó" + ] + }, + "UnicodePattern" : { + "type" : "string", + "subType" : "universal charstring", + "pattern" : "^abc.űz\\\\q1\u0002$" + }, + "UnicodeStringRanges" : { + "type" : "string", + "subType" : "universal charstring", + "pattern" : "^[Å‘-űł-Å¡]*$" + }, + "anytype" : { + "anyOf" : [ + { + "type" : "object", + "properties" : { + "integer" : { + "type" : "integer" + } + }, + "additionalProperties" : false, + "required" : [ + "integer" + ] + }, + { + "type" : "object", + "properties" : { + "boolean" : { + "type" : "boolean" + } + }, + "additionalProperties" : false, + "required" : [ + "boolean" + ] + }, + { + "type" : "object", + "properties" : { + "bitstring" : { + "type" : "string", + "subType" : "bitstring", + "pattern" : "^[01]*$" + } + }, + "additionalProperties" : false, + "required" : [ + "bitstring" + ] + }, + { + "type" : "object", + "properties" : { + "charstring" : { + "type" : "string", + "subType" : "charstring" + } + }, + "additionalProperties" : false, + "required" : [ + "charstring" + ] + } + ] + } + } + }, + "anyOf" : [ + { + "$ref" : "#/definitions/SubType/PosInt" + }, + { + "$ref" : "#/definitions/SubType/PosIntValues" + }, + { + "$ref" : "#/definitions/SubType/Rec" + }, + { + "$ref" : "#/definitions/SubType/RecValues" + }, + { + "$ref" : "#/definitions/SubType/Int" + }, + { + "$ref" : "#/definitions/SubType/PosIntCopy" + }, + { + "$ref" : "#/definitions/SubType/Size" + }, + { + "$ref" : "#/definitions/SubType/LargeSize" + }, + { + "$ref" : "#/definitions/SubType/CapitalLetters" + }, + { + "$ref" : "#/definitions/SubType/NegFloat" + }, + { + "$ref" : "#/definitions/SubType/NegFloatExcl" + }, + { + "$ref" : "#/definitions/SubType/SpecialFloat" + }, + { + "$ref" : "#/definitions/SubType/PosIntList" + }, + { + "$ref" : "#/definitions/SubType/CapitalStringList" + }, + { + "$ref" : "#/definitions/SubType/OnesAndTwos" + }, + { + "$ref" : "#/definitions/SubType/OneTwo" + }, + { + "$ref" : "#/definitions/SubType/SimpleVerdict" + }, + { + "$ref" : "#/definitions/SubType/RegularUnion" + }, + { + "$ref" : "#/definitions/SubType/RegularUnionValues" + }, + { + "$ref" : "#/definitions/SubType/AsValueUnion" + }, + { + "$ref" : "#/definitions/SubType/AsValueUnionValues" + }, + { + "$ref" : "#/definitions/SubType/MoreAsValueUnionValues" + }, + { + "$ref" : "#/definitions/SubType/AnyTypeValues" + }, + { + "$ref" : "#/definitions/SubType/StringValues" + }, + { + "$ref" : "#/definitions/SubType/Alphanumeric" + }, + { + "$ref" : "#/definitions/SubType/NonZero" + }, + { + "$ref" : "#/definitions/SubType/ItsComplicated" + }, + { + "$ref" : "#/definitions/SubType/UnicodeStringRanges" + }, + { + "$ref" : "#/definitions/SubType/CharstringPattern" + }, + { + "$ref" : "#/definitions/SubType/CharstringPatternLong" + }, + { + "$ref" : "#/definitions/SubType/CharstringPatternRef" + }, + { + "$ref" : "#/definitions/SubType/UnicodePattern" + }, + { + "$ref" : "#/definitions/SubType/anytype" + } + ] +} diff --git a/regression_test/ttcn2json/Testcases.ttcn b/regression_test/ttcn2json/Testcases.ttcn index b6ae4a648..f2fde9131 100644 --- a/regression_test/ttcn2json/Testcases.ttcn +++ b/regression_test/ttcn2json/Testcases.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 @@ -64,6 +64,12 @@ testcase tc_t2j_mini_ranap() runs on Shell_CT c_shell_successWithoutWarningAndError); } +testcase tc_t2j_subtype() runs on Shell_CT +{ + f_test_ttcn2json("SubType.ttcn", "SubType.json", "SubType_e.json", + c_shell_successWithoutWarningAndError); +} + control { execute(tc_t2j_one()); execute(tc_t2j_two()); @@ -71,6 +77,7 @@ control { execute(tc_t2j_general_types()); execute(tc_t2j_main_asn()); execute(tc_t2j_mini_ranap()); + execute(tc_t2j_subtype()); } } diff --git a/regression_test/ttcn2json/f_ext_import_schema.cc b/regression_test/ttcn2json/f_ext_import_schema.cc index 053208333..1f8dc87ff 100644 --- a/regression_test/ttcn2json/f_ext_import_schema.cc +++ b/regression_test/ttcn2json/f_ext_import_schema.cc @@ -73,8 +73,114 @@ ElemKey get_elem_key(const char* value, size_t value_len, const char* file_name) if (10 == value_len && 0 == strncmp(value, "properties", value_len)) { return ElemKey::Properties; } - // throw the DTE if it didn't return until now - IMPORT_FORMAT_ERROR(true, "unknown type element key"); + if (9 == value_len && 0 == strncmp(value, "minLength", value_len)) { + return ElemKey::MinLength; + } + if (9 == value_len && 0 == strncmp(value, "maxLength", value_len)) { + return ElemKey::MaxLength; + } + if (7 == value_len && 0 == strncmp(value, "minimum", value_len)) { + return ElemKey::Minimum; + } + if (7 == value_len && 0 == strncmp(value, "maximum", value_len)) { + return ElemKey::Maximum; + } + if (16 == value_len && 0 == strncmp(value, "exclusiveMinimum", value_len)) { + return ElemKey::Maximum; + } + if (16 == value_len && 0 == strncmp(value, "exclusiveMaximum", value_len)) { + return ElemKey::Maximum; + } + if (5 == value_len && 0 == strncmp(value, "allOf", value_len)) { + return ElemKey::AllOf; + } + // it's an extension if none of them matched + return ElemKey::Extension; +} + +// just a forward declaration +AnyValue extract_any_value(JSON_Tokenizer& json, const char* file_name); + +ObjectValue extract_object_value(JSON_Tokenizer& json, const char* file_name) +{ + json_token_t token = JSON_TOKEN_NONE; + char* value = NULL; + size_t value_len = 0; + ObjectValue object_value; + + int field_index = 0; + json.get_next_token(&token, &value, &value_len); + while(JSON_TOKEN_NAME == token) { + // extract fields until an object end token is found + CHARSTRING field_name(value_len, value); + object_value[field_index].key() = field_name; + object_value[field_index].val() = extract_any_value(json, file_name); + + // next field + ++field_index; + json.get_next_token(&token, &value, &value_len); + } + + // object end + IMPORT_FORMAT_ERROR(JSON_TOKEN_OBJECT_END != token, "missing object value end"); + return object_value; +} + +ArrayValue extract_array_value(JSON_Tokenizer& json, const char* file_name) +{ + ArrayValue array_value; + size_t nof_values = 0; + while(true) { + // extract values until the array's end is reached + AnyValue val = extract_any_value(json, file_name); + if (val.is_bound()) { + array_value[nof_values] = val; + ++nof_values; + } + else { + // array end token reached (signalled by the unbound value) + break; + } + } + return array_value; +} + +AnyValue extract_any_value(JSON_Tokenizer& json, const char* file_name) +{ + json_token_t token = JSON_TOKEN_NONE; + char* value = NULL; + size_t value_len = 0; + AnyValue any_value; + + json.get_next_token(&token, &value, &value_len); + switch (token) { + case JSON_TOKEN_NUMBER: + case JSON_TOKEN_STRING: { + CHARSTRING str_val(value_len, value); + any_value.strVal() = str_val; + break; } + case JSON_TOKEN_LITERAL_NULL: + any_value.strVal() = "null"; + break; + case JSON_TOKEN_LITERAL_TRUE: + any_value.boolVal() = TRUE; + break; + case JSON_TOKEN_LITERAL_FALSE: + any_value.boolVal() = FALSE; + break; + case JSON_TOKEN_OBJECT_START: + any_value.objectVal() = extract_object_value(json, file_name); + break; + case JSON_TOKEN_ARRAY_START: + any_value.arrayVal() = extract_array_value(json, file_name); + break; + case JSON_TOKEN_ARRAY_END: + // signal the end of an array by returning an unbound AnyValue + break; + default: + IMPORT_FORMAT_ERROR(TRUE, "missing JSON value"); + } + return any_value; } TypeSchema extract_type_schema(JSON_Tokenizer& json, const char* file_name) @@ -104,7 +210,11 @@ TypeSchema extract_type_schema(JSON_Tokenizer& json, const char* file_name) case ElemKey::MaxItems: case ElemKey::AdditionalProperties: case ElemKey::OmitAsNull: - case ElemKey::Default: { + case ElemKey::Default: + case ElemKey::MinLength: + case ElemKey::MaxLength: + case ElemKey::Minimum: + case ElemKey::Maximum: { // string or boolean value json.get_next_token(&token, &value, &value_len); switch (token) { @@ -120,11 +230,10 @@ TypeSchema extract_type_schema(JSON_Tokenizer& json, const char* file_name) type_schema[elem_index].val().boolVal() = TRUE; break; default: - IMPORT_FORMAT_ERROR(JSON_TOKEN_LITERAL_FALSE != token, "string or boolean value expected"); + IMPORT_FORMAT_ERROR(JSON_TOKEN_LITERAL_FALSE != token, "string, number or boolean value expected"); } break; } - case ElemKey::Enum: case ElemKey::NumericValues: case ElemKey::Required: case ElemKey::FieldOrder: { @@ -151,7 +260,8 @@ TypeSchema extract_type_schema(JSON_Tokenizer& json, const char* file_name) type_schema[elem_index].val().typeVal() = extract_type_schema(json, file_name); break; } - case ElemKey::AnyOf: { + case ElemKey::AnyOf: + case ElemKey::AllOf: { // type schema array value json.get_next_token(&token, NULL, NULL); IMPORT_FORMAT_ERROR(JSON_TOKEN_ARRAY_START != token, "missing type array start"); @@ -193,6 +303,24 @@ TypeSchema extract_type_schema(JSON_Tokenizer& json, const char* file_name) // field set value end IMPORT_FORMAT_ERROR(JSON_TOKEN_OBJECT_END != token, "missing field set end"); break; } + case ElemKey::Extension: { + // extension value + // store the field name (already extracted) + CHARSTRING str_key(value_len, value); + type_schema[elem_index].val().extVal().key() = str_key; + // store the string value + json.get_next_token(&token, &value, &value_len); + IMPORT_FORMAT_ERROR(JSON_TOKEN_STRING != token, "string value expected"); + CHARSTRING str_val(value_len, value); + type_schema[elem_index].val().extVal().val() = str_key; + break; } + + case ElemKey::Enum: { + // array value + json.get_next_token(&token, NULL, NULL); + IMPORT_FORMAT_ERROR(JSON_TOKEN_ARRAY_START != token, "missing array value start"); + type_schema[elem_index].val().arrayVal() = extract_array_value(json, file_name); + break; } default: break; } @@ -358,6 +486,15 @@ void f__ext__import__schema(const CHARSTRING& file, JsonSchema& schema) // top level object json.get_next_token(&token, NULL, NULL); IMPORT_FORMAT_ERROR(JSON_TOKEN_OBJECT_START != token, "missing top level object start"); + + // schema header + json.get_next_token(&token, &value, &value_len); + IMPORT_FORMAT_ERROR(JSON_TOKEN_NAME != token || value_len != 7 || + 0 != strncmp(value, "$schema", value_len), "missing $schema key"); + json.get_next_token(&token, &value, &value_len); + IMPORT_FORMAT_ERROR(JSON_TOKEN_STRING != token || value_len != 41 || + 0 != strncmp(value, "\"http://json-schema.org/draft-04/schema#\"", value_len), + "missing $schema value"); // definitions json.get_next_token(&token, &value, &value_len); diff --git a/regression_test/ttcn2json/one.ttcn b/regression_test/ttcn2json/one.ttcn index 011b9887d..41283a4fd 100644 --- a/regression_test/ttcn2json/one.ttcn +++ b/regression_test/ttcn2json/one.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 @@ -13,6 +13,7 @@ type record Rec { } with { variant(num) "JSON : default(0)"; variant(str) "JSON : default(empty)"; + variant "JSON : extend (comment) : (abc)"; } type set Set { @@ -21,13 +22,16 @@ type set Set { verdicttype verd optional, float numbr } with { - variant(numbr) "JSON : default(-infinity)"; - variant(buul) "JSON:omit as null"; + variant(numbr) " JSON : default (-infinity) "; + variant(buul) " JSON:omit as null "; + variant(os) "JSON:extend(MSB):(first) "; } type union Uni { float numbr, octetstring bytes +} with { + variant "JSON: extend (defaultSelection) : (numbr)"; } type record HasAny { diff --git a/regression_test/ttcn2json/one_e.json b/regression_test/ttcn2json/one_e.json index da16123a4..8ccb01a5a 100644 --- a/regression_test/ttcn2json/one_e.json +++ b/regression_test/ttcn2json/one_e.json @@ -1,4 +1,5 @@ { + "$schema" : "http://json-schema.org/draft-04/schema#", "definitions" : { "one" : { "HasAny" : { @@ -56,7 +57,8 @@ "required" : [ "num", "str" - ] + ], + "comment" : "abc" }, "Set" : { "type" : "object", @@ -65,7 +67,8 @@ "os" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "MSB" : "first" }, "buul" : { "anyOf" : [ @@ -162,7 +165,8 @@ "bytes" ] } - ] + ], + "defaultSelection" : "numbr" }, "Width" : { "enum" : [ @@ -269,7 +273,8 @@ "subType" : "record of", "items" : { "$ref" : "#/definitions/two/Ints" - } + }, + "alias" : "RoRoI" }, "Octets" : { "type" : "array", @@ -278,10 +283,13 @@ "type" : "string", "subType" : "octetstring", "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" - } + }, + "comment" : "set of octetstrings" }, "PosInt" : { - "type" : "integer" + "type" : "integer", + "minimum" : 0, + "exclusiveMinimum" : false }, "PosInts" : { "type" : "array", @@ -317,7 +325,8 @@ "inconc", "fail", "error" - ] + ], + "comment" : "verdict type" } } }, @@ -357,7 +366,9 @@ "required" : [ "size", "filled" - ] + ], + "comment" : "first comment", + "comment" : "second comment" } }, "additionalProperties" : false, @@ -450,109 +461,6 @@ } }, "Zero" : { - "SeqOfInt" : { - "type" : "array", - "subType" : "record of", - "items" : { - "type" : "integer" - } - }, - "SeqProduct" : { - "type" : "object", - "subType" : "record", - "properties" : { - "name" : { - "type" : "string", - "subType" : "universal charstring" - }, - "price" : { - "anyOf" : [ - { - "type" : "number" - }, - { - "enum" : [ - "not_a_number", - "infinity", - "-infinity" - ] - } - ] - }, - "id" : { - "anyOf" : [ - { - "type" : "null" - }, - { - "type" : "string", - "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" - } - ], - "omitAsNull" : false - }, - "available" : { - "type" : "boolean" - } - }, - "additionalProperties" : false, - "fieldOrder" : [ - "name", - "price", - "id", - "available" - ], - "required" : [ - "name", - "price", - "available" - ] - }, - "Number" : { - "anyOf" : [ - { - "type" : "object", - "properties" : { - "decimal" : { - "type" : "integer" - } - }, - "additionalProperties" : false, - "required" : [ - "decimal" - ] - }, - { - "type" : "object", - "properties" : { - "binary" : { - "type" : "string", - "subType" : "bitstring", - "pattern" : "^[01]*$" - } - }, - "additionalProperties" : false, - "required" : [ - "binary" - ] - }, - { - "type" : "object", - "properties" : { - "hexadecimal" : { - "type" : "string", - "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" - } - }, - "additionalProperties" : false, - "required" : [ - "hexadecimal" - ] - } - ] - }, "AnyString" : { "anyOf" : [ { @@ -700,12 +608,37 @@ } ] }, - "ManyStrings" : { - "type" : "array", - "subType" : "record of", - "items" : { - "$ref" : "#/definitions/Zero/AnyString" - } + "Big_Choice" : { + "anyOf" : [ + { + "type" : "object", + "properties" : { + "numbers" : { + "type" : "array", + "subType" : "set of", + "items" : { + "$ref" : "#/definitions/Zero/Number" + } + } + }, + "additionalProperties" : false, + "required" : [ + "numbers" + ] + }, + { + "type" : "object", + "properties" : { + "strings" : { + "$ref" : "#/definitions/Zero/ManyStrings" + } + }, + "additionalProperties" : false, + "required" : [ + "strings" + ] + } + ] }, "Big_Set" : { "type" : "object", @@ -753,38 +686,70 @@ "color" ] }, - "Big_Choice" : { + "ManyStrings" : { + "type" : "array", + "subType" : "record of", + "items" : { + "$ref" : "#/definitions/Zero/AnyString" + } + }, + "NullType" : { + "type" : "null" + }, + "Number" : { "anyOf" : [ { "type" : "object", "properties" : { - "numbers" : { - "type" : "array", - "subType" : "set of", - "items" : { - "$ref" : "#/definitions/Zero/Number" - } + "decimal" : { + "type" : "integer" } }, "additionalProperties" : false, "required" : [ - "numbers" + "decimal" ] }, { "type" : "object", "properties" : { - "strings" : { - "$ref" : "#/definitions/Zero/ManyStrings" + "binary" : { + "type" : "string", + "subType" : "bitstring", + "pattern" : "^[01]*$" } }, "additionalProperties" : false, "required" : [ - "strings" + "binary" + ] + }, + { + "type" : "object", + "properties" : { + "hexadecimal" : { + "type" : "string", + "subType" : "octetstring", + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + } + }, + "additionalProperties" : false, + "required" : [ + "hexadecimal" ] } ] }, + "ObjIdType" : { + "type" : "string", + "subType" : "objid", + "pattern" : "^[0-2][.][1-3]?[0-9]([.][0-9]|([1-9][0-9]+))*$" + }, + "RelObjIdType" : { + "type" : "string", + "subType" : "objid", + "pattern" : "^[0-2][.][1-3]?[0-9]([.][0-9]|([1-9][0-9]+))*$" + }, "Season" : { "enum" : [ "spring", @@ -806,42 +771,68 @@ "$ref" : "#/definitions/Zero/Number" } }, - "NullType" : { - "type" : "null" - }, - "ObjIdType" : { - "type" : "string", - "subType" : "objid", - "pattern" : "^[0-2][.][1-3]?[0-9]([.][0-9]|([1-9][0-9]+))*$" + "SeqOfInt" : { + "type" : "array", + "subType" : "record of", + "items" : { + "type" : "integer" + } }, - "RelObjIdType" : { - "type" : "string", - "subType" : "objid", - "pattern" : "^[0-2][.][1-3]?[0-9]([.][0-9]|([1-9][0-9]+))*$" + "SeqProduct" : { + "type" : "object", + "subType" : "record", + "properties" : { + "name" : { + "type" : "string", + "subType" : "universal charstring" + }, + "price" : { + "anyOf" : [ + { + "type" : "number" + }, + { + "enum" : [ + "not_a_number", + "infinity", + "-infinity" + ] + } + ] + }, + "id" : { + "anyOf" : [ + { + "type" : "null" + }, + { + "type" : "string", + "subType" : "octetstring", + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + } + ], + "omitAsNull" : false + }, + "available" : { + "type" : "boolean" + } + }, + "additionalProperties" : false, + "fieldOrder" : [ + "name", + "price", + "id", + "available" + ], + "required" : [ + "name", + "price", + "available" + ] } } }, "anyOf" : [ - { - "$ref" : "#/definitions/two/Ints", - "decoding" : { - "prototype" : [ - "fast", - "f_dec_ints", - "os", - "x" - ] - }, - "encoding" : { - "prototype" : [ - "fast", - "f_enc_ints", - "eents", - "octus" - ], - "printing" : "pretty" - } - }, { "$ref" : "#/definitions/one/Rec", "decoding" : { @@ -863,6 +854,26 @@ ] } }, + { + "$ref" : "#/definitions/two/Ints", + "decoding" : { + "prototype" : [ + "fast", + "f_dec_ints", + "os", + "x" + ] + }, + "encoding" : { + "prototype" : [ + "fast", + "f_enc_ints", + "eents", + "octus" + ], + "printing" : "pretty" + } + }, { "$ref" : "#/definitions/Zero/Big_Set", "decoding" : { diff --git a/regression_test/ttcn2json/three.ttcn b/regression_test/ttcn2json/three.ttcn index ba3052c5c..5424dab4d 100644 --- a/regression_test/ttcn2json/three.ttcn +++ b/regression_test/ttcn2json/three.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 @@ -31,6 +31,9 @@ module three { enumerated { Small, Medium, Large } size, boolean filled } barrelType + } with { + variant(barrelType) "JSON: extend(comment):(first comment)"; + variant(barrelType) "JSON: extend(comment):(second comment)"; } type set of record { integer num } Nums diff --git a/regression_test/ttcn2json/three_e.json b/regression_test/ttcn2json/three_e.json index 52268badc..d8be51dd3 100644 --- a/regression_test/ttcn2json/three_e.json +++ b/regression_test/ttcn2json/three_e.json @@ -1,4 +1,5 @@ { + "$schema" : "http://json-schema.org/draft-04/schema#", "definitions" : { "one" : { "HasAny" : { @@ -56,7 +57,8 @@ "required" : [ "num", "str" - ] + ], + "comment" : "abc" }, "Set" : { "type" : "object", @@ -65,7 +67,8 @@ "os" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "MSB" : "first" }, "buul" : { "anyOf" : [ @@ -162,7 +165,8 @@ "bytes" ] } - ] + ], + "defaultSelection" : "numbr" }, "Width" : { "enum" : [ @@ -227,8 +231,28 @@ "type" : "integer" } }, + "Intses" : { + "type" : "array", + "subType" : "record of", + "items" : { + "$ref" : "#/definitions/two/Ints" + }, + "alias" : "RoRoI" + }, + "Octets" : { + "type" : "array", + "subType" : "set of", + "items" : { + "type" : "string", + "subType" : "octetstring", + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + }, + "comment" : "set of octetstrings" + }, "PosInt" : { - "type" : "integer" + "type" : "integer", + "minimum" : 0, + "exclusiveMinimum" : false } }, "three" : { @@ -267,7 +291,9 @@ "required" : [ "size", "filled" - ] + ], + "comment" : "first comment", + "comment" : "second comment" } }, "additionalProperties" : false, @@ -733,24 +759,7 @@ }, "anyOf" : [ { - "$ref" : "#/definitions/two/Ints", - "decoding" : { - "prototype" : [ - "fast", - "f_dec_ints", - "os", - "x" - ] - }, - "encoding" : { - "prototype" : [ - "fast", - "f_enc_ints", - "eents", - "octus" - ], - "printing" : "pretty" - } + "$ref" : "#/definitions/two/Intses" }, { "$ref" : "#/definitions/one/Rec", @@ -773,6 +782,26 @@ ] } }, + { + "$ref" : "#/definitions/two/Ints", + "decoding" : { + "prototype" : [ + "fast", + "f_dec_ints", + "os", + "x" + ] + }, + "encoding" : { + "prototype" : [ + "fast", + "f_enc_ints", + "eents", + "octus" + ], + "printing" : "pretty" + } + }, { "$ref" : "#/definitions/one/Set" }, @@ -800,6 +829,9 @@ { "$ref" : "#/definitions/three/Barrels" }, + { + "$ref" : "#/definitions/two/Octets" + }, { "$ref" : "#/definitions/two/PosInt" }, diff --git a/regression_test/ttcn2json/two.ttcn b/regression_test/ttcn2json/two.ttcn index 21eb94e5a..e36cabacd 100644 --- a/regression_test/ttcn2json/two.ttcn +++ b/regression_test/ttcn2json/two.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 @@ -13,17 +13,17 @@ module two { type float Floats[6]; - type record of Ints Intses; + type record of Ints Intses with { variant "JSON:extend(alias):(RoRoI)"; }; type record of bitstring Bits; type record of hexstring Hexes; - type set of octetstring Octets; + type set of octetstring Octets with { variant "JSON: extend(comment):(set of octetstrings)"; }; type charstring Two__Strings[2]; - type record of verdicttype Verdicts; + type record of verdicttype Verdicts with { variant([-]) "JSON: extend (comment) : (verdict type)"; }; type integer PosInt (0..infinity); @@ -31,7 +31,4 @@ module two { external function f_dec_ints(in octetstring os, out Ints x) with { extension "prototype(fast) decode(JSON)" } - - //type record of integer Rec; - } diff --git a/regression_test/ttcn2json/two_e.json b/regression_test/ttcn2json/two_e.json index 27c91bddf..964e00f7e 100644 --- a/regression_test/ttcn2json/two_e.json +++ b/regression_test/ttcn2json/two_e.json @@ -1,4 +1,5 @@ { + "$schema" : "http://json-schema.org/draft-04/schema#", "definitions" : { "one" : { "HasAny" : { @@ -56,7 +57,8 @@ "required" : [ "num", "str" - ] + ], + "comment" : "abc" }, "Set" : { "type" : "object", @@ -65,7 +67,8 @@ "os" : { "type" : "string", "subType" : "octetstring", - "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$", + "MSB" : "first" }, "buul" : { "anyOf" : [ @@ -162,7 +165,8 @@ "bytes" ] } - ] + ], + "defaultSelection" : "numbr" }, "Width" : { "enum" : [ @@ -227,8 +231,28 @@ "type" : "integer" } }, + "Intses" : { + "type" : "array", + "subType" : "record of", + "items" : { + "$ref" : "#/definitions/two/Ints" + }, + "alias" : "RoRoI" + }, + "Octets" : { + "type" : "array", + "subType" : "set of", + "items" : { + "type" : "string", + "subType" : "octetstring", + "pattern" : "^([0-9A-Fa-f][0-9A-Fa-f])*$" + }, + "comment" : "set of octetstrings" + }, "PosInt" : { - "type" : "integer" + "type" : "integer", + "minimum" : 0, + "exclusiveMinimum" : false } }, "three" : { @@ -267,7 +291,9 @@ "required" : [ "size", "filled" - ] + ], + "comment" : "first comment", + "comment" : "second comment" } }, "additionalProperties" : false, @@ -732,26 +758,6 @@ } }, "anyOf" : [ - { - "$ref" : "#/definitions/two/Ints", - "decoding" : { - "prototype" : [ - "fast", - "f_dec_ints", - "os", - "x" - ] - }, - "encoding" : { - "prototype" : [ - "fast", - "f_enc_ints", - "eents", - "octus" - ], - "printing" : "pretty" - } - }, { "$ref" : "#/definitions/one/Rec", "decoding" : { @@ -773,6 +779,26 @@ ] } }, + { + "$ref" : "#/definitions/two/Ints", + "decoding" : { + "prototype" : [ + "fast", + "f_dec_ints", + "os", + "x" + ] + }, + "encoding" : { + "prototype" : [ + "fast", + "f_enc_ints", + "eents", + "octus" + ], + "printing" : "pretty" + } + }, { "$ref" : "#/definitions/Zero/Big_Set", "decoding" : { diff --git a/regression_test/ttcn2json/zero.asn b/regression_test/ttcn2json/zero.asn index aaa7e04d3..9db5b0239 100644 --- a/regression_test/ttcn2json/zero.asn +++ b/regression_test/ttcn2json/zero.asn @@ -1,5 +1,5 @@ ------------------------------------------------------------------------------ --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/typeCompat/ASN_Ext.asn b/regression_test/typeCompat/ASN_Ext.asn index 5919cafd4..5507bf77e 100644 --- a/regression_test/typeCompat/ASN_Ext.asn +++ b/regression_test/typeCompat/ASN_Ext.asn @@ -1,5 +1,5 @@ --///////////////////////////////////////////////////////////////////////////// --- Copyright (c) 2000-2014 Ericsson Telecom AB +-- Copyright (c) 2000-2015 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 diff --git a/regression_test/typeCompat/Compat.ttcn b/regression_test/typeCompat/Compat.ttcn index a58295916..1f52b336a 100644 --- a/regression_test/typeCompat/Compat.ttcn +++ b/regression_test/typeCompat/Compat.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/typeCompat/Ext.ttcn b/regression_test/typeCompat/Ext.ttcn index 271cfcb17..2e8384fbe 100644 --- a/regression_test/typeCompat/Ext.ttcn +++ b/regression_test/typeCompat/Ext.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/typeCompat/Ext2.ttcn b/regression_test/typeCompat/Ext2.ttcn index 8af1138d1..c7da8200c 100644 --- a/regression_test/typeCompat/Ext2.ttcn +++ b/regression_test/typeCompat/Ext2.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/typeCompat/Makefile b/regression_test/typeCompat/Makefile index 12659310b..0655926f1 100644 --- a/regression_test/typeCompat/Makefile +++ b/regression_test/typeCompat/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/typeCompat/Std.ttcn b/regression_test/typeCompat/Std.ttcn index 7eebb8f76..932d57332 100644 --- a/regression_test/typeCompat/Std.ttcn +++ b/regression_test/typeCompat/Std.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/typeCompat/config.cfg b/regression_test/typeCompat/config.cfg index 0900e4f40..4c33aa42a 100644 --- a/regression_test/typeCompat/config.cfg +++ b/regression_test/typeCompat/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ucharstrOper/Base64Testcases.ttcn b/regression_test/ucharstrOper/Base64Testcases.ttcn index c80c3b2fc..eed58af1a 100755 --- a/regression_test/ucharstrOper/Base64Testcases.ttcn +++ b/regression_test/ucharstrOper/Base64Testcases.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/ucharstrOper/Common.ttcn b/regression_test/ucharstrOper/Common.ttcn index 8728b9699..ec00b1c19 100755 --- a/regression_test/ucharstrOper/Common.ttcn +++ b/regression_test/ucharstrOper/Common.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/ucharstrOper/Makefile b/regression_test/ucharstrOper/Makefile index 4142c09f5..6f012aad4 100644 --- a/regression_test/ucharstrOper/Makefile +++ b/regression_test/ucharstrOper/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ucharstrOper/TucharstrOper.ttcn b/regression_test/ucharstrOper/TucharstrOper.ttcn index 1b2881718..999d3b640 100644 --- a/regression_test/ucharstrOper/TucharstrOper.ttcn +++ b/regression_test/ucharstrOper/TucharstrOper.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/ucharstrOper/UTF16Testcases.ttcn b/regression_test/ucharstrOper/UTF16Testcases.ttcn index e7f5fc99a..3cfc20ebc 100755 --- a/regression_test/ucharstrOper/UTF16Testcases.ttcn +++ b/regression_test/ucharstrOper/UTF16Testcases.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/ucharstrOper/UTF32Testcases.ttcn b/regression_test/ucharstrOper/UTF32Testcases.ttcn index a9d9c1529..987354913 100755 --- a/regression_test/ucharstrOper/UTF32Testcases.ttcn +++ b/regression_test/ucharstrOper/UTF32Testcases.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/ucharstrOper/UTF8Testcases.ttcn b/regression_test/ucharstrOper/UTF8Testcases.ttcn index c9abfb95e..8060d5c66 100755 --- a/regression_test/ucharstrOper/UTF8Testcases.ttcn +++ b/regression_test/ucharstrOper/UTF8Testcases.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/ucharstrOper/config.cfg b/regression_test/ucharstrOper/config.cfg index 9f353de68..6d1553005 100644 --- a/regression_test/ucharstrOper/config.cfg +++ b/regression_test/ucharstrOper/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/ucharstrOper/cstr_content.ttcn b/regression_test/ucharstrOper/cstr_content.ttcn index fdc797a0b..159faff29 100644 --- a/regression_test/ucharstrOper/cstr_content.ttcn +++ b/regression_test/ucharstrOper/cstr_content.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/ucharstrOper/external.cc b/regression_test/ucharstrOper/external.cc index c3fc75de8..a3bcffd6d 100644 --- a/regression_test/ucharstrOper/external.cc +++ b/regression_test/ucharstrOper/external.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/regression_test/unionOper/Makefile b/regression_test/unionOper/Makefile index b43f6dac4..3f120cd50 100644 --- a/regression_test/unionOper/Makefile +++ b/regression_test/unionOper/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/unionOper/TunionOper.ttcn b/regression_test/unionOper/TunionOper.ttcn index 446ccd656..ac552deb8 100644 --- a/regression_test/unionOper/TunionOper.ttcn +++ b/regression_test/unionOper/TunionOper.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/unionOper/config.cfg b/regression_test/unionOper/config.cfg index 77ad4b498..8642eee12 100644 --- a/regression_test/unionOper/config.cfg +++ b/regression_test/unionOper/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/vcheck.pl b/regression_test/vcheck.pl index dea76e81d..88c10c4c3 100644 --- a/regression_test/vcheck.pl +++ b/regression_test/vcheck.pl @@ -1,6 +1,6 @@ #!/usr/bin/perl -wl ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/verdictOper/Makefile b/regression_test/verdictOper/Makefile index d839e203d..da35c28bd 100644 --- a/regression_test/verdictOper/Makefile +++ b/regression_test/verdictOper/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/verdictOper/TverdictOper.ttcn b/regression_test/verdictOper/TverdictOper.ttcn index b46a5c259..616653c43 100644 --- a/regression_test/verdictOper/TverdictOper.ttcn +++ b/regression_test/verdictOper/TverdictOper.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/verdictOper/config.cfg b/regression_test/verdictOper/config.cfg index 701d67048..3f612d948 100644 --- a/regression_test/verdictOper/config.cfg +++ b/regression_test/verdictOper/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/visibility/Makefile b/regression_test/visibility/Makefile index 2167c2654..3da757c02 100644 --- a/regression_test/visibility/Makefile +++ b/regression_test/visibility/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/visibility/Visibility.ttcn b/regression_test/visibility/Visibility.ttcn index 716ce2d4b..0cce095a3 100644 --- a/regression_test/visibility/Visibility.ttcn +++ b/regression_test/visibility/Visibility.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/visibility/config.cfg b/regression_test/visibility/config.cfg index d1189fdf7..86c803cad 100644 --- a/regression_test/visibility/config.cfg +++ b/regression_test/visibility/config.cfg @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/regression_test/visibility/module1.ttcn b/regression_test/visibility/module1.ttcn index c0b40fc21..a6b8c6926 100644 --- a/regression_test/visibility/module1.ttcn +++ b/regression_test/visibility/module1.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/visibility/module2.ttcn b/regression_test/visibility/module2.ttcn index 6487ec691..dfae3f4af 100644 --- a/regression_test/visibility/module2.ttcn +++ b/regression_test/visibility/module2.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/visibility/module3.ttcn b/regression_test/visibility/module3.ttcn index e63282cb7..2bfd3228c 100644 --- a/regression_test/visibility/module3.ttcn +++ b/regression_test/visibility/module3.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/regression_test/visibility/module4.ttcn b/regression_test/visibility/module4.ttcn index 25d4674ac..2bbfba824 100644 --- a/regression_test/visibility/module4.ttcn +++ b/regression_test/visibility/module4.ttcn @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/repgen/Makefile b/repgen/Makefile index 03db4b8d6..f8584aebf 100644 --- a/repgen/Makefile +++ b/repgen/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/repgen/logfilter.c b/repgen/logfilter.c index b50212464..14618fef7 100644 --- a/repgen/logfilter.c +++ b/repgen/logfilter.c @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -148,7 +148,8 @@ static EventTypes get_event_type(char *buf) ptr2=strstr(buf,EventTypeNames[a]); if(ptr2<ptr1&&ptr2!=NULL) { ptr1=ptr2; - if(*(ptr2+strlen(EventTypeNames[a]))==' '&& *(ptr2-1)==' ') + if(*(ptr2+strlen(EventTypeNames[a]))==' '&& *(ptr2-1)==' ' + && *(ptr2+strlen(EventTypeNames[a])+1)!='|') return a; } } diff --git a/repgen/logformat.l b/repgen/logformat.l index a60fbd23f..8a8c5c645 100644 --- a/repgen/logformat.l +++ b/repgen/logformat.l @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 @@ -26,6 +26,8 @@ static const char *program_name = NULL; static size_t indent_depth = 4; static FILE *output_file = NULL; static int separate_files = 0; +static int format_tab_newline = 1; +static int replaced_tab_newline = 0; static size_t indent_level = 0; static enum { OPEN_BRACE, CLOSE_BRACE, COMMA, OTHER, OTHER_WS } @@ -117,14 +119,58 @@ static void write_failure(void) exit(EXIT_FAILURE); } + +char * +str_replace ( const char *string, const char *substr, const char *replacement ){ + char *tok = NULL; + char *newstr = NULL; + char *oldstr = NULL; + char *head = NULL; + int length_diff = strlen(substr) - strlen(replacement); + + /* if either substr or replacement is NULL, duplicate string a let caller handle it */ + if ( substr == NULL || replacement == NULL ) return strdup (string); + newstr = strdup (string); + head = newstr; + while ( (tok = strstr ( head, substr ))){ + oldstr = newstr; + newstr = malloc ( strlen ( oldstr ) - strlen ( substr ) + strlen ( replacement ) + 1 ); + /*failed to alloc mem, free old string and return NULL */ + if ( newstr == NULL ){ + free (oldstr); + fprintf(stderr, "Failed to allocate memory.\n"); + exit(EXIT_FAILURE); + } + //We have to count how many characters we replaced + replaced_tab_newline += length_diff; + memcpy ( newstr, oldstr, tok - oldstr ); + memcpy ( newstr + (tok - oldstr), replacement, strlen ( replacement ) ); + memcpy ( newstr + (tok - oldstr) + strlen( replacement ), tok + strlen ( substr ), strlen ( oldstr ) - strlen ( substr ) - ( tok - oldstr ) ); + memset ( newstr + strlen ( oldstr ) - strlen ( substr ) + strlen ( replacement ) , 0, 1 ); + /* move back head right after the last replacement */ + head = newstr + (tok - oldstr) + strlen( replacement ); + free (oldstr); + } + return newstr; +} + + static void write_line_buf(void) { if (buf_len > 0) { - if (fwrite(line_buf, buf_len, 1, yyout) != 1) write_failure(); + if(format_tab_newline){ + char * temp = str_replace(line_buf, "\\n", "\n"); + temp = str_replace(temp, "\\t", "\t"); + strcpy(line_buf, temp); + free(temp); + } + if (fwrite(line_buf, buf_len-replaced_tab_newline, 1, yyout) != 1) write_failure(); /* append a newline character if it is missing from the end * (e.g. because of EOF) */ - if (line_buf[buf_len - 1] != '\n') + if (line_buf[buf_len - replaced_tab_newline - 1] != '\n'){ if (putc('\n', yyout) == EOF) write_failure(); + } + replaced_tab_newline = 0; } if (buf_size > MIN_BUFSIZE && buf_size > 2 * buf_len) { /* reset the buffer size if a shorter one is enough */ @@ -376,7 +422,7 @@ TIMESTAMP {TIMESTAMP1}|{TIMESTAMP2}|{TIMESTAMP3} static void usage(void) { fprintf(stderr, - "usage: %s [-i n] [-o outfile] [-s] [file.log] ...\n" + "usage: %s [-i n] [-o outfile] [-s] [-n] [file.log] ...\n" " or %s -v\n" "\n" "OPTIONS:\n" @@ -385,6 +431,7 @@ static void usage(void) " -o outfile: write the formatted log into file outfile\n" " -s: place the logs of each test case into separate " "files\n" + " -n newline and tab control characters are not modified\n" " -v: print version\n", program_name, program_name); } @@ -392,13 +439,16 @@ static void usage(void) int main(int argc, char *argv[]) { int c; - int iflag = 0, oflag = 0, sflag = 0, vflag = 0, errflag = 0; + int iflag = 0, oflag = 0, sflag = 0, vflag = 0, errflag = 0, nflag = 0; #ifdef LICENSE license_struct lstr; #endif program_name = argv[0]; output_file = stdout; - while ((c = getopt(argc, argv, "i:o:sv")) != -1) { + if(argc == 1){ + errflag = 1; + } + while ((c = getopt(argc, argv, "i:o:snv")) != -1 && !errflag) { switch (c) { case 'i': { unsigned int int_arg; @@ -420,8 +470,13 @@ int main(int argc, char *argv[]) if (sflag || vflag) errflag = 1; sflag = 1; break; + case 'n': + if(vflag) errflag = 1; + format_tab_newline = 0; + nflag = 1; + break; case 'v': - if (iflag || oflag || sflag) errflag = 1; + if (iflag || oflag || sflag || nflag) errflag = 1; vflag = 1; break; default: diff --git a/repgen/logmerge.c b/repgen/logmerge.c index 4dd5799f2..3091f354d 100644 --- a/repgen/logmerge.c +++ b/repgen/logmerge.c @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/repgen/parser.l b/repgen/parser.l index be8378b65..b80ce0758 100644 --- a/repgen/parser.l +++ b/repgen/parser.l @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/repgen/repgen.c b/repgen/repgen.c index a1231d53c..47cbdb505 100644 --- a/repgen/repgen.c +++ b/repgen/repgen.c @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/repgen/repgen.h b/repgen/repgen.h index caa0398d9..75e44be3b 100644 --- a/repgen/repgen.h +++ b/repgen/repgen.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 diff --git a/repgen/ttcn3_logfilter.1 b/repgen/ttcn3_logfilter.1 index 7d63c6fa5..014c36d72 100644 --- a/repgen/ttcn3_logfilter.1 +++ b/repgen/ttcn3_logfilter.1 @@ -80,7 +80,7 @@ The .SH AUTHOR This manpage is written by Csaba Koppany, Ericsson Telecom AB .br -Copyright (c) 2000-2014 Ericsson Telecom AB +Copyright (c) 2000-2015 Ericsson Telecom AB .br All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 diff --git a/repgen/ttcn3_logformat.1 b/repgen/ttcn3_logformat.1 index 2ce96db11..14250509d 100644 --- a/repgen/ttcn3_logformat.1 +++ b/repgen/ttcn3_logformat.1 @@ -49,6 +49,9 @@ If this option is omitted, the formatted log will be printed to standard output. .B \-s If this option is set, the entries that were recorded during the execution of a particular test case will be saved in a separate file in +.I \-n +If this option is set, newline and tab characters are not modified, they are +printed as \n and \t .I ttcn3_logformat working directory. The name of this file will be identical to the name of the test case. If the same test case is executed several times after each other, the @@ -104,7 +107,7 @@ The .SH AUTHOR This manpage is written by Csaba Koppany, Ericsson Telecom AB .br -Copyright (c) 2000-2014 Ericsson Telecom AB +Copyright (c) 2000-2015 Ericsson Telecom AB .br All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 diff --git a/repgen/ttcn3_logmerge.1 b/repgen/ttcn3_logmerge.1 index f02cce1b6..3fbb69916 100644 --- a/repgen/ttcn3_logmerge.1 +++ b/repgen/ttcn3_logmerge.1 @@ -64,7 +64,7 @@ The .SH AUTHOR This manpage is written by Csaba Koppany, Ericsson Telecom AB .br -Copyright (c) 2000-2014 Ericsson Telecom AB +Copyright (c) 2000-2015 Ericsson Telecom AB .br All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 diff --git a/titan_executor_api/TITAN_Executor_API/build.xml b/titan_executor_api/TITAN_Executor_API/build.xml index 6f3c119d6..5b09ffc68 100644 --- a/titan_executor_api/TITAN_Executor_API/build.xml +++ b/titan_executor_api/TITAN_Executor_API/build.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/titan_executor_api/TITAN_Executor_API/doc/javadoc-overview/javadoc-overview.html b/titan_executor_api/TITAN_Executor_API/doc/javadoc-overview/javadoc-overview.html index d538948d1..d472daaa2 100644 --- a/titan_executor_api/TITAN_Executor_API/doc/javadoc-overview/javadoc-overview.html +++ b/titan_executor_api/TITAN_Executor_API/doc/javadoc-overview/javadoc-overview.html @@ -1,5 +1,5 @@ <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/titan_executor_api/TITAN_Executor_API/readme.txt b/titan_executor_api/TITAN_Executor_API/readme.txt index 7c42d66ff..d157545d0 100644 --- a/titan_executor_api/TITAN_Executor_API/readme.txt +++ b/titan_executor_api/TITAN_Executor_API/readme.txt @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executor/jni/ComponentStruct.java b/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executor/jni/ComponentStruct.java index 40e1c59e6..f7ce950a6 100644 --- a/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executor/jni/ComponentStruct.java +++ b/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executor/jni/ComponentStruct.java @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executor/jni/HcStateEnum.java b/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executor/jni/HcStateEnum.java index 1497ea1b8..66f724ed5 100644 --- a/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executor/jni/HcStateEnum.java +++ b/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executor/jni/HcStateEnum.java @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executor/jni/HostStruct.java b/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executor/jni/HostStruct.java index 320ed9209..ace4b20cd 100644 --- a/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executor/jni/HostStruct.java +++ b/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executor/jni/HostStruct.java @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executor/jni/IJNICallback.java b/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executor/jni/IJNICallback.java index b71cad8a7..f84fa635d 100644 --- a/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executor/jni/IJNICallback.java +++ b/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executor/jni/IJNICallback.java @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executor/jni/JNIMiddleWare.java b/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executor/jni/JNIMiddleWare.java index f527fd8ae..d12e0d192 100644 --- a/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executor/jni/JNIMiddleWare.java +++ b/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executor/jni/JNIMiddleWare.java @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executor/jni/McStateEnum.java b/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executor/jni/McStateEnum.java index a26d32df1..61fa98209 100644 --- a/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executor/jni/McStateEnum.java +++ b/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executor/jni/McStateEnum.java @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executor/jni/QualifiedName.java b/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executor/jni/QualifiedName.java index 63beafccf..6f955420b 100644 --- a/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executor/jni/QualifiedName.java +++ b/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executor/jni/QualifiedName.java @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executor/jni/TcStateEnum.java b/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executor/jni/TcStateEnum.java index 879db8831..9664a8f5b 100644 --- a/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executor/jni/TcStateEnum.java +++ b/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executor/jni/TcStateEnum.java @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executor/jni/Timeval.java b/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executor/jni/Timeval.java index a71680b33..9ae178405 100644 --- a/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executor/jni/Timeval.java +++ b/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executor/jni/Timeval.java @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executor/jni/TransportTypeEnum.java b/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executor/jni/TransportTypeEnum.java index e3dc8ccd7..c2213da16 100644 --- a/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executor/jni/TransportTypeEnum.java +++ b/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executor/jni/TransportTypeEnum.java @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executor/jni/VerdictTypeEnum.java b/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executor/jni/VerdictTypeEnum.java index ae3a144c6..ab2b47e00 100644 --- a/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executor/jni/VerdictTypeEnum.java +++ b/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executor/jni/VerdictTypeEnum.java @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executorapi/HostController.java b/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executorapi/HostController.java index 369f0228a..96dc05c93 100644 --- a/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executorapi/HostController.java +++ b/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executorapi/HostController.java @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executorapi/IJniExecutorObserver.java b/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executorapi/IJniExecutorObserver.java index d47faf504..3d86e2d31 100644 --- a/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executorapi/IJniExecutorObserver.java +++ b/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executorapi/IJniExecutorObserver.java @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executorapi/JniExecutor.java b/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executorapi/JniExecutor.java index 46dfc6aca..1a974ae5e 100644 --- a/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executorapi/JniExecutor.java +++ b/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executorapi/JniExecutor.java @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executorapi/exception/JniExecutorException.java b/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executorapi/exception/JniExecutorException.java index cde95f3ef..cf465ce10 100644 --- a/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executorapi/exception/JniExecutorException.java +++ b/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executorapi/exception/JniExecutorException.java @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executorapi/exception/JniExecutorIllegalArgumentException.java b/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executorapi/exception/JniExecutorIllegalArgumentException.java index bbac38169..6669b86c8 100644 --- a/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executorapi/exception/JniExecutorIllegalArgumentException.java +++ b/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executorapi/exception/JniExecutorIllegalArgumentException.java @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executorapi/exception/JniExecutorJniLoadException.java b/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executorapi/exception/JniExecutorJniLoadException.java index 0ff09490c..66f2461c0 100644 --- a/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executorapi/exception/JniExecutorJniLoadException.java +++ b/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executorapi/exception/JniExecutorJniLoadException.java @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executorapi/exception/JniExecutorStartSessionException.java b/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executorapi/exception/JniExecutorStartSessionException.java index 1edf1c072..c7742abf4 100644 --- a/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executorapi/exception/JniExecutorStartSessionException.java +++ b/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executorapi/exception/JniExecutorStartSessionException.java @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executorapi/exception/JniExecutorWrongStateException.java b/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executorapi/exception/JniExecutorWrongStateException.java index 4b1ba7575..ee70db12a 100644 --- a/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executorapi/exception/JniExecutorWrongStateException.java +++ b/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executorapi/exception/JniExecutorWrongStateException.java @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executorapi/package-info.java b/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executorapi/package-info.java index 379da391a..bd65363f4 100644 --- a/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executorapi/package-info.java +++ b/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executorapi/package-info.java @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executorapi/util/Log.java b/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executorapi/util/Log.java index 8354a6a16..a18a91321 100644 --- a/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executorapi/util/Log.java +++ b/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executorapi/util/Log.java @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executorapi/util/StringUtil.java b/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executorapi/util/StringUtil.java index 9656b5da4..3dc296b4a 100644 --- a/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executorapi/util/StringUtil.java +++ b/titan_executor_api/TITAN_Executor_API/src/org/eclipse/titan/executorapi/util/StringUtil.java @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/titan_executor_api/TITAN_Executor_API_Demo/src/org/eclipse/titan/executorapi/demo/CommonData.java b/titan_executor_api/TITAN_Executor_API_Demo/src/org/eclipse/titan/executorapi/demo/CommonData.java index 394f66f7d..a971f1703 100644 --- a/titan_executor_api/TITAN_Executor_API_Demo/src/org/eclipse/titan/executorapi/demo/CommonData.java +++ b/titan_executor_api/TITAN_Executor_API_Demo/src/org/eclipse/titan/executorapi/demo/CommonData.java @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/titan_executor_api/TITAN_Executor_API_Demo/src/org/eclipse/titan/executorapi/demo/DemoFrame.java b/titan_executor_api/TITAN_Executor_API_Demo/src/org/eclipse/titan/executorapi/demo/DemoFrame.java index c8c5cd1ca..9330a63aa 100644 --- a/titan_executor_api/TITAN_Executor_API_Demo/src/org/eclipse/titan/executorapi/demo/DemoFrame.java +++ b/titan_executor_api/TITAN_Executor_API_Demo/src/org/eclipse/titan/executorapi/demo/DemoFrame.java @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/titan_executor_api/TITAN_Executor_API_Demo/src/org/eclipse/titan/executorapi/demo/ExecuteCfgDialog.java b/titan_executor_api/TITAN_Executor_API_Demo/src/org/eclipse/titan/executorapi/demo/ExecuteCfgDialog.java index 7e64ac248..d4dc5bc7e 100644 --- a/titan_executor_api/TITAN_Executor_API_Demo/src/org/eclipse/titan/executorapi/demo/ExecuteCfgDialog.java +++ b/titan_executor_api/TITAN_Executor_API_Demo/src/org/eclipse/titan/executorapi/demo/ExecuteCfgDialog.java @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/titan_executor_api/TITAN_Executor_API_Demo/src/org/eclipse/titan/executorapi/demo/ExecuteControlDialog.java b/titan_executor_api/TITAN_Executor_API_Demo/src/org/eclipse/titan/executorapi/demo/ExecuteControlDialog.java index eeea8f239..90178e61d 100644 --- a/titan_executor_api/TITAN_Executor_API_Demo/src/org/eclipse/titan/executorapi/demo/ExecuteControlDialog.java +++ b/titan_executor_api/TITAN_Executor_API_Demo/src/org/eclipse/titan/executorapi/demo/ExecuteControlDialog.java @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/titan_executor_api/TITAN_Executor_API_Demo/src/org/eclipse/titan/executorapi/demo/ExecuteTestcaseDialog.java b/titan_executor_api/TITAN_Executor_API_Demo/src/org/eclipse/titan/executorapi/demo/ExecuteTestcaseDialog.java index 5878f0be3..7ef0a7c63 100644 --- a/titan_executor_api/TITAN_Executor_API_Demo/src/org/eclipse/titan/executorapi/demo/ExecuteTestcaseDialog.java +++ b/titan_executor_api/TITAN_Executor_API_Demo/src/org/eclipse/titan/executorapi/demo/ExecuteTestcaseDialog.java @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/titan_executor_api/TITAN_Executor_API_Demo/src/org/eclipse/titan/executorapi/demo/Main.java b/titan_executor_api/TITAN_Executor_API_Demo/src/org/eclipse/titan/executorapi/demo/Main.java index f96a93ddc..37d1a2597 100644 --- a/titan_executor_api/TITAN_Executor_API_Demo/src/org/eclipse/titan/executorapi/demo/Main.java +++ b/titan_executor_api/TITAN_Executor_API_Demo/src/org/eclipse/titan/executorapi/demo/Main.java @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/titan_executor_api/TITAN_Executor_API_test/build.xml b/titan_executor_api/TITAN_Executor_API_test/build.xml index 381225aad..5d26af5d8 100644 --- a/titan_executor_api/TITAN_Executor_API_test/build.xml +++ b/titan_executor_api/TITAN_Executor_API_test/build.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- - Copyright (c) 2000-2014 Ericsson Telecom AB + Copyright (c) 2000-2015 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 diff --git a/titan_executor_api/TITAN_Executor_API_test/build_and_run_test.sh b/titan_executor_api/TITAN_Executor_API_test/build_and_run_test.sh new file mode 100755 index 000000000..43e564b9c --- /dev/null +++ b/titan_executor_api/TITAN_Executor_API_test/build_and_run_test.sh @@ -0,0 +1,82 @@ +############################################################################### +# Copyright (c) 2000-2015 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 +############################################################################### + +# EDIT THESE LINES TO SET CORRECT JAR LOCATIONS + +LIB_DIR_GIT=$HOME/git/titan_playground/jar + +# short file name +JUNIT_JAR=junit.jar +HAMCREST_JAR=org.hamcrest.core_1.3.0.v201303031735.jar + +# full path +JUNIT_FULL=${LIB_DIR_GIT}/org.junit_4.11.0.v201303080030/${JUNIT_JAR} +HAMCREST_FULL=${LIB_DIR_GIT}/${HAMCREST_JAR} + +#--------------------------------------------------------------------- +# DO NOT EDIT AFTER THIS LINE + +# check if JAVA exists +# http://stackoverflow.com/questions/7334754/correct-way-to-check-java-version-from-bash-script +if type -p java; then + echo found java executable in PATH + _java=java +elif [[ -n "$JAVA_HOME" ]] && [[ -x "$JAVA_HOME/bin/java" ]]; then + echo found java executable in JAVA_HOME + _java="$JAVA_HOME/bin/java" +else + echo "no java, exiting"; exit 1; +fi + +# check java version (>=1.7) +if [[ "$_java" ]]; then + version=$("$_java" -version 2>&1 | awk -F '"' '/version/ {print $2}') + echo version "$version" + if [[ "$version" > "1.7" ]]; then + echo "version is at least 1.7, OK"; + else + echo "version is less than 1.7, NOT OK, exiting"; exit 1; + fi +fi + +# check java version (>=1.7) in another way +[ $(java -version 2>&1 | sed 's/java version "\(.*\)\.\(.*\)\..*"/\1\2/; 1q') -ge 17 ] && echo "version is at least 1.7, OK" || { echo "version is less than 1.7, NOT OK, exiting"; exit 1; } + +# checks if file exists, exits if not +# @param $1 file full path +function file_exist { + [ -f "$1" ] && echo "$1 FOUND, OK" || { echo "$1 NOT FOUND, exiting"; exit 1; } +} + +# checks if directory exists, exits if not +# @param $1 directory full path +function dir_exist { + [ -d "$1" ] && echo "$1 DIRECTORY FOUND, OK" || { echo "$1 DIRECTORY NOT FOUND, exiting"; exit 1; } +} + +# check TITAN dependencies +[ ! -z "${TTCN3_DIR}" ] && echo "\$TTCN3_DIR is set to ${TTCN3_DIR}, OK" \ +|| { echo "\$TTCN3_DIR is not set, NOT OK, exiting"; exit 1; } +dir_exist ${TTCN3_DIR} +file_exist ${TTCN3_DIR}/lib/libmctrjninative.so +[[ "${LD_LIBRARY_PATH}" == *"${TTCN3_DIR}/lib"* ]] && echo "\$TTCN3_DIR/lib is added to \$LD_LIBRARY_PATH=${LD_LIBRARY_PATH}, OK" \ +|| { echo "\$TTCN3_DIR is NOT added to \$LD_LIBRARY_PATH=${LD_LIBRARY_PATH}, NOT OK, exiting"; exit 1; } +file_exist ${TTCN3_DIR}/demo/MyExample +# Check if HelloWorld demo binary is compiled in parallel mode: output of MyExample -v contains "(parallel mode)" +[ `${TTCN3_DIR}/demo/MyExample -v 2>&1 | grep "(parallel mode)" | wc -l` != 0 ] && echo "${TTCN3_DIR}/demo/MyExample is compiled in parallel mode, OK" \ +|| { echo "${TTCN3_DIR}/demo/MyExample is compiled in single mode, NOT in parallel mode, NOT OK, exiting"; exit 1; } + +# check JAR dependencies +file_exist ${JUNIT_FULL} +file_exist ${HAMCREST_FULL} + +# run test (and build its dependencies if needed) +ant \ +-lib ${JUNIT_FULL} \ +-lib ${HAMCREST_FULL} \ +TITAN_Executor_API_test diff --git a/titan_executor_api/TITAN_Executor_API_test/readme.txt b/titan_executor_api/TITAN_Executor_API_test/readme.txt index 6a4035095..34a99f5f3 100644 --- a/titan_executor_api/TITAN_Executor_API_test/readme.txt +++ b/titan_executor_api/TITAN_Executor_API_test/readme.txt @@ -1,10 +1,13 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 ############################################################################### + +1. GENERATING BUILD.XML + build.xml is generated. The generated build.xml is modified manually: target TITAN_Executor_API_test is modified to fail in ant level if any testcase fails to make Jenkins show the failures @@ -16,5 +19,97 @@ Steps to generate build.xml from Eclipse: 2. Select General/Ant Buildfiles JUnit will be included in build.xml -Run JUnit tests from Ant build.xml: -ant TITAN_Executor_API_test +2. RUN JUNIT TESTS + +Requirements: + Java 1.7 + for compiling Titan with JNI Java SDK (JDK) 1.7 is needed + $TTCN3_DIR is set to Titan install directory + ${TTCN3_DIR}/lib/libmctrjninative.so exists and ${TTCN3_DIR}/lib is added to $LD_LIBRARY_PATH + +The test project depends on these external jars: + junit.jar (JUnit4) + Hamcrest core 1.3 + https://code.google.com/p/hamcrest/downloads/list + +Test compiling and running from command line is done with this command: +(NOTE: this script also compiles its dependecies) + +ant \ +-lib <JUnit jar> \ +-lib <Hamcrest core jar> \ +TITAN_Executor_API_test + +For example +ant \ +-lib ${LIB_DIR}/org.junit_4.11.0.v201303080030/junit.jar \ +-lib ${LIB_DIR}/org.hamcrest.core_1.3.0.v201303031735.jar \ +TITAN_Executor_API_test + +See build_and_run_test.sh, this script also check the dependencies before test compiling and running. + +3. TROUBLESHOOTING +Typical error situations during test running and their solutions + +3.1 +Error: +java.lang.UnsatisfiedLinkError: org.eclipse.titan.executor.jni.JNIMiddleWare.init(I)J +Reason: +The Titan release you use is built on 2014-07-01, and since then the project became open source and that’s why all the java packages were renamed from com.ericsson.titan.* to org.eclipse.titan.* +Solution: +So you should use the latest release. +You can download a new package from +ttcn.ericsson.se/download/ +Search for TITAN packages, latest version is CRL 113 200/5 R2A (5.2.pl0), this is done in 2015 Q1 +You can extract it locally in your home directory, just make sure, that +TTCN3_DIR is set properly +PATH contains its bin directory +LD_LIBRARY_PATH contains its lib directory + +3.2 +Error: +.../lib/libmctrjninative.so: wrong ELF class: ELFCLASS64 (Possible cause: architecture word width mismatch) +Reason: +You use a 32-bit JDK on a 64-bit system. +Solution: +So you should download and use a new one. + +So download this file: +jdk-7u75-linux-x64.tar.gz +http://download.oracle.com + +Extract it to your home directory, you will get a directory like this: +jdk-7u75-linux-x64 +create a symlink to it: +ln -s jdk-7u75-linux-x64 jdk + +set the following variables in your .bashrc +JDKDIR=$HOME/jdk +export JDKDIR +PATH=$HOME/jdk/bin:${PATH} +export PATH +LD_LIBRARY_PATH=$HOME/jdk/lib:.:${LD_LIBRARY_PATH} +export LD_LIBRARY_PATH + +In case of tcsh +.cshrc.user +setenv JDKDIR $HOME/jdk +setenv JAVA_HOME $HOME/jdk +setenv LD_LIBRARY_PATH ${JAVA_HOME}/lib:$LD_LIBRARY_PATH +setenv PATH ${JAVA_HOME}/bin:$PATH + +Then start a new terminal and check the result with java -version + +3.3 +Error: +org.eclipse.titan.executorapi.exception.JniExecutorJniLoadException: JNI dynamic library could not be loaded. +Reason: +libmctrjninative.so is missing or not found +Solution: +TTCN3_DIR must be added to LD_LIBRARY_PATH +Add this line to .bashrc +LD_LIBRARY_PATH=${TTCN3_DIR}/lib:${LD_LIBRARY_PATH} + +If Titan is built locally, Makefile.personal must contain the following lines: +JNI := yes +JDKDIR := $HOME/jdk diff --git a/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/HostControllerErrorIllegalArgTest.java b/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/HostControllerErrorIllegalArgTest.java index b8d451675..93eb4872f 100644 --- a/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/HostControllerErrorIllegalArgTest.java +++ b/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/HostControllerErrorIllegalArgTest.java @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/JniExecutorAsyncErrorIllegalArgTest.java b/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/JniExecutorAsyncErrorIllegalArgTest.java index 1fe72e498..5f9a647cb 100644 --- a/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/JniExecutorAsyncErrorIllegalArgTest.java +++ b/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/JniExecutorAsyncErrorIllegalArgTest.java @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/JniExecutorAsyncErrorTest.java b/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/JniExecutorAsyncErrorTest.java index 9631dbe59..e3ca90c1c 100644 --- a/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/JniExecutorAsyncErrorTest.java +++ b/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/JniExecutorAsyncErrorTest.java @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/JniExecutorAsyncErrorWrongStateTest.java b/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/JniExecutorAsyncErrorWrongStateTest.java index 32c3f8ac7..46f9df37b 100644 --- a/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/JniExecutorAsyncErrorWrongStateTest.java +++ b/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/JniExecutorAsyncErrorWrongStateTest.java @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/JniExecutorAsyncHappySimpleTest.java b/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/JniExecutorAsyncHappySimpleTest.java index f69d293c4..4d7efb511 100644 --- a/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/JniExecutorAsyncHappySimpleTest.java +++ b/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/JniExecutorAsyncHappySimpleTest.java @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/JniExecutorAsyncHappyTest.java b/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/JniExecutorAsyncHappyTest.java index be6cf63c0..4274c80b0 100644 --- a/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/JniExecutorAsyncHappyTest.java +++ b/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/JniExecutorAsyncHappyTest.java @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/JniExecutorAsyncTest.java b/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/JniExecutorAsyncTest.java index 355942402..62bf95afb 100644 --- a/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/JniExecutorAsyncTest.java +++ b/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/JniExecutorAsyncTest.java @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/JniExecutorSync.java b/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/JniExecutorSync.java index d3e3e7045..27d2a3f48 100644 --- a/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/JniExecutorSync.java +++ b/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/JniExecutorSync.java @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/JniExecutorSyncTest.java b/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/JniExecutorSyncTest.java index ba44d9fd5..bc16ea55e 100644 --- a/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/JniExecutorSyncTest.java +++ b/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/JniExecutorSyncTest.java @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/JniExecutorTest.java b/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/JniExecutorTest.java index b861b5990..de37617c0 100644 --- a/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/JniExecutorTest.java +++ b/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/JniExecutorTest.java @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/NormalTestObserver.java b/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/NormalTestObserver.java index 767201112..d88dc3a63 100644 --- a/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/NormalTestObserver.java +++ b/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/NormalTestObserver.java @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/StringUtilTest.java b/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/StringUtilTest.java index b426ca826..779cc1ee6 100644 --- a/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/StringUtilTest.java +++ b/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/StringUtilTest.java @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/Test1Observer.java b/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/Test1Observer.java index b8e9f9e21..d01808ae6 100644 --- a/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/Test1Observer.java +++ b/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/Test1Observer.java @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/Test2Observer.java b/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/Test2Observer.java index 422496895..82d500a16 100644 --- a/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/Test2Observer.java +++ b/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/Test2Observer.java @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/TestConstants.java b/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/TestConstants.java index 4811a05c1..e3c3b496f 100644 --- a/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/TestConstants.java +++ b/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/TestConstants.java @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/TestObserverBase.java b/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/TestObserverBase.java index 45826bd65..d9b894aa0 100644 --- a/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/TestObserverBase.java +++ b/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/TestObserverBase.java @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/TestUtil.java b/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/TestUtil.java index dde056b27..1cacb33a6 100644 --- a/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/TestUtil.java +++ b/titan_executor_api/TITAN_Executor_API_test/src/org/eclipse/titan/executorapi/test/TestUtil.java @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2000-2014 Ericsson Telecom AB + * Copyright (c) 2000-2015 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 diff --git a/titan_executor_api/doc/Titan_Executor_API_User_Guide.doc b/titan_executor_api/doc/Titan_Executor_API_User_Guide.doc index c3e04d620d7fd6852306e16aeb1d82d124435320..73ba1539fe791fa4e2cd31d845f49c75c3b7d639 100755 GIT binary patch delta 16632 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 delta 6658 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 UsY6nS<c!G}lhLrEkFmk>{{&e&Jpcdz diff --git a/usrguide/Makefile b/usrguide/Makefile index 00c44cc52..f7705f021 100644 --- a/usrguide/Makefile +++ b/usrguide/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/usrguide/PRI.doc b/usrguide/PRI.doc deleted file mode 100644 index 4a1a4d0701f99745b3f2fb721a8f1c8965b761d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 84480 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 diff --git a/usrguide/PRI.docx b/usrguide/PRI.docx new file mode 100644 index 0000000000000000000000000000000000000000..cc75fcd8f6cbfd51fc82dbc50fe12205178af932 GIT binary patch literal 127610 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≺8|vQ$IJp7BlmZ{oRju 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�XJ|eIVaE2HU^Y;xOdN))w0>qETKG` z-a@R~I4+@ag!RfXekv#p6KNW#XE<N5ci~~j=t-O%@)`OV4ejt(7_in^^=na-12&#m zYB{p}?Jl(zxw<IxXk$G?3PVsV6rxNikn1rhdNE2poYo$LW;gpyE=Krko!is@#}P#f z;o6~I%iBs)YpNQ!zOzjU6R&s{lfEElb$`JSCr1Nyg@t^cc6Ox2kXbqrxj=&VBhNoO z_5U5*3Y`R^=0yeo;QO&m$NXQxEfrG-6CoobLw$$;!ntIuH%4l^dGNP=Qxt$AR0Qn4 zMEM(hiPg=4|KVKFF<8bybrAMJ$Z<rK&vE@6#~)Q}Afk7mxHna^=<Z63-YW*R?jsnk zom1=nti<i@ZS7@Vi<^s!3)SBDpA?T*`yHZnkE=c3MvOOmkA&)^=kUh<&nzm_QQ%r~ z!smtwM&~aUH{>*6-LFsR-?!(%^LZZ$LxJEROM|EVMz+i?l;e}9vvRd9;VN>slN724 zs<E3%+f;Rna!&5)RD1csRNA<pMBakV>742VLV%5$!sqWLzeMdQrK#5k%uCLh$5rH1 zJ>n1XqLk&nY};MI7Fgs`C*m2&c>phG6=O%Iz}7uHDX<<SSs=nQ!oWuHln9MGO-faM zTv1XtmAh!lM~b*+@MG0E+9q3+SzSoLwz(9iIb5F&d{X?7Suua5EEczK2!T!Cp8yKV zAsQU0rPQJXDwpm6k2S}c#pm(ZISPw|h@CJynDTc@FUBb)R4}D}{?-43eq$5j<(+K2 z9%(g2$`-L!{wN{^t-G3Um`_eHeW5lR4&Z<FsM!z-zGY_ncGk~6p6?1p?RGPaYj&`s zPKP>fam(2i*<`A^qyNR69DNt+RaNJx>H=RZS1ann#WD(2F`oX?>z-Um7<15Xij8{c z8Y@^C>U?~j*SP}pwp`#8pj0&b1{~8FJy*}y;q~;@rWNYNB$LF;HkPfK4WF}v_{jT- z$+ddo6{-<w<?jn%Z%aKvN=MS=nMut(G=7eRGzF&Pc6#`(Vtr3M-kYR!UA3=t_eYgR zpKgwQ`;A6*$h#$c`8wQ1we$NEHC6OgFV=GTa1}pgN)*Yo*5me*a4V<O?`&xn%FN3j zv?q!)<4Y{@u{OUax9P&!HelcX_?ZUrfd=u3hW<)ZZ>}8#hK|dX>0A>CY%9w#!-1wY zL==$yxLa%t1!1d}YkA#uwY+CsCY@CVxxo~^c)dXWJ03Y0Q!Cju$p6P4r}MAnRUV;l zZL7X-vuQ)fb)5so@s`wwXDBH2Kg2Cl{hjo_ie=U>XxWXdz5m4VZnx^8XM^w~ts^Z8 zy90?tn+)`^&*EVr&_V8^ozwTWW$VOrr{uEv_RngSqCj9~$s&dmtt4r_vP(xhol`^M zn%Hn$$JFUn+(=;(yD^T$9eXrK5;3ysehf6zwC>bJBYEFMAy2Yu+F|p$;%GxD978hN zX<y}H8;V%6g+gztM7Wvk?G!rnFIV+~{WJSO40l(RX3CqD@pkrY!Pv~Oa70)N-%N31 zja9K0fG3(R8Jk4c6burB?#R0n0bEO+P{n3(-RIu#=k<yLf=NN?8BYk$#-LFRME6Pu z{<M6@G)b{n*>3E<QwyJqpD6T#m_41CBUHL+RIMX9wobveS9u*9DRk2AharBE*hI1> z&Zf6%(d(8zFZ*-v@CP7!3Qu;n&DC}FAc2z}91H<Ng+-JuZ2sIM)_5vM{eg(Ae=wuY zAI#|CA7%tyQt_h2d#I@KRw`!%lo)SQT0*M(Po5f6%DyI4;K{nWq7$+Hi_tL==KrOP zFp-`8k#7I6JJ=uWj^zit+xh|C{-Xd@RQ90Fv7?~*T=>oK^O6=t#dx}Z@}VBJgi)K( z*at`DAL#b4puC5Nni?j&|Apl7{RheW-!lBCK$lg${r^Dnlyl;up8#_1?r4N<{>3zm z_(i@ynBTA2oV*|TpE_dw|Ejd9`N99a{K%|E3Tut8d{QAE-`%+^3;eFqRqN!g_tsg1 zWAam8?b_qzyZ&-etIa##4Qm;!ipX3$r&&OmcFsnM{*j4~&{)WJdTSS0!`fnYy4O^5 zyl<DdE?f!NmdXqmFRj;<4KbqwMzML$ChWl1hkUO$_K!Su4Bi2SIrfR6Hv=4E?C|>q zf+6M;NZ$Z3CT|nyAw>Wh=j#CPi=V<|9pII5910=w!&0@EDvrYQJIxnJiYsKl9eRVA zfuFGinZr%MwdOOfoO@6_g{wplw**5jO%ODoc;u_|A=vrrCX>hG^t~U&i<dR)`tuHn zP+xq7JE_ncw3Ti%3-A;qhNvbE0$&7zjo%zjwD*o%*?-l;4RarsTj~ZZyU4{~hM}Xk zSpO#=cjW#*?R{lbT}ziO5ZnVng1fuB69^8$T@LOC3+`^g-7Uf0Jt4Tey9Jj3LEj<w zb|*LA?H~R7b&bIuhk`kGRqb6>XUw%~t)iDJ>qbH@0=nQ^Ujo>z!f27T0fX|jZ{?`j zUt?7=f;2ZA{JXsQ(0IH6kme@v^=t>}r{;F%+@{kuvHelx19j`GPsVITk|Z}OwUamX zVmeCz)Z@)yQtqh*AY@#qRS><zd%l<#1@ygSr!HH`QANB9%xSXQLS`k~fP4;IEAD$m zFy`n^LH(Co#3Qdr=D@I7qKQq=PI(0q<@&6&L@LGaZv|9Z^B}3{$R`LB9ne;Kxq7on z{5*)<jlmLE@Ir<<!(^z3DOmj1dBH^2P{6rZY~YUl)(>t3<l1}=_n4rD4EjKln?nND zv*h-wi|!MZ#K}*|4R_5J*4yYNt#kF&qsgfYB1m%U^GQNwG-{POW$772WTbqS+^oc4 zf7O5qHtO>$Ye=$h82cqr>rR#5;2ln$yJ+H>#Socona7l@C+8<HFqZ;l5fhRkEpusf zX2nE9VdY?G6wOpfxWg@IUNT`?*>D9Qd;?2XWIMgV48ZaOD4-Gd2|&&V6WyT#2>lL4 z<2^&FQK)GL1jOcpsqRpX|GO>}=T}|s-~T5b`98QBMe%AKkx_q<7(w@=u#p9ZZsGfs zb*NGSKo>%tON0x$1-GsVFmSwF7|lc;aHqu{QVjO;K&+gCCR{~U8Jfjd$TCaACq&0O z4N5X?MHzjqOvZdSW2$_#pSQSsm^YzdgqJ_6xM~e`M79*n;aehLWp^u@g;2AB=HS(G zxAKuyw$;1pulq0~G(>LBEIF>n_(RW<+XX^-T5%Y(HzNWLDf$nsd%I6X(Y`pXDC<9_ z1{}C0%=hxSDLJ`q+8ahUO={NAa<xB7SLa#m7z`=-47y2i2*63+WT(@ZRxMirxgPD? z=~+X-10_wm@}wv%j?p5hbN|xZO2oEG;0Ul{EF^WrhK(gzP4GT7z@(t#e!(+aq0lpD zGj4Uo__~6r)E-@cR<&%MD0OSzUU^8FN8My05O)~rA$!#os_e$#9#}`2;OXG^x9TR4 zb{`E=-D*x5>AjO{Ic7np?>*InV{8k%AF&Uid}9Z*P{G4)^3UaQ>ha?hOa1b<yp^rF zsx163lf2BWVJW3xvy8}+iGHNAC*w&o+gU4EDur{bjpw9Z_hZ*)b$(<#?kuYJF^8$2 z-B60#4R;)(y&XvQF{Y5;J*UDoH{SlNtVylrJ8b|RQ?cV4pazCEs1Ip~zAH>;-QML` z#5k5m2a(t6`)#SW9J5>5FjFdejL%b?wI0Ux^eq>C(yBx*THpKEMf<jSc%E{`_24Gz z)f?&Z`M0Dzfs;h+qXR5j^MkvNGX8xHFFS?D%p%@@k(>L0bn($OeNdDTGqa<AOt6dX z#Yo1OdpM2bc5RzAdqbsjzJ)gta4|hu-;Ya9l-`0ar?t1EY+Yy{_})wJ&A#~Kjo=`f zw!i3i9O+4fl*~{7S5`!zZmWko>l6m0BQEmp_Nk7x)tZ@&Ho25wl%U7`LC53uSqI_M zkDH|44uMCkrH9Qk#;4o6Q<A_uR{|CGUd&0Is@IqohFqKz17`|FpRKt+5v<o=mPmN3 zhry_;cNzo`XK3oiiw+B(lJj2#RBvcdL8%^&BAtSH^fyT+)Wbg%R&+&E?hFmYc3047 zT!%m#abwkP-#qQU>`{R-H!vzIN{2}l7A8<Qs*(oZn|C*d@fSrG-RldOopPN2ig~sf zgT-9^K^o+dQ{4~*@!`{ibnWIReb`hoAnE7f6+U%S+Y7puf;Tvmf9Y-sT{$4#P3!E| zax1t4MG$il0y^7r$<fm0FWrq1q`O&xbhkw$<3W=F`5^(WtqK7tV&}@VAkl&WB#`cw z+5D`#<<Nt4w@Vlq@=xTEn>WEnTlK6$tpy7*SxGoX;=D2yNo?Ln1k||~QxR$CDxVFD z$p>^X(d#R2Oq^5b*XYPLMT{v(?E2cm4RYZo5ytU6k5dSa{G$jIlt5Nm=)s}6gk|tD zJHFzI&FHQpc#OxXAYy%*)nKv0Smt2-+1nM|etlaT(OvoyCVq!6;M$|DIUMaBfst`7 zD0<EI9%@jylvsOux%SAGZvF@AIHo_6HOXVlhN<0EB4ih2E$x?vk&cp0n<MD<hIKLX zoG>)#iODa&Kf*0x+v5xj7R5EKUy5UQ6DM;-Y@*9&tpH|mLB<l8QcS{>KFd%tM?<@c zn*!(1Pz|CxqG4UqY|#v3RIr0&w^1u)Pwm>MKsUkFDVw@<KCv+?IuAp8JwHYy)wfWa zA#(b3pP=8;@_tKGLFFb7S{VJD?i`5LWzR3`BkDjCenrrVbyJp@d{#=2QdMC-g`4>9 zd>nvcA3-fQm|taz@|`I3DgtHwW`-rmh24iOO1LB+T-noSRo9<O^*SisD`I#`GUcc4 zw*9QTfll+kgrp=%R6F?;;D#WtI=6b`DbVtOcauPQLGLvaW?z~(R~VyuSJc_waYH9X zu~p<aOf77D?u?*7orZVg9w`kIRtQZu&Q0*b(5zhI9U;d%4kMIwnX~C!Nuan>TV6I^ zB67MaY6E>btxTLnsFj%+KD}jfEOSwDovN^o$s(Wcp2*ED{s_ne*Y`&vO+^63hJx?0 z?mGd;lCrLvH{Vt+UuQcYq4z^Eyr~Wn<}8?*tMWYw`$n`fZpH?uCo=+tWX@mA@X?@p z9m*&ATv*TjYKT}*x!bHA)hl?$K4R)s^?Q<NiIk94xddf<D5S{RfjQ<f&g9&&Rf+Nz z_l}|Z%1Zld-L3tFJ7@xfMx(P{-&i{&G`(pi|6=g-z_v!6TT<Y6W#W3bTbH#d2A#O{ zZ$&ok=Lm0WA8-$}hSm8yu>|KoPMK7;>KV@H!D$`TY7M{<b2m9yeKTmd^i%Z~`u>A3 zYb6x{s(5N>gtXj(or6874*n412>E`Bmj@{b!l;D~+!@<;JaFLl@UWCQWSZw-3T}{Q zhf*MM-qkk`6yUO%wc9rPvw>+Q8W(>NZ{7TL4~MML;)W_&u@j8Lv+gGTth-sLkK6pz z-R{nWN9%CGp7wJ@FUOG)J|SfUhXpaNBUs!c(^B(b9v-@meMY0onwrgdOfnBj%-U~v zlRrrL>SJ2InNQ9{nQg=sNg-h?#qS~15_&OR^J-_RG({z>>C{5wU9I?OM6^MH@1Tj3 zCMoQf*Mp27D;LD{2IOryljgt0Eww-z*=VIfuyU5UlsE6@VtOhIAAK#sSje=rQ&$hK z1nF+)f9Y<_6%uc)bqf7Vp1yge%D%~?-4|sM6=Gb|ljz()OraIwqlVWS@-<7kgyDjb z=B(rkTzfqc2j#Vd-F||SwqnTl0X*A1VY(~FJwY`m&mBW<jgW|LGf67h)15x-Y1gX< zT$2c9*z0T$*`f?ekQb5XQ#U&_@3@TxI+sed+EKlqr6`Po>gxbU+*C(`_Qnq}F%SF; z<;z%Yx5NhDyeSkj9>*&#&qE%(;ULhil5K?8=(7y%D&=s}O13_8>>hk|qsbYoWhgry z0`_*@*}0YC8PL!+EHsisd)lY(__0=BhN4?{%YWg%6{UOs`6K`Lo#HJDbKDx|x-VJW zk@^DaC3^Sf(ogpNU#&78#qI@=r|z$bhBG4%nB`7gk+z3o<H{dR_Ieeq4c<JC?f4a^ zpbea{$#9z31T$sy`Skpd8V(KL2H1M-G;W^C(976d>wg*w3g55elh5CuURe`P6%fdY zzA=}5^4lrk=$e%F`<C^<W(rh+ubT3rD;4nP?FjG`*G#cMK^)$j7Q?*4mrzqPJZ?~f zeOpF|3`IkH1qvQX>Oo6mOV_ZS($?^;MsqrpU+YQ#$|wcZ**Z6Ma$KgV-&-a>PvfiD z0#G0v$cAhl>T;f+_+BV%?n%?x-bA_;4W{7>f96VYn4+lPH||#r4sWG1_KI0T62nI? zZZ@3m<{31^2sdH_rl}dv)UCEoTC;JRnAj3A!V;{*!v;(C`wyFBUhbl&5n}CCMM4;! z)I5~LIKM0~Pb|}N`EHzQk5-YBv9qwK{kQJs6xenu!8jGFHK@Hq(d_U2O+pUmhd9)O zA4qq5PqHv=@~peLCTsFO>u#(<G?{fqV)>i~6Z)C>3z(|))Z@{kZ|V)}%3|V)Y1$wD z2i;BdiAgCA<N!Yla)3t%g9QiJ8Yuv6?Hm}5oE#i&t)D&MiE<&qsj|VIb-VwsOKqZ} zE$Adb;40;jpt`F(dhkRdd@>OnF0O?l?DSPKIacMjxftucx!NZI7@P{-x+GaIVdBtZ z7of*URq#ps^ecQJ$?o~S&saIZJ_)TPR=npkKZZKaJ}5(#zz@8RXeE_AS-v?+TUR=T z4j>_lVd&cGTcn;|g7&3zQNTJE5j45&4+?KqxUHCj_NXByCu?1r?Nmk$Tvt&zF4(AB zO$M$stsDtISoVh{mGS)eK!{84!so%@C6=ZcW3lxhd21hg`MI62z<;inIP=zjWo-e) zwwo#S&6yR`TW`0I=6X?lU&1uKZ{Y{ph`wP@iqxy1d`skzR|-7?J|)BgvG3bi5qWmJ zC*1LMTAYiF=avoyG<vxQCV~;zI?|STW9;VNs>7SXgC`Ua4-3jr#^HHFejTqJTj2vz zvfO4w%)r^0cdmnp&qdcjbvFh(>Opxvp_Tb^D*~sf``3gPx~jg&q%&3UnzZ_#pMA$^ z9c|}Y|8^$m;w|^;A@2^d;;KL-1Ho)$<a0T`@GboIg$Hm~Y&!d0LKk!ZGM!cmI>pTR z`+5@U_~CGorEBJ^&$OI?r5M4kvrq(gFnNYNV-5+agu}~82hz`E>-ppR&OR1ywLE$f zT_if$@ghhN^ggi?oFXz*I|`i26<<pL5rVz2dJ>W+OiAF*dEHxvMH}m_k(!x+Iaz|W zB>VRZa*M+wA`SH8Q8_CJi`)q|+DrzGRCCUHR@O+=i%KLe2MM^1Z+l+nRMJh2u;{BQ zz}a+CVCn%fdz}5*n;J+~t@G51SW`cy+mWJs>XeMqdiqS75?`<4rJS-Je#vdt+U|qY z9h(2@$HR9fPO+?MQ3_etx4x>%HRkZ>K|=Thnz8?>q2skMwP%6;LJI>1hWh(lHn6k% zzlr>7?V3_ilwV{*^~$P!Lfy{bf}_`pu?*0M%||L`@7&ztPMXm&G_8ko?C{#nuMIj^ zkagF{YUj-w(d#(z$f1;%#dp##owC3&eTyTJ9l%haDYLn_v9V@^r_rm@Z&?O9l->E2 z^6-I|hqW1MlWY!Fi;6cgX{4?<K)os;Xc00RBU5>SZOOn4Q%o)4m0fv{=!=0EKG|qk zK5hl_c$lL?13pK-<E2#&`nuEmL!By%7^XZZHtS*hN=x}7IZ$L7DGm)yv)%&{j!tCe zHn_bA#?I=O<S(+X7vdA~<yfSkB}WsN?A8^86HPZsrTifItrs=nj}^49#NqSG%C#LQ z2T^}O#|MzVDoF8v&ooh{F7+0BVpNGZ!OBk!5w-tyJ5#HUA<xqqw~ZkWR%;OJl#fbl zy-+`gFr%-#x2ZOX`9jksa=;`-^*JX`dhfW4O&2X^B(Dvb8ZySEvFO-lbKOX#NHdQ6 z<~-^(6CFYo9&<dB<;zyO%YNS%1g(JCRef8Ud)s5AY7NQyT_y$my*0#mlx}gooH(z} zJX-dMyxx%9jbg60mG#vUUm4wH&%(6C5{x@Qex)jHty{*~%6)Bvb<XHRL>Y#63L^Bj zZu55QHpJ181ov$#e#%<Nh<$bTm)GxY8fC`@+kce1&U+o_yvVc9Ec&r!EvlOmxy|Kd z%iW+A;%(Z|eWn}ebhigHe1aK12sKs*MOIl)R3&63eriq|h%PH7%L5l(<K&TZfQHyL zeEx#JE;O#OpJQ6|hF-qrjOC=il<~lxtBDxdQUq@%V9qj_hcN2Q_m~pVCi?;YN&1ub zgXpI=xy80BFSMk_Mwuf*G6C8;pYtC-4he1^JUBh>)H$S-?!P1a;0~sBx==Lq2EC#G zIjPm(psufj_FgAYOsJQ?PiiAu;LihU|F=E=HM1k)WNkpRI`A6G4MxO0C0~U+iiovx z651)|RZvN`I48KU99}mX`3D)REZR0<2Gy|JPwyPZBZUlCJT6Rv1{hIPLNmM6RSsOm zD9J>!#px4PM)F!VcrwNNc*@BcEs-wvU^$urC#&1J{bJVo*59Bb-s#6snx}=D5b*QN z0<g8tU@;odE5-zF6w<<Yz1g*v?5Z}kI^T(m*g-`}A9LCG+OwkN5m5JpSY^t*22;|f z%7HkdD?|@_GQ&?Ecw{9OlZ#IP_I|ydTI4sD9*2_n-c_vFxOzf)M>co*Nd0K<enDT0 zL%Td8CG-VI%~GTdHzY4902j=0TDm};mvBrmp7{WWQDS(;-fJY1MuTXlhI{qtrd68` z{u0VDGO=~bSq)~N$n3h(f3uxqqFPAgU>Kg8((#6jTR^4O3QiS!noBQB5$IdU*1oVr zB!#}U*kyhXzU<pBh$^zx<`RjSvth2OHSKQS@R-9#^<j|o0vY7%kEy38GTrgYI(9#} zb0QnN;)R`cyfaY>XY5x;oXK!M3Jtf+m*)-uWRg`Gb#qSo4}FZ(2dX?`?UZVS;Rk&e zA9u%-(=oRAq$i^|KXx;DPQO(D?)gAzpIA`S@CCfnZ@)nh{toHi=0!&D;oKXL!Ps-* zx09PTPS%FTKu~z5=k4zKNZMxO>vqO57g$8>IbE_Cs?b=!VFt$~Ic8S;!y#RaHaomw zG4(8c-hR1?uy$qNtMcdxtUcOGEb9Jv@$pz0a)Yn#Rhc0?UiaSTo8BAOf{z?o8T@1i zvd!As(U%C;j)`=IgNu%5+isVGMIe{E4D0&1o+CiLHrZ@mMZd}ACQ8TC@^!RY_}vfL z>LB#dHG=Tr=}ika{^ms+HMOLqw0#|xEGveceaE&XIzd~;!oeTg=NG$<soDYzvkgg- zlkDde({9|d9Jr10Od5PL9C`Q77q`oaB>?cz+g9yS%EjRx;KMdhK;y}+gD1G9f@1NK zBBNlj!p;^6t3g9I`gk_H<UVj@5Nm*;DVH(+>6KckrCygSLmP{>+{tdgp>*c^COMN+ z<iVaD2Av~;yp!cM^ph|(H&o9rpFLF5uNx<Z7cK_mZ6;yX-Ogcks#*+=obi}!_Qfw= z_Yfbf>Qo%BD$a@##$8J~ho9pww2FLB=}8-++|O;56*N<~6DE&}ImwzCyi@tXQ*znZ z(x!2*xk5WRglt=Akn4I_WX-djUD!-`LQw*6<jB%(`%$f4PRYsoK2KtqZ;%Xl`62={ zE^XMEKgDKsb##=*yRE5>z<evdhoUX8KDhtT?N!{<p}u2^4qr!>^<+c8D9hcYQ^KoV zfYDbv;^2Mr#UB=`Y+tdBCTIB<Sls(?ly0aAp#2xzw9-o_YxKp!celG10jVRDtP8cb zjSoDuS@#^v078h*St=_}@6NSc_tiV7qMyt)`HT}iR(4$ODn|q?5wf>Bdbm&FNpG$# z;P7+P7zRc<mNHTpSOThXw}($>mjP!`9~uc>s}IWS8D9qvuDSO!zIg0vAH%&Rx!P~J zxbwryFy<E<HEbcN_CzrP>4~u|8`1q_X{F}`0cmP?IUXiYHdI3NZsA8S02*#Hdd7r% zK_(`nkf(1c`E<+7^(r>E4O{x<WU<Cv8~S(QVA(y}+__}(y}%u;yx5yc_e3V*?9edu z7epoC?4od9G6FAXEU-3p25BLXUydh&rz;MqAT@@cm7if4m`Z+*+Jn*C18V{O{(#XX zK`Hz?cb022;$`58VJojO6QrWklqkjPWl-8@yJG#2np;UN>(gL^(ts_)2<Z%bXbg28 zeqB$w*|eiYHc~)O>$o!kDyd(v(3YVUEm9aiDiziyzJ{WrdiuIu6Lw2jDB_+9)}!=W zh!)IoRN(i%p^mgs@00eG(#b`ad7c7asNk6GK=3fBODO>f=%^zLXlN9K-nlEQW&$3I z`o2V}%48pMcpZvieHj`;9di2Z^~c;OZDm9k?bLMk&)11;^PRw51d(p)fK0;Fs1ikm zE{+!zDKOZPi?KWN=gb-%vh|Aqoed>lgno^M6p~g)^wg5~7)5G{&eKldDRI=W(AAZe z8Ya$h*7B%cx+9bb0-y%?JKb(G=#6c?(<O#KMK}>w;~Kif+~4-A<Ep8yA4t_ebu5B{ zh5i93mPxD#Y@Sv_qd9o;v@tkG-D~cYkozI74OVS}=@SIyr2=o3g$~AtZdtzz1sR*E zM5F{I4Gnv$DBf@`L^PZsT<NT|rXGXUyQ5I-<BIL53N?uum6e|Ym6Jf@gM?R`CFvKr zEXiu^mfu1KtJ1YYJf?y{C(A_?3u0F-);|HWI|4h1a*2NxqTCe&;YW{$T2|V`3cJ=x zo!>cG2_tlgkJ>*)m5iZH0G*)%p4KfK!&XDY_EAJ)Mq(IOWd<wAIeRy#r@eIa%21+4 z!KSx-L154;bQ6qQ(suCH;#Gl7dghXhZPK-V;FF0NVFaPjtz(j;`}NE6p#8^y3do~D z;nQev;p{bwF#&i#%xg$tu32i~yC794a<kRW;%w+6TqTV7Y){b=KeSp~eHDe2E5!zx zz$=ZpN(jb=@aqCkxixXsp=bdrb3L;lih87`T3gd2cNtrl+ME5;ofLc6_Z+tKa;X}r zHu{Ewfs?rR#BsxHfgiAKGem~OoeN-=yB~F~(`+B1cVE_^kvv*7Hgy(#nS%``z?1{n zLuM{bI5*bNy67SyTa)4egZN^44#sc9FeNt8HTYu06#~&U@FG<x!r7<_L@@Ceg{cNM zt#1G^c-E(ImdMPSf!i{09y=jK)1GMwkHP0(Tc{gLjJ-_Fch6c&>!dE=O`|#$sYkJB zH(yxi9FSWc-TPX<Ktj=&LVCSg<R2fJ>^8IX1HnD;#c}_xi_yD*YvU1MmsEZdW1DsB z3USMsi;?sICyxjv^^K6*rNJUm%L}F3W$eM5FXb}coD6VpaHtg>l=={=13n{~AD0GN zZ>}Q0{e)-1BFQDXs8IhxWPp+&V^@R>&my9<Nu1L8QdWt${1ll9Pa`G`hWgx9B0Pj` zk;4e#WTR|-8sQ53DL>|gfxZ}X{erV-kGs;f^h8K)hNTiSt_r=&Ccxehr~`(Wyj}xI zdP8j-8Y+c5hw53)l|d&*8U8Mj-?f@6vfx8~PToY&m1sJhoP}08RflOxmQ7lF;09l~ z&**&sCM75A5SIW6{q2qyhjbX%iKc4pXzelm_0x5<w-l3vFby<usSwBeE2;_Yg0(<P zg+rJ78z-+C0Dkn4Z}aXMG=VT)^p|t6TGx}4^347SHhj5j{hZYo*V+)Z(ADB&B68qx zB`f6i$z)t;Zn@wKI67Xf-;%#A&3vE`dJ{GGTAfmL1-gor&V?|on_}8W_W0N&KjO9} z<%Lt#VrW99DXa6BnzDI0pQ2Z99q<)Tebx<QzjjG#^0EoG`YVCiPU=;Qzh{}ZYLn$@ zBB+x1B#CLQY`#ESlUdQoo4YcTOeORn_>`EvR_Gf##|F!6ULKLb0OxP6da50=>dAL^ zItg?K#op>vi=NF1#zoj*Ur42-r3h{_cnNPWISS6fCd>5-FzmC@kPLUfG*(*|?2PtW zGBz;|<$h`JvU(j~i7G5Ay>zVz2KG%hLsQqQE*ipXQu=P!rubuzC00WepkO1%+;M)T zjoo)RLWxLcRqjK{U_<Ho`zfZX4?6>2M8J8us+a&Dp?EC>qZ<&g4x^qjtNXI0Bt=Qg za;EV6fkq!E8bk+Td=dP*br5iN1UQb&0Gw6s^!a%6K?)OA>JG~BjhBI;NnCUf3?U85 zN^&dB7Zc|NAAq6`0VT(!O%QiE6L8$rPw^vh!}E7rXAvfjUHpX#%25uD^)hO4NeA`h zI7pJLKBx5O=et2W#uw+iZ+3ew&Wm6^k}|ryZ6i%gA{`E)f3fR2yX@Mu9)QfUhp6`5 zv_W>(Ad)+>wUzB#CArC#-FaM2Izl<3oEJ;{<VGD++DzDOI^s4IjS`uxifGe9`aOVZ z^bQ3PM*@Hhs!xe-#zvW&Sdq8gFO5x3lI_dF&A^iH%Oc2*3gD|SRyNpD4@X>frlvg@ z>0?&Da9|QFXwN99-}wIN-T8ICrio4eYRy*E1&e}2Wbnkh9bO!pg+d(_yJB$SA`U(@ ziHSH9Y%b}VdKFDK+=xj0Dl=SlASwd)_Dai)e2=kI5+2vW*T7m|Q8_4=&(8e{;4e@{ z>*Z55!0q??Ac_Ws^UGWt$w?IAGt^LWEFlJ(j7Su>hMJ5HrpI0{#%P(leE5h+JvLWQ z5d>|Xk7>wV*!bpUFR=vRoG)X5f~6;lAi%5YP38obJ!Hp938qG$z<u|}jN#DJ7d#>k zZqWH2O3f%n%I_Im;k|7Rn20KIDn66N<fwZ%6UaacMrxIHe)99lGceD>`+zF;m7RBC z6fOkggL8kCXCR)?0U9Yd1}p1$iIO0?!R)9%-p$mBU32R3o6PV{K9E*n9qX8c)r=%U ze|e~@qfr!45L=ykmsIsQTfGi@BpzkwH<&t~SsU5iGTlI0vI+hUnYxx30xC?=c=SMv zURxPYEfgrpJOS~s&HEMX!0d=4n>>O6$q_Z22ur>gFg3V_Y-NRg6NN%k+Q9e2tuAEs zX`$4_5Hfz5()Qai8hkO&!yH%%U3qG*_^`4!++?gk<}l*<{MBqKWhnC4Nuo{SFd4yb zaGk;`3MAb0BIQ``XB3HGO`sA6iTA%}03*QsQ=(MetQP7nn8qi&#}H&$ua`Md`3a$3 zo)3K-m6LGFZRmI>XViK~%M58^gfoxbZKp#SVwjr$RF)`<!oON2YJtBu=nW-R{zeBv zRN`gWy>LCOqTj7Xp}{Q<Wc790Dawe8l!74Rlzs!=T*U?~DkNyD`yNhoKFHzD2sK^g zC0Qf03VRD&^)Jqb{2q=pIDWKwQz3*AU+DGy2q=SKuoxz4@%q4W)8Bk<Jmw_fiXA)1 zg8WlDHt}9k{Zs`-q|>e1Jc9)D@pZh@q$idPpwMgTFuOH}iHV3y9bvy+lb^aqUt7VS zexVRQ8`Yxs`zBmBwGv$Y-d8vMJ2vv-lT_h+c&SQp2?tcVo8aoGk6oDf{Ky+rdkB6C z81YQ6-e_VAnW^c4SzNHHd#HP-rElZ|F20zI?vK0EF1!Ko6go{ke`$y}31>?T`VO1M z1z9X{A)AI67$C}lAqNwu^3k^n!mak(Onge_WFO=<U@yITXYknQyUv@HFVvRp+@ibj z>?r98Tl8;Z*yc4Z>V#%`OVTz1Lub{Lt;<a{D(kzVtmHOV=;#ZCrm3-3nz2tP>K?nq z<+G}^G6D;xmRBp5p$dWq;6!!Ipd&teK<!<^FD>GRS%|L!W<I*P4S&P&eoI=bQE$C3 z2U|tgeIrf0C}90Ao;8RM3AP(*<41jR0t$nEOvHnt+~TXc1+6?Dl>R<TZtHiDmZ5w* zjj)^nt0K4awW=U5otl{KT3N-!Qm~ro_Hhw-omfL!KI?a4&dd<&43hzx;-mH3^nmg` zi`|1%@;6t+7OJ0p>#6<fcD*)&1DE@lh*MLO_iuRubyh<VVM5UbiIk=T;=Ae}6snqM z@w?dw>>A`1`%5)M6XMl7%Tuzx=A7HI-}!RwhrWFwOofbxu)!dF8*FDz9RuxG$|S;L z^}!Aj7UDtma|>=`vk`HHt+JVT(-oGf#e0`3)9y;vWE!gV<w$K=)}cmQma&{qa!4l( zZ=!Z_nSNa2q68EZ1y&)oNyHTO$N_|ltp&l58KM$GpxB6(hCYK_le_#hgw0PF*v(WA zW$p2D$1uJ^gdNJtt?}Z(H^LFU?%`{FH`2cFkgi<b4`-fn-A2i-ugki45UiJQH9!q+ zlq?rBuAPiA(L*1>G7sE!6H8sM0ODT_NOvYH5Ky7>WgqZyNwOmJ9x#HxV8uNPWG50y z)evisL1Ri}D4q1ONpY-Z!02^GvGSd<@4o?pVA<pl_&l6Ca{*}>uNwlC<P@Q(gZQFW z-$|XJ_E}=(#pU$o=2^xL${_9C#ru6Qh(GVd^&dsTiq)ls_4H>q`(TOC6XK%|zQ1od zroc)x_?B3P^2-NinI;{*cVy?<tZ#P8C5b#t=>>Z(BKqtBDI_kVhHsPeN!TQ5ukE(r z_{>dOfSn|4q9=hR0pHJRMQ<<N#DvE-GBJZ6>Ih3XjL1u)pTD@y^!lm@BOPphD9#S} zZf~Zd(0$8QNke7rS!(-WXoRm6V()=B8EzHvqG(PCI$fQwFxYdkizA-Q%2cIfzWV@L zvQKQKli+I&Advy>7U~YUmJb>U`5MJ9;n>M*fDS+f8On4X1so4kVocBviz=6}N5p;Q zt9|7(gTRMoar223M#5ySMIqx>W}MXt<#k*5)HHPdL)9C&!jMu}87(h8tfPa|cXz%) z{@50WSI=)jHsreqBFFy8Xxc%dRE&82F!k`Z&NmVTh6tcFGKEC_@%l4*P6*;mWt`UB z?E<9E<eB5vw!k)YA@*y9$+4QnnbMbJ3lG;PPc*Iu-VpDVIfUCL+)Qt0d8l3%$G9TL z8y|3&BO&Lvv)WwHeaug(%RUxIM?of!Tqms~V5dbESv|&`;^2yxTwNRkvpSFw0yFoL zqe3F_hm=~ahk!*n#3kb9i<jGP+I+j6gMHmq5IgY-qQKJK*QCi4i^X5`ZLv9LuknYS z-FPWW%7mD0cLmSu9;pKJPO>FL@@J}jGSU1A--TH@Sn9Y_0sh2Uf9dTQ#Vmi?#<n;q zRz$YXGrFb91RAf+?5Ose6Xke)qpa?My;4^2Mfel<weZM%4z?FKl1IL3K2IGWX<@w0 zBAIms03MRh1<PF1y=_OK!C9F!KCpW~81^#C1z%QTTURZ>?2I9Ao4YYdm=7Lb!F6_A zi2m4#46Akhzzh}rnx$>7I_R1UXZdr7+$Eodz^<;EmGc*Oyt;b_M)Wr0c6RdXX2TM; zmCbX{$i~?OMbjk&s0k&=3A+k(NrYAzhX#Lcra1M-G<ZQpBBsi+^tDik7-~PwrYtJ7 z*Xw~0DKDvs`fN$rdQ9wEv4$gIJR}3L2yhG}1x~XFW54sX$?6|c=Z03#k})61Xc=om zh>DKKXAItJtOU-V)^OEfFNduF7)Wz^m!h#??cVM=W3@MVa;CT~>L<!zUYBh6@{qpg z?8ouY7QEMc7FGXJqroBQL1CYu!C*l(#9)=E6HBllBa``0gYjR|>#wVpC@6NCv5lji zva6l3gU+)Iry%`Lf)o`mC`gc?y$&J)ar{<<A;G}(fW}r1j114$KY?|2XOChakTxP1 z7~XF%FfeD3!Ru#m_P@{|8@7`*s1eV1|5v6+t9Ai7A~3KfeDI%v-G7nYgVHMeWcr=s z&xQ=g^P=T~dN2TLFX}HW=#wk$-*7Wy1AsA*`QQ5A^a4{Q=U>rp>HkKX*xEW816luf zXl%xRp#PWm-evj+n&sc_{Xh4+p5-6?{@0c#ZxVC#fchN|iX`?NP5)O3V*49yYy+?X z_59~CpFamZK&2`33kaSHf<H&<`&HaHerx*wh@V)dS8WA>h(R2<zrdhRHe7$>|9X4= zdUQVr;9p-J{(>m%JvcD1z&C$BeIxFFjKaT;A=9!b^+#whuzXM(o>P4MDz2h`qaDqR zt&JIfUVnRtzp{j|<GP4zj)8$a|A3zPZ$(+^Zwh0O3=RN1rzv2RH8%p<I@p>x>WRNM zGPcrFvjti@m>C;8g1D_5-v2qw4C70z`k;G}fg1PE_TAxt|1~wNjREEcjONw`rpBz# z88H8(@D&?XFi-^pqnii+gCdIjKPg!LjpEPDo4@)<;_;spKl5<@)rw!E^k*)WUleg+ z|4H#Pv&x?x`7{5+FA9>VzbPDk3xW41{Lk2uzu-`rf5ZO~Y4T6}pJDfY;b}nY$In&j zk05-1GW;1a>K8**;eU1DzvD;!3I6j$-Y;-e(?7s}oX`7{=bs)%zgWP)pohW1{>9(u zPlA8CHT+I6G4>n5-%bvHqW@_>{T*F2^&9%Xtf_y(|1>lGBIua?dldd*bW)Ip0?qE{ S4GIs85wtC_AAr^yu>S{%<L8I~ literal 0 HcmV?d00001 diff --git a/usrguide/apiguide.doc b/usrguide/apiguide.doc index 0d52c28e306b8280cf08f1bdb59e80c2cfd13305..697b42e51e1aef9e0adf0b62153f885d38ff7728 100644 GIT binary patch literal 696832 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⪙yyRz}R3F=j@@(1=0aY+$j*xXG#x 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	<* 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 delta 90220 zcmb^41$-1o!1(=@y9f|M2nhr|+#!$<65QRPK#K-<r<5Xxwn!<^K!)NJcY^eAg1Z$d z1h?V@NYSS7{^s^J91!|EpXdLw{obw2&d!eQ?A~2EVqbv~e`lXkD66-kC}9>}<i9kE z62ZL6?7R2x-z$n(GbKeHN3q!{rl`MYnM(~{WmQru?Ygz=w%vETuXC4=Uc4=VO0ih0 za<!xCH12mzso<q34lQb`B`~Uo_KV%3D@v*+in5*6ry3Z0_iLsqD_DQ1rK0poO?tYs zjZGds6eW=N%)HBg=6i#lin1@GqNE!~Jf4J|tSHyne{54#(Fpe=@A6+V?*%^Fkc%~$ zTd2x<_B_!_RnD`#k_bkUWd9V~T}h1DE6*T@JhJ>}zQ^n}md*E-O`{U^tadY@#zrII zp`@u0Cn`^9Zz>~!pT5gzW@hE2Tt_wI`E*&HsQW)N9@jeY&YHqQ%wMhNEMg|?OMA#Y zJCSu)>Z!_4nwYv;uVo+B#E9KIIyHf+peVK{*B%B<K9zK6bA9cbin1z`qI7MjDplN) z)t6MJW4RJ%9n8BdX8CV5;ZBj;i&`7Yul`k(p&rIEC8{gKnuurC6#nuIN>?*OId|p7 z%nO;yzlmU7l%f>(Q<R&F6s1P04|!W4Mp4dEyWee9lnq{#UXC0xsQmZoyDV<`Z)H>G zaiiv2{5|?xRHcD)w^E-5H<!)xG4uHI_o&RCbBmiNVD9!mzsq7Mm-h2;8_IZP)wN=w z8zNI~QF9lI2n~yf2n)$!Q`4#5{<a1ct5<DQwVJI>liuw^&5cpzeX@DE7DA&s`Q-Sp zFy+IR5>XBxo4KV#l-riDD38>+%`IW>TS`WKle(C>rKJ0o@Tje+ZJw@!MwRzXia8?6 z+qbB>OGH!!Uo&YXgQGh87Itl6VYY9!G{*iVi^<a~UL?djDzc`3)K%X!zUBs7%Pwpx z78RK;$lSAdRMs>_%{_}70g4xkx)G4U3=tAFEKR`=3+vLDi7Oczbs<e&bKg+cz9roE zEfH1JFSqNwN=EJS%WlRK7B$8%^ut1|Us9wcqwe_yn_Ego+0rI$36H9gHjjBO;l|-Y z+|MN<YHr%>W_luA0o>0eJUA*oZ9!KQ;lXAU&jQWt2rm{@%ilakc(G&x6pxzkpUI5D zm0uwurlFn`MM%^`|4gnE2oH%$oz7Os$p7$ASumkRLcN<*ZQdmL>K7gw^-VhSjKfPr zjY?O*JXi@MHK9=?*OjH=QF#L@xlTAd%(dNF07(I61VoqtN+uWJm%yCn0bE%c>O7mI z2pR>JFax-<^rHX~QNITkavdSUm7`(qNr;H@OJCRw;L6dG9|!1}KGY20%F&V$vKG10 z5D|4cy;;*ELZTi7nk^+Fsz`=ruAGht{b<9c47JS-B|h2^98|?TmMg=^a*k!LEGf$< zj4~3w#r0ga<Vz{Sm6hQiC(|!uK{FaxUVajwN5*1i09Rgq2v9OOI5_HfMrZw%^RB#% zaMoX$6V3oxGda5!IbTd<YOFi6!nvh?rd%>^Iq%BEh!Pu?WokY}>^!fxT)*npVzIiM znnu*_sa6-I8maHp`Ht|$YEvJ_rk?8Zw3=s1abu2JSFC-irFP^Vsj8~QRyJQ((YL*p zS+kWD*?-jn9W6(xt2J>dTCFMuk5$tO{{?DhadE6#L$!%oKd5~j-ao1do~q3;c&gf6 zle@)EQ*C;7W^PPV^Ee7mQ}b$s^^I1u@y5D9@qW7MD`rNkkHnM5S}L(ksO8vHeTMqX zac-8{UniF6`D%7&Bz@+q>BZ9aS_Uy|p4x%cIRvZnsY7K5NALM+YSk4>Bh6RrUZ7?m zs=U7u)viVAHl2m<m#KMqTd+*sqS-t}{3|tsn7v$0Pny*gYE50Q)OCRHJE#_Q3|*t{ zlzWt3uLkk<)p|9%2+pn9#QQmFDslIw>Mt&?S3^XRx#Vh%4Qfpp--5YnF%jQR3l!J= zwM?S^M%6FC=Ht_@ckdn@BYW9;_vzR#azO8X*==I?ZZ$|OX|DyzQwbEdP2_2YqFOq! zYLl8$1iw(zi8c;3El0kwR}HfgNu`?6FG+3l%^Z2nKDCh8yH(95wr^JJi050?EF#Yq zHpn?gvn^^Oxo;DG=ScM2?P>_oEI6R%7d3XMr5&jcs?~KdX_uN$1lQKR#Scf+pG3kE zVsxI>;Y3bo>`^t3vo46gj;ggp<T1{a^C~1p#Hj(I?Qzv#mTvGVPQqCptB$K*8|kle z!c71Blg{+dyR3$ZrI*<)%}dow{CbLHF2Br6gUu}dbBcPjZ!7hv^=WyaGtBKj%{n>f z`1`c_TvixPq_J3kPVHo^-+n+xR|!?Wu8vd1S4ZS|)X`JQ^T;jo-c)<IolM+%wYYH} zU2myni0S$ZH9++g6{FN(c|!S(RhdOBMWx%yIs;^q=M*e*ZK7bh-XXkeZBS9oU)29g z^^xV1PYk=KW;ZrvWR>kc`8(pannH}brv_-_ocqWPyYH)=MD}f*SCt2xmvgTF1GP81 z%0?x=zE9TpJXCX=D`q{E&BCgs7Cjz1>z*?hYs;D;+MJ=3Q$A9AsH|D=SZyTp#wJ?6 zChL1Vp@>(!R##}E%mq?e-%m>+e)vZXNoVt^T%%&6#!VX4tXJKZuWPRXwq7<-E|(@7 z$%}u~oV*1kQtTg9g^@<?+5c5bvE8pOIdJS>@|hZuQS^GJmJxr<RSOuKf<(plYH172 z-5D}ydU?&?mtLfO?_T`}*xGlA>}M+==C!8{QC$MW;X<0v^m8<m$Uv>I8N&uu3rubM zco)B-1gfKJ8AYd}T3U|*{krz*Ttxh7)#|dBGjmFLXfk=sXK?)Fq1jYXQ>dv$wsTao z!Zt0X(7m);j#*w>bKTK8NDK28CvK?u9XoPpgH+v?(p!|wrIivVa%tJch6!2@5t>I! z>*$bMYpaTL6SS;iO<wI!;;)up>mts~rJzF#YMDiw0$P80wkgHwTm(AxUbV_oc2=Vb z4YVxca6!#K^+y@tJpYVhb|Gz;7+F|5C8$&V96uJ*zLI^7v%UJ1&>A}?l+b!x?Mi3G zrnFajE4`HdN>>bkjpa_f4p0U$XJfvf5=qFON=L%Ehv>tWuFiFlN;{<o+huHB2rc($ zPuPyk$rvLE)xr60V@@8gu+m4V{`u~Gm4O8Az-|KxAfqhAZi9%lt21hwGm%DgGU84| z)=%^<qoq$H0}pT=)23v$MVHZL+uJGKSS^!cQ)&{gaSC18uPgKYSldJy%#k`OKFoFD zU7o)CUR{&jYk+GnGqakocV(rX;%^HfhJ3x-b?e$8zpbliYgf}d{%WkXQ^o$LY5_;T zue4iqIF7HHYkkz;ztNtkX>E!p2XDlo2XNB;$QyCGDRr@OORX{?&$iTl()D8D0U~34 z-6lr2)h>xVep&&sy1wq^m=dX7P$}6i?KRoHC$-l$x~@Cv#h4CS9Y@xV+AP(vqqEk> zBBtli@;Schp&gccWbLKN7Fn^E7HwS9Qud}secM}`;yBbt`$rS+t84kh!~R;i09&VG zg=|J68&Euttq<+2Q*lT60owO6qA3%#+>WaQIX(-82WhPw7Y1paby4#xEx&m1J&mLP z5N*0_^+m<Pp;~jJ!H*lJwJktw`E53z`VE@YtY5EUojgewu(D<gH8+WV!?n86w^gh7 zO=tmP*Kn@CQ|r*X1s9;l=xf)4bs`hP?ONtEpY1z$pq7cW^|7;O^LeU&%A_VUpt#sw zP|K8-9>vuqBptBT44T}!5n40(;+>{XzmEMo(xpZA>R=ntrQ=}XH<InoM`-25sBLOm z$GnkRK~?yU(W=O+uD_T(MqBInX{@%-qJ}scPSDDeI}WnyuA0WyzhjS%?FV%2-ODy$ zaG#DgF+710$Gl0JABl{cq@8v4wvNn`wYr|7O(bPDHCmf1bGPUWEtkA5Hk`!~I?vD| zy=`54b?EqAep^a$e}+7D*P^qqyghwH%<pP>@!hZ5RhhK(BKE9msnWme_Z@A$JLSu7 zlxfP8KHv84+JRIJu*pqE&)sp5b0L39`OgT@qjzU>AG*SpbcG{k%adN;NDGSIs##ME zp_&vgWDBtkb3B<#?Q%?CrRDMzg?eZO9Je-T!{n8=?e7|coU-C1?~awfYZujkl-~I| z_8Qo;jWaWxbJQ^L^JXo5R@;EyHo1l%?wx%90sY#@Fk3fk*)kfJ8ZI|-ReqbNPvedq zZS6Yt=sidjU9J}7VjR;*%SZzKM4PQzcgNAK+99i>&mJw4huYsU@sRd3kgMp>Yg$dm zz?<4l53#4emftbrzP3~o<%TfZ;E@)ki~19&&aCxx_&?Rc(&@z`0>sHCdWeGuXk9CK z6)PDY!Bk8<t)iFpHJ6NAqT<F~q!FUHXjN4YHba=V#O@(N#Ez<Zku<J2LX0><LW~<< zBa%>&shVEi4C1;s{y0bpF`=5yeT}h039+l1&W)e36ejMvZ3`2btAE&5QdFs~b4O)_ zG;iuYI(oQRP+hNKp2A1>b><NwL{JUATGCQf-vIOA5y4_|4ZWsoZ}Xn6gj)tg6cb)G z^}4PkM7VD1O1SQ{o#~1wF2>f>Ynzd{a<PQGcXb^zA|$$&UfdXf?yRM!@ia~-LR_n% zXHVx^aNaRDiEP)Sqpet|IDLb`_0HOEVO!SJd8A+*v4nUhBXkaTcGc0-n8|b9H<u{s zRz4A7Vq|RsbNx>z4%ht<*mX}>!g*t7##~aotF4EKBlYxj<_Wp7JxrdEnb>f7>*z{s zxV#tyn@Mn$K$v?WMMQ}Ab%>R#1UH|?DY$M5jd0FrBe<RW5N+{bp*GM<JA=zDM$HRz z-oQE&%gSQHyB=pYrJ<ho!>Sf_T=j<l#f7NHah)B1)`qTAm+M`zIrGUpxbsn&aZbfU zWC7%H#_Y@n_Hotyu&C<+M!B*sRD55b1Xvn<NI<A)QTIavN{AQr^^hEqgFm~uCKrgn zRbVAQ<Q6N#M2`l<O8ZVJMl^O+0oIF#^<7nfg_7dB3`BpBO1yUubj&SKxM<zbh{;n7 zZlVX7xoO_AJFBsI{t<4OA0fMw%4Tr$20p}*^DF&8is(F^`J>zFW$Z0@fZ7r_@CY|k zD9SB7!ehL{dnhUS)BqZ?A{%VTjvUB|mrowtd~oyX%?D>r9zD5h{j&AD=1iYDe(LzE zL;GLt-+pNGtIlVziV~oAtCX3yF4?L#d!ht(Ih)C<eC4HP)4WFN-S+dG*~3c>=rX0^ z5!bfhS`Fm(G@q_hg7j`O%1_r5Ry=5{mrId0uuFT}1SPUopvW4j=Muvs^@=)26MG`{ zvTF9|c6z8)p7;xqy^=?eqftA3joQh~37HG>tgB!;ZX=w>&ogirRecm?0TR)I&oq9A z4<DJd!vW+;!$WTzM?M~3565AoORFetxnF#xXBL->c=|XdchLK)cA0^>P!8o$0TodR zl_8T+71huV?a=`p(FvW=9|JHDlQ9KT@e86b4f0f?A+P}(u_>iuSAJ(^3$|hp_F^Bd z;u@~w25#aOZsQLAf<}Jmc$IMPRl=)F$1m+m*thZ0zT^86UL`C~TJ!6reLu-HBjuW( zWEfY4;4P1w4RF?g1rg2~kW?=+1az6-_@q%6#FI{X7W-#a!`N|Y_{TdM6{>)-HknHD zd4<a4b||HU*U0*{bfqDvL2i}J{%OrL4!^qO$A|YY&Oq@sYH8B>D8VwTEU>~0-Uvi` zWI%C*AQUAKhLVugFCrCXRf?IWXolwa8ZFTZ-(nEH!!L-!G)zY{1ZLn@%*5|-U^BL0 zE4E=j4&WeeApYjXV;2v_9@-Qu&iB!?Scl35K6S}p|F2v#${=l-FEwf->!z3fIO~kP zG8k)<DLG@WS*4tN*^_ei)0{R-z`X`3?q#ZcUIo6~rx=OKY8=!pQJEB12c;B}`E(Pv za2t1oUpL*~Zl#OxfG50=5~+|AxsV&>Q2`ZE36)U=vYV-f>S&J+=!j0}if*uD1V&;O zW@8TKVxEs87IxG9!gjF`i@zV;dn8-vJ=sE+?z{Ks-fX#Msa!*&bgmhhv_=-Nunp2Z z@{KN+Tp4*7Yu&O#1b5fd`@8yd_na5sbWg7BeqIFsRiD0GJZ52kS_zE0GTEqsfp+t1 zqZE;uu^W4^9|v#|akzvRc!^hdgSYqxvcvxu?~svBKNB(|3v9@aLI^=PB2WrV@RgmH zrf80@@eSnFqa|8lFuunS4229o0#TTT=~#;ot?^Lo&0{w&9=f<#w$EtUC@036>xQ`6 z?1z3<yzHU-c_($CB2CW^g_YU86ifBgvwx|h9ajG1s_<!+n?>PX`u~@9XE!eVM#EE# zgSw?LsofQkIkFBh*no}L1bIz%U^C9*9M0oU#NiSi;2|EtgX^{@ypY0|=Qb&sNd<Xf zPYqubL?IML5fnu*%A*1*q6J!_722RJA|VF{?a=`vFj8#kr8l>`TFZY`d?OR?RdVKh zGMQjh^X|s>q#n`O>q*5g?PWB+3~mE0#l6r(>{vbh=e58r-%rckNJC%aXh~^Mij3q; zM`1L6z>ipnMOchoh{bN~#XjtZ97Y}Vwe!6ZW^UsS{=!{6z(eSauPm@48*IpqoXCaT zkYlmD$cHMZifX8iTBwb$@eNvFAil*Q3{J(%_ZWhq;&30midkMp?w+surQ9|0<7;Dk zQhpeFUFM4v$&Yi5z1kStllF4YYr7l{n}y(BUjLUy=HA9`R{m0=l;UzMI}F3qFaVj! z%q+~t9L&c8tiVdF!T}t_AsoR`9D^JXpTJ2x#3MY$6U5^wtPGSr;EC+Wft<*VJbnzc z@-ibw)%j5X)leNZP!n}f7cI~dtuRRJ?x$CC@BI3I==|K<o+#B{&sI69lQjDoqhRV* zcji&D1tZJFy*$M1{>feP%%c1J()Z=dn-V;TQ}_;pF$6;~4D!apjuDuRIhc!i_zm`j zyez>|EW;k`#XcOsK^%g-J2`@*xQlzZj|X^+CwPYENPrJ_GO6JUKcs~}<Q+}`0#Q7z zl2!>}CKM$QjtFsh0Ilc?8C;_F#~Ez2m(8`lR5guaDQ#>|Di&j}oi)F-SDJv#pWI^p zzxR9<jiV){K`9==*_K5)l*iZj1})GEt<eT;5s7vf4m(DqrRN*T%ovP?zzqC~4cLfH za9}gGU@Nv^J1*cN;&2I<aRpxf+;SiVav?YJARqFh01Bdz4=;sL6Se%sk>PrUDmm+Y zTsrRU=F?jyqYReR{j>~3y+L~VkdJQrSJnA6klE@!YEQ{ukBk~n)QBP}_uYF;_YU*3 zR##l+zRWmz(owi0&zUc_Es|eu3*d^4U8u@e`*sBeQ>)X{#PAx;GtjD#i26Z_(hzOX z1!XeQ>tuBF{!TBh@})CBv178HM#K!(>)F%S;vltA2ldeaeb5*E@DnECXH3CV`~sQ4 zX_$@}tj7jygaezg2Yay(S8)y3aTB+2+n>CWXZaWILg!2^u)+i0NP#@ai+rer%BX^B zsE!(_nNA$(qnFC(*YM+-VU+%~2A>wJNHauFpY5a4pIQI2Ky3+RUT42llI~UG|Mk*0 z->BCgjjUYbPo=o547E@jozVqd(G5M(3nMWKqcI0_F%Jvy8x}%VsKr=<J=lwV*pEXv zj4QZ`Yw486${S|h;vf8rcX$t3D^+O7ifphUJ8~g6Dxe}Np(R?Ob$~cBN-t%9-#EFl z8fC2gC=ZO`fziUO$?i3-(WixHHeF+{l*V@Vc1g#^<-xoa`*JZFRp@7<VkMKT|I>xE zc<TU;-<I5nL_5g#-2ojj5~DC0V=xv!U^eDpE;eHewqiSWU?*fB5sTfpf~&ZO>$rv6 z$Uz^HQ+6b|P!8o$0hLf0RUo%lLv^%A2XsUybVWDJ4ipE*=-JxGolg8aanj$3f8UL} zdphy-u)C+@PAf*n^=bOwC6n+~a<$-FW35|ui+XlFedPc8CS_=oFCF%?uJ?a)&HX~_ zFE*P@n1i|4j4jxT?bv~x*o9c^#uZ$}HC)Fn+=efmcpCVjV0x-XA!Z7rD1uQ8vd0fW zC>o$48lf?oq8Wx@D272`27bjX%*GtZtHwOc$9C+%PEdyTDZ|Sr?UxTE9{Bz8fs+SV zwbHptu9@XpGbL%w2wJ`Kd1>pfzm(lZ`@7LRxl-<6taU48qt!O$*}F5^yUmi@t(&p- zv)z(=Jn!DFzi=mM9O`k?j}P^Q5-%<@Y8UokFV5jS{=_ppM*?2pC0;>ZqTk>x?15aP z(<1|dkQrG}0%0hLhG>Mw_zF$Y4DvevHNL^O7=-UI7~f+E#^MM3hz0l!3$YkWGH~Ct zlo>f#SdQoSFW<j#>cak07fwCD{QUlf`<q;ARwS*N`TYJ*GR#Q1=BMYf*EDkMWQ&h; z?0+7GHDV9@f8B7N`{v^)jmp*BSes0F8wt5&RKBFX{0l{Av~#=bDgOWcTCEh9Iky4_ za1e)Z7)Njv7ZHa`c!8IAg*ULj<>ep9vD&|Qhm4HVG9fdvAS<$=5DKFRYM>@+p$_Vz z9^`nh0pysk5n4lz{W_x;o`4TKZk>O1=v6{&LiSCu39;u7ooCfz*Q%M$HNT7>JABaa z{=F4Z<wqU|8CkoxRdNMV%~<=z0y*6B<GnsDkpHSFuDefrGLaj#p^g!GGTXm+B`zrQ zAc%2rMwEse6Gvv^!iz5Gji0d%+i^G(UGNcRj^aGhW~R|X&%ziLzDS1vv_@BS$3P5$ zH7hxQjL3vR7=_Vjo{cL%hF~}*A@OzM>%SlW^_ZTOm&e!t3_P*-&#h~={<(GD^{r7O z*KF<gcP}~dC_KP}^Yr!|EXqyPTZ$zU^{k$O0bTkJoTP~T6ZM?p!4G;(d)tgh8Qa_~ zsqyGApi59c`E<>>#J=YHgC+?iGO){qv`dw|gUFFTkcga|u*{i0khx)IfIMk=lJdml ziA+WeiC<vj!iUs32#=1rsM5pvG%Y$GSG@v?a=IWRe0UWS>Qp^U^xUWWh@SN=yqI&2 zQ{(ht)h_emXH3CVEXG=_Bl;Mm$i*iY$c5Y}fiOg%6gFcEwqb34Zc4BbJFyE#aDkLu z#5G)pr7)QUtq5Ot%U^^6Y*7ZQD9l|}Bcv+MKoKvVJ$6o)Pi~93y!7(3Ia8jEc24$Z z_Gd$$4S3e|S-WR;5jIKxNi-O5DWX+qEn+9=EmON?x-7T`%k{wSN*=F5+|!@{%Ahvd zpgpc5j5PJbR=mS|6d-v8(I1oWGnOJ2yKw;*@dWXZr}9jkD&iR;uKcWLoPNxb(Q)c$ znbUGhezZU@^u|2wLM#sBJqnQl4KWxC5QjTRU5s2uDbzzG+F=TIV;}b8Dz4!#yj7C^ zIj&CA{Z)}>s$NfApQ_vJGK2FXAACX><X{KRAUKp;&XU}6VkTx`NH{GD)(8p+RZ7uC zq81vV8Cqf$HeeIBVi)!ycWDY3xy#U<mf^D4vK#|%?5#kv$37k*KZKQMZN7M0gGYfi z86(#wLofv6uo+trSC@NRyl%irHsqZl?0a-zV9_0!n$f=_Cvu?zX!g$%A6!eklvw;y z;t8hRZqp97{hlaa*C#G^PCHoIkvM}%zKh|r^jflRt<=vjoCxSrw$cw`#3Vhvmams6 z=4%NM?|$MoivXqS(;RrG@+oCxK~yA@hhaaw$>0<yfiMikJj};-$U^u7vLI4Y5VA0e zBLpQ7hNftauh9Z6F%z#Cg!X@^r+2LWMfX$1{9p9EVrP_I$u2i;##U^@4(x<lf{PuB zA`<P<0iDnpvoRO*umHc|Ph3PCF5?Pvg;BC-fmUdZws>n)Ku6p(J-xH`wUD*XB2Gr> zDePHfh)Dd3S(uHvn1@*G!Cvgg0sMt~xQ~Z;guEqbS15o&D2(ptiC*Y~zL<dD;7Sqc zatx2wN2%T9%8Pghl?v{QtSE+1WTNt_RNSv2KeN7q>{Q|$sEc}t#yZ5{81CX8-a{$N zWeb62#kCoH|AV3l6-9rfGalw)$?JGBLr<&P0|`(EO)w5~Fc&BA1o3!{A~cv57=dLt z1@H1)8&MWr&=vC2x+$27eRzW+6)0D9MK_Gbf0a+~EHcCxOvG!1(maPE7Q68Xj}gKr zP)*Sc1Mw{;;wKzJJf7h>{>BRg@v%cDWJXqGt1PconWKl1F=ZC(K90w~=@w^|$tzCI z(~H@&5vUD@!Hy9ah0!>K7kG&RRj3FkjG_oeXLLn3^gvH6!V)aSa;!iC{zf4_zA1vD z_^&LoXOSU_p*VV=7kZ;F`e8Z*W?&{}VFz|07JIN4)@t;2@InftM13?wBQ(KR_!YBY zq{?w|nx5g)cGW$L3@{sWF%N&?9`55I9zk}qL5RT(Sm<tZq8z@#D6GUny5JLd1V5g) zm%|7gz_Qx1%m#_!XFc+YK8y8?qUd6J9A13H>W$Wna@`dBGCJ$Ms7`0Sr=FsWr?W2E zhz_qYr_+Q}`-+&Gk?H8$oLclXh4~E^g%&iNR)lX&Lu$imN7CPP;NfQ{T7738qM%_H z3cM?|ts6D3JB_pl*Xmwo_9*h7!@fixsoG`tUlA*aeFHXP7oOq`-onaJy^#Vrkqe<H zfe4gBEGasUL!|03uH!Lc+S0RP5UCsu(T)^jHs-cdaw-3`mm`|nakrfgZ(p|k@Z7`C zrapV|Y|OJk&$>Np^{kaxuuo4f9xT(lcyM`H-Q%LXyrkpH6_#|O&jt?<&mA0y`#F() zmYzv;^Rtu@WoGF`#E9j(muR$HPiI$b@-SZHQq_)(aIgj2aRc{Jlw1o&351~%Ian37 zP#@8li-lMXjoh^&1$<Ei#Sn(l*h0>4$8)^3^YR|v6h$~iQ2|v@4{;RBP5gzYQg3!Z z**+uyG1!KGp!X%?umo$d1(E$|pYb=D&c&Z*+Q;NzT9Gt4;&aFq#x%$EK81H#4a|R{ z$4dQ2Vc(!z#q4GD#Lm1swM-9c7bYuCBq=J_pG(RBvIZFka#h8tL3GOBkxCRA%&DW@ z5H7027zD!GP8N-z8^Z=%#H~>j!B{T3Kk#|lIG!9hB3J42RJ%Nr?pT182;z7-(Fot5 zHM-ysj^ZTFB82pWA{-IugYRL-IBdjbY{5?K#X%gxF)ZUe)(>Rpb(NXBaC}QYj*6UI zb!>nGS8x}P@B&LX>7_V~<9G(6D2(FxxIoMjSP?%beu{HC9Y5Nw48-<-sjlrd&|UOe ztB-Y-g{<!lzu)8>PKjMBX$7)etgQW`x@dUOn$8|95BdVHkO-9$@IWyXM_&ww$M+1D z5rI;8hIjam(i)41p{z$^G(iV+L>F|0FQu6V`B4C+P<j{@xC}F85sih|iCs8^!#IJH z$UK~#Q4kR*hlF@JJ&eDO^SoY<-@kd$=KVAG^ZtYL{d)W;=QJ>WV7$m0qv!C->wF~V zXd_z3=(gwu9vQ{X3A(rF7^4S?Ju!M2k$EDWL$0-Ypd52L2c@ntryQI%8R)@1s2qXT zuVvv2jTWUfipa#&K~sE#mWV_rbjM}f#!DpP0`>YLo+AM|_1XeYc)=g(?7WmjISjye z_#Sfo7)-)W?7|@&#wnb}DjLZKY{C|7!ycT)pXfuwF>+7lUqXD`@hxlP7RNC^BYvWD zdKjPbA&bL}NyPlCXAwm<aGyiJSwzf_A<yn?AkX5~=~cvt2#c4@-XMD+8S@Ct!z!%7 zcEsWj_>QM6u>ec)-2|F4wjmb7Cvs+p!C@T5E!@Muu>M5W;NoP~;~t*kIo?htFB6%u zPN7{R6dlnYH>NV^L*ZYjdFYG*n2K4rg(uLWxD`WsWI_RyKy`eDwb+WC*n<Mo*p8)$ zY0Jy+*o{*-jqKBD0x<LYUi_u_drW`0rv34o<EgR#i|O9lcrn$X`-}AsJv0p;0YoSV zT-7nSRyXlry<R}|5I!4pTkEPaUw0#zJnIjcpYO4Xy!&es_ar|v>Lja5k~Ia$mX?rN zB(uXzb){&=2{?%dNDx%v8T4WzauY>=bt5B^dgo|DJvTAOVnt(Ji-jIM6mhNd5!p8B zH|#P8zJ-kE4cZV-Cv-tC^v7Ua#a%qa--wvW9Wh#<2S#8jPT&tTpG^@X{Tx1H#UiZ5 zuzB2_;4WUyQ<^ESn0XD`d@==t7towA9ZTW6kamXv$Zq&t(sU^PQ2e&|HSr6WjL!Fm z_`&f~k9d({i~dBkcF^t0zST}2@mt&G$@CEgWXApVt8oJ3XVGL~CE>O4hIFMOO+!h? zF(|)Lf6)Swi&zKG#az)b8hhcrgn=5SEaegHGM>0Drx$m0+^Ww~?eZKlA{%m{B&whq zn&4}6M+M@oh;PsWEzt_C(Hng*1d|cNv9{tREF7~OYU2jSzKK_OjW^2_U3t4qG}^BJ zP|2+GH{;{tPsSaMi{DMoZgfs@@o_8T;urr96C=JIdbp^tMNgN8et259{gjZi3y*0l z8r;{jix-<+*ENx9iyl<GqRfY^$cAF5ftsj=+GvPoXpN5GDZ@_vq*f$SXuI@xKD}5q z07LMD+*H7^W}jX{6|v_TlV97ZXHKF2z_uR|#DmNNo_EO04i6$7rS|9tRByR{8id1p zpPpaSa<v!gD@%Z*<^lb_u1)OVS~{XTba8gOUPD;^&=c#wefj@BJ%9Q9<(-#TUS2tS zMJ(|02oT!?EV;$;GkP|0)oSrdmBP4iwXUTp4Wduz#kJ=hU5PnCVxrHoCVOYsnzJ&o z4Z66NF36>YU0q9;^_3RwWjAp(t)-~QeM7$_693SHh2@?;rG`=7cP=o+AB{g4zx9)8 zb^QGJD5i<=BPI@=7*9<%{(W4u?Rv_hT_%Sw=fB=*4A<NGGF*2KD}O$t2dPD)Z|Z+* zQ@cA;;mCbUKdEYkdbpPE$fbkElE{5mzqI6mu8Ar47?@ff>FcVSwesU;e$Ls<WkdgX zl0)G+Owk{bYb08<d92%IBEJbrVT`eS@4M<^M%E6m7N1N%5WeIIX<7G3&mb&M^`W_* z+&F&Y$=)Zs)-x?;n!z-2*Kp_5cURwC-P-SJDH5ORC&V~zMT{GkYdt@?VbPRaOP&+$ z(5L)1$MRb5kXt^HOT1+~m%EU7Ht~33Y~tGAejc;-`?ZNZ6WcXQl&2t0zt#t8EqjR? zZ}i3D_*1>8musw(eaYXtWyxFJBVFd3G#}V80s&O_Xw5PsR6a+({_G6X^=Ai|wme(2 z@Y#%K)1Ljv^gYuw*F<8S5B3Vy-6)<e<GcfPON_XoThfbtx+Nn;ZS@jEw^+Rb(*<;~ zS9<8mw4ODxSo)*DB8w)bX%?HXSS;Ja65|u&?=Z>t#2e1nvz(ut4mzhBiCdXg^Qdv= z;^@VR;}h?UzcXGG^5sYs?(3<wi@ihxtL10W#G3^Cqwzwm@>Ii?cv!Sl*%P=CK@miI zSvFRB`S^a^nFD9;pSi!~e%$&sO!pVuf4P9^{v76*zdwcl?vJ}aY~0{+_c_y#t8&xc zMlV&u+mg*lg!6PKcw6#`t=^WZ;>u&)JKAc=?OpWE8-~<~PGPwaW(>=WiYf<aR~d_) zJ}Cb)-{svJE1V7N_xPppGnqtSN=vM0``E)vHu;nRsk8R}yb3zrrL<_8*SET=3_)~i z%erv#@g~#N#Pf+q&mTO`3|Y7^F`8-NcqZ1LABDsLY~>^~IlJHneMAah%PLXNO6i>U zwd9bEVZqQ@qQXCxOlo1VDm6cOu%xj}3rl>F_&D+A<ExJo`C<i?@p$6)wX@c4pSqp7 zG0th2b8SCoy_6M3{u58qSibSB)%WAt9w}D(S_-D)6QN;YRa~d%dM+&9`B|=N2m3nc zn{ue>cKfQzar}Xsc#Y_EmJ3OjrG)sq@prG@<>GYQHFr4vF!RTGJsiKC^=sv{crC+X zV=@v((uxFF)`_bQ3x7Q)z!IpI`aRH+QB|9WD`_pa9PiRwGOOwh*Fq2rTCe`HbGqqx zmq{-DV=iTpOXCK(wq=t`0Rvr2+2zu2=2A|%RP<Zdw%l@QySbECF4Y|5+Lm7~oi~>X z%BA+-xwaLSOHa+EqH<~2VAr-{R0~T&R`Mv+axBE`ByUsu{!E(AFn1t+50mkXKz5Ag z^ppHtPs|Uuc#G<f86TD^VOb=u-uEDjN{~e%zlT{e>e`Rri_8(0Wu7U%|F~F##QO-# z9c}awnVL}1puA;`i1oK*5p!ZZQaIvETh6JTmLbMIlgnB%iSXW*Ajf;=R4vU==S~iG zI-+WG%%zHQslYJTw#stJVJ=mbOI3!uwpEu)r_H6Ba;df5wXL>XdT1`ywQSV2??%XT zXz6Iz(6ZT6dojWl@@pA#)JWG-3%TSw%C*!=F3mQV+E^NRX!%DQvApYONox@qx>*X@ zn>13D?f4t-U~Q}_DdB@O2tY<uL0vRLb6m#_yv09A$zS|S1z)6rABv(BHi7o|An~un zbB8vrI5+=XVw7w0GiJ^mvdh&g68j}Of3<YBo5iN)6m7a&a*3esma5v4(V}g4O9yei zsU=7}?rurjE?=t#s?rBRq*|UuOLRat48RCXz!c2FI+$lF&r+VzL=5H+3{F56{sLls zG{r=`6~%gTury1#)0onU$Jz5YS}V$zP;uoY4@!f3T29&Jsl{Rsj^Pw;!|N+m@kcHc z!6E#CM|g=u{EI*ioE{lu0+1EiQ37_1z%Ilh4wvu{j}YHfZJ|76CNrs(sn3aAh(IZn zhS{j(?Zr*HnLWpM9%p82{PNl3hA$tmJie#weL5(9#!$Cs4aL$619>_b*UM7IGt1bI z8$cs%{utu|v%0sXm@z)OO1rS<l}9UsdXV|}90{1zTvdL-Z&;5F*o6H!h(kCH^=nm0 zfvhNq%BYXGcn{xiR3#g1$bsSrMLG2Pri-c!VrC*{U>&yO49+44e?+t}zQ#=4guSK8 zH#{CC+)22QaCG-kr;Q0q=Wk4iN{HGmB^Zm76GkNr>XShKZ%=hjWX|H5RfIL;>K+?F zPm{i{<y=9fkgPF3VT$Xl6L~MsS=n7@CeKQq(RU(Cm}iifeTo~_`u!|Rwb^53do3;s z^tYUklp#8yH`e13dXap2TJn_S>0E+5js6&jage7p2XnC*TX7uMAWyX@r`koHu2HAu zcL<`l@rb{IC#O*;hP3b@mX8=d(Bk8WA7JrQyUWnsFbvCZ6&d&otU)M+GAN60@g3IU zA>JX7za5$%{V@QOFd5s?y)F5K8j<uX?Nmi?uZo6UE%n9xm!xNYqMkQ;Fr()A-_axY z8EnZbKWB4(_~|LG{i~-CCx4_(-uqY2V3);r9ho?yLd@S{9_B;-S<l6Y!Fqhl5eH!e zMq(64AB`LM3;v`e1GeK35}>wMl@|Q1+)n6>UKj*B?sin|$`fYPPO9RKv<O6c<VFF^ z#u4ge-mdfk2u2A+pe(N926lI&??B!js`BRflUq-&B~5=kF{cwxb~A01(+XY|J}Dgi zL{2|FIq}3CBAD-K1G?nwQ_nR};iu3oy+(?lv6fk~_Y9QRM=x<=kR?-%P%>ZH*+Er` zk<w$NbiGU&DY=8E_?i^WMb=()CJ5?7?}Qn+gO^C`ql#x96kyq&)FAm;XwsaI;8Rf_ z`RS35nB9Sw%lW8jQ{+RO9q0AQ;=}<<R&ikgw^_?#Jc8_gG6V9VA}XN~8lx$iVOCF7 zS%B5}9oKLVDM?yp1fv*AAPlpx1WU0F>#+mHNOm|HqB%OCyS$XlWo8~WViSIc1OI~C zroB(LJlV9&H7(k-Xw&>nQA|HD4c^puQ{OIqH<?8s-^JDdGUL`bOFj8)+)ET2&xo9% zzn>UZmQh@xH+n{`G+#X!Z)s^)@{o_t<D}@zALd1NM4&mo#W;+2kAB4ej|)1tS|aAW zK0=)O-6O5%xAFnQ<{!k#36?u{#Y>*POqNVeDVYpR!*6il8J;6=Kl%k^8$i#DvjeFn zc!Rg_{Z>`-VALSuz-#=Abl=g6(GLT$2AgmaaduwH4OW$^_!^NIf$^Ax#n_DV_zMs4 z5FNi)l^&RdMerD+DycCWbMPL@P+BlFe2eFIuU|g*$rO6%@;2AxxV+*r=JU2<KAh99 zm*wPM7R-wo^DNcmy-ALNr;HnQszLgksf-6AVO}F!d5tu`St7q_Hd;yLYOZ3zBujDs z2xn=Nr81l6V?ke$b&4fSwwtZaGV)Re$U>^|qjR(;8cemU&1P9ZNV8B*GA|1y0jVgI zJpE)0iQ2gjd#o#!hYe<_wP1cM7ULA2Abo#Y653)omf`@O_Lq^h5`BKLw1}ExN#mZR zcH>-0in6RL`INxV;6-)F3bSg|W4;T<Vl|H7Iee)mB?qb^GMd}fHq$K2wRkhSsmAc! zzl;w7lqML8VHl5S%*O((!CLG>EdIb5P#<N)D`dnzB->A1D`l~2L&qoOq4Ng7zf@|o z=E_?84^mTW&DtBzd|Uj0A2A;X@Bn`s-x=#c{PGWk<Q0>Drn5`tg`=l3j_y6-lcS6G zGc1AOJ~Fz8xJ3i;r#`oF)!TWzZ^IK;{grih6<#1@m@10iwvuzRE!(tcGv-;Ab#__3 z2V*!!V#9En4Nl`cZsIP2>|B>o6u~Hl;`kP$@h`kasEWWUM2}LHm8dp`J{n^%3#+gi z-N&j*-?3aR$1yVr@8R(SH34}Li7r@(rC5n|*opnPg?mVZ@*|gNWJ4n~Mi+ENcl5w| z>_X*n3`OxZz8S~GttB&kaTkd=H=cRO5wiUJQ$8_{I~^B)<fCavy!*5+-k3fMNt>s& z_Zd{wXzhD9@Ra9joFzomUno2Md6uBis+5k>7mKhMPf&;~?}j;82!FD-HF{&9T@|~h z@MTrLm*FFJHesk%=2ss3@BCHwln;j=f4G1a%cXSgAU`BjQn6Q3VNGQISFFYw9K!=7 z5_7f#9xX+m)_l9;RItTY##c|a;`Cb1iSn^)DN%Q^WkXs*CKY*FirasL$hyoDHvJTz z!LZ9rXTuk%4_iG|=WYR_;8M%Eto{T|hy19F_UM42h;~NtQVagc`FL0EaJIB(G+WF% zb%Obq2pY*a0PQgWt8f-CkeNDH4xL8H1kn?%u(TjmDO?F!YVpuEnFm;DIaj(9VLQW) z=`ic<e&(;?9deE4t`OZY0qbyTv??k-u(lNIqAe}Nsdbi=o_vzty+f%<NvS_09<8>d zD@{n{C0;?N=BGhMWI{gVM+8ct3aY}@YGki8N3`i83nS?WyFNWaPT9VCqYp;IY-_Te zt--4?uCz{>Z|y06vuGr>%Fpge-D^pgjeyE)+@&qXqYmw5CRQTmNBWRs)=Z-904ujB zSxM9I%T&ExmyKFdC8^f=iz^{?{l1&%Ll1vA#@T$H#F5kv4>KQ!=SYAbO|K{_jr)%} zSZ}gS@?8=8%4+rZCTLP~{)YJ$<C3j}vdnKgccd0>qZYOxtl8>+W_~?3;28dL#_>`c zG{u!U+bm}bdj7>0vwz4&-%t}hF$2FM1_y9<d{V8;>ud}B-w;CGs$Pnzu2^?j&XqdL z4rXVgO`w{gE_!1Iw&E6U<8P=F8Id6M#H53KTD9kx@ssLYsZ$f!7dep&xe<m2Xo!vz zldTuQza*VHRhW8Vm))VcbA49?op>LHpD`IBKT(Cz5Y2G{7x5hbB772s1v^G#EXHFZ zrXmUgvoIgKuonj=agjK}%yFE-dBougZsG~vpy1DRo2ZCNsDi4Pf;kAEOajmdjqw$_ z;W<2~kk$Ab`KEG*js|FmyHn}wo-^b93!N82Q647{hxbuzn?|`H19+rmO!pFv=@MT^ zPHsArc;?8Nq|oMG#<!B4uX6Or<wLYT%4K8O89lf7_mHJnNV3DlT9l?@7K$v8DOip@ z_)$dKJZ8zBxr$qD-20)R&)Pg>xV>0UVeLe2@@x>sWAe}Ljlb+MdVtlPcp3f!FH?qE zYtXCYkR3o?@&1@KKx-P6RE22v?448!tC&B4ySN7raz7VJPX3Q(f8QCM>(WEWq_ULd z*kp3Dtv)4}o@uUBaOug>grH`TPiB58c3>y|#4~3!t;CeumLAUEb;~;*ky>^hFU@#P zTh8TwMp(1T6rsAb#29SAMjXQp+!TIGEG0$TotBN-km;_3T(q1ExXDJduBD|~`6I8$ zvdmJ&yn2pzD<dV^wd*-{%}Y?TddjNV4Wque>sYs4i;g1bXnaqFtxSdOgGD%wBUIY6 zcqn*4F@rEOoTZ&lILE7PFYw5PBF`u$US{~}?C*bx@dy;RFIa;4!`?}GeAb>)R{wce zibPnabG<_l3J`l?yudpIbEIOZ2L9H*QWLfC3+AEwuMAi)8e{MSW?>KZB6=nR7}#eM z9@FR2PM6H31aKT>=JC`5ozNMVa2pNhGx9@6^g@FLj0Vx>H&tnev<ta7qaNy`13IEJ zx?tua#%b7uBY1}A$ZcOt7l_@s0Lv0`0J#u`-<FbktXod*yiR<`bk+Gu*ZJe;6Zt`C zGSimC4-=nyB@<3|5Myiam$!-H`=Zt~a(LNUK3GT<UXy}UCSoegY+cEG94_G%UL%m~ zEQx05_N((|D3i$2kFnhR*<9j3fAJBgysVzGnx@w#J8OXRnrsoVcdh>ZKE#n!e6r}q z{+fIf_3%_@xT+7=<-oB7HA`8R@MXMk?ppcNrs4C^u4i*vUl8^sQc)wq5rIzV3_GUJ zG%lLSH1FEKy3%l;G)yO~S+nApzl7J$eLqWs>>93``*Oi8WqnQHH%K{)c8dIHie?yt zu~?4{IEe@Fpz3B8ep~4)7^^PQ`p!(sk+Wq|XJ%_S>YxjT!>sVJ%s+z998MQ4@FSMv z{2U&iYSylz&(Az&`Y?FpVW0dGh#UtQ!_x>tDt{sY7FvxBA*he`uwxpgL$)s2vR)y# z$iBx?z=)p_Dqj%)nX2;PNaE8Y<;YFj%LCaa8>0ziyX=BV*gh}WBJ!gnpZ%ePa&9N+ z4rHV0=7$$evIb^gIo2-x<XV;S^J|r#+qG(kTjY7!Sy_jjI0{eNbuQVqQ5iqt*G2zv zscJAssNU9x=@f5*C3O`WnBTZ4*+y{M;;FKavrv4jXERzh64vZmWVe!ll=LRKMD|mb zhGs+f&UKB*Nkf?Hw!23zg64+oh&mw((-52N?y?T2n)hM<^d7N<H9Iibd3hk`5}EX5 z8^Aobol9GD64>nR8Z+MnBQXkVu?|;o6>s2AZ&(DCml{R?`Q4gYJo*(6rwfubWl~or zXlwMvPgnr6Q@zE!?=mhcXo=xiiDP)P?9<lZ;k;SfZ^rGqRU;f<7~{iDI_TV}fJW$v z5txOwkRAAL+{HaqSV8<Vt)oSsRa`4Sw1MUel5*BKg5BJ+;tEE|c#eP2V<m$vjKU<; zUBz_?bFmzkaRtwjfERd)e5)CYq5|roz#0a^2t!p=Lv_?Zt2K<Iw=uIFr{#*ZWG4pV zAPyl8U&YXE;aeQU?)7|@vw`PCn1FSNf%it9{~|kPV;c@2#U=*BSb`OJ^Wx2md(O#z z>BWf`2VNZ5ap1+K7fWXHpYz3-bz5PqJwf0Tats`3JRhyhpKPsP%Y$z_dpQ4mtCBhC zxvBdmo}tP=?y96Vwwim$k21xs0LH21i&~qAZN06jvX!Ca6tgUPF+Tz$u^eYs$V&NA zduW!TpY>eMGi*4Ea0;mkrcnszT?G+g6o%VvvUAw<*+|*F_Zj|MQWZH@(7hyE64?xF z!B$+rYh<9{DCMN*G<lPr)08!?$9@ZC4^&3f53#QEPvKr6jLMK~FC_bcrR?bJh9azI z(_7qXjWU5_{)TO9zSIw>rNlFfHGlM7tFNdVVqKrj>R!<lDpfFwp$1y5b>^&k+-;`_ z>xMx03b~YU%W%*c_Orexf~&&f59uv!b+5p0*zYY0u4BlF)@Xw%n2KMp5eIR9olMJT z4~j~E9DkYA_X+z78E6o>Q626L<yV$vV|joe8cbRA#MJf9@l+-G7{_^$biW+`uq5de zTwM^so$YN8?>F!SKD4z=D2<xv3itNtYK!t|(P-l^Jm|?_Jmd*l`pFS;xVPGpwAOIc zLT&WJ?2Sf-d@@q1NQQif>uj)>Z1HoT(!xD(7TtfR8$%rj-59PS9xolAT$3w)d`-^d zc0De?%$4G@)^m2*eQd=(6eHpiD2dW&j&_)b<=BXwxQ3f(%7NP=3e&J0E3gWy@d}pB zWa$<zRA`6x=!ox;eJlNC*j5g<jmrS|zj!DK@Yqhri>4TirSRH8v7-dS5WADd)Hr~n zxQR!2j#r3`<$!3on}HkV!}Z-a`Te(>iRTgzCB_y>jCI5&uKO@8Vs;UeTy@AbiA3T0 zvYIH@+nPD;=e;F=+rXM$#K+P16>DMb5nPJ$NILzrWI+{l#W;+|Qrtxt*-&H4ht7tJ zn|vtDQ>{WqXY&Vz<!vn`8eFn26W1nrr0`Ek_@peA+1X)>tWTdk8kRjym*uXa?rc4q z&C-FuX5KGm{s@jD5w@+)9z*-bZI6PUHVTJQau!lY-X~!@?%*$^rLZDUYFknpPxi6g z&nsN%7-&70wG=zJm-uRy*WehQJ0p6jWncLr;dwouv*k<mVi|SgPk8PylF;CtWw2}L zCUan;TSWfeo>UyOBFRcL&bd>vSyz44hZJP9j3e-P%*SRN#t{Tk)5`BOvM$bTk5JF@ zY^i`J2%+vpV+pi9e7c7zSdOc>iQ{`+&ji{o;gOH?8L;y)(1*F<@~KeUTE+t*ANj<9 zhXtC4x40H;$t<qjwx%$i4fS08A?5Z|vfeMiRoulrJVz>y>4Sm@MG2IL*Iu3|pb~1K z4w|4TS|So%P<J2QGn%0dBGDO}unn;|xX;dbZa)JW9L5pE;S#Rm8XN}*jNLej+jx!A z2jxxtL#D*nSDE5oAOC2IeI5In?>YarcFfw>gPfD=Y2H@r64z(C^=paollZ^JCH(+Y zSJo)v#(a-#qRax1@}lZ^YaelCgT*WK>rCG$MJNL0HOZdN(SJHbTRB4Nk>V(KkjRN# zD25tGo!`Ew<oeD<R?m#0WmXErd}N<T8@5Ik1H*)=*0u7sy|6u{Jf)hbMdVHJ7O4-@ zPoXoqpeI&h4Qw1d7kXnfHsN<1#W9?~Nw_6SIeLt3=zW4`P#A(JOglkYL^HDzU!9~t zu>(7C20xspJzyRV|3O*d3Ra&XF-U!uih=B?fkjx1-S9rgEffl(5ccE4$9u-_YmVoS zKfdocpX$XhIX~NT&cwtoXVF;4%*>dXJEn;)^Q_qmyNyGA1G)?-<?Sj}KE?mf9(d41 ztMUD~uXu9fUKu|8jIR{Mr^Mho@{wE3F&$>^JzzfkINzkgF=QaqT7q1aqX37z2PrHc z_a1llHR+Vp?)g29kke1dULo18#ec1<fks)+=Cw>GuvspTn9oC5nB~)l`Jb`lWU`&x z61Rv-db<~9%2N!G&;fIB3a{}7B`M%$kOltZX(M8uqIPxbH6zx!rO@X`0-81B7V|l% z70u8b{Sl4Be<Yj2V{Q=@^>(jTDXCIbF~C*5*7AM@*C4B!?^z>4?pQ<3PkM5?C9zG6 zD~XG(=K_7%!M$$QWO<P@g3rdaD);l|t}_3v?)CTq`#nSoS3NGwdmm?gPWJ4^u6N5O zZ&~RN;0hApbDn1?u%R}3BkFu|5%ItLd{)JpUj(nVSVXX}ZnrBR#g>&l&6uK?&-Euy zW>5e{Q3G{R56#dVtuPSdu@-yr4rwni0*#|q;K^maQG)0z+zMe8)<CsiWe^4%a-;M$ zE@tSC9vF#H7=y7mf<LkM2AvY(@B|fa($C-?{z0x=e5nE5pxmZ^e{nzY)_wVt134XY zy(jLnB{~u}Fzs?qD-&1#w$klmoLPx4__A_FAHKiyzI!WIuOPNLEO|1?e%!n-?O7u= zKPyRXkq>a^*8Do@$3^Kyz&vaEtZqM&O6LAotRYOW{A52|=J+(cCHGd5dwVZ2-X_<^ zkyF2;BPSjsPyX6RSMVj=jX1B-EuZsLzs?D34zcB|)#m(?yGWSLP*Hw>tFHW{=u0Xo zh)6jMGgq%OpXWNoj8<rkp-{=;wb+A~!mpo4o@AaRJD)B)A14>p%55|TlfHMY`_iV8 zyO{-cf%%ILzfh~LY6l4AyiMIj%eu%0vow7u!PKa5Q&!^7T9zDc)!yXVcenLimI{P5 zYrt^kmtq<2BKZ%@PMNzuW}GO4nH4816{a5QBP$hW!fly^m)cjqyN<V?dl^}yG<cvB zx}gX9;3urXfIHl2!~ZUwI$EJMV(xJtggrQnx6tpC@5qlcIE(vufJb<Y=m%Ueary!G zGJi007x(Z04^iSFV=0WlNyOm+{>BTu!;nXe2XQ8zgWwwCZ(qMCF&(>p==!$nYn;=P z>r3V=Vaa%(JjNM720C=zTaJI6|AcRVN0{*_rt(2+V{!JNwP1vjE$LxS{aT(%12hB= zb6WG(J0C4`f?Gx@WRiw{cfMHIac1Vr!tO^{GjmTc{~UiK^Iwb)MfP&mDuSW;EcYJV z@uBRBwjo$syg*~hqYFAv28GDuDmaeRWM@_sf8cCrceLAP3`ec!f>^6mLS@uMeSCwL z!XD@mBpaZQD1X8_Q|r1}wt^BO%}MLi02!hM+M*+RV}O`)$|FRaI_2T~y3dc!G<zxh z#JYQjXYA~Hl$=Gza5=qVk^A()cNl?*_^&v=-SSBsnG}oM=O-LRCaOeXgkpeb@SHDR zJ3kpLf7ZHI`{&c0^D9;v(5z?mm~Rg|WSyIf?Ktu9!(HZQUp*SJ_0zjdZ^9?l*L%$0 zf0+CiAp^I`uhHdpKA7SrbzRo`1eO*2J#19!8mNg#eE-P!F62V@ovv8d<@uhCW-Hjl z{0(?MCJRskbrAVD>AQ~^#hk0wVf^o%pLMhPi>GNV{>JgIS=R+d60{u#U<#&Uk#pC| z@>`tCou%n%e2a6(rxDz+u1mX!9TsB;P9o&VCui>3xt4g=<D;W<_8}opNHn_9gpcDQ zo<5~7c}`BC4R+u%&L?nL|C_peo7!0RHXi`<^+7Hb`FLUR!yI1%x@}F(hvq58@!QtS zBL2Oe#>4qF)IUE@!&-YP*?-)@13bob4mKAd9557ND2Z<9jTktv8C$Und$1S#@dOFT z{Wl#VN}~+Qp*+Um7i4@vm=|{LkeI24T{we1FUbic!t#oH5Uj#F#9;AjZjP}W{C};L zHCT(Yh{HA9#E3VHJ@5j?4{VH|A0Oo>$i}ocesBJ*d*e4GO>5&<CQWnW=f+QS`)x1( zLvL%i{PUFj@egr1&Qe0ZkampmMZ)YCtp$xA+0?mc4GIgVoRsbuiqSAnc_#BKu?w-d z3J=aW2yaE?K0S}9|2;onYWtV`o|1=0Zmq-4q>Jzg|5P%Zk!=j+m=As-yW3=M8y>Nv zd0oyDOjt9Q+cQ5JW3UsSUt8sOHFml7=F(a~hLUA-7B7&6a;b=J=#J@##_pFgHO^<Z z$v)S4X-2w>C)z1?vxiyI51D@i|5snUd<=<orHIQ%QGaSdI{b#;F_Y5Xf{m24-&^iE zP!J&qd+Y4~UEh>*j<K8{0Wim1xEyWKUFJ2uNO3io-xZ#GZcQiNU-t;ml-;gla>cOA zTJ#Euc;`A!VdAfaIv9%|FblIW7xQofPmt*!ng~wdPdr5RL~ayu3vZF*U($<k)InX; z$AW(uFKlM!%{u}@e^1kZFVf%z{1lD<cecj=kXloY;26&10v_WH>ZqF191}1R^RWO6 zu?X=<glsPI2cDPXFQ2&_zyEgp&V2DZ<>Xkk==LHO`MtiJZaaUqFMqio<qEq~#9H~L zg7eqRwinh=pO3yCCDelqYWdhFn<#b0!&kIvX7TiN{kB|Od11|1ycFfdpAqKcFT~+G z%sfnBUgl$d6hLFRek{cgkTQzWw{@RN9nFD_eE&Z!h|^xyBHCC=Up`D_{2L>#{^^lj z#9y)aWs=8ShdnUM^BnW%|KaO<^R4xhZuUDFkNkc1BsE0mhYJ4bJqVgq1*{ai2dX80 zvFiU~#vn&d)d*`=n~}^f#WLK)=S^9TveWPV(3Z2xVD7c8o~wop;(h+VG6^rW+2#%m zlXJ{Bs-Ls=9cTU;uER<#%!)Gaj7I;-=M(b4+4m)#`PrggWe8jrPm#`5Wj&~pzOW%D za-k5_k8j8pImV^yi;pw;lAH6JZq5grT<|oHue2rR;b^TT#t_S&xQ8b&E4G)WDg5;f zr3QMSCnjP)lI?-jg5uc>YoK^q$s@O@o6;jjKAp>wIhEYu1`_Z$-XoQ+DL(wUg^#O& z@!|Gv8I9``IT;IIM)tQ;@E`V0&E7eoSu`a*o?4mr(3FCnno<evylCGTiAgwvD=6lz zDP^%A$8ZX#;hj=bQX&n~A~z~v946p>N;?NirSbo<)RYnU4U2FESCN3f@e;2P?xXQP zOVpJAkGH#ki=ulJK0Yk4frSbxg58~n9oXI7k79TCVqtfT-Q9)Q@z~v6U^jN6yuY(E zyX--{_rCY@`Csw7Q)eg6Iddj<=A0&&2o+1P11}Mc`3VimHtffJI9-U_pTB$@^*HJV ze;1=t9*GivJEJy5ZCbf0N}cEkJ<;i+q`kLsa0#gtvA>fOKx8ZSXsbYfdrZa@9K(IM zP)$UdHEzws1%>my{(8st+!@b!wV;Jij)*T!e>+UaUPK@PiIEUN*osJZZLYJHxK|NB zz&PJ*dge6ewDAe)NJ=k~GY|6OII^2;bNOr-bV6U5#KvoB80$#%mh|^TFT6#5v;K_) zCu6>mo3Tm({6n&fY;YSVJ+vhEC#g%K0xDxeJh5-pQimlo&NeKu&n2GmT8<4&{esD) z^$nyYJ@X*|_O!1;f8zuO^?iQcw4dU_(X(a}j-IwFjxkT&s~HNM(o0Pr<NGv(wB?oo zbSJ=`YZlSJn7Q!C{yy=ns#a2-;;Xh(mNZ66N?)T_a>6)r*m?Rd;050!Jp=8J-Z(#= z+3d7q4p&pV6Vj0{Gm;mppep7e?xHd>=KI%jh+xjy`5MC_OMk>Cv`a*mhvKPa1@XXG zT<1M5Bh>dh*!6vkhteq?gjQUT0u|5*jqw6G6YGiVeKux0tR}Hg`&X(arj{OzPfCnp zHP&D)wqZMX;#U!8FF`nk(}+aLWCq$oAs3(uYM>^1VF1!5Hz?^b9W${EtCCYlY^P@* ze!@M4fkqt&hz!VtVkm*~sEA+;$84yWi+Q*QcJb#?;ZfJZFNH^)jyiHWYS&gOW!cEc zCAL3%l>?$19u+=5+(pzikSs|YZ@x!mG*Tags3oROCSwglv2)rR??*BjQ&e=^z2J_8 zy|~Cv{3^LH0V>8NAtH#dy{PA9PzGTzMC7$akhgpoN~vl;x7mJk6Cbt{N!u?uG3S*R zGaJhp*4Ps;i}6|+kq#ma-oiN@8WHE=@F!ZUVKzz;MT2kz*Kij<)JtEuTep9fYl4^x zdnac#_HxNACW}~oiAelL0w0Ph<U}>J@KIAAH*#7Y$6G|Z&c&SLa2we^D>0jve6<sL zAq0_dOG(LqXQ=8&d4sdKij=9zK}d%TSd5ieg*C{MhR8>5<V7izMmdy69V;L8(EyDw z4pT4{({Tq8c!<XcN^4L$qYJuWJ{Dmymf|>0BS$(Giaf}NcX$t%^c){?3D;28lEJ{c zrH}49{%$@x<Memp(Fw=Uo=4i>#z*$Q6Z9>4q%Iw2^c8QEW>0g$c4_FEt=4h1)d}}B zYTy2x7Tan<y(+F27w0hgd6jBGq}n682mL*LY$brdy>PR?xpj`;A<pY%0ykRI5YCY> zOX%N?J-C9m+B`lRj@iG#d0Ym@I+8FO$yXh{pkfZLr_@WaI8NlMTyQM<YFaZP9ht!B zOQIq--lB@1UV>e)e}!ddVXPy&44{85)?)*brsC=Z$y4jgkA0ZFs4x4y`?cHzQc~a% z3X=tDAO%V6MshyE7t|*yrz24Y?Kl_f7jk|Vx1BGh<hbLZ-5{~OBXP^V9C58DazcD~ zXEG>0=!=0^j~xibZrs9SJjDlCGV?u@M+G!RGqgZUEX5{l&BAdS)3Z{7V@-DEhe*WB zVX!J&au}2oNSBj5i-u^0)(AppbVJcx#5ryv0uS*N=G+Fw3*OM)o4j`Bn(YdXUr;00 zE?FBn*XeI!<is<Gv_@Lb2&&&S@@k7|Mql;8Z7RLUHqJOuyS=e&oY5zH{zODgf4H&9 z(I~|xjl(=FfqgUIs+T6a7EqgwH&!>axTKXd)u$M@sV^q+!otQ0#=6BsY=q(vE+8Bc zh(<?ZXbk3J9#&yBHe*W`gPQKEYd^KwWbxMJL}O{gCzfD4eVAgrDwdEu8-W~AeV6{P zNJ?~jp+BZ#8pf!#CL62snl$yrESzlYZy0mgF{^7OL<oCAou&T+Qe<PR(FS9&5m)dP zek5WUv`5UGJMb>CNqsYur)LwLG8$d3=u4Pkyp}<P?0{8R4SRODM*nrZ&2CVqeRj?2 z*w|v?$7KEba-)4tw#}YpOrDP5_MD`YArtk(GAzet=qojKvazE$`O;VF94mFzvDsHs zm_$%}KD<f)Ex6~j?WKR5d|jY?a{6)scLFL#<RUY^A`=eJXHW{|=TxD9K{<yzh(dva zWNz#!DE8KDu@A89yjj#i;!tb*upMQ&*h?y&V#%o{y2LtP)7N>S@tRd+_mo(jhlIyj z+`uh7#tXd0mb_e{ARMpY%GxDCb9BNSEXES7#44=AF`Pmswj?_$qZ&R!DPSl@a}ykY zaez%ahT}Ma=ZHite>N9uuo=5?47dE%or{dA6R(I=ZGSUtpCOSmL<PGUM9s`E)2qW9 z@~VKXHk*Y@jrmk+K1{9-Tx<+!mwOMhJ_9kk^XL;mIZ~KyEy7{0s6ok!rs#ob*o|i} z79&M481rxu@rzUJpbpw&4mLwS3$fK7LTyXjI~&iQXRDRQR<CQU!MMi73KBCY_pztM z6AA3AE~-gIaTk|Ue@~=|cUa?9ck{5OxWxwE#z%aDTOsl#%&@=*DNz6gQ4Zx%36-&$ z$k~WZI4UBFNJ@y7Xoo=<3VS5HFUdZStEE_OsdD69dhX#Np5Q5-qkd_2RlVBAw-M`Y z)i*Ahx#-{++ux9b0}gi9|2U(i%Epz(I$9#WSV?jCrjwh=wcmC9iKAiEN$vXmTFmoD z#e<a0A{idy8#0#QObMN_9Vg+*T4q5{jKL;^;|r>=f_<<6?~s|5?TisPi68JRV^C|a zHD*=sts`mAt}@n`z1p}y-9MYlyceQUm<6kiZLMN6o1zukU?2uzKaRmvhO|IEG{$*c z5W^LSA~Z!a{DU^=g05JEl~{+Z2*qwBtH=(AmzCLBD;pXp-c^_Z236&zCQQ{Rbdeo} zQ4F=w8RACfD_bpzqNYUq-+jhhvJLH7zGsT<PhA>9u~KrgagUmErLnlE<lFY9KD(Z! zO)bYGVlhtzWhb_je=rh9a04EJ<To_KRII^WL?M4!b}9_VPMm{6cJe`Ww8MOC!;|=Y z{6>ND98}bv`Q0+BUFwnyL-X@mkG+pND>jlUjEk%9e;Ur|yX<)h)Mcyr0rbjV*PI=E z#L}x_IHn^E&+rZDNSa#ci@msrcM!>y3pFtdJMaTOl}K)kz-hcd9+I?eWkcBTb;g`7 z>eMa9l&nEQ(T1;&dUvmD5>WtnsqZ!#-P`&QP8o*vxQ~yp=Y;X(hD(S>6>@~g8AtE| zMaTtXu?7zijl9(<+b|3>5Q>M@4Jzy5tF{#J-1Rm!g4p8u;0EIeZSbPlD{K?!E9mHB zx7cXRqn?{W)#vg`TT_TEI1pnXR-!Kp>W4*GjAdAk_1J)kHMzHk=Xe1_Ee=jd3NNI9 z4+2maWe|u1_!mcU2Iq057BPH{o_lzN=Xi-o(SL5&jxGA%+8uKy^q(-N>m1u~s~wI% z?w^zWC&wQvE@hlr#&G>;FQ#}fvbY~l)_feaPv1qv#rDQliK&jxwgagTHyLw^-KvmF zZuQb;V`??mW}|1bOvJY0U4xZJUo1gcedBYnewFcWZHg}Btix>uG{I<$tIN(*pQAOD z2JGutj!^7vU{JRX;clO;E<pRiihU%ViR!FoQAydwFPz)n|3*^AOr^%FlrG08mHpIB zT{+~u4x=o%aFu6dMJ1E!mA-CC)$32mlp>L>N-`0HV$CYEHdpZg5qN_SFtCQb(H{db z3?ncG+p!y!>KT-}=!QYCVhX;2yV*)Sq(UJCpc<;9j+KwPXpdevj1zc`_xOU}@FF@= z!WU`K5RK3k-OvL)u@5(3yE7wh(rPcqiw3*wjdp1-!Rrsc$B){wYD?6js713DMU7FT zj#CN6xk;ScQmu4)b#kb&llpC&F)*`UfEFZ09E&hDG$^G}25m60p|~~i(a__D^KA%| zSQ~q=Nd#MgQ0zqaMyxsdp+80=1QRg{j}VD0jXCW>36w->l)-3Bz(lOZWq33py3r5= ztbE+ZXQ)j%Bw;u9;0TUlNHb=DM|h0y_<<<=Liy&DL#T$vIEgEGiBI^9U#Q)J6Mxic z#nlexwV^y*&c|;2iy!cAYfy^g^V^q?_<NxLU4D7`<>|wxU+!bv=dHF$mu-`rCx|a- zf0tj1Kl@K(YPZ^MDLgFNF-}xGC+Y+@WG|==Z|a^xJs4_q_m1<9yP6}^m@!4Ui6n$Q zVML;Y;abDEFAc;mLElJU+oc)5V5KIYavhyXrRhjV3iN@NGV&d_|E6Mtp*QvUa+e|X z-%>Rf3E7~DmeCBi^sCUs#_h=)Fu|7OboXE{?lt-QR?Okcwyii~yq27Rj%;EgOPG<l z>EFMc<95uKQxj0hg4H;Wd*qpd<Oh*&sy6@sih=|7`SQy_>Z*L-p69yIKN~7SaiX~v z1-0+!QE<YzJ?RN1*fZyI`d>7+ZNVS+pF|=)<BPV<KgH$~(3YEj(=9{}4nVCIf8YE; zcl9ry;fDqSI<o$F`uE@`innBc#SYYBcc|UUHbW{viu=yGA;CSzDqT(ML2$>Ow3+@x zIE)FcIXP`@o7HE-68l#!7_a4Lta1Q@+08n#iw(yWBnhH?Zbw0b_bAw&JdWBOoYIC$ zcl7rv_$fvIA(9G12N(+6k69~ge6j1c$7Oxq_vqfoOT5Ate8n&PhLL5PkPrD$xdZ1? z2tp@xMjtfjNbW^Tv_cnjMKFeAG(tLBx!9#=E0%TP+!~j08?W#heqEUXDtF@?9SzU| z>+zsFR}lD)kF-tl*zqT-#y-T~ZKpBfIhx0j8zL7+&Kwsx-1g{<yRF1gvtKcuPsDjb z*9@XndfSP$QLVY(n6_=c+HA`WG-eeiVpu2kfzI4NW7Y1$z^Zv6C7PiZHsBO4;1a|t zH^W*);xk-&khM{^C+BrzU46r-pKFARRcy%*{KRiWqjFD*YqUfw{DU?)hSRu+8+e7+ z_=R}AxKu_O<U(##MicymOK(;kCd5ZVB<jtrJ#TuF!55<tg6;#zYv_Z%7>Z#C!5Dl; zG+YOAutLH?97kS1fBl%hJFg#~-hFz_WBvc4$J3ntCOy{vf*%Jz)>5MMEv`D}-7*HL ztFO>v%*p+(ne!aKZ>v36OPKm*o)sd}6cw9s6e1?<G4Mm3T1Q-th}!dNT{kW@lzpI; zD7kJJuOx~UM`4L>8{J(Dw+Lb@JMI{-C5jbwdXO&RF+mc?j?pn{>ib-kWWR5GX^3_T zm|sM9Q*`aaNp)Y6qCZDaVrnYB5K}D%b6q%u8>Of`l(JyxANQF=1zNU;foyk*?au}! z(4Gyt7|yRb(<2<KcGVhRM7|GZV<`^fEV8kvT*wW7bU<&>&!P*#br{#NsD;|-gw7a@ zAqd8BtVbAj;|NaTG9Kc|u(JI0#!j6B6@vL45VsMIGQ+j&U9Nebi0j@6c22$JyU1y_ zzfqB+MC&x-rc!b>;UnWP*Gvx;b;=`SQ#It7F`;<4jdOR^)1AAN_GW7q)H)Q$)o<nr zM5Y%D6)RC6Vnr6S0ug95f>T*sK?IJE<le$)gOVB_L%66N!`)K^jpLLDD{yK&cXB3h z_YA|Z7Uzt7%$mp<{RUd#>+ytAmS39_ge`e&Y~^AVn;VF?_zZ8Blmc(@2_}~6fvm`l z(x`~KXo69gh-i3@qR>HYOu%gTu(l~-U)w6I@k}g$VXUFFl5s4*K%gc%pd$uCzu|6c zCrGprr2XxsX8bM7BbP@mh@3F2Q!8p8J-pr3*L9gw0`yXEKQyLN6F)L)EwYJLgMQ`6 z8%OkK63ZEcVX#6(<8nPJH_^36r8hB{6S>eELtu~Io%HX;S=_-xJi`a1oX8o<KYZjw z2_&CHS%+Nk#|VtUK^%qKWbVFUGE}^M{MPm``mtT%>-k$UH+*{dX#H<kcu)PWty=Si zaf<lC>~-}l+7D(K2l}grXoJJDze-DO%hiidjoC$h%%paGX7p*OWFb#bqnWl+X<7JM z7I+?)k!&h=fKVQ{r*VZiom~mfkYfgADjvgqCK(vnP!eCn^Orth-Ci1}yI92*EWm2m zXMTzP0#n$RaTuo|7E}&(&=kvA;07FKVgKSXuHYW-<I8OB+^HO}a1LeXa3X-ObGh(C zgZUKx^9?PPTnm^v8llA^@)mL~Ci+nvB~S)|m<L`~eteHdYK}zh!{#X7g5htT?QcfZ z*r?%sqI&2fIS!~T-WY>LtRHTB&lcJ0o9D)%B8pAPa)`(%h3aUG=4hqnc}w}5`>k<~ zA<ZN440oQeuWyYO7jH4O1^QwtX2Lo2bt$x%It#0?1H0iIdeUR3d8ZLm_h2HiW{)A4 zd6YHSGLI9wPsY`Ta!>THd}4LlGg`ThC}bcq^$1l|`VZhH>~UK~kKY3eDOm9e$%yBo z7=Sf6imUjIl*DreWL|6#HGXys<5ogmm*xyARpGjX42IOpxv7Lzn7x9uUrD;ddkx8m z>}yFrR6%XjK@arAD2%~myo27lfvq)pal0aH>NjH#7pq9|6)3{uieokwARI5zXDNF* zKHvwsE@Rf%j2-B~stv#*EXG?_FA@n^WD4wAN6CPF*pGuag*of_HEum8F$?Kgjh-7= z82TX?H8*m6Lp`)W!A)dS1Y#CctiVca#eTd-ip?Awkr{Vj+(P+{yr_t37z(XuEo^TH zQ#6GsT4gyzn=F6+g)%ObzkQ*!+_aj4S5asFG*%J$es7;0YU%ApKl|g{o^N;s#(u<m zT<=#LMQ#a^9#J?=M66-khqJvc*+#K#Vtd58Uxrw3vA!w}ApTY&9Y@h{8^?BdZzn+z zfs#A8?~A0N+}euIhhZmWI)11<UvbYVI*OZ((ueI%Rsyy3FXJJrh?VJ>i`@`Qe24dN zVTlH~!-RMcYvYI1C;)#HLLdfU5C&riwqZNO+K1u*#8w=`3%uNFD671p=QYf1mIWS& zha{j{wQujgz5Mnv>gBhHI}vv--8p$@*QJe@R()IcZQi$elST!P>M>~)_uW#fzYQj1 z`43NRC!*dR+L{KD1fo^9yj5x`oRV^8Vr%1##tr3ZijQk2ab_DcUL6|Ev%0JJ2r|>$ zo2^BnpHK7|Z*6f^Pup5m%wopOut14PPUDoM+6=X`VLg=o`kxq5_{QCa#bdsq4)|$I z?fAWb6}?oZg_2opeo_>KKMJ81YNHP7p*|Ww<cdaUjK1iH{ulr&f-w`bFdJL272B`_ zq1)IcchV!W)-LSEHC)FH+{6Qf;{!h86B3gB62TKmkQ81J*)tiEqW}ux<I5*^o}9n) z<j&!bhhOf0x$*Ez+n6QV7%QWu>Z3+F0+B8$Z1Labg)ROQ^D?$A9mPe4mNHMD|1HV2 zZ+6tC$MMbA&z!z#jWf6WkvAOqNt=0hZ5GnZlW55=jk7q0{>*=rCZ9UGa#Ps0VKu9` z@}iuptwN*%BHH{>2qjPwt?>`qU?_&cis2Z6kq{-rXoO%HmSY80Vgokf01o01Zf`eK zQtr@m7x(c1;Sj~kLp(w>6p9%a7+`@1eBp;w2-smzw;N2gtyf<;#jO;zTEsQfraPh~ zCOvO+kC8^RV|GVJl-qY<Z4S+~aMBzcQEzq1CNXiZ#dI7IEq2NOu2gWWhL-KZwG0{i zdty6s2JEo%>k83P1jSGsB_K-bQYejPXpR<WiFRm@0T_run2A}KjX9W$c@U-j0xZOC z?7?2_!x0=U%Evpr#|Ma`LINa&ClVtG#392A-pGgip$2uY8|hb`)<#GLDR#9DKl$cw z>7%7fRc(44-#q{NZ{M`1tRoq`?IpMP{fNCoOEdM*XxHRcIiZN~m;`pDzf<ySYgJoY zw)0x$W@D8CD2QSxj&^8|4j6%v7=;jw!Proeb{sw9F#)Tw25Yen+prxE5RM4^L==7@ z8Vbi|7l`AuE8LJ4>5v{7kOMi<49(F30}!c(8ca2<JKy~+F176~qD^<+UcJ2B$8EL$ z$^KPJ3n$IN5x@WW{p(*X1ID?34cJK{3?woJVF-p|7{p0WFot6x7GW`#U=7yd25#aO zKH?KT<14=5JAU9NqL3ntD|w`ZFESuwQ9kORF6yBhx}yhrp*Q-VFZ!WBW?*KRzJFz* z9mu%%uXP{(mOfg_=F+B1>7wnKTi*ZeoB#R!tAMs_=e5dhI|U^MMI?Mcw_U_GI`1YG zP-hPp1t_tX(hGU^airRpk0{?yv4^Aw=)&tDXA{VTs_2Fgti$euJjWN$G*VsSVd|jf z3gi|KO(-PLo<I=|5zW44%)&zfX7xoeQ)2aT8k4UY5zmy`>O)#6voITruoxF`5tr}^ zuki+vc!&28oAME#;K}ABMiL~2FZ@sy)lePn(E%ON8C}qIm%kPt-5KbCiI{}Rm;x1Z za0!=j1#fog2iG~D|CZ2N7V*`lJ12&|^Dp}Jw{P0Bh&G3GS~zJA|A#yO3T^L*bLW4v z%gXg8(GiLF_<)ZPS?e>tAPLzkDZJo~R7j0VsEjITiy*W^2XsUyi0s(~T`>;hF#!`X z6SIo)u>+yliHo>|%eabbxDJuWZ{ij{<I8S+=eK;brGgZ@+Acit>)+BxOP562^f<mb z{mb9JX;0bz+`-jbTekCB<z{1*ulNRqo!kX^kQez-71dB3HBk$-_mH%rRH%!3=z*T- zh29v9Ay|dgSc89Y1V?ckCvXy?WI2s9c!uYAftUDzk4Q<W;|o6&f_`uv^y6=Fsind% z8q<xt@DA3d#F26Bsi4ilHI6y_AMRfvS_X_`HI<x&_L2wzL`Gp0MKKhID5guI6q=$L znxh5Up*`kcF6LneLa`IOup4_Iiu!%nk6XBnJGhI-cp?@WpJPD+Bt%wZLw4juF64$d zUgSkSR7Z_{`u_Eb`V-?$pKjWeI5u2Mm-j#a_RT)plsLX=Puc(6{`FPMkJA3d#ws;Y z3yshi!5EGaSb&9Cge6#tW&23l<@Bt;N*u<&ID(@%i*xvlFZhbY9Eg*MgE73349Ou5 z(mqIuLI^-%6hRpTq8ECj4<<w3znVq=*ZbFl-+xPmf3zw8MJj0N_~h50bND~pzdC4( zk7G4y(quo0FonpNis_hvnGk0@v!P-;b|4fxaR3ML4)5^+@i{X}fQ0ZwVkCh$Yx06O z@*zJ8pdgB)L{UC^p*Q+qGNxcEreg+XLY#WdhKlXjaX{a{&bjc)d7KxAwX`X5Y`B&# zSCqefvw=1xj&J_w_pe)8ew6kvHdYD6P8`5NyvGN8M1q6FJQ5)>k|60pt9G*L&44&L z-Gt59fl%ziPeemG#7r;_lQ0?c@DgbcbBc0=VioPt8KV(`F^Gn8l;RkrupN;PZ=JoR zhWeTEC#HT8CFU-qsBPq%pQ)SmgyGM~ckC2SSIjZj)6N&)RMj1GXX<}(!=#E;TYMZT ztmNP<Ub&)2PC_D}DC$8(&V1~`8HmV<N92eIDux>9g>jgJ9XO23c#eesa_B%+B>IPs z@z{Zn|Jq*vS*R`vaqFOcgny>-&gaEUNvyWVOZ*6;WFev}KqP{Qd=c>?(jQ~wF>an6 z=OpC>>wA)Wr?`HK^<CqxBw6dOG{P|)$4Q*R8Jxv=T)-t<2B+IG|J22wd3Jaxm3-28 zFYT(Pqk%!`qlVgJu510-3q0J^Q|U|rR+0RN^tF0Iw+(C79v#pX-OvL)(H~;XM?tLp zVSNjF>RVAv-;!N)kK-IJ;}$Zoby<)DdC&&!PZ>%po$2WgvH3Uf2|o}G<ur&A0}7xZ zs-p&4pye8Ob#Ho8#vGBGBR6l{9Jyf1;3*6A$jD;5_gl`@mTze|X>ez51d05dFoVg* zRrH)6?v~u@7_XGf?h=^Yz&)WJ9TX*6ai!1CyTg;(W3=xnTD|fy&)|#OOJ|Zd)Th?0 zB2RhMw9#LtY%{yXOi@?lG9}F=cDlS(TIjzuh#@iarGE8d0&-*5O=*EVVKl;;-$lHH zbv`UxW|L|#6!8x`lGQZG#XYZou6+J#V0Kdum$G5qvYV#6i0T2dTZtzn2<;%U*a9RZ z>v%$Bx1<nRt}*P{?gafJ+nt8UcIP0n-9?COcLi5*4cFnaj&y<>++l<X=5_8?r64{2 zD2C!FfszQqmnRW7B2MB)#L<2F->w}Smd;x`Z(1-PO9w8U*QKqNs?@G})z@8*m15@M zDeS+$NMpr~RG#<J#_?%Ylyt70^10EPgVWauWpB#7ccoNroPx#7q-+&0+DUXCqj>+h zDCQuoP;v8c4mg=pCEx@iS%+8t%M~S&_*NS6+}V=47xeTMeF|BtaiQDVmZ%GInS8Br zWCGS&Y`0VHjh#!A*z&YKR?E1VW2cTQk!(*Dks>1U2VpQ4fD;b>sbg}Rywt8oDK%)8 zG^KhWx2a&lF}6wi#~9K4Z&M$Or{bE?kSwE1<#tq!skF{$Xez3kJM5}v$z!@iTvK0w zqQnzP+YSRT5cVYwp+5v;Fc#x50TVGBD&}Gyc4H6r;vpX4E56}7ejxjLcO?hPAaFft zU6!757=VEogymR)Fzmu^>_Ipp@C?uK0xywZ13L&(zy~Sei;u7FU%znl!qG#peTE&q zuwkVb5T6S!gdMeBm}VOev3(vDpCbBV<(>ky+lkB&Yizy2|LDI8{w*hp@v-Msr{gH6 zZ}D4{$Vg?Y#J6R_xV|8!vv4_kOBwmU+_M}Z#k~IrY3(4^htVvdpvYYd5ej=+igXi6 zv`j>c{hz(iwhc=IHSIw}x1{qxVdnv@-{`5RSNu&mOw~n>d~8-r_?wceo&hE|byHr` zI71J!S|p!odn?6g&m_%RlOS|LH;7EL&3VQf{x<_+NBN;<_ctXrbg_t)n2|~`+Vi8x zdm^8SJXHZbH@K_5g-mx1G@xc*-*;U_ZVN<NltX!l&=t`gJ-|1WUg(3q=!gCofPol< z!5D&}7>4g}pS}Gq{vO=9aYg&Pa8evnGPtON3YZdGZKYG}VvJ$iQHgd`wA|&Tl&=&O z9aBX9PxG0#eVu!=E^)25cU&tzSWSGJN+_BZHZ3(=^a%T1*ko`q>06|3`ReKw#?g=s z;B$Q#_i9tQ8qA5p-Ze30^-YvdDWViq3h`Nl&jM<xCZ^4fsR^X1YMTD09<fF(oe<|J zi{p!`XG3$JSc9?VacSfq^N3^A)Gp@O3m2oDW<9*Iv?MVYYe|RN{xOd~Mg^#4=Eqte zZIsiJx;K-SBnG7=1*kn|{4ozP%4r_qEu?vf!C3S7BW?rKI7YSV6Kk7jNs&=bORC*k zT9O!ywWL4dHb9MIl*^Dmwn>a~T2iUD(vrlWw4}m+#;rEWX&zhJN%IhcvF7nd+!nS) zcRWX)Q;Mid`k8wDF~Vsn={ibF5rb0j!~<h}UyO*g9)D!g!m1eMw3I|$q@{>KX(`cz zV=YCDaQc35H|hIgP+Er~f5xXaN?J;fVX>AXMmR0yeGh3VVo>^iL~yL{ixIKb<ByD4 z#Fkf`mhzytv=lKYE#<<<SW6KjoW5VHpY(k(7;7E=$e%@2F-lrW>5y1U5hL{Z1SomM zpL3i#kJ9I38>Ma?>zGf>h*<M+%BS}Eq$_XkrN+->_6!SKXnK`J>s@ogG$)yAy=n4O z(>^vORnL|;7oPpXlqam#Q_};3_^f7dOg5^KZ+KmjFy+E7zBTQ2Q(L_?&Cn)KO~Q;1 zel;1~)x{ajoz?EUP4UA@yO>Y7t3?x;z11yeO<rNv6y~9>YTktA(P4}{?WujWdwR2N z!R5m8rZ;ytgdIv}&g>G#Tr#+60rKWBw+ZtsZ4UM(O#+m{94-p0`o8KsNF3;cwh($8 z#2!UlI!4*|Re6NdQuKXQpRVfrYD{o_UzJD1S`U3+b%bH%^?lVoTYX=39+cKn-&Y-T zQ1yM){snzsbsm(~!LhG8=0Gte4mHwJ^nKM4M%DLK`)u`n)p=0*zP_)<d|%&J9V1w% zzOTj}<rL%kzG`2JzOOpIpz8aoJi_Vw`o3!azP_(Ig0l|#z8ZU!v@QC+>IkFi`>Hmg zi1WT0dz527gtG6ejxe?nj<nI{BjwY-j?zzn9CKpkVwAMB#S?5LgCmS8M#Ng0e#~}+ zVLow;lJcy!PGXd_G|$PgmL^8TTACEs+I;kK(Xj&R@Tsxp!-!65-pwYDutWXLfiC90 z+#XOAP8&T2n!gySn<mlDVDoyDORKOAW6Z^jE~UesPcl~s449N$QA%@Fa<YM<6zQc< zL4u+ToU16^xop{&iAHFex+o*46TCnpeq3qBLp=ySY*2$PnwwhaQGB?4>#m-<XwG8g z!Ci$%Wfh)=6i>&AXL}U!o2SB)o*CjPiYpg!5jeyhh0O^SWq2Y*8N$VNe_nAfl0>2Y zI7O+<or)ITin1V?q8wn|)}~OXg-cN;iMtN@S=WY&^0N)s>8$Jf0bD~3Q<NTK6{X`W zPKUj@MbT`Xq8!<zD7V8DS~yaaZ{qI6Lq&P^n%gG)nEsvL8~bq^?UjjImJ?B%wYv6_ z+1DCckJ_~xQeAE{+N|zE!|pw3C2|O@3XG$<f|*oPyH;!QQMBqLS`!j&j)-OtM2+8~ zI%84$sHj{}RQo2Xyb{&th}u;|4IiTB0`Z!=co$o|!YJOG6K_6=w{FDCC%hq1!}jKZ zcmP>E>?$61<oQAI44UmpC-Hm+k35K<&22x<ieJ3Mk4WOqytw0OyCKGfsJO}!S4BbU z+|eFc)T5(4{H%jm&!HF#wuP#S6=fnOVKSy-I_6^~)?ouSVFz|%7j|PW_Td1|gEnoH z%eadNpa}tm<^mKdpjXH<3e~S$6{<g1sGFM@;vN*aAsMov5QrQl5JZqt7yqCmdc%s5 z7>^m41r_tL5R1WM<BG_2_S{B1*>c<=y4<r?ju=#r2_8w*v=fMl%Z#{zTet_2Eh8+7 z(u%CtKP7`X$su{zihPPPuOQ<KDax_{R=5N!Qkwf-Wfdh)c~+nTcX6w-lHC+#z<5RZ zGDlHTtyPq62*DVnB^RbgHPpb6b-Xrl&HUavfjm~WG0iMAqvq*0<QwwY*q&5Njm*8M z(ziD?#P_9waJ=lten;B%wGs|VgQ*-G?MBe9&`4UG8AX-N*gA#=7)alyc#5l}b3)QN z2>(K~QXepdmanEz^|ff_T{P4#T3i=Rr;C=fMXT1LiE7c*v}h(;wDv68XBI6ei?)qL z!^EQfVA1feXv8-o8AY_Fn_-n`;MUd(tx}qdBbpEuEq#inIYld*qNU8{n`w>=qLs;M z+t>=xN~36D@k<yL^Y5my35e$IMC){-y*bfToM`n;wBsfk1`{nti8h`@b4{Y9CDAC7 zXwOJAJtUeC5__U(DMmEjB3f1v4X20(P(&*xqFoKqK89%ILNrs+#L9<gHA1xdAR2EF zjV*|F6GSrzqWuEV1c7KtK-4-fYKRxLy^A{A58G-~x7C1dt0`MlJ1we@7Ii?2YMn)m z%%YxTQI)Z%N!P`VUEZA^>P_s$W*#+;$M4b!cq~s;!zwCM6*ZzNp8SfRm`88C`N^Mh zL)2i{6K^4E1{8JuB~Q)IHIyf!ayL;2o2Wre)Nv*%CKI)aiORwD6r{g6KYf<r=gsoA zYG6baETRGrs)evsCt$0mp+OU#Z5J=wi+AS5`|aYDb@BGO?IrS7wl}+ZFWdH>uk8h0 z@ph?reN?;|Dqd0)?}~|6nwmqrek5Kh5^o8K*LK7!9pW)J@%xqdy-3`)6*tVpttoM@ zNZctIx`BIaqJR>&THAw6uMEUs3{l^Y_Q+uwPcK<inWmNx@yMWd3Gv9N&J6MJ%(kA9 z<So(SszP2;wqhH$BNSvOg>0nkS3ie%lyWDhD3{doV?46B-=p`w>T}2Jo9Y?8&q4Al zBsKL}E7WJrp#&e*b7MTxsPD#j6jztrF=td8jrFLct{Cf)SG_rwwRnBSY*yos^GK`a z9p{lktv1f1uy-3$krG`ALOZla2WqaQ^bNmj_EN(MX$fW|MZGdYO?=Pnt7aYVk=BQp zQ)Xih=7LyM7GRM&aJ)wW_l@*!R+rv0Cw1o-pzKm3#(Vf$57T=R7jX$UaT|AV7x(c1 zCJHwSGlk=%@|xk_P+TdMkO8Go27xGtw&;VYn2s5kg-{&914Ot|mOrHDG2Gk~>eZ&6 zHu$3u3ZoJFV+LknHs)X#j^iO7;|ZR@#QoolD2+grMR^1v7z?lni?LMv@Nt-)+xUX- z_<<<+899YOeKbO2G{s=d#1?GF4(!Bryn>0S@<2Q!KrWO<Gqgl2{DTo#Vddixj^HSc z<0;%YkfasoILL_1sDLKuhk+P`Ay|O*IDykRgL8NTqlJS8G9fdvq7s^60IY-g7=mF~ zgw;5L<2Zp+c!3W{=%FZykpx~Sh>~c6=4gRd2*w=jKp1vm4{pQ4Nn0jlMYedPe-3)8 zq9-O{DyCruw&MsM;2|F23EVm3%Yw3~fQqP$ju?SOSc+v>fup#OANYmeP&i{un}GB$ zLr-(GLTj|aNG!x|?8AN>!~<mDG_w=}Q5NM9goW6Reb|qKcmPjMNpm6(@*+R#U<l?| z`IwIdScC((jt}^ZFZhNOoYNLU9n?nyG{OLcU>R0o71rP+ZsQBS;|HSP$9ZusR7N#e ztMgG49)9e0C<03z(iTO8KJ3frfJA*2r6`KyW`A~nPL@q5&53<eG)Ke|PWbU1$yT!E z$c>>J*;*_>js0X`4BJooZ@b2+6C$wgxuP7yDfqoplmHaRJRT1V#U4E4$2b=rRLY39 zuwppO(IgGBBEp5AHx0D8fkh@xFt8I1J!q2?-O(XE$N2P|JgD>(%)|j5ZLlW`r#yIx zWLbIP1i8_+0H-~eiHrV(!E<aX!3hHHBU1%hqDMXSuS^RlScMr?35OkMP>r)BgkX=A zkBhjB1Fbo6z#I5;IID{4*wTl#2yqfGhR_%j3`03H;e72T?%>2E+A2gio^bm06Ti`W z8Lb9lBC>CEQA(pMDsWcR6V|?bR6FEiYhF2suHh;dC-B9!yIj*iG%a}L9t+27WO+tg z5h#r@Z)koHOEB>hTa1->5Un+P@{R69BM<Cg2S#w#G6(Zf(T9_V=A4<d!X3^+jGV-K zz!w!z1up}+@+r%caA;haCn3-a*{bn$4g&F{CQtt0HzNMw%>pPKN2_uiZH>05(~~zD zFaos(^Rz312V1!+TEPVDz;V37Ys6p4G}J`{G(=+zgo^Fhi7@QOEqq4eRXnByZzM+m z+9DVuF$y7Ag~L`p?jalzcm&tgJWh?GD1nkFjaC>874tA33$Y&`k!TH<dPoZKHnTs( z8_lCJ7UM7h>+ul3VRc!{n=)`iMzq9W41*QJu@txQ1>f-l;#FI}bzF?1C;Ff-`a{KK zyv2Kbz$bXE=b0jOLRWMX?<)78XDY7Z9X{d{z988K(h%*@37ydulMse0xQ-jRh40AE zc}@+~MjeQEo%>)dj^QLu;S64FB>huywO0hiQ39pV67vy;J=hEJGW0zp+RQUL$c;S6 zhuRp4#aM>rSczl!1~0C{lOqLEqA2=eS`$8IViv?3$zk}2L|aKqB!xG`d%%4$4Kpzd zD#Gvyp4$iuFC+uEQNq%^GSg06vNz@vs`V`=j)~ryQ>&%knhS}KB;tcge%_elt0lw- zQ;lL=e6=!zVHe(-gIv@h@63g)JZocngvyT-+I*n=Q`$nDVQ&W|f_Ab?Hzhk>I%Gga z)ImKA!7zyPR&tK*iaKfiS#C+|_lcf0DrtQ$@tMvm+B-ODO53M4Mtr8SPu53WwS7VR zoaGi)<Gq<?lfEkIf)D1YfBcqN?4vo2<6fA!V_i_a6vYYio{#37+^y7q_*A36aBsZP zCpO;mlR0~=x%jJ<KbgzN8d*qP_{rRwSv&o9s_wT~eAJAe&AFXso#3ZAjXLPF*)vwy z3!lxYlIP_tq@_|%>CSm|LB%mMwZt#J^zyU0lJunjZQYxEF)xs|i5uBsn^J$ZEkwJc zr`?@z9nJU#+W43i4Nz_4C;vJAuqzvo_q*9mJ^9s~FxJAC{$OUmznX)&{pgsP+A_+V zN?rBM>>0Dov(j18P=}-0Q;M?yB|!c4&0Id#ToeCfuARRB5ty6QAI&~#3UQA&&NyNf z3Ukx+@ON`XX^whi<o#jx%;xkH1Az;~nvruvv2Cf;kRRp>vF2rqs87s`@y_8}iwMv8 z)0|U^i}xS-31!Pivxge|^N+6#cPDOl{xnySVx=%SGEtQIP3+~0Sk3&)oRGjy%Owg$ ztf<X?aV@#)m$`Ier=(yL3n>ZI=!~pd#^2_wv6iEMwa@QZS+TG>?YB8ctiW3AtB<w7 zPHP|nr&3c#|FLF8)MC-*+GGMfu$s@+l1kkcZBAm+$EjOCnUibL^Ex_K^c1mW$yuc> zo{oFl<X|=8t2x!InHG_^?6XbmW=S>csile(?(jEOs*j5$r<6=ZR9l=sbg?9nqOpiQ z8vP6w&m4|flcPkQl5<<krZZJ-Xt0R<tBus|qnG(bbRT6#G5KF?dOG#D!IIFC18rg1 z!Q+~_HlM`q7GJfNt0g9<Y2(=?Q>o)!En;tUUT$k6;qSUyL=JR}SM#{B>*aT|WM^#5 zKHBrE**9#2o28eVl+E}J#$w44YraI8uUgMy5j(GAzU+hnYHy3BM68j8)q@sGd1+ZB znXj7N!;-`)K1j1PYFiIm;>N5MiRP=$BV??Z7E$+l*rM4Hl$f`zR@QiyU;;ah*HSXM zdOn^dNvv&K>c)nc<J&gG`5U&Zom?#$-|-For`fRP@hulz^tsr7uBBx4QR^g(9aim` z(2~abnj={{?p@U30?Mu>{dWKG>w{en`tA17KayV~M(LKO;CdC8GHAx<;TpG8j5TGs z@UF=<Z%ZzkyKt%5gA29+Ts+<3Dy!r&t}(g73SXtkxsR(ZWV@;vMc4Bd7gUclspty1 zbQ9ii2OkZ;#Td;6mB3v`o3XCkK-C>}qk(agi&EQzi>KtCTn?n>dV-56p-&cCJmg|& zNDl6n=GW}zBIz{R1<<l+5$>9n(6pvowlw3=B9In_%m2xf>!KaVP@P-KwOCfY7zS$t z)=oF16$?dZ8_kv=+Ti5ksbC*|WWj0OFwR;Y4WSj=5!{33!m0Im?!->w@^BW{EL<>M zSi&XZGPZCX^WLDzxREw|xfeJW6%KJzoLj|FSGahpf159GadeJTpbHN*>9{Cb@lvzk z6-}ISVHEO-E3_ys6S){FW8p2kc$@+z;mtWOezD=&XI~ahF|%sk=HzB*E^eY?Xl{Ph z$-_A;=0P-)&?ql&JAeietV-{EoXVqLeol-Fa8?e{ut5cXUN*sf6y#TtT`&ajP7@a5 z8T<=#&WabPQ-pKVqP!BpE#GjAFU92uI+o^C6H~Yd6Y_8oW>>HhC(m^&v*4;cyk3n9 zrs|w!*Wl&+nw+UO<TX#-HM&C6W}5pgss5`i3+o&sXLq(}05LF{%ZrJ;l{Q^7iyNB4 zgE^Xy3phW<Z=9{Nkn74tY{g<O^OnTOx{S*Son<+f1DK0LNXV64n9gS#zcpewKRyml zV#(y<t)>e0D4^C0_UPfxFEmO?^>DC99<e7XrPZNHE$uC>=xvRE)Yij2d`)fWZOd;+ z!%JF{s_DHfDJ{Ji!``X%3_CX5<AzI$m-KTtqx1{BqMsd2c`atQV<h)~gOgeOY^6wg zS8ktCatQ66bf=`SyGFk=QG!f%vWpT#c$z`8lu{%G>u&dNSw+b~DN>SBqzt9V7S=PB zC`J61vQd;G<tRnIQi=$rC_#k6lpewaq^1<f`AAcluCSa95`ri_>?Tuk2+0)+2q&{C zLF_J2ikzktnJG$<^pqmyC`Br#*NmbRDMKk@r4)HdDI%Pr1o?@Mlp=E}MG8@R2qRIq zG{5B_D3Es<DrnMDYCJ(^N{*hC9Chl&Exjm3((6K6v9sb5rHBwlDKeN+qzI))r0x^l z(Uc;2hjO21go~136h#xIi05S5;iVMGJ(reImvB3089z!<io~ZB5&BSy6r%*$h$V+u zDN2!wSJ}vplp=}l@$=YyzW7kng;FGpQbgE8DRPQZ<mM;t^-zkWQ@9a9DRPujq-GM{ zBcv1=PbqSiQse@qh+v@f=m`@g$b6)y<miAc_>L}=Ag7R3lp<p(LB3*Pe)c6wki?WA zH_@EZV=aE6E+xo$qzvG49NQ6%>XaTc@E!dqMRHS$Sc`K}inWv=;`dl9cA`qzKeZ60 z$O=l48I&S@DMcDmid>)+@vp_bnualwHsT5wlbUH<TX7?aQe+yXh+VPn)PgvGmy;+( z43l^Tdb(ycC5Z5Kj^-Dohj4}hWUZAFWCSHht0gfdNTH?NT+mApGo?m#%)vn<p!5jE zF<oX#5P?!eiH<JHMX*uXbEk5$#0tIqGb(!-@^lRClcw#zV|5OCKni+L3VKKyIxL0! zSDJQ28agV4JSI&$ey6h4X-!W^K~G9SPf0_krI2T&X=kOOb5h9j(zFW<Sz{vVq7?L! z6!fw*bVUkzRho898oDlpydh1yDTb_$l({7Zy)6a3BMse^Lf(_6-Is<QNFl?eX%V&| z%0D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 diff --git a/usrguide/installationguide.doc b/usrguide/installationguide.doc index c554cf6f5874b559797f15fd698f372cf4dc6a38..097275b5d01b2a416a66ab2f1aa42e68e9db2874 100644 GIT binary patch delta 13820 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 Leer8K%j16lAhbyW delta 13604 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 Pv2#pZ;p9WgbeI1Dgf!cY diff --git a/usrguide/pdfgen.sh b/usrguide/pdfgen.sh index b6a1f5852..b0f992526 100644 --- a/usrguide/pdfgen.sh +++ b/usrguide/pdfgen.sh @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 diff --git a/usrguide/referenceguide.doc b/usrguide/referenceguide.doc index 9a9bf7e6f6ad68b8e2657249c7fad57c192a7a18..3c41ef9f03979bbbb8dc375cfb6d217fe698dab7 100644 GIT binary patch delta 287855 zcmeFacYGYx)wsW_y24&;W6KSfvD_qElC`_)HrU1m8{Du>0>Oo~w6X=VBx@xXj9E(F zKnlfP;|V2T65tIXgc?Ne5FqpbA#_LplMqUPB!u>R&b@PIXIB!C?<aZx`Wc?p&di-# z&OP_sbIZ)0{K&eKpKCg&G%?cW^F7+15BWFH=X;Xxe!hP3<(FT|sp~nu0e%fPLO0w5 zH^VJ(E8GUR!yRxZ+y!^TJ#a7F2lvAR@Edp#9)gGa`wD!&<;x>*?X`>iyRt@AJsueB z+uyhDxOK;MwRg2k7SjI}<P7z-wG8$R8|hc<_$=UiE_p=ORf+Eo@c9;X`h2T~`+OCR z`mV8uX8HEz_<TSA5v7|#)^GIrp5W3M-9Fz?{$9ji`Dgy_y4mNeZ6RwD{l3q}kmb34 z-^s*#!@MkC7U6E>ul(!fFR^D_n80!VqAcHa+;j7iEZ=?z_IV<BCb=_b@P02gs2hCq zSK6V-u)z~KYA5v~{z@+7-~5$Q6{)|^&r5!mJtko?tFG}O$4?RR>iJo|N{)+;(YIy( zmFSj{7n8DyC-Ybe>-}fqan9KXM~3Cuvu5l!zT9N6uRG+<2l9Qs{Q_COWqEdJ#(sw- zelSeOZc<0ll%}0rHDUDgBcIe+Cn<A&&$s-(>p1?-{#m}=o^0(UmqR%IBc-0fU#V*O z_b%Zs44`>S_3?sl`;~O$xY+N@@sR<^$-KiPCl_U>LaN*OF!CrqFw3`<YBi-ae~moM zu~UP|y*Y!&r_N<ooz4yQPwh|48+o+f7m%+-^?lu93e?y2`74v7@-GUTa`qi8Jtt0X zr2?lO(DSD2X9V8O%CD#>3s;1yt}pF(t3ME_tc`>#YAcfO^)JqM4w82TEps81oF5#U zI=DM^5Kit6PBd4-Nzau?a$hiHu0*_7Dw7NLuN~kdQ)#W*VEKnsC!+&~o6uFstM{L7 z0#xY$q2!a3N0<QB$&mwUOn~ZM0@Nf=8BlHl)btXdHu=hcgG_X_$sY}L%UYLQG_clO zsgo-Mbyn*tipXfBys98MrgcK{)qw+@P<0ia`|CnUYtSTfC6rt;$i!S1PHrAF!9*5z zGF9m*cwHp<@Syo7M8pYE<qc7poOQqq6T*>QC@n-)@|OoxnDncX2Mu=9uTJ(KTw<<N zd#}_aV}nagtVUdQ-gIk|cMl$K?yXI}lZv%2Ib=wcxl)%rVu+JosG=gdZAi7gA_tx; zq2wz=%5-|6ijXd6IFd>)R1r?jC@eGghLf8L-B=^Z^9sw&l}PgO)RoHQKMG6DmCEGQ zq3%6Z$rVGVXmtoxI0{9i6CH&LRa7Uh8X7SH9EC~?P?H=u%+0YQp|D3np^Dn%#$k@$ z$iY>^+|=um&kUQXn^lM=Hhi3uM-Ju=KQwjl{%~_kD3rW)xG6pdo-5(x@DX7rry)m) zBA%jzBFPg*9OB3}<mgbuo6}Hb@|_X0O$bMa(nC}wSC4dbID~fnaHKUzwSiEmTG~Km zc{o&HpVZ|am3(fb(+aqhe1D`{fSTm+1H&c_M_!dRo*E9-CQmr9!W5)d>p*p?k%vNc z$>$FYnRM%%#!%tW^-#DXIb&3X6C_;W1VI9>EeVA~$)Ai0IT;B%suqgaPi_mC$`6N= zUyd>fg-yGx_GVUeb99MG$TZBFkT;>q<gKIKyqK0*>uKJha8+{Dn0gb7v1{o;s*|UW z37a6svekO5V<=pc{PUP&O%T&qYtyn@o7_IO(iGZ}E%J0NXb9DPb?ht?i4ks{H=PJA z)~a=aM2v9jyqXjVC2z5&njl8F=|RHDq2m@gIvxopj~#EcKN3kM$GP!4G7VE-smhB~ zCO;duz{Ky!G#pkk-CrwYq)HUBrog`Hf!wjl^NR*L8WnL{d1&ZJlYDjZg(5e*rj;X4 zPl`3kn(^Zt$wf>%Pg9pjZSwo$P21$)y-99~>XL7bH!UUN2sK>oRmaMTWbFhKzOup| z^FIOiD3tuc1jjswDnsg$lab1>Dr7mu+}SUGaPrFu10A7MI_es(_SQ>fBspv1I1|K( zHceeCE0en>I^9HwgE7T!KB|%*POLIF8!^_Tm7+R%^rU)6s+HBrmrLB6Ym)a(8gFhk z@~iPS+REDG@X5yfR65ETuJtHqWnJ<IlWR=$b;;RNO!QS1$-hmW;9RMyuv>oMimxh^ zJhXVKxfDvf6i)uE*hsc2ocv`fzDV-(;z>?+tBj!1+EP_za%G88nku7%=|QTJ*Oa)i z7>T6^sZQokG3~m_s9suotEx#JH^m5*gC9+EOI@3MW{T;2svL<$D!ewVsxBFsI^I#2 zDo6FwgH%@}PoG-s1gUn~b4HL*^3|!Ptkq6?j#PN7zM77?^k7F~)u#Wc@R~Uk{>st` zPJdUOd?i%m)Jk>buCi+Pd?@UmuS%{jGX}WYkzb_3tI^ff$%o1gHJNwhhxtiaH0<^4 z@;Vd3(Y*8!waF{Xjq+62CQk_)0aw@UnpS4YWQ3R2jnq^m*Gw~2Tw{cn9we0f^|ZsB zSZa*$(u0JP6&3RwY1D+1Ka7}0S`(2L9txFL7T5#p12dEFR+uJU<EUlC>*j@ODwESf z#(LJ6PCPwGRr1FnW8-U#Sknw_O?9#$?B>CUHO&*NsYxCa9%G7S<VshTGMY8D$zOyg znjl6$(}UFQij+B~xyDF1nKI1`J=R1fI<;48<m>goYD38zA`_fMYK?fqb=SWg**bip z6>V*_np-<#>th|(=4eNAbX`j<UTSs3nqnQX)`nQz>TF9c{jB8rO^X&^Z;z|UI?%4D z$jWKj?z4PNz7U`FzJvG-`%2ZBh<m2Zx6#+^>vYbC-SZ=?kZ*)_2**2oCB7gbVuWn> zwfLgyyX9NKwN77$Z>{eJ|8~DWW^Z~ocgRqyIo{q8i^p0!2U|zYvx@X#^2zxli#9~# z*1A}%)rxKHjI}n#8mC*$opGx@+7aCt>!f52d$Rl+3!B<H*2l_Yo$=;!zD?U0ZS8E1 z+uO7Jqx!gXS(bllAD3R{uHs%JoVK|+wxzs%L;K9;#)GQrBGrZE_Q-7icL(Zhw>5Nz zyIPwYHbj$~o*v$PakjsC)TpMe)`rgJwpPlxuC0qIF-7FajxO<!u!mdztNfPz<U={b zx?i^Z(d>RYNM~n5YuLW)K>z5|XHM{U&zz8TPd|IjxU3=ePs+0bc0ViYpfS^?6;xC( zlHkJ%hk|mbk3v>uBq$^PbGqNJ$QtCgFAin(ODy%x@vWp{wy5gcKxJ(AZKiTMIF9;S zsTzy9m<7IhzN36gean4w`L^6w?AyTg^?a6abqDtceGR@g!pGGeI#!EwYYEfF-%hR= z^%12A`yx!zjL5Q<+J}d-MjRINHFABO%0&~OF;t`xb+ddG{1@Us`IPVaj5(5XLEkj~ zvz-6zyNj}>+I7RS!rjk=v)*qVwQ^f~tSsIhYiMq2Zm^=AogK~Vx;kU=;KJ5U`-6Da zkQ}}oWnXY`)}%y%X&#;26c5gg#Tz=B+oiVZ3+A;pv^CO3qSTz*h+4X077E$9A!bP| zmfXi>bz<Ji6$`C7Z5uaI*Nd9hbwoS1S;dX9rsmd|v_nf>U%A2xRYa_cx|)*mV4`5< zhUPemVMW~rYPG~#*LQBPXrOJ4&8_P#6wzcLUT!T!_ni=pv343n+#)&2kGg@BHb*6s z#gth^+_ELQP2%6!)zaDA-V(FgnygxD9c`$j{O}+dh*^!%&ZrgdjCK(BmS)oCDAv(T z*$La$%HO88mX@|HM80kt7f*<Fw3S;b>m4zt-Nx+?F3%dANXtaM%2#XG#&tAP6BUJx zZR(1)V0$tyM;jZPMf6;wA<>kr)>w=NFClfj>IPlDb+LG})K2Gyws_3yiW983JzCe% z*&J<Y*;bNqkCvF^Ip&l_Br8I&8roVrqs^`Mou6eD&PuQ7Vrsg%)7sM3)zWCSA>)oM z%_O$Yl{Hl;^^Mu8FIdrxMO8v5bgPcC8oOI+AMsMw(1cV;^ZM4dj#y*4HNUGvBHhSQ zsaB_GOS}!)ldVG*u3Wl&?!4v7h?|3jOXe?}w`i^uZex61slImf%6U2@XPcTk;+>^d z+h(%bfiNj#v~`<>H57@*W0jq9PSq<ZQ<hZoC=V7aZEc}?O@p!KEM2_JYKXSl1I7o2 zC6u}sH#Z@XU2(~y<RVU4kYcG+jMhRqBZ5VdT3SR@T+!K5XQNGGvgMqv5+t}h7N?0S z6B(~BI5IAoR*BJMqI6abZ5>Ge@D7!xQcooWU1ldAE%9|C*)}OaysN#vt)ml#AhVK^ zima(QMkQ(`w=4F~FHA&HuPs{B%B|Vx!N&IH7BUy>=#Ul{w;Jh%TB6&C$gO*=L7oUV zMoCawj>vfnm5DXbsnS8A7f$}Ckx!)N$#`?Z6(Utx9-Ox|x{=lyug8R2&Vd!Gw^nr0 zi$_~%g+?g4KUaoFNuyO)gNV02=-4A2M)J9~t5vFmLa4yowL+4yL{cvAwsr(nipJVB zJEksFp>m=+7J3v3v&I-6sor8FOJOObMFy0SptbO|XDe1=R7)=Lq?MqWO=96tZKX<1 zx-J15slTXny$Q#yVvz;TKu1(po>Y}%C{o&m^u-dG94mX`q^<>RCBolCxJI3OlWgyD zRbnkwji*>bAgq$!q?}N0S(#gO%kz)<zn)@ntUmF@tu<>zFzNr+sMaWIpr!1TGtx&f z6VeW)_fmQhMmwbiw8WG(>qU>$)l4Pw7B(DLL3%B0Mp-FcC;=f$KBTUD)^l1RD(lm= z-?0k1Q5UNQC}u-h3{&;G&Yg;LZde{`5UpQ^c1#oX*dDZ8C2TJB9&D8(ku|o7nAgSa z*A`|ENhDKExR`cZQZ$`l%Er^AiknL;9bnPCC5NtDP#g-El)9E&h2PyH{2|7E7c1lK zxxuma-un_b@hYLMq@>z!T72u`85yW8A;F9m?ubHnquZ@!tNtLXCRAN&HE(slu8Ygp zomvk=6}t|xcBuB5kX9)bX32+CoRx7VByCqNm^xjf{-LpJ*3b`#5#HIn%PNlJy{CK} zOvldVt-DGs@mh>k^C*0YR`;ekP6S(b=?Hb?#H^who8<I0VO4j^Jf%7tb*{wT6vl%- zXO=%F;pAss+!LMByCrR%v3lunR2M2SXsM;!a5})9^gO#n?>fbiYlzaNiaBcQ^mId# zcNvOlKcXRuv!eQ?jYH`m@OQAyX`N5^J(pyiSTepeSRgfAP*6}j*jjM(vU$rFEnITA zWvyzlisS-=<L>(3W;G7Ys+rxr_qD9h4LRc9?Ae+#WUT3u8WFK$`L}Fn?u=RS_9){% z`-yY24==P1Td{PBRd2Oz#GZ@s?xM%;F5i=V_kdA2!clBP99Io*CT8tiRkDkUAwaaT zd*J2ScV-n^^jR_@3(j^uhWIvosjUTiq*grR_}I3COX}^DFU=lj&BhH8bK~`~3v>j^ zowohYW)~*b$68|@QR%zI>s2yM*(j+7$FC;<k(X&5ZjUy1=#F`YI&rX6L31lEtVBe? z#JN?iSY5`^IfM?~QrS}#V{VHcPj9A!N}i&f;{6y0Q8`kK>^h?Orpld-Y60pSO0D*m zE<G^lRdx~+-jH%s(VJ+ajTDRhLA&iRaSO$daXs|T=8ekd?jYw<{8B3xZP<`e;+}=n z+DzmkD5-Z`Zuu%vh|AWnA+|AEj&mWkCPodpsB>0AH90qZ6_GO(P(qisioC7%j<&`w znKy`9TcRDU#8GZ(hfVrqCpiLc!DWl<vZ|&Lvr-l7B&j@I6CYl#8=(wIsK1mOs+_v! z)+R<ZYR<xmz=@IeBZDGKrU~#qVogo4hEDtud)ycPp>tJ*$IFBLf{SC~<u~CXqgY+7 zY9!uMbD2@-5z4+~YWDC!^c+&CQmH9&*V<@*x+l9hcead+?7ca;V-rrK+Q@mNw;|Tj zF0x?=M(il2WJ2ti*4b1+9TgE(pc0)*Xr`(*H#g$Gw`{|)r%~wo-Lj#Lv7EL_;$2#a zVp=#_g6!P!73W<8mP$t?pcINsi8G;7!V_16K|Rt^-nLd}bs7E9jg9(LW`k_(6oau# zwIEs>{)7^Y<C+z_g)PwuNI$EyuI_JJcN`U^Mc@Y2AxW!MG>(!a-3pnZvLWXW-d$>G zPup|O5`S8BRo&@mVp@&hH{#Vx7F(L5)T863C)EuoPkDLyZjaWHIMOT818%42<j09} zw<Tl4Gy{+@0&GN68nF=3hK5)>=}E3KN=Ut}k9IWT?yI4g<f^?bt_HulFNtX(Ya!uR zXiF5^%pfb;-X4o~U`wb*GrE#qH9;UXvqy?;l5gGkGg3~~qwb~L0x8|{MnUP6$jLv3 zu(6F+FWp*fYjd3T)sZ^0A-Y-ekw|N_$j%uQV)xwfaL=KYRseTK61%T@_>Em85@RX? zIbt;(O(RvACuwPJ)Z)?AqU0T2hcsn&LZq$YaEDZxBPx$XRD?3%<X&}?_In)<i6)=s zATp6*pWl@|F@eL`QDPN|9@nd?%`_}{h1%)bPN%w2Tq)cuZjx^^92Gj)+M(L2nq^Y+ zv~4P<+mqa~yS}<~H#h9Amo`?q+ieDNE>XYRsG;N9Ij%k<n)JenFtni%3sJ1Byis_R zUAhQ0*@Y*pieIA3FM(Hp*E=Rt;t@*+XnIrfBB%6RjqYIece~%NtT72)N4*QkO81+I z9C?}>OpC-|NVp71y7F@+S`=N^P=x;KIU^%t>~Uk?GA8aGvQ_6?(K_<qP2{^vck9TV zTg0JDRf)Oe-l;R3FoSpoU~2wA8&Ir<vI}@7j<y<mA+d@Fi+4y*AZ-oJcX~)Suw$L| zP<A^L<*l7XxNwnDtBC55uZ}c|5;|Y%R45#&L_$Tb8acNWIeJutE=uw=VVxUCA1zmZ zdrCd21mltVPDy3gQfES8d!p~u$cd8yrQJQUo|*F<|1WtPLN}o!(nA@QIon^DQ`r6b z&$B-n;E#8|a8vd_7f;mQs<lUEF2trcV0+p&W_Vlnl3_WcyPwF*8Rnl})@z$50>sCF zU*`5q-KP60Z5`cj=I4wF+VA$u>6fUgca}8LjLs50Tk36kn7QB%XXNb}Z6=ldaeQqC z5HfHtsdq+^Y2(bKX<1HDizPHuwVfsCOL3h33QJJj+1A)rFG8?nLQ)%q_^Of;D?Ki4 z^_*mxfi)B6B<;@DZD{LK(|D<=a~X%a1La~$RI<U+1#pDGM0r|N?xcIqJ2P&Kcdc8A zhfDgp52ZIkyJW^e4}R@g?`MxrXu0lICbmc)NYmIZswMx5#7kC<MR&SIrS26c0d-M# z4W5fM&~`i@Cd<>JQ&Cb(b26b4F(0YKoSdd2bc1;0p;AuCvX{W#EM`ifND4B_#H-qp z9PCIH&>r+0QyY>>6K;7db)f@KvKe)jOUD>_$jwDkG;?Bg>IO#*Rfg4cMk=pG-fO++ zTq31(C7!!_h{5rBt)4ojGNg^~TzBf$8K>xZRp+2yw+E+jI^&i7tjUfPC)=STbB82w z@TC8gaZg*5lr`l+PuA)`S<bp~9!|i?P9Z0YEl^`UcTlAVb-2&w=2U!oJ|6v(_$JR< zylpYVtVBz!T<fVyrg){ek!B5tsMSq7J>uDgOV+xp(;aGI%ACB>Q_A9m6eq6ISQleL zdA$rJ8k-p~sflXQ|9Cka%RI)19j#H@9*U_PSD5qDe)h5ZvWFjx;OSzViTa>qhr+5U zbDYYuGPPKFT%5%y?Ni`qvzB4TeQ|s5E!jg8q>&a4)~9P7Da&XSD@6PZzgU@K#4Elo zi#uKGH|Tt;xtt91szwrKz#{I9)0dW8YAM5;VHts~Ost%<q%5Ka#8`Ta9BHytBGUxO zLdE7N1<v)xC@$>m6-&xP>W1`u%gs(^%9SikL0MzaW9oQpy;x*tQ9`dW)iVbWjk7B0 zP0EayOV#*Q&1;)edU{<=o!jFY@~q;D!h$(E%ObIrsp5F0M_FVxWk@0(^oH<ABj208 zlhOSAMS9`U6He)vRJtgO=tn+Et_SxUn_HdmBKM8at>y^9h~k&$=O_AzFxt_<s!7lI z7IwxqQY|_<=O7i^3hkz2c)G|3<8D!EaoqJ8t623~X5CkY%L!4O<_;}vGX`OXRO)Vh zlxxyaqi$;X!i4JDNY1~dmQXvQt?M(?RYuIZZ_ycTYH5ph#`C2yxOIkPnm6M0M}xW~ z`k=!Oh5SPkDo(v{=iU(8+Q8IN^XAxMb0;^ZPDZz?7-S-#fvGVW`%2!Wa8^q*b9Y*m z-5X?ZhWA(=6d5VuSh^%gc1D`eda5+*T@6YoR0IESTiPVfepf?h7fY0O`){&`B|5jX zd1GZHO?rATEp0;d-KmpQvY0wnVxlr|<f6CUzDC$G+|c@`<=xeqT#!5<q3hpUwlt;f zS;4ZPEn`<%td28fB%^FIde_ah9qW$SBR?y&zB?z<WTYy3<;sMzA|?PuPMHy<PBP?m zHmh*^`mPqnOrEqw!`<mgb%Ru;V>VLL3MNMuny-yFn_g5V7mAoo_Em0~&QMbXGHTGK zM$cPzw6&-qo0_v^_W+72i@sD83-{D@@-H(+CbShzpYYWaB+<>$<`&sCq$*hrA0?}q z6P&BMO4D`-NEmmfl+I!Hia84xlCMVb%&balLu_jlOWnMYaVH(ndQ>=VF`TZ0rQ>MB z@$r^uoE*ztN<_M5B>RnRU1UqFj4qNRy_jCV(k;T3v04_ij~JFSGDqe`)VEqxk;P(1 zSRzh$5<>cdD3Vl-OnR(h($`b_EaKWzAIu(^z!2!US?!lgBW&B!O8>)d4?T|~twPp( zr6I|TlZsXMBubDyZ=u&CO=))`0B_S%BMWCjTPDAn?Q=`=1}0KDCVGiaxm=bb1mdAv zqbkzdh7RdCU?wOll}5+hNV!=GFDu+erQ&T&%TaWRHQum9=95io-sxVnQ*Nd3-lUly zbLOOU!)=j?Bu@bQ+FP@S57A=RUV&^@6N%WHZp$7~rfj(<e0n7lvaL;b#iGyl6FE6U z%B&=UQK>Ourzd`C{L%#=8Z!}M{g1x5=ltvu3Eew%Mvtc+RMVvBveAS^2{9Yk-d5w& zs7_G{B3%xWjuMc!d(zgpwXL<xX$)o|K`A$T#&AR8(H8sp`t1G*uYnW=YBUW$y~sL) zx-L`}P}3t<&M&KVC)~<|D`X!O%}mr6A9!V^I#8Lq4^u`#x0nPy00vtk_N*eL>z30Z zGrI`swwUzfUfGqSW)8KnX;F(hG%S@}CsV3sSkPzsOj-@|+hy`KA>UQ8X@qN|Yg^Tj zm?=%keT*Zck8Ta5$0r7PgY?~vYL=Hgx;on<pcqUVo7vkWx$7+Jsk>@AwbhxBGz~yU zX8ZT|51!&QUAaF)CaO!Mm&VCd{k~YA!LfAXla%JNn?aV${jph!sSEFpD~VMU-xR~! z2+HXmHe#eZWO;yYSVgS7Ahe0B4H@A~GkI@vnw8`vk)9JtN{QGt_EZw{t-7jI3uX#7 z)`2h5smueyHZh|%dWtbke~ndB>A2B57Nxm$KAt6MDr10P({2^frTl8gM$yqZ3#o0a z36TwDft5{9DBGylK-B0%I$|WMEe}3`r$xHCmS#=DX6{0*rMSI<TGr~&6C!GvRLjAs zZRw^MZO5DGio}0REFn3)YfpL3Qn0i%r7gI<lH2o37L{^yRYHW9c!p(egl5rWiAY6a z)~X_Tmz;?mQ4Vifie}`emwU7p>X{w2w8;dc9zBUeVucwmvQ@Acg;C9d?Ret%la!v6 zcUrG<7xW~FatjD9dwvL-NQG7E!wxH1QdTmf4pLj3WSncJN7>`FQu-NB*Qst+cR4Pk z(J-ki<vmecr;AWSaM`m+_yqeNGkcZvoh-}R;tOT}#JGy`a$|K$rt2`yHT~yXYM5aa zhf1xgQmdwvO$~&T#8#vY?>ze1)HWW&FGWe}IP_$bIdCSM>~XK-M7uL4NoTYmjlUvw z)^+BcA%R@R4_AYCJ;U)8*+|cYE=gKmzBN^qP9k;Zzmm%3kW*<BJ==r!6K`i%Oms>l z0x<tl6G(DKBC^lEGkciYUXc|l)qks;zcu=ALhmFqQOMubX>pnZbyk<uD2m#z<qkzX z`r@p$wy5E2sa7}7*u(hg5_Lklb7zu4*LrG%Va<uQH+M!`7O`kbXKWQGXYVdAPkv{2 ziP=R~94arbHtOQN(H*5M(+)aQooq%`zPgp15?wcQ)s$5;R~4_CT7FDLSzWZOX?EHC zDKl5Kt{z_;F0CwC)wpWQs@7E<tKzG6Z{59WRimhyXp;RzefH2LN3x?F-&v1KmP^ML zmjsegvS%evptF#?6jzj@K^6*I8!9O;Pd^n3MM|8Et2h%*oW13jdHtEIHf@*4bbQ=w z?Kol8s!btISCq<s;T^lbzBw2@OqZ+D#GzI)<E+v}`{k#yN3bVi?GxE!!>QIl8_`n< zqMjkoc{A%E=c`MDd!Ei7+AzE9JFBNm*e$jFja$l`%nEdxOV9H?vYDllEliYC&E>18 zXDXVSUN!ZYRjp;KI;K$HGpTLreD!wfdWR^$YWX0a(Xtan&vnSvt2&NZ)yXZ^YP4V# zYJehq<8st#!_$kZI7R90N~$o~WW#=Ua1I+%M2OksOdcKRN*v)Y^KJ64_D%6k@Qt?2 z&U^g?fZm0_g5CZb)MFk|cI3zTww^~mV$QP!>(#dy&ll(iKxEf{6Hf?q@VC>qjYmUb zd>dsQN%&^<OhF@OmZ{J@Jdz+_D+$-ToBsO@>V%Ys4&<Q*lU4JWz$nWkH`>x+Mp<#P z&_S}TWO=kz+RHtOxUY++6jnMpP2Jk1^1GS5c2MRhPcO*R4;%O<$6pt1yD48<rbk(8 zIKPf~%8~gAzE!?e3Hk7C;!%iIWJDf^sNhkGzN%uLZz~b#=WRr+5haV+BqHM9#u+06 zi-#>@RD_gWp5tkD9_Fw-4~Dc5A|axobM<t<YCs~bEA5;a^q2vqsG~Np&SJW@&Q@{6 z)A5S$lGf`kVo2!p#xh^i5@VAvsTYS!Bq$D(+DE#SClY42Hm=;#hLOhJg}=Ee(y2)@ zX&s_Ep<08}zZr+zKK8xr0@XNP8<;bE1i9FqGC%C6+ZflKsBQf%yEKu}Nv1kT>E+dg zri70CTc*iVSSQQgGiiCYkA5$EAlCD}53)xMl|<xU(vwTt_$B|y9&A^<o*hWJAS#sj zppv<?&R?#i%&i>Bzp#l~4&2_mkHUJbcyy~PgK#k6+Go?hv&VP7Os8reD&-EEXHxJa zk7p88dDdRt(`u$hvDR{Di6Yjhqbe>lUS4^5S*TpPH2qP<SV0}94KW?v({U|fk4`7! zawn#7o~Upi#T`^OR|j6Ghp;BF8<sJdGq}xA(k8t;kmf&{4l|<^PQ7QIO{;q~=<HE} zcyDV5=Zq-OLj_dV9$k<#Qh8?n?Rp>Vu?0D~d;XYRppTy5TcBL+-mTCco2^e(sdLV$ zy>Iyg1xU|(PWIFKS8JzlhYsgWqL38=nZ}kZN=0~Yl`M=%dAzBBYBf?tS+T>bbZLqw z2Px%~qjXo)zT(B~0lIVxAJ6WW`09wvRgeGq4Lt2MRdK2-{hV7_vJh;nOKP}pl1+NV zgpO$`xfgqr(Z4$?n2}6VRVTCQ=iJOnUcHvV9`|_m5M>T$@x>LTM_8sYv$?@LOOR^K zdcM@#epv(bjLYNB9whJG%y95v!ngFSgLu|)CI*|LiRKp83FT>>jJEX^O)D)br|{|L z`YgPtmim{J4A7W1Iwn?5CYzWkPxTGzl**cNMCGs-AywB~xMhrKl_ANLkqo9i^OyFM zCD}t(vE7<fWw>vqNcHnDbdP%br#pSCCkfPasw2`amDcRI8WHM*z1vKhWpmr4gtIHd zoj8^KS1NyLH+m1uSeZeI^Ed(H1=$(4-RyZ&dxdbvrJj1mwV0KEH@*b&@I>gIcTekx z)l&=APLxRG8#GdHR8GyOozfLQ*6B9;G^ii!pEE9}S!^k$b=)Y^IHig+&5$i&^B8YB zp-0&7J(V3$?PsY!XQJDF)V(GmkDmOSg-RRgdyD2=NYiYF`-MxJdh0P{yg$`@yQ{*z zl`(D9A8|(cs=iHu<SzNA3Z}mzDs%PUD{h*qxGLe)rh75c6;tZnN4fu7#m>`P;#6Og zs5S*OCH~st8`D`+j~k;Ndd##4dKyk|kCY`P*@(~L0Bemr3+FYd!D)$UvfiZEgxDR7 zy;P4UcnpV`D^1OHGCk<b^Xf+Gc<y9|F4b~8b*F7^W=+BD9hDYoeDh}ZC@@J<RuL(Y z(|QA*UbYi&T|H5>YiX%GT2v9zU--6bX^HF^9hFc!!_59Jvk$agP1>bxAd?5JWFE3! z@AsDFFE(_ly`sv#NS?vTY_YOMj1=(yoE#Vf#pIqoDY>zl9J9rIUzoW~5r}g}zN^U< zeNtJnZ)SGLhNGYIO|?PW%FY>KMinFR*e`iId)NrC!X%wC>)^dPZG+QXEn9pj`=Wt4 zgL0{v-Hx9oC;j8?*WS(^8`NVHEs)*n-XU%qbX63icFxP$<0p8tl5W(JB4?eeG(%XF zX3QkQ-e)#VQpuDrqc=TBr0KiQ+@KzxDB_O3+^bGRRcxQg@EpIQ6m4eQ)~jg!T7FqQ z{n-7L1=rrB68UO>PJg@q@3MoQa|gf7gFT)qNV(VIIOiwj`8ZQW=1fJ%dnPX_kJssH zQctQmo^{_<HaxAc=774hj~J3O2^Bl`6{eldc@dsbu{4RQ>P<g`sLXAv-7876Gq6Vo zqGE7wkT0oOID5hS*@ZLRcA07xj#?_c;trL)ubhuAlD1@0k>KfCnmz*XjzjvV8kRFf zt(uO!2SSQs20c=@{k4+l>Pl;EeMIQYb$^2hsqJqPp)+Z&A`Cb=4F9_~nxch08o8e? znyk+B8J)S$%;fiM47meR!c-f%Ra|Mg4Smz-)m`5tTYaaQk>OrrEa_?U(zM7NtPXbH zVdd<*s-Idh*SqNKO*7aPDi3MN+?0AY(d=~WV#7Fd1r6xzw)71ldrmOhA@$OzIQ8n$ z*CyUIz-r(6F12l2J=nFO!|ZmnRxX>%q8mFvgWr}N2gJgnAIX;5PwmYe-hJm|IfL^2 z)4QL1I_GC262WC1Z3LDTIJI)-?h;+l#+vaQ-fzJ+Al_^sZ$MG+&EcShHBGkT$i66^ zmzHg1tV{B$0X7;jl#pCHTL*RAY&YxRMFOlY>nF$9^~_^{bm%NBCN{7hzp<UA(pI`i z_K~!7xeJGjSI*I!-P8i)f;oB-pREDv*sSf64S59#TO(zuky2Yq?8{cp;lW(-a3nuO z#fB0RmJlq@xHqq58jcq}$lF%ZVj*|j$NoR@Bk+`1S#9WuseK5tWXWSx<|)WV*#sbt zlz!l7V`qb|kC;UkcG+J(mRHEqs@}WM*3rDaSzb|+mX=C`CC-&(G(+m1O!M3TFDcRk zv$We)x#Y=8_27UwX$>2id8W$|Gq>m`H06qHGb)zcx-0Y&Rcb>cRm3j0&CP7VS9PX# z1*jm=_3P!iGqsULtCQXc)6SwA5sQ%7hmlz{z3rl6fmiyXjcS1%r<01;3*a&Z>{JS> zXwRI@J2sR+Qgue&`czJ~bg5-$*+I=nRd02ag<Yj8Y8)%e?vyHOv;f7BT@mqZaa2GG zD^H|~j+#Ug>=KVtH1*)Jt1#wjdKGG4nl`|DqiD*qnTqH0+|jklg%pvE$!MCWvTSEk zn@-v1!X5&4HcD!;`&A1w9`$duUt5(sn7KxTtM{<!SWRBs2Srl*uv5}fxi+tIahi;h z169Hfwasnp%g~RV%QiVy0olpS_G$HWiY))>O@F)_BNx45Pw)}8f2e)j^!!nIx=Glf zCvrw5V&&`0>#d1AII1?7>8z`QNV`!h{1e;LE*e!(7GU9A=3qJ-rejFdroVQ1IC`+P zeBOL(?ebVtWw<&Nu8c%@8C!>b6=_X*C|n*cbQ()%f_Gd+)=HsO<B(lkvRf(bVQJ?I z`kB#cFja14W;8opoith_YUUzRRol_FQL1DkuV9iUD|^>7Goe&B^FmiAc2+hj>B$x+ zpH1quUPyj|7|qDqxeJ$1Ti4uLYT7&9f>BwXoAg?`xMgS8<`1%e_<4SR`{2^t0-j=} zG3p)3ZC#!1ybdAl2GtrdlW8X@E5^+f)YYj>3*OkJR?lfC@+^YdPa?L$^c~Ws8|*dD z=j0zr9%yBr#-)vbQ+icBX}kM-ldUd1Tk@UqmfC~HWf$7_)#MKh1Xt+ohW4vh=M7Eh zaxz3s-(bZKYDy)qG2(f3V}7NNYUI&bOW!0GmwYRw;V(_Esf%YBWd~l$GKfmEtRS&b zcCUR<wmRYMBGq0`=@H#NQau8!iriBTQ@s!wa=J!oI=UkeOD2Yzo|#Txy&3_-$qPx+ zwe2YDn6mbU)qKiB-z_ourmc^BV}D+A3vFt()wpi0Tn<^sIN!qZ%<}4BTSsP$)}GCx zy>_THcPI)a1xMMb)E?@jH&~)i>Vey+epeW~f?BYFvJ23CTT`6ghK(<Tml6>hajJU= zjBHbzyS4W~!;*G|$5NtSIOXmn7S)o>9J6fs()kM)&0D^jQ0nDR_JAMd7uo|W^YZMI z19`d0Kiq$S-T6e$@MBZ~^nNb0AK7$%PTlkVCZ}(U&6Up3X_ve-p&4_n8icb&Ns=}i ziKk;fKAm35>Dsk?M8>N8?5vX)JI(ewccs>nSmz?@bESGkgUEst^PM;R>62=sTU5V? zz$E8%&(b~7;KXohK}yxMhH*bSSUBA*uXZ6XqGuA)<TKNhnclTP$ynxnQlcA!$Q_9j zbxP`;+PSn}Ta6FPb3Un^;Pt_>_8`woHPEU^DbrM0O^&V1Y|qG?u(7SN2FwD=ub*!+ zZ~am(a+`WnoT+iwoQ?IkdX5-~DP^ARP<{STyR9xi51*MUvKb9EOWC*Lb##L%i%Ko* zIWRC}2DR=4<;`7E9NBRhHyfJ~hu$|xRJ<rcgp1lX$s_&?qH+6(wb?`L>n7(7<9SH^ z(gb88Ti=&C9%p&5tRYQKl4jzYN~eJ?!Z;#i;H$**HPR7PF`H>)_QCb}14^`i^M5O* zqcg-bM;w(Xuiy+iW{gpZ>sC5d&pRRTe;Z3&&33K2Y^7y(Qy%|svD-^&lTsRz@OV!8 z=G47j-H7uJ0^X-FyQd|hqY$enty&ETuoz~4w#OgfYKd#lNVa^qD1{7<^yXUgUJ<;g zYbWOopW+tY>D=av(I{prN;W^sQ`WBkWpDa*&akMMOH!6XF{vBnF+O)!q+{!ixKhnP zcVpPA%z``SD)lOyK7{6p$}20k9sQf~a@(&*LH`}0l{rF-i(Pe`?5~j<?-c1nZmJt{ zT4*XddT%{=bq3~+$VnJ?)9p(2rg+qifq{Buibqh4VbzN-#W1gr&2`>Jq}?CHEY2;F zM$;Z)(W~o9Q!PC4PAgo+23~opMU7qTOTNq<ydUSBxa~`p<&UuM8k{wf2RO{zGgY7H zY_TT`c$m_+@Bn37t9Gr^T<UOLO;xq?3gneyq^xjtp}M0-uo~wD#!j#r9B;LcUJA27 zm&QC)>B!C_4Fb9HmsatWjUr(hMXEliUXhq-7}6U$LX;j_b(CTZ-PW&$v`V;Uce6+# zW!G7&ka1zF*gvV!&8F30d*b#96LJUIXHCc*<_{*{96P1^qIYvH%kziqxgY23{5HF) zj(4_t<-6OU`t`aEDqp=3w}lN?vWY6ney%uou4k*1+1HlO8*ya=Rf+G$zvo<$Z69|< zZhiNFf8~tM_Al-({XFOCp;={%?VVF{hbKDpGb2n7;f&C!iwu~eXQ#5PB&bfbZHpds z;k}y4msAMVdosZxHeb0V+8dA=7yYc0jP25{ms;z2V~~?nf=GF53Wi6XW@3N0m|UK{ z;(-C2LgzlmK~{NG*%IGREjGyuXW5i5c33Km9J`lvr=#zYv4SUyYRW+uG+|2WythV% zH%bQLVQM9p4gJ#1o2dFOnu=E~z&H)t6PKFo;Q<JzL79iE6G%;TjUhcrplry4ve5;& zHIh~;UW!ZekR~oqFKaJO*N*#!Y9{o|<3OUFQcjboD+PBkZUCMUFZ|%uQPfDww(=W? z<o;^VjgxYJnUhT>?Bfs59X&9KW!;^6p>^E8;PBk~Lh~*>vVD9k)-LHZci44Pb1%x5 z_m(oK=zd{p?tKOR#rDNjxrgO4Rye`x{!>-%==~Fi&Y4ppc1jhN3O6R7nwMEG_WW<7 z9>@Sf5Z_IPd-BQrm`q191=Pfh0#_ViXzw4-gLZ~hb2=c$lU34GDez$PMxLCqN@P5S zhpVkCna~oHYdQnO(AGlx{r}sD7=!;n8%cY`dJEP{_Mnzxy_(tNX|cI;Bj4oR-g3pl zlC?QUtsEsf)dpURO|1Gx3-e~qNd)ceAB}ON+0-jrdG!|8br?x`$GdEPmDh*M24LAu z+M+hZu2WaK)ScdqzZ(hLskY0iy|)Q&GdYyVbWrn7@HkesoDeI?q|UwUwvBU#*ybkw zixHK6-*_t1@gA9OQ+tg&RML98tK8p8YDdeySlPmC^|(p0qxaLA_t$Gl=+aBFsi+#r zhHPwZ<eY4qZSifh7tYIVnb^oHG#WbFm^H-gNSErqoC`zE)P`CGxN&~2KhIt;HTP`O zylt9yk=+@~Jzy4d$Y!a)II&KXq>*QI-+OpWOuf`e41i;py1zI)cjqzwaQ8X?oBOS@ z!My&IsXcn;dF}(z_B&7KR?g|=f_04EdcRmYFeW6Du8G~fx?eBh?E|059ho@MaxX2! z+;oa_-_ft&L@QamJ9R0Qyp=53ZJo$74O8V$vW#ag+z3*kB!XT}dv24Pr|h=m&omX& zq~2q)mpzlaW=Jn_^|P&KatphkcqVtE-+#RQ>9e_={eo%-s9K}6k9aQkVEf|dau2j0 z=3`87se0*@+Tfr9SoOSrYAIWOF!w=w_8)Qw7r5u`U;H6=!rEREwTeoMdMy~|`^oC& zzj2TK@gH)Zv-4iaeQ~<yfssSh3}sSYao6)~$?krcC+!RWz%o<Oi@68*3nT-UMLz7v zOSzv8>n$(I)w}IuU&<X~FMm0AefKRd=N_5UJ@AjYZ{#F+ySMXW6Vhw&3Pj#)f=}6Q zG*G>j&w10_G_!e}Ii#K;)jS-FU}hdob-ZdRje(kU!ZMiWHIU*q^T4inQc-JGkM!8O zM}v`GZd%Hlls?ewq{g>xT*ox@&MCW+r`$cbNIR&k8Htyo3ZUHtc`8$v&i>VL{*iX| zY9_E|*xCC{=#eb1@H1~vWVuB~pl!*$>xalo^Lm8sD~m|Lm8QIF7R#ZW6#YU##}`Vy zX8>8bj&*b$!*iM2)H~=!NNV5m;cf}&qg9M<Wc*%8=LW0<ow_H^j9(AIuTpc$vgyVS zy_P#vuX1W{Q(sg2wWWSkT}eR7G260d5B3k6AvTK18s|0Z&H%&+6-TXyYzXhXv#i|y z`&+pmSD=ne@u;`QsHZ{edDATKe8spm$B(y)r?AAOCNYgd*;n6^GnB``<dy!ogPqQb zpc?EuYYDRUBpRXpJnBlSivq|aa;E-wqlijJ)Lb(cTiJ!xGrN6MWkNYtc&0qU+PuEY zdAOWLp`3L+3#)R5b!Xxl>u=UMGV?}PLPnYD5{(jnPvz7tzuel|Gvf)gTaQ=iAoNn9 zjQW)G=T3t(wD1hKv&<;##2a}Ejn@WQ#nTyjIh)n$gX1YghxBjt{W|0AYZtb5QX}%l zHP6vhD>S{|lyW(vOzARa@Fhs3yka^L;CJdMSi+K*BTI1|S*R_vUmbH=#Ho1u1?>|j z`iFOCzn%Nf9D8|*ztFzA*dMS5zneSsXwiRH%alKxsc5=2IO7F*Ife5ZF0#Zgow3Xz zrk)%xmIIt)-c;~zZlS-V`+M)^4qxeybYFZ(-cPNp%0m0vlLF(rn;P<R1NK!dc~iUh z9G^GLZ~wM6ucZ6gmb{Ps_AfW(mDmTL90+uO)|z)smVI#t$Iooad)U5mGl3rL$a_88 zuH2e8rTgj4c~QT;b{l8cY|Zog?Ij7mp0O?Ofn0n0$$Z_C$jkBDU8nN((v$O^^!uyq zy&ZYQw)NdWLHGZjnpbqku$7{*YFQjJsb*8fFNxca&B|MyNX-p1&C${>D=O-}2ebjo zEoJX}(ao_!dQ}PS@hroX2h%1e_~pOau=A@&&g4W@p|ptZb+hxP`?JE;Hqx6sz=?`h zsFuU*hYrcB<Y$AvI3#bly>d?82X@EYyesVG^Yc!zk6)NKviqS~`RlU$HTE5cF^T-c z?*{sJFPW3ymhZ3a=FET+e_i)u@%*-etVl)o%pLiKIoXj=p}pXHfk^icPRZ}i#YsBk z^!%(``!|>653mn9JrL|Z_DA_Q2K<%X!_Lj`Di~pk#@t3so*Sa$XjMO~WIy^?&V(^3 zo2ykSUXovSg8a__xpQ0h85iaE&sS@Xl$4na_nH14(VET>izmj1$4Pk+mUN+=Vrith zN@?$AoUe?l3d3Wk&JW&*;gDP|kHy=%I@sCaL>V8Tr-0mu>@~AlhEp0~6+5ejCih|{ zSm043bee<7CKKz<#u2r;;*3c3!U8##xWu;eCPn>{B~=FVTPT*Z_A_^_tN^WDv~a~r ztJ!}1XZa%nL3X}Kk73WgCVwz%SMv4|)ys*vWO3VMKqn!y2<{q|(o8kOOm@>Y4qya5 z`z1Qt+RIpNVGj(E$y<nVuT_R6HuhFv%eSyn*uv`oDT3KEqQs!4VjXuwk}k0ay}{-X z{nJ{#70b!CzQviyb<@)GA3cS!cE!9y7tdS5PX(pjo_ZB@D!aVfdPy6T9CUkbwk6jr zcS-AGF-ZpGtYfWb&yvinNX6*&6DgrKWzOQB3a?+RLr^jGDhMxda60Cmvd1+*3<;`0 zud^`i-Ky5EL}isYu`g-2$?GE2O9e?f)tyRC(JuNCokiyInRilpua{qBK8l>HD5ZGH z@iB!<sM6ux(0|Ya(q$6F2wRq~v_GPh#k`I}*Rpp$q<5jA02^Wr$14qTGFK)UFIHL5 zdvHcmSm}BxYcJxncU_iW<*({~@Ur|PbL<~ogIPK0jKF?&^)K?@wO_n0e?WKS%KW2q zvuX?NS>F##v_HBYFLG>We$f8aDf#*T`{FhES^hfvrR(ya&#J8GzWMt6ty$TX*sM!_ z5Ex-EzA^u=n5^mD`GJG{>+Q2Y${$tj&h|J>S-p4(FN<uqZ4rZEObd^YFfZ1r*6+%@ zXMdD`+pr_4ELonMqpedsIH!x=y|t5lZBiSK1oYdV<z<7;kL{?7Y=6h)W7o-UC9UMT zmbQlDcUwm-USwa}o;`Fm)5pALg()QMdTfn1hGi*Slw9VOaABO-RBPF&W~KC$rC1=6 zm%3$_n!Jw;|4i$yQFQy|d4Z9#*iD78?oO7`f4U6jSM+aYr0k-ye#9mIuG7Pd{vjb* zIqhnWZ;(8rK=C*WTF&E#%*e9crZ>r9JVeLjmPBJ)gWAw1nNaph#NFKb6*rR^{T4qx z--=3iFiWNl7z^2HMezt2m(<ADQ$YKf-}wi~l&@;a{G6V=*Fz^R*^@j;mqTHtGFKeA z64z0+ZW>;Uxd^phx}GgyQUhA%DwMojUw)jA*c?~QNXNvf*Zb8=YwVl)1rF>l#@Lye zD77c_4@9!+gWd7|fqH+=N*OFH`!ui6zUq+Nf=c#LrB6jl-q@Ze6O>pkeyz&5TPRm6 zuLPrJyRQreE^WfGS=JdCov00>+6C$*9c<iJM|(w6)t1D9P>9Q&>N1Z2glgo7@j<(s z30Ia{m2CA7SIS-Lbi6=<v~DX1@nC>N*1AmwEd|v<^3<}epfVghB*+iLgi*wTNF`qj zogaxQsH+LCV`4KFZRM+-+ZC8LB0?Oz`#ZvO1`+;N^0$h=b+z`wuE5y3x}ekv+cOI) ztAo0yDF{n`<i4t^;M`y%8_#$Ol|mPUt2mOzTu@bIU(&^Ia#eCd`LS`y779#kt#oJw zHNnO<6&?{3glmHHg8Dr#+{rgoRQ<?C0qN@()p0*5R@Uf4c|%@7h^(rtAf~FC;QXK( zFcwHj*qg475{?k6f{cPBIcW&wKWKjPP;zx>kgiAEW+l*&R6$ry$qVSTkj=Ta&bES3 zZE!)5_rq!FR>@aAjC2wX1s4W+8j#=jqKx)0HwOw4LUSt(y&$COkpnfxCAF~n-a&nA zj;ZQb6&_p^Y-w9hC5wceTB(*(I?3wb;^4+;yQ+oCI$aBDsh}WS9b6J@ZQBxUCaq9V zc08jLOYK=(0{bOuiK!y!dEBKysyS2<3978gQ|gt$WkH5D(T$EEf~pi$4kov=P3ai5 zvpnduMXi72QgTrxx`>WS2iehBAW>6a5zdAxDmgnsPVa4ND$u8@IK{+-XodaCmca0Y zM1y#!V6%-k9&2fm>RAyKGojjo1Q1kuobJp_hg04(;>{<-RFXjkk5mY;;qM_j8WqYw zy@hEf(nb>UovNe~gL=0n+ENu<88izfRHlp+r2Cd(NkODKDEmoJDlVYO;UG@!dS2;_ zRMc)KsVr=3L8K;lWKgz?vfnW*ACd&eD6k_We%n51zrHmvGM5vPD%-y;FgjQjl%Bgl zgcz!{CvOWJ8IX;NRW-G>_II}h4o)3Cye(k$bFS4DS^nfPKOAQdJs~jA1gW#jPY76O zhumIQQItIC%xT^LbrmXr6TB{DKX5|eAonPF&|u3Pgzd=oK*>NSCg*2_`PpjuQCa6? z#QxFtK$QvNtN>T(UnqBiRN5bG56m+`oFBmrRU|h}9ARRqve%y&SZ0DaKZ2Vcq}twh zVxV$>6Q{F=9I~I-78q$_sj(OD2!sbYL7X4K4LQH??3}H&uh|ipW5Sr<wRV2R*a=f- zPdF)+8)rlqc79%5g{iHmurE6)FjL3Fk={ufj(7@QTM@Dg6M+RLjPql-;fVevb0?m# zeO4l{$b>P!6P_L>V)r{aaJVjIZAHX>=Olhl+qu8eKHYPzQe7M3TvI=~u1B(=TKkfY zylM8qrvwI?#2hh)Bl;(totvud#3_NpO&CYc8DVPdPd#DG?}w+yQ)_QIHL%EJv({d7 za$uavn5gX#XNVn^j7_#DpJwW@wxZ4(I8@;Y9MOR<J1sEGi8)kZFFDl}M<`_f^)xqC zj^vt?D!*i%N|gzSL-Ho|7|I`gQs6+R=pj=V)%r)2wRl1i`?>E1#>p^#lnLl4eOL!H zsa1MXtFiAqEWgOMziS$4ZHS-Zp6uq#Q&Hhs`|)`Gbo;FTNrkPF-+ednR(s;DvuEwd zx9m>|YcgXhO#c$Rxv3^~6Tc<S+`=3qz8d*icoVGF6D(vu_`SeX6Rl||`ZwZDcuze> z!gj^!fhi`uX*B$FHO9gTANEvbBw`OgH-DUc)9G$G!xi?Y-*c-g9P(tQ(thZ&{IM#q zHWIaA)11^#(whW4Rg7WXbVgvZlcBJwO@5%-lOgqc-dYhO)%K(-^T#9$_BXN&n~F`p z$5XM98W|u}IkF5_+B42b<=<1Oky`uZ>+%n@AN_u+uvN*~Q;gulo=T0>*&}}tILyRZ zEy2tI?M{YRzxqL7lzYk>ji>%9L-vgB{Hb<~B#jJACDvAUulQkLX!b~XV71^d_GGS5 zznNeyRX>4bEotlQZa6D&a!$fsgV5bP<4N^4LWY&%9Wc(o>o=SHoskG@mgb#4akbzp ztF*F`DSy4|lY=?8oF8+Z&)>Cti?MK8$-9KYyj!S>|H8h?gs+y1t60L6Px)<Vzxp<X z&&BF@pbu3MEampazS*qETD~E^{jEyYXCp*V4u#HY?LxH}Y?f79SQw3}bzNCdl_g?} zROB5>Woijk_SLWsEepHyGt`oISp-g%%q-PPx#WdRa+`j6lq_e<OP3@9S(S}(WEPP- z)grN8g^uwSr7mKZAG?+}8?_Qj?vQ0<oy}%>*_5SnmAS~Pv(rIfy>6aLTvn#%60Kf` zmiu(XQbsAER6&=@R?h<IOv_@iEF5q2P1mo5YNmXWLz6oxk-S<;7Rhx^JDdgaEu5kB z@;Y_<y<}jheM2(P>bJU!b_WI($ospRZ2#Us+vwr~pDzSA!ric9KcDYtxCw5yckT_0 z?Z2aaXM0ooYM=bGAK4q2mwj~AqkAq1+?gF%+-Bc%39}31_xv<anRR1<z4L+KD0|fE z0m1IIKMh>sKh8vZGtu1wzlZXEKHrJ(1XT1VPRI)Se9iD1sNCP@yAT2ce7-es9TX4r z`F6ucuy~NqcLjU~(F3>#CJeSue!BlC`-z+O3)+j1?>EwJzbr7>{kFv3`}BV5Fen$! z8D#QvEBUz>?z0!4J$#t`#M#4#7xX7zLD=6u@0{V2$1URPVpsx8VL7aT@4zvz%6@X^ z@X0mj^YsGw<l_(C{^0F5o_qX_$M1aZ@oOG`<L7Vu<mYev{JCr7%$d%aQ{6MkojHYx z!mPk4*~hKV^7--t{-GNXtMABwf2=zDXTLgIxZ$cPhxqihio*_;>-w&Z`nr49fb8R> zqTJ(Ag&WQtvBNoDdRVsa2v~C%qC0G;&!^Hz9QQtVkaRDJ49q;|8=(`(JWq!5bfP{t z3(wDeMl#BI`R3#AwEb83eEkd6Uwt&~f_?{5-$?E!uoo_YU%}OIjXf?od@{;AeBhvu zIQ|&+M_&fOK>L#2!^f6~_!@>KuoRZT5wILqKo@L=EwHn{{i_$Tw?BXI=k{-34OAtb z%jv7&TDr&R>#j6)oxGgg*IhlurQ?a}JKT625hdIcMs{CaT|+XZzU(kE*msTS?EXnB zR_49bOu|>X6S3@qB<zNBVGl^F{4tydzlIy38*YM|;TCuWUWM1-Q}_%%hcAIQ=K1^} zEjt@>z=Cm51mj`SLOv$Ld^i*qz&dDvMreZdumQw890$k4>2L;oAASI52JJik6)3ge zeL9f0>|U+a$32kWS1su}S*WkORiK6SNM7b$_OVw6hRsWBluzYm2J$(LvZn%gYt%mH z{=k8W9xd5azT0q|#B@H7)QP$I^o7o($Y;TMa3Nd*m%?RmIot(z!#!{x+z$`HZ{WdT z!smO4FK@t`@D}WYzrZ^%2-AB242Ci&hiMRkFhoF1bQM&?a##T?;Yc_Nj)vo56KsPM zU^|=(dlG!ua2}iwAMAT!-wVHg{P*`g{`<$fKj_}~`+fi0z3+p4oVn0F^CLO)f}A^r zb7J7MY-+IGJ#FSKbY#7oGr22~ecVAhfGbj6^>+pOx~=aPrn50e-|5DeS&^oKhf5nw zc<uPo!*a36)bLj;jxW=4hedK1fb^6<fs5c4xD{@L+u<&_8{U97;Vobim_|vLnhm*- z2l*h~Z2{~DlVCCwLkW~Z8BB*6a1eYOj)J4%7+3|XLAva<a4eh%JK!Wpz^QQBJU-5b zb6_W234i<J-=2T=`3L^?{2!lx_Ks(-zvJ0E^qHSIXMXISIm0=#=aazj1wY5o^j*=} z$4%AO-FngWES*dGUG|!*1H)E3tuC|j^i4NtP3y&on#%p^8tkL#`@&NEU&2*zHCzMN zg19}`!wv8RJPA+1@8DVZJ-h~QK`w4l9^}I~D1z}Y5hlT85Em*@!p9Vt4~N16SO|+? zF>Hbkh{Kt17Mu+`VHYGp{IGLj4_pV=!$<Gzd*_8mUbuJPz1P2R?<4nKe(%0__Fdqf z`=OlU%*pm^cLWOeTouS$K7w5LY`CJ#=`~~Qs%~dv^>w#CReN%plYR2Ffzi`?*w+82 zS}|3csR}w56S0!sy!$Fd1UJC1;YR3&C*djh9sCvEh4<hC_#1o(;?90NkOuj8z8ru* zI~ayQAq<BRFa@SUDa?mMVF4Tlhr=QepLhu@h2x<GHbN_Gf)4l|oDOHePvO1SfB)d` z@4M~3Ywep~42-p3ye%*x@dM6(RRsj~b+-a^+c<~Z_kLGT>1z=V)_1t^ID-BU_(OEx zeOqgt-91|OdTGk|Ln4`<!KH9H{4e|*WW@0cxDtK?55hz6Fgyy6!Bg-DcphGWkKym| z5BLQB1)qY9Tt0^{U?iiL17Q@5PViyDI5-$)!Yud>90RLh4XlM@L54r;paHy1@aK>G z{5;y*S#AqF=><-4ChnYZy3bDsr)zRT3+N<$x)%ZI+Vf}JhKrNl?xa^+c37V7*?MtW zsU)4!cgeU%b4tVn|Mxtpe4U!Bb-pqYoCy77I0a6H|AFtpZa5z<h0EY_xC`!vd*HqU zXt?+D<pGdE=!5VOya8{*Td)uQ0`Gu`Eeo<?G>n0<Fb;}fJWPOzFbNKUIWQOI!Dk=- z@!8+r_S-9e``OPv`|-~{``NRJ+n)XKvk%XZlbqTir_`B^&x(hnCEUU&&m&=vfOTEI zSD3B>`mPRrHnU#cQRl})<gO{H!D^<Zv@&kB+e7^e6JIeB?OjX0t|@O-`S@l7SN1Wf zq4gAz<pNj;YhW!L3n##KI1!`?B;aH?1x|(2;9}Sdm%vZqGPoRWgWKT_cn<ym&%=xG z61)tr9K^?~@EUv$U%;2ZRGBXua$pDyhY>ImDxnIhhuDu@7buyUc>Vd;JD+zQ;FpG{ zSD&{j+GB1GjO#ht(DnYuVd*#OdT-KaGb&F8@jWeh-*ux?cw1>+qHi5By{vbH)WgyB z^{N<U(oUpaUV-U|=Un(F9EsxI4y7diGw>~-MC;&bn1`?~0N)7C!96fxBrP7^f`!aP z{0wqN`Fw5g6f}&cVMAT_rdtAM`xDh9QVVrZ50dx{I0%l0@4zvz3XX*+bU++B;Vd{C z&VgN!gxw$o*aJ3P4>!QC;YPRxZiQ!t_!7Qn`SN@C0R9Fa!pHD;_y>p-K7oJ1P$V%7 zhQkOL4Pzh-pMCV!b8kKV+2eP<b;ENveD=|2SA1m7oadZ5%RO_FoI!45vl22>wFDV` zl}&jPS#sUAvs$-S>a)G*me!ZwQybp9dad}Gj#>MT4%|y*Jr&ifUwydYndZw;&5#Hx z0+p}?mclYv4l7_Kh{}Bnz728cgf7?&C%|?%A1;6k;l@Jxjc&f&1h>Gga2tr;-T`;Q z3-BVm1TVwu@JA>>r}u+?FcBufWGI0tFcn1i%b*-&lJ9V!g5Rb(Uwrh%`#!rbal?yO zJbDGEE^<$u<(xUqJwtV;{^=UJlXl>(AziPB=(D|4g}&>4T9NmzA%**;+y#5poq-Ym zA+KF0_gk%;uJZL&wIY>8uo#Yj<<JQy!zpkoTnImbi(oHY0zU<@EQw3`xD4)wd*EKU z4<3Yv;3aq&UV%^GU+^h>4qw2R;KM5UAq&R9Sg>FmOoT}=6J~+(*KhvyRlok}RlmOK z^#|=c?+TRmW!<kIn=W%*Q`P!xFE!P((P&}bJSIJ!OkpNGHvB7GKyM5Dh8F&7z4#fD zwM4Iz*1oACui0=6tb*0B7LJ7|NRQ9}jc_uY0;j@ha5|g;=fEyF4=#es;aa#3u7^iq z_G5fJ4o|{U@H>#M<{5Yv{steyNANLx0{?=6bVI}7K>Lb&0<-$6#{V6cE`D$CuKeUQ zM?2H!LeeQWe2q*p^=eYFsP=|?1Hu1jE4<1|&$-c)Oa<~yIS?rn!FZSe2g6L51&6>K zm<!T*&xb>y0U9AT98=oFm*e1g*b3X=1lSGd!XEfBoCoKFcmNl|PvB;_1#X4g;4Ziu z#I1T6UV%^GU+^h>4qw2RAYO#OKOb2z2FBVC-4|GtaHf%TlN&xk$)T4fryJM><J0A& z?;4}e_HtLxhML*7?A`aX{V%;Sx_<j5Md`_9R)?vkUKJ%gmO@%E4kp4Rm<h9BHXH-1 zVD$*9Wi4Nhg(!%#)c}ofGMoaZ!f9|ioB<cZUbqBqh1=kExD)PzyFnbbd*MEK6<&ka z;g9eZ>;oTehCjeZ7L2m5eIRgDU()#gq;zR$;rG{Pzmf2DC7wMoJ)TUddadMtd<b-a zPP~`w`btM3g3%*!8prTu92CKL5U+P4OoBsT4$Oslun-P|D6E49*a0U&0#1d~;JYB6 z^Y`F%_!(RZm%-)m3%C;Q9T}m<_;NqI0<Xer@F#c!-UM;K_rcqcD?PY<^Mir!EKF-l z|0-5u?xm!<8g}UGZqM&kVtds?|1m$qG?L6}*10%sa=J43%JV2sJ_MjY1Ysgfg2^x& z4uLr^9}a~DAj6Tv4x}j^&X@JD0h-}BXoWUNz{zk5TmTosPhc-x0zU;A(_9Ld!QF5V z+za=?gYXc%3a`QI@EN3L2XB8Eqt=H#Ieuz-VRZ|7cS>Is)zf@wp>5K4xK)=a+W%?` z`lzI@?D|SY6rUeR3;KdDemvPM$OaiB=0YA6!FZSe6QKmAz~Qh67Q=ej0L{<>8=)0s zoY@YW;7m9R&W3YfH=GN<8bu4bnlIPD!|+>p1RjSc;7O3d>hIubcppBnZ+;}R1-)3- zS4nj>tku`uYDjNEkNzLEpjfHOrJD<1`3IEeZ}1`f1O5p!8FtKq*>DW3g4J*=L}4As z;JtA)Ehxs9Q{YrM4ZaI!!1v)&xC}0byWnoP2kwUl;5Q&M01v^#@Fu(k``~T(GyDY# zaY%>4FbF{yB2XRRqXug2`yUI;Ju=OvJzVkCHL_S=cV(d)*b~z-@3PlC9vC*&i8{0O z7=z_?73{rNvq3(+S%0n1{cL$=x@NZ47pkR%bx;q};oEQ&91Y)rV_+4W1PM4<{+`dr z1#lr;413`c_$mAhE`__`Zny{Tg$Lj_@I1T#FT&s9AMj836h4E`;S2Z@d}HwiU^I+@ zu~0PDcYtp^U%m}T!O;-6?|&k&YG%4zT=!`@?a(`v)wOX)I8!S2u}|WI^-&x8ru#yf zHyKfy+UjX5`<`+0)~p#|CERU3A*mM;sfc4crTi1D#zVgs#xlm(1doG-d)NVwKrue( z3Gf2U#*6(W`0zD4;CYyaoAg6?17^_Y{TSYZ<@Cb0!zbNcPX&JHPsB;96S`n4Y=aX( z@^K>Ufb-ydxBxDMi(xO^1$V<e@FKhfFT-o_I{Xo&EN{S@kVSd2AqR3HVEGR574W4F z>R~z@3EzTm!*}2qSOp@GHLw=8!-=p1PO|TQI<O$4skkapQr(+M{IaUA+SP`3n!cXV ztgox=>#l)?qf&DwN>O~?D(_=f%V<)jJ<xfm(y6(5@Ku~dX%lcVTnu~R61Wv^gWKUQ zxEt<)d*ME~A6~N()Cphy2!DdNU>|%6pTXxa3>_N|BVZJahA|*IXu&u*2o8psFbn3u zTv!ZCU@0`iad14eLL0OX<U<s>1LAPD{phpQTbj8&zqT(4YnhDJ*Ik+Dwz{{bue-j! zjV4knS~`jGIx;tj%*rv9=B;1Tq}>+X`$#@=HpM;%cET<=cO0I}9===&zl5vcH}D`l z1dqU@@EC{zcmke;zrwrl9=s19!bk8Kd=6j0aE!zV7zv|c42%UaBIBS44lcra%;d`~ zm<@Ab9xQ>Sundl~fBjtGTYWXKe$$okU3uv$Ijg>}D$!CNq_4YoeZ7>WqB3{c^e*PF z?Iw5E^_96E`cifr0yrL85`45lJ8S~6!*S?@b6_Xzf+Xw#8-5N~z%SrFxE~&Xhu~rO zEr>0D6dr>=!(ZSX_$#~*A3zSZ6w2iz4=fl5Qgsty5=;i^5K3SQ%!fnmo1f2gFi$+F zuafI(`ErK3?p8~>gZaY$k%O6=kqck>p_FF<EQCd{7`_GHhNGYZ;?N0OU@L3`=^(d{ z$MT)XmmkA<a6ZVq&P8xBbi++>GyD#ohG*b8_yar-(#yUGFTp49FZdKb10OxFAA&F% z#(+CKyY0T)Ubk<5F;G<C`Yf{UH+;`afr7r8)L&<&*Me?R?fPsl!|NVe>uewR@Zj`# zG8@@{b=0<5C*DhTeN#n3V<%wy>iAL*)8Sy439~>PnnPd?tc7DC3hST=*25X_efR-f z3YWp<a0UDVt^{$4u7Y2|!|+>p1RjMaCt$gr;>(Nh61)umgiqjK@Hu<|UxIj6e#n9` zFxI~N<-qdv`HwY+e0Ae`ZFYKfq&Kct{$q_xH|4ixrKe{4txP5GRg9%P7L0?5FbS5x zQdkDZ!ST=nZO{&zKs?R(L>gBoU(SJ@unUr~8_tCrp&M?3r{H(+H2fZ(gFk?{t1rNd z@K5*z{so`H7w{$Y!;O`hzaUHow}IKWzuNcw$K!L;g`iu~a(%WJ)$FS!Ju@dgo=hSB zS6k9iI`Lkz>njye6i=chmGGq$%Ag#?{jY!!EQTep6qdmXSPAQ412n^F@Ll*HI0Izv z^#>qBh#$e3a0UDVu7qF0)o=~mJqcaAhcEZSOYkzh0<Xg#;ZGprkT>Bi$Yvap1G$g~ z1(Q?z!|i{*9vIY@WxV~+^m@?sIZL1IML@bK+&jOwyXNb&z1;QR@a7+ym!1cn>Y?EK z!EhJ>BcT$ipc?9+9;Sl~;0}U=;X825WSZS7zO060Aqt()1)Jd<*a^GfT-XCP$SCkU zI3I3=Znz0<hTGtF_$@pFkHTB958j4%;IHs5yf=`K_u&HwGMwDse)La)HR;}b`C+Qe zy+~Ns%e4#BWuj}dQlIVRuD-|DI==1&NX0w;&upf~2KH>`U+K+9_NRaYU?2>JAy5v} zpaKqq!(mZ^kEO5-jsO{KuYi@%4x69@;;<REz<F>!TmZj@8=)I+fm`7=kOBK0a3{O~ zFTzXkGQ0w>!ard2Kl%6s2A7aaD1_lK0!G^RznM9|HEQu!SJB0b(j}^^s7RmnRFS>r zt^b4ht>VM`%B?RXB07*#w!woifhp@G?1QCDgI^0J%v>g6AIxViwfZM~3}@2pEEvY5 z-O2C)%wbw@7wm)i%miHsA3!csNx`rkeLGNM5BwcZu+6%25Ra_A9T;iv-4{5<-h1Dm zN;y0yF_J7uc1FQysDpZ#4l`gT%!0#V5iExFumPH(1vWw}NRirM6PyWW!P#&QBw;sP z2$#ZTaCwPuj_)qM+zt1@{qO+%21GUw!Nc$-yaoH<ZFmR%3O;1!pJLzh=fLcU>$aNt zFWuJ8T$-*JG$1#mUHzB9IFG-3>|efawr%K=zACowCfm0)=&doQX4@+Klr9TK!Dtu* z<Ddw}gJ{k~m;{Hw9GDC9U;!+IHfRS~82KUm2+o9aU?=PX(Z1bqE?m2akL%!ixB<H1 zCb$pohX>$Qcnw~MH{eZp3q*zAhCf3dYMgK1{Z6Ly`Na`^Nl@3<Df)UJBfG!;hn>&U zm!)fmsl`l#?5oJ9JOL<xe$XGLLMfENp|AiJ!Xj7<OF)|RvZ>hnBlxlrTA>Zvp%c2` zOgIb9hAZF~a3%Z-u7+zs?80?$Jv<Iiz?1M4JPW^vT<k?2<ij}dIG^wK?R>VaOc#Q- zoqt==S4H*gm2}m0={wx2%M{{&)%pDA^1ia`D-}@`mEwGk=gTCR48<UJb_z^|Ltz0d zgu`G7EQKa$gLc>iKZGB_nQ#v5gk2!^dN-U4*TQvhJ=_2{!Ofy6_wnU^cmQ67*Wh({ z1KxzUK#cy|_O<T^W{pjobA0t%nI*Ibeh?T|<plcocJ0`!KKPF{rM?=C){5pM)3wW2 z`ZfjpGvv{!<wF1ppda*yA{Y-7;9!^uvtSO)Eu$&T<BN2Qhr$AAgcvlzdN>|hU>lqO z+u>Z;12&uw7r=!eJ?lkqG29Bb!R>Gd+ynQ*NANNH9R>#If(O9?_Wgeg%uip1d+g}U zDoXE+j?mZL7NT3)(?@0AWgq)tVA%LR)_uIahMKVV^k8>zU(Yd#sh}PWH*^36DTJXg z48+G60VAOrYM>VC;2<~{j)UW&1-=KT!x`{H_z@(|<U<^lv*8^0C0qr+f~(<rxB*^) zH{ea!2Y-e4;RE;(K7x;70FKT;7z9J05Qc&{Lc?JMR6#Yc_t^g3M}d`t9pPm@*)_yo z@^PTRBe7#Y&U`5M!S7^NhpEIK^7|%>Cz)2zsf>u^wgzfp1{?&dU^T3Pt*{MFfE{oW zBtTrhQ{Ys%2rh=ba0y&Cjn;8FUmk_W;Bj~x{tSPCci}yFAH;wB8+-@@@E-@lAUFVq zKp~6;3&z28m;wJEZ+9LS(;hhfe<n-LsU(D`ls&ubmuuhG?0ZCZm3_}tc2d^fqOxS) zmzYwB>{mpxM@W`bLe}tmy{B^B`~BR{@A3Hl@im?^?>T4AIq&_v&oa}WXn~e!g^Z{7 zuH3tD>cY`e7fwAD2_Fm9`)8v#<osXxnbSek&6)qNMsa+|zn2oupZ*^V-J=Hod%Jn1 zuc;$bD@WXI&=xKjjuCLhD2#?XJTMWuWjrm1FZ{6*t00H%Yp@oFa2Q8$6ncc?9M0nc zlJEpi@f<050Xg)4h1V#^(BBw^punsSm!=C7D2MW>fM(+S=l{MmZSP`8|G!FO+pvG< ziWv6g|8KCoXXw8d%FD|C?2!JKOCrB_dwCaF{vIsXX-3MLqXk-{4cbB;6}3kPxMCzm zVKl~K9A;t`W@9bZApn8cfQ^txR>26t2}B}FuJj~MBO0-|hU<8R*GNS=GVm7i@a!Ev z;WNG=Tb%q_Xu>~FN~|97U%8jlY%Fu;|Er+Z5C5;F{`byH=IDRi@tIdx|L(|gqERMi zgTJDosg+HF@^kztk3mi0gslk0HtfY=#Gw&4LNrEC^uma`-6<vlV=xw%aRqmf41Nhn zQxQeE@NEqnR7VX=zzod7d=%%BdU^ed>_Stt-OSjS-1rg5_2sQgE-ybXKRXjaNaf<~ zY%aYyaqZ8IbMNL{=J7)$7p45TS`gj*w;ze|9A{Blxam#JM97aq$F$YN91F#!kV}Pp zqg@;K$`Z4F7Fw(;&r0R>{TYxO@q#y&V=dMp7H^P-bQp7aw-8Ff3f8be12lvadcXz4 zF%qL-N#skQ7P8(ve{?_o(J`Ikt<}j1wb24C(FSc1jtD%(GbH0BUZE_xV24&{jlSpy zf2>0QHew6H5rIgY!fBjC+S8k7Z${qK>x^V9<dlnegvUt6E4)SqKEQ;0H-#mvU=15I zKtr@g2XsakOn@7fVi^`vX1-W~)d<8P9B!idLvw^c91?IB50QwE_yl7Lx)4lY3VW18 z6MaN}rM*_ygm6>zKu`2VKMcZPOv7|6!eT7La<r!Mw80QK!yO)&f~lB=+3<!BmS8Ei zA{0mQ{>@{(uAt0D`7R84gySz<#WN(M7}eAUwkVGpXoI$BhxXvte>C0E3w<yMgE0;A zqSzuV#xg9&8f?JEW}J4}OkgKY;WU)y>}^mO#ZVHZV5Q$(Na?55SrIM+Yt%qZ^n){o z!WHA;gZWqiKkURVgd+k`I0;kE<QIn}N~0XgqXOhv{>o^C#u(T_W270P_f{31RyTwR z&KQAF7>zL)hw+#TPwc^A9DyFEa2nA#ix}KO0v;j-FYpE*@d=;t72jamk_>98vDF+V za2@fug*2q&2Y%{<O_dQ^-A}?sT&2qg6~$qR(x`xnsDvtTz#nLW7HErh=nN<HKu`2W zAB@6iEWsY^#Xdyi4DPq0l{_GjiZ{r>TYSPdWJAlPo&xf64~(HeMHziWVOmMIXo{#H zpL>s6OdsBc18c4<JjWBRXDsMIUFt{&(}|N97}c3>04uuC;+$v^J*fRX**2#p+V&A= z>Y2_EarI0q3$yn8Fjw_^JUP`<N((y+WnfO9Th@~9R#URFCSQeoYNdQ8?W$?aE)>x4 zBhY5WE%Ul#dHupLU&DMuPp$hkOH-^25w(UrDxwmqp%!YR4(g&F+M*rY;fK}Oh%MNP zNJQZ(ViAWMFeW3aq8h5hp*Bx-&<UL}2!k;c!>}AHa7G_oR91~Mgs<Q)#Ni(9;{g)! z2pM>bEM((5jL3NfDokL8!YB(nOu%GJ!A#794qouVe5`G&X`oq0AOHt&1V?cdu}H)t zJi$}EL?)c|$BHYRwK`{t-UY)k8sjh?6W|UHc)=S7a1fVp8TW7>iFkxb?b)GXCOk18 z3$PH2u>^tG0CTEa@ecF?rS#q<=miFpVuBSMQ5UVz2JO)SozVk5F&+~z7oPBfH}>H$ zjzEtnoYW5}rR>z|P7*$aXq>@K#3KWlC_vpeMio>?4YWgh^h19P!eBUK1V&>Fyy1h@ zScCV^-aoh!6CM*D784ra6A(HxG)Av0E%y>~ZU6)VaS3rq#&f(v8q#4*D=dUku!1#g zAY14t%!MyjVKoGT5R4FP#ugmGQM^sMS2N*K!o7rhNhkN5OnRG?5V|RJwfC&?vxasb zI?G$bKY8}Ua!l8TXZcmRon^m@mgb60J{j;YsaP5UXUr6<c1+RO8Gge~F7(?198I+5 z=OOaTua)!F<T2H|6=Y5FIq%ny3}04b{K_=Z#zu+M*~+Me;X2~*f==fpTGR3LK&P&p z`NMu3z(ribUEIS%BqD<j>JvKCN%g}L$POz2YA>1?o?|>6SUO}!mYrptnU<1vFYRht z<be$bB3DMHWf~p}XQxdZHh`b-D<!&=Roundf^=>Btd-Sbf|*iSyq#rcB3jxg#pDT8 znLJy$Hj_T=<xmA}&>bGwh8;MDv$%r4a1}pLurJG@4j$nntou>eutjy$LnAanQ;f!# zewy+cZvr1)et4O5m&etUS5GD#;Srj&e(j1yx<zvqjT=HL>;nAF%*1sorIzq1uQ-XP z<rNz-seIv*;)1QRu%~TXV&TD7??Z024UY9^SBf5k*b+X$VlWNDg+_o|BiNPV;uy*c zE)y7_po$xLtnXo`EYjwVy?^V`i_7TxU^Uht00QBNz)i&C8Ith=FA+^l&fqexpzHuT zNwh^f$n$tQcp(rQum^il<p56yk@_e$CN?Ve(JsU5wy14U!e1<pn(a2gZFcwBL}X?~ zWwtm}PH{A*T)kUoYs8asii3#L6;{OjrDjdU4_Oav%PUp*;+0(E^?~exVM*qcz+eo8 zD@H?0h8dwCj8Oy*sE!(NM13?sLo~)8=!`Dtf!^qYffxd34At@Eg5j8gsmL6{6<l<1 zW&w=HWK6+K=->r!%*O((LjWoaWdw*?Xn=-jiq>d@FIhZZ^GNyf`0kh3D95l}VY}Av z3X3BAE4cQ{+JC+^%p>(B#{8LoyQpohEEG*DD$RBLPGn9eBY!pW54rxfXpasUfPol{ z5pcy=OvEHi##BthA}q#Iti&n=AQ&Ooge};LqX@%s9Z#ol8s~5ovABjf+`v;j!*jew zD&8UsAMpua@D(P*7)`<gB~TL9utzzRM@3XZL+Bdu)B#SIidmQq9Ts3A7GVjNVgqt_ zDpwx7fAD`1j0w+MP(wX;>8Df_kBTYw;#e7_ldgkY|3+-WHf+Zp9K<0U#!-afJTAbN zK0uzDs)#D+fu0zIeb|qSxP-fSjufQgGrr&}vR!nHhX@oN&aePgF$XKL4)O#_Aa>yp z!f*+H;VSOqF`nWX-lGy7lLM-v5&lFAv_yA=BI9LZM#ANU%MlGPClKawWbez6gpj<+ zOx<9ZENA`uq2ZtCRzoQ#dOIlAVsbHMg|4Yw>vmkm6+FRHyhbYC-~+Ny!<7by-spp2 zaK%WBgF8Gh5tA_m3$PFua1GaS3lEX#N;W<skc20Ahxho5@A!dyBN<XafeKTY!4_qq zgBR8z0G^{5b|MJDcn6!&v^cDQAJ!lc*?(qbXJx+5%H)xlkeGEPB4K~R{^0!y5&sdC zACj^S^M#kC!XFMW;%SMZ)DY9EDaAyTRw*oZvGg9AW^yANuo1xs!9g6tTYP{OJ0fe? zpd2cq5-P(1RnY`ZF$5zq3ga;aQ!x!QFcVA1aE)>q0e=KQAPAw@hV9siU5LO5#Nh@K za1W1>gctaP&nP;UTt_X`Lw$ToeUSR;O3dk)uq&TZbKitrvHvanD|l#kOvpN4J{rP@ zMg3Yz53!`0QbNqDtn?R~E#>~Hp<Lx3XpR<WiPmU?KIn@P7>Dtgh#8oPS(t;lSOGt* z!A1mO3wC1<_F_K{;54FfO~=zsJj7#IjH7T+0Tpo>chF)y=d#cm9ncA#(FNVm9mC*) z(HMvEn20HuieI@B{&&6!8wbV2IxJ=nkKmZqbbtT+6eVdG|D3C%lrC2E_uWzbLf(T5 zc?<JeN?8$Cj1ki@2fE0{azoQF12eG{%diIP5r`0kVjH$&Cw3tMC-4bB@DuqNDw)6( zW-vz)*rOaOqZVqT{sh|gp9GqrIa;C>dZ9NaU<#&U8ay!%H5rT5LL0P2JG95G$&?Hp zq4^Z%p&kBn$I?U|&*bevuEZRU+0SEZ%+|oIF{}NULmTyI-jLK-8eVgM4%(u`n9E%c ziWZR;WyG}tim_N(mpZz>fKuV_osVs!@kGcU!PtRtT*gg&5O()eD|w=!o;Y>V)Licr zP^7n3#MW2pTFCkFNW^12)mt=BGPD*?2`3{3FY!um(TM3buLys@M|{RtWa9_^YdcNY zj-3A!Mcp}MMG0ZiN|~hhX{yZAT9jZyDU^maY=lJ{rH_78Gi8I;#)b*a(GsoE7VXgy z|JxSj{7zVaMOdO|i==D`;briJAN=)fjFkBk-i^K3kApajqxj#pBj<<V2I7&Rx9A|Z zlR)?m?%^R4^%k9&-Yt>vBfNl_2ZveMfdd#gk+y&=teQk`OVyIq>=`OjwXWgxRNBUL zj<shHzZp5F?1KuLR2CTz<=Of!%1Lbv;nz#4U@y-cY4X$LU7vS3LCA=ZtY9VEXw*ua zDylBFbXDy0$@BT=yDCj|vhsFD5A;MY^g&;Y#u$u)8{9Dk(=h`xF&lH>ixpT6f%OQ+ zR)k_3c3>yM5rOO}8jb`=nid72!UU!$40G7Q9#+$+E2sho)J1*F#9Vm72YJ1fuy9aH z30nt6HQD=VZ_Lh^pyl(4TAA+3crnpLX(x_5C>?cm<syr)7)!7W%MpZNWP`tgpwXfr zRG7dNg<%dm*u$FAu|Y#Lf)je94+g>+Lop1)F=7Ts-BSrnLkKqEDq`U|i(Vy_A#1Aa zKvMI9dqeletX~{DCv?vEIiZVVM#qeZks~U)k@Ko8ufo5F()`zGpsLu>+`NSBjqOCU z?n)7n+)c65ng4dOBC%mpP04?~&pQ{PsdSi#*b|Y~vnjDTjGr)mE<;sMB8xqU#03<X z#~Bm4+xp%do%yiiK`P!rUBEC_##8<i**DE>MYInG)?Pi8tJ+%P;A1lzLzQ&vMMMX6 zRVo_Z9phbYz1A7(by1lq-td7hR=^)Cu?1TZMqDHD6tCe(oEu{xhC_!%ID@k|kHVzM z5+zUu<xn0KPzjZFJT*dNtV0m)AqmY%d^@;eJR)!cckviWc#bznLpt6f6GmiOKIBJ9 z*rGPFk{`xJ$30Ar*q8ID&daVX5pr_wjI4;9$J*Z}5{{4=Y~4etUNEOh2q!aTxOiJZ zX|HQ6S6m0K7?0Hm#2)NLI3iGhQZ&T|Y{Wqv!e{)%WG~u0=E57xupGYdgFiN73-maJ zw_d$SF#(n8VS+NSh8^r-K{Y7_S#`3rUh|Mc+`Q-4=Musb!gqxyoMVz$Hhr0xAY|zD z9y5FKupdVgoM31w9L;lv!sW#60@U{P3MU<C>=ootczA<N8V9-dCTNO3(F(261_Lk< zBQXj(cwr@0VI2ZclzyZbs-p&K!Vz`hgZT(TFha0(K11P90(}<I|1IG#8hV_<X++~Z zE}+*^`V6?i9Uhp1shEx#SOGtTU=z0EOV;bhSr2%`XI(lMA05x@v7DDZyp+q@n)TpI z?tGCm-S<I!wC3-B!gqjD-Mnzl0K~0B;rvq|j`dacjjk`7?|9T)NUcU`64DzoK^~Zo z1=x#ycn`D1)MV7bTm&EzQOHL^tDqHH!v(9Bh%?Jf8i>u?3Ym!@l|M)xSI{I;#0{hf z1COaDB7BfiA-AunZ0HTFR<YQ2$UKdO%%5!3U&bH~YxVYnmB(70%%2@Njc6D#FCR+5 z3Z+p7a=Fgvf{_@7>6n2zm<vxB*3D}GZXh1-@E&H%8SB6rHn3k#;a4QE7yED)F*t`S z_zQ252_s)3hElLXX_P@r^h1A4!pC>7Q+Oo4PT{n4c*3Qlml9GEQuguKvYLk<Gv~j4 zm-i`K!^bG;oVy$n=@SiK*pR1?INdDHjZm71k^_`cH5hYh+&XCTyJMQ+kCYhxILWWO zC32UbF@4LwLpbRQ7q6zNyOvb1Ltbv&B%GHU9|&jRBc=)`XT?f%ccwsjG83K8nUxkR z3FsI`|L`h>FNgdNB_%?!LlHa?2lWf;;%*|BVsLR>cMUoiJc?><aftt}@%B(rK6 zHe(C6;u6wfxkA+XVD2EgxSN^j`@1T;v^trali`E;Sd1lDioDgxRmjDQt)OUOiBhP9 znrMMG=!`DtjXoHPB7XGiC<S|zgPA|;KnZ_MMNJt3Z(lyR{ov)zmp3m)-@JG;`dIYM zeLHvr?pwKdU*OCUeT3IXWt`YHRv9GHhAT~qlK+NsQ4Hmv;kZjU4N$5I#}P`|%62k( zB~TJFnk~@^t&ta{a(=?)qFDp|;8DspZ8;gK>xfv%4sH$oJ{}?s#%meltQFq3l?Gzo zYjZR4r=@9Seb;~@CR)*XnOaR;jWH=AZjM)K>SR*NqXH_TGOD04{y<YSM+>w?2XsUy zbU{}*V<=qV4i8MlJm}yBAI!&Etivtb^{1KLBk%}M@eIjG!3%uG7fd0IQ&D#nI{@^; z5IAE5+~5umOu}T$#{w)xFhURtJu;qTBxF2^KDsTs;gi3^|5I?o(G7g+A9G~yTU6M) zal+=n1Jz!feyp?*yCamox~6j7;fO#aq7aK~xP=5LtJzP(3`Jpy5-15PltwjFM@`g4 zWBh^UXp44ekB;bsK^VNc8yP}i7+m0r4cLgoI3nLuIWnIlJjskcx;tn^bmo(sH!J=T z-t86SmgyEGzSdUji9L^1+IxErSWZ7Nt0ro1SMrOu9*VgLc2iVQ-c7L(gJT%1v>2;c z>ois51~y|0jzf=dL_pR~b82Q0Si=T2P!rA30#4|G(HH|C%tsJ{aR3K#4(D+jcaVxV zy?H9Sjy4Y$495vXA_H%ciFfk#(X~e>A7vg4Sp2^}Jg3M%Y^BXD?;uZQgy<S?qKZU! zr9?h?wEs2QL|4KgFImNjK}pEuO&86tnA8=2HdSXC8lC>lM5VaaA}{53e54#|2#e{; zGyR9jimBEjFFPEWQ6J57XHJzf^YW-QGupvP&ypO!=H;18em{)XTg;Tx^YU;!)7;>r zx0o%b=jG`lrY%K~-eR7do|ng)nHGuzdJ8W(JulCXFzp!5=`DQZ^t>{-#I(O~TW_&I zPR}co`%Ftjs@`IeoNg#1-hYOMA}A^>mdTVak%`MIw^GcohKrt=ER<J{qnS1iC-fG+ za(Z65o?_Y=WausYnC|d<Ilm2{ixhMnfmF7QG@}sue6)p5@32z2qt(f}kcGp1_9)_z zjtn@kY+Vdt`Oz4I2OBs(KoXwg6<#A1X-LOUXxQEte1~xm=b@p(9PiohUpmFp`>-M@ z+gJKb_L)3tvd_wt0bwcI#o?2t)@wHBHx}L2u+O!ws0N8Y)+oir8xK01zZ;$Nc81S~ z9B7>Go{E*uTCUduMIqB@wVD1Ll~4=Ep+_8U;0d1MIa1JfE0qWRF$Z(8X&VK*oqfX& zP9GsHDLz_%SRcP}*`#F~2W^Z`>Ji@~KDt?S1xs-@K&eo$Xo)dlle0xTp+p$-<IZEc zDVxQ_UTP`PB9<<ac$OCTjp<2ZcQDLv?r&14Unw0?4Mqqy;V|w%yNQ7n@}Ua)V+H&W zhGfVj%A~!5?G|=7NI>7MLR(FB5YcPd;O6BFN{dt@pLqLFTU%@jRLU9-R8Ox{S`L)S z-hu}h63TW+@;Zb-CjS5q;WD1$8?w=qZ1I82p7Lak%pzCpfy}BNJB9rNu9UFjEv;X< zUMZ~A*7<wWX9Bq@nDa4mdM91iZbndhIO7RtxL`QOVjO(16dm`{>=A_+e1p+GP6A;7 z0x@ns181b&zZkY9ZN0yb|Flul`anJ|w$kMO6W#+&Du|3A&Qm&iQkR+qE3-r~EB^Li z_qwL4IGSu)UevB@T2`#Qq7)PdlTGbJM1WFVSF#83m2r+jHhS)2^n^Ze#VB}U9@gVD zQeaLR%cBD7qCUD~I)ZTl_mK*j9|cIS4Voe|FV-4iwo!=}MK&t_B59*yH%iVO44G>( zr~Jr)^|?7whFoZe4(Nz6*aoiyj0q31+l3u!9;R<N!npyIIYt;ijuYDx^b=83hA5%k zNMUyVz~6)P4^bv*buxqHD&(Ra&>gdma%K&45Qbye9L70HoIw(vKyIQUDxoT>p%LU} zZP=_m%AqpS?sEnI$oAOnu}5OpABpu}>hCqfKX!~!ueQSTqv9q8Z&3!zmSrO%x3DYz zyI1I@{YTMJ&INT=a*fqc9W_u3wb2r-&<)+u8$;lXp>V-)Ou<xmBOBjQQcvqcSyVtZ zR7VZeLT$7}EBy#Yiv+sE34PEX127PSF$C`Lz*Njc?f~uZuTj|HZELpqL_e9BGl-MH z+>dPYDKG5D(oNPLtvZS-kEzv7`{fN^JiaI^b=BnxXJH<EFdqxB2#c{Efr!T)+(jau z;3=NrIa2TmpOHVD$_f?5P#l&hiBfPtRWy+IkOmUifM6s>F!aSIq$b8D#-52yObrYD z75ps}7U&x`ZMg6ss16dB%J64F8Hg4Ct+?4wc<L(36@5k_Dy{-E6ox&@!5Kp_8*{KS zlJiN}g6-IWy*P+NIE?2vBlkvztO%JsVRp!nkRcr=G@8&TuQle}Kqb#v%Yz#ccT_1V z>=L=0dHthOM(l~C&4lb!D*Y;owPNiyjyW{N<%*9Y4CiqH>Bz)8e8N|JLpFZkCyLM- zEg)OvQmnulti?Kn;0VGIfm1k#^SFRZxGWdGj|V7oinfSKsD}DzfQD#{KhPOn(CG}X z=!f^u66E1S!n1^DhTz84^H+PW{(Z`CGq=$Z{Q9Ss5XW~YT|}poob~dGRCFV1$yj$| z19PLva%kAVQdEc`#^>ooE>JAE0i%oT6p<h0&=bAT8(uht(};%V5(z=0OY%_AL2TZs zngzt0l@8Ey2)^<*dq>|(9F}+6t8@$4tBeuj3YZobhxRH?I+?`&7=X!`g85j0g;<0o z$bXiq4_lN)E!0L`)WZn4!V~l02Y;-=T7)A4H<5NbW_Qf(z}vpM+ZJgf(+KHq$8?rc zbhp!l-#+e3YkH748^#eQPMA~@ar>2;;_Vfsw{SXWQgOJoTuVHjAsMgm8X0&Ch5S@e z8f9PydsH|_B|tMYM|U`(7kc9+;_*iBazNRn9rA{78ouKPj3}dg=!V|tgMk<Z7Yv6h zMq)Z<U<Y>MJT9OkW!o41^g|9Qp;}!(!h<mu<1qoU4jiI9!*LR)Z~?E8iFf#fANUE) zW#Wc>C=N?hMIAVzA)28%TA&qLqxWS^IZYn|^WX(<EW#2j#WMKnw;WN1YI`<fLya*7 zGIBCP%VRlZcAYA5gBFFrn+&q!=@Ao%EPCB$XARrC46N_bXJO`jPA8)NLveU59fx7y zW+rQ@;iALaF{Y)(+dcGrzHgXTJCS>_CzNL}+4-0}EA`K(X2+DXI$t8W0wLH0qbt-^ z6od&1!yH9W6va>h72$xIsD*lHj6cu>f1(+>!wGwF1Xfq6Q5b~bS2?p`N-h*ZSyaLp zcwja>aT4cn8~0G=8ciC#(GTM=39GRlfe67iY{w4l!fu>EBu*m+=dR_W_=Q%l{M23M zeJrlwI&R=5o*@}`D5*zyj}Q2aFQ^(vRl!tDgExGz1{;us7m%gwfU2m5dXS~w6N7K? z1;8N$hGPQU;I3a4u6Ss5?t~{|5_~WpH*gcFc!O+whlVPoMI|_3H}+vaj^G%MLyriY zz+bqEYlw%Trw&@`u{3CC(9ym}^|}-CCS^J27VhB@9wP})@eCi3g|EoQcNkHb^P>O? zq7W36Mj2Sc9?lp8%`H9y1%*)pB~j`Y^`ta`GN_IksD;M(1I^J9ozNLw(G5c}3?nfX z<KTfQn2Kqbftgr}WeCN7$ksOyIpYjb{v-oO^OH)ZPEH(z!H~^!8fIb^=D{02n2&{6 z1cCK1yF>qik|>2ba6~J#MhA36cYMnHl$;QKWb2Ww0b7qmCnqH9CiI-3Yo*tnlI0;k zF%W|>1k*7Ci?IYN;0IGW4{MY|MLa|zKH?LM=~N2A1g2<>cCe+Bsep>eOpZOV`9$o> z*koO@439h!tJg)#Sjf3mQ5$vOh<d1xc4&_&m=4)>dBGbCu?S1C49g+AwG)U$6i(tT zGNs3v*JG|{9@w&S%VO`vGd*}B=&aYBB^E8^C*Hy20cn6WY+#Ra_yd1p5f&pDAvl18 zIHqrTPC2dZdW`UK=+W#U13w6?M=-V`6nn7`tsYU`&=vjAA44z+ll5IMC`Yve>hn3d zuIX3~xlXz4q(p{LeD2_5s%jF;V*%D660eZ&2}3Y+d&*c2p?Cn}XUrFedYW1Z9YYg6 zPu|)AlUdsoOv7|6#u6OFAvmz5s%U|h=z*RXfPr|36uiJ2e8eYw)(^NMzbx^Y@K=0; zDX}wyjJ1sEJG{qNe1j3Oma#96GO&g{Dxor}pem}NDgMMx9KbgikxH3rnbLirPtxnI zlFGh$Q(~AJoXl<kTb@&HSo4BD<0T^jw0p(Q^);zZr53(n+>1!~rV;aWVvY>Vc}s14 zD^@)>u@>`|@as!)%h-D+hFh2gw9dIC&{9NSW9K>eI!}eKEAMnNLQ#-WIFA&(Mk?Oo z1G4ZDpYa7M(KLY>ilP`w!3MS{3wxA9UDQJrl2jXxXpBG6=DDVfA-y|!vkQlD3^M&y zQ}i3+lu=q;)f9HjsD(OkL_;(~bF@G!v_^0A!3A8wUx>pkB;Ypg;vQZj6=r0#1%|-| z(=h{&k@AAh`UQbEc#jXr!Y6!&Lg}cug}YcyNo_?acHuCN;3$saI4<H6Zor6AEr^lG zOwPQ1=J1)r+Yg_){&!IS<ECPy)yWTx!fece1y#Wk_0R~3NWv4O;1ymY6=_JvPiUw% z<|u{|C<$wng&pis9u-g@4bb+D##z&afD>G(bHm{UZ+wTAy624HD3w7)fGx_S3LH=s z)lmb@&>Vv?3=8#%x0LeQfeWd>k%+=qWJArQg~AL?@h6&N02W{~V(|*8_>S=R47Wbe zYv4GtK8Q0r)SJTp7NbYm90X%aTERM6!LU2ZW*50(x$t{@KsMxx%-*r{MnzOY6i(tc z?%)MpA{B2SH<*PYS=7sq96RDUQuHo&IgD`5o0r1;VN4&FH=oyUc>0-c?h6M@aLgvL z=!ea?j(4#BPDhP}IENn?_k)A0A367%app7k>x#C<+`41<vUqkQ`hj^b=mTU(pM77+ zuhpfn!FRbEw)sQ?Q3bW(h(FLAZ7~;~Scd?_;RaIi21Z0UAM9X{yhH>M-ilD{!T}t_ zp)Z<-nj-{`;vCK+8LyFwxA=%p_>8ak2Gg(l;}4ZiTAk@viU;N>iee~*GO&gX_!gJO z4t3y&diWE~&>CIP72V*39vF@h7>V(ifJvBvnV5w+Up3t{a|x_~AJ$+!0uh2xY{Pc! z#4beO1YRKn^}o@&&<dUPv5%CxT3u(tPUs6+_Oje%*&atY9w7;)KdF~+L_G|{a4f<S zgyA^u;~`$-2TE$R8avpd7HXpo>Y|=TTTIiIKs!X^49;rAh9sqQh5hSS=sb9=e?M{v zd7f_^Jqc%k#85|hYXVmR1{X;b?xWSx`HJ;+5I43fHdX`-e@NM_gTg&3N`84)Ly0kR z_Ld8rkC%Z-W0g{dz?02NNn`oTHr0(TiI$<9&nxm>%`etHQO5PIu$BY|U_GLdj^ZSy z6~-U{QOHZ=X02AU4}0>F$oyJO*#cTkPXyr+$`;g$RgUWXzq<qd+owtqt?n!d{*E8` z32RnT9W~&Hx^RaFCSnDG5rR#~+i(Qob2txUBdw-9D!>8tke&G|DgM=kSJ{#BHT&@P zjlN#KUgM31IdSE&ta$suB7a58G3F*O$l;6;tA2g8@Si!!oSdAL0dmq(ggjSVjJU?u zQYghr<lIDJv@-W5lH8IKEAy$Pb$oGAzR$TmLH^C^yfth1#g3dguX|lJ{Bp|wQPw%@ zwekPwdb!m>E@vf^S04?~2#wJRozWZpFkHve2#mu-%))Fez(TA?Aa=o+LNr5Rl)xCw zz*6kOZpebZ26=5e^Xl2i1CgPTL6Jc#BUgGya+xi1a^!I5fqi9-&G~1X`zoF#EB(Z^ zR7DY|pOb%oJXc)h6)kdJbc<2!^8L!$4fZCchIg`N>tvb8KN0>b*KFn16J-n_t6USb zL<fw+M9jfl_~0>KBNZ9=1|zDb4Qyo<MP8LnB%E7qHI)i#HI<w3R0RVu2$^Y5AKkxx z|50?<ekp8!TG*E0z;%JE7I@AY^;@#@QvEnZIVb{NC~d^k7mAIshO&$5(pMZvR!YhH z@3s#bNDpc`=EvkY)DZbD@2jnO>9wT=X*Oaf*78Nzii%caYNFM2#9S=I85A_708ttR z&9s^U7>+H_7G@bRmihaisMSR7qaK=-)_c8FytF!*zPv4k5spMO&fzXhjL9riK~>a6 zJv2jev_n_)$8ns*Cln;sT`&mquoP<$j*EDJM}_#wfyV@rkctW<GwsQpOHuN1=hy)r zTd>yfSb5CX(|7W?$-^iAog70bAXWJ(wxlS{bmip=WL`O<F`A(jTBALt!3(}v4S`_n z#D3`U6+ci|)oO~M5~`sNI-wW(VK7EuE_Co#Yil*j2&_W@KBqs9zYrglzCS96M|ynv z>hvY)@sHD&tX`77WZI}D{g#MRZ@A5)SsHg@pG;F)iP%)`|G4~GX{0MBSFja35sSNc zid4v&V2g^#s}b`F%UZDrtFQ^%aTc+-izKArHS%hXRc`I6%xh!(fo7%_WEp{u`1s85 z5Ps=OY5neW#YQXcXYk#>9%)K(oxS`-C-g*r41+7iV;ZJoDVAY11lA)CcW@sMkcdYp zK*g06SwVO7hpg1Y-~w5>=Rt>sW|eYkdgk-Yd(ZD(KY#tyk<e3{gzo}h;VV36xqG^t z8Zw~gfS&qoZ<R_~k(ADT@P^LlXgYDXlZ|96Zr~>F;Q=%>n!LtiMYsa0pf2j6DO#Z~ zwqpnO;{g7`Rop~6GEmf9t0{)kut8G{FfU90LckRxF$xng3A1rQAN-D=h8QGUu-w2w z$Q8;J41io#er{tCttJ#oQLV-eGZ2Cucv_tHX{qIpQqxIdD$10k-k^0!t?<5UT18B} z$jygw>-oVWuSbk#hs~#dh`Od$7TNAx<^Mk6|9qS6Yf^blaDH>)|A6YcCQEVabAgy# zL=v7L6Yr3Pk0?kCjbR6S)PW=FqXF_#afq-U;W#P!d{iQ|uEPA2;%4+>rAWG~c<D5j zCz*E+=Wzj-a2faU06$?u1-67es^SG+q9D0q44GSn(E{z!0bS7>eb5*EF#zK*9)_H) zPC#buQJg>|qHz(Ia2bE$DiZa(Kg*xVNhJITM#b1DO2G=Yr~(I6MRn9bGc-qM^u}5I zg{!!M`*?tdc!bAzi%d9C<UQbliHIt$ZKpX&;1tdx2Ip`ImvIHxa2;{DgS)tgL_ES{ zJk_87sx;B+WSx2eE9#OR>`@6dP!qLK2aafsHu$~%dGmf5mSZIXu>l(qj1U~eA;jS! zp5Q57SZeEP-VjJbI^H4^MkTbGd@zR<dZ7;n!?}e1NVd|A-zniuZq3&?(E^5GEXH9x zJTVVm@WyJa!5PHj37+BwzM*I-nl;M80aZ~8jp2kI=xasSg;`eGCYlul?&CWOlx796 zLTQvi6*!<8s^d>IL-W%56F-!8+L5$bL(I#vg1CRJY#SfE0v{W##vk)+8NT5V0_bb5 z+0kd%lL9=$q;d@Fa2y|Tq5_o}UxhZ_tZvTrA-6jmzW;WCvoaSsON%J38U-w+zu-br zX;D2(9^%VRqjo6$h2bektGeo%6Pdo~2Nw*-2u#6LOvel?!BQ-POvFAMMHuu5$0?k~ zW#lWP)#QgU3c&(JQ5=@2gvw>Ky);z_^hI8d1d%Jdup4_2g_AgqXxzX}$ede*)mVdd z2tbgn{-%*yQ>zQ&O)&DZH;V8{oWprsz)i&C7H;DXUg8xBP#mU^#UhL16Mmo}#n241 zAdAMlyjJr*IpO_ZQ3p5pdr#uA;eGOZXA7Q^-*@f!_b5p8FQE1mh9PvF@~$}thXnpH zgw8oQl(P*7hcaL|q~UNy$tT}!exQ~#1Zo#kEsb**7n=*HLv^KPOp3q`_9%x6sE7t= zh@ll}O4#JUaT?CStSUVoDqtMu!V~kb9DxYNF6_pB96<z5;1aG@?MK-VxQXXTM+V*^ z6CaU{jF*pY^2oS$@mln?h+~JhZP<2r<$`IyJyyCOc0W9tgL}&{565R|#1;$HQe3f6 z>x;zv>O%9JZ-3?7d2y#ukkIxqx3nN&$VW57!L^*MYi?e$mYke7YUlX8iflSpa0^fI z44L>2ZAGm(Y-&~|=U#o!rhHqG8(6Cs3gP^R>yuR)aidC+y87%wsu4pgW3@~PW0ueu z!3y=z2*X74PK7Ipn(}^s7Izk#ooIv6h17!i*02719r?AE^3#pc3H>ny|I5<d*ZjV8 zMfquG$nqSI1Bj@SQ>L;kt-;z%`2s>SQ*}wcf@|{@H&yd%d&$|dh*PU+H6Jjbx>hq9 zp%_(z9TRRL0omAAi-v-pj(iTu4YV4yAsr&Bp+-Z-Df3Lrh?O7cXquLh9Z*j$TgN>m zAN=d{Way;|Pa^c!OA|Bw+rlbm8f1m|4lPkIh6yZC4ECstj_3j>^h95bggZPi8B=fq zk%+<>B;h4qLniYbWKy%BC7DLmwL>&@2-HJ;G(dmIycmc<@W4cT$@r3*{3Vq~MrzXS z>$k5b$;Txgr^EMe6<Zm}dNY>w^!U5EYlKfRb+A#tnIfr}TAc4eQ;V%E)RAJf1vkRX zvrtRwt`%|S&~in;nHmSV5icx+KLmoY6|zva;V_QkG-7ZOvABjCxQY9Cj1*)b6Iu9( zY<veNax_}#it|(wrC<eHlto2UMm5w%19X5B`e6v1;R0948uR|u`^T>yzkhJ!e8e99 z^9YH!A=W(b6+U8(d=PrD<^iuf`8<&Mv}Rp?i!z*NXgg2+)k+ON8<p4cuUo1%;$cyB zw!-na{1hj3CKY4QJFb{&rK=@3>jqg_Ct@x<F%Kcwgss?yc;r>+$ApuRhIG8g2jo@s zeN^=QID(^yzzJNyP2@BL9W{lPFfg}8a8^uH2t(kCGq`|h_1J-89(1s;Psfaz&><9i z@&3)r<Tw2K$eVjN-&~G9VR-D%ecc=_L;F|dKD_pO5z?*_Kia4jgmrno)#9JYK|v!+ z)m>b(RBh#nE!lPEWZLhiXdLCHB5@W*G-3snQ4?QLh{h}%wl@wT3a^lc4vk1M+^`>d zgd++kaS_EDbAC$4(_AdTLioWS0T2jA2zDW`86!)ipki|(g9O|`i58q(Y$<oIxsOC% zugIq}kv!fX$a$6F?E#5?iSuXpCCZ9bNIuDb;)spfLZ~IVliaqu+HhEP`YFvH=!F58 ziaGFvOmbdQ^N|!wRDuKALMC4(TP9PcPR71QQ+A(!QpM1&nc;luV8d7}=MJ4TN3~nd z+uBxY+;~30&wl=$=7+zfdl>26kehay?%r69IGB<LT_E$q9}$?>ibI?>91%d%jt;*A zZMh?-+d4Bi>!KAFceoGHcM)fhHkVe1X?1d0zue_l@+uIB&Df6pIDmtY>rX>EjM+{h zl!6tkVS^nwfP*-Ua75q)PT>Ns<I~&ZgsZ2omN<Pi;_AMQezW~HPTaW9r8oaw_POli zL~k);YOCCxi#ppm;cfWB4R@?s7=DV)=;YdfJEnt$-5st|>Fm`aqM?mCUf6!;x7p$z zo0{obcPgy0k=uEQ6udy~)*Rhn6ehq8lQ9#sFdK8>2|xH_6#}sVo3InRup4`^4<~U7 zF}Q@wtzGDS3B=<T5^x81@d~dY3+W&ZAqpq)@s)hsKd;}Z-??$8{``LgSNpE^G@J^L zvsZ0JPg=IHF00NHn`fv^L~vQPh_0GkTQtt#EMjmGmv9-fdYH6jl!_uKiee~*vao|a z%A*46qXC+u753sF4&ex5aSfSIGoL10EqURp?CRGop0Rkw_!*1WMYtGx{?204MQ(*X zYp328$JesoYd%C(bNVPlN_bL4q`g{PXCv430x$6yUyzOO_=$E@?M~>7uIPrI=!O1p z#Yl|87>vbi%)t+6+LIQvKzc&@>D{N(gZR!@(2AMk296t8sN2ACGlSBD+K6a7^{VJy zOYL8%HbcmK<NjDDmI$Q_w<yUaTcQv8!Udx+8e`yw$(Vwvn2s4(f~8oGjR-;_p5Q5x z(Va%y5B)I&BQXl2F&5)S@H7W=;f*C&3O}qv00aWD0ei6z?^7P8#HNJr*|2AW--bQm z-VeQb8=Erm*OcFaBB_FUSL~{+*39`rO?A0~M|gsQbSWxKV1|wui1Bd8tWJzu;EhFC z4qvQ*KUQK3w!(<6DIct1gBqv_h7NamT#>KGcAANuV!7CP>^;BM*L}9^AVf$dwX~6b zop@Bxw3ImLp%fDLE2%4m*J-{)`t&<@OkTOl4ez9&hOUfUVJ*}~zAp4%*nll4+m#+2 zl~Ema;E1}Yj|OOu4(Ng&=!t$9guxhsp%{iqn2ae{g>_x&tOE$FM<9a1NexXASfB)K zV2iS_M>*6*JvevMpQ@s^((35JHPcvlFMf0<COxTGy;)HoQqz|nyB{0qPp^%G_y)59 z?9(t1W3d~1@DYUuvPXeCCPIg^xPyCm39iNF{S(2C>bRWif}3qkUyGz_s-4c62oA+e z%)(ME!wUFe6!CP!b7Y{E6U`Ux(Gi`{8?AcqiZFyD0+G0iINU%yCX(jaNW$x$S`&@7 z7j+0_dWmJ#)og7&vABjhOIL<T)~JpesEs-ZM-)!tG%ApPRZ)*TY>UAd1{aKgE8MXT zI}wIcxQ3_rh_CpD@A!cNeYKr6g((nAR6~7C#&pcUEX>9NT*N(mg9!!bfZ7;=ahTUn zf2F3XYK;yD$j-+>=Qxk4ORyASxPt45$1U8(9Xvt`ULzH0NXKWmQ8jds)nx-@^%w(L z4d&$*{|jD=4kG)|1Wn;Fh_Q_)f#ZWYO@J{&NfxdQV+RK(c7FZPAI`|aN7NfmHVoIF zsI9is>SV=|Yc7tes1CUmxdk_PU>;(Sh$I-Xv4ZG}?T`^TkLP%Wd_y?5ggU5;c{q(i z&g>TuirmVq4|G)fYsIj8>^g^<tE#JwoSB9aq@*oms%GE-4kHy6Nu4tU4&X2@L#F&5 zR8m<Rbs%#=raqNaTaD0a>_%wyTvaci&1pVy;T-WMe&$vij)EuY>hq~C=nA<+Cf>oA zB@2OT2^tl0O;u43PH@IztifMMKo+#F#1@q>7mKhMz6e0(qZ?-ro;|qv;MqW59zxeZ zJ!kmxZo7u+iK4`nA5Z*yOWj9^qK(w|Mm2@-ZlE}dq%MUE2&X3M0r94>THL%lAI*!* zB9dvokMH)0B282^-zi}@y--|uHsX5<dCMI#=VQO(edV8vbYA~IFT%%uCGo>Q7rFZ% zi}0~uxlzIO9}ycF_&;u?93T6Yaa{-(97$V+<7f&5>&J?6t<<SnN0HcG&H1q(mt#sb z@wAoNDBrvPVWq9rLpqt`0_(8>8?g`jQHqt9hYrioZWO&bHev^guu%)tLT$7|4}3;} zG4xb$L9?+8hA<A3Fc~v2Z!A5Lj(`_@Fdu8N4k6eH*KxEs%o)$#84eRjF&d&33c1lU z!PHHErH$G^J7PTxIk7+nAAZXR3c54YguMsd8WvzBBJdmqC(;Bl5&Q5AWhc=`U@7A8 z6P+h>bc0KiId8PgWU&5pJJm*;o7*`*o>a<|h*+RFEKvfbV1=rvh8h@8e5POlR$w(Y zU@uNX#&P;oG6vpQh(%ZfbsDEWVGauvMKK4SN}(+5V2|>sfcj{FP1rn5zqNzvto0xj znwKawg>phDl2Mf{xMK=r4CEG{u;9t*^sF;!8Q6<U$i#cN&t@ZY=%(R@P~626e8IOl zhNH~szjZG~dT>gFL(O`^CX^Fzga(PEk|srk{|oa1BJKrW+JD<wEi!O3n~uN<T)|(s zhU<{gdJfYWWB`i83U;tZIaEMJG(bZP#t=-Op&!^q?Wxu3#EtH14Z~NGbS0)UX9gBy z36{ebHArMV$i&M8ADG3N1hgXIoe_=8zhwdm)~Iu-mnex<^BC3Z*!AE7Dtj^9!6xK< zW6wWiNr--4HyNXB8KYV{xemGP70;aI!&t{1{6M+i*7f|i_045{0!I*wOhkHfO%EB! zLMb0kC!ia8V+I1@vEbJpNDisQid&}U@~ha~i7fXA6j(jsR)|B|oVTGA7;iaUYM7h* z)=VVzVAv(obs~5Bo@{d-R$~ohT;%rlvb}vcix^lhq@+*@HBb``&<UO4ijkOx>6nGt zc)pl%1hVlR4VG$4YFaL(aL^t@F$}Yoih!PE@GNnoUrvel7S<iv$u8-o&Kx0=FQXtg zxg}>chNZhL=W>}Z(eb1BFx;OkMz2-0$kikXL)Q?swX~6S?4JemV7;E614jbM>J3D3 zBfZ8g(^j&oR~DO}kfjqjsVx6EMP=Cr%yL=-Z(9ogK58j#UHL15#YEaj)y(h(_`mw7 z_502u9ka0v%i#xqe8eZ1E@MoMg2dVwcCd##CSwX_VlF%}Prmx<`}S35YqcL`#?;bz zl3H*0U@?}%7c1b8mDqx<*oM8>hr<X*1Wq6dCvgqeF?a>TMz~@uCSnpMV=AU$(F(4^ zE+*g$f2_nhtVbX=APB)YfP<*+r$5qP?WP@Ao${#xSyql{j6cvG9nb|`A<J<Kc4H3? zLXU7n;4)(I01uJnryn>_-J#WG@#Z56QUQ#i!UVEXxWOHBFc)6%hO8`ik%T8mK{_(< z7F$;m3D{Ag?C}S3`h<1<hDV6k_#s_~j1Tb&(d!1QJ+#^>;>HllNq(>iI-?7m&;w_2 z8CP%}w{Zt|@e*&~K&`EV-sl5&ct8g)%*O)A8lKxh&7Lrr?-cv<h`iZ~Zy5`nvua}G z7A)fSDb+=b%6!9f*bH^1;Jco7BJMoj_2g@wl|+j(N<r=0oEXcsEr%~;yJ<+9X@aI` ziMD8m_E-*oti(D5VgoiJ7$G=_Ls%9-7m3vn2*D<7##V$PEI>P0bBus&pk2`|x1k={ z$Y>pLxQ#n_h^KglWE>Bof?!fG)fD~+fI#loqeSLZwX{BKm};UOC?^LY6x*;Je}!<g zi04SbM|{Fha0jYp0hVAZc40RTAPmQF949u3fy31hqu0U0X^P1pq1(^hQigBYdPQ(r z;nWDVRdf0o%}%ygY%`;Vt>hKDgwpD<8?TXn8|N6e^B&J(xq~c0#!l_JCtOX8-oTmp z1C#0N-*n;9n4hcaBLYUMMTOT$#?A6~O;?Om9ZDL0AufM@e*IMbR912B_m{tZT2EMv zRLhvjnI(QrYCKZS`5BLhk*eMAU0cq$$@~PVi^dsTz*WTJ8ZwZL?=T`&<|qOS9K$J` z#yP~|8m_}=3x{2>h7D?<CNdvhJ9X{h;hYySYm{nlG&<zB47DDuChOz}>!Cinl7&4m z9#b$Cv)~OM%!kbC)mVc72n0c9zXw@94V$nXJFpYiaU1vX2(oBC;d7|gNRzGi9;5OH zsIr;x9kR@>Q&x9jN?8>}Yjna*+(y7oHVDd*-}+!V<ln_u941(^n>K`NxP_8?7)qcL zYQt$S3B{3pTtq_HKCMo3fxs(#g6DpA8PH)FqHqPtc#eDr*dWYc16x!=Wz>P+AsRD2 z<16|cW<z+0WTYV-)<>A1nH--Sum3TQi`VUCiew6Yz>S#i#BIn8$rYO(qy@3U0CZsm za>Yv_S6-Ht)x`OuhCOhZoI#Dp1ofh}k>N-ww<0G{k;Bc7X)JSVZ9~Ivrkdx}@_fvE z>fxp-F6xZr`t+}cP>Y6;Q-|~O<>=fW1kP&`8Vi{a8#tf_)?*{C9pzXcjQ$sc;EIv( z$4VT>NnF51#N#3A9;4U9{Nq$PT*rMKPfhg<Q!o?hC>c)fqcW<XCwgHPys#9@kcDh? zh~P7rbAtJZ#06ZzEwqiITgDIYOURm8n2jZHUBT0RyupK0)S=U)1OeED&A5WUkcrRG zM$<yk4o>I+XAFfqJTMbO&TwiO!r4Q$7Ooy@P(KRNkb(Kh5SfXWkq9sH;VRs7^Wki6 zUZj$~?`TEbzu^wiyh$`=R4Wk`8C{|whi7F(i)q~ZVECR<-qruo`sj&j3+)IQ)4Ui> zB}QY<lLd%G;S2OjXo+1H$x<}BM1w&%zN5!w#!!fZ$rW}$7=fU_hz<&0)vo)gmdX7B zz5MPxKi$iHPaRFo0;X_`WVk7cYjS2grl?w-%#$&2hX-VgPT~T}o~6*?fSPECMre#C zXo{}rh64!0F`Pg&&fqN0;XH2R4qhPxZ_jG`X|f1>LpHwSCp0m1%P1;e&(V%ygL0^W zny7_3a71ggK}U2#w{!a2Q`M?kT{qtJ!eETSWK6+K_+UO3U=bE$Jp%C=`6v%#SU{H1 zRLFAj#cBuyLzY`AGVu;(lwEE)ni~qT9TR%t{sq0?bak>;cb_*eaFWtJms`qz<d(85 z;i8nR6=X@v((R2t7>GfTrR_sW`$Lv`QckIB+Fhk_VHjL636n7$Gq44FuWB1=E)ckh z6uiP`7{`*oa6~(F#4vc_6pCFF$7ia2jgmtQx48<xS?c6o)HO}#UmqZEu5*?UPf#F^ z6=5Q#z#kzu=(ldtFU8YO-J%9ya{~E$hh<@OPb;=`GpUmE)z!_<P2?|^@P*afAE4&m znc4E*nPS(7E2^Ou8ej`Tu@n2yn<(_b6ikJTnvBM5%)tUIgpAg0JVp|pBOMudi+6aB z{6xI~+-`Dc;Z7QK@Pfd4Y(Oj0)f&CgN2U>@FeYAqWUk6Bo@039gZWsCbqGQ*c4H5Y z;3$rvCK=QMEzucW&>sWfg5hw*CEUjYyg?c=P@c@Khx%|zU^m=@KrgsM2QO?y5JE8Z zHW9;96rn^)p)|^&GHRd=x<Zzk8)jf8X2Bai$SqC2i%&-nTa>+5M60nQV2>tv|4J0m zaUX}HPOWG-HM=?9q^ek;Q|H=K6EscH5xp=OtFR4w@Kw}KPzQ=r+Y6b<zn9S3@Dr!i zb@?0Q?LCd<2ILy#r}yFlE+Pp}kcM;^-{<5XO2G;?uthtxM{o3jJ3OF+7ZzY4c40Rj zLQM5hn;Dyh8on7NT;_93p5&ueGCsfMw<#RYD5Ckg|Btf!fQwq$AHSd7Rg}%5q6mUr z>=hMz#R7Kh4GV~Z3WAEgupo%NEAiOCdhA_RrP#YD_Ksq~1~%-X{y($JDxQ1p?>>*b z-fLi!nfcC4l1Z|gXxl1H4O|R9v4pF{8^W}`3z|#1hf*Cx0_rQ(YI7^zs^QwU8m}lx z`7u0?vtehrwxh~gynO^GU<^*No~>=7s%GdEq1~af7qKSc8gAka?&E=&t)jw5Bg!ck z#^{QO>T7SRzWf&E%6ZO=^$4huV!c%Br}`?=oTAE~qY-~|K}#4bNU>f<p3MxMW{W&U zeRaeNL}M-f#zryQf6LQcfw9bZ7{`oxs%Ne>1kWT>>tp=wB+lXqQcZbwGjv)=o_bO5 zkIirK|2Jf!;2qAJqAbdx5-KAAf!K<@*oPQ=z(>@$OXz3}SGb`STBAKWAU*j+^7iGS z%eRl%uILwQXXGle{$CpSh<z&M_yjM~9fTnmh5*Gn`oGqPxquUyF$Cd?^(w8Odgc18 z`UvN53$X;o!i&V3s0JH4EfZ}ZVmXH-T)}nR!iWE!r>%uKcrC%@MFBKWsx=f{ZzdbA znubo%w1rI$@rE57kX18E$--JbIvSxZsQMvhqfN~9HGsM1AQ2Z}d5<jx#$z3FB(qV4 z3&IeNE!c|psC=KbA6>BmE1`bCNCaM3g(w_G_G`GtlaA&yib+bowc63jgSDJd6phyf zJ<t=PfctPB<^qV!OOa6-lto2U!hlC~<i`~F31@Cl93|j{>TpIa)WN4$&t9e6PPu;W z@V?FaHXlw|84=VgD5ABZU#G37KC{uZ3pE~ccU`aD>MP2B1P_n`bqeDTxF8hgVEd5x zu?pAVMR7!tCL<UI<fnKA&;jn4iCGZErdZ<YTs@WeRF<b+l(Gr>As7mF;xWplGWftW zoW)0cLcOOPdtn0(<2Eu-@EOHJPi({y+&~8MJ!cOFzK{R=-z!PUvq^hIX}U>!_*Y3p z$|oUG$j=fnFW3X4?@NaBSPTXE(g+f*&=H-{8|QEZs&ocnC=Vx`#dTP{qNJ#c7Kp{M zSE{O#&1)JQ<xm?VFcLwSfQfjY{xJRFjr62+W!Gk{opN|H-%UQfnQJJnO5-isqk$sC zF^I-Vd_x%u-wqw%4qr?{F!WfCJ=h0xu<w{IOpry;2<G6|64)?;5M`x&q9rS5U1#Ow zI=h)lTA3TjTAMC>yxFGB*G+^WLRgP@RDZ+Dg4}P}jlbit3enhzJxIWDT)=fa#B+SZ zPgrD#ZSR|rI(tLFcI`ryUewD1EW{!#hRAFaHe(-RATqB<ruESUT`>@Y;0J%q#{z7| z7Q`YBuWz5Z{o3@2(8#bMVUfKew?&3E35(>mB8q;eHmAC*L5U8Rt0`7BWk>a<m~1Ct zjH}nEUE0}tk<d{b!zX-(H4)`UDLA46Dxxy}Sv#Uep5ZHUPzyOBYNHLpunKFj8C!4| zN05X^87htRB14(7TYFT!)*w!E`YU6^J?tI~(U$NQ$+U(@>L^CPrvrar3jh!F!7SXy z9gO+NcncAjh8rmGiGBf3tiVbf!*SgElyyLA+!`iX<abb-7UgnF^b;->81D|@bcdtE zVFu39&HE`^ZP>>_;R_1Vi-LG!6ei;Xe!^V13l!!S((nm>6l65+qYxQ;er6Mep$Nh# zgkU=ic#ap)e4$QZgM!F>ovG+!*q@a!9E#DpsC<b)dW77}Tp6x#gE<3{Xc7x1<K<Vz zI^SrNOb#Zo@jJsKtoy;0=$~xxB(>y$+js&`&X7fkvt%l@xF0|t<CR4NRpq48i^3Fw zJ=&u?b|V%dzni!Pk?&)qqZ|2qpf5Zz5JNB(voH?}k%O}7kO%fCjAAH(@~D`}73~^K zIHNA=qd8il14a|n7|g?bL}NA9V*^Cs+pz=j-<7imwT;y)_lwTgS?Lq2U8j%djRc6= zaiVr=qb{1j1ufu;4(I|8>_Z%m;1nKEqtEaH>3D~)aHM7{!3nh>YP|(oq6@l8YQ3=; z4E%BsaX5}MxCC?aJY)JTD$_)@Aeze${uqrhn2A|ff=FaFr=(M>rDCXps^C1}wckI6 zA90)y>_od8XB@x`!B~hJxT{f1O?e<!8}!2<L|{5LVKW}%38b8ADHqD)jdEm}mAzsW z#LAT@&VD<oc-cBYXJuHGpdFyni;{FfS9n2WJO+~?3NRN7a2gkI8P^~R^%&JCSPjg= zTs+1TWFQxXDTT%m1z$*k6l}saY|p7~Af0C746fq_UP5J|maLH<g-{Wd&=K9y8+|Pd z2M_b9rXC{9is%M&4k95nGufj*{Bsc%qOltXa22od4jHh_t(LSXk9xV)%Ib%f<xST! zhn=JL&OhVDIF;0j@5~%N%BeGbU(!B`Gf2aG<RL9vv`1I;f;U9|bxFHEeBg`M_y#LW z0);)Qpf2j80a~Fi24OhHVjAXIsw?qre6_R+v4}%F5^w^ia2jWD#nQ0(xVF2>jmV58 z5V<eK9>l<a3%Ce#samt(IBZ4-ty+?GYH0&@>WmwwF@M$$kLniP>c>g?vHl8+T*GzT zz(YL76Qtq|-XR0;@f|-Qk&Oyk=wO9But8B2LvfTsB~(Tg)J9`8K~pVjvnvxG@WE}Q z;1SaC8lUk6l1yAEh+?RW8mNhe2*z~W#bXp8ej5~mBmTlVP$$wOD*{Bu14Vs?6Q1^G zv`;<68!7mNA1J{LrQnE8@WC+5z$~mo4EEy?%!#Hk?UaX=6d{PpV{C-vY>g0?hc4=Q zP8+Qkr4S4JKn`ZkiIOOVY7hyvKwGqfCx&AL^jL^RSc<LKjjOnYhj@dJ_y)hc^b!Ok z4Da%)Whs-1yZO}8(|m@R=e1*0-6*bj$M{Bh-e?Lp41pi~u@pODz-@>Gidd66LU9I9 z@C8lstEE?pXOtylzYAjQ_mr8RAp`HBVkR~6qX4oew20rAV+D3%KMo=mry(-BhsSu2 z5BLlxGOdmJXoRI$j`#W1d8JQGbT2>y;a~y7+$3>k^&r2*;T5_RWP<=-42B*dh`=<g zLKLF08b@&qAMg?TZAlo3xPa$)fdY1PNfd-FX4<Qz#n@o4E-dX}VkeFx5f_n!d-jH9 zm$g1BKT(m7vr4G3p<|;s>Y)J|q8EB&4o>3?J|ick%8%kG0TG>uOhhFj648iAL=;4z zjEJx*tTepFRoCdN+88C_nzor<L{^<B`oj-n5r%LafQVQ`D<Tz9iU{k&6LT>Su{eb* zc!I)(Xm2>d9pf<(ldv8e@LxWZ+NY>^^Sqb=-%x?tss$Hxg}Hi@nf{If4pb0q3ah2g zI9`MT;~_rb2MQNu^HtQi!VWR5uwuAtNWQ5p#mx>#L?reOnb47#74oAEI-)CjU<-C4 z1y9hE3@2e4W@8bSAswGlfy|xYitgx#A()GmSYL!~<yIyVAxfPBQSy%vrT-2QfddhU zD2kXOk?Qk*0}Mj|{>DaJ!ByPH1H42UKH)Q*im{5O-bhWn!He<7@PqBMN>B9|6BLPw zghV1D0kN=o!RjpB5`8flAqd49ti^R$7pLaX6z$OqgW!XeScToVfK2?CexNTZN-8p3 z!AxSIT@VW<LM;3ZB7yJtfl?*dsG}8HBd8SHM9jxBEXNKUKrG^L2FZAW5BLn7BLO(- z>FG?^qYHZB3T`5(G@C@Ym*MY-!e*r5BQ}(!kKiRDEAl>e;Q$We0<PmGZXp$4-u?OW z(C|H3t5Nxi07Y;jFcH*Pti=w*A`zOBYRL|@F%UlR#XQVM3?AbN3J_p%R6-+URg(EU zP>R;mSJc^Aq~Z%a2)O`ZJ;(~_C;!`(Q%mJg2X5#A9}LDU%*Nk1k9V*y&-x2L1Yl8l zwekDqhItRQBUHZpDs4nO5^xzW@eOhXIzB3)0UBcfyb*%+IEQy|pe9?u4gLs)xdon9 zRA-$dF@8pl_1{x3YW^EEl?V|wutOy{qb{1G2YMm|;Yh<<jIXSgCg3`D)}VC}iv%3P zNu0tZY<H&1;R5d9t~0yoH%xrTPiMo-RCd$elv2t;%7xGdBS`sNRt_)tUtNWc4o9@a zC~U?S+`=<_f<;x*Ku2`KAWXvYs%j;)nOvCL=Wxt#d>o(g*kpTEE(Sl>u7C?S%E=|Z zAYiF%eXi{q$Rg4T#3K!k)zngHbcPp(qrMZHHe5gwF5@doSEozD2hn(sN>oNK48eGa ziW3!7w5G9=vbv)2ww$IDww)MNU3{sn-pgEtd1|p`KufGZdTn;jb=hI#I-VkLJ++h% zRZ$K7;D>RTicNTkM|h*mw~$Q-X$F0oHdLkmNt<xbI>`zmw^DF|$gu}{q8A3j2fi4C zNeG4>Aqc}%L|_``V<8q{F_vLFVsR2@U|pMCLNP+B04Hn_;o%rgK(0eig*}SH8^duJ ziO7T{RWJa47>+Smh$x6^a%;pIcK71ZJx4c1^70RcAFsqNLDbD-e1@(*`yNz*EBa#q zW?&{(VINK*8L#mU87S3&Hb6soVF@CkU<(p(5y?owf7vB?78P$k#1A+&q<f(Oe6RqE zu>{9)3CVbgyhJM^_P{BWZp^xkff&$)8iPes<M80PX?Wn2p-s}87a7JPAqd41Y{X`4 z!3o^KLp;J4e1#)Pi)^~14@P4;&LRn^NW&}qKn03W54&J66~|5ra8XNv2*Wfi!Cx+h z$oJZzDm?|3>`?)Y&;kC4KqNLJ7PpXrOw=NQVGxOiBNDrC9Cz>vQZqKVsDjq;KtJ@y zT>O{T(HH%Tg?B<Ecnl)Z+YkvSBOM}xpAeZiKx9-IA~TWEO02>@#NY^yqEd7AZ>WQ2 zXpS~mguk$*c_A`qVi(RM5w~%txgqj1)zx1VeHk`jHxh6buOL#-p4uIL{|f6CtnMi7 z3O6<;Xog<!#CR-$;%4kSrn7~n53X}NT`T2vSq{iwf7M#6^diaE_yS9kl#vgu&;gy% z4Oej=)msuU=3y~zBN@jj%9(7%$=#ZCPzn`L5pHOOZWw~0tvS!*&qN?bU^K>JGW3YR zbj-s7EX5~$hF2TI!A#Ec^e0HZzspVx@py`Ytr#YuBD$bAf-nyY5Qir)m$EwvUPdZP zv|)hQj)R!?tf1}xSowak@_F(0K)l9BsM@k;gb#*c946opNu0zvTmwl-UpsLIqca;U zR6=Dmg*!T-Gx}o=79as9a0XY<vWwb7YTboa>dIIUb|{G|Na#U^xQY9CfbaMLxhI=s zltBelMq{)@2qG}E=f2x=S(RQC)Db<<6B95In-POVs5-FAhb^k05!zuG0x$zBup9dj zgC}^4@33`eezeDE?8JXvf5n@-a054yt0SW#6h|f0L1)awEJWb|&fq4#;|GdT`%Z90 zYqY_5OvM7M#3metXem>H3`=Whdu97};?SbzR`jGrg0T?Su#bju%xVl5{_l(VScpYf zk9b_gbG*P$<nKnKpb{#>1HO2pI9cg>E79wDvM|rB=1jl%YY<joC9dEquHifEy3?1? z37z4Mv6zV{MB@O?;}KHv6t;8`M>wGo+MowQ5Q_iOG=qzZH_iP{M<1$+BzX2>7Y{um zu>t#V12>TYi{7jVD2@_vhX;HSf>7+of!>@TILc`=_I=z#?JvHj`THfQG|%(qo1;7j zumE47ij(CQ`k5494nzTp^r78R9W~&BX6S^@@Prp;VK&xd0}kLIE+Pr3c#7wEfkJ)R z$-%2XJ2wPlI%f1&yGtvX_#2zB83vrgd0fCHT)_?8!hNLR8D8KmGVm1}JPj9gat)Q9 zYLF6<g13-7=rO2_mgtE9jKD~&#x@+lMI<2?CC?2@h*}XfB5Fg_gs25k10s46xrkas z{9oE$UsSv)szOvlS=2;R^gvH6z(Op-G2FmYe1b(kIvaY!10yjN%diuBuosVDNi7sa zMO4DSua=%g#e3%F*w3`HCwm(Vg2tOM2TtG?tOv5%!4Wml3VqQJL5RRgL}N9Q2Acce zPre4mH=1I^m-j4wUBk|yEc>bT(QhEDEvV(iiAc0Td!*tGzTrDYQ-nzf#Vm+omGosW z3MbS@12jW(v_c$?;yu1$;9z#3@W*IO8?3G-&0}Id)?q8QV+Z2UVh9C-YAB;-<QZz% zZX<VA=?PA{i|5Ech;1v{pe=&13%hX)$@mN_9}+-GIHN5(z#YMuiAb!$cEsW_o<KyJ z)vLq@EezbppevvCkmUk=E+DVzE8s=MOd{;#C`#$gVJ0x00c#>DgLbIv#~x-F2O7AF zRD6d`0KEoPPzxTIh+yagIN%hYe>OgR^?V+kvy#-?(s_futkUP9c5GmaA}EP+sET@+ zh)^8IStQ~LN>PsTm<T=QU@rc~M(oD{97HU>BZoh$B&<*jj{b~^!kCzgr+9}C_=X?I zL10$M4-s%+5E)_)mIf&Y9pu?62PLJ1ykB3HAf-jvfCOAeI^N(jssz&CP#rDN6T>kb zQHa3-9KkDC3}<zO7BU*58%ALPmg7ABeHGOg74LnAG=lP@JY3;{LC|9dQXr3{haoRo z!xzEWh<F^v5qyCiu~$V8_`_T$*?JjIWiUk7(6*qXrEsUW^Tl;}l*7&C!urBXS>P{h z!+sn@EKZ}tC{D2=7!ml1T%!pbEzlFaFcLusLpY`)0voUkU!fjDFsL+^gFhap`7&V_ zKT2>3d4NhW&|t+?fubSL-~$SiS2c7;0hYf9v3yCCM{~4<EBe770hod?gkw4O;xx|T zJgy)U<;R-Nb&1;+)A^TLms66O$(xj>j<U0I(NV7M%N)ki*5ZFXw%`y_VLyRXU@?)M zA<CcznxF&v!Vdu$jpaCkR6NHE{Dkc!^Op5r_U^y-^9J_wjDJMciNd&{BRXLa0x%pS z5R7CzMxSx);V}R{7z}>|U=+q+5`qzqy5kuZqY0YB74C?}rt#{cQez@+h8Advet7-x zO2W?Qoe4^GS=m<ESys+rh$$<#QS}yY_D3LwV+2NG96}L>aIC~CY{w4l#4fzT2Z$=3 zFqwG~iKxj+@A7ga_m+EGUcRrg5&u;gBH2=vQWdm-2S#E#W??oip%BZvz?|L%rq#i8 zFw{pLJzE;&3}LN8X*i(?+M{EL@qlRlud@-^2V=jQ%QQfv&5Yl1|Gk^csl>~2bA1$< zMq@AHaR`Tz2vMMic#awrs4m_>N1>)-F6LtaHe(B75r=pr;5berYb{&1B<m;GuajS} zOR%D^ELTwFQL5LJLlw_ma$V(g7rBno<byVs5?w|1>@Jo)i*tC4C-{Jm_=L|86;v;j z?t+f!if#zRa7;!p7GNP3hZ?$9mAMzkEK|NbCD-1wAk``Lz+|k(DWu^w%&Ci1uHZTH zO<^w+Mhzhi<-(Z{?(l{WhG7w6!qtk`N$n8DDQnC!_+Q5?i%Iq`EXNwG!xn7AUc?{) zhjAL`a2dHNN*)wNNwh;(bVm;i#|VUC3c?VM8CZzLSTco=Dr{$B2M*ydj^HTVh|e8e z(HGOhl+88d8tSQW**-^?J5GF#Zih0@jqUmCnzFTiI<wA4BCg;nZa`F5Km=8dsffTl z%*Qe;M--y59*)yEDnlhyMGe$JJv2jC^g&;Yz<5lYrgoDiF);(t*o{y43Egydda#8( zA}|*haRZ<56UAmQo}OVi=`7b*1=5Jp0USguJ|NdrY8}<#j0W&RFhVf}VK|3WJjG{d ziOL>DPzrAFgQyh|F_DRr+^*U0iX+Z%dznL?Nfb$VjKY+3#7u@K$V8r59Lb>`8lV}5 zV<dtQhJ{##Gf0Fyn-)g4^V|yOxw%n*6^~Cfez1l|Kn+%$>d8s^vQ$eQw8j`r$821N zngZm87FMu^Eqb6AJm86e2tY6*APR0S%zX;<5RZ_F@6b{>QOI($)q|u4OpL)Kgdhw% zup2M&3UBZcnmH5*g;5OEQ3s9C6tgi8E3pP|kYg?<?A|n%Z4F=R%ND9YQ8V6{it_U* zD6Sw4ngxsnPz1$L12y3cHw;85Rw4=;a1yD=wUEFdqbwSs<HD@50JjGIJq#FZ90uq` z!E`8rZt%qn%*0%*#&#UWap>kTKteOLfE(JPBW7S0=3pTr5sh=Wis}UCjQLoK74xb2 zbxerJMKsqCLWvXcc@al5i`jXhFp9tlbx|J;&<cLg;~);<ERygZU*WvORPzOupN(Y; z11~C-H&r5eV>HGh7^{$g6g-AA1*nDE=!`)ahecR|<v4*;Fc-Ep87{)#i;Zg=_n<Of z_v7RS6@OTlOPTjgn^W0t$Fr{ET;vwM%qLwzhQe}xQ3=?EW4MM?Ji`zCgxxYm0ce0m zXo2zAjZ_p~&ej9vF$(jsZh2Po|1k=5Fn!q8c$e){#dQV5c)6)wR8~U_gg@3}8{%*r zkMIdnBnMHbk9G(^Ac8Ozi?AM>@EXO5uMEneBC4V$Mqv!bVX~s`CWSIF3u~|!F*pRf zrJTA)ag;-IxMB{LKvdkSe^fwyf^PxkK?}K*@}`BXQ`9ZxAA0e(mgog<41y1WAS!J- zW?>HI!GL%q;0Uhc77DFkQ;SaM0T1*;e+<A(%s~orMsc14C8PMzP%S3vqcL2g40B!O zkt$!BNxFlr%zYzkDVvong)(qPQ~1Fj5txRh*ob|2fE2uiw2GA#bx;>>=(#GZD;%D} zi8kZs8ap26lC1IN*YgT~|6Tkk+ibsojczS_29laI1miIYf8#bptYzVb!I*}bP_PAY zIEssSg!lN0T+!^5(H8y~j*$q$lxU9VAIr6rpTTmH;uI)*DS<h;rO)Bk;waCRrMsX9 zJkTHB@P)YqnM_w9r2w>FO^ahF{4g1zh{WI6h#lC8eK>~qNWW$LIl1R#`pIq4^TWmt z^&HxDsK#?>8*!IR2kxZ(#{a+{j}u_vJ~+*?o+2I=pb-<ElP&FPWpvB+Z*%>+2lud6 zI-XRg%OP=NUdO&&xQ#SRC{9PTc6G#}wQ`5HZB-;I1=F1N#%%uW9j)zP{ZKw3*j|om zXHPXs^RNP2u^l&X69oy-Trr|jra)9k49c!yHv{!LhN>8`Uah=sLvy_D!#BH)4|f$` zlU2kQx=jzn>66ZsyLkEDfgAb%{`JCkD=nvjiYxuy<$@ZIx|@|<_OhKu1ZbQPm2~8r zws0;Hsgxs!a;TfkH(f+K=ND~|i(=To5v5TEqIiC5O~sQbUUPJS4+g^@V=xwagkupD zEJHLlVH<Yi8AO<0@EwKLv;SGIXY<2ENt8hqI3oao7!K-1(j(*f-RGB2Kj##{s)WU% zixWb5G5wr2{y%E*s8B2xPcNj`_%t5-XMdpG9}MV3yNg%z?Zd6b!waR-+1^s#M92;$ zNFe)cf6n!=`*-79%H4&QmU>aA=H!g?u`F}^$KU>KzW?aj6q4qnkmB{9ss6{`nEQ>M zwc|h6kqV;5reX$WVm9Vs3I4(gtie`n!(JG03D=<6z}Nz{&==kq2wx1vDCjX|7%yQ6 z$6PGH3Y^6`+{F|8gzew#b#QAVTQ$tz#4c+yP5U6@dd7q6;)h9oF-?otGjUs2Y@H2$ zCasvnHldV7G26idn-ow&-18RIi1pAok=UTRX=0&QveNO1uBdW<p{0d!9T3}x>i^Ln z{;iMD5yX7P-eYWHant!<fBB<9DvEw-4q62IBP&P|pd*ID4^y!WPw@<;2z&s%5sWD8 zLLx3850%m$9Wca#m*7oor(4N=OuLldJD2}^irtB|GBa7Wu`;dn;^rev88--e5t8IU z!p0_8!2dV#0cx5fABv+S%A+MlV;hd+37+B^s%)WuU=uP>d@JK#jKCViz;_#)`rls> z<YCDd^INNwrfu2I&G~BOz~_|geq9-`P*z>k=2mvkx6E%`wIm18Ls}plo3RC3QGulU zV;ojPWVZ!dVa|38S&zjEti&o@#0@+_`aSWJ7@xR#_43togMGUC1kY_bH><3Rmh!E; z<jULtuJLMllv1_5+`v*)rtM&zXMIy=8&jsIY2w#kj6E~bvZy5!%$fD8eRo??3nKe2 z+Zi5VKd#~_<Q=Smh{s9X!z=uNYA0hmv_dEJLLc<S8^zO+XR90U4wt!x>iqp6q~BA< zhpF{hz}Hp&?WIT;KHpHnok59sp($*Y*~zk<+Cow;7Up#S`E<_yj&qk=x3v)!mWrQ{ zD0MzqBR>kD5n93=;aH~i2*F~kz$!#-H?--<B|5&EwW~Y*THK{dFXfNoEdxZwoW~VB zLMjGQ5xzJ9Q9*YhDk&YJqP{~^mPDn93Y&rXSb$|%j%cjL7U*`dH9{#=LS@x1LvUw# zimHdGR<U&Uxk7g{UfIJcicFN<%ZM56&>oX81Cda03}5gS4*NKS*vA@d!F{t#pVM<= z4{mIV^Ie(xvjI#^VZ3kRKi-&@%!A+8W^nhvqzbf4d^fo$Po%3%;j5!Q8lWK>qX{~q z6H@R3mV{x0hH!x!I%5z5Fcx|&!7?nz3ams73^;|;5RYTMri>ma=Tqi%mmO7l15N3! z(u?=b;4ID|5!Y}XH*gbg@eXRLQiB}G2@B+g9SXr74yXxdv_MO^!VRs^23^n<-S((+ zN!^(U+@nPFl)H-?IeN%da@926{615$?j^t02lD=Kgdh}C5QcC>U;!3l5f)<`wj%+D za2Q8$6z2Y5Zu7>p^-xGLY+bkmUTpND@I}$Fmxr3ByEpINT+#QIJ=8&m#96q?rjw~n zJ>>b~)`}i-wf^)JsS(U6&18BXVsIDtAX3kbo(49%*n=0a*w07~jwp>@n2UMXg01^G z6<tZ(KWMR~hv`us?ur;-iif8eHxljr7*<Bl;#cEsJ(*8@hBWuDZF5d#WgsVh#kN^_ z<1Ob@Ue1zj^mgU~*-)s$D1wqGj|!-W%BX_IXaZNXL09xdKMaCDMqmQ;2**6^M;uNg z5w!@oDOwr|u^uwvkFgks@t9yRMD~-1s+vvUmql2Nby$xL_!}Exu0C^>U8JgR<J$px z<w2_TprM&338~*08?DoTd{m@lp6d~Fl!@cQ6Z#_@QxS_xxC~W1+ewr}b-17tIzx{b z+<<KYb%YPf;XJyU#xL!f+Qn&(Xr})^FKj@#lu(Hi^lZ#aie_u8m+UMktc-%Ng&pkS zfJ&&0w&;#vgkb?zU=Lz(1n2PynfQ($_=!TXq=yQq2;)W~<?Z1;>-bS750q=Fh8cDZ z6x#{$b|q9s6;wkV)I~kiM;CO(Kn#Kpd@&e9F&+~z5tFb4k=TI0u@RfF8C$UrF)+lk zo!HOBrC8H;!dJO8<kxoMg<|b1zwUmC_b=li9^o;bAQjJ$f%o`;kH||y=R*mUL@79; zG|Zi&W4zLRupF-PQg#iOt7KdIABzH1(|4p3h)xj<(J}TxbdKu~9i$+gLv)hLSslfL z|NFoX{z$+}q#UA?9cH~iPYi%J1|$8}iQVbhes1lKnl~k=Uq|u50=>T+s`3?GP^2nS zoP^m}fvt!`Jj^-i$f-8!pf^0Q47;!!q9kvjB4=xqM0HR)u`S|Gl8ZTiYTo4VOu5CD z9mKIOr}na5oXs~tC}JF!h)qsGFLQ7`j<CZ$%5EKZaStEy2_=rPDMc@g#W<YADWu>b z<m2=>bj2u4z{HbTC)mpxKS?GYNb90_8Xq<Jf!n~d8hVId9ZaLH6&9?T30At?;@n9A zCE44ww$;_!iOL>{AdJEojKy@!z*D@#C#Z;{CEVeMAdJFj%*8xJAsVZ(25Yend+|Eu z^|jY2ruB?<?XM|;O7L(-Sjh%D8f%-FXCGo<KoTw?1rPBEkMRVlc!RfihYaYbPb(Bf zF%(A$ltd|%LwQs{MKnhXbVawLYDGVi3y9qm>(Rf~vYU!~5UT+9Nh&682wPU=A^xzd zH*-tf(E~lv3xnVTUkpYlreGl!VKJ5<66W4uZp{c<bQWeGS9*_<V^o(#Aztfe^QQ%f zgo345hUM6bZFq`w)H}g&1ILhr9(0htm<I*RupBF}4>352Q}|;GD7J#@mdzVCsI8(O zCl^(@D{m*rT?}u=$=vx&%zYYXa2Drr2X}D~$@qlN$bE{z9JG+3Lmt?{0fkWnwNM+b za6>D!MjNz4XLLjNQ#8>8xskf{N#nRAYs7TkK>6~j+VHm21H&-_p_qa&gkvfqFb}8j z4$)^A|DoAAhDxY;o^j`SLz_wTO7%%&HX%c#{9<J@FS?4wcH<;OG8xdG=FkFlP!IJn z0Nz-Q`*?u7WK|mV&;i~Uh$v7Lar|7%`1IIpr(XZ><L6)JZxz3sI=f#hw!L1m7qOkk zBc#FlEQN#(n!*KrFa|4e950cddME%<Cp|C>Q?L}<AnNG`(vXhA)S0Nae>ryMY^{qj zBqzsyY;o-Lg&Q(kBeX+%xT7PyFaX}@m&ipu)VV+rFcg89jOkc}6<CjLh{tJsLMBuf z8L~rzr`L|`I&$sl>cvwRk6Ap%5IluLr(UA0BBMvlTsw)nKp+-k5n>UCm-q_HOLS5A zV;JUQ9^w#>G<-wW<<3SEIfTs=HysWR;>GD6L!3Tg{H<{pe*NDs3}vl;?L%yos7!9w z77{9V(-#yG6+ux{K~+?P6RM*o>Z1Xg!UfIXfj;oZFa#hF!!Z(}2**@JApJ^u+}1cM zZH&+Axb${ezbL`satYO8LsYnIrBXLPC04;sdV8@z6r!;cyRaL3uop2ngyT4Ylemuu zc!RfihYY;ON2sXvoUlMHl)$e-jiyW<S!L>^1V_k?)dx?Dj}CNG0$*#ZDIBK^%xyZB zYINFINH=?tKuJ_b4b+4)YQfz6=4RGiW@n4iR~W&d8~UK{6@%+^d8SHLN4YeEV<6Gw zTIQ2sUZyA0VF<@YY{GTifCXt3ggM=-S82)X?1az`o*0Ft`0M)baYxobBYItKK9eI3 zdi)*fN52n={&`%)eE<7s$j`1XMHzr07z#fOLjd#$!D*aF8Zyw2A`d|*W@96^;T$gG z8QvfR@9_b7t|<WnWjjOYT$#H-=efp45XDgfB~c2FC<ABILT%JRM|6T02EZEwF$lgG zjv$P}Xv~HAkaiS@w7s(qZ^bl2M@2thZlJ2JTw26Vz1VU&MQL)xGM8$va%lnMTCwmv zL?Ifhu?B0g9-FWg+pry{a2hvp3%79xcX1ET@e*lBhXpPBKMPk$xwPbu!fh9&t>!Bh z&ILOZf;}8i7)2nuQZbZ58I(miG(uxEK~uP(8AP`;6=v!DrTVc;{g(FebN5@Sj3{sX zyslQ9QWm#Ew;f!~Ch?C`%Hq<L_?zh+r#6kHVO*UsUQ;M)JcUu_yzyRyruTXDv-xd1 zjkxHMwOqEp=dm5!qFU_lR7w=&_nNU;Gn$_vEuKzmPDx@BQMf;Tw@FkUX!yp!tmT{q zHMZ+UQI}QqHrZFPJ~!w!n0k}d4C`*O-NL%tT=>II?89Lk!BHH?30%hwe1z%_<49CR zL%5+c`oaeR2*mI^ZX78wF$4Q>5b?;ke_s5=Wo%nIbHdCC0TX5}&Di$m&p=UKzy2wq z;am<YQbyZYIb2e1qWtVbu>Rk*Jf+~HTsG26cF~t+!y)a#UfhF@NDHAfdcy<e8i-(e zKMvp?l3_uO)Pf7zBMjj%*VZ<sA0P!k@y9;@ePmm?sp-0)acji|+bMtk>Y_YQ<+u2C z3}V-_ut-Fr`pcm^1|R_DW?4;5y|_z8D07c3CE8;GCSo%V;55$Q6RIVvl}=A&_g`B| z2PID^8_r>C<PJ*HM+`|Qg(X)abN)JIltb)dL-e9u5^xANaSPA!0xyw<biBqVe8o3p zq97%-MOl<Xc~n3}R7L|dL?bjt4}3^Ix9eQ;>f{fLr;cV?=aKCft|3)Ywr}UD6IRNl zm8MNXPt!rjeC6#j{_y6kWi>@#K`x^t1<3{Vg++=zF&INI6n^kW0LEehCSnqnAQBt! zH#TAuHe)LcIDmtQ#Z~;<_N$|D<GN^3j#5f^xa^?Lb>Yw5@qE=x5kb{~g+vP1L@G$d zQ#`|Sm|NJ~icgXmhTdm`_kax@3Zpc#N}%@_KYd!%__cnRCX`02<<aIfVuPq7)3ZC& z;TMbt4TGe7^bg4iozNN6FdYV*#5FvIxdgQ+g(tiahHxCfK|IH2<f3Gvqz%w4h0i{R z$lNbU?6X-5=83f+`;L1>U)ft<NJLWx<xn2=P#+?VFhpQn3hjkMIEoz)8D1d`A7Jr_ z0V<B*6i(wRuHgo5;yGU6C5Ap`H;=%_1LzP;Ohg#YKH-cdF5(6nrgCfy`=^`%LrZi( z+TFCXyVop<$o8{l_t}5@>yik%aAnh#spvy;eP!U^vXi(*Ra*HNExQe<Og$OPEz0FZ zmgcNpkd5X!*`o0a*0PtJd{1KyLrGLa4b+4iy1^SGkSCo39TdPj)A#K8pp%1QJOT30 zDJ_k{d6RO#PG5HTHDww@nNOCKP-6PZ#g$WYWDczCL^ZghEBc}z`ojwY5QI?}hhXRt zj+vN+*_exYh{kHDo-vw49@xMWemIC@IE6%L@=__eVF?>3MdK~)<n?<^KT9V2QR(GP zR{~evw=5|xFK63n=u3%Z3c?PBPyrPoDmxgV2&2*?a0kf{l^>3E5Ea`HRbO$|175Eg zjll<h^nxJoAa{OT8<|(od<+|u)Jr@)`qd6D`o?dND~N042l{_dqD$(UDvei~i@Wn9 zkKXySxA@zdGww>}lb}Zk6vQGKRurfxs=!>pkxVbgDnua$cVR<;o1-&C5EJkN*WT~} zmyL3=xbW*@T5*jZa53Hk{>@;<-m{<P&24(LThbPWjSeDoUyMW$L`vP?QZ3kwEjW%7 zxQ6Svi+jlZj;2H@IHD$;Q6CKu0|S!q^{w$9f(cs|Y)J@Bc$^T>HGuy$Owi`#jQa|8 z@I})-7E5fC%c@lu#U_vE>+FyNz4<iItx?~MBRP9wlzhp(F{wVsdz8yywELdD0CIhx zZcytZ`@7E!cu?RAb%qLP0ay5A1<v5r7qxPvqPCV2?Zd(D{Oeq=HGcidc*%w*Pgp5! zOY*n>Z!aZGN5K8J$o~3*BKAv2!9%3tDMZOLAWHuU5)pJmcLZWMLJ*2@OhqK3@D%AN zL$sA(j(j)M#y!lcC9_ve<`GfeR^kwXN%7OgRXMU<Zjg0&IW8&dnNi~G;7n^>epAP8 z&{w-e{ms}8mGx3#k)i?nk%-H<ifhPA9XEpw^=yx3=!8(rLDNqR#n2lb@Pj`BF&tZP z5D)PJ<7lS{9Kczmm*U0zoS<EAjX%q#4V$*C@3O4l-tMCB6js6$EX%4sD3=U>3@i9D zgM%{3S6lYifU}ssxVb+}rp@o**;iJ4e8d-gMc!|mMuH6r!X0|JWpY*zL70M_h)3Xe z;=v4LJV<;HzjO8M;DF%SJ6C7@^k|W_6;bximHUaObR~#=d~xMKB>VUIXDuz19Tl_= zo_6#?=`G&Dj*=8YdrZSYm`m$MX+q#b?)iRF`>2gNsEhU(jG>s1!$|vSJSwl1?P|ck z9gF|tfZTkApxpmHD(_<_Dqtp-VL4VI3Q4#R%@0mEU>P>zF4ABQVKv44f##A%%Bj*w zdEto4DviM-MjowFjZ{(&%2m81TcVNjGn<&TC5B)q*228#WEPFbYPCjk$*Garpf5&Y zCT3#^_Te(F;u?PD)F>k&`OL)sRX>T!p#ySly&Ywfs-PL#q8-{}Dn#a!$b2fcBLOe) z5t}p`X)})DIIiLvZsHbd<<Llta2|JHMZt=}9EkC2M2D5&gM3l%wSihGuBt=9r3w}r z?m()Mx?m!vL6u7*xg#0_v>ItEcHs~bwVGcSth1k@X;hGXMTvO1oNBRR9g(N3QZyou zm2#+d-aH(7$jaffa#iL0F}a4)J6@jfkE_+5R-&rSxi6;#8}K*ca0+K|7M58h+s6N~ z$eCLs6+mAMg_Wg7%7bz!kGiO5sZshT$PLu~m&Fbu<k$LCrl%e6Ne$5m-O(TE_>QVX z+Zdt-24e_<p+^WpF&lqj6+|sjJJJPesK;SBT0COI@bxg?f+&;qXXzGie?%UcqM;jx zVFAV}P0q^gm5%2*Y@@cEHP0_+Jy7`GNjXC=<tAO}W>x}LEKm~VPyy9Z6LlaG^+yOI zFdg$DGFgbf5R1!5MH*h?6YO;w$qCKT8g0-Po%Os7hCha541%#72M~``yo7@lT@Q{Z zkBS(C#aMzU9777c@@S-$NW=vsBX3@fR2Fs749%f!!AlTE<y9<B$Y0Btqgh6&MKo9N zIV*zd6hf5zKdLnRO13JkB;_`T*M*ryG%N5KqQtK7fhhIwg!l~kd07mX9Zii?{A#uo z%So2z7^7KA#P|>mh)Kk`3L?(msb#hF!R(0?mvWmc<32OLf~b&k5EWruIFxm&l&JvS zu4OBLon#^A5p~rK10m{ctWs^Hc(lYw%afWn+2?nZa+vB=BaLRhv$%*mc!CU&U#Wcd zN}sNLklrmx-lmy#JzIu)Dc2}w5(`hnBrL!}EW%=Jh5>On1CfbH_&vU&bv_ykov{-8 za16(B2KlWuk}aB|H$2b>gRr$0FNbg#=Wq*;kUPIdvPMA^Mhm#X2jlZAyD!Tx%}>Db zv^SUL8>J~jj+G!v<)Jja%AL!aTxDFq3!g2Yl)svBOO|V$B>4?2d&3ZaRc@}b|8F7u zuLK^N6UZK~h_gFHoc}9<RX4Lr@JFSv-~otw`Cke2zGaBNF1Jt>VqS9{iaH81){}Ah zyP^v2iYmBE6*Ow7t)a}iD?6!eZ=3RV9M8NHFcDL+7Z>ppssb8GT|lEa>G+6~K6gGV zrLQv`siQ4Z|9IguG1XL;4ROg7NB?hWI+K<UZsG?f*sxcGb3u(X5-MAbR2wgm+fKv% zQ`y#G8P;Kx1Dz8iin94aD5hWr{EP8EMkBbGMwawU%tDFchM5oKF{(hKkP4zE%q5w^ z^g3)nEaGqj<`NdAbWPxbX6S?QFqixc)1UAK1&N?0vZ7H^`fwjX&Zc;XgR;@TPOcb_ z(RlvEA14+E7Z&j^#3`J?Sv-P7U6|{oJJU;`U@3Ov0$#veXO`4c8FWWa^ukDpx}*+G zCmPKsdW=OItTgqbb8yh;=_hJ=Ct~p)O$)L2!~(=36CLdtS0EGS7THd#+=oqJws9DT zzu{Gc@d%DWO)H6(%W5s9<Wo6JiB6Sc6h0uwK;#L9Fh7Odsex!u(R_=FYovZ9*so(K z4&fYHmt<puJEb(zT@-ZGNcAz;QDeHH1~*4^Fz~47`6_)0(kO}gXn?k82X}OY$RiV$ zq+1ll&=Rh2g9rNH-^%fxzh|N%WvPLBcy=xJ+OsXsRxMk&Z00ikOhx}fo~oAbDi$y0 zG3vQ@j1RNnNK4G>f(2L%b0`l9=Mg^R3%=qT%pnF6=5UNb6r!;jn-GgQ9LIUsm1dR0 zhqMoAkFFlsc_iw{)p=8gP4!kLr^&~SThJEia-1#ICjDo+itQ_|ATBkmekJ!;<<Fka zLFSKjRPw)(Ppf<0Gu(Y6msaJ^o_Qf-#-<qxC1=ebO5%$^Ou_ZirWtN#&7jXd!*yo3 zfoFJ**Jx0NkscZ&5TmgOOOS#`c#J1_UY4y$1*!lQ&=jpO5YO*lkK1<t`r7Nyw_T4E z|AkK++_UXOgZ?8Q)yi+qS>)P~lp2*W6?5tRtT?h4;UP0T%9^3)1Jev8vzH@<a)`31 z%CUZ+JccTLyIR{T^)uyYb)gi)-At;_TfET%u4s=rIDlAO#Y=oepYn7?^v7^a!Xj+I zXXGS6bKt>D-$AR&boI&_Luf^vcnr=@d4yingFk{W5tFe5Cvh3KQK2Gh0NPh#UB&?% zMOJds+A13967E%H;D=}U3QaZk+VI72Ou!r`(#Ia`bJ8@BQkZyz=Xiw=_yk>b#@8s0 zlBj^nXn;m=t-kM|&Q+x+9w``+*n~J-#3kHBVG7m?ZO|42F&t4y#8Z5SmICWwg<`0H zeprixNW^W3AU~MT4)VFaM76GfN_?ib0~hjiC3<DAgd7As5t-Qnk0iFO5EXC+=OF4p z#4TbL@z#JdM67+$A1_Q_NBGAj^xuc=7m~R%+u<BK9{AwO?C#kXtx<z5B|I<!t1zi1 zZH-kpinF+iyRdZDNV#e;@`62DVFadQKK9}uuA)F~`ZJtR9W`oe3P|;ss1I+9#<beX zLJM6RRjT2hh0amcU&P~y@tBRZh`}+Oz%_h_H3cn=YA^>elIaC77e1K+XW|-#$;waJ z^+QgM%&T(&A0Uj^<z<|0Z~89teoI{|{WQw749l?=>yd&Nc!dwJsH5Q~vJBc`3uiP$ zk-C%#AqcF`z#7+a4>=pK44OA&w~L_&h8_zW(dY23k*1Dh(U^{g!f-}CRA|D{Kf1vS zO`6eR(HUJZt(hT4OC|b=8r^_WlxAF3N&e#hZ8(gpc!4xzpkO^#UAUto{15^KTX70! za29!pq8u8aQ+<u`{?j~2)Y{4rt<!m`y!o5d5B@MmzmVyIL_IHC<RL^Hl`ZN7B5y~K zM_o7t(VQ;Tf<azOjkFOvaR#4J#8soD<kt03oGf)N8}jN@`e}q72?f?HX%8nfK~r48 zRd|!)K>UP6O0^(Te&a@aBA^v*g?OCASzN-XHuOWB#$^Py<9DpW#&#Mv=>`)w@c={G zlMr%uU@bvM^n|t}2RLv<C4B2lp}SHAh{oHlhLibp^;N#aC%IrCd@u}CF%8qP7O#+t z5|==IG(;n`M>@<ARiyNHvqi9g(x-#MDo511WN{{YurlMDRu<pjcN<`Djv|vtG(=$o zTiBs8n!p9k&>223M=YW}h)?cpVu^5KC*~tc5vh_D=~u;it#+egzN>3Fg_B9g2AS(% zCvzRf6{O-BUL$`u!h|;l!3R5W7{_rP>Ckki-eCzH%D@{Nda$<<IbT%rb>id1=Iq7y zt#~?D)(s3g>)(=>4e6MdZOO9ju@SovgQK{J+xUnaq-_HS3_}q9!g|Ex1giIBb-*ZW z#CCk|#RjA|%?M`?R#Oj+qco9;IZ*W>5ZLyk-7y~vaKzKFrjV|ms=tWnN46B~NTnKF z;RSDO#|~V>b)>?U#A~8G0zt07GX0zB0%SV9A0uONZ}ZBxxVVw&z~}s&3Uh-K^Gi}7 zbNnjOYNq$%A}--2(vY*iMk<7=sE>wdgx(l|P%MFhrHH{<+(sH+;Wgg&&l;x>chR|s zN36{gFQb)<MRnEvcvJd}+@5T6;E9Qd#U(t!cjWe>Q=k+EU^Hf6Gxi|{4^UzN)dM&5 zgg1QPH$cPZwspmgd+~Cnib*K0Yo<R!;>VGO*ASUFVm=l@B%Fe52}$=!@BuRM9Y2uM zo8ADofo#$77gplXAa;3pk4yymvWdcs!E}_tn!?gCCQf7I5XSik!BlJ-sw^v^8>#kw zsN^ZBd*@38Qf@M+MWS<ffAvr?4>f?7c!xrMY;_TckqE*ZEXI2Ljg8ok3wVm>c!5mV z_-E}6xGRf;vSTrq%Q#QY7v@UoVp!9(;`1?Xe1KQvo5cJ-Fxj6|mzaj$0SrLUAD-~R za7;iLreh&iU<-C&FJf^M_h1O*e>{W5NcL9H2T@^2#oOw<d_g9nMrouqc!qRDj%J6C z+G99!K#p-FFwU^Ow63$NKha6$Q4y8U08QY5(U^ej(X8S3yTcfjP%3j|0ZfNtJ~lx_ zu^ZO{sJS0}vckB^iKhn|xaYOCsy}Z?Hz2}GhZSL!Mk};IA9y1KE3g;Yt03oac2zJ} zMP90-4LZShq%qUYf8J=D_57Py?dx)=&DWSr55QDrm*d+Nn=0sf__CBV1Vb?eORxn8 z5r=r(z)O5XA?n!yl~4z5(H8-jh)FOv(0ZmVX$R_GtZw;LrYo(#_D_0ybIWw6b><-& zdvFT3aTky91>cYf+p%nU&>mh0LO3FzU@dmx1nwgP5-qQS=mEd)%BVQ3)t(d&y<MR^ zsG=+3W$GVv3FZoi?<7{9$?Prl9FU+cT+tO?@WxQ+5sE2ThFv&@>$r(KC>+9WTzt@@ zta$33Lu3%o+2QFD-2XHWIk_MV&Bk*mh?a20K=>d4V=x{!;4y)|f`0Hs0*;~3L{=#% zh{h&t!#<?qH8Su88luZJiQ_RxCY(g52q0V$@+2(AU)Y0#NWe*ahc=kqc(CE1lQ<yD z&o2dFgMzRnUQuVoPy(XvTEQPhsE4`;!URmhWK73gEWj$PK^&5B8SkImy`FeH;rN!N zTc&PFOh_C#fFJjf12`@-=xgZsqLrxOI&jAz42Q@?q%Km8#xCr^L0rToh}54T16H97 z|6z+7Xon7PhZn|&viF*)b65HwV5LfOX0+AOnNJI_SM6Y0+4;4s>BcXoYw7ChMdBZj zlZAB<8MKE;v>SS%H$31CANV5>K^TpR*pCB9fW;I>?5Kols0nAZMtk_cA8#JKG3aYk zHLWSOap~Bs6msxx36zIOMJ(-(VaS-us)oD~?D|j}E#Za_kwtZ74S{ua3sicML!~eV z1Zam2=#GByLM-BN4^lX*9tOY{^RW}Va0_?v8DC(|KNtB~ArC}Zia?ad8I-BN)Pf0D zh=R33SM<k7j6wva<1Z}78mz@hoWf1q!4tf}7f92{5c#GVlI!bAsRGT3i-bj@BEe-4 z2_1(yF_Dl+L?n<Gg-{O-&=8&AiO~qdY(!%X)*=>XrWr@^28E%KmGY{oZi?ydz<lx4 z_<gv%N@^pWgFYX#+CgMtPTq}akwtHaY`ozIe~2uD5sq09S(~%n$n-Ak!+yl$D30Mc zPT~|2aRc|KY1&FDOr#<Wukit2@e}IlY*>&Rmau{?N}>|lq8$P-e7fOmV_j|4Fannz z;v;hKhFDk&vG8zAMI=^Z9o8cbXK)XnVKIYcphI4`V<7aHkL6ee(S@6e%H=kHE;?re zQ~6bTk;_PkoTecfYaw#mj6E>mAQEs4$8iFua2koYf)u3UIX>YVROFlkIguNd5Tz^x z#~GR?QWYlJLlnCcMA3a9iXVz)SP2nA6n3M_Om@BSon=U9rfa6^l>N<@%rMCKCj0YQ zj1p#((;Pm*fF^LoAoyYdEap-o*q|^<BkO~SVt-}&z+v2WK7@Gg8AFM*792*DXsLUk z_a*Vo5Sg69W27Pt-=QI6C)7q0h=MG^a;(EPoWVuhL<%yYrcg3$Pzs{p=E9bvaMe+5 zo~FIjY96Z;*5f!%;0$i!DSkjbp9N3@H8B7_2*Yfw!fq%@t~y)gfvYZuA=Opqpz1HG z!JJ!jrrTgB{1FK)iRXa>%AqnSm9bDFBa!GO)L+2P9j(wAy)kHkMtM8Vx|UeWM=RS- zGQPgIpKEL(o!O%}wbmu+%}f7t$q<&FhUu7txrl}V@kqvfJb?2;cDQJU=4gwq=mrnW z#vCYEiUgd%$%PudbdHHzc!8JrgwM#mh*LALK|vHnag>51YNHM&VKRbo6lZY(7m)<3 z#Z({4;p@kDFCTw={PDpp@%s4VwFibDZFFjtH}xb9#~6snMbskVW!QlINWc~RGir0h zB3coph;Re;LPScGB1nZBkIq+go3vIN+Ur#A=CDP`=5R%rA~X?JOLT)L0$~oZ(-K-2 zH*gc4k@S>EW9sh4M`nwr=4RLX8T_Sn(AlW;BJlF4fNF3;bu`BY{EZ#hjr}-|uTW*> z<i-C(Fbn}0j_VL5s7>zuAxhzADv1=u|38sSVeL{hH6<G+3Zop{Fag1sikX;${Yb(! z+))g>JL(#$20eI~_3fES4ev>OOGc_pq{j3`GGejPOWEQ4MGa!oGB%#5v4Yre9Me~F zI&BrF2Ji(NqUa2(*}35rzOB|MCC_o67w&4rb;4C#Cv13*L#Z8|b)9%}P*x63<l+in zoWNt)kfSa9F%hB^EAa{D((Iu$hOAOmU(One25><~^u;&irlg|O%^*tN7VlPQ`fzK* z-y!s%_?{SzbeKc>f2`dFKox2K=<y*1oFgIvg58~KcXzGbt)L=ew@2(2i&+c1J5db4 z#6U4tY_Jgv6LpRI{mnTC!QFTN_x|7O_?h!CGiPR=oH!FziBbc6{Y3Zv>(j3fzdnq8 z_%-%Q?E6#ZF6_Xrux($rt@&fkAG4;6^wWQ5(41SVd)zAasLs7b1FKI-e(E0g7HLOX zt3~9dr*B0|GWKQP#VN;<C8lr4r*D;_`rk55Az6!ckVJltFZgp6HIRgMHz#^kKC7cG z+Mz#uF%W|=98<8T0=;8+fJZRrmXdZ28(@5V@!-;fQx6WW3tTsrF3{Zhc5T5`oY}OR zZPm6mYqADwaU<2t2J<~x`P_Yect6(%X(4UZ`WfZ1b4--#o-Qq-m0DGM*oLQ*{%ED9 zukS?}QM_1UYxG>p>cV*)If-}phHUGJ4zvxlk{Gm+wi`B^_#V1!ve9bvam=iB>7jas zjBTe*wlYdAWWKG;^X|rHD2^dF%gBR*=mE=e{Rt1kNQ}ZbjK@^`flUZS1TG^1Z;^yA z_yJeeH{&{fFUUl|6BVIH=H<himyTT8vuWL>;MwE!&TqEfbu#}sj-sQD?5IxF7PL`4 z(%WZ>Or3P=+o;Qpxn*8m;e);yhw+$)K&-@e9KvyG~6G9KU|-a-=iD<qMfNMHl9 zLK3_T+Cmb(CwgJ!`tsxefz>dQ6L0Td)w{R%rIT>@-nA>V6?0ciA3t<FkFM;bR|kn$ z)6VKHEv|#Q#F$IIxd=h9<mpzz`)~juh`>3V#|2!(J;WjoFYyL%@dbaujxv!B*^mRd zkQ+r&4-L?8qme>EpdEbR3qK5mKcsL?zzod9A}od!xTRQ!_1KKvID;rW#&djwHHA_N z=jRVEo?JV1ZTC;RukFsmUq6RQNXDCn$ftBGsb*O<|E_9d?NujEYjRC}+lG_$;-GMQ zgH!siG#$x9Xex@^Wl|K?&1bAntlZAXUln8pGNTowmUIR+Md=SejKD}NMi5q`|7Kcx zjKg>=#IDUYb(Av%F5@LSY+=U(Tj8;lg`fbOwvhsVhV5CiJZSlx<&#ED@|A8>SG{XJ zsx@))(rR~CL+yE#=*Qo@wdh!$rS__e8c;urteC8ftjIRzo0fTHMDR{pJVe5<i{<QL z^9rYZ?7yHQI^YGC?El#ebkvGI<Oo6D9IrK!`{7?4<9I*Q8B33``Ak1F{82|uU+`## zeo9(JvCCs+pU28|U7S_*d^X;_WT?UuLT&OW-ShCgK>pU|*HJxeZVjxc2eef^)viVt ziMVBja}%zFnV665I0@J7v`6R;AMC(R?1Dscy*Z)>_&fuNa4h0*A1aaeMA6-x3Pp9) zK)v0SDAWWtVk`FI-OGEI?uDCOx_3$H<XozyHhHwa-gO>rs+U@$-fE#Vi!v{gqNVxt zR)e(YZfXZ9Z)A|Eys@d0u)EKua^+JsNV#QECvXP&$rMZGlqI|a`*9t&@fz>&0}f=C zBP0{k!;+Eh2}@@7?oO`{o<nl><HL`)t{vAOo3wcE;z>ij+y36DW~1L5T_YB9w~v1N zFqvXnVOBn6SaMMw9m?CpeI7RsB_fiK(Y?t>JwPF}%PIpkm+q=(+T3n3UY|-IpiS(h zj!(-xeMgxdVygY<r8YKtnoFFLHG~ES+3_1nV+Ddy^B@NdXn@8D!wKX(MEi<~n29-9 zja>-A1>Ax$l#LJa942wm7VXgea6b0?34D3~`0D8cyEg9n!_v*(HFd;PL4Qzp*;>oJ zPkXwT2pXn(Wg;2`P05kP&8Jwtg+!FT7F|hobCy5#l;VlPUaliG|B|YkBLSw7KLfKm zx#c&dwG7m!WQNJ%<n)z^_4L&Pq_0Y%N|xvuqvhzYX0j*6r4~uJ|1TM4E{;kLDztLw z0GlL|Qj%AawgV(-=aGz2B#|jOOsNq}ifqR*gyRg}<0Fz#=!lKhyax{p{Q5=CsQYmk zY<Xy~mpn+=+-o$=nMULPs^`)qouW8TPH=UZoc3cEKD+Vh-AmGVKprba{il(VUVm?E zWT=a_yuIp`V~XPapTFI*YeBu~F-m$W8Kn?>z!%sap^bz)GQks>Q4}4p1+9+~Mkn-y zA4X#ereYofF&_)C2pjMi&tP|qy$<*q=^excSckE>g9Cm;3$%ncRv;KFu^W5v0Qz%A zdDN)>z)?Q=Tf(Nlqe8cYMs1<DB~+U`-8jm!6QO@nTIRY`)4F-9WmO(fD{0MhMTd5y zfM>PgQ>#wEk$`EiwrY-=%{s$(eKZrBMw`AxpTVBKMJX9dM|3hL(;+@1aSNaD1y)4A z2wI^H+F~u9z@Ah{gG%s$B+(&As@S3x%&8C(vD8t1w_L`9zIY6}tF<$)EPLVRZuIUo ztZ-K4U(1u1q@tu?`fyrJT*uJ}Qu{cYP3%X86T}6>;dzpsJ@}ns=LVnQdYbP>@-qcK z{!CeIT(H4eGgwhGOpn-3{ruF~@?H&|F~jeOI|%7_*I9<;*W%+H4OUxeZ8B>!`>I2= z@;%kkM#WV!`W4>c2dr3KXUOU|Mt6+CbSy>?j^Y@?a23}e(Nu`03p|h?1@RktqA%v+ z2qZZoaJf1?C(@%Qd@u_Ou@!Hgzj^-n&W&p~F5EbI<Iu@nCvU6`q?<}NcI{xj^I1!D zTs8mxYIE&Ye>JZb)}NN+bRRX7b?1j#TpzWQy}2Zo^;UBm^U7>3S#XN*X?%kt+28`n zmh8xbyeN+fsEc}Nh(>6Qc4!aDMt=;0Wans%!9+~LG)za}i5_e`2<*X0oX2fEKtA%n z7>c6?YN8F=;p2;2=jlTDPiGD=WPMP|ZnFPm|Deg5{{VHa)@`6#K=bOa)-i5P<EU=~ zcs7Ou59M%>!@UAU$D|roL>AH>{V@>!7=!>!#7xY>94x~=?8hm@;XWQf3b8AN*AoNb zf2u3z^9fAAWGuo~96~7G;XOVe37;UPUn2bC{EJ(rPd;9pKXQIk(D|TS({34q`Ug!5 zG99vH)vER9q1h5$7iTx0GCA(ioQxm!QR(CmkX3u*$GGzS)jTqRqqc0fnq6x#K+UEd z8KCCW!UobKwelNt%OY*4a85`IXXHRGq^AN(Ma+$&s0FE%<1rn7;x_u7WoI2@5rFv! z##(Gf2oB;9uHxC%XGfoHTre$QOoo8L0b>Gu`?NK80lopUN1)9d#04APe(LS+N)}n7 zEXgv5Fy_$x9F6yR%IgI-zEOlPa<B`#XkviYsC|WUd5yJ2AdcfHI{(SpK_npXwtlTh z0qs~nPK)XnAaHcf2~wI1X=*qtEzhs=lNM#gM7Fxs`!k*1tR(JZ5?++aJ7iY7q_NK2 zSvxpHt*iCvtLEX(c!}mc7+BHrXoyy5jjrehiG(lwFcW=<kVI+_h9Cet@Elo*Xf{ZM z3!?~%q7+JF00v?*rW)x<s+2$lR76#DKu`3-0F1>IT*ocM;yY|e$;zmKKA<Uj9{W7@ zaqQ#h$LAiOJA7{cx&1rO#jafxYwBdA-pw`YowaeUwrZGKNPEDBE{(kY!O%EF--FX^ z2C3aL^H=iD*@=EXcZwgl=GFQPqOB?=OC5?~7=a)x$4YF(797MyT*fm<{=dLqNOy^v zh$`p=A1uLA1Y;F8V+$e?i#UA7m-kt|Ji06$k4y{x^8U-5FYm{XeE((e7vC>^I`z@Z z=aB~nM{U#y)l1()pE*LUtlb+yoq9J^-L4%Qrg|8&>9b;Xf5D34XboHJM;PW`rZvPG zis?3l;skCW<5f<2qX>$j3L2pmb|E9h*d0S5#aoK@NnF80JiS(w6A$qZ;_qCKzJ3lT z<#YczK6hT<aDCx~zODQI+^{P7wC=-b8pe&{_rPbv)n3kIL~;flEMU}*1#m_%;i36- zEJO6Ma!NM4)Tn3TI)yfd{WMGkHA|U~Z}<+UJ8TV624ztW-OwG0=yjLMfVDV*YWJup zScvV|k(b_1JiBuE%DOAs{Au&Y&mT0c&$RiS+jgEW-S72?lIA~#(|4g`RCg~={Si#w zkIZY`rL(7HtwTDDRBfz$GF#Sh3+va5b+{DA`aEDK=@I20op2lZ9&^I>3GF{xK4qGC z_8Q>(j0%~+IAnUxI^yCBb~#_N>yNh>_L>%EJewq1nEa-P0n8iEC29JPF#}>~LwF#E zmo__+5Krac5}FuCH!aMl@`QC;XO8K25BQ)s*eZt8wpJD7odA+IrZIZRQ_>_7XK@Z! za20=|T`U_nbifb{#W0M+co;DO1|psg`B4A`QPN1S6w0C;%HwymKudH)Cv=9S+zrGb z*M0WVq2W2+!HQJ1h7GbHE3)Cs%ZGO##$5dJ@Jj@Ni!m2NcCQP$8xq3+t%wYnA2Tav z;w(Cb40~wG((+ILUJ$jQacWK%Nh|%R&otrTCt8<r><(3ZqJ1B&md_aR_#eKwd<;eZ zWPqB_y7psj<Ty2}v6!q`KIBIc6h&RsLwz*I?`VN;kTO&LA&oq`;WNI#m9mo&Zpeyk zs0d5>YD9P;7GW`VVCSRG)Nuj_aR@gdh43*H3Su$TMN0}}D-6Sz#Dv6zyNP^UyBK*q z^7z5yTMvFYcs%mr@r#TIX2kJ}bH~&9jn^6lsNEe*>9aH5ls={6wM^sGs<OK%O>iJ- zW}agIQ%RC+n*RtMso7+V>R>D^%i9D46`>zos0iI4m0|#9VJprf7V-E3Ybr}F)I=Nf z!Dvi^h7CB4cznfo{D2#k%N?G`p3syAj=)<;jeCvE)VRDTfhK4HE=-9_jKa~xE$05x zxTX4ETNtu*+S0@kiE-YETJRKhoZC)PXKRiDY`q5tsFjTcWDaf64(-teJ<uCI@Wnt3 z#Yl|C1gye(Y{oY1#(o^cVT9p0&fq+xtw=)~Q5ntA3+G?@{%k<*FhClSZLiqz#Ld_2 za3T?3P&APS6??G{5lD=Sj!QKCj|-0u-<AA7JTaPXg*IQCKGEE1acs>v<vB&|YBMO; z5jg^tB*>w8Orke0fIq{hsM&pr(TXWs%nRA}hMm=q>>YgKxaJ$JHNK(jcYc(>E+nAH z4}K)HvE?ZQwn|!CTje1p+Sw|TFbA)3&)!x^pT<@>gMkjV+Uf_6HIpBkQbV5D%)7Uw zk&If(4|GRburJ0gS7}poNhrT5bTQh|L2DLku+u_ksb!7+>CUHWA|+X(a1jsi5FhXn zw#3E`*^vV!Q3}67V!9tk@h2YO3BE#k%jr^NLn)L+eKdZ{kJ|kR_+cS5tj2mA#1ULY z44&a7T;Flnh=M4Js;G&s=!I#Rg)P{DJvfdiMB@RT;61F~*Cs~qr65H8>=NUS#%=k( z?Uu%|A#E6-=F&o^sRgy$b14k>C(HS0DG^I&sM(E`WeINZL`jrET{OS|_+t{L;SVgs zalFSTIDO!hG0LC<8lyS7pa&*mDgv<x8?XhDxbVS9^a#AiH&{^|(;zL1p%m((0otPz z2EZTV5r9A}#8L!f7xv-=P9p}l@C+~T79Wv>&&BEe1^XmQ01BZqx?mP&BN!{O9h%QF zwWQW<nd*|^C?}Gnll?DFd{S2RYDe>vRg0U%VcMZ-YCdB_`PL5Xgw(X=XorCqiwOwA zQtZZloJABKBOYl!lg@C1CrY9WTB0pRVl4i^avVS?Zhr2`WlsdYLHR;c3s2-iUgSen z)I~#dMLfR2>MzPOJn$PDq76F3AA^y2H!AU{)_sQRruolM?UQ?UX}2#;yh}Heo~Z;5 zouf985~!EE-o~=>_2HO|>DY@9T*VW-g4I{z4Nqi24pc-Fw1y7`VFD&%D&}D!mS6?K zaS}K15O47HE9K6SrY=2P;emoEjhbkJ4(N`a@P-ehne@d7tb{a~7x5L+bh^=8x+53z z;5U?pG^rz@r-`JC)^CQYCMVa=gtK=(mv}BQRC;<Rr-t0M5~I{&+R%Ay*Qm#JjFn|p zmKM4&t+TYyRdE^F72D+2`YA286Rowh+Cwk~ZnW0!2*7Me3%(Q^@Z#p#n};?8ZJ0A{ z{K$cQ2lgB|vO`18{p$ZH;&&_GRBAO$uPxHl3fipsoPC==SM|2aru~>pasM<|ZDMqj z*_^~He1;Vp1~+6!Zj?u5v`1(7!XGoS1A7pPOSp;~xP!Y$z$bjh7dW%A@kCCPMfEgB zTctLE_UH_M48=6e!cqj|AdVmcr*InAaUZge?f^$PAvg3FRlSTdciW@3n?iC9nKxJ^ zkBEAi(elTN87s``MhiS>Aw~Z|AQuzr?Lxiz9AJhn<iMb`%sdbBq9}@?I4Yqz{4gF< zu@vjD2}cou+la+0yhV22sh1lCPy|I$4gD}2%WxJqao@3@t@44u57;>Ienw<LSyV&= zG=VqzV+v*<{@TfF`_|20w=ZDd{M6l``GbBLs5g!A#SZ9AqrUw)x{&QpqxotTEzd$W zM}rrt1ssa%M|ee^X^k1#S1H0Cgi?&PI)_ndZI#hDf;<L>!y}!o;_5~eVC!kC48mxH zAl{3D0{6_eN+j}Up+I3!R$FBi9^<cUwo19|`d&%_Eo=j)nk%p8xt974ie=xVqm1A( zyHA`a3QOROQ3+R`{<LF>>XJ)8ocq?#+q`cwXZ-C{2X^;|`fK+$s@aU5l3J^=9-#<F z1Ww^J&f*-R5QistiUhpCYrMe+{D2K<Pzc3P8x7G2P0<W3&>mgUEv=ue(vv_x_+bb} zz>=U72+u$eRv;KFu^opY3H}I)$Zbye8hkcES9F6f24FNam&Iz{%rTeGUyeC-IqX!- zfl~)!?rvCkmyRD#PS)wEbsMJU*5+tz0?uiwn}ejF9OP*Y7OSPT^=lcf*NTcVw=tN7 z+1P~5*aFG=oG6H@Xn-c@gl_1I0hon(*ovJvjk`#MjkB#{2S<1yGwPxtdO6dEj36)u zGcg;1Sc+h5#8#X|6rSNFY|}F%6hjTvLOrxbdrZc3tigU9LL|=NB5vRg9=D<Q3~5|w zxRD>G?FQRgj(Pr<ot9No>uGVTX{mc^oYG?#FpII4%)Bsap#uhB3RYkj_TT_cA`<VA z1eXldMifMOR76$OM*}oQYqZA*jDdz_*oT9-mw}{yKp?FvZ8?5JIkdwF%*1+Z#8yP$ z6h7fAvSqYYDxezLpglUn4}&oQld%(f5rsHB!3QK2r}r0ZX-6DjfD1C90Lq~TYN8Hg zPbZ_+W*YD69XNv*V5i#W`MD9dwLi)>Ud~~yWY>G?dP;rqmFykm*GvavS&R*3ZgtTV z%`gHZu^C%%5*Kg}v4}$=K0$S7vxlrGf)c2JD(Hx=7y~1gV=qqQCT=6vopgUm;0>~P z*eW?t5lzq*ec%IM4993p!ZfVMW}L!VJcE*n<`^ERg*Ir1PUr_eEWrwd;9M1YF?fP_ zyub&1#&=lLj@v-m_HwZ7Hbu#<Q`A4~Z~jbsQz-A<#1qNeUvq#TjVvurmxeqbwV`{^ ze9jsCnlrMzYLM;8X<WnyIIvAokrxF~1vO9y_0a$=&;gy%1>MmDLopUcOh5ppU>4?K z4-O#GtCy`3P2ei7;U@0m0iHrOZcc2}(xD+5;p2-t7w#M~b(@0@-Ps&u>YE4gH=)gw z#*G*^$ea>dq1Eak)4sU02d?sa+Am3?1+G-xjD=<XjnNx@;Ee(B!$9oCX`I11Tt^x< zw)r3%-hwCv*#IBGN!*7c8)4ZX55Z`xglwGGU=w!XQC1Q|w$@Ma8gKCzzOeO{E%-OM zWY@RkN)0|c;lt|(AMSj(9(^wQdU(k75b1@7?AAZGuHL$A0e>-Q_QcuO2U`+j)mk-I zCs#M0VQJ(Y#nLb95Fpzn&Z5a*`gusM{dv_qj`2lm)ie!ZELTXF!hBnXo5ue9ws~4D ze63neyS+-yWFu$g68)VsrP=&UKZB`dU9EZ=T`g}BXkG2CK0`SnUzi<~<Y?U@Ts1ef z3Y+m)9$O_>UTQJ?3ew8KqmZrAst8*^jK^#&Mi`um(#&8wPT&+yL%+dMOWNkN+w^-p zm#dW4N)%*=NP0p0o#ZKas+H+-ku(8$cgy7>+S2xHI^+-2>Fb{%{X}*q$%g^(!xT)# zW^BP8>_rT2;3gj71%ALG2ek~jkPp>R3vJO6zVOF1BfVKzj=ea6>$r)#cm=zh?9`$# zilQW{p%!|e5BxC{Q!oRounzli0eA2kZ}Aana<Sb(>yq@!pdK2aKgMGMCSw7DZ~&n= zfisB0MO?;vn9m~U=Mti{-*@s0L-jdo28W~OGYi`93%Sqa(p(M~$E~-V%p1Fwqlbp_ z^-oYK5gy2ff+&u%D38jh0x3Bguo0UerD!h>BMKMs25*s;(xoCd@}LqLp*wn_FQ()% z+A8x2EWk1>$8ns%4cx{Hyv7H7#1}}hEsZj$ftqNB=IDm*7>DtgifLGjbvTVPNWk-a z^j;tdKaers&ke=T4aQNe<TTYQ>p$%@MJ3An$0z65Y}zqhv0lziY-VF^T+4;9wPb$T zksGB@7S&N3z0nubFbj*Z1Z%JXXK)@b@D1tmvxP)f<V0aq!tZE};TVG@Sb;V9N!<tn z$8j3bxQuJKi<hu1Kz%_z6hdP(hcEmw1FNtXrxA$@xP^Ogq|q=SKPsX+nxO^S6sFe| zJ>dgi41lyWixGr%SP$9r&#etxrsgt)-VJ5PN7A*pVO@%JjnhwvZRLbm1NlZ6!V!tH zc!8J5NE_w`cjQAc)IdWtMKAau08_98E3gB5a2bE%72e`2l)`K#;D+A{ldk0m^g%z& zz#If&DOO<}&fq*^@c?h|9@aFbc2JQXxsVs7Q4V!bA5GB$En#VtU(w*cbTXYZr2n(B zJ6a#z!Firsa;YMXsp+ys&bLUo+j@?a_0zR+6I5I6-gY&oZ&hi!pW`pM6{C2fA-ZBB zcH%A)@E)0q)A*q#8p8)Ga0M~Af!C;5f)a#PH~^cHwmdkVr#k9aP{=(`rp*K)FU@e( zP($v6+N@pL?4-(#%=U)va`Cck57<nYHX8bNLatEslIY6{e}^?IB`cl@Ss)Q8g9?y{ zG(l@fgnGaa60s?m4~gI&9D_tO4)Kr(zr-6z#FL7V-+vL16v&2Lkd!Em%8(SPg9eb4 zX@-`N6zY$Gn1Pv)6kCOLkd*rq*YOr!q*fI)LnlnYTCA4=+p!-xOR{$N&i=pr*Qb4X zPr4Ajqns3yi(FfltHb_=rL?F8+<bC(mRB3ekZ4;&wiIP4v!h(+`E%lqN_8?;$%Wi# ziien0isk{cej^D=v(dtwGE@!RLg%tfUyl8^%4`Lz@cpW^e|U($;9QM*r&(D!d1@D? zyEF}&;o@bX`CX*wberU?zs1v_ee>mf3U`RgQ+S-TM*Y*d6kgRlJG&F*DLy<=*}P-n z)1x*a_Bwl+Lh>s*yGYu~A!-)w(kz~m@k<$VlN6SC6+#nO;?{+D^^v$CfcVY8Y;)Y! z@VOob5Q0NEj5CPDIb6V>xB*FvJ4jD@xWJ<<Wh^s+cIXI6sIFLuMOcdESb>!|jTl&y zn0By-1Jc6<Igk^%APK$>>k);Ec!RgdP@dfyRQI9R79G$Lqp%1YaSY*j`SkwN+qiQ7 z%G0o&|I1EWy;e?L?&b_$m+fjb8wwjI_B@SsWC;<tju<#rV4o93Q5%iW1AQ<GV=)fF z*pDN)glJqt3=;4HFYyiE;Z%{m6J&%N@}odS(!Vr;GU$yyn1spLfTM^+EaLG4HkH`O zz!P4miCSod))<T-Sd4Ahhx53G=SV~vDneRht4A*<a-lvNU@(SYC01b{_Tv;z;|i|g zHtrw}DGqF#%}~>76{k_ot4~wYac7A9%Vydad@cKeM|ZQ2(p<h}sgLf|$((|^XsMfX z2+ze@tiuLu!~;mZ{Q{}G>8QKu@f%8`3hJT}TA?$#pc^J)5@uI3Qp^Y}!D?*5R%}No z4kHR5;ZmIpgF7;zG%BG6>Y^U%qcu9AI}%^S-;RF~6MrfG(&<a_VKE2wZfnfen2i$L z8q?bxS{t)<<H3zVbO$%i*vMTZg?m(`y|XHFE%gnLjFDmgFoye@77aSfA(?5MybsPa zkFka7YF!MD9s~4NiQAr}C35%C|8g;X4ydo#`eB%Zm9ynQPR6%(uwr)1fb%16`Zr9| zr+oXHEKr{ppL!d|R-a2hrBbCYD-Eh-ieyOFYPOnlw{)4cV*WgFp9eH=(S8J{bIB!Z zsW??vxS7a3k5z*{RumKOUecIyDLYTEPB1^mdt7;*%M{l*on4k)t}X=>`zUT0_~oB{ z_l#Ql3XXNOl@)j&TlDYgGP>z2Z^N?njF(K`_P<+?BmY0vgJtVwOUji;^?yzeeKYd6 z^pJSy>Cxi(f0G`bru1OhdKs4T`Vwnv=<8BI%i7J9H#_ybQKhWuOO5}pmTJ_OYAZFu z2aB;DTM&vOHQ1xU8mvP&&LJ9)@EA|vQIkDXR7EvZM-6mBXGG!>rq*J!j_FWpvz6*h zZw1z39X4VUw&Mg`>yR9Hi+9lK^7-1-#lOBy7ymluT+E61u=ub&Ve6M^@!Cwin>uQ$ zHjMq5j7Ca-z8u^nPCaSbW)1aA`oGo_875OmMRoVF8?o_kQ^+tmm*w5_b?R|^OUAkD zl{(dY8B@4Nduc7CCZ!t1O6j$WO5dd1ai(x9byZ&hQ_CQK{W`s6isV*CZ#&9bYPbyk z*|f-CDQ8fKa-`>=<QBQ}kM+Gn1|DPdxAL7_-^aiBZ_2m1zFSI$lnSfb|GXZ0Qvc`m z$oTTVS&wq2dd9L9Ye=CQO`$4VkDY!*pmamF<CxHxeRIshRLy0Zypv>GI<L%QQ#Nix zQ~jY$>cdo(#-_`p1se>8DjzC@%i)UYT$U6r2WQ18pOUt216tCvRWq7*Mt_DR?s~o6 z@?XW$RIk%Yby<y#*oM70hLbplC`98rZbMR`1^U2}8h;YLh4l5=%AyUrpga1)52F!) zDJb566g1KshzZC<Qf9$#kfa@fG5Cb9kfhGlh<z;-L=n_PT`WZ~wqhG1aTd1`3sXz* z;I(x3F5infd*tkqgIf=7HA>Iioz*`#E;V<HH_q9(luYAx2vcpBKIc^(O`GZZg{+d> z0U49B7ReS>hDklE*2R}<EB#-mkYPrdL~@l)F#TUA(es;`S(+WGdG0>a|8+{ePBO1K zzwc)XX~=$^!qT|OXYv$A<#*oyD(`?TC&@H~5<CJ%NU5FyOUd3r_)lEN2h?oBiB6Ph zMjMWrDB7IUC1{4$=zz}XieBiAeprAvC}8}Zyu_py<QuG7vP%mU24qG~<U<jZMqSi{ z(u#8N`s?$jUvHj2s&_k&?mW7Bp>z`$u9iOr9bNddQxx8SJE4)>>?(aOB2k)Y!{4dt zRfZ=PkUXHT<@lz0+9U@yc70$PvZL8dQ-JU40qfp9wEJ5P?%F(OgPnDSaLxan>MmOm zsmoFVB!7QyEB;d%DI%?gB~3j^&l-@l9fSZZ#~xh84M>`&YsyJcltXQd#Y||q=<UWC z+{HUMk}+P$j}pyn<)unB<zZ4av{ltP$<8BQPG~%{D~;X~86|0GiJY7j=gA)&yTH3w z?;e%()+sYz*Ymq9pA#`3=kNlSyzgYr-^1oSe#@t1aSe3DSS-ReoWmtV!-?$A+rp6@ z0|MPz=<Au;w4OY1)u8bhH?DuU&E=bFR-OxKdES`*gh*S{x|3OdTX*v9Z^JC{@nSK` z4qU`lTtj+_R#9^i8_Z{VikTO(U?xKG3bk9?Dt}-N)*)k?oSZvq!)Z^f#X7{`Ic(dK zVQp>YDVtl8<HS>Bv!^vDyOh8GnCw#0?J=CijKqm{G|h;{WyIqd9NTlGgxwh0iK>jP zok?n(#u=Q2RTnmDxQAy*=u(9|Bv7O)aYv6{oM?p~rr}lGtGG)MaS?kX*6&@vS6i>e zX*0ALW8%gPm@%MhTvzs=vfF#P`>+dOsw1>QrT~qNDbTp!VpE{#2y@`FcWKj*ZjOib zfTcniq@MmmeU$oTpUYH9IlJUxOvl@?)7fSxU6pd^k71aFK+MM}+`>DgCxvpOCfcDN z#$Y-YU^BuXDSHZ*)C@4E=pH^3V0pH_cFtP;nw*(lDKgVszEag8a|SD!WfnFaI0{8> z)Im24gN7rx5BrXs`bQZw#7JyG7@~0x&tXR<7eGC<L+?&5WE_DZkW#RvlkLx^2lEbq z!cI=6>SCz|S(rkJz-@ejCuJlXvZFP8F&>K{WobV`aTrpL%Ay<wU^0TR8AoslH*gnH z-lTY$QZOXaTFqpBq_O1@f(E@MGU_R(C|xGYf#ko{;LI|+?ihpVSb}9(gQEyTIG*AI z9J+D71S-m*2|A!Nx?mwTXQOunXYmT@yOSO$j27Mhr_^K$Whj<oGxi_^2k{QhJ=l*y zaSXs1Ovf4=#AQ6dYka~td`Fd@tS0<14u^3TKT|WURdR7Oq$rNEPw*ex7Ma6!B*LDm zo&#l27cJ2V-62iFZY09GH)R85&>sUZ6w7cFVF<^cNa$@~*NuQnAKLdmdJ{N2c{TN? zY5z}E$GrYZX1=ZzKtZ%d4~)eU?8aF<!e`|0rd*;owjvx?@Da8?lyOu=cNnn+kv>$N zw*-{FwC5<^_kYT4rci3b7Zaf&0`E|!AE!hy8Y>Wn8+eHy$lad}GAg1wMqw^iVHZLX zjr&NzYb4@>5^~a7&7xPGf2_~aWQQ=}A;?S$`%;ny((L#Xcih2UJj5fsMj}3<&k$M< z48&wi!AxWyO1h&EN}?31U^n*Q{LlfMq9$+$cX1yNP-hrv`snSW>yg(ZLw0PUTbZ&y zXF~r8bGpx2ney<6u&cYzU$z^RnuV<8(g%MZMfsr=(67*}{>pUK!sU~WuA0|wb)@XR z$v&66Pn#;AOq&#^+_t8`$c~pyfr^8gngTKnTM{>8Zb`~aq>Q9aRW!l`%*8V7$2q)) z3y~{}#^{cz*n}uN#3y9+V?JnwzL<+$xQb`^4$HQKrvP8D=7D;$_w|oiC==%(%gUk= zhF}r4APn~*S?Pu1Xp2!;j@>wpOSl2aYD?ByvQn~6a^~j>k?0?^XlwP3R8D!%6~C77 zC~z;Hkk8#R`X#90frLU1IeBRJ9&#Ue*hbaS)Kpt`6iN60*wT2);&KnCeM2Jlj$qq7 zl7oX$Y#HD?npPM2#;~u7s&E?1DOr>r$G#M-#?zD|5pPh!-pB^uXuJ5np_vvgxAjEV z=eEZka-Vf{F#C!;bArdfuOy`3ihab_nY(=C;SN>hi6{CneG*2<4?&LljX%~M^J^DF zxCmm?UNwWG>7YEqwTyOXuUg9JF7c3cmUWf&EQ@l#tgo!=6FkKi`~_KeeVtk5?i1Mm zK!1$HC<I_4rekFQ$2Q12iQ0xzsETTn_;P&$4bTMP)7Yj>r|`{TWl#X+F+7kxH_SpX z7A@e%C3q~PT;X?gLofKk4+R&I5qON7i`l!tyM(*fE?!GG!@Yo}&#HQWLE)xBgtjMK z+juQu1>HNnFQ3;E7IHz7=>bIY5S^-ptfV5lYF5RaT(v^`dF<PsH-^GpDw276YDlaX z6XRf5Vn24GDFq~=u9Mk7;|Q`(VYhuM6@kcG5}@=9A~D;P5XH@jkfaT&%u5C3DU6z* z{M;9KKs5w$zD2uGlb->XJ5f~hkpn`cyma97bdeAaiS*lPJI!ahZt^E13|f&T^z?5; zH{e>Bz!0^(cI75lVn&9jxtqI7n(v;=W|K6Qv|fgl*o<9}w0AV8^JG4c;jKB%15%{> zVA8yRW~&9<p!glR$lF4=kJroeP%r(-UO#&>!fLB2is$6us6nhDt@ebM32C(ssli59 z$-f~QyDxvxfFU!=Eunm%4kB?D`IocasD~jKiit?Gg0cliD8Uq9ltN7$Ll{1;<Ogni zLZj6*kWkhz?Hcmcn!quHVd`2=8Dj(XU@!Jz?m8|%gkb~ux{1PxPFvX1K_Bej!2+Jd zTuh2g3W-VD5t+1c1;HmVNelSU1N0`z2>lO6j7xeVm(8W=nBQ71WYeyPs()z1TRLUX z8Xk3Y(Movpc<S`uoNTqQFtxOANm4sGbtGjZMI<F86;44?Kw>VjZEudP#L~(fF^Pyo zKvrB<`T#3@6*+dYn}$dzyO@3#xq6L<s>tJ1<thHW=G;C*et96fm+9WbOV6F0_4dbx zdZWcgaN|FB{q#Cmrn~v{-)7IFisB_HA`AI*H&qmA_E3XhyO)CjIA9PS;|ZRk@IDUi zP-8z$2O6RYnxZ8JqWJ+1AkZE?(DQ(;QRz!yRtN`3Sco8KSb+@(IRTFy*pCA^j?#x{ zs8AhE&=f7P6P}@Lvyd10Pz=RU0TodTwb2+<j?WP2f%ZqnnT7uU<GMj>YfaNf*CC z|2Xxxe*6YaA0`v++^=ZCF={ETM3`FNi9+Exq_<ushKF$#+r+%QTRwG}$Ww`IQm&Dz zlDgM%3$b{Jr*PO~&PKhFsGd7*4Q)qcTGx=~LFr3cX{(yMxNBD;R8J=dCR7~Z&e3sh z2QIbj-|Ofr{fu<6kRHd?V5_V$)(sx;L}p|~cD&WPpXVZm<|kFJ5PG|;9A#(@q?ljC z>s0fTv4v0sMNtgJQ4)WjpA0R96!SZkm}-79whF4EI%=X8YUA(olc9BxVt!}eq?(_M z?SPKxgf8fcZutBBWT+JD6!VLEn{s~MGFA$_6m}`-Qoxs*3%L|(DbP}WqfmzOD&<(p zZDY!)lwC_%m9i;iQi@s<exUGSjuVe?_;AEl`@N5$W>9OcHd=K=HH1W8Q%hJGW!l;J z2>H%;$oE3{-XXLKBcAAl&KQEB7>n`|ly|g1OY}r9c*6%(j<fB+alApp6SOGEbds}B zD1OqmkWz*~IV8PGdVDA8O48XoC+L#)te?Mr&$K;B6X*scP3S!#iQ<>j*_r1arq~>7 zgFKwdXa(jOysR(33yM+aYmYBGI;ZCXV`(&bq9$8xX*!R@sCj*Ik_O5?bUaEUbIcSs ziN__luzr<cS?37Cvfig5>)wF%wyeJgt1EGkRS(3V(_Er}oM$MjXE-vf>0CyuzR{(I zWjoEj=S{Y26ArQw_BRmH-+Qk=;(`&YjS~Nwus+4{Ir?K7R$&7+VjH$&4=f8S$pY)5 z4{qQ+dPK78iU2e^OQVGj7>z;a*%Q4$WKj}r;S^=-r(}qt4xu9kVhE;UD^BAkUSsq{ zVvL1Y5zS5x-o*dx?%%p{OaC)$+aKHF!zPD~K+5r9?44^lxAV~7Pq)<J+F%c-e45{F zo}~~v$|)UB7FCOPD@GFPF`8hGMMKtHVj?l{Ck7G=%i7CIH^l<;O0DDbF7DwqtS?dV zP!NSt>XNzD<9NlO{TRvpXwiSrH0`*<D`9#vR;h>1Sb>#Tg_E!%s?NxbGN_M+_#Mk& zNsc{)_aYWAV0D>1MS0Y`%-P^lPA5%w!!>%(zFX7#>K>ycqkN|p(=<aX^nf=eU<wvM z!)cty4cvvx6&eiOg7sA@70RIkYNE`ae8L}tFcY&d8;h{`Pumts7=inE4cF^@0lndk zYB98$Xpf{vNq?s5E+mD~?c2Uao3duyn(h1aF3CShyYHK>V5W4YgJ0QUmb*lh-1>oU z)A!mvdo`0*C{`_@@`G^l&Na`Ga?Y#Gd&B-};0i~5lV;Ff$ExYI?e)0HYG<gUQyZCA zLDErAtM7bT;_bt#_F@&s;2h4&>caB|8)QtvVL06+N*DnDTcioz1#PAr`d_6q$kmu3 z!4K3PRz`_%2XsVt^nhgvGWUCkg=KEPF{jezIZozt3T|Q5Z7R}T_V^KjKk-{EH5bz# zP<rtC!JP+JkMCbIZ|w2?{pF+G*fhuYAKzbR?D3GPkJKDi+N;~DixyRl!@hgdT<mSm zzvodhm7P60D_#<VH8_bUaA0|b&=><S6X&7cp>&`Q0&yJgkdO88g{<Rslw!SP{d&aO zYCQGuxuzdg1in)9b6}Z9JMo-M+VE8E(2)t0NjQk7$Ph=#fj?Ft6p6@tpX!1x2!TBj zZUjr@9UqY`sDO@`@JL_q<>Up|NWEaAq?mjmD_&yyW6qVq^$9y6D2T7HeM*Clx6jzH z!6t#zVR(m+_zO1AnFijk$)QBr-8ZBT=3_B}uo8y1L=a2g+2&Q&zGEhF=MU0te7Eu4 zBI)UYfJGw*)AjAzcQD&4FDvtLVvpV2)E|+cdTUu$IOfu_J?7ZvQW$r!Re7$CZk2-w zE9=a0sX#m=J{Mt$OJ#FBeEFP%lXwTWcs5$-g6X)4@2K-kPrzo$3CMxhOEx=+FL-eh zJuhusiS+5T<|CZ#wEi#E#U1&AvJfGV#Bw8HDq9kU&*=!mGo*dNUKyHV6%tVPC8q%} z7iaJhnO>2juk;lupsz>>MabW(C&QFM2*xQqM=lcocMQQ|gdzsH$&l9AfOp78Ml^(E zl4ME)@_`J|^P}{8eyc~(Px><NX|%5ft?3)uSII8RX!|5;2zsM0{4fk<KaqAA`<W<U zkhPsM7&q<glzTX7Z>OBXX%tUmr?f*L=Hoq<JK8CG(8I}2aaQe=^eBL;s$CnUCV_TX zf%SNfPp~rBDK@Bu+USfo&!0YcdYA6f)6l28pKgA-{^|0k%m0wx(?x-Fv!~CVJbm(n zk=mf99<ID^*FlR*;zrclZ`H(hg^0cKBSka{d|_h=OLS%vrGe(C$f^%Z`*U?=4g0VL ztC7!{Xrd8p(%WhCd%83;J%fhF&+z)=_wxE<S=}z^ik|3&-jJCL#u%)E%y1L7Vjp5~ z6Sr^|kCA}1>Fl`A*iQKaad-+@i7A+hX_$_sSmtckU)e<9FwWu}Vh{%<J!uPTc%m|@ zpaVMM{fqb)kK%4#xEXmed~dke8@_YR&c!<?5C40opV8IA|5B@Ixs%j2#vZ@F(0><~ z^SVm%Rf;l{s}$YzO<a9WN7_4Bx%-%hDn&^{C5?IM{alCwI=R{@hwvwcXS7r7-RzV{ zuyeOl&f_X><366_1FSqqC)LAF$%#M@JIy7=v4EU?Wk=?q?ApuePF|3f-*nFNYwE|r z>MybWrPt}R+Q7LUzmlI)yTH3wg_a+*eV=()wxrZxjDa2Nn+|Tsih?MP-%u9K(F%QG ziQj6%hY*f<yhb9v;4e64uv47i0#{^&8*(FG20L%15P{-oina*GMtp${iIyKF&;cDG z3Az#=o}}n*e~9{UJcR$pw;f+Gchd2Yp((maA0{bU+&8Mv*1uFIE$kbu<h?KILt{~y z&uVPL0Z2xLA`=<q3CXbCIEYX@f*qMBnYa)SA({CB-yxZr3x!bvWpNIY(UO;WQ4FO} z-lHNFfdCn-yu*it4+(cJhF{!yXJ_!8i+2L=%r?#*<3~4pOux=_V|e1d<)60a2M;*C z_k)Ye_kLC5Bu?%|t;TJA7mOQqm0U8{Kd=hxu?t6W9=GurvQ(E$L=^>52DQ-&Juw)Q zFc+(E%F~X!dnu=I@S+v7td4xX(V~|+{-$*`vS(Mq%D}rZ|JKvbVsb}=O$LMIPD%a8 zU2V0MA(yc}r;jL>a!y_`n6D_SpSsBE<1)!=r)PD3Luu4REwn&ObVm>PV-Nx`5wkG| z!8k}1j+>)1g{aK-GE#;K+(N0$cFIodLe6ZIRqVk*gd+m!va=Fsg*NDcSlmbb91O?j z4{uU;kKSB8MHg~)?}oigcwGK;y1h&Gj+XRWxY#zkcE`?;C5K!YRZuS3l>V<*Mlno# z@m&p-i+5TVe5AiwLOxA@6_jjoL>3f9Wi&z)G(|sb!EM}uyE&Q{_}rX@T8Hgf?UW0U zXf`7{=kdiHt@%W&PEHD|w)cD5WvPFC(XV*nXy-YbWPXQfs;#mybTdjq^hO^9LgsKC zamdM>a-k9`qY7%ECS)mta<Mk(o!d_Fg&*!=Twb;j2*qK1gPPAy$${7RU*Ere=K8_w z8x95^yuMToS~_Ftl%)aiZ7XNDw57I&wziVA+DltQ;T)u+qdRZtFdxU5?{v2u$DI10 zm9R5x^~o%&(;>ww#j+Z|F1i+rUxx<yX&$f`n~}Gm9XH`IePI$FEs9Xi(7zak5siye z&q`2kO4^yuy8dkHxpK%S`AxSEj1s}JsEK}<f~lB>#aM%*xP{xegE#nrG^~jmvY`kn zpdMOaFeYI>7QwRSr3$dWf_*qrz^)0mL(=*Yojj0ec@QmcNc8$6l;}w`uM@o({7JNK z;Q=1Qv!tDp8AO#A!Z~n7TAYJ{7s5FhysV5ea4M$Z6i&mo6wNA%peQ<^BPL=JHe(B- zaT#Cn4S9ZJ1<@EyFbjcrQ<{}7Llci4=na>$)c3M>ot66pUct5;u|!5>sYsHcHQHbl zR$@B}Ridp&J9uLu_Fyl9E3^Ho!o1)PJ+>iloeb%$dP+oPWsV~Q%X4Qrj^(MLn2t&n zXgpw9o-D&MPnq9BWUorghE3RlJ9v%naH(de?Y_d>z5LHm4fUt=yc)~hWd_3wV;yrd zYx<>7FZ!8e{qmzHyfFq7U|CKx<~bg+yp51$Zo_Td!z;YOHz?I;7~zIID2yT~i&oX_ zdMT|5e8YFxSEpP;MS8d*Bit|wV{sfOFro$(AL9{+`>0cs<_$-16c=%&rkyq~ogtHP z+opA!RxP)5^OkQ~K1;f3vnI`&M1xDk&sm;dEBMTn`>X!hvdRSgD#&=7A~dMd|F!v* zVe*ZMjlSuh!)kJQIe*v9&SlSBRVJVM#hScLtiU%;*^hKKOzZX=8KUGxL0A$*(m~Qd z;wEvC^{-vqPKm^Q_|+whF7@n`(TK!(+{3{7G<FT`l*yRJq6Q6i=IN1~@s$_8bFHNL z_wbZ0GOwiP1pztuVNm~N{P}E7ge1zJ>>Iin9eT2*{lq1dpSXn5mB$>Liibx(FLUVU zurzI5&BMNBokmE0_W3zXPY8XOgi>8qW>sUZz5(|jhm_CQS&O}TMAtHsZ3JH8HL?-? z>?n^4sEF#Qfm)Dcs*kof14*(AxD83V$9Rv7b=baOB<x5^dq}dnlY~Xl33~Dx37o)b zSkn16;X9D@{`%?tr>F0qzK?x>EtcNb=o8WJxi@3SYPuCmRxDY(WbypTqbJYjas09^ zmwPHC!BUkTd1eR+mTDNAdYR7M`1i>vRC=28dCosbFJyXp^Y;RWb$T(?zv|Oq=(^N1 zWeOQ4m-9-#@arP|REuQ_J;#_rs(`zXQ9gd1M6VsDW1X73jY2=x*<ZAu904UC5t;vH zMiO$@`@had#z-BBtNLF5lv-9;Qq_-AEG2nPeez!;a0q7*iTikfhj@y3Ji|*E8rUgb zD273pgejPhAZ$Q(s)kgN@#bnWh0m#=x+sCT)rk2a0ndBTdx4jDh5Aj{^+8*-M+bC6 zcl2(`Lh<E&;={z)nAi(3^b#W<CPp6CyL~&}Z(O_a{f@&s-Y<__zT@zM9W*%s3)uH? zEx@mO)6?cQohT(mBrLB6Gu<wu|3xX`Q@;(ysMkIw)5}5fWcpvsNXF`CTp1%J#56>5 zUB;OH`ZX)`IhwLG%#x+=+@_|=QuE*T6iNyHoS`h_*BR<Xla-N`(pQGC6jKQom!y7f zPEkokNxeg)Tm)J+XU_utTG%NAuoA0q9#vY}DKlHzrBhn8V!MKb)^^HAZT>`Ou8)xC z&gnm`%)82w#y^EjZx7PAULs3N+P7~_3Gq(d(pp;HF~(U&XKiao=d{}RWrlP{o*Sdz zx>CrpRpee4XX<blc=yuduMcTt=rXyH!Mj)YJau^BVamqx@6+h{m}(l+5Sg=OK6*wt z^fabubxng(PNe5_1}SSp5Q2k{6bwZ;Bqc92qcGzR@{*!u@jF^TQn?j6K~j4F=3pM` z{BEZh>(c9l&gg<(=mT%~VgM##GNxb_=3p+)!HVp1fh)Yw7{9|CKIjX{;{NbO(wn3= z2~QH<+(~+KiJ(!!XWyJSbYk0~O)C%axj_GXGd=0e3A&^=0h^>fO)mU;YEwt#GgVnM zJ=gnClDVCd@w8J?47ux6{z`GzDOF0JkEgZKA;6|z<$w56@)L$q%!r~be_4uo(?U_E zFf~px*i@ZUt(2)Ur(V%i)!rz#$?2tonaig>bAH<VIYSvzN|G*RE!oW9yAg(PNUgbu zZ*ZjcI3X?aATP?GEGnQPDxorJ_N3Pz127CmOh*oCT~1WQ=XVJYV{gRrN}g*sBK9l~ zjF=ojXq4XhbfjI&5;Tvh=)BcXM;q&E$fSk38nRiJ{iNM;HRRDAq%-&%iIEiM)a^ua zVy4R7Y_iBoXoSXShUSpQpe6dEA4X#gCSfvWVK(+)FAg9CPOa^Xih&lS1S%tQJN62& z01L4V+pz<?u?J@njc>4PPnpK^dr>E%jzrztbT4X|d`8WVIuf9F!;kn3?=@TxN@+F! zBd7J#hncPIrI>C1thIA9bk`=$Pv@cS%3!d!De;-#cXk-EYthDZj@qOdhDzFZdq=Ou z#~kf#_I@&rE2!j^)^A2z>KW@I>oFY*u@(n#8fV(uncnAHeIxsI^33p%<>B&^QuWGC zziD$_47H4o^4+#*hXL?|KL%kiWWG0%fEOJ&vD%RWg4(Ey%AGjVjmBt-=J16d#$r4s zU?yf`E`qTNJ36t6-$h^#;*o$C@aoJV7P4Urw&6HV;t?u!VZoS!Y1o0oUD;d4Y23g~ zBqbyz#3sZfMW3QOvNw8fa?kvShYXPabX(RgjouO+G%tD<zf_McZs=-Lr@p;*F{7bS zp5(G9mleqUbPhw$P;TAQ1j+q$8TGr*wRCQVidmJiB)Srbv#=!GC&KAE*lC&F4b!X( zebL6xbSj{|j7;kka^2lf$jX^<N-;D?AEq1B#gI9~*u^kF&#Kni3r|BvM@A?<aHDeN zN~2$n^T<4_&bbWPLq>TSrdj2cDF$OWMq@lCVk%~0F5U-a<p-%tSyczQ=%=QY%->ae zmet_lD5C?BiG>t!cp}&QZ1_vRW+h`tlWc~)R(WOYDy+jMY{M?>!$BOuzbrsTA47@- zbpD!Z0W$U?uHZUu;T|5~2@>!x3y{%LP*W@*<F`}`uoPo^imwyWAp_jug>3kj1<2?e zNU?zPsTUw)3!xZFp)4w*Dx~hz$G<E<MmI!?1x);&Dh4vP8+yS9zVOFTjKo;{%K~Kd zc%)cBg&(OFAY=c)a;(BSY{E9|!an@V0%Y_7q*y>=>IKNyTeyb@c!C7H!draAzbrsT ze?p1{Y*ehY%LUR~im8mvKvUu_%?Yw07xJMHis4@tAfrnl#R9rmrCNZDt&ZBL4`~2f zpba{p3;tyRGP)a5EWph=)dFO!KZar?q&1z0sgTw*5dX3O8NC207H}c;0%YtOY`_-m zz&;$r5rpGk79gXKBgFzH*`$hrjE%-M+`t{g;Sr>{e}(_BfVPHA4vbAiiuqTxwamYr zVV_kVMq0Bqu!j@UAp_hYTaX<153`r1PDbZKiuu1up1<DI$=E_DhEgbtil~a3sEdDD zfQ+t>6bsm7XNiEm02$j2z2F01_+uzWVl4h;0Wx|#QY@gWeaZ#oma(%Dh(-7V%draU zu&J|YW23RLG5k|cwn70`X_-#n5FcmywA~DaZQRpXmeY-mLQjS(4<H+6*(l2f`3lmo z5iW%zh(on*?5^P$&cLoal?d5;@Pi79V;&NEa!#igdzo0#oAW=t`60TLQ(x`JDqb5U zub$h`(_m$kZG1guQy-1c7)>CvKaCHtF)yMupKZ|&?a>>3;Df#xiU7<*AeLeo)*>92 z@h85+idD4k!5*ZnZz;@$thW>E?TqZmjh1MIyNJVM#A6U~8iJu1jvy>WBHrLFs`Vjl zupXtoNsAA!K7aW9>hr_TcW&Idb|?DIg#tXXR=P;K&nG{J?^(^rho2YeeF;5esB~IY zN5?GM+}?(!+1URKtx-)s<uc0189n~~)4G8Exx4Zet$uMsv5xHSJROpk9UOgkhbiQ* zpNCsAv?4j8ujK~TZU-LWsd-Jyv9^tT*dN5Oew?7ibOiRZlS@(ihOFvi=w@Y<NR@?5 z-jGS<D^1K_3*qw+iuI)(MnS$_7!`fl^FwR2#W)xdfEfd57%>}jFc<R>ft$FESUkjw z0p#9i0``8CI?Ti@MBoHYV!=T6sj(Qlu^*4{7%%V=+5O3B<V8V@fe~Ln=w19*>2B-Y zhilR1q58Ot=07f+iZ~UqZ_7H3Zl)GE$52ztVRZ4(wvRHDu_y6^t%EeL-iF$mufZ{$ zmN?3g#=R^lsm#YJY{dZ#)tYy4^wgSl;c9#yZ8TMj_BMDquru4gSCpx?7SXcwH9T^Y zi9>J-H}D+)^5uaJdR6Dk{rR#?`~q+A0S^8D^~)}fDZcC>6Fb5Q8Ic|N``c-A`|wPr z#(p$G)%*-QZ1yI9X&_5v0;K?|p&7d3UskuZlVyp6__9pg4Z|@H8}Tn+PD=jr5WXxE zZ^AB|!)^S_mzQw&DtjO#6kjeb6W_sIe1eqF$(Ti<lhPT8*%Y$lIOS(fgXMjA_7Od= z<ka9)d>_tN>4~F{2peuFW>ZPEENX<|QD?rcm(w6~*_3j5hB9~#y@%1nq3B2|5?YRC z_XMBt7sAG|eTJ)%4JWFhHpWa~+kzy`Wf`SPzod%iR~oe7eyrV&(fpP_ZzDe~G;KmJ z+aZoG^;d&-TFlCB>%lNR^mEwHkbb`sW3y=^rWri6ZDR}$Zi;PB&aBY@DfSr@yF7$% zrmwGsjWJX=x=U?34T({vL0p7_Y$$-f!#TRd6f8h6HX;T$@CI*TJ%SAZ?2!gVNQvU+ z6zR@qZ}?#nrr{8hU_XkaNHdCGZ_xxn`0^$pHYS<_OX<S)1n&u36qXP;W6H=Wf&Bxg zcu(=};4SAz`+Dr636*}T(?8T`8TNAuiFK+elD~Vfb3dhEs!@Dd2L5b|<;&8BOWPf8 z@0i8rE+s=heZWbB%3AtShSFNxJQo+^*QQy`4Z7u2l{DiL&Mk3TioG}j1I5A}1yKSm z5Q?K1HI|}*0~DEqupiHnIx3J(l~5T~AjL?2z_Ao1<9W)`MO;GG0CEsbC$c$4Ukt)9 zjKBeeAj4#u2@Jw81YiR;V+*$83?fl^3Mag<X(|~tjg|r)GuXpJ?in=pM`v>8YZeVP zd@%sLx<~0Thg~6TLW#Lt|6+OQ*4_A@-OYG&cjczuF)De`xtr#{WY~$YU2>)SFaNT* zX$J!grL@xH43)KLSI2a6p+@Rb@M}4#DV6VnIl&|`Lb1sl=}JUYBJ6{OkcgKj;uWwN z+fZscTTA$32;5Bxp&TO}B2;=w_=+!D#02g!)N6RugtX?D%jqFrDaQ-v<OWo^jmLCn zsy<8~YkCu%eB(ccOt+`%Z>*E);;b?_a^0excGzg}v{~)3NV`AFkWJe<#^BhQ*Hf`F zk}ET@5_{2$T<Jirl%B_a0(>zL#}EPMKz<{JE9PMVD$Zy391aWE(!jXr=M@x0BKcyu zy9a5t^i}^Qq(@PI1*tyvXNU*8^X%Sw^z?7MXiQ_b!zrDc)^RcKVh^5V$fcc|WGG{_ z%|HvL?>xCnkt&VysDg%QiWX>#_K*mU!WfLjICv5{FJwkm6hjG=L@D%v5Bj1Xjv^d) zV2q`gj+985GJ*U(-<(3*_}q!xxPvcnC&hB2Fv>$xu@Y)PQgb?H<1DTq4Jj)rJbsa$ z!awWH{p*eHUr*KXwAA}o&R;nhe)7mca~HmQ`|j<lwlCkl_&yDo`CsyBHp`yrgW{hw zuK+_C8>8oN-hXB&rnMMHd663A%)}#_ZJ<q)zGAN}4lv|sSAo1%CSoqi2N46z#2mcD zdo2Hhg9?mZ!f=#W#%3LTmQ%hk24j(V1?4N4W+>QBn-JlWS-+{rR2}r&v-OJcOX$uO zeu=6whCLa5gQth8xUo6ZZ`m&Ke^|Q<xGJ*$@&5zpMUZ>17+`nnx^}JIt!sC8cgwX4 z1B+2HFfcJtS43URHLw+1L2OY}*3SLE-g9T*uC9K6|HtFw_`G+xQ>W%kpSjIiWC>uX zHo)&;3bWd9npv(td8^~6ajJLaB;MM1ZJIfcEqO}CC8vvV*{M@bmmXbjq~yw58Y7C6 zh~jKLs(&rwm<dnu4FAB1sG8u4WGD$qk}@a@BWZl;p9M*xXOLui?oZwQiXKU?+$z;I z>6HWd@Cz!U8tS4E0$`+TCekz?+M)|4VKN@!J<=^@uMZ_q5~WZYP0$qDesR(G&+(t{ zf4+J@{`2{GdnY|7<FD%7$;11$(*<jv8}@D3r*g{DTP-xjoGXc}dTPTd<_)$|GQ)o8 z4<Fbt36qhPOwW!XdI4C-_aa2&31Z<zLGVUaWP?#iM$_+DP!>>F7Qr8j5r+NCJ5wVC zQb*%29K&(6T*c7}e9>byfkB!zqzwG<D*Dygqi6rz@#of+3sz1Wvr@VdD@P36%1_d5 z)jIj!@u!+%hPhB?UMlWce5!GmiT3&nX%|giHZFTo1!tHSyR<eZ?i!?PUXWs~9MuEV zih#7$1Euoal>kY=?%^RSucZ<|9ZU(LGQiCZR33=N!i`+3$9LNjZL2a@+A+}DHn49u zWP_5p1<|h7YHN!&vbOW6J*$4|F`JC6UszkTKeZ|JEl4u8moHaMB7My?MK6^t+Y&`d zEorw9=kW#~@CC&Qc10M`sI5n3EZ^fX5mRvux6qa74aQ^`(LG0hBo?oywBsrsp@0kV zPl-!-^E~$X8}<q>pSUa!@f_Z8IN)&XoY)DmLt}fywvMHQrcs~IGEX$IkN2$deRY*L zO@PdsZSL=?q)yYbTkhrR(FNvg>b7ETN!8d8a~fL~nd>zeDZPMHmelswQ+zew!HB^F zJVBjJteEgeAl73eHsL0s@dZwsIo8E-WDRDI8m-Y6mM#3Yg<7BnJx#F`E3gB*5Ve(} z0ncr0ebERlQExlrV;R=qDV`x|i0oTEmOC+DTzL_5O8Yu~@c7Pub*Ez1#+*v%7Fek8 z9R8_?(z%sa1LvAEdnD{6OYxSrg+1uec7^3zz2NNTZ6Zl0j$EJ~OvSOrv02<>XHw71 zGG}dFREnx3iX@1{>mVc^8Bme1RzYUMn+?I(hABH(m*KgSol?|6ee}m5<k=+$OImXc zS~=$VKD}**{c=N<cGP1YLdoA+hyhyP=h77LZ+=T0`b}R#n;&c}(yL46nJY`nCA3&< zoxH}>9zD9QE-=jT_=(%F<fuwZ7gwunO|-3uJaxzWD~XZ`UhqZ+WJD%pg%S0A^dCV# zqTU}PAW1QA2m913=vjw@kaX#%r^f)k2f|2~yrfMb{EA^1g=oYh(;u7%Krz@artaAv zvVYzFCF|H#5PRm&nLlURq-nOnw*IzGoU$_h^`{K5hrlj?e13bJ<m7!?JIIoKiT@r$ zrjlc)fwf|^BdQzO<}s%B7rz$nlH1`|{!$y6If<4%ms>iI=pK0)Q`^Basq=F1hWhC< z%q0`A(_YnU+BQl~DHam#;zTbTFHv_lha917T*KJf?&s_#USi{)6iFNoXI(zT2KERW z(qn9`kF#++L6w9NSd0&<w%0!UBh_Qz3d&LaK71tZt0xZle2XS<#y_SEYWo}7$5Q!I z8^wOCF89TBd_=jF4+>aXb>$!KNmc(v=7OG8DMNA#zM@sM7h5$}Cq&bBUF_Ju_(@(S zprwO0P*T*?MG9q)u39>#kzAFitJnY|2|m*Q3C<*i3z8rOJdqCRF&LAv4S(PTJW00h z=wst!7=~jm{4fuT;13mR@ByYhY+m8Lmoko-``9)k3a+HP<iT?o`Ot$rm;oa{4v`;{ zCpXEHTlm0J8D$>6iN5wGQtQsYIsN9uoAXEapAXr;W&g&bZ<ft}Ge_&DzB$VGQTdco z%N=qTEb6EE<`&LPEo##R=6N<rrs6Ww+la<J+=mo^z{5O>0x1ZMj&kG!8x~>_RQ!n- zc!?^1aXuXF(E)wY57RImGmw`8C55UCY9FJ5UrbMFN>~{fC2bHTYzT(KC~@oP-vMrW z{QUCuv)7*=-@kf>vzzZfKR&p7+wP#<k3TQ|Jn!@D8J}nP45u5=hqdT$3(-#4uh;(K zo_hJN$^$8#>Nt6+fBTz1*tT~Vs;!Gsmh#I|B5@g4a24<H9-pxHB+*9I2<j%B!$WwT z;@AkqunpT0f}M!RM>IIi<_XO(48t+zbTf8;>6we`xQSY4NFUU}WK6*{%z&JS=k}M_ zo3U3f9lLZm_RYRn>9($qU9&KDYwWbxNw(N~1G}pGmYYk3UR!K-a%!GOR$3!65)lbx zaa4r_)-jOPSVnco@@2WQ%xq^le}Oh=kA3*p_9mXyH!zY7jJ;JL?NzMOD$v}2q+*ah z?KZi@V_2;(VY8zCa*t60x-tW;ukJLfr`jOeY*O!R@l2}D4loZ=doSX^B(;QQ4uY@~ zyKxN1aSE=4EGu%r2yr|5jZptde>j$&V=n>A@#Z`w`T~U!jV@B%p(S3SKqM#Z@C%AZ zQesQcQwpU~7WL2wvoITr5sKTmgU|2d?cLp|_jfPq|IZ!{KfE`5cX-s+bz7rWMg>GI zoHZe8xUp?X_+}rXLch1v_VOuZ)`cgj)W^%rM@<>i^b9T(tyW&cKAhGZPs}KD`j!I* zHK*+jhbaCidPbCtm`KQtP$#*}4ij2q682o?I^7C$2KBen<c~*EPQhwtAYN{wX{GUv zW&a`r1Gs;i#=+|GsLk2OTm_JK!>HO`wA}7UweG5pS!r&m-dkzTs16A*r?+XhF&euM z5<?}mBv>q5SgZuY1Xr|z1g9H%p)Vw8;W&>M_>B5jsJ*XI&%on)Qe_GLz#YWkF`l60 z4NiiT;-flhpeE{K4g&BN?_jyfVK`DC4RRtE?jR27Z?W@*;dmdX9tboSaN4iN2AW^0 zv8&8!)a$FvDQtyEK`m$!B$@MYrVPdqrgFYbG~gA*p#Vlk6U95+pnwZ8%>6#+7$0z| z@F78d#Qr!^Jf@039mGFnd-9A^BlwIyanv;lC5WDnYG6_Kq3Ya7p3d~U;x<tY@6D;F z^Vc{V5O|#@!Y>4w3)wPA1SY{3>#!4h;6%_Qh<`c+Gd;n~i~=Z+x@beNd+I^&N6-hs z2Me(plZeV>?7|^P)Gp&5UdFIq1>fbk6_I#_Y4?~I692*&1RwZgEzaU5KERdqDS`@U zg!Yj1>W*u8hzz7#E=U?ShaVO~(y?|UK70`O<Uv9g_vGRe`8$s8L_(kZeNg*NewS|l zlU;QCp9DWy%Y9MWcJ|43wf-9O6uE$Qwm?0#(JE@LN-}>xq$iWg;5U><ZL~sb48mZH zz(`2O{t3z4axX~ncv2hv@CSAy6!TxR|B57UNkHUyM+Jp4D2p@iiV-<_T72S?6q<cz z#~FvP;!9E`5PiOC2@rET=E?O7r=P?;QFpI1SJ6(HzF%j);TW5qd8L>gg@kGxBvcZT z53lS?O!JY=9Sa(O&1lMkWTEZ!h2~;`i?C8(_$9s{!i_-WKm~O8sy}FKZ}aPSy$vB% zYr^KmEw&h1-|42*KA+Qjv{8AYgr_`ttc2>u!^31%Qt{A1kFLd={H6{H;BwE)jhrbx z9%N44H68O-=3^JG!Sx^NdDOyUoWf~1DJEsMvq>rMVp94e5c_czpO7VqNvVN;n2PGj zOv*(!lj2D;3x^)ktRg4n(yOzkvK##Q2Gye0m?H1e>ZumqVwR>YlH2!o&z>TDN4A*D z+0sfrEQ1l0H3TEVAxP)xzkr*#h1>Xmk4R2X%}9yVC_@l`!$*Sl38|BsIQ%jxxsV(A zkRLTs3!Rd3oNC)-?&N$rzj|k@IjbC3lv5j}GN)5pY&LJSbz-E>7>pqpjuDuMNmz#E z*n+JH!4B-iE}X$xL?Ie?aS!+L0AKMBtR|C^0;!N1Y2altWmJBpr!Xp^GOD3ECc2x{ zfUV}L&gFlRfai8TSkV4mRsTL#z#gIRZ*6t1Z69P)ax)iYCIYbyPw^I?U`lRMjw2FJ z@Bv?8@gRNi37b-wl+8GZLpXw?_zT@qnv}Y!OiEXD!#?cC@YF05g>7j}$}k+maeT%X z_;{Ik6EtPYn{+@{<V0yyL}gS*Z8Sh<^u=gQz$DDXSGcETK1hp<$bpimfnV$M(G<<m z2JO%teprK@*o!Rbm@u75Ef8X!<-)5`)Jpp}Lwz=>o2z;&#GJDLg<r{OA)v&1EuP_T ze85MzdYY7EFngLD?h%$f3rm3Grfa@hsBnsOY34irrj(VN3Q`wR&+jl#b>91ne5Y2= zhnpv;aXZZ^%Oxpq92Gj8cF@kyxwAOM6Dg4%*^vVUPz-O?Z1v@Gb9+|Sx<@&-)%v)d zp{#3tS?FGEp)72dd3-WO`>B88PYW`;%1nx*BI=+n8lgEtWahcmis8&WYkhW_m~UPC zd>j9&M`D+Gv9l@hkMUU)lT6wIozWNlFd9?wlUc?l&SkOlio`!;mNF@g`6x@U5`ox) zo%qQtCl+=HWy!=pWR^1NF8qlTIEjmRgrCeZeG!LQo^_aI2E`<kK1MuDtU0dmLgMVk zIPWl~4=3Te8-I{HS!noxalMflIgty6Py$EQMw6(}Dl}meQm-X<Jv2IK_H*uDG$Aw# zT(we0(}#YC%mXvYG$m0M6;Kg%(F}><`7U3-CeCoN^Nz$n#^+H?GHG+PLsv-UFdJ8q zjY>f(io{uSM?-op*ED*`hfPW*AHO;K7fT56V&^)Ee~j;^B$Mg;VmFRMDw**{MMIrZ z9@WtVZP5+=Fc?w?jikPriTirJBXy0`D^iC@eIZqWR0EHw1}6A;WKa)I^h_TbcuelC zqH0j8qXufB8CswlCSV4bPI(XS^vnm@Pyhu{0aeiu)(q5nNRQlTh9Q`R<!GCcDhk2a zff|`iyp<&riHo)v2OFaC2<<Wx5cI-8Y(y|#;2l1}Ig3f@f&LhRaoCD&2+K;Xjwabm zJbrId)?qu6Wj85q$e5!OHA@a^ah%0dJj48)CS?&eV=Kz!q9CC%YNG*u$NbzTMa5z) z!D_6*W(1>n9+TSPq<K{zNkWOfM4f1BF_hReAe0-i7gY$Ugjhl=A<alYBw!Mllq_r% z{IDFGuoL_77tY`!uIDnTF^#P>#8Z~0<32aG7FPo!xCMug^m6FOaYUqh8#Vltxk?|# zRibeh5|Jagl*hyiicQM&{A4`>u?7*ig$H<u$M7h?RsngD50y~`-O&TnF$1d$nB;kK z-o$d8Kv3+YVd6Z}%wdCsk34Gl8FLjI>7|r_Ec#SIqWue{4NLK`5c%*c`GDE*M+7e6 z4({Ut;_w`w@EPoZD1YH3(iEi>BO@}SHtL`O8WlCARkD{L4ycZ?r6^7CFJ%f<&zgHV z*@%g<2I~-xD|n711T`s=!3{Z(6M4`LlQ9Fwk%FjX)}ysVkJ>K2!|(zrh^99Rqb3}V z57p&G-JjVnh;ipZPxa0PbJi|0PDAv^Yy=|$mv9%7Y|(l$oFWNE6`^t=y0OK`(c*0D ziRpG?X)D9;Scpz#nNK-Z38X5|nQOVDcCHUKu+$uC`_8<q{t|5i9Gpn?rnTB^JV`mo zMrtW4)?)*Lu?5>8%ejbac!F5ClqUU<6v^NQcho^IOu;N1#7R8H6Fh@6VKu=MDUqR! ziFQNFnAAy;JU`Q+xax7)eA?x1F=zEcuv;c|dqWEqPF6-xilP{bqb6#h0UDwkx}yii zVjO&6q);5G^Bn(R!f%8OhaoAp9U=G&$8Z{FASs!rJbS(+`Iv&G*o_EWN4g5srznhi z=!hYhi?$U_>dq_X+}^`RjhirN+#u})XxTawwC}mC)2T17n72E(Dxt2vYOY|rRovPB zwDq*=leO!+JjuxOfyQ42$xx*&0w5vy2lZJ>yNVRtN+x9hnpP$W;Dc>Aj=T7R^i^2Z z5snwgR@J1GLJw@NYVuHCRwpVo*mBokb0f__(;x{uY0}nOzhu(BfG-7!KAL#Z`zXo< z+>>+kYSIp{T!@=`^}0E)Ej>}^<))+|9>IygWk*hwLVrkr1F;?(@da)Kv<W04U2zQQ z2&@FYHTq#NR$(2&Fog(gvPVMcTaCz9vyox+EQE@KID~V!NF;CJ1th`+h;TI=u}7Tu z$5Bk-RFh(gEGU7}D1+MQiQX7em*X;w!Fc#10DpDn;~XyGK9bjCBMVP_e*ZZ>_H%4} ztla-VKV7VT_LAO*S{MKME;kg*pu5^<{KeB3x$i8o;{mpi7;_mD<)dM(`RdC%Jb!ui zrrFa*snSZ<xRT|y)AIRw#h_PD4$d7;(rbTl+QcY{@^^JIU5l^8QR0@m78!$_wMlGb ztwV;QE76&R&-j(-%*1<54ynpN=9)&rlpivIZm&HZ{<;BzaXXRSi=M-!^j^;Wm$E z``$JWvq_?)fj2TC3vwV23PP3;fR$JcSz07yi5|#?TquabD1nXkh4Ml%lky9Sq6C&A z5Ua2TK@Cl{lnwN3#Aa;AAJ~mhq;JID@qK%D^#nJoXx+iEKf><EZ&L5a^NLRUPveJh z?LUiJD8@WFHEH`@imPRBn(L@3T`ieZTejrso8}=+lv4Uq3bT|o=-PyxxTX})W^59X zt2w0^*HO78(QU>46CSoUDZXupR$I<Ipd1>tWv!i=oCZN2BsWvbOP$Zh%buKre0i6% zB6YKIK=jQ=!8iP-okgzuhnr==iX?71l2LwgI@wR^>?-N4UjmfAG<x$~Wz<g5=1eZq zm>d@hv$^E=nym&zb61>_T9PXV@}dw{<1pgz0_}fiBZWIC(U`qln2B^}NaUAcIhvCQ zk`Ti&0+~sSYq*Y^FcN4S2@`iG?#`9dS5AkeI=$^q(6&3v7R>dXHhS9dUc;vim*<po z%X_~hjPiD_##~aSpLIe$zrCa^zsY^OF*#N-hJ1cIhWsX%l<k*>wR~3Z-ZAGc&O_e| zGW%-vcE4I~y!OkDMn%1Ps!6{2EoYjZXB$;w?tH2*rzTIInX%*-Y5vx6$_J%a%5Q4U z7#^oi7Gut3%P6sx;t+&&*oj@(gD`~S01hGor*ILMFo)tYAFHtjhY*jyk&)u_D+;3s zq*#@OQM4?bslGZ>Uh~mY3Z+pKwa^%C&=$||;^`x;yJ!E3erj~rE}lNJJ<xBQy&Fo- zWK>gl(pXNpd*&m*NTN!V<y$+G!1t#S_D!X>GVuzXgp9Ml9w#qFUTK4g@W&QJLTSgj z7i2;{ltF#;fDe{n2O^NHJ-aOU9eptr%MgZZc#VJH+JTc$;En?QU+C$FW_dl%BX+3n zJThms$>5Brh*s!}Nm!0uIE7fabY#s&b+kcG_+SMN;yFGeSts_6kRDl)3wcoub6_R4 z6N96Ko_T0a<q)1GGF);@a;7`{x{zbtSh<kCJ2eL8iXP0fCo5Smw#)rFG#tQA!ywLC z4k0(ubtqf2Vf;NpJKdT=PPcN6DwAB?(AuPw+iYopsJQy_vAL%jxWqG~*4BpSjgn~; zCA-4?{!Z@lrr1jAycgW-DHX@QC+6xlDK2r?OTdnxnI5=w1gaPsVi3k+DS{A*H+Tyx z0Z#!>c)=Te&=*rM71Q90S(pQfY*ivlgqthF=$VMQSO#}ez#Ebhv*6a7^4`ZptHRN- zS7Ogc*t>%fI}dI-7;!KnP`-GeTzgJnM(o%=+Us=HBICG+soYbuhdS`7IeR608x>7T z>U($omKcY<J83FF)_lc2)|C?9kENb}DktCWnk%Ut8(LDT4_jE%+44!S%Hl9Cz@LoU zfk%jkH<_3ll9>^>3a5dj7f#_CGLp%8v41dUl+cdM?u}(+_;Ms8)7|jvaOwusMjf;s zZlmPV(+Qo?8{;tt3$Ym?@EA$vASL=B0GCJEx2TuyOBeBHLbpTf3yN4YH)uwX{;O>m zJ-nr7Z`ur0nNsQUIKI@1E#l0@oX?k3@07C+RZG^jmQ(#|vUmETh`VP)%Bi+wS?XUb z?HPKEX6eW_hGK>}Xg-#rfivUSAR*X?-5z2VifiM^lL@RR6WFR=^C+QiTgb+A#dGsU z+F_*h*N-;4x`g%jP=9}6-e!|HUBNBf#y#AJEOkB>qX0|%1)b0p5`rT*j~94}9E7GQ zBxIe@1-;N412G6AF$xm$EQI>kai+FPO?sL`qH-NKAW?dc%|uJ0_7d@MCwd>_r6c{1 zB0elW7;8T2UHn4+rhiWS^ob)UYPU4*ziW0=z2nXG)q(OxlB~VBKD{iScKq(fnp>;S z_tAiP-6vKLTLGDQa(KWKDUk}2t_7g&n)5Abe3>-9f~%19zKgH;2a@*5VTL!-g1k^F zO=M39RZ$Ji(Gnfdabjtbjh>p5I7q-O{Qdau<6D;^Zbcl5*s~*e^)mluJN#$(?-)O# zXWM1;EF14XgZf-e@ydM8EZZA<DJxv(sv20t>aE(YnoaKOGR(8Dr0(kNms~<RKY_Q3 z89#EAW?y&fm(tf=hapN133NUQIND<b0<jkB@fV`tPPi>di~J~u3aAK)utZkk))y0y zVHqD6;6x;UMPZahtx4K(f0SH|rdl56*+#BN^A1|?<jJ*H_oxrwn5`W%GM+LAk;p!o zZ91l79X_J?6wauiBSI06+*8>tM*|Fi4`yKrwqw{d!i1=4CVT6}#*2iG*zac0Ze%E2 zn{a7&rQH6+^Ax?l&@{!tcjoNQITiKBJ97q`x8$1yEescN2@=fruo5&0?qYqhOZ7z$ zWwEmOAgn_$&Or~3vSm8;BQD|+qVN!fW)M~M#xO+AC``$u=k4DQ{*JnK>d&aZ!?p!2 z_Vo$!4H^jF&I9=f@@;AC22gl1e=wg`cl>QGnU>?RqV?nKg@v1<CUjU#f#Or`{mPuN z7rQj_i|iN5x87o)_I~TEB$<+y@YIHcRl+FY^Cl=I(HJ8jLA!?+_=55?sfuw85AYlx z)xtr^a@(JL(e44#o^o0Lk;5*|Kjl&LeWEVoBa1rqlR2}tJs$MMoJs8%t^Y;FWOMV< zclXPyA&hFX-ytZs18TctDUE<U|0Xc43BZ9_CgmW`;whfNc{Xb^EXag*XpepvfW0`0 zSh&w&?Z-fTz{fe9|H(a<traSuI$EI(Qu<NFVDbVE-LM;na2Q8$6en>P?_%$~yK?dh zA9wWLlUMd#3AwUvWk5pbH)-@x>5L2}PlxsGsCNCwJR+IY5RK~ax{jJ3%z0gE4_>6M zqesp9fi3jZ51b{nd@y@9Dkz!o7XQH0mzoPxaRO~gi-j=K$4DE;bQ$Q79;AaB-#d8; z`&I1~pV<Owcl^}+Vy>yyGV*WR7xOP#ZrbxHm84!V^g&<D!VY{w8WJrJBr#h<5^)q( z;t`zm1WnC%2{b@YY{ysmdmdXQ?8aBrm`^Q%!T1=ups0I$C$-~s_snVsE4P@wbh0Gv znn{KY!6IzM38W)KieoJNu>l()85jZog&cw`BBQYfhjA5uBd<U8KBl6(%7LP43Z39= zDd;4(NXea0y!+ASku=u{T0TEP%je`EN3!zVsq}GIl)LPZR^xBk8$IV@DQrtC1!NJ+ zyoK9%i+4!J^3tOrnnS{pgXQML6g>=qi#e%)2%N%s6k9@pT)}FIw-~dMxZ*I5;3z)h z3*N<NdKCXC>QVfK_!D&DA@LjHm;3up9MyMX+rIVtW>i-NyLqV{idbEfWzpK9k0_-! zcD4A)3y}s4n@TMs@sd5Gh_B{}HhY=1*F%h9e-Dd3hLV}YQUY-csR?LJNZ^ftzo)-2 zfiH@N7=W!fj0?B~=cSzfMHW<q59VVP)>!yBgh)JCYSNlJ`lj)T(C{P{Pu@nBp8HD9 zCAFln>3Kmrd(s%*zw#{u^H8z{us?+L2*VeYTSls4E><8A2XGPhkas!TM2to#-k}6J zF%&y-99M8{1*boaY#J133gyIk4JT=ff*1de;!*vt-8loDgwpb=WLnD6WxX6J86@wR zKuNZWt>tR=OV9;_Fc?!X6#-a=!#D!>HPmn@f`%9ZKkP;%-XqOgDmwJUrnS_7o9Q`@ z6L^bv$QQ)^0xDuT-r^ndtRwm;iH_)l{_w**?8Giy#|^lwCqMBE3ZXOxVl>7eV7-kP z&~pJ7;ktoXqc}>SJ{qDQ24E7V;0TT)`9}5%krste8o!}0XvT|oHvC6-@lIk_MtV>E zzjgL=pVhjtUVL@BrQR`F>S=qac^gS)&A}!d!#zmmNygPeb97$K#klkyRa9-``9huv zE&MA-yF3Ychm+l&+B@`ICRMDeu5V|}r0z;?`OV9Xi4t;tIsKB;9o33;EV<P}$(RGT zBDA-^d~bhoOLC{uYDhhvE8UtpMW)b?H7u@9sTp5NMkH=RO2`kUFUj;}9H;lNn4HoW zMJfXmO0jD2;~A7@24%mSflMG}u|1?b&czQxQ1(A(AQMO-4ullsOZdSI$}xlAz6*g& zAf^8vWDQ770sp}aDlmg`-_1ZKkkuwXWYy_`AIzW<Gho*yF%z^zlnG>g8-V3tz5CG& zs{H2+WCB@FcOVS1zWyKt)tEtr??Pa#;OCg|3S>q9!3=6JgNonHz^EC%GGS_J0;wT> zFoRm(&LFiEM8=mI<u^#JvJ5|%-oxVVyt>kNA&@DgE(*p$NS*YPIkc+$-5iWs%!!&Q zHKaEC$sAHtahyX*i3AfE)!zX6rP}++437V623kolDoT|pS3xSwpUlChs$&qeIT%&! zex^JFscL^RhZ5Dkn}bm~-($*0kV^U|b9nas9E@t+%#@yx>is8kSX2GGFgR`y#xixl z&*#v(#&>g&DP+sB0e?caAU_F%XU*^CU~F@unDP~5+w+q-ocMkY#@5Q4DKkN~T0fqH zlTF=T&*G)m&RS*~o4HC%D4V(lKb?Vd$=csVLZ*-nWIM=4vOj(t1n0Q#=O9zargbD_ z^Ew$nnZw#T--SV@kd5+etc7fxe=>(Qb-$Z~u{l4*lrfOa`cLMNvfg)daNH57r|$s# zWDY04pM&f&^uuWQU=@Bchw=5l4TH^?gG{*^YmhpaZ3l8}q1s0Xb|4G~ab+uqABe+q ze8oR--NqgSreYfMZ)firMNk7Z!4vP#?%lp}@5-rr2k&iJVVS;S%cw2%_HI$L1t$<Z z2e@@p2RF22_HSV|xjb*+to}YEx&6Ke^=?Bh8P08J$)j$cVD(a`=dkq3oxw5Oc{dT} z&52>(NLVHOq=*Oa=dDo3GTpgU1IHw&!|p;38AYNe(UKtBFb6?chmG6yo6h`RbB$1Y zyhwZHRLidXX{%=`?A)heD4WlQPBw{QZPbCx<}hMl3E}7*tFawvcXDbSzn~bpp$FDt zJuJJZq|gFw(D4s;sn88Q&<BGsayR?1ScTx->==j8a|u~PIZi+!{0fgSPI%)CE~C(1 zc8F04_0R>qv3ehYz!Cg~8@L6_eonO9I&<vsu`s$|y_0_F*6_P@sl$#fUpV8NPCYox zTENQAXTm|)@B)fjZyvjY&y#XT#l{A-h}HH`^33YQxa4Wnx`&c`nzGv4nf-V$c?PeN zq`z_x_wfkBNWj;sXGcpqwNN9=8E2<PlBIEK?C%yYiwqo&QHTo(wRE(&I614@7|*OO zas2um@kqZzANtGhGCf1n@8E1AGUJFb^oV_^x62WJJ&NOKO&%@5$DJxm$Y{T<v!kEA zIkE}rjh2>D&OAM;%{J*rM*M`Y7_&=X=nH+Q%NVkEENqzfhdy*l6Fo@t$mIE0grU3j zp&6R$Lx+;n!yv^VRj58R#2A{2d`}H;{KC+wk`y(YY15W;`GsGN(ovWaF_YZ?OimB` zlW>G{nF+23D9-4AkVBwDtk|k&Fsa_4yXA=UZTpOD9#S+?AQ$rB3#`n<8`+Qtc~K43 zQ3LhS08P*web5hsFa#?QgpK$ECvg+22-HSBU|s~w`vAvcS?I}%k|>3ms09gmL;Q}$ zc!F4@AvT%O3LSC$Fc;FEy?J&Qm!JK0`M_m*9J}3Hc3<ATeD~#rzT=ER_ETaR()3hw z^s`iTdD+}qjW&6Bt4sS?a;gQ(SUuDVaaNP_kmhn-rl{JrjU~0Zql-0<t*|WZ93pWG z$`L9})IuY89HnR?1F|7I@*ppY;67sU5npifFZLtw67jfmj4B83;C!6w1HI7)Lyp@h zM)b^tF9NU(%drMQScmc_IJ<~m7>ez<j#shLaS8Ce*6DxQe>)z2JmmPQ;~|UZP6#<J z?S=7#A&(TwrBC~%1i6Di&Ct(M*QH+zExEF)Gx}LdsLs7CnWd7*tCnlW;UVwF^=Mp3 zikl>bM0p|6dX4);=_Mpe65>aM=*dY=)}Lkzc!twq@IFibIZj*Q%z0|j3!I*U{`{!c zHbK@t+=LytmWx+%he#;RyzwSniC(2s<OAxX8Af3O4&gLvuz;HAh)x)U!5EGakN_wI zzzMEM1~V*>fJNXu?%*D_5y-u`e$LcJxk1lKLL31J`6Wc+31aaKagdh2>7sd$_~CaK z_g{RsbBosLzsj%`zGHlQ(;T9bSdWgkUx&5y;<{;K`HXEL<#UKFpUha2ssu`+6iQ<_ zd~gyGxPutP<8OS#CwxJYi)`4C71>b`g-{&z(Ewf14Z|=TKCoS^Ml#bg3y%<o=g4r0 zE3=4?y&Zcw_C##xCjU*LGeYSbuXUlD`s#n5=n@;M-tn_!bY9n5jT&tEMXf%>lFNBP zEBQlvs>n@UZnG4V=ZoA_-v$=X6f|vaf9;5DnMx#^p!Q$R10e~|Z_BTWY?d;4<(Bf} zm>}c$+t>gNWCPTrW$2fIRIU~oAgLv(;c`*0kH5538Or9xg(yiHNmPA}p($GHLw)%* zF#+^xbF|Ti8cEWS<Y;+G9~x#KYIBi9DvDyLifX8b`j9DFp$BGT4%Q+Fe_%KEVL#3x zX(YR{FvEfrNRRTUjyh<FMreipktNuy(Q^e?5eI42=g`@`TQ=@J`)bjvv-75pnKyJg zfA8%>w}tNPE3T&IP}ABht(`l!({hPN!J^xcS$)iI?&_F%mdgIy%qHiCZU3ExDN^NV zNhl>o5>g3Wx=2;q2p1Y_x#xVktv$t(q+^JLTf*5gQctnyc6xfY<X3y>sV*3*Z5xNR z*N2W~s6@&AGTYV5`q1PZw4pW^iQsd5#XoRmtYna}Q==u?qa(VaJNjV&24f!PV*@rK z40~}HNAMTU;TG=TE}p>o3Z?2wXCh2bdgMm|6hm>8L?u+lG)%_|(ALPoGhxADYxM3+ z)Le&O&P0u||1~)5Oq8}=v#&|VJE>p&EV-R`b+oThP3Bo<IIrrUM$NNivld82fF!aK z*t13wW$vga;8}i^DA+@!Ct#6I`cNZ``v}{yEBerCo%Q6E5U<2GY{wpiLB>9gG*`LD z1qJa7%A*2mpeAag3A&*-`eGmkV-&`~hQ(NdZP<>3ICPcdJxNalPUA8x*N7_eq9}@^ z0$QLY`ol=#Gf|86q@5dP?-G)i43J;WL{aj+lI78^T`1kOv^5v5Q&myyKgD%%DDYBK zNn^NfvO;unzR_7yKfC3ao)i+*##i+OY|%we-p2eY2_WH*G=}!>st=9iS0h%buIbZ` z>!uG)MO-AVzF1@oP1Rk`8j0xu*f1W`F$4CoxlToY9Nyv`zThiTU1zTFf;TFlDlXt6 zF5wRD;xS$#9=UI@6+%T+x>1;oGCj@F5_*!a2@75jHa%>*ZF<;%u+AiMa7$>vs1=rT z>VkT`eBxt++d?g_YSeN|R!^=5C2jz!)=90X6XZxFF|{{#x0m(oi->{|wKqnh<nEy* zN_v+!3^gKLjX<|XUrbdiwPa_x=u%6x^M3ot)}%6^AM7y>wcNLOI5{`&Df{Hb)kZ5V z+bxm~F_5%~zaDA{mNBA@G5)ZGm>KXl?1`g~(6?9OEK*96mBCB|V#kfplxr=?oSZ)x zV+C2Z+awKJVLWDFFAgIL5AX;dVZKS`Ar10lFot0*HX#l#@fpc)kx^)lc4&_w7>eN- zffZPHi(}Ql=}B^%U?Kp^a2z*r3uU6nXtY8<^v6uBz)D=gV?4nNI7d@jPyrRu6wS~A zEn&knTtalTjTqe_Mks(HD2ke>g*vE<*KxPw&i_aEI_~vxec0Z(^LyiV%ZK)V_xas% z{~D_O!5t6UE(Q10+Do1KBGi&1mAsvaM_L`<&ZLHia!*nJP)pWt_eKIkEnX><T06*; zoe3GFm!YY>6AOSvvh5S>S*DMXs*gTKHfxCFX@P`1(?<w2Mv!7CIq3m=ZtA7%m%jQe z@>xSX8Q22r@h8sR(hJ#MV<ZZh<s3uKL-IQ5ZGAyC`#FR)DLHL|y%gwUL^_V~@3Ntf z(W$>ak5iVA6ncR%3d&5iVRzQN{Cg}fou3=y5h>4aOOfM<V+J?`>fc37kA1R%iDP&f z1y2gxbgaPk=uoe4OA;sNMaGy1NP_JQ34s*5JJEXZvkyv~m*oyaVqh<i`qH);V~|~* z6htYcV=xbE?&xV<Zm>QZS)rx44#sHg#$Nn|OUMz!ZUTy<1O{U=reG@m!WCS_HKe`E zs(}J1i2kr)JSJd2&f*--!+ehwI`cga#*r26F%W|=7&~wTNAVYK;whdX4%zM#FqA|o zlt%?LK~pqG3;19v{z38woK-_QWPV^{3r$aPR7VZeL_IV_Q?x=i48w;fA8u*gIX?g2 z@P2`PM-!&APsKd+RamXOkBj8m_9gr}Yw*Md`f8l<Uk4R+){q@*6S77x4=0U`lyy%s zEK<+3;xYOd&4)OY7{_d!VvKRmaSX?dy=sgxaHzvP9J9K>U41EEj4|A(B*<4I@5dV> z%p9iAVk283MlcG)Ib#Ix;SS4iC?1pyeHm*V$8an!gN!kXjBuETV+lHHj1lfQhGUs} zc28xKnNiJui<Q6bNQe12mb8-h^|kC;;us;G6e%fs)36-d?(1t=w^90Rq(<AuknNBH z=<z_0(%;4yl6@YOE;FPg)-cAfjdlo%Q8uM44mZZ|7^9DI*%D&Y2C%*4dovE;AP(U; zPT)48a0f9+_K?FNltnpILoL)tBXmS3bin`&!bsTQhm{D#D%dXb@dUAWig^4D*GDV} z?nsWJ_zjnEAC(?+z737h72VJiebFC7FbtzG9#gOso3I%%c>LH@U5TaV!?O?3i2M+F zD)Pg=524%XqUGzuc5Q&;z~~Rr&pxc-XT6h2)xOIq2_3In%6zl`7ygP>la(}&wbF1> z&Pe5hWQDf7wZzB@vNNTT?w&+H56V2$i$(6S4#lDjLnP&YN5_YHvDj&hA;rQ-e@W{= zV~k4U9EydJ`jYsujG=|)jKdfyjqE5#Qa47|M|xOV`#6N9D?_@$o+)}*9vNeJvSu^z z0qnV@k1*8c5ELU1?Rle*;WXZ13?s*!pK#{ri9W_0hcRrDg@5C<WF<a9VQl*pRNeGf zM{U$aBQ!<}v_vcPLT{|WCIn*_c4Hs@#9<u8B}Bq4mh~@|?U9w9)bK(EWJD(Xf<oww zUg(3t7>ZFCjWL*o*$BsB9Klgs#ub>KGJkj>6S5#Dav}FqwnwGtDUCiDfPol<iI{}f zc!Olm2sK7y4CY`i4&w-};|A{F)ibS&zVb@zp1q2;{~(_ZKVEtDi!q$<Zw6_9%Wt}8 zoa#DS#F|Y#b=^|j+SHRol+3YbfS$D(COBlikuCOQ*T>l4IEIlK_Vm`rC^1o=#~C&r zB%ox1J)!jx4jUsx+eeVpx2L#1Lc>W8p)m3xH%VCPsXoRn$1#iyuqV1cMz6^Z^Dwf) zo(=jKZym=lGRK}V`WTa@=<`@ZK*<%!EqhMst8I#@i3>?-<X^!!?u|p!IDNHUZj2@S zZ<4z)c#C)VfRD(=6a~->Q!x{>;D`BGjHOtCKm=hO)?+XB;W=Kw^qgV~3vwVQawE@k z)|UqKG=mLO;fJLNz<O-NcI?AnIEG8O4EGmQ1IUO>$d7_3hVrP1T4;*q=!pSXhxOR~ zqAjO-=y{4~_y?{p<pAvU{nv4kai_u)y14MTQ*m45Aj=pczl5Lq?@xZEc&|-o%`UrS zd0coAh}t*Qk}K0U$6f#0OH)+)!B(}VB$_0=Ju&s%&p$0Ob1g;^+mlz%{!oW8Qc9w` zqB;7)=eeH!)u!w7ksS*khDgdwYHxV1FX@6YhHODLFhue|(mm1`qx}qrutYLMazk>U z00)@b>4m4p7_v{t0Ld1~ie|<LBWF6yq8URZgCtWzjWLq?I*bv@5XmXYCFP|a;rYfG zpDZDsWSbKjqbEkc)Z?3FR$_c@lDWx{37L@<*-#6=V+<x@7W|<i7+bIl;W&YlxQ%F- z<0;z6ge+)`Cg_RY7>co&8qcFbDgNfn6uglR`B4z#->_SYr3k=(mNTskhR6L8yh`up z*m@}iw3B-M<~p?2pq?LUttK}t<W>EvThpjh8d!4v|0{y|MiVhf40{6TnHp>)<rXR+ z21=?(N<@(%TCSIw?T}?r43YGaw8<Q=k8#X#jLZy?6qD5I#TeSYN0T{;^Qh2^A(Do} zFrH-cdBwcmQi-F@d$yoh`hl{GQy;0O?AJ)`pHo!Nsa){SG?goF$5(UZ&8MVwne!cE z{-vzjZIaZR5sd8!!2z5^36@a}s}O|!ID>PzihEGrvFnaG*o}jzLYRI>Gqgf$NLV{# z6vksN*1R{>S02;z1abI`FHne#E3zXG;-fA`oeckvZqJU5D;8|rF?+{?DPwmG+9Bt7 z)$V1iOVkf{c}_}uTyf+$YXvC|nQVDwR(VkwRZtbRP#a4i>9`I1v5>S}g>~47&Der% z2*rM!#0}g+l1~H~l~5Ti&=Nh-3j;ruC9~)mf(e*|HF)#l?web0UR;Vepm#eWc4&Po z{YLw(?9*-~f2x`Laj|w_c`GmJ@cXWqr_W@+ep^Bvd)4gbGG|x^_2ocoT3hT~{eduk z(e47VH|Syfr6jy<-1vpzN=_+6@6nsE4MXnF+{^Nnh~dLO6bffo<p??^aaB&6T$QxR zTopGrSH&C4-CdQ9Sf1QfDVyEws%*y~i>tB}t|?p<AN2QhRmNgiN>^!esES%iULNh! zKcU^BvR2w1;u5jyGo1mnMMRrFzghikl3JTllaRDPEkaWp_Ysd@6<4JgO5itCLUlAo zOYFxXEOc^J{BZ%7k%8D0z^^EVH+YXMF0M*eltEb+SDR9Yp1Np&hNzv?RjG#_=#K#y ziZPgv1t>)ll}33~LmRY36IWNI3x;6~Y?utW&i~(Cmgv}vv4{6x+<j3-2nv`R5EN_w z)W%oT_@=bqw6wA{v-5pFxxie@z5*m%-nW&O1*}9M3X*SSFa=An8Gqq29^(aE$<xdz zfZiC4p%@DvOu;=oL|gK`J;q`dR0Lo<_Mw`GjaYlQDt#~+Gq4(Nlo5C2Ku#1#36w-B zbVNUl!B{MUKh|MAwqPp;QpTjL*)SecF%9pY>0NQ7$MHLwOZw7rSznS?>szPwEqS;9 z-F{y5Fu*Of+N!eE>>M>uQZ=nTi92b36jjGprrh!<Y93oTS(qQ@VG;b%*Gj5k5~iXY zD?m+*#u)TwMd*V`@WTz<#Gff$m2jNK8C*gnZX*g0@d!s#xhfI3nTphnqGw@hS7j9< zaTyoWFflIU3hv_p;_wNLyj+#02*M_;^LACXAsP>1O~;!<&>3CO7lSYuBQXjSG0Db9 zr}V507>O|`lEGD}h`|_w{u#-Rc)I%z-PLyy+Hc?fe#l{*`|l$5=pz}E$`+1`NjWW7 z>^Hio7vqwrRY$veq%v7({=$+(ZFrUTtS83vRNV9d7OT21hsDyp7PXF+uyK5MAbqYu z(&Zt_68|MQO1$5twa3?&XniIs!zCI7e>`SnVjk#~nG8f<48}~Xg8i<SP@gK+iB2|& z^8ncNiKp?s5QUjRX*5R{Ou{s5z&7l{ejLX+$bz<Ib5%UDyDF*RoYPflor~g+U5Laj zL?KyjS0x6|b5m>mP0t79%g+jrNjQUa1z2g(6T>kVXK@#Mf1#4c1;k?HuLK$!;8d6@ z6PfTTHb%P}$$p2DeBQtr?YF(!r}xI#WwB>`6FTijvQAnlD5XxV%O2WbZ};5l_I$MU zG`70cq9z&Po>DDjv(hk!abuFLq$KMGY{fC$#yvd4-*C_3s$@f66haNOLl-Q=WyB## zR#(Lf4bcNW@WTO|!xdOb<?JX7dn;<8i;KFqa(Jk)os>EffDt-iE|z0Gwm`DUMbDzX zWYa-CtBkBUO>TUGM;-!}mrbaiBaiI4BF&~Xv^SeZ5i*A!tYxj_)IzdrvYr*Q$%cX? ze|=2AF{CO&^$I`i!fRNIvgJc}Y{GkZ72`LIKxi>G!RcvfYa4Hn3ANR;PH?hGw&q6x z7|ZC!yt<<&2EYe%F%Pfs78d61iIm8WT&RG`XoiU;D0-NQm7uW1oDJU`zWHo`biN}4 z=+5?ZZ&}^G?@AFdH?(e1?=-Y#QNPr&x~qrkSciR6FnXpV3Q8RE6?avB$8?0^CGxYF zp^(Mi#1oV#$#xsdumgW1cPTbq2*P`mEY0eQRd|8-rCrrS56#2XOaa_$n&}ZwFK7Op zYM+n0tt2k%^qI@ZZ|xJ%#vB`cjKdAMmSsVB0QYjPN(y+w3mNh9cEq7SB392`J+@aw z$7a>a7E-farrrPXEv((uInAuixK3{Er+%$t&8=D*TJx##4XhbEdJ?pRCAHO;7N{@r zsl!r#W2w#22UD;De?da?30KOqsi;IwRiQG#A(W`9?V!;nq%;Dlz04)CVaUQwtmkbK z?qVp8dZ>@?=z$R!i7^<9a2!B7mXrgNFc}Z<6weTkcd%5T>>`j5t-)GsL@<uvD6&^^ zt)}E4nB`C&_0a%t?%zDYEjK6B6E|nxv`KgW%@BUnzfOd;3p=6c2aVU}JMK*nY{AyO zN*|hC`28wP$L5`2&Fs?VUt@3_QB$3g%fsrFRh<yzmepBFrB?3cma3bQQx@GAO(3b* z3a!x}17M`;*s84bC|ixaR8&D#Ou$6U#vHtkxpwX(-R?DhyT=Xcw!2yNqM;XBS_?U; zrQ#@n4LVRkYPICGQP$i8cnzC0<x(NPQ<ePAJcg?b?5QaKD5=OpMV2@Z!H^}tLt2&~ zOP3|Lf-HFluHh?6Rwv{b0oR(;tF_1_46RGmR!>_U+G=kE3O(4G+Q}v%-VT|EO!olK z!MI8>6m7`X4wWz#`5Li$;_2_i6wMmDDk0d1?M<lBkgFN>H+sXZIi&*Yumu@gFdP9` z+k&l}S4%bk*o;3gzZG>df?87_qgEUCz3~8X=+&0}7z}|8ld%Zqb}R^)kQuoltLE-Q z8xI98rIS8ix<m3|blygf<F{<(I(=}<qTcPmQ<}qSQqNXu!(ojrhsDjlYaZOv>ZZEZ zWhm>loBBsf`rfy+W~o<F(#?Vldit&5`+j|DWzsA+>6MLik~H&jNGC}nNgqiYNf${H zl0#~ETE3H~NXNIe9#e<3vt~?bf8!F*61(KIKZ;&K-4@O6(%g2|q*{Xv2Zj)qm$j`) z)v$Kfnr$RmB}pYYB?%{xEUR$^_1p7}UpuhFj!I~O{%GBi5{-R0jcB}wTPMPa5}jPN z)&)ZSI$G;FX<@VJZ-erZq|bxGD1s`e3R(6POvO?JKnn|DxS@xmB+Hht$Z`jDp;EwG zSi5puhpecAsz~00O)+wzL=V@>yfdCnBwArNq@fy`3OY&`vTpgjDLzAddir$j*{-MY zWo)tZZ?$k2>$!y0w77lW#@;^AA-5E^Y(!cqiGEm%+eqD+Dikwu6mL<G088LQQJsL+ zgblm#5_!9^|AFPW3b*d;Zeudq5bm~^qsJk!IoQx;Mcte6<a_eusd$*!s<o0}({^Yw zN@Ne?2wL@Ge-w+c1igE+2KQxqj*9(AIaEVSv_eM&;VJ&cD-`SRs&pO5egk@89DFbZ z*N}M-xq;j^K89liPU6c@cGZTluQ{C60I84}0a%A9JiwQcj5CT&AiVJUam+Pw=GxJ4 zx={WIHF~!`4ww_bkO_J>GJK>QKuDubUTWq()|_hTH0*;maPr8a`bD^z)NOsN6}3C$ zJvd1%4G?NK)cbd_7U}-0q?Dx6ReV6co}>asU={8nHK~>xMoLO5u0k-5;3i%m3n`mJ zQWss(6O!7m{5QJKQ43yoH?Qkqb!s6$4Mj{Jdj?2?&xVoclHgyEnnag`ua4&f>=_^l ze$XM&bCbr^P=AoCy=8CN(X^j*F<Naj`&Z?s12x>)0qsc@--L0sJX*<jI3%CE$fx|M zI>Me8naP9B2*L||h1Y2E4n@%u0f<2KXqJ7=BSUEazSj9pHpxD3$Sh=%OpwVKO?ioT zu#92P1Se2-EM*am(F}bt4mS{kl;hafz^|x^`B)5hAC`lR$b(|2;p5s}nL&>q<|7sr zZDa!`Vg`Ki3hT$SiNZPLnZO|eXD5$E@uJj?JATkb`A=d<6vk<-S+yQyZ7I*C<W)1u zVUBYbYhm?eZ)@oRG@D^>;f1TE5^srb3E~n;xI61XTh8|i>_HgL;36L5Ek5EC$`jQ3 zXo_Z#s7Mt2p(4a)&-zf#yiIg!!Jo<w9K$KZ-~}YcUyyDh_0uG_k5f1vM)s*3L}4;Q za0;*CHH~aTUi>!ARh?IWV;QX(rh~6NC`yB6Z$Xl+IohHf+G7MpVid-~2U9T}GvJRf zNI)v0Jvv|wf!d7jliBZt1TF~yNs9Ey012!FER#KOC6!t9yng!N=7Y00PuzTZ_`%_) z55jgn2-`rnatYnk(f!+eQ>n8t4;jR%$a=%9Go{_z@baDQ?cT-?<cwRh1*-cXYi<t) zJj%7u{>+_Pc#t(;qpYNY(jG%0%MHS!>D1OUNi`JrWiyFMIEzO}H;aQO)IdW_!dC2` zrR{p<wKsvNy%dMn;}lm5yQI{%?#0!%@}|YM=Xgdk>j>)|n=EjlzR-_+n^<sXbir7R z!)(mKd@O)z24@hE9XTKYEQj)Fj3#IW3A6;VIwYX)o<F$p;P{@^dye}br|-st+0$HS zPn+%2r$ZBpeO7xpA3KZ#nDL`1@xw2h(`wI~UR>a~6P|eG=2~3xls0PUGrynEpJkFA z+w_iULV74Ca2-|Vu%hF^T=wwr4)5XVM`eKQ$bsC*10UEhU>@fVv3ou%8lEg*cLB*3 zkw=;Nh`SMY=IFky`_}C9o6u*1Uk5+>wrYPjlGWKMqv{mKi#vUXTC=z`T=-vc@lsRV zGZ$1PLiV=nqDETlcFZ85mylN{)cFa?E2L-1QE1451N~Va@d-6lYEJ}W1OC8ud_c0r zOpnFrx0F>SfMeVhdd;pqKFd0uM?F82cew@1iFNG-e&<ce^QhW;I*nI{=dm~0r8U@Y zOqO2t9b+A4b0au;kQeK*0f%q_7jX$!a1|2l4cLfq9Dqc_2>vR9EK!hPr_+Ppjqf)P zZ=XMYDCB(5`P(#;=f7;yz^*N;-#&hu712F$WlUHLo2%RJd*oJ2$I;N`ic!{-S-sL| z$3XTYA)YOg($Y5B1jXK9(dmWiuCdle>gfTNlzNsKM{hPItt@{y0uhW5>_NdLY?rYF zL6|`DPR9_Ecr=2s1Lc-c01<&ph{0Wa!e@9ar|Lusc%m&j;}{~k@^KEAkY)u{6@Eow zR6=D`M-9|Rb6kMq(~?Gi^p#@=qxVMZPg1U5JaO^*;p_QJQ9l&6=5sl==-cv{O*T3l zI!bCO^e6kRfW6<IY_*v{d&aU-HX2^M|A1y_&d0OS`goU@M;DY(Ttv;4oJmH8K+fS~ z5@w;sDoQevtS0)H1AnLp#un_trnUTyUHAj}f+*2=j98>w$GVHsXn~g4w5}Xm1bU7k z0>7<i6>_+EqCG5ma`&bcCzsOF;#mKY{v-R0Y(LW2Nl!n;I#Jy;g)=Lso^W>Q>3C}n zb^9nb%F@7T+Z?PwiiIdhkR^y;QGX3p1ws*v3<R|!jNnVqkK-O*;UA>Xqf&xz2|huW z-JZ6p-$Y)rp}jFvdtcb{iPi?H)*g1pN!GxI_87ANPoz3;ApbYAYmFY8SdlifsmH8f zb|?|Kg>5yOZKYtM(l)ls+o=ih8p%WSx_}pHG*DTy^Qe__u+`As@Tj$k$lKA=OAA4* z)w+Ewo|)W}7NM1?(zG&_rfyS3ad^oRf2%8}aWS=qz3DQ&dG4-BV-+QpWI!9VMLYDt zKu8?MV>aeN#St9CCB)-BT#08k6huALM+3A)CrCQ<#;6S(@cYm+8%wYp|G<d^ss>4{ z#^``9cz{?)0)B=YiD*VAbcZDBDEMG1Xczze)Av!hp?BIZmp&iUy8~%=+z6u6K36RC zotRKRsr6=9JFB~ANI9BeO{adDZ1qmd;|Ig4PGut|>EzI)w@Mkzs5Y8nO=jasg-k_4 zl_IkEnTUr%9#=v~bU_bD-VenDOu<XMfs_XmWg!*3F%`a$G7<<WCqW3oJLIFh6hm=b z+(LRvA&S90JjWL#r!YyO>WaaT!Zj4WkdyuQV_#8a(;Ym&U%EZJ_N?Et#(&M8`TOTj zp?Ch2F~bHVB#rb?!DQ@pRN-zQt$$kA_x66Ll<GWRYbtf7FQ*;0`BG0`oo;RC!Pb9E ziX<eQQrSl>G{c(3mQR-b2o)*hQqU`-1zMsNI-nCeqYLgJ29sD3WTlu1Uj$+m)?h7y z5Qh7Z6{lnf#~6sfHC)`m*)!Qg&ajh1Hq=9Xv_=~Y#=H2ZF*nb~L>!8_xo69swGqoA zmMvHoF>CtdaYGZjK0O>$gnXBxAxEN;7`$)8ND_XrKeG~Sey(Vbs&N=<OZ-V%Dwjd> zEomxmL6&d*ukRmm;pNb>WUrpGQgf}J1<WdPPXAl0{&{fR-c+CbZj@6ATEee3`?i6Z z%S`&!Qj+w?uw+gILaQt6ZP8Zs*Ka+L-(=SITMvxC5^p^)ez6aixEtFciHg>ruy`$U z@>6aqG{pl}EXQcoPaZv4)}8xYsKqv@|E#chCYM@lioDb9pugNuqcwJxK3ieMd6rvM zi)UWN6q>{_C$xUk*>q~wZd~!r?CM_D$y*I+!lUx%I=H29e($Cp`e04xt<{Y#veXq= zg*23m|04u#)&F@2WT{?Ahw%S91n>X%A&{jWz+qIR@c$oauyFDJE)5FXb3v9`302Wb zLg1L6yzVCPpL%FKH`-Pz=dP;H(wQxZWux$t|6QnR+e0NGF)D@r^l#Y3Ntr*m>V+6Q z##{V2w0+e^?RiOI!}eTms@I>h{bfJ1>)vLXwMJU4bxK8PKUrRSDyzR%!cYGXV`0-` z;U?ADM5xF@46>paienh&V*w80FxnEM4(J9y%!9-@2<xy9`w@-<xQIyHfuzbKNXoou z!p9p(5}9_hSAb+l121GnHoSWAG>Y!V(;H`Q9O3_s1EB{(w}u|rwC=|8g}%!dE?+op zM2`{n%2pjX+d3)Lv2nb-mx}6nzc59A1W^4vlLp++`dX8j7(h*|_V=}BNS{X*ZY)?9 zDhsTJXKJO$<h(xeHJASy&EW(Y)lFg7^-|09TpH>($2!2tmQ+Trs!vdz??(6?ZO|6e zF$Z(uhX5?YI;_V<T*GzTzymzQOT;62C<hTpiB!mpEXarap=_e6(o-9CP!}E05xvm| z<1h(}u>?!8726Poy?BU6c#O~Z0@poc1@hxp6h;vgMGd@ud_VGNnaHEB_ejrAzJs+f z8NohY@Sfnu_m?SZ)D~+tPP3-z*<(mSwo8&v9LI4CCwC9`KVYq@2F&Ja@c9F*%hv;} z7O(P>Cz8aHyppt%q%G`uR53DnZLPJ;w$nKH-R5Ua>RdKJvZ$7mx01w2dr5amb4lwT zPw25MVL~HQBts-KBolr-VN~LTMs7(?<%eX>k0;!|JYk7OE=mqc?n#dQc*2P*5+*dV zR<c#HRI>BO6E<C$Frks}lIN1&lE*)uFn3_WghpYg$pnot`ll1V*C(_oNu>11M888O z9D<P;1)0eh%!MD8A^>M_7Uyse_wgJrkTr~T7THk}rBE4F&<p)B00S||#>W&)g&*c2 z6#MZf!f^l>a1pm~8y<T(jDQ7Mkqre<5UtS$ZP6bCFbbow0&B1qL9ngkV-Lb`1V`}* z&k%>_c!8I9UPhjX+`s3J^!)oP;pc>&pA47nBGp~fQ8fO>+NSOcux3_AZLwO_4XlCc zlPxs#HaCES;xV(WUS73~43NZ^gqKABadC)Pl~5dv+>xA-T#+34@r27(CroH$on)J2 znPk(CC+xo_VL~lG8CkMYvQe_`#}igsn=qk~$CAI2x00_vo-k!l!h}Wvkj$5imrVch zg!dCCG)jk*3@H^-5`H}4?sW-Elo6%GNNJIhBBkTU6HZ^BFriV5zA}N^K6ah(;|W`D zuusU^DP`{qWWr=jBoh}z5mbcCs4^O&5n7`S#$h7-Fc0$)h*j8(U_8QOJi$A>hx2~! z96&x4vhh(4<xv53P#4Y69HSxQ%*GtdMF5sz9o8cP=WrWQh(;`);tk%y^-m%PH>5&p zWQHvZAHSk7il7uqgO%`(wmSa1XaAmm|1B%zzkkvH=5RSU;h0SJO*jZ*tu*#h{(J3g z;Z@B@ZAocKWl7l|XXF1z+Fbxdk^YY#U&K>Vc0{nd&+hIxyY<rU)-%pKW9@EF$L<ak z3tJIIMI~%ZL=><H6${V*`?Iry1L%Ff-{0T$wam`WJo`MK&oi+zv%AH&CFNgFfrMW| zFJb@ojQ@O@QO}R$M)D%5`1Xv!+ml{V&za;)awYls_KfRyB+aNNQj#bMl%#!o#^F1Y zX4JDQnU$<cM!!8{!(B-;>ZzBsOU5PJ-<~mxmo{ToQ(C=S3}=SXn1L0?)2mfVo3pFU z{MkpW<?l8k%~RVP7JjjmDVn1NTA?+DK}ujw(@N}x-3b;2<i$|@js*zALzqsoB%m4k z;{XmK7~h{_TZ9H!jWsxgJQiOHL{%)rBJ70yX%5pO2PR??=3*(9;Sdhv2#(_f&f@~E z;3}@6y&uPmFc`xy3e&L&iLal%u96rTmKf~+pZ*^V-szvnmwL#btt+fIb>LOEAJxPY zZq2P9EN*tvEx%_CJziT3F>9-qI?tiElIPvVr8%}+WtXpn&z<vb1?@cah<Xw|J*vj3 z7woZ3eb=p!T_z@ykWYmkcH_joyp2WcNqNK6dSZ-ISKDixT2EUSQl+QPIJJ47acVuW zXAQ|UPW?F9)OzZxl5Rcy#;K3&H<qn;j$L{Op)VMxo_D}FbsnCT-ct&C4>C^O<DhYB zy??D^YQ2vcr>^2-oLcXJ3cX10g~q8f95POA?4!~@rEeOiexy$wD5>O0>A2EqrNc^R zHBNl!u%YO@dRKl%msQU2#t)g!a!ebW(N=Aij&HUd)P=LG&8~4ijkg-v<jz&?GA3gN z?RQ7!MsQkq&JkO=5%fNbECOrs6jJspyoMv?J3(G6D+;4H%Aqdm!JXHYIz;$$@!mO> zZxlykG(`&xzrfZIqcH|!VZn6FxWF;qc?>MVX6(cnoJANO;w{_)c$<yPD1)--j4l`l z3sfw{TJSbJ{4Td!A=X<ASJ+r@7cQR;*}WkoCS+xd?dGBnES}BDbgxTJ`PG5ZET?m$ zxv26{G#}HedeyCb2E!(>X}1sRfU9oVyOfu(KSvpwKN{yDO-|WNX`Qr4TJsLl3Tc7V zUTQA2_C@21?15Y&gqK+bU*<A}?uzX)h0Du1-eUb(>YN*#MyRgCxNgp?q>Jm4Xa*81 zljCubZWAri^mXvYUL3{|Na4LHd=Y$c3$_<A1@K}Qu_2IEL=Z<e&;~!DKmNpMOu<x4 z!(7b6-$=wK3<@TfBZIkS0^?x8WIRBN5Z1w0*yX{jtDFG9E6lq_AqYY+x?bn1Ipn>; z1_C>8vR=mt_~JDDaSj)e^%f_mq5X7Q<)~0@{!xebS_eX-wpoACjmO&Gy-|C$=a_(- zb>xS*DBk1m8Jr=v{htM6)sl^!${Vh>s<Fy3gBtU|#jL(~;hIss`NG*<Z5Hk3+@l8h zF)e^Ge0K?<gepZ?l0_ll8<F@*1mxGkvippC%9Swv^?=l((X}CgkpQ%&@pEt*EkX$r zPQwpR5OSMyn|H|mUAD3hSc=2gz#=4^lMxXdU_r&lERFaFwV!ZSPXC!}pS3UDy4YDH zz~xXL6;Kt`puhG;hBx6Ld~h5mAa%+^9rB_EYN8gJq8ar1N?p(3JT4;;LAZ_^q4cVo z3_L_Qq*3pYg@#o{HMB!}^h7Vbjl6yB_S?(WtL;vld3*b<m-X@6b!V2IIWf;Vde*dA zmRZAxSgZ$QS-8o)$>d@E%<gZ;Y^Mnxcl=xSe$`xYZk=pDF!bQ4_Gzn8FL-Ync*!Y) z8r<J4tvWZ(%|X3gi^FgCrzz>ubhAyxIcddGOls5*{ZaiMp+E=xh~DUf0T_tZ_gVPR z9|JH3V=(~};Y|wn;vz2LF76>5kFc4v21C+2ht%$fu#hwIDmku%-nfLzc!UVN#v6P@ zB5FOc_5;%o{B4Ae=!7olirGkf9s4@=@x#~Fzc*}uFIxW|I}qy?yFGRd6a4+~b!DcQ z!{F=5uVYi6{o(9Tr*6M-R83-Si+`&V*7&Ork1AQzlb@CJYM)nbjj~)lZcB?>wFF6v zmaGoP)#5eGIkJSNNE#`%7RjY0=1hgTlAt_2+f)au;ElsLjuQyL+DNWqI^vLBt@+xm zcbdy5l8(UV_PO&~Hk8ur1&{({=3_7xV2R{}GL~UER$w*OU_CZqBYaRTioSsM=zt&b z3w}jMbV6tJMl9l@SPYz^Im!wbxWSA}$c8moi^DjAqd0++@WpBPAq2giQZU9N@m=h* zNB4r?oqu=y{NeNO_F4zGd>LFRgYxtOr!OP9z$lx87XMs+YU#IbnbJi2TK{_PKb3sp zA;D`#Hd0GARXo#JPO9cOmYePN=0a+GyxaHc{d#7HyrgQHU6`pn2}l;B-)OhQAx16b zz>ZDF@_g>Lm8aQN`_RXUHEi@aby7%vJ}6uIm2$8<@#L4JsU)qW>h|6(&chf?h4#Cn zyIQKc!ru4?w^eD%_@<n#)F-zP51C94?<s~QgvQx=o&M@<#z;>i!ZTo;ZH3?0X0u2# zCSW3_U@E3VW}k`G$o`CdP*gxgR6<o$Lk-kKEwsRUe1Q9NS^*DaK~`i(4&+2d40}%R z8qR=<aEyMzst1d)1S*ze1y*4-)?f>^Vh7T{<b5sjA|LXj01BcsUO$g|9&ztxK*aNi zlV1k++Xl-<?BVu2Vw3hbV%>5c%##PU(`8zBD}3S0N<i&Y%$z4p{5f@;y*Wpk<NjJl zoPJhaX>aaULYuzrndIHkRLL06>cmH4W=v1;nXjeC!x-9ZL`cGCob5aRug+$S@=Agv zfzxM8XI_=2>bbAYR#1=cP9`sGi{Fp@?T_&>tWMBft(DKrFIhO4=cE~YK2<S}<`9d7 zy#r*{Zs?A|n1EIA!d8mfhCl=%1Xu77@py%dvGgB!A~SMe6;@*n_M&$jTQc;;Q2ZXp z)yp37%z(Vehag<VH9SQEzI(-54KB!s(s=(S?nPV}w_9<yf^PBm-036xx5TZrihHBV z(=*4%4YS^<aZcvOYO8|gjOuUB=1%!iZ)K8>XX#t?Z1(1yb@d-ow{9m`30XgF!1_vd z1++&cB+e25CmJY0Fa}^{Y<jiyYqufVZ=b#9M9#(wU$WqH$HiRGE-Moyi&8IJl>Ym5 zT8Dryg{l<FI?c@-msbz9M7Jm|q8gDqjGV8NddF|=SZV&2&0JU=WHxt9li^~@!b;^e z2V2rh%zs8t^us8e#3?++6GR~ziE!W*T#+3)Ag@>rHBk$-(GE+XVgru7VRMNyh)y8? zNdK0&zGWAs4g<~59=~EVp1<Qf1LE-tA7OgW3!^A1;3$qE1Xpkk*O3^*Eiy6kexwXt zOT2XMlJEXR+yBHZ*4u{ViA&}sPE4GbUYpXS)^;~<<eHzn_Gb4Y|G5`&{nVeM8>^?B z&DnF5lL(Z9M8Oz=zh9?UTXo~3PE{i~=GH2c`G++AS`vKtmAf`}Ihi0?nC1|kBam>V z>LqOceoZs#Qc@C|t8SUiaaoO_ZB1AsAtC;<rr~Hn7W3>hr7s(1EtS<AQdG~x@3x>% z;qN76BiMye1`EO3#`?QCF1+7tnaw;VO;oa?vYSKl%VZBBc}v6r@(_pgAJ|=i`-k+Z zcQ@Axs`bt6?DHI_SbLc6$(@H!t0m?<eEg@CQb@g>(_F|RNsK_Otq>_7qgIG16MwU! z5-Ot_s-rG?peF{R=|?&hTA(Y`MBZw{8+)-2hj18|5r{}cC8lp{ie}(BUf?a>;rmY< zzC;z&L^DV~3y-`Tlz1_bySv8@C2m`vxIA&*@>$FIGhY52`Xh0DVm~&nMHH^9D`?J= zrdEjBq8uBo)4}TWg68Jxy@KX^4s!BqcdbA9gz;mJ(VlQ;Cy5T3EvIc)wkYvSYI+rh zrP+FhWjAJRU{Z2(t9H4~pFNC$>BiI&9OE2qf{b(IHGeLshi@EH9z_*f2)pt3C=rN( zb;DCgt(ni9P1V;gbnRHP{K71~<AE!`Z`)n@PTl2T_E2MUnlos7XHLP!SIckyoL@?l zcveM+e@F&iA^m514BS8SIlQ$>5jA)zzmEN%x=mrajbx-3hT#`V>W%4`jT1PDYq*Y^ zxCMDdd9{q%E1EL#w-EN@00I$&U|h!y+{PU|#}<==X)An94i?jC2K;ay7jPMYxQB&y z4yHxeiCyr*KJ3RK9ELAW<09hIIGA3+#oj?%q3Nr%8zDC?o?xZ5FLHNeqIGDaHsr?0 zW!AyO#d8@}?VBnEZF}lL*R&m^RadpX*Z+#_D3w>83Yv4~PVxO`sWzA|izrDQu>xsH z3eqixB^W)_lBL-jDOtq4HqEgRL!#3bH79x)!*$UX72_OHSB!I%U=Cy44iXEAk8zG{ z*HX-pTaVx+rt~0UKVl{J;E=t8n!B`lcbaC`jkA?8Ct4)9uE>ClaEHuZ5T#KYb<qwT zAjJ;AAXu;*@-n=H=_rojI4&a)MbkQ%zDGUOM*}oNbF@lJk7><7cl5w^?7$hEg+DGM z5FxmNNJJs~cMjS<b(r;opke-DSC2*P-@Sj^)s^fzFOXelZE&h}(Erac+n%(E4cD(t zy0MSL+D6S)&YZ#4LwerQdPwP;TF(ez?IV}Kx|==KQsvB<)$fa$^Qos^x#cON?Oog5 zNU?WaQlg+oKw95|iqc9`y!Li$Y;_Jv4~jSEVy7veI=6^9kG5(UcjHT1d?L%6v)Xyc zToM`yOAw^_#&y@On_p&8nWdy!s**XxLywX~s16aT3*&6zx4t%;MS__F6;KhCP!qLK z8&XU?v_pH$z)WnwMr^`P?7|*+BLEkXDIGluB~c2cQ3;h%4b{^*bTKt#;0O5N5JGST z;dq27M59xB2UBN^!rNC-d>hTHu-lhU9ov6w+y03C$2Kgx%-~$>;IWwuT1Lz8e%05@ zHM5y5iQza`m3wLv4xOY)dsppK!(38dP25&bz2zgOMT?oU7vREZ*&<o5c(rYvWGf|~ z%&;A-SstoJlr<O1Y$~pYNW$X<34<~6nQwnB@*aA$BvMsqphQHU%|Tghcjs$!<+a6) zFR*ejwL~t$F%y>%0^6G-ee*=8GjrfzP;K^sC)`a{VjbQqNkIR^Ul<1qW<W}vj|JF_ zE!c+bIEstVUp0c^$4Edv2i74dgu<wV%4mo7_!*s`y)BOLd>--q+VhBW5hoAqJg|P% zNp<q@uI+X<RVVyxc30okH9t{@KQ`yIo?>*W!G>3s!gAVDc<^3|r7)*NK(EUiLw%@= z8n@LcyPCA~<<qLZd5@j5UP&sZIyW@`Y+vqv8r3q>DYMVGhUSTO?o#0&4VCV~ba~e} zXZI=D$b7}lBJE(5sVn}3iltbI_1K6_*pCA^h@<d@AI{(+E+GUr5sKSLfW4yw-}>cX z^2D$B4IR-Hy&YMH_GO?S#=?T_*nwT}!X9|T2ZwP4=WziSaS4|Zh-<ikn|O%CghyBX zkMIBT$M#_3)s43C`K~T_H0$^*>oorQfUIm;eB{j~KPaM_>zRwGkA61ikc@U#8~tpq z;!;tM8L?8Go0z+&De@qxZ)WpZ)5P4>&RycT9EMmLLhr1HmXK;ixQC@GLc)C*hL9VJ z&@({vwIcpWU4&#N2!`w!i_nurQnVtXAEv5>B&;)RNt2uzi_lX@+O#6Bg{LY)QYz^* zq|#V~o>{W06>;)Wsv;!gl5In#jYa5*57&#>9+9#Li*yQ}H$~tvo*)u05QA8J!e^9s zVw-}BsEjJ8hU%z;dZ>>Hn1~fviB(vS4cLfH*n+K24t4l4LwYz4zz2tL9<N?Ryok7S zGvtKV3NL-wYns=PX<epyozS17TdHB9=G=~^64tXF{Ug=+gL$h_<ea&feT(1AsHeQm zwbUP^lXeL;yU4mHYo>zIUTLeLoyM@~&8C@J<QG3q88&wbfi&OHbYl^EBxtEt#P}zv zijXJ}0b}EhMd-1(pcfGpnX(9r#EIuk7jX%f5r`|ehU<8ODCBW=Fy%!)<VOJ%L{St& zaWupaXoSXSf>vmQw&;U?=#K%;tf~ewFbpFw65}xkTd)<|upK+F3trfdgYbbb0uhC1 zJjF9Sho1BkUaOPxt><0)>lt!l^{g*XYQyx178Y|OHSA||?v$CYD8Z6I8G>YtxgIm( zq^0d@RLYpUOAIA`hS=GPSZTg$=fpF%NNOdVh)z|4L|G!-1h(iJD`5z>R>Zcasfv(9 zND>V3Hx{9%gYaub{QWFd5t157iy<YpBF5O-AqgTOS_zitsY;M!Nupx#25*_xupO1B zUM7Fq^p3~&E)J&ePz=RU0wqxjWl$ECQ5DtD5I>+1nxH9Kqb=H@J9=U)#=(N|E_BWb z3{1jg%*1TW!E)@z9(ZFf_TvDK;y6wq5RVXn$9RG$L?Z@qh({V%2UA)UM+uZfDc20_ z8#7QA<)9X~nDe<sMclu5^rD>Kw+^W_EM`Av;${sDfzV>z??tLuOOPZ$hTs@t?QDpZ zRz&-ksfv&|N(>G0GZvwTlkjOp)Q(A2goIY2YKW+@2tB|ARx6@dY^ow8=n`;4u#H9N zu_xwQ5uS0WijaIrE)01v7NMtwG-yTG#iuGlQY6`t%v3=&rZse3!)Q}=o^FpHF%{D= z9WyW!voQyYuoz3Q8G#5wFhXz@*KiwmaStyM3*NMv6l8>Z2D)x020W1&IguNAP#R@X z5B1RiKcEqspeb6TE!yE%jKJGhFK!3;1l;!C>b+Hl7bgt`O#Cu7V6isrY@OUxz@yK? zbn1dvd}CY7dS;h2cU`mxrRtd-)sf50xztt`^8%N01kV~JqM`--dFp^m#3WjVNErg| ztOt&OX+_+8Wz5+Pb2qz;%q?*=#L!rR9#TT6m2mpCu>|Yhr-WA`Yly0?h}*Kt;~9xD zG1W@g^(Ivb5^ssMA<o81=wY9r7qK)UWf2xhhXv!obf$@zgejPc*_exYSdN|81uyKz z9(dz8PT~}9;1*&Lhj_fgYb4+;KH;<UEt8vr$r+VU8C6gf)leO^Q5W^l4!zJDeb5*E z&>s^q8GN+bv;r%!3trfbJ$P|1fM1q6y4P!KfNiLl45l9aWda#m%v`c-w;+^rJ*~XW z{nRjTw&sVu&4n^mm7qz$48bzyK#v_U)6zKUZOR<DOFSi(hBz9F(8Ed?rHCGO?^2Z@ z5tis0B5N#xKwINXd{yTbl<+=P2@-k<yCLMZ5{64><QYi-fmfZ|P{4;&1xQXLABJ2Q ztDvWbbg0f9DB)wO5+qZSrM)<WBTTBT1<z9j3uC;KKWjS5<J-7{=Ximah(Rp4a>(=+ z@9_a?&1~!8fd*)Z&gg=!=!stFjXvm$e&~;125`3vUf2z9>_rfQVcUpq{jxpXdi3w3 zWB(rbw{28UHnK-A(vdPGy>-<-3U7VSkiqtzA@-B?h=W?{oH?(&acH4+HvLV5vrA#( zVr@CCRh@q$l!?Yr{w*sfrjQsI+HcH-9uAtQI(MOfPsReQ>n3Tvv|Ji(Ypkt=e$pKn zD@~`_TBjcPPs$Q35|R*H!Bt#Cc7>x!7=+>Y6MtbW7GpDZVo*kwW6Z;1l+VPv0d>&^ z89mq)LIlD*$vNU-mzf;nyUeUuJQyg8M)(OUupZ}d89lSG!oU<P#a5h#><&E%zjEo! z;RE4Y!`Ch6wj_KVw|UFu7Ct?Ex%IXreDWWBCfD|l<GwvAxNzK8?)e~nNmFZnhP@Ny zpq`ABPwV>>lJBmzo)qWN+@7BLBX#2~bIsaJ>1;k}{W<sG@?CjO9?4IpTE9JkZj<aW zM?mz)rd-xxwM%ZtZ1S;IUO^4JWzM38Tg*8#m5^LW9`qdKRP-fF4lz0NP*01N&YwOT z(-~&&VwWk6<ZLJ;Z<4by$;xo&p*4+?zJ0jB)9zvBU+wFe?0trYndjN{XOt-nZ{SE) zogkT(4DZ2pyhTlS2h$%|k9bJ-*V(dOoQ&7OFBpzl*odRJ2wShvuI^piiwk>e@8X(X z>(Klgj(ybX**VF2;*q&-1?fC=6jOD~gY<*bSshGn*;&qWFpM-g+3`UE6oK`7z6+_R zCUR;uxR+919e9!AYK-P}=0D*eD0h+CiPqpqb1939^rv%(!ACer`51z~u^HPSuj`tP zl@P{a8FnBDPvJtHGC=B98MV*=4e<;EsOwOS#02cbt{fIp!N7hT#u1#y1>DC2JVZER zAm4z(x1QX;&Rt028Ezr(LVUb7hOAx0jjy!eHfH*mVPmH2onHU@jq~~HrpIPai{9I{ zzP}`|t4U6hG^-m=|CW3GTPO5oMaG#jdiIeilRd}RLdZDn8S4^3IbX&kn>Oj0dzLmw zlNZC{VXXwk-Qzh=>%CswmoX`eOSW{UUbrb$=KWp*X-7|yo+G`cu!TG6Iz>?tl~4<{ z(E=^e3P0gz^hG}m!B8yA%~>C~=Al3o#3)R_a_oW^?%_UO;|&s!h!X#B=bV>4uoyX) ze&JZm-3vSA4l(OvR;Y{S$!*%aG1Ep27{S$t+10c)IJew8#;n*oq_tN^$C!UqPyKAp zqh@$)=BJwLne%!U)LSI2sR3z`erAF5<@P1*?A4GW<}yB?qs(@89(seNp&cNNHBKIu zH2G7RT#tpsVGtx1`s8`ctJ9>>3zw;L>XDjci;_er3k_}s<E0fA2bNGyrH{66Wv>?y zO92*%jt4xE88UM&<VJZ^KqXX06*NFg$P4s9AN0il48$M|#|VtUSd4=O<1raiFcq`& zI<z#+VPG!iVLntW#cHg<t7nm6p@E@+X9Gh|c!zG=xNXh0Wi!S^jv78{*^C~xzx<J{ zfSh)et$;f9joGZOeq(Ov<fxr!;&b)tnV06e>9nO)t$kGSP~Bq8MO)K%e|77|9-{tr zG4hD3fLVw<(l22Nk#kbU<)N_Na%r{RVri|klvb+VF0Mt?YSmdw>SrbE*-xP_NtaOR z5+BvDSLQq(dO#!)5(8<!p63MfD*H;`>3K?!ZlQ-qLL*^WmtyjmWRqKDlC`$U*7J7* zwqpklAUBtV6ht9ZLv_?dEp)<oOu}SL!QWVnrC5gLSb=TWj$QD=ZtThD@V&{0fkQ}q z7ym5s(cQ>v=dPVQcJ7*-M_w{->iDU)`@Y?*OI@$e=6dRZ&*mm-OK&>r+NMgjbeXKb zTD|0rxmS&EoGyIcyt*l`1VV4&L0ikD1;0aDk>ZRUC+loy>=^oB?r6UyogU{8#5t?X zqBmM^ur&6YCz>6sR|t1bua&a+vr<|uRZH2UK8WUR((Uw4**(A0gQW*bf~2QfRv3zd zHuHhc3YoTr&>FoHOnEBB)EA6XTO`KEAyb}&Ozn#x1mikx;3jS%6w!E!7{nqD@py%g zNQ5ar>vE)lJ<=i*Jdh39kt095nmHNBg%T)<GAN63D31!Lh1zI<hWG)E&=^1AH*`cN zbVhIV!5|FA5DdjwOu$4;!sPrvbM%LS*_ea5h>Hr3yL;jEfBh$p$#-0k`=mRz?IqOK z?uxs5%$?s`zVz8#PV1OnpE=YL?yltYtfvQBf-C`+;2M)U!O@shJ@gWG3Au#ZICT{# z<J5XGBoUGXNq}+cxMWl7>5<e(S|lUJskb>B%hvNHxsp6dj*L@xbumt@XHc>ynUky; zr_SnXoH}JrC7;HrLy}FcXIsy-WLcj&iY;9RW6>$QfTUlaSeBtWZpNv#&he#hNWU;n z{XW^$^6We;#wx6VacXa~p=?XasaM<PSj%58?7=?l#{nF~8TjJ@0&o$Ra2xk<9}f_Q zhj@$k_=rS&!aw*dOPo^yc7|bwf{buSeiT7be2-!%j+&^8dZ>>EXo#QC5uMN(T`(BK zF#;p;2hQR{<gF{WK180pb*1b{>mTlKZP!L^zmoJo8)dtfXJxL<tm1PxXz$E8l2piD z`OUfvsXx{;m-VbJ(bi)pag&%Cqu*CCMBl?0QHiER(l~YAjK-;rah4cMe2r6wCY#zA zeTlk6+&J|DcVpSMd|1;VsgN`nr*53dIJGfJk|0TracVmc<J88~N!lc3#;Fe{n>uAe zC7H&lhk6>zPMK;+vvKO8nGI9t)jL6xg7ivcEW~m5!W>1wLs)k*xoFdcFOzT9ik+T8 zrIn8M4{c@md@ju<%_2Q09FGu*VH7kE-%(gPDDXsnltd{sMhA4oJD7Q~IhczL*oe*8 z0;x<ip5p~x;sa_HVcS#0p|z<41ADO#M{x{i5rErxaqq^J7gqw$T{*Jn2(E0nvf|2$ zg)6SioHEn$`xW^wPxfTHz<%L`pUSH9-OcU(n-2t>Dx!2!TfH$mt9gqmt#TBWkV#FA zwX9ABsHs|~mt*$iJC1TWn_|73P20;@mc^Qya$L%$a4DOudDhnLp%7`Ip2@VVK(lI7 za}}E+SFtG}dG#3VXG(wEEXu0md)}#`6#i{zsWN%B&z7vnDoTh&!k2)w6g36Yuo&C0 z4@VGyd$^BRc#Q<SMOt1qBcvKqg|aAz@~DMT_!BeXjlDRGBMADQ)nPCLS8x?^uq(## z0+dEMlt%?LKtr@ZOLRmh^g?fp!WL`=7hgx+NtD~w#H#^Ud3gHxX`k(h^4~UUt##C# zY*Q0`=7>ZeIU>N3txnxq^0q;aLe(B@E}~uM*!I8aE7i*>b>%~Aa?qf>gu)nxkvx`A zeAy2zEZ@e~R$a>{MC^~+^5PR&RXT<-X1ke5;-+_u>dGqnf!XymR#iUbHl@|$x{v83 zbon6RlhE0^M8%rQV*A`V4D)3+rPD(zVQmHpt^PW)Q4Z0kx2vao_Rs?_LGJ+xym9JD zIc=reHDGFES~fAIq(-0mDV;l)Vd9*6-nKDO;o`hwMTrvR6*S-szi-s^3<s)y>cNKt zS~XHe+rLVhzp?V!A~}!8E4VPPD{>+i3Zf9C+~O#Kil~Oh=!v0-$6I`WJ+G^v9Ll3H znxGk);}`UT)NfJ=hpMKj3{1mx%*O(}eaa_{pI&?VHu%!n;6vQJ)&;K%UKYG;{xTj+ zpEP}JzmC?6`g><geGp2$QCk@#YaR!+><hPyX?EmRf2yO@%TqvJax{3^q*s(z^T+uT zso%afQ|j3l$)g3^C$bsc%OaCAsp$f4;ub!`RFc&=GNUkxpd?D849cSds-ZesqYc`j zJ$hj{CSU_LV+*$85Dvq)B#ZoM1}-1~S8)y3@euFfUWz>+{Dmdh1Fo~Xkr<fhml$~R zU|?bbgMqsO6W1m#U9>de(QHOcpO82`aX7aji7bQ<tJSxz?E9pzpe@Z`4g&D|1Lm~q zxN?f8TBNCxLEf#F*AFa&T~u<ZbGticu%DgRURC1weqTP7%4MQWm9pyn7;}2h;(FvH zYGtXcL`Cn|ve4YN1zRQ9pR$|M%JUL6iOOO~WF#ux)!NJX8d&Q_w^l1<w!LFMed%n* zo0jaYmB$`>^dxd8LG+TnmajHTc{NR2<)5PRtc3O+BxHk2vq>()+cosW0<42^E77u@ zGRA&be(Nh!Onc=Yi_EGpYf%h>6f+8QaRH7Lkq3E^55-U%Ys<0nE>D-KM7r@uO}Z9d z)^RX7)aNi09-vVJwgOn#kY3z`Ga>k;DOY@=L^FrxCfDX{Qd-i6Hmv%v7sqfM=Wqe< zpTCcaxET=@a4IU|nD=_`MUdO%r28>LBL?=0P`lW3m3nvwCCHwxARo%gAtxE=9_r2? zm7<m+5|B4&T$Wm(4{o3=tyzw32*-Qmp>;LU5sPsTc`9&01I8f;X)Cg)jv-i&+sH#S ze#T^M$4z|ww;I*3Ey{P6oH9Y$%B+9T1u6nyUxg(P({LJ}P_Zf%!b03c+G?z$Fb5H+ zTiwCb4U^!FhsaWcGp6_%TW|-iq)Mxl+Hawf$tUcFlVYcG;(@bxnVr*W-xH%%PbMvo zzF3a{*w^A9BYI*feDM-4wOM(fI~Kzq4)ll$7=X<PL#DcviMAMmIXHw+WU9w?0{GXM z$pnLN0tqNiSNjq3aT)JXk#08_YjG24>4FvTBgW$(o+IxMtlO~^SD`dwp99md1DEj( z4vqgqrDTF~Xoq?5M>ML?=Z9houE3eT-w4Cuji<=ojMXbF*n=zhh%zi5y|EJEaBsnu z8?zCBG%Py*8Y!8e5E`KuCSwhb;5nRIv8RPzn21%lfGFf|P4`A;{Ds{Jgku|47-)d5 z_zMf6FTYxaWEac!i(d1t@zJfY?n)kuEY1O#(3axc(W5%ElEk_$yi34N?7=?l$8ogp zO6SE;{N0V7g|%1*U!2EHJi=o<!BfN`9v|=#L%TavG5y}1T~z#q2?#>syQlA-yt@~A zB{VVg(&+=Ix2_9auH6>ST(@xSus+=LzBr4|=^jcEyTPnd<YU7HWL0$?1!#v~2ew{6 zu{QaI0~x=vbo@p>JF>Rvq_uAY?U45A?U6P}{iU8#H>uV{l<mnX9C1iQr`}wxFQ0zn zHyM6agKxPMR{1%GY-;WPynVC&Sjxbg>?Y|yo5JDP-aIkThj=F&>SB?GUPp}{?Ao9c zdSEHG;4n_23a?rNwNVFBlQ;MXsnI9=15+=0ADmDS6|fK;ds}O5>dfEX=#K%tiTpqY zhG7@Hup4pF_iVQt(SgwcHv;_R7JV>!_ofv*QUj)p>?cPg)Ej-+SaD)meiLnABS+IP zn6i8HiRd|lO}>n+X#FnUFHaUAbk<79Yszaq#S6TLS0DC*kftx|!hXDAMQ8NJul;EN z_Fx}A;vbP~0NcEQL<8?oauCZWR%6{D2l>jJ3bGE(rk?1h^ik&@<d-YRQyqC&Sf1d7 zZa=p6LF<(C_V+61Q`eczc`Z_RQ+8to-`OhpiN9&7q!XO+1BPJ)MqvVWL2pR8Z#1SO zl{YphkjJr4Vy`|qbLh+yW%D8aY*sfvnapi?*B>XV-p5^X@MhK_4<|RNCZGICYZ}xj zt;2B0)ot2m<D~(u26OD6lR5gZ>M&4wYsoGza37EG1bPHJ5WtoA=No}+Odx+m7j(r; z%z`bzrh^P0Mm!Sm7HI~vIf5gyqQ?-HzF|X{38(P{FYpf>hSDE@XKBMQym<8D(X~gX zAMNIL?a?OdO@`!`w&t&SG?u3Za+|+K)@AZf?K)b?tJWW^v{C~HD4A8~fl7Wg&tRp1 zT5=#elM_cPnbhzBO2Gj|=@7~4D|Pdu3URh7$jk4;5xhd?VXTKS0DoZuj^I9AhqJGa z0;q&$NI!zNe`r3!LG}IKse<}>6bn9|k<BI@&sBX<mV-RiU0v#Ezno+pVq9T$mp|{V zSZR1BZRFFbSB5GjEmETi&}${N(QBf=a#dcrmaPU|_&eB8lN?%YOzrsFXe8TEL?8i< zf6&V4yO&QN_S(8=!lLM*(Oc!=-OJtDYk?)SRjNA`Q@8)FR94FmQ}Reu9o6W8?6X^j zDdW|LzbjR=`2N;Y$!f_=yREM@hriwkLuOv745~t}!E}bb@BmTJYm<u_Jw%pKoM6LG z7=s-M$1}VKpJg&t!Iy0s6@H`6zvkkinu|HLkV`iB?W!@#ui84<x|mzHcRX81dp4|? zle2oezmidXK2~wJWS3~j>sLb^G(ju$Kwk{TI4s0cNIheq*Hy3A7V5Pdb^f9spe2@J zCw5~$&f_Ak;4Ys0)s$spG+QI=fe)_XKC+KtcL<U9E+^ei-8-^lHMd2x79APcV`S2J zrZDAG?FRGCs@flPy<C4NUP}g(xLbo+2$qai%2*0Z;5uVImO-y@6vG*)Of5{rEa(-N z3VTt9FsTRfjO9o;hG7*pV?U1K4gP`4IFg8DN&2Af33n`~T~ZUACPNEJm#Zu$2URU0 zBa}iGX>CE2z(D+gE!YXE#WCnL(O>n0;T6mCs?|^zKcP2fV*%n}vJh3|!#>=?GZYxl zTki1=T}`DJSdQ&Dk88M%Fyx-VgeZivD35d#>BCQ~x6p*EXME0VT`|${_{$@iX7nFJ z)DM3t1=5%H=##%=Ta%Wq#lI`fmkeV=H2n{yzMeAoKE)-1(jKX|Uguw_s|8;0MF5O# zkgAo#FsgMB878q;kI@L8!d}5t_T6v_iD)p5?c_MNlWYmO3~8cU9php%PIg;l{Z#54 zcl;()d6gd#WZWhma)!RJy0)HkMz&4P>byv|@ABqpRgj-~lHZ%SJG=rzX&AD8xHau{ zhMY?I$|lxbeLg~Qv}BdY6-5oyL0$Zc-!K3JF$6;)O}PzeN_+H0Kl}x0+7|4FHxA$+ zj-nV%E+@@KWmG{;1W#dqL1K~kCh=j&kzEhhK1^JcxM+rD#)zR^hW-TYo}aX`UWaFG z7`r>ttbvU(q#XuR9uMndZLIM!2X=^<!ZEE}!DkIbM)hG9NB3-Ozt^_#`EoEsF7jjC zfmU{EAq#u5S=2h|9kZs(V%>pK=i57Ga?m~xR;++}#G*7%2V0b)(t$iIdGth1q7l=v z1go$bCoyOm>n$w8X6%AL&fz>RBM{dShKGp4rs*tfc!jhxm>1je9I>c7lkMG1b{Lv7 z&;o7H7Qdo9reiMVV+odGH7+3(t!GjA^Qb#fd;&h|=2iczC!-GT*>Z5t!PN_FH+it< z;H-%wthZSc)!I3oa;i0=`7OB>6W9nn8JNLcjhw|7(XAV&l&Q#J<1t0#3d%|y1FeUh z<gfO~m=sBdbqfAU#DmB2#UDeskY9a1PAS}@Buhe4z$8c#3~8*i>jU!6=56g9x)Z9R z4>rOJ7f^dHJ4pB&_2#jHN3r>=g)j{l7I5w4MJ{ity@e&M`bCx?e$JL<PWBG0zpobC zhoRW*ELGfPvkom8%nwrVyKC9h(v8`Z*#4`Vi+X92QqIM&XxXW|ODmcAWkQK;8_dQW z%*7ELMG&>Wj@t;sC)iVKM`VYzOj^|d&Cw3Mpto`x!@IB_=ix{z^Po3|V5WsTY5G!Z zfE~?uf*Z^zitkYs)ldty(Fr{<3X?DcGqC|1u^$I;7)PLoH9k5t{!)DON&Qw%A4v8$ zK6>}I_zl`*@zIO4;oR2GSUME4S07e)%dAeEqU5rlRnYcmd>!7+@$=5EYUgQ+yZzPz zw(-`VGUP`Mvs<c4R!gHXB)i?w1HI7)eK8cjLoz=Lf5RV_(Ru;%Aq2P4av?{*Z~|u$ ziCEYzVs{$ZkpnrAcM&W6d<+yvIaEP?%tAQQ{muR<>Z1WH7>^0q1uyKuAsogr9LEWq z0|(9@-nsJd4mSpkx3g~#oZWr)t%pAD?AtYG7oN3Et=_84&#hQPmZq>4G7qjiO8U7- zE#_0Sn3qY%HIxH7^Hn<0eBWT6z8SKqFJHJSzg1)zF%_T@Qo#_|EoLPI1<#kTsZfa) zsx76L;wUcQCZ3|qGL}7*SWaNjY$fX+oLcRmu501UZ`=RQA~wj2?8eAY@vic_JRS_? zInHLy`mkwU-WPruvOY|4XMNVyj#3!ncYYtR5;-_SX`IozRMIe$hnvZ%kjc4W9kuHN z*PNCrZQt<o84}*$ue9v3v<{7FVH<44ZajnD>Uy;LPmDn{Vj)qegTeS65{=`KXxxWH zqyW(<W#LXjQwg)M84{w(wlKM_VmU=^)Ww3;bXc5(FHR#aD&)M+`R&%*D%)S}(f0Fy zPqW^}McD>M@wK7yj}FkfV^>qFG)>Z}rKhkLI(L@RMO{Bt>87r?IC-dkn;o-tDoJvz zuMo=L25Z=upzd1UapDd>;qrP`VH@ZW8`;WX<|g)@p=@S){D}m-*+R0n@<tN*x6zx` zq1E{jCVg$oJFra-ww14S=u%ylc2>i@V+de{Z2gVfFLzFDS?A7fMjx@>aiB+=m#<XH z%<l{F&gkkzS9fRG%aNp;(%Pw)7s;yFQzCW&x6p+4G({V9L062xNa*c6PaA`5?G5Lz z&pJ|x)3}P8wEY(D;{hTNg=i$=6C#Mq3ly*rn1ZN@T4;$@XovQgj|J#Tzy{lb_kqBf z2wEC^hxB+K|NdqC`+L{#y}$I{*UI<(OBux-Blc{Vw_(qeJ?|%Q`^%Rb8{!AOi<mss zlJk@z_K#&X;N_ZI{U@Dcb+whdtEZwZ^|s?f^6>;UrU35<s?JjKTT06-nvn_FFbpH` zCnjPIHbc@IfIx)c3LYQ~ACQK$=RzI~#AvL;HrQ=vtA`S(hNftVkJ~N8kbz1&IL41( z&=r#~6RWWq4-tdXJDC<O(H66@2oZROjJv1+OkRW%uE>ZPy9qy9dNXbxhfT2sJ1pGo z!uR_*j)hVvjmoHks`vp-(GsoD9&cXix5%)_yWHOV*SD9}DZ{Sc4ZMCgAno;ly8#^8 z%Vd{MU6bF@!<A%a=_9`~DaXUqDzlV=YTyDTe~)IeSal}^KheBlH0chO(xm!(v}PTq zX$AN4{t?o|qqbJ{lUg5SZvl;b*x(-`xA^%m;l@bJ!?wemN3H8tLB3Iz#d0IdtM$VY zt<JD81~+0g%@eNbrRlt3vJP2)6W2PlcD1a;-?0AXhjCri(i?b~;%?_6j@?EqQnIVp z7b$KQQ~Hu7`vUe|3)tHh;Vcr=U-26{p*wn^H~K=FF&Qc@;Tg6bpxOw>OC;hG>}YCw zlt4vD^E;vwdZ4$3yFTcP!RSt0CgLyRG6@owPPW*Lv&CnH79-PP{zl+6@*Uv~DcYhp zMqxfy;|Lz$Ez%uj*+OwthouR3zhExb<H9l4HF$*L$9emSdiVjqpcAHIE>>bI;_&L( zt4I-+;&wOkI(;%QGVmNy-#l!iP9=Lz-M(09ul8TS8A4Mtx`VZu(nM*VG)<Z%O_JtF zQ=}Erf_(@?6h7c1>d=z9=!K<N246@k|ADkpTKF@hh0;1{nf1_xk6PC07dyUl!zq`# z=77_81FZ*#bIS96kd`}~V0DAssDu94j8nLd+lWNKNsjyAA)X@BDXs@bb<{u`v_*IH z#Hdpa>VmRPt5oZ6tOqYuR;t0L_{#gvZcg9HiApy$WSLURB2{>AtA-0NBh|<csY+u= zb^d@Cq)KNX)e6O3JcdGbG9xz%BN|f0XZQ>|s-ssoJHt}ldZ>Sj%Ly7W&>XEG_5Tq+ zp%bJXeL-7HV=xyBu@oz?0e(1#o4A7n`~y2*HbiiM8%m=RI-nyaW0o8NInBTY#3KQ3 z@d-IjvkFEtv_fnAh+g1bzjk|R{S&D@c$D}k@y+#sQ*ZQ}b)r+YY4wrG{@OFGx^jim zA`|ON$KesS^`%_O#PJ>V#A3x$ey>@&O*4stL_k_Dt(F#lhO|^#DJ_)NNz0^BFA)c6 zSY|4n9nz?#kVf@@G-eIfVJpt#1!55gS3d_IdQlf!AJ#h$XSrq0ei(wG_yc1x1=BDC zQtBp1$-5z?2SG}Hg9IeP&5skI$ck*pgF+~Y(kP22Xo1%F$&b7ZWndJRV>QAMfk?c- z8ziE_85R=E!~*QZE?mU}JjF94!0{|AT2w~^G(|JCLVNs#U(m(EU03wPWK6?M%*8w` z#(o^aVVuN0#NsvH;3J&<sbu`Kl((;p(kF?0CbwLXDdv$+>B!AGnjgJiqf}2vCpwd> zo$9qs$)R_m)+E##?neBTkV-ful1s1*63u(K4~eKmQz9u*ln8EzM6d#tmq^uzL`tGE z0}_PY*ar!K?Fg>=-XX&c?UaUoHlvT6H!EY2i9+!lF^~vJREnVnYM~)|U^e#R01o0Q zp26-MJskDX5X~_h3$YIe;e*3Cg+SOU=CiD<(@&{;x75H5c~KNnn^KV4)PvNhIiyzo zAvIeBsnro2g)dIy45XGZh{YR7jlYA`Iy>?r9}1x1IeK>!2BaD7AWaz!Y0fgN$0kT~ zjzgN{4{6qQ<Uh}TApXR71mOm9U7$Ck3vvhWq9}~IXoSXSj<y!=I^bt?MK|=raE!zZ z%)@-Fz)Gye2JFOrJU}F(5Q`5;#3%Xt<{2x+XQ^(iFRddh+nz~2jjT;m&+{<xVd8CV zH0PZ5Z&E6%0oyph*+HTqk&q}z1ai=7i9jAIAT6&0Y57l(hDsy!iWj`deh~VgAEsZT z@qv^VM2b)r<<J;I@jFtSt5{psshqa$wSH*VdVZgCNfWhk917>_{^ZlV`V-~lLLC?F zi+00yab<-B%7NEbkQoIa^(u<usDNIO`X%5k+^J_K6hJ|gL0Jr=?o#jXA@#0;s;G(j z_yN+EmS}}`L2Q`^FfbU>xWAxcDcXk6JMasBMGp+daQuN$n1uD%1b+nL4jv#3;Yf%{ zcoy^U*~4cs&qALC288;DK8s<T?Uvm-z;o8eC%rd&Z(cgbdLzx3-#cYif7zz|mX(d8 z^@}U{Ykdo?eS2cJBKGQ<?v6RrW%TG%v-Lmf-A$a<J+Mv5WT_;rkyb3nP8`BTJVLr) zmO|9PFl>Vl&L9kS)Y=U>PzCkS9IYWyX%C5vMB{g?#c7;{);)ZdmUa3$_3B0@kT5;R zOXR&mMbI2AFdG+f8G*QoP{iRCULyh9uTl=q!QmP^h^UC>7>;T1LF&F5Waz8bFJ{*J zrS$?bW51NtIr3U&v_f0V#R5njrGD3O2jS4`C3U)n>qt)>oRA4wQ32J_4DB%n3lNL> z*I72P13RzNFP|__?FLyyAgbPEPXk-96}#Yt-Pi+f?8ia);S8qSVtO2e?HzB}4Q@ea zgM9Vdk$t{9eS<cg<^G88y5)=3&6Ar8cN5piM-e&>XsPD0=NoiK?B=Y>-rY)VHQzQR zpL$U4=$yGNa*9sdc^lX$CuekWrY$GYk3u3c(~!z&hXI%iT4;I<X=D^WARUd&iZW=2 zA(#bUyv27kC?iUuB|4%XoTqWO04r{OeJ^f6PM$HXfyD0uf{919P*w_PgSHrmS(uI8 z@P;3*<2K$wxlMDB71@vv1yBXmQ2jP<%H?a~cmK_M?^6?9U46KCA-!GlFBW%JFAZ}u zTYTO1bASK*RhFY-wsU_bQ#MK031s3WJt5VUDtYh{H8CD9?y?La2Ji6!>OG=`vp9$0 z_c=g`#aNB?*nnCOc;jK=t~0uzF9u*RM&d7wMi5@3S{Q9ZP1HgoG)5CNM@zKDkN6oo z5rI$0`;ZkfilI14p$vX4&s}9yL8ZrRsn8z-z=!E$?gZV5@jG_FD`w08cv~Bzp7c?2 zs&^9=#j$y%(^}_LW4)9<vV&;-!UU~j^Nc()p8u*v4wHg>g5g9|y~Fw*2k{zZ3HA_p zK~IDvK!U!J0FNPN5{IfZ?FNR0vod+aGMkaR*%7pxHV(wz$J+H*ODZ@`RM#Hk2z%|E zF7xEhRSn9?x1!xVpcJuWmylSXVhgrn2X-MIuaJOu$oho7iJZud{uqG47>W@Xi9fIt zemIAx$QH?d8pdEO#vvrKH%AW{xQbVJjj>TYi799nO(#Gbw8fwJ3uEy94Y#=Do;-+q z@aEd3YrdEEU%K{Y*PG32-miE+|NZ=F99Ju<Rz0eeQ%4`=%Cqf9l|1$j*u+^caepcw zr(fiwlt@Y;`~6ySC50u3r0Ek1&<ttXd0UgD)>7N4Xh4mmmZLEi(=ik4uoGT51V7xs zQ+)rFZi`xIj1TIhjjq3_{FEW*_a$L#A2SquNbyqxgZbvw1BaDr+IMoK&CLOCInry& zDxr`UoQxTe7u^MU!TpdIJqdZ?E07m|f?~E8uV$-216w6J@b?$=#XyY2XpF(+r))fC zFfbGI@HZA?4Ypt>cHuaDaTT`^iYIu6=ScgEbuJpB1=^w=x}iJzU;u_=6sBPomOuNA z)eQq%umiiX4@VJoD<~?6yIVni+@ky#kU_@spAj--ea1SS_UM3hl1<z*WKx?PSE{S~ z{W!1v+)u7eI-<0&nCeJwBqS1!zaXKQ4vE4d=n>e#u(V!UeiPE_r;rxgQ$cBQ0Z6Oc zKw2!Vm6l2?rG?VC_u9D|?OqMK#Fy2WgE-d8UE!oV>qG0E?b(-S*cWEUqp%uuQYkZ7 z3X%v(bWS1|kw`$==UkS8Y$%EfsEwxRg#P#wQ?L+gu?72Z6!(#UcW{2e`rw6wkM9wO zjCQK|vefe`M~vtCQrWPh4(Yiz<vaC`uTsz=Ns_8uf>h@bq)PFSYMCfbs^$c#o+qS= z1tHZe1F33tNOgaJRQVT3wR=OVJ_1tx36Lht1<kOSRx%)M*#K$JZb+MaAZ?1rTS&Vq z(ymHqik9ev&gg-@7=VO`glpEDzwPglgsrwA86T0boO}O-BMFldCLKv|I3mxHRn_Gv zpJ*)a$JLU({fL(u!m-3B$LV#9%c1T+&Lv~>{a7beJI)i=jw=}ln#vJlQw2z!q&`v? zsmD-QFb}(M8fOrUD~P~*d_W?Um&}jW=#2gtj~P(0^(99=FDn()Fa0U!QHL+R&33uu z_(Plv=p4#Q>h5_i^b5Pd?-53OE3WC?STnKKR6|d4Em<~+lGN}oNG)f=4^qSP2!Yfx z3{ulKkeYskJ+(;-XShIWo)OK_0<9pe_z}{Q-jLS(4r$Spm(8?h&E|nLZ6j!&X$Pzq zhy^`K2=YttOE~1ci`yaZLmTH=Hd;0gMQ83ioAP_~$?dR%O?jF8J=D1&N|qvAV4XC^ zdKvJ*My9lbFv7tux8XVU)Nv(K>7pKe`i#t^&2QpcTv|4<XC@QhL1b_G&0&IJUOoaR zui<}Asce^7ZSBXYTF0YG8TFE%QqEFPYJCuw5sC=B#9O>a+8Dxv9LR+dsEQsKh(9qI z^RONpu@}d17S|Al7kGt___7vKFCB5HFDoAFnx>B|<mJ^NXE{T_Vx7g3L*gm5I}WMg zbx1AmLTdU9QrlN}2dS}%SCCq}LTa7`IU%*r2WdfBNGs~22l_%<GZNCG@t7QAVa3US zG;J|9K$_<TY2qPBGfzXBdI{3pyO1V7g)}<`()71T#3$It@<s~^JdgtgPy#hk3-vAB zHAe^hf{y5lp6CnfO2VJjz_kQ#ZEfMLJ<{%Fly$s5GHHaYI&5=XOZawAs+_Vb{ZC!g zB~=%<XkF1X@Jq)wHIxn^5s_#}BqRzoAQ6zpOT(qn(%=#J12eH2o3R!9a2DqfjC+X0 zYnb9F7n$Q6*e_zBLL8s+IKfFmHYSDD+9%nz4T+Z3P^yRQ*V>*foHR-Kq;c6~8^pCC zhq)*qhtzH;MnY;h4pPg7keaT?7D#P(Luz~s{*YQ<hSdBvr1lRWEqD%T#Yad>oZzXo z#*~e}(x5VNbkvFrR6<q!fM#foHuwp@p$mGTC;DMHESQd2_#2C{9P6<e+p!Oaa2Tg> z9e3~yukq<;?(E~qA!43{_&xD^!k-wqlVR<#pN#P_j1Jkv1dNr5lje$fl6uu>$!u8t z8GFya^~Y~_>y*7Zb+0t8Zh4=j`W;sk_SWb*))-5CTR~zgaqSL?sl-!axd;+RiJ`>L z2NFApo5buBBvcBDpfakWHF{te#$qax)|KkV6N;kk0HyAgUwW!-A4#9Y`jE?hllO8% z$CY}xLh6zQQlIju0;y9?NWI!Y>edfZzds>$oCvAsOf1AQtincYg%|eY0FL7nE+H7# z<LS7e4BWv3Ji$}E!3TUq`d4hHVMY#=Ms?Id12jZav_fliz%S^8{uqFfh<S2Ly4x-5 zAL(#%D=c?@-cO__$^@I9_-(RIa7(82lTphT$$nLr>q?;l-|B`bS9ICC{+FBPf9t>h z-Ycy;0Rv4{B=iz?3Au!OA0*TgW(l!GS0XD>eGiGKL{lOuQLGP%U`t5!By#;AksFAy zaDUA@?KS&u7nGK&`GPXh@SeeC8=rg`a+MwO6IYeG776qp7-O4t9Dg@r6E<TD{BQ<m z;g8D*L@eSE4;Nn26&YZLf{c)=WP%6Epe)LvJgU8BKfF2v?a&?_Fa$&KJBDKfMuPSb zk7r@e!mbAR2OPW_uqj~elC?9ItX*<-lZ^S(HfDfz3|AgoFDso^%-)pF!A^0Q;MvEc zX*>BkJd<|uqm%WSpX@yPEVa+aUYR^wx=Bsz7v@=Ko%4O_Su<*1t(UAg$D~JGf$sEO z8LcdJe5m5tPJ1b{R?=5qiNi$lx+X5gN?r?7R_&Eij;H?Wkn4P?Brs9Qt<Ku5I9a}z z$c)0DSd1l5u@q~t7H4o4{s_ZEgd+lv@dS~GLNva6!+}zyhXXRe4Q7-<S(HQbH*MGf zXP_loqYc`k9onM<e#bDxM?a3f9v^)s`s9I=TMwK(5PwF-ERCNt;mjOH4cAAh-q8+O z)cd!Tbe7R2QYV3hI(e{~Hp(V@(3!qA-j?luid)M`IfZ;XqBYqQwC9sjDgA_G7nb+k z$wvN5wk=w=(|+@%{x8`!6_xZ#Y9yk&kTHR6798L5u>ypk!8=mhg1d_E*;_&J53F5K z;3N4*jzszcJU+3pLxz9Yfk2keYz*)QV@-~xr|4(rXu4wO=(FIi!j%ePca>~hVd-SC z>tr(Jlr#><2#mp4%)~6r#%656R&2)(?1WU@3%hX<mv9+@xQ-i$K`i3nOaoou3OAS& znzK$}Kw9sPOel>qD2sBaf|&4|{x^Mne7F1f`h@$3uUoZlPWU?ib&MIGG-gQnO^yL( zRbyY%!=9J=_nt9Wdp=nw&=MVA@>_F$JJDKi8==i9WtK}?E&Y${7R%SW`?uE{TBYA< z3)EK@1XE#&UsY5?1GK@9=z*T-h4Gkxi5BjrU@E3Ty5tPZ#Aa;4R&2u_c*7r8aSM;} z1d*_#3#WlS(jh$@AYI%E&M1r`coly0{LS-zhnx8AJnVOPP57E63ztk>vm|`Uh$SQZ z4*T^<8Yzpe7Vhq4Qm;ffFrTy%QOA2bWU@Rd{lBO4+tJouxvy4cvd;63JpW+ZLgg@2 z%(_96wVQtC!1VQ`r`+&lwIsDIsR&k(rXmu+qWB(VP!>(l6wS~Jz0n8#F#rQ0>zTnA zg4vjZxtIqPOR)=H*bU1C?gDTTfe1n{WMy>)R}q6)#33FZ@DX`gkL5#t)WCnYNNWqZ z*2%9~%6%)BT3&wCo==t+ZPwdmzcuH7TBti}b6U$RtM6-kBiXiGr_7t@*B0tb9N7Qn z&VW|wFs*~9>^ZU#D=rbNiCU<OdZ-WCWHiJN=#C!fY2mIH24D~dV?8!tBTnEXPQedn za2EbJhx3TQV?045ULXds$jGM29hp!PrBE8Lq9dYNZy&cDKECbd>V^KRBcdaw*v1_` zK0+VWC;H1m-JoLXg<6Zo`3m1kp_crn+VjbhZ`-FB_+>xvzu2h=EdQ++`gUJQm2#C$ zpks>VmBfA7&-hvw(i+lQdwpX=ibyoep*$);b_gn=GTNa%I^aiiMi)$d&%3%=49vzH zY{6D+!%pmi7i7<354>?1fe1n{ZXpz(;lQ4UBb;Op1O-tDMe#j~LH1Bepd^}DxNC|J zv5&4ix^VWwfkzjvT-fv>_QTRxebjV))aay9(i!xBT12XF0PO3#`^PGMD_1gSKKp*P zv<ZyCG;vfRX+^5mj8wAKKCSgS!+8Bo!~cKEzn17P-M~~*0@Mu6(H<Qz29q%bQ?VB7 zupXPR8CxLxg4?hi{y6u6l%Hqd0zz;F?_gqQ(GF>3rx7`k3we<b`5`-%1yKlfQ4jUe z0L{??G2x--Ll5oSwr}OOecQs%hlef=ovx1>Eu$>fas3&mEw$UL{#%0V`<2k1Po5v^ zzWbgk-<ng;iPkyFY17$CXr;Xw{P&<6JAgIO*5mfyCH-zds-@ZTzr2&v8h%jgvtQ{_ zrtc+^!!ZV9F%C<y49l?!tFZ>Mo4?M&-FlqBNt}W&E+7E0c!&4+fK2k90G`N-Y{(9I zzmOBTP!-is9W~GZ4KV=2F#;noAI08AhTjUmcq{zYiCrh&ZhO1z#M@ogQL~dqjnPN3 z51!My58h{W^>1ZR%UoXV`LE=DW3_M1spmdbioUVJ)n2KvR$j7K`v2=9sX9b4iIZgk zcMGu?OQ1sDpe@649E1-J;V^u08c~QtJYK<7-ps)b8R3phkT-gs$c%C*j|!-Wnx8oC zQj39}7>pqpidmSAIhc<HSO|UdEL-Q}{>PWGb)KEHbsnRS8Z4t&A8V0xt7XkhvPfzj zeql{}`9W{Huk?6rRu3jfwH7x_t*wfe*7#4UPZfIkj)3GxXui=IzN~h?mVB+2*|pa< zHn5lkOWt1pjm7ZBUhKnu9K&%u!c#oM^G~db)A3$BJsjW+7q~*+r@O(7;wXWVD1}O> zj85o{KIn@{n2afyjv1H<dA~m!bFdBD!D{+?XrZ&=p)sKc_H5p>Z1bMY;ns08^igAy zMp>6v>rol|I$ueUbzMBQ_P3Iv1<g@=-WW7F&LUg!WaGXh;47<OwLzrf{>yBwgBkk8 zf8G>-dq+BD&+xDmllbhwPVC14yv7?Oz|1id1sUN1Ph^H1Q^|^KsEA6aj4G&uy6A@P z=z(#tU_2&aGNyd)rX84>#)IkDh)vjxE!d4c2*DLx#S4(U^P#*CmN&<;+1(nt)HY^T z(wNb<F(lMeI|wqo-oK~qZQXAr{4ed9f60QD_)lNyGD(TgYkNN=Z&<!$K4nTg{|_72 z@!HFNrFy2~60VmLGQ{H*UPF$BCEzXGIUbe?9`LkqmkYV^Gk(FZ7=e-a1Ak#O#y}3J zjf2d$0xPi!tFakdZ~*=|hw})>BSat)QHX{dn6o_NF2%Z-Rq@KCRq<?D75_i>?m9k- zBYyn<d+#oH!HFFgG)Qqv2oj(rI25-6#ofKQ9PVz56N*!c6bV{Lad(H}6etv@6#c&D zE`hsE+Rx|ldwhR?{eJLxUiRkJZgzHdW_EUNAVFQ-LGGx(TQ>f|i`U8!*TUfX`6hQh z-PXO_m$++ZXd(ZzO#BtQ7wzo+<jbO;myEkC|G%3zKXa#N&nzXkio8dlZY7D37)cO- zKx9Q23Zop#qk`s4B+Z#<ftF~4wrB^{PTBz-F&bkq7UM7t)A1wLU@g|+Fpl6TPT(X? zf%aB8gR^*wXZZWY-?z_a{d?cvoB!Ute);-2%hxYIzwbPuW6!HVf(CvL;#AJyZZW@9 z{@)HtL-!{M929ptxn3^*lAlk}1kca}Qc<ceh2#JA)z+P6n!7ij!0!EPn#rZ2={a8D z9o{3z#Hor@2t^nQpb!efS%jAe6h$%AMLpEV_h^n5=z(DvjuBXhC@jJfEX6V`#|o^( zKJ3Q<9K=bS!ZpNZ%}!(9JcjIgz~{`lqsp8m_O`{h^bPv2lG3q?@ef%72gT!<WH7b& z9b#@@-M!#{M7BFkoT(6h1OJ^S{%_>k-?_J%z}`ttb*8AJr(!+8Os0!lsBK9kJ5bt( zBY})o4nOJ^;$<>6;0T@|k&O>g35_rYQTP=Xk<2%d&h3w3db&U8V9za6dQ-mfTdDv2 zk6$gP>sYe&r+9`WY&|KGAtn6a54CrJ2tp{rPypd5j;~P>wNM*%&;?!54L_hKdO>~5 zKIm&s<dhjq%!H0vh{7WLie1=^%eaE8xQ=I!Zaq48>(Q-)(FfP8S~KV1n&>quXu{{9 zfhvfQuD2e!5B>Ja@ejQ^Q=R7a-?%?Y;P|)~jj5FIqUQEx+@B<{<iDQeUfGE1+cE4C zzh;zhtC@TA2i#|kXYT($6f*zwoXM@??*?u{CAHhQ1E-MQG?-vU5+p@_gdz-;Q3X{| z12s_#D!tahcj%5D_yIjJ5Q8ulvoITTuo0WE8CxxhD#|t{wnHWSo%j`(aRsj*Tzqii z$cgO_=+M0R_2!kYH^+v|Rv}{v8u&Sg%SUSW<zsEt_=oO4V<$GJ3Ue=)z=3rilTB6P zulGw)&wT|bQpNoBzhrm+yVT*j>HaTCBY|8iw~D5#xQ4s92Qzs`05Tv%<s&GD;`kbo zD2Y-~c}*FVMKd%<3$*m1*wB%QPUwpf7>Q9>gdedO%di|Ppfash_z4Ga5QlIWr{TJM zY`wH`)yDa&Hm*`-``MSMr5(Jqm7oEigSdWh^>DgsV<9zMk^Zj-WpVZR2gQ9TvbsM> zV9B^6;XbS@tHob~ifMjv;NL2A|DBrtZ(KfdyLT#qo#*mFOrF7QJi`Zk#3uxEWk`)Q zNRJE%Y0ZnemSjR^<cGShcwRCJBqCQwE!0M_#H0a?M1>@z2|T%X;oj+kr?($GeQ?c_ z#q(xN95tZZs7~#gkE&aJRAu@r&Hm(<Cmqk4xW?>h>szIZYox=tzv|f&ecva)qWZD- zekGm%UXOJjmig`j|9>k7H1<zP@r`)p%Idrea;D>|DOphpP0$@v@C(l25wzH-QqeRC zE3pIT@DGBBvfNNnSQjc9M`1qp;CBeonF`@}shSR4|27@<57hL?N=bOeQu7aKqCPE$ zPFRG1q=_Uis-QE*V;zp;1nMNC=$<l>yh49JGFbmaQZOKq48bu31X8|4^&l?EL5cKd z-zFL6G5%)MY`UfX_sdB&Smz+KKf~ad{Z*%mq`GeQZ|79WV<w_v_p&m3qxP~B)Sixm z+S|48+~bqHS9|>(awaF<&=^fI7(+1}qcI+nF%{}tj*tDOuTxT>2;l1mAvH3f5WYq& ze1`^Tif-r&6+Hv+7VjZMl?5uww#7zUA)>4X>Z2*zfCsc5-nw#u|0n-Bv}^mW?HjhQ z*uKHJc>6r2)cdI(|K0CmLpj3!_O^p7wf}r8+*MKKd^yziBR#IvCz8nhcc||W_jAjs zYq~NgcPMQOpMMxt&CPqVGBuTqlA5ap%Jo*S@X0T?jTNg=EcH&G{E9f;r=&UsBh<H0 z31TSbV<}c+15_e8juY@Fp{N8Ch+t$uEi^<kv_XFi!AOjON?afC5kewU39Sa4HQgyr zdh>TK=D}p=QiW0|jXG$KUDypR74yK1l<<Q;!cYJm&;z|O2n(?sKj9Z_!*(1<Mfy0% z#5ayaQUdRvzrWA_=kIUDPN{e5J+7X4&cyTgd(UieP5l(5-nnN`v+!T_VE8*EEcTFn z9=w&oT-BlY{GQ7|o=Ekp&V=e+UnI5bqka5SIMqD)zb(&?si#y2kVXXeu~FeFOpS3D zH_w;poe3u%&!g^I>z5=^f)m^o)he1*6su^}Qq^(Cql!ZnKg5kIS_Tm<vxCWHv;b<L z0rHJ0fQn*(R5l05Is9x15MQ4FNn#C<q)3hw@PofKz&${@>$lBakNfc`FXLw4q|V`b zKJ(;Rp006y%76zvYoUJmJnC%XaQ)Y%zDe}z{tio8OF162`KVpx>E3X!spGjS>+8+_ zK~71nj-A?3XY9_-VTb2JXyfXNei(q!7>ik$gJoEO&DetdIEZt&fLpkO$9RJG_=sdg zL<*!udM7WrkOxIk0u}Ks=3pVBpknYxEXF&i*!%z$qa_fDDVU1+P_euSDyFN%#`gKx z7+(_`>xqbYXH#C<;xLZmG|odE5?8`}djIl&{XcpC^2z(p-ye3(8}ojhJ2AUnPrg_G ziAU0G-<&?NDO;t+FKueNGm(GFeD0J<YW$o^|0QLn{*vyC#GV;yeXd_OH<L>LBjuK@ z*g2$2_m-`?>nZzcsiJGn_nl(WwG-BW=zzrj$t{5e@&|=v4`^7mPL=8<%a^Sc5?G)> z{^)|q{hgXmXlS1N5&G5?{<*X=(RWk$ci<<ri5`_=lR>4}ln6u+Qo(_=NRJE%K_yg1 zRa8TD)Id!Pf)gV!5~DC0Yq1V7_zioo*Ba1J_A$ZE%SoKUS)9iO+{7*1#Xb1g0>la% z@**F~pe)LvJbI%KrrHAZUH<-AoY&6tfBLoa<M^}5^=6YQO^~ywqL({2DgABIFNLub zai6Hqi}?=u{9YYh-aF#@>U>$AP!5_Jg~}bKUL~Wsy{(qnDRF^napsD9(nbw$VAu&d z0)1YEnwy3N*JaDF2Cp3|?mHy*D);4Q!Dj>yjJ^8J2re^F3Xug#0MvoCLmk*)q(&O3 z1Dp<V2e}H<aR*l&*f)BK#>uL<n@WlmA$K}9m~xJ5s!9i@x-R8eo%MnK{O|`k7LR~h zYz;&@wA5?r!9o6K!!+XCN;b4aja07kb4j6AtI|enI*|KJKY+%e<1p(yV46lf8=YG3 z`=f8N<P+2(i~Bc04=tYfC%tkS|D?7?YCGlX>Jh2@_Z6_F6nhq}Vr#WMvBjkpl`^Jd z2G(FRwqqB5(Nk_s8m!ILD_au>XRi>q1@-qo-sr{C_-8bgs;4(e;~%AWu={5<ZL6!^ zq|#HS^S9`0?EZb6;!6^gX^7kSA*K)G2wvh9e0{kAfy79HP=uifB2W~?&=^h74(-ta z9Wf2lF#|K9V-|Kt@)CpJum{I*94GMd@twz4UOs+#774vRK6-HPP8G>J^#Q^DeomF1 z)NtOeH2FEZ3Y4-H-hcX%VqJ;ekfJ%Q3?cu^G%jDM!{d&zRPN|eQK7!J`ikmX{i8bz zrQkQ^>Lq9V$;pXQYc2K2ddXYsXVdy;HeGZb9M|#qtF$$ZXS#@sk-e;AANJz_4&o3F z;|Pu-F4p?%)mkUdsy9gQzsR(#e)Pxm{wB>98=ZR0%EW1-tItgN1C^8FiOcF&Gx{$# ztLHm+XY&6_|0$Edf84ubaT8xfXU^<jq;|3b5-vrgfP_hYDWW%<;NLZYpd=o1={Fbo zcaIlfSZK<Kc<WI?UW=vtG01y8D!{Own1S)uqk_EFb83HJd;Mf@f8YN_=#V9bZN>|T zTyFSwD!{N;p)=y`l?w9O{`!@M^{4=^^+d#vZFi9OdX^>h?bgSI8rB#u-Xrt`f==l{ z-bXn?S3zFet+Cn=Qz{_Q=X9WVyXN1~73&Fw8TLw>Z-}o5T?Kh<Z^(K>e5nA#dg8@< zgdQ*6*R40~w+iss$4D(G-hO`$^VnXf<kuH1^opmrAdmeH)iZAN+Fk+yH#U2Hvrt_H z7`9|c=W0uabRMeL*lJi$ynxAn`NumGLiL102X8g(w+b-ql_9>>UK!#$RG(5JAc1Xu z4)t1Ns4>NdiaW?FM%Vpn_?{}jupUFAR_ih3FC2&%!+KPJVLkEUJ=7KNhPnKr4e20M zPaw#U%GEv@QhBIey<kGI^*PkA-FWdI8bAIA?>Br)72vg=u=ug=4)TiiX9o@IQ2~ba z#EbPXW9||vVXmyiu%ID#37xS%foS*~XjnL2RENcn{V-Ql8y1Wo`^OF6u{r^Uh2q6| zSo}DTIcZpr3h-J_f%tLm4)TigkgpSn2K{rWVU6)(zd-yn|14iZYy2E)SYy1@Um$+2 z6LQ}0UE>A#wM%H535QO(XjogkfQ*e3T3f=QP5T(urUJaaV|e`I;12RS4yXDV))Oya z(Y*Lq;ZXf^s9~Fi>uacl8?UdS`mTY7ZK?pndg7)0a97Ir+V_~igyJjV(ENi9+f)ID zZN^Lg;qlY|qM?TMr~t3^6pSD52?oWx!WML0biKaeq!EU#sQ|;);>CEu_}Ngw_*uI< z$a8BmM|*Efy*F$tUOrziem>uAtoLg4cmXkm6FhElp@waCTW+`l71ULb=br0LCK$G< z0=(8!D1M2?9pts1!FdwevxGxWPBLs$1sJv&FPAA4KbI*v)vz8FU|3JQcrO$`(=Vi# zTx*CacaYaN%s0cZH5FjkTD%x9<ce{RlH~R2K|dJYdTk|2H*7@(cq~v|_gY@P^;+I< zj$wHf;I)^9<ELnMkjGYHW_xW#z4hA4r+J30r~t!O;>BrUS2TNUW$iq#t*EzNTj{#c zuoV^Hv3$rvujSQSujLJO&QMheZLhCe95`%w)EsWfHNEaXP;a`-Zi#+z)jwx;?XG^a zen7`GKhTQOR({}rS1Bs__}^N(NOx%?t@QOJ96?DsNi*rp$L*wtUZR8}qkhpRAnpIt zrN4^aU=3&yY#X~$wcbQTrwa*qlu_%TKkMb+FbO~WCKX-Vs;8eS7|<trP^o~7>2%ZX zz_h-{l4kCunVJRaH!lQMN_;G7!Sg<v$;^Adn80B3fSl!YZFgY0|8LB;C|gj+<%ydH z_$CXdO`?!cqNIhQfWEe9Kvz9wn*fWx?SMVGzOYR|huAs7Bti;HK|OLwU{^yBX}P_g zvUPxObkeo~NmJQ^QmBTxi0BN?fG3M=dDgq%1!WAJeMjFpHK<+Cmu(iLRYa{>WR5<> z8Wfnq)K<&fOSEW<I#$Pn^(VG~azPv^(ag~n_YpfD-0ZdaO(H$!pA^A9>LGytf6@Ob zn#@E~bPZe3`he)c)}STY=8&KjR$e|@qE}=Mx>-gKYaDbyzkD-g7CmX<pp^R4&Or<G zkRCxH(J49w)z<Xt#oU365>_lIX>`8MLCdoyi%T~JNf$+2#g_zvl6cIeyIO0E0bUEm zw$^yeBeAVD9zpu&b{X%re{QYun3u&}CHns{$W^xSp37CA@(9vhtu_A{(CkKB+koe6 zpF<7b)pf1)n30`z)uudxbXSXwF~G1MS838?9@e9Rykf`IV&gH7ZU`u%M}CaI?;fEZ z+bj~-YV&1%aX}v2EaGmp@t7xmfUDKUa}HOljYmLi6OCcxu2vh5x!kQb{~7S5ea3UP zghO4eHlDM&T5UW6Vw-3Tdu538A|9<a9?O0S^;$f()y8ASxK<mFAl=n!V+=5?$B^EO z#I@RZF6L^rF$Ngc<0?^l%)@#T2y)e)yyr?F$dJ<2KB*ud*Mj=f(p+^^+p_V!VUG;y zT&*QuoV!|TJoZO-wbXb7(01Z#e~%yJm3Cb%H6HWmu9g~)0M-*PrV|V@<Sbn9-1StC zb$xD>@!W;afnKo?+brX;FzbsK<FPF@-g6o9mLj@pnDN}AE5NX|cyaD(scEZ+Gzjob z5yr(kR0{H66(5R3_t_p)P_tF4Wp-WvH|_|kY}2`6a%c12pfrJ6spzy9gW6YheizDE znc*Vk3W;QCF0!?!h`E=@`!(E5{Y7NQX_102L<Z&3Bx7z(nl@qdgAtl6o1;nI;})q} z$45d>`N(EJtIQ6t$}PK9=H|3YzuZ=tQ`0K9cUu{^!Yck3tvt?Qla9G<@^qk0(hadm z%b_-&(VA!z2S0e5EStTObB9SJD?7Xz5BZJd)|4TC!AF$gZe|{v2n)(`97O>ht?mIe zDqtABE=r*V{=^$}Ni4D!hm(kON+xm;iIa<Tgd>H>BJ`z$%UN9TlbUkbkJ#d0j!Qh< zeT^aN5X`XO?4hJ(aQ6T{`^3MrQrKg<r^obKkLky$1N0o(?TejT*@wC8!xZk#O<*79 zu>GId_6D~5Bb#jDFH)9u7vfG`Sdd61yGUdzku(l^od%1fP0hW)G#nK?V?T<d=X+=1 zsDy}2$|%x4lSui@BI&a*|5qZ}_@Tx`*+i0OXP<M>rCQ6$&DmTW(%d2s;GdU`<s-uK zi+n>8c#q5^fqX?o_EH2aR-B#tnlUm;h%}1iJC|f<N{htM1+{TGBCmqTPE4!FeBUzG zXl)KmT_U?a2dW8Qu&K!679z9TkbK%XMSkc&8tWl4l=L;QuSotueAA&KOUH<G8_&uo zi9}Cf!D%ATXK=H6p2*u}BFlc}+iVu;6D{)hR+07FMe4?goc@i$jQ29VUu66tkweEt zI-e3bLwf!Gyzm<XB41r5wy?>0MWp-hB#G-Jt=l3w?}@Z}C^F)yFj@{B0QjwmO7BE| z6HUTRnjAN4(!i=omPDG&Osq-8q?#;BrpbN^(>qgYa?M|pTY;K1wrf%%wI=h@Ymy?f zChv1<(v_2>bskNADyYeXlA4?-rHONA8CF_WlgRR#tggVBQ;CJEYLcdwCWGo~Qm{E2 zYDs5?PMSpZ)TCE$O%@K;r0*C_29D>9o2bbv6rG~U$f=s>^EKJFko7ELql-03`->)R zVl=6`SCh;8H3>MbN!v3TKa-%z)ytYws$SI?reBl(Pc+%_Op}K%Gzt2LZ}Wkbm`u{h zYLYXFOma7wN&ZM_l5GJdxfX1a{OL_{FQ-X9g`1@O*Cv@=(j-?(o21#dCK+4LB+Htb zBzb$2%<5s1T)j=wxSvTD4m8O@r%9#{G0Es*CdoR6H<pPe37=t-GILE*ZlOtDE;5O8 zsYwc~VxvE^&>EBEUeAKRn54@FvVqMe=@)Gh>o$|*+-{OnsJ_!AZFiewV~k1a{AQBz zdrfj+ze&D3V3OiTO=3P_l932G$rn1qj-4~{dljt1dEO+YvGa;a>RvU;S!B6klB$20 zB=CVrT0b!{N}x%8d1+!`6_bqlz|Lr9`PRoQ5sA!lJh54RNMV+~{$>fuKv+hzw9aCd zmO0E)j!|MpF@D7;9@%_W+bl6n&9bt+S(5iLi~k_AoE~fzXUCytNjb_aT}PXx%{a6C zGTAKIrkmx8ZkCD*&64y-vlLsxjLXboUSXERWPlsio8{3)vy9(vmRq~b^3!i-skhfG z|Lil%nM3Trai&k0<&U#wS^K+L(%&-k^8jY4`G}o(Y8IcDW=0P(OZRv5hw1atOt*N8 zWcIbln8X(8m&_vB{47#7$RdS<EmA3sMH*(X$jeL?3CwDdr8z9}S00OG47JGaA{Mz( z+#<~)EuxpR$n{F(%(X2tswK<!w8)<`EV5~hMQUziU3)FE;G{+BU$DsBTNYXT!Xk~5 zIenx-N*`Gm;3F@1l&yA%kA!6PkqV*o>-yS9PM7kL-^=?*x2itUv8Im{t<9rV^?l@0 z6CVk0<0H<lJ~FefkK~`o^mLY=<0F$7`^cFUKH{_9M+$86k*hI2^2<RV8FS1>Zk+Xz zURQnijRPO)z@?*^)5j`96I&&7uvNmdS!HHntE7#vO2ZOX@vCf=)YYvr@H?wKYHpRn z9jtP$uT>H|tulTX(_^@(O|!~}g;wdf(kkWGSta=ns~q^vDwhsg<?%_@b%wuZt+L>} zRXTH_t9RKdm2Oz2=UuBjyw3&j#v>~O`*LM`WtD9ISY`1$s|>f<WK?pSbWY3FFuzR} z7PLv);x?&T$|e)b*d%Ksn`~}l6MJ8qWaFYYew0nhjkign88&G(%O<B5*rXU2!jY?N zGH#7cx^J*a#?8#L#U@X-*`&x$n@rnd<43P-bX2@(lh&76$vvA4erS{Yf8m8q&i!MP z${%bzX~hT?K8$$C6}d431m8@=KqiTKj6Mki9VBBkisU>Poq{oGQZitIgQt7b@<e?` zhRDE{OblC<nIVg^Fm7*luA8|S;~)?7=VOEn1~NR+!pW1>Z5Y_510xo8XAqm-jC?YH z$Mc6WdcsIXI2^|i7n2!2WjZTgz$5!B7>Z>hBQoq{+@#;w(0(q&huuHOq<&pR{h)^W zQ3f^Iy&C>pjgGAb9#&(xx<=k)Tt79Wo*H>gjm`CSbp}aNL-?q%Uew?pYODw~sDOGF zT|KX?9%5AwJ*sEW)MH8N2^RH8gX%)A`X;Mho~qNH>RhDy@=VYpdO33G6-wK4>$7?} zvg>=*%hO(t5IwLrFD*mufqLcMj-+|+aH`zJAGnVPc!a0m)R32W1uF#{o9-88Pm_$3 zL;?{6yI#MKBU{N#OlHPc;JlG+$bnqQjXcPQ{NS9D0tiPz6hdMBS|3NM;1Wzmq9i!o zqyj49TRl%-M}~})<m5Zl#rJ527H9=k5NoS1Vm4=YCVSuq^a3ZQ^h19P#2^gD7)-%* z=$HjgT$zXYScpa7M3$vk4o+xUjWtl^zRlQ*?bwN3WB{^{i9<Mw6F7}CIEVANh)W;` zkl%3=w{RDKfLuZT#AE!0r+9|vc!^i|8*lIr-r@tuNqC?|f7{=Yyet`t*x-vqNP?tD zhU7>Ae^4T(2OtL$4v+!S`;Q?XkzVgs&Ys4ZkI6zPhT<rRa;S((s0s?wLjEN6&=^h7 z3@y+KZO{(nUD6p{(G5ND1A3wt`hdJm`e6Xb<8sPiCWc@rhGPUqVid+;EXHBH9y-X8 zL9ac?;c(99{Q{6FN)&#?5-i0s{Die2vy_e4i5Tp~ew+pwCOu9$R=5f>OnRP*+`(P^ zfd}{#<e%~v$V25B8LGTs;w8vX<!_{?HV}fG$c4NhQ{{P7P6vde5Q-oIML}jO-yjkt zL8eQ$R$?DDQ3v%<9}Pf;EKShV)<&cy6RkiFEp5>OozM+GU^;Xx#u6+8xwZU^UqDVx zk4Va#IE~vNQ<k?NBc@{_DN4Ut$sXXeGfAE+sgVZh5CZaDo(v)@KrZA)UXbrfeyG|} zI0~XTzCn4^!1ri}4(N<7=!RbC53+0-fw9!kWD*n8pkpppVjXti5YFH_$d`E>i8Bl2 z#X|n8M!piB{Z$XM2;Kc9Jwosmaw9MDBNPQt5QPzeq9~rIn#k8olt4+SI$jx+M@3Xd zRn$Oje202yfJSJ7W>EFQR%ory9^)vipB>{!=^ViOf#AVH8G$hnc6c*?vrr$4pq{le zJEwJ+$nFxPjyl9xCk_~H;Q>Cv-kGC<iWrSa*no4mhV{LvcMc~%98JO)OT^&)IAS(v z0*7%T`Nec9dB}qjsE#%mig{Rry*Q6Q;ZGH*8MfgGoD2BkKN1PciLq6jn>$GA2Z_zA z#6C41RnvL(l8t|)f=JCKX>v_Ur*dktJ&PvVSDF+-Bc!DYlc%sI<-Vb&QdyJx-)pkC zu_hrcG^vJ>IE<IbLXBlsJ53ID*W_J)O}Y%%<lbCOo-Eg7-v-vPTa)BRH8D{OS%qJ5 z05|aUWlhREd0BxyxQEVHG#QS~c!dCJEfui)hP(C>`9PCy)L^XCUatL3)kiZ)b{`X+ zc1=9OMI|D+NlN&e<aH1=6NgFCr8CL<3?><r$t2UVQ?sEaGdHhE)=-<d9YF=;W-)39 zk<=1OnM5ydk`z@~Q8kmitznWjbxc%gO|tcS7HmlMrU{jVmL|#Ah6OvD<Y-ru^rzaB zoobJL0JW3BCfPikof&14YU6o7)g;TOn`Fsclhj*alA%#1=|+ub&`Q=#ji=E%lT*@c zGRf*KCdu=wNlNZ!g;Zyv4pA+lI`i%n^(|^GpDvmt-|r?Vb<-pPk4<v!sY(9&$0UzF z@fkIgW7JNjB%!vF)GX7J@jkg(N>f|uffuNl(ky$>z|SnZplUIu04fGSPO~gYWtNWV z&C)irS)#BVs%mo{Uw>tm+sK}c-&DzMmTP&<(uC?xPpUgL7&tC%IkQ}>Y?g(!sa(`G z%jm{bftr}5LvynPb~KavsqJ((OQBw7u}~dKLsh8n5VMpYX_iCOh88%-m?g_Zv$UFG zmLpTyk(p+Bx5zAwsRGU3WR{#eSUFXnG6&5v`3f6;VkV=amO)KrKeZDxwUZPjEYbw4 zk%}71;*u7LEM*a`j77#(wn+YJ7HL}3B3bHM<Y9e_tZHbHJWZ&rG_%k!)xsiQwYEsU zb{2Ws!6F|!yQ?(goE9lE!6MmpR<zC{zQ0%`5i%eIp$J16ltoiCL#rJY$$Nm$PFSSW zDT{QwY?0>IEi#yLU|Gt35r47qH|#jIp~<Oy=&zpIN6Kb&SB3m2pN;y~M;=lTJ5b+8 zl7H_bt<e?}F&R7XD<0wz(l?+gg$no<12701u^F%N26-D&eL`b2#biuv==71@O#Ftw z@Dw49d?XXfp#lbA5LVzfJfSo=xjie#pYZMABiYad%W(z!I<pK#!1rU_^)>$mKBBK= zzKuRI>!6QpKkg%2D6MsHQUq&4vC5C4Q!*M53*bA9#0LBUJH@DisDnxrr~aS_b?Gas z{FsZnSYE3Hd~KDzl$TafPO9FJx*27o6wN8u^rl`%v8DobxZf$t{6#S)$waGkpK6s} zx>fGZp%~GPvP*NyF25o1VyjfeB%DDY<(W2Eg#&nv9F%Y7;We^R&Y6r2xCHZZtK`94 zoPuoyl}%JdXAH+4Bw6XMNG@7wb;_!rt+J9rQqT3&Ad&hPX2RPIR_RZ{Y04(6{IHpC z8O_Skl|odOQ`A;rK5dn8c#L{yto%qRf6)&C=d5xZk>{<lA2lyn<tzfIozB23bi73I z?*^r>XDC9I^%uNF&MWLCC9>~u0zTLHR=9#rzf;Y{eXP6A^2kZaZ86Ru{H9e#-~w_{ znj4H0$Z*>#-LMyrQ0R_T);f7fde<uD&<nc}anCAE5rv0n`G-~RpvHX;1^g%yw!<0Z zc}N`{=TMkp;!yZfRGf%QsQuU~+hC>WI0!3n7P+2~p5Tn;MU^T0VKsh7`e$qaN8WN+ z{B5#`qGkS!HVLL!8BJ004MoU;rEOxaY?GfT9u{oouBW$eZ<8vN{;v14$$BSsbL#6m zsIOO~o?egAUy}7UnU5e!f4`!{2I}SYskFb|WRo%!2PfeY{G)C1EoS2ngl@4(KO9HK ztv2b3Uy*E^O&VY+{z4?h$tk#xuXoUhfZyRuLqLAah4!mWy5R;Y?P4!C?XpSE-8NZ( zkQkdxg_$zxP;A8+EZb+3>c`mlc{Xy-CQ*Obr15>51U#_GZx};^!Z&}?dhv+$Jht)s zS2mgV)Fy48(X#Q<CeyLwl}#SJX8mti?k%x{mQG%tyeHt3O)ldYWv?w7XpN|DVHh@) zqA<J;#jL!ibs{UR6LruOv#<o4u?I(S35^obAb_8+6^C#hx9|joXxS(Y=TcsxaR_IT zky3XqltWFlMNh26W<12-$di--JW&p{;KX>W!%p16GvuY|q!>nH22S8A{Ao_fkeu-% z%Q8_5Log9PV;7#|6N;oD2G9n>u?E}l82_McN`^y(YL`jp$MDh^fJ3+wMDquAg%YTT zuBc9XjT4iwC?kdZ!BisVU@dmzBA&xcgHAexqXHVED~3Te_AJCE9Kj8Igg*^Hxlk5O z&<i)SF*0U$#%n~roHQ_DJ;HO*6yxNjHI}1I9$K6bo|pHC!J<%p=CLqiHd1q`RGM)d zD>8&`HC9HeQezsF7IkK5+@3V_^d&k6vEfmC^C^6h1q`XXlEb!@pJm?3Mt8H0J&ZTF zk4C5i{B*_%TB}YG6Y7_a)z1s7pN&<&L8^X-QvIx>`YAy5i*V{kxzw*6sh^iozZjv0 zNmAo6s8JBq!_4X-KlN0ddhAU-JEb0TihJN|BF#FJFbB)99uyB`AC7|-QoTWMN2t#| z-aOQIhT7BUXL~y$3;NQ|kO)bT6#k&qlrdANlps5DA}_*F1mEadUq`AMm6)uI+NcLg z5yI79xUdTsZ)uDsXo}`&i8g45Zs>{L=z{@p>L2<#GV59TInwHu0``=3W)nCUT+t;8 zKVk`%fh#;itx)&J&sd9fSdR_h>MxrRjV;)Q9r#u6R)AXWUMBbB04OBzP_f7n90LUg zIf+v^iwn4nE4YU1xPjZagL`;@hj@f1c!Ae=hxag(^;=*?V#*mjhRf(G2tq2PMq1r3 zoa3@$fFq^8V}Qevt}uZ`5P_ng^daA%1R`~9pd-MqJd+jhEh?jmKA&}Hb@fIA9jTm6 z32Ba&XpOdLkB;bsF6fTl=#POIgkczs37CO-ScJu(v>_`%$wF3PHGak#tj8~)Kp~r~ zqMsS$NEh@gZ+2lfe#0K@(}SFjd}S#}2n7e82c{(rlm~?JfN<>>uKB|Co@a!KYH)ex zAyT3lTxJ;rjCwy_>zAC4xmpH&;9y6#Jh^Gn$b)<cLqQZqF?@{@C<U&mQeN*?(Vj}r zKg1DOu@>)Z<2%&F_h^X5;F>GV(E_c}4qShwBRZoCx}rOJ=*NaQociQ%X_Rd{)DaT2 zl)x2OiB<RstM&Cm9Ra~yj%6dbBny{b;gTy{YGs@LV5lRF?mNs;T(2<95vh+KMvL#3 zVUFDTl1i-i{V+$M9yr_)ScTl3F?wkELm<e6B^82^7U_`zWWd~w;f%&tAfFWSNFi?& zvOyk7CARca!`bTa%JwXJ+7XT{dYKWlE<deoPpc0f;YgdTJ@a%#Cv??gMmPfW>Q(H% zUy&V3KMcS?kTuF+48c$g!*JbiB=b+NVo#ZIGViBgDyCxwW?~j*V~*Z#BuyquMmik& z?vZ@wrz0Kt^(>><qspTkx&3Z1&rRIIZQRkPjAFmT3)@pBdck{gPI;x*DQwT6zZu0h zNITk*JrV8d;u@1fuQS?_!7l@EGa?f*Ba1#|v?Gl(50m+z?(T=95Q?A}zCk2Pqb$my z0=`8hR6#XVM@`fMgH1?X)W`Q|h{kA&=4gpF=!t%6FtYwk48ll^!f1@eIE)90L%5+% zcUw{$XxR}Obz~3sFuC_A7w|Wzm<zWHB^Rhm3w3F!iU#P7zUYSmn1{7E!ks%g#>8=) z1h@4h1(%Clp#Cd)kssC33sW&2+>sNit`dzKc#lsI@;wtWp*&Rcerv>C1I93|+TvrN z^5cEf5M3GaAN=*_%+8BYgdrTY(GN2*8*`v?rX5hZgNf+zffc^Uj^e0?28cVK2QfVv ztFadAKp9z_r+J~|=W6Rzr-^FsRHsP=bjL(^Cf$v^KMgM4>USbt&5$bjsg#xrs@2dl zeRSfzI;@Ma49l?+hj3XP|JO|XgSU8(w28^F&;X6m1kEr6OA&*;*oOo7117qDq(??% zLKc)k6ZFR*I57l^uoIVXH3`T68WY#?3BgIpK2Zb_D24{;fk~K(X_$dcIFILeh1Ylk zM=}~(Q4KXw3w6*Fa}kYg*p8h}UamoPn#qbB$cfyjj3JnhC@jKa?7{DNix2n+p|eW} zBGC{{&=k!v6u;m&PT@4p;w7A!Qxe@Mh0-XCR#3fmW?&X(V=lJicf7?1e1!P1VML-K znxH9~V<@7q1G}&rzu^`%dgP?@=lEx2A``Np44PvQhGG~-U@7+E2JYZ4{s1LH$%;}a zhw`Y1b{LF#h{7T)#va_n2WWw$n?R1gg^4VvjJD{APUwP3Sc@Y#fs;6m=ZFmA8>1<j zp#_FvDPph>`*9HWVYhQyqYw%s0`;A|D08t8QTP$R;R^o7JG{q7q))}UjUUhlebFCt z5rb>EiCee>3mu$_;yZkg255wVh=OwmFS`+gJ-Chca0GKIA{|r@sS>D)_UMc*=!Pj+ zje|IfV>p2)_<&$~R;5FFgdh^t&;eaibNst9(H&E<68mrnhjA2-;6t~pjQ9#!ksTFK z7d_A$eb5hcumxvv5tncU?~pz%v4L+;0wvRO{F^Z`21~ILtFRhJaSi|A13p61@hwmd z9nb|`(H&C}jWf7_i@1!pNXmVV?8uEg$cJiZ>*QrPMq>=d;V1lt-*F4KaTh)rh)xtl z1d5_K8loqrU<PJl7PjCh?&A?2;|WrPumh+BXEk1`qb9mz4mM*Owqqx*;SB=m3FkmC z(x4bBqb)k36S`m$mLdlGupb9;A6h0N5gCyw6URRb6J^j9<1raiFbx~94>xfa_i!J+ znTbkNKxI@xHFUv5til?s#d@5AH47U=R%AmCRLtUJ!%U3FWK6*{Y`{L;#9iFOefWMw z;Rz*B8f8!pt<euNF$Z%oA3O01epxA~!VU+DpaVuZc^QZCn20raiImxhZUi9}3ZoJF zVju=#FrsiA5AheC;2Hd~lTc9{ktm7MXn`&mhe>cw=4C2=!9Lu?UEITc_~zgnqXbH$ z49cN3`eFuVV-DtF2ae+*{=ySHLy=r;9BuJ9FR_r1{3Rd9U-gn~hE@p5&)%X8w%|7I zBW)OYJ1XI70rLHDYVT-(kr<281<9Du1EaA4(P&VJc`z0e3bS79z?le6=?IR$sVF%h z{=^e3D#mGplgMA36`%=z`I<8UH?ig$G8SBeBa)4yJZfM71|xS#GAJ}a8%)JaJcgqb zUkX1v%aT#xD%w<ICd|YZ+{Pbp)*wY=4f3`kc2Eva`*0fe<v62NKN2uzz`sA448kxJ z^YJ5U4Izfm1HG^S&Rx8ihO$RUjY{Z+{`hGa*91I;X*lyBHR@t0Mj>h(`31J9zq5!P z+{Lx^q@7<VmZRQQu8bG~%Qi9}6hMn@9RG<-Ov4u3#sfS->g{|pWZA*FjaoR34>0ZI zoIb>b3UZh;<OF2^R6s+F!USABNm@BYTEVl^MEMyq9*o2qY(B&B&vAj{hWgm?kSNEW zi20iYg4}P2N_4?|?C19GGrWS;rqKg}{-t<aL=#5@cX)BExF&D#9ws`d=0QF*F008H zOn~++{Z5^{<j1r6n%KVQcO<Z|Be#HY91S~bG797H?Ep=BqA!{Z)?_Ru;>rkiWTYmE z5i(knN~n(7W9S)+VK_2Flh^nJ(=2uf;c%AQ!!2L*g6~O9(jx?q;W(v9I@E>}!|@JT zPivA3K3Ca!grna*O{QQPBJOL_5*;uZ+wmLzMy3av<iG=NGY3AU=d9x?-|D5t@BM1B z6d#&$%eNVwQgM);uP^Wl8@rg~I&R_x(sO$_1k#gR$H;@CXoWV|&u!ypcmYcv?(iZM zbrzdsFoq)O3a3d5ui&0C%A-4ez!+@AX6(aLJcpTk%XyI>4_4E;mHW(gbY91;WX#1% zoW*(k3Hy4JIFJoBQ5&r=8B?9S+@ULOifEJgAuDR27Mf!MCSf-AVm~gxw1sblBs)w} z2t`l@eb5i%uo+vhAJ6at-S?VgJ{Dp<oL71I9j_3w&m@^p5KYk>y|4(2(ef}mgDF^s zQ#gY=NO6QOfOM#UZ_yB=Fa|TR2J4Xblu7EN!71+0cVJ>BX5nXC#AW;m`)Q&MIZ+37 zk@^plltpFq!D6gJ*89X9zQaB|#Y?PvM2~7*SDu?B@e4XGBbYn<W&Yv#S72h`N0Y3; zYFy;D|6h2DKP_g_=mKEI<UsD;V;3d_nPoGMpr(Vn`)H40v_34tN>r<7mQLu2f!v6n zg@y3hY?izzjcU$)EQoICbc);jIEnOU=>?5aID|WRjDhD^5f))Ne!~%TzrapmCgvd; zyV35FS%zZ*ESJra0ol>_1AQ6boX^YllomOUYxq#WA_3tRv14^xi(J4}6xd{u#%PWX zhb%G@lTh@CMe3j-zR`T7J{lu!kdG8baRk$X9*$!8t+<a|!!1OX<qmzlvUDIu8#pl< zKIOTaj&P)@z|C@eiz?`eK^Tdju^tm>lV5?=s9A+O`sjeuZGGeew00QhBe@ZZ*-<{S z7l)!~f62VuN4`O6tawSUXI#K5guL>REXa=rXo6-KkI9&doru96{DtSJC)|@pH{{I5 z%}{&~9lu~R4rRB>O(!p}@E(CVm>G+|v&yg7i{QH4@<jx$wc_q8P1-52ptDuBVi(2^ zx5^S6K#oal6ss_N0XJQ-3BND2%1iu>b2MMSz&kjPtzif72^piUQW3TAk`|^6JGmK- zA-mag%t7xMt1QF{yhCQ1w{znVp5ZNu(cIkv+cA7EJAq9ov5!0c=!$i?xQ{#ZH<>87 z-ztsJ8hh|3UZUIqq7l8}bCCPdD1@I7gS~ish&%O%xd)9TNBI)Sf=9=#VmiTcxQ<tN zgFk72*SLdkLC<qeZt>F^KM@PhvzOR{iC2kIEXQ_Q=1<`)HeKhwHI5_iU8~ebW1PEh zCBvcL0{(i)%?@sqhu|2k^>6SV(eLT#jyuTlft%-O;N;~kH@?535kCh`hT7yER73t^ z8t9MVDYnu`e;ZaB>XUS%^Ez@NWgl+!A`(lTERVCOGr}f=F&vY|+hiMl#hwY=%f<`! zcY%!#stawB0!5<e8IKyMwbUl<&=Gf6vqSiZ0|#t!3-@vSpiLg(AKX90E#|{KW`>7H zxdVU9CaLiWIgi^UADW!7$yiKAzjNHf#>#Wtp?}3hlJho6jyxA^QUR6m0G5l~UB?1! z#ZFYY#EoxsMBrssjsiG@JGhVKSGaMG{m5~RyZ@+wO*o0u`0lz*23#kqoJ@40cjz?C zL_6-dJ24bxAK9cSTBAQ^Vh%d~#pf7-=1*)g5W`UCDcuLq3z5(0K7eM3dTx{L*o_M> zZ1Nm$QP0V(`yS|zL%4%SDE!JMHSs-u!!_JRtJg#!W+Lg|Jh*_|_y)C67x~`OzX8?p z;uA3|>KDPdUCa%0brXFO#&JJ;F`RpNIf`4ji!*+{@&J!ejQc7zP#fd8zp@BR(1wn( z12Gs;beKJYGq}n9m%s5AKXWtu9Dc_Ge1eI4Gf%ql6LT~yr^ly$+@UYlpS$eX$xW2| zc#Oi_IB$+NSj!ES!#IKG+*rvw+*calG&fQ{z{JgzCEIzA>o|Cxo8%YxW}vfzWP^Ir za2MV|J#Cl^HBsv}8|cBrLTtyc*o7F}g!v9PzL5!;@fFIV2PR=EreOv);RfF06I5?q z6EYzJbx;rW(E$Ciz{$%t?8L9wjT;EK$L)L+KsXBFJ50wqY{Vu+;{yIc&>ws|q()j4 zM?>_%01Si^3vm*U)cdErJi`kF+~;_s6S|>0e!z6Z;2Lh?7Vg0EfL<E-4&S2z8et%! zaRwJ~5ts261?T}#4Yg4FA;<qaCVF8lj^G4N;xwKk7u^NQqY^5kDmr61_TT^x;xHZ} z^CNm>pft*$99km^JFpuu*n``TIR5GBi%=Bbpae>y8D?V>wqhH0;419g`UpcI6h;K< zV=;DN5B6d|?!k{f4tWrYFodHv24kL+mnba4V(fwMQ+})%*^vXePzgOT1v4-cv#<rP z;P;H<4?7$vf=1|zff$6rh{9gnz#Ta6^704Nvpr#`ikhf}I_QZ7*oI%R3o*C}6Zam| zBNH;?E0jeijKKs<#AK|)b-cqTsC$;Cm%c3}6BFgp0&UP1?J*X|@eqIE37*046;X)l zsEs<Pi{4m`gE)#~I02q4US6ra-K1&JP21bgsJ|gy?9DXm;DCC8pMvzzE<9w^rMum# zpXkDE;1XTzj?ZtuOl8rlb+g~G#4S->%`(U*>B~<uhU?Y4*s}&~{4`^5fH~atN+{DW z^^#re_UOz#><cvgNmqN)=$Ieuy|w6(?d|t8-M^3hw7r~0BRcv*JsBNfW;Mh0JALep zOlbn5OZR1dvwC=YXFq#7?Ye%YpS?!43eu6`g&4p_J%#QXW;c|-;rt*(6G`~9u>bh1 zfPSLCJy?(IZ_n*9M3Wl0H{$?0W=tnM#g{D+&Nu`tQPvO`rUKLG-wd$lG^{2@XY~^Y z*jpQx2-mAEvj^#pf%f5sB~FcIO?wC0D;UDN%_ls3P`vQaS@ty1O9t7KYK8@#O=N+K z&Ugznn?!hp!S)JXyA;7d7Yhg5GwNrD+U@#}3+;{!Dw6ZNBCj@sJhdQ_zYH><#({Bd zAo~!*1|sxsQ`x|*_~9kT5birP-uyR*6W(X2A*v%7<Zr`Jds#oPjWU2xGX3jk{%Q0q z!|d5T1~4ehNGPY&H~V2&ybZXb^iKS6zbJb;ed2Huf8=ocHv!(?FM{C?lIiOM0@COQ zhufQaMQ(&%V;Y;PKEjY}BHVGZWJJ7Oa7B9HNc%jGNN4z0B7N6L`#_JCt1)3+5!iB+ z*Gg1)$)DNi+4$ikvNX|UM%!n3CIPiT#wjdd8EdcLHTKtu(e#w)HP&9vuvx!R%zbC9 zJ*6RBr7%71IC~#w+zF-*NjTJBHPW@`$>;r9fq(t1Fk=b*+j69?gg$e|ZZN?QV?QH( zc;p0Mc1GnE-noSLX9fRdxkBt_+;Rc#tmn&ue5ltLPa;}1E?#VMcBG3=J>K5S<S{H; zjji?oecc4c+uAnKE3Z(4+q#l((n*HH9_mgG1LB9flEb4(_IX~%i=kUc4*I&u_6mMq zvM$!IzJ~rT3F$e@6#FB?GTnyrEs9RHCpVl@+CXxt_EYWcjq|JA=>61q+jiwfyQkT& znhYy)rO~}J?F~(aHN~v62Si8Cw(qul9n6udEq&?i(n|7357*xo(oR~V1)nt|=l_9j zFzuu{zu)@<bM+95#0>)XX}*0*Xj}?aIhXqO;rvzkm}jE!`pkWfELq@{9je%h(BCbv zAJVf-B|E$|-|nxUTxhrZ8S{v6J%h^a@<!Q{GenAebTu_fRs`dxRf@7d_WH76dW{9l z+;owBuwmvx`jbV5Y#>ZO_9NGhsXyAcd7Zr_#&D#5SZv>7ShcpBOrZ7>`$q3fAWY9V zmTl%=W;m_G^k-3Yg=@LY9@We<nW!(JA}cP-_x{X%%GM<2TNAB@F=76FIsKW+T3Rl* zr}WDH7!FP!ww!B@ie#;jzHqrcTM9!A>#p1<=?Z&puhi_iGO64-KySFh-qzz3%d^m) zG5W6+_GOyaw#cU3hw9f=@e;Y~LiTc%;lyL?UX`!5{K<aOJ4y?<(oA&2pY2VJA3WQ^ z_q?;le%9;Yu)rGDbYrc3fN_CltH~usuD9>k+$n9)2ChaM0|HX&4L8{R<6V-})o;-! z|1{BCHrS&yk5fzy%0>PWtPk2`pQ-m5ZVxmQMS6<Oh8R`zJ=;VI8nl@WWgq66FI0Cj zpV!8ikHecx?{+vaNPoE5o>i3#0`<sfyRZJk;Xr>q-_by88qb9CCH1Ri3+PRv?ae$= zxe5%|Pei**7=e1o7S?oevpwa^Ep~segRXYbZxdZw!}Ue0h|bAsPPUm+@5-!RXP{bX zA${!@R@!H#J#gmMxH)emG-qKw!`8UXcl|tT^{ol4w1__G^Q<>M&$>IIStImMpJ%PU zEp7+$Z;Q89bwTd3P3<a2N8kN<)+lB*M1U*L4~~Al&EDC^kdjEN!TQ+U_63G;3K+q9 z)foG8uW-gmR^hFGvk&#kM4s%S2;jfRzS%JMdP*44Pxnxm^qRfNUS`j_FW&4W=W;pg zx{ohy*>7)YSeNTun7rR`i3oR{3wrGX_Q6iiyd^xgIPfKJ`8-smD<fA)&G=bC@+y_t z{#!CsLtQ4koNFk`&i}EX`-<VY!PrqTT_v7>-=MpwkkE1rBzut59DdM{&4laSmJsPn z4jPMZ;rhTMoT#l2dtF+nfpBSAc$lL)@36h4R~}bTo$*KP&AbjoLA~TrRx{^_J$a(f z=cvADB`b)^6O>p#d&FMGu)vgKTp5ZVwdeObe?uwku-!EJ%%k=>hV2&6OB}Q3Fw9=W zJ^R#S_CbaXWIW3r6+Lc0?Ul;9s4__S2`*Hh_tRD3ntzz^&L`}fz1Gj~tLV+Hlm60{ z;agNcY0vIaQ&7iO72hMv2Bp!L@R?!JFulnc3N}wq8opx~8JBCN+sm`k%BP4L&wb%y zs`h-_Df=8lIOV4_`he4heGk)zs0iD5nsUF_dWcGPz*X4_)YqNi1ZsK49+*yD`~EF$ zh3V^$a#-%1vFA6$rfVC;&l=Jd!-KD8+pEud)vMGHZbkH%^L%1DXD??sj1hX>b9UWp z^^6I9j!Tr|ygjk^1(nlN54}Jh?|BweC5T>h!Jf!CYXQB}d3OHfMf<m2hkVykb|mtW zJ+EOc1@(cK?9IHc_=Qx#M30=p0Zn|_-qdR~H?MG1rd~FD(?WbxYT3luWqWI{`J1SU zV%IB%ojIXGZxHIWGllt{5m)WAy<(-Xu5wEK?Nvjh7uKoF2J6*t*)4j<YxbOmHHGU- zuh|=U?aHV9?0U}M4aJ+nt}k2TI#>FkzuRw^4I8IS6s(WFW&hR??z%X<i68E|IJCWO zn7@eo;&730ul;llws^;$j^4Rn+El)j^;Ctgu+U~B+^7)-&T@4|U*qrY`J{S3J@?>~ zldgNQmhd;uVR}NvxyZEAm!45^{wPiFnDo`?wP>)ZI-QR_)Tl)V77u?j9jAPKIwpBI z+kl>t9u7367qy3GE$NN*8NFk&)6vM&+4ii!!`2==z~LdRANQ_2EFVmt?^y4L&}AnM zeTv@4Dl>vkO&(H?qywDdjGdT6=ORzRv*?6~)E*lDNPqEIX?~_>ln3WVdOH0J)j4V1 zZf_arSEM-OCTbn01Cob6bS8>3`7B+pVm-J>2c}r7uh5S))}m|lEA#N@1Ns<wc=d>W zf*$VuMGw5cIR2xb(VH#StJlngY;W9h@>dxYYchY8*|EO2YT{`wos{A%NTf-e_DMB~ zQ#v{0R>b;{lJP4(q;wk^sEM*7$Zb_HV@{w+T20Pnaa)pAlQ=bVXyWPTe42O~kYAHH zlZt5KX<0GGzf_#D6Ftk&N616<dh~Egz@PM@QhIfW@0}V%BUai0bkp)sh+b52Mvh?+ zj#$oQOEvK{e7PnWRx<KNw6}IU7#mQH4~QNIzG!z`lQ<@NR4El1H!#j|ru&|yht+wy zeO=Hb1~*~8$l<x9Ii>k!M(Mc1&>$Fx!dJhjdXpYg_q;WuTa~BFe=}gAho)~dQQpUz z`kuiK@#NDNcP)&4fvYxp$6U41&Bm9(2vfSXwwt6!Fnxux)7z;CJ)$B^k_d&W&>yHa zeS;dZOe43s9ZmAEJ3XR$xvk;v@BK~k^$>;%ocYChruWbt>z}3GW;$a#4xPHg$~~;1 zzfXPo_IRrI)Fh|rvg7G4-FK9aNxj`<gbt&tjM$-^2y(0Jpm&UVxm3z5e^#gO&hRfz zj$;sw>1Ii>iT*uw-TC^qnSMlO`JNs$7h5t`MH{z}-WE}Uhj`1$d*#w-x1{4Oq7+~0 z_I!;+;FM|`EH3BvTSOVkU}tgi-DhA8bb9^ol8BF7Pvpa3s6H~coLgmj#&{}Jo#7&C zxD~C*@PMDuJ4U_Pnt=B_?wWn9w_7}^x?t%S{dg=iPEC5kDF2wewKOvXL98qmdR5?e zWVOPnUQjp17m;>GT}VLT)Qmfb?YMxa2uj1a1&Bt4bXJ*=fvz0}dFgTUZ=7)-e4m^C zJF#+?qsL3E^VJ#GqUL{lU7LO(vCJLmtP;z@-#8U|(G{mRJ#G3}rR_k5nV9cF?<giN zF7#G{t~y5Bc>GkEx;egnblZv3pJ`?3!T;GGhnx%tLid_DK1b<JW1!Q`=AMU3bg}Vt zm+m&6y3o_c)9mw%YwTe(J#Id8@@CUDZ)>kJu!V=CbiXmG@POm(;TjLmdWwESnn*yU zw~T?}!I@TL)CGg#K6I<`5R%j;o>toF*<#Q?HC;TAHG|t_{wmXQdNb4QCr;Xe^p4@> zvwT(P+Y#$pRr-X)a(qwM8xN0p=r7LAMmCA#-;}X0a5UCl9`5xtp}kGwRPIc-pUzHt zz;t1Rjs&dgX_Gibd)vgQ{Q#R7RUJhiqgb2y>*@RHbawG@k?D(0UW(4MNm$euRp^wY zTwm>0ZktU!<=91^AEe#w_C1}Ilwx#LQo7Sw>AyTV$Cw$YLLVWgdhw(>5c&N6MfK}+ zv%$Wb-rCTQD9+sb3=Q%xTF}QxdH*m$PDWW_%#!~>YdRq*ZRluZ^ye$OcF`wDX^@m5 zCSq+*K?jADZZ-V4TOMm^kS`CgF(?CFehQ|dcSLgr#xoj0A0VX}{eP72(zu=DZ=5Ui z0a9+K^VXF<KyjLuVwe#RwW`zaAXe#`bm4HSmsr*KJ1YSpwR}anQQK`{9eTLLN>-O~ zDLh0qrU!(F;O6w0iM6RE-92KR?aFW^aK=sa>`f;X4^R90N*wE8Mq2gIcsPS+7+e`c zY{cq1kr*&|!Fx{wr_pU=8ogs;C!{lviYMgaV!GFO__&mzLSj`rKvx?N^N;#UoE1!a z`r#PeK92iJ&J&(E{<f2J%fj$ejNWpZem!V#h8{C#8PN8eTOR%@P4N>>dw9<DS9Hnh z6>BDcXJN<%U&(#Z+Y8=%T2+_+TB|&yrAwBlldtG26zdd!2fU}x&<Bnwqsgm(s)`;6 zYUpC-(IN|cppSe(r;o^%3?LiCM|Pxw1F4Y)X%UQc$bb-}*9W#_gb5z65}u3_9@7%) z?2>~u=H@STd!hc$PeSqh4R~;gh5{aSK`6pe2!+9eNwn<o3?GUi0>#1eL{b7@BNC-h z8YNK%<#@bDYA{h2<xvq8^o*?>8QM|p=cW~p@}Umuq8`2jO#spm4e&jyZp7c#Xoe<e zjHYOg7N7}0+Mq33p&dG)Biidfw{oOvM5UiQkUTYrp6HD}=!L%Mj{%@DKn8-w1R0D$ z7>Z#Sg5jX@FVyvAG{#_*p0TwfpwlEKCu1U}U<PJlDyCsNbj-qR%)wmD!+gHw0xU!n z7U4%M#u6;WGOS?Ul~}GXYVD|%EQZNnu?xF(t&Jm~{sATrVm}Vy2#(?~j^PAOg7yJ9 zjWalfvpA0nIERb4gv+>st9mz9@4Uw3E!@T(+`}KZkGpt)KSA?=JOoVx@&u3Z6wmPj z&+rPb@e*(F58mQ$yu*8Z#3!h;<AX|(8WU!i-~*Zs!~$O=0?h`J7)g)}G!HOxYQeUS z5*ZgUnE@eSjDE?8%*cYTkV&7?){&-U9wu`mFK7plFoc3O04acQ6ht8u2GxEkf(R5v zalOeKd#c){m@I?RD2sBai1Mfao}&^5{+Ft#hRUdd>ZplYsErz^qe<j<(Cf8xWG~sA zkQQi$mS~06Xp44ek2c_mEcp?OK^uc~LKk$_x3+Vn@fpOVQ$N*?A${Jrb5!=3&iiS4 zmG+G4yoSlOScj!phI!zJ24n#iA__~e95gb>Dy+aySdE{t9viR`oA3)ZV+*z-n(wrY zzuU0`yRcg$i`&V>uh@$i{DwVxvJQ^A$!J%QtGI^CdbbXa9`<)k(kviv!A}^-SQF2T zn)K%#99a`F2&kk$N`2frdxjuCCjAkBAlMP8*Xige?DrLuS&$XkkX^6Q$&o5gP9}39 z2XccELnR;bAV0!T0E{9^)AO;8<hjL|ERLf18YK{kZ%`7YQ3i}NDrHd~6;KWpQ3;jt zEoiBbYN(E?sDWCb^+IZ*4jO=#451}M8Z&n3<M;LmeO)I<g&ZRY8HrJ#eMAOh2!>)9 zhGR6wMCa)2$fjjF&-4YH!zEnA6<o$uj4<n+yEwwEjM>R}CHjIcj?_8+A)H5)<Oyij zkY{*qlE|0*eTCQf8*lWRT^yzTXrPeNNCH|qB(c8slf9DOr>mo>PZ8cTJb70~s$?aY zjKnu6sVC~@$W^i$lQeBe4b=QU&7FB%)YjU^&xA!*Wlva!Rjpb<K#|1_6x>lzaX}Hq z9kuRjrDLtNi=uVGr)q7LYpd9*m0mlwR;%3?5v_WyJ1(uZ)`ePIup;m8OeQ8w=Dzpy z-oIY>eCJ8>JaZ=VoFpgnOU?<v;G%4>14|tO_=9Z*fgCUt3<J4<52!K%{yf-`C3nR{ zdVhu_8dB+-8B$M@W=icmO5j=#ppak(n<=$6ZNpqC_y>3!yaTp_onQx|-i0lLeGhgQ zC<lAMZY+Brb}#q<{1ZTPVdy)>%-|z{K}^|x#C;6#EQi#Cm_GzQ0~p*i^{@l;Pd$Q( z&#~Yu@CBwJ+N6>+OUgH;V)I5v9a+TR<AbcXlyO9ZuHb=bg}s<oxP}t|Tjt>;V3URp z{c%JC-E26Vg*GA!&EhG`1dcER8)6uQoy-as@w35jD_4f&=&s@ND6|?HW{<_DrJ=_- z9K|$TEJUlrF<B>$%t8ln4a3lGkFxUNVzhcz+AYD3X(e?jwkRuoUc_DoMrshzrblSt z8vcH8-bynx+@=`3a3+;Dq!|SKBpcTK6GzN{!?OM8Z+{qHLPIOG*X=Y6M;kp!!{Q%s zTJjniZBFSa9BQoyXVD&7IdC4^l9hdEt+m`o>-<Q=W3<vu&@xxw!Ld`rO0>=jkI_PN zTA+n)QG@z_8WS9omDRAEjaJ5?MP8tx6fLsC+i0N`W_dt)w$dN1w1T6zfhnx?L#JV| z2Rc4ypD7UPe+WAKHibTJ<%i}5rZB7}p0}gHj0XHG4J*-zZ@01=jrK<xzD7fSOvBD} zTr|)yWGFfo=i$W`DHpwu!D2MBYiw|vh33pkvqk88ts!kOba^YwU%`8=7}4a$YA8Vy z8(oG0vCYuf=b_D1Sn!D~;uoNaT>3RqWo7;`=<ilK9LIxyz>t&B+O4>p!Z6-o6NLOv z&luQcVE7SjF*tP=mpaZFSSH%pSHO1A`GSH8b?`GD8l+*?U8F_B^}h^E%j6nd9RTjN zc&gDOnKQ5t>kW{*d9PKOSSLJOsF8p%?a}2Kto4FskLI~3P+)IHpgn1U(YH+y@m(O` z_W_I0G@8-uajv83;{yIRaDOKH=FUa8Sm3uv=2<j)T*T+%eX~*-r+3i576fV73k{$1 z%k_qgxhXJ?NtxhwI9j`Ei1@(_qgh)?c0yNJ;OgnXd^J=<#ILb(2g3bBaMoXDDRg_z zMKq0%(7>6Y-JgeMKM^fb1lo`1aQGj6&4Def#Ry<8LbSgJ(OzLG#CuK;2=|<p5bCwW zW1e#v;yuS7!aXMw;ytGp;yvdXX!mo$Bk1;=4bbitlAzmXfti0|B<y7n@CQJsuZK|o z6@>baA=GR667vdEAl@(0V1jsm65{<i8@fWX&$NN-_(yDbWP*?%2O*!6Vx<NmzQS&Z z_*ynF2(};)qP>>cm{*8~fS(9{;THP6!UX8}3S7gV4ov(-OJ4~0`@v~&2lzs~PXPTv zB^YINX1l`lq(R94PdwWi^0$>`(D1AJpa&{m*gXjOz7X>5;gAE--b&IG4CQPkZ!S8I zLbP8C(SB}`Gs}loZ;zU{aKT`UN)PDwDkgbG5$-pC=*(={bQm3iZTJ!bezk^1=>D3h zq1jRNFtx!M+I)hBT1>Yv9mk6mr&H){tYH<z`a>G_{|j}hVF&d2vl>oAt9Q7hQVE^D zUPI&+XJ(7(JOq4Oav<JoxeWnd%NG#u?J@WvM%C8P6572jYoOh0Fk!G^^gPwDAL2b{ z9Rzz$N|?+;SX*{Lz_&*fgnWgj35}SR{?PChuJ<#c(<g*{P6R}JEuIkX6@JIGLOcX~ z&Pgk0AmnQ~03lyt>@ygY8v1=6*lCAK)0{@E(#ik``L-;BkZ(&4#CwG^nAS2Hn!Q2+ zrmtG*2OWRF7Np+FRA~4sfvNsIeCu6!P8WoHg|tr_F;3iJnfVa#In%z8Sql;09=-pC zuCHJibb5u8n3kZ~YuR!ceR9FSuHYIAUK+qV1Ak|w48r}t<4p+n94_8B!SLJ)H=x)5 zC$>PZ=Pal;@t1}?f@r@0f<0#%1p7T!et>9S=Or@+g1x(s%%}e7mj@P#GP9uB+j1Cs zJ?8-QdJgZed!1uaCSdVIcnb~?>0>m!ifLPxK)BaZn1z0ORwl#tgI2F)2j&&pK(ALY z@rgem-gCHcUuMN)hzkq1;VX#uTEZdTD;$7$uTV7|7XvhK{k}wl%R+Rslrgb(5bw1- z2l3vPpCR5WDB}Gxi1xNv9_6#j1%qqJ?1qr9g=_d58vu=+FA%pi#P|+I$+p5p{JB=P zL%7$Xi1@Q0;Byf_3nG3CtBCJ(99Jg54e$c=drmm?`wu}bH2h>}_&=GfLcSv6=bwh= z4o(0?$mb${6h!+u8WEo`z4#2S7W{}#y*AWiUdth9_*z;)$5$}%iAxU}!iD_%8X=$m z+`jMvZrT9X!A;<ab2@*J0FuEhFc0ip=D_xXkH8Ud8cg~F8{ePkAPUlJFsM1G1%_H& zV>wrgj=kVEcmR(4jd@T79)cpQ%s2J8Mh32fTfi0njX@ZA3VbcNvI^kf<jTCja!?HR zf<vIPkt;^mcV#!gFW|hJEBhIgdE(JXdp%v*pvJB&2Mhs2K`s~$Mu0q!4@Q9kFb0eT z<G=(k5tM+9pb{Jh?oBX~IxvDT&<6AeE5Ryo0r+~kvH|gU83>ku7r+PLpWrg60&cjL z(ij8)eq99@sOhqwXf!y`YJbt!Jp@afWXRwzh8dh_ufI6S6y92`GFMcK2RIEbaEmJ8 zeSEK?3It?ase#mo=s*lsAnV0|*Ti|iYlGJWPZ0mYwqML$T{m29!FUj?k(*`00W*%Y z*C_f@YN+T)>EWV}DeozH{Jghdw}4~dF7Rrhj+>W;=>jkYOarfhy`UU?34R8RTB^h2 zrDJ*=7!UZcczig#13(!L?=GgVC>tE#p!Q&+;CyQ3zp4BGt={8Nzqa-L7nV7C;Q?Tl zibvi4r+W8L>z(2v#4t*Y5WSwfI5t9ZEeY-)A?E!5NGnh6A{;nsKqB_jB(TlOH9TB^ zbI(y`DpJo;s-X(goQcjdb6`2YS!s>^meT_dD0m6`?k`qK+_C$)4|8Rq9x~b3pE=4t z&Fhx$(;Q`=*6zc$n=?<lW|yOPBgJ4k6e+scc}eHh;Xy)_7-{H1&7#CI^RH2&WT4Py z;tKOu&BQkxTrRq%4bOdk@JMsNmSTSgb5(0`k3=g5ib3WZJH*L?IkvZ$=So?fMPGB^ zU@<y}!b?TJ5C<<vSxZN`doO+c@krQFu-Fx#pRyPlRVoI1xmhA&8_N-~jp=TN7)UD; zMPI9nd3!JITR(Cs^QJ4k;kr=z#C6<Pe%EndI`SD@QxA)NO)TYY36MQo0%&?JJSj;} z-ZVW>E^m4uomdaorphO-)DZbysUcL|2d)+Ep18ciWS3VMo%kHCq9e*jRYl0<RYlO^ z;qb)n6Wz_n%Ei%w`GZ~JfMy1ahICR~E11hpi(3q|;EWhc`_G8sjy$7OaYp=vihmSq zR__Zy?&CVTt#+ud?`3}VoH)rqm6ya;^j4J^N#ibv)2Yj4RNu7AVz@c#qWFb_W9hZ{ zK=M8hcc-gjbF=3av7>+vfW5DYH=2GNJT}O=|AscmH2zx5`5;uD!m9y8zp>~=KZH@j zburb2M`aXcbfIb2#SxBSv!->XgV)7yPrmH!@$Dh);*Ty|7oT-}e^63i>h+VjG4r*- zb0G{{|11Rx{>vvE$gO-vUdG?Zm&kLT13OxmW8M<YBY9~SKmGBOI3(b8H%R4}cL6_H zmg5lXK%;*a+Y9@$sN`pHncx;hfj7hfLhF7s>4q37+|Qv`Zis`0{@v-~4a5~jk@rn8 zC1`Ad2OhQM!N!37&v>v^{+?`Ts3%(=L3uavK2sqT-9$O_@Z5o$Vsl~SQ&f%j#gFac z%Nh;wWj_`AvKb3}S@T7{xFGDu)`)(rdzc^V)!dKWYvISf?d*p;*8SMTxs>q>*2{T1 zefx_zAaqr3ARCz%$X?1vFWiDaw%HVjOGQC!c#|M@+?(Ql6@vt^kb3<p9ul@>k<%@) zpKvjWvTun&KDTE_GT-MSak(rC&o+!=FT2y6TjDc9coto`CGK|i9n_Ky%%|et!~qUB z9a__+-^2xiS7*w(Ee?(^A05k5rpL0r^J6i_V=QiajAhGl$AFtt92*!MhY^e8@D!Ig zRu>(|TD6a36&<MJw%A>ueDb~ndtw6R+!0fR3$v;Cj<~Y%Z?4JA$2S?bYbUb}P04sy zjPbeJCxv;8N@0d^DeUvY6n1VJW#1KBH6B;cfgKssfwh?4fnA$V&)*fh3PtVd$XzkM z)zbx?S@)@(S^YDeS=@}ytm%B%qRwokcNZ3p2iLy|#zb~ue>ElVdt$EJv8+@!KQEP~ z6wuUrsMyxs=*T^BX2isTbau~_jt7op;GrQI?5t}B8{IU6O^nH49TPLyKuWI`I|z$f zQBk$nN;niiZ&#z9&wA09)nZKJwH<mfw~oEo4bUy0YOBR^XK8XjmNJ9NeiwU3&S{j* zdU|KG#Xi~W_omtG<!0IJuas<7m6gr5j({y7&->y+!M_i^cwb!OFt^!IbHE>BhN1E4 zxKV7*lu;~g>L@mLHjRFO8jeV!1rNkfpIn~;Ru^8tijxZ1p-$*+-IcaJ5aWfoC_3># zEOdC0O`w!N#Rbg|`V_K${)KE~R3Y0JUC1003)z~CLbkY1A&bc>WQV{<dGzg{Vy@6- zBt`rsj`!(ioW?$BJB>Z+GmW`qPGhx0sQ54OGvPp6%B&GX1)&j5s=<eu0%=1HHu3S; zt@-jGUpiZZ)clx3wKd3aNg!p`Vhi{qmR8qdxo->FTZ<YT*omrZ#TX%_HyIy_9|qj_ zU&cC0%h>G5Wvn=M85`4f8S`#OR~{nWbw+ai8@s{o{#5+87}<y%m$S8@%W3!DVqW7` z0mUq+X)&V_#Vm9Jc|XEthC^MiM`CZ`?igDANDK|=-*XK+KWz;gv2YC@IkT4i<hPc^ zG^c})utMvC>Ea_XD5!7C5|)!%!shfSVfB4V*ooW{c6(9@i=IcWby(5wrc*+lI9}M9 zMH}j{kDPINgMO_OGlWtjML))e{**-H9%F59cBSISV(0iPQCnHJo?BVrl&yHAYAK%O zRLc4qOWAM`(7u$tnpn!B`e0dBDH{g*4W{bHV*7wKF5B3dh;6JgavNJad>cDjxQ+Fi zO$qh*aHn~+p<axS{Igvd+t;Iv9qnC)yU)tlpu#fdIj4+eHra_^#XH&XB)U>BhB|yN zyi1Sk#a+U;nI&aXq%cV=`Bq91o^M75gA^)k98E@p6xsYt<8o$hQqIl?m9rbha+a1} z&PHUEvvb|cS>Ivh80@s1RV<<$gH#|CXVX4|)Lq!pk7^B4O5^kG_cPzo`&qw9``NuI zlq^W`L8Dv`uy-R4u=F+uSaj+E)~n|M_I<wt?BW1gAV{qYTWO0R4H4YE=mElo2g%gT zK{_UcOrmNBsZ@B_idH*HorU6-RN;uVUN?hoJ4%DQ8^oh*Tj)_XIqWEVG4&|>uIo|u zS@u!(>%gPzmHeaZ`*BCvsiLDeL#kkH{3=*^PzC!cq=MZ5?>4Jo{aRJ9VF@(DNlIy+ zn0JiL8GnqeEIh^>rygU^I#jYXo|PC<zmjE3mF%PDm25>Eed#1E6y^`7PR>%0u(u=S zI7=}B{_!W-T<~4Hlk9rxNmkYGBzt2Dt#-z`8WPNVou%dm;o)35-AI}#jPRli7pbeT zW;DI%BIOD@^68?B)LfX}lMJp>kWcgQtE_R%RaV{cDm$BXm2J<bX0FKZ%s%Exu2Q_g z;XThgw9!q<aNF4ZF7wL1%O;GWD{j&=KKFxvXEEWwv%#HyXE|MdXMMZUFn6iFun9+T zchquKXZjNJjs5#SV95g?u$OWlu>JW|=PoVux!R@%@2g=2sWq&0a1DEDEERc31BC5i zRN)~l6C$H1+f!=Qd`X`=c6D$a`!m0eeKe+yrA??~YiHCkk9l=$%7Qv}+2b+0>O-qN zu{C`=k#^xdCVqlz0{o9(xUNri!1XTtj<p~!mFF$fSdKe|o)V7pIsV7*4#M3))0+!y z`crrYYEMV@cQ1fT3V-(l{h{_3f#<**U^BqE^zO%aco)ulO&E=cRpGZ1OJ&^hn~At( zLaN2a3Yf0KO*D@3{2+c-fcf`a<oR4Dd47b|e&QxCUtygOahK=cQ{t@iICHj?;}-5C z2VkV!J&kdH!vL2R61#U?xb8TSr-RMDmGaV+-W{I$Bc&CdTg2Zr4>$KXZ-g#rD0_;Z zr8sz9LJ<v@@+JIlG_C@9nbX#LB^zj?zZB$r3hKzIQ}nUF^r4}rc}9SgV{mPO4{}Cu z4|Am`g&E9U*L(RJJ`9pxG8oe7<zOkvfS%65Qj7Gt7t{DUr2^J-?vkqNg9gj=(7PLY z`kaub*UvJX3p!!oXVv`nC2skuam!cQfv?O926NVWui5{HS4!>Z_Wt@-(&@nTAWK>N z3-U5~3b@60y3<P9DD+LFSD%(5O@FqNPvD#ra1R*#k+A$bc7<&OJ06yAN;6@3QkTHu zoR1xYb%#9%>j8TQ))UsbJ?;~Ojf8Cin*xiod)6J+8@2$}2X-#3FK)lF4AJg~1#7Ut zANC#C0N8R^5%x1!3HBIlAndQOL9h>DgJFXb<$E?`V2zkhNi;v#T6$#g=eJ<;dr|ne zPQqt#`!}tMk>bJ{c1TWwLmTwKUJy!e5OmjG5LT%{&@c9akf;Vh*DOJS4c7^^q6E<^ zF;b$<Dz{bLmasGSJ_z4mDZ^q<*b9oY3Hsh%Q0$W+FH1>Z>Vq(9j7`v|_JY)0%O&l% z7o_G|4*I}ekeX{bXqUYpHP>>`c6&i;uH~Su_JY)m%R!s$1*sXAgG%fLsTr4pR@n<u zGwyB4_$&ILSWU*|pcm`~sTr4pitGic8JC0R*$YxLE(gu97o=uf4w`H)NX@t$G|pa- znsGTO-(HZKaXDz1y&yH?a?n6~K}yCGakSw_gG}2XKC+RrjVnPt>;)+qSAx>)1t}R< zf;!j>QZlXtCD;p6GOh%*u@|IdTnTDvFG$I_5)@@GNXfVoWV9EgWLyan?FFeB542?5 zTOX99$+#TkZV3ukkCuGEG$rF>a2q|ZJLXJY9i(%@UrzK|j1)jZM`^xr%Q~}$&wS=6 zdm=kYuL<$ineRGD(}mWSnMfMhS?VYl)tPo~Mzl-3^j{tLdm}@6b7>uci+`rY=Yf0l zc}%b+CLlNl(-U#G{A`TqmBQNKe>?^hoQYfP$I;#{lE3>@HW~wl&&GZBv#3iKsTuvy zLGp2t3z7cILLx+7-C@9TW(3PuDV_yTT^A`aP&;Y`A5%qjXQt}hN+rd!K-z5U=DURQ z?m)V&cPkac-`y$Arf@zCp8D=$y<6G*`MWRb-O7f~-O*ijg)5spcNgj1%Er#!6?(U_ znRB<Xo33y*Yfv!tZZ&HX9kg|~*JMp1&vcu@F?Pq3v`CbvcdJ>GXqVotW=*0xy<5$i zM41`7&sMW0(Pq6{&6-5F^=>t55_RgXD_qT*M8$fynl-2gw(bN?)`BUzhfU!a+vQ2t zf~iRFR<jmN6?(UtwO}&#)D^B~Etsb2-D=i?>7d@NW-XXJd+7>SvldKwdbgUjVA`d3 zt62-8I$L);P1b@av$xG>^PwS?T`-6?>)mSBg6Ov1t!6EVI`z>Nu4XNWiuG<aYe95T z?^d%GMA3bvL{WR-;^PHb*PNd1D<#`FpX7|bhqJ*UkB^I}d}kvWGi}zottMkenyPoJ z88gyBy<5$gkv#k93Rg2`q&&S_&6tsP>D_9^j8vz0s~Iy=W`EshKgk#~(q_H;NzUND zt#_+g3!zR~Hih#c!jz<jP_f>vW-Wv+>fLJALMS?0SGbzB5GvBU)vSe3h2E`ZErg5% zbcL%~3!$lcx0<yOI;eN6SqmZ0fx5!gtc6jYty}%k6wktFm)@;rEsW~)ZZ&IRlsU-e zv*Rp%4&|0Vj5h1tYSzN&w%)B~EsQ$l=n7Y}7DmN-x0<yux~O-nSqr1+!MeiLtfA|r zty}%!6OW#m6?(UtwNNq+u_-)ObJh_`Q}u3jTMMOwdbgUjQ1TqAD_qT5DCOzhYSuz& zm)@;rEtKl?ZZ&J6lsQcI*-F;hGLbenbn~1kdnk9`*1MIgad)TO28Hu?E87}(7wg?h z*0}qk-mPSfyQ7Ee3Rkkm-9>u0k~QwGfLn90=c}e<tt|zQXwVXHr;@X_G#O4!OTe9K z#scWz2%FVXe|)sXsk3LE&aGxFfb#TiHDdv^OYc@QhVyd0Tg_MiWscN+wwkd3+N^i0 z84IA>diRrz;fr<3*A@OGXK)w8tr;VY4+I}eC-bFep?UTnCCzt=i;Ip;HXj`&tq?vO zD_w8um;#;9eDh^I-_7xHeSN+8!mH9YN5?Br4b4keNgjf{blqy{b-~dC+9AcRlR_N* z_*B+9Y5MBEW9j7`E`Fx|Sds;@!2mE23<5b|Fc<=cf?*&R@aHv;0C`{}$OogqXixyg zfU#g47!M|ZiC_{a1e3uOFcskPvkA9gLN5n1z)Zj&20a_h0dv7TFdr-c3&FEs5hw!B z0TWmZo(D_73t%aD5iA2QftSH6;8n03tN_K}alNU&o<Di|HLx120sINn>p%(MsU_Ig z!3MAqYyxk9&EQS&7T5x|f>Q7gunoKo-T~Xe4p0Vmf_K4tU>Df!g_k|xeXtjl)4_Gp zWIDc1atu6%`ATpc@D<^l#PlgjE0I1}zh0W+y5*1NMlNvwKy%hhCTBA?isiZVaJ{t9 zc^rh}TUoS_B$F`3m;NScfng=hd0jF&t+y0X`?@r_N7e9PO96`$np!N*FP{8;fgj#S z*(LO>KZah}ZPDZX3)Tley@z6tj)%R3Zu0H0>z`o9>D>)daucO6uMfg`VdncABu~TB z8SDc48eOu_;PnCuOhfniOYC!W<o*W#JyA#k3d=?(@5A);CR~<lxJu?(o1|+_O%v1F zW+Zh@j*U)F&q#}I7oU(8ogABx9-WpL7u!9lU1D<AZi(iFTcr^~)AWq)UAra6wT+JN lme@VIUH90y=(M)oGNO~xViV)yy0?pq?G|r-_z%fh_#dj6N6r8M delta 245842 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%0D9BD@v?8Z~%I>_!5rr;=Ch=ebCVkQpZ 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 L=H7Tu4-5Jq8F3@| diff --git a/usrguide/releasenotes.doc b/usrguide/releasenotes.doc index e100f7a651d4265693a911833f0ff970b1daf5cb..a8e583d3506fb147d80f06c7512d1091080d0ee7 100644 GIT binary patch delta 118238 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 delta 119945 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 F{tu?WYBvA? diff --git a/usrguide/userguide.doc b/usrguide/userguide.doc index 7588f021d967fb79e5b08c9c0784c5ceeea05f95..c329ef15705fe47031787ead346734086eda850c 100644 GIT binary patch delta 34447 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 delta 32453 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 I(@)U-KQNvR?EnA( diff --git a/xsdconvert/Annotation.cc b/xsdconvert/Annotation.cc index eb5f612e2..66fe12bab 100644 --- a/xsdconvert/Annotation.cc +++ b/xsdconvert/Annotation.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -8,34 +8,28 @@ #include "Annotation.hh" #include "XMLParser.hh" -extern bool c_flag_used; - Annotation::Annotation(XMLParser * a_parser, TTCN3Module * a_module, ConstructType a_construct) -: RootType(a_parser, a_module, a_construct) - {} +: RootType(a_parser, a_module, a_construct) { +} -void Annotation::loadWithValues() -{ - switch (parser->getActualTagName()) - { - case XMLParser::n_label: - addComment(Mstring("LABEL:")); - break; - case XMLParser::n_definition: - addComment(Mstring("DEFINITION:")); - break; - default: - break; +void Annotation::loadWithValues() { + switch (parser->getActualTagName()) { + case n_label: + addComment(Mstring("LABEL:")); + break; + case n_definition: + addComment(Mstring("DEFINITION:")); + break; + default: + break; } } -void Annotation::printToFile(FILE * file) -{ +void Annotation::printToFile(FILE * file) { printComment(file); fprintf(file, "\n\n"); } -void Annotation::dump(unsigned int depth) const -{ - fprintf(stderr, "%*s Annotation at %p\n", depth * 2, "", (const void*)this); +void Annotation::dump(unsigned int depth) const { + fprintf(stderr, "%*s Annotation at %p\n", depth * 2, "", (const void*) this); } diff --git a/xsdconvert/Annotation.hh b/xsdconvert/Annotation.hh index 3d1d6cb66..f49aa5bec 100644 --- a/xsdconvert/Annotation.hh +++ b/xsdconvert/Annotation.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -23,21 +23,20 @@ * * TTCN-3 comment * */ -class Annotation : public RootType -{ +class Annotation : public RootType { public: - Annotation (XMLParser * a_parser, TTCN3Module * a_module, ConstructType a_construct); - Annotation (const Annotation &); // not implemented - Annotation & operator = (const Annotation &); // not implemented + Annotation(XMLParser * a_parser, TTCN3Module * a_module, ConstructType a_construct); + Annotation(const Annotation &); // not implemented + Annotation & operator=(const Annotation &); // not implemented // Default destructor is used /** Virtual methods * inherited from the abstract RootType */ - void loadWithValues (); - void printToFile (FILE * file); + void loadWithValues(); + void printToFile(FILE * file); - void dump (unsigned int depth) const; + void dump(unsigned int depth) const; }; #endif /* ANNOTATION_HH_ */ diff --git a/xsdconvert/AttributeType.cc b/xsdconvert/AttributeType.cc new file mode 100644 index 000000000..c1174dfff --- /dev/null +++ b/xsdconvert/AttributeType.cc @@ -0,0 +1,248 @@ +/////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2000-2015 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 +/////////////////////////////////////////////////////////////////////////////// +#include "AttributeType.hh" + +AttributeType::AttributeType(ComplexType * a_complexType) +: SimpleType(a_complexType->getParser(), a_complexType->getModule(), c_unknown) +, isAnyAttr(false) +, useVal(optional) +, nameSpace(empty_string) +, used(false) +, origModule(a_complexType->getModule()) { + parent = a_complexType; +} + +AttributeType::AttributeType(const AttributeType & other) +: SimpleType(other) +, isAnyAttr(other.isAnyAttr) +, useVal(other.useVal) +, nameSpace(other.nameSpace) +, used(other.used) +, origModule(other.getModule()) { +} + +AttributeType::~AttributeType() { + +} + +void AttributeType::modifyValues() { + if (parser->getActualTagName() == n_attribute || parser->getActualTagName() == n_anyAttribute) { + ((ComplexType*) parent)->modifyAttributeParent(); + } +} + +void AttributeType::setTypeOfField(const Mstring& in) { + type.upload(in); +} + +void AttributeType::setNameOfField(const Mstring& in) { + name.upload(in); +} + +void AttributeType::setToAnyAttribute() { + isAnyAttr = true; +} + +void AttributeType::setFieldPath(const Mstring path) { + if (path.empty()) { + actualPath = getName().convertedValue; + } else { + if ((parent->getMinOccurs() != 1 || parent->getMaxOccurs() != 1) && parent->getName().list_extension) { + actualPath = path + Mstring("[-].") + getName().convertedValue; + } else { + actualPath = path + Mstring(".") + getName().convertedValue; + } + } +} + +void AttributeType::collectVariants(List<Mstring>& container) { + + if (variant.empty() && hidden_variant.empty()) { + return; + } + + if (!isVisible()) { + return; + } + + for (List<Mstring>::iterator var2 = variant.end(); var2; var2 = var2->Prev) { + container.push_back(Mstring("variant (") + actualPath + Mstring(") ") + Mstring(var2->Data.c_str()) + Mstring(";\n")); + } + for (List<Mstring>::iterator hidden_var = hidden_variant.end(); hidden_var; hidden_var = hidden_var->Prev) { + container.push_back(Mstring("//variant (") + actualPath + Mstring(") ") + Mstring(hidden_var->Data.c_str()) + Mstring(";\n")); + } +} + +void AttributeType::nameConversion_names(QualifiedNames& used_ns) { + //Do not convert invisible field names + if (!visible || useVal == prohibited) { + return; + } + Mstring res, var(module->getTargetNamespace()); + QualifiedNames used_names = TTCN3ModuleInventory::getInstance().getTypenames(); + for (QualifiedNames::iterator n = used_ns.begin(); n; n = n->Next) { + used_names.push_back(n->Data); + } + QualifiedName q; + if(!used_names.empty()){ + q = used_names.back(); + }else { + q = QualifiedName(empty_string, empty_string); + } + XSDName2TTCN3Name(name.convertedValue, used_names, field_name, res, var); + name.convertedValue = res; + addVariant(V_onlyValue, var); + if (q.name != used_names.back().name) { + //If the name is converted then push to the used names list + used_ns.push_back(used_names.back()); + } + + for (List<SimpleType*>::iterator st = nameDepList.begin(); st; st = st->Next) { + st->Data->setTypeValue(res); + } +} + +void AttributeType::applyUseAttribute() { + if (isAnyAttr) { + return; + } + switch (useVal) { + case optional: + minOccurs = 0; + maxOccurs = 1; + break; + case required: + minOccurs = 1; + maxOccurs = 1; + break; + case prohibited: + minOccurs = 0; + maxOccurs = 0; + setInvisible(); + break; + } + isOptional = isOptional || (minOccurs == 0 && maxOccurs == 1); +} + +void AttributeType::applyNamespaceAttribute(VariantMode varLabel) { + List<Mstring> namespaces; + if (!nameSpace.empty()) { + expstring_t valueToSplitIntoTokens = mcopystr(nameSpace.c_str()); + char * token; + token = strtok(valueToSplitIntoTokens, " "); + while (token != NULL) { + namespaces.push_back(Mstring(token)); + token = strtok(NULL, " "); + } + Free(valueToSplitIntoTokens); + } + + Mstring any_ns; + bool first = true; + // Note: libxml2 will verify the namespace list according to the schema + // of XML Schema. It is either ##any, ##other, ##local, ##targetNamespace, + // or a list of (namespace reference | ##local | ##targetNamespace). + for (List<Mstring>::iterator ns = namespaces.begin(); ns; ns = ns->Next) { + static const Mstring xxany("##any"), xxother("##other"), xxlocal("##local"), + xxtargetNamespace("##targetNamespace"); + if (!first) any_ns += ", "; + + if (ns->Data == xxany) { + }// this must be the only element, nothing to add + else if (ns->Data == xxother) { // this must be the only element + if(first){ any_ns += " except "; } + any_ns += "unqualified"; + if (module->getTargetNamespace() != "NoTargetNamespace") { + any_ns += ", \'"; + any_ns += parent->getModule()->getTargetNamespace(); + any_ns += '\''; + } + }// The three cases below can happen multiple times + else { + if (first) any_ns += " from "; + // else a comma was already added + if (ns->Data == xxtargetNamespace) { + any_ns += '\''; + any_ns += parent->getModule()->getTargetNamespace(); + any_ns += '\''; + } else if (ns->Data == xxlocal) { + any_ns += "unqualified"; + } else { + any_ns += '\''; + any_ns += ns->Data; + any_ns += '\''; + } + } + if(!first || ns->Data != xxany){ + first = false; + } + } + + addVariant(varLabel, any_ns, true); +} + +void AttributeType::applyMinMaxOccursAttribute(unsigned long long min, unsigned long long max) { + minOccurs = min; + maxOccurs = max; +} + +void AttributeType::dump(unsigned int depth) const { + fprintf(stderr, "%*s %sField '%s' -> '%s' at %p\n", depth * 2, "", isVisible() ? "" : "(hidden)", + name.originalValueWoPrefix.c_str(), name.convertedValue.c_str(), (const void*) this); + fprintf(stderr, "%*s %s Type: \n", depth * 2, "", type.convertedValue.c_str()); + fprintf(stderr, "%*s type %s \n", (depth + 1) * 2, "", type.convertedValue.c_str()); + fprintf(stderr, "%*s (%llu .. %llu)\n", (depth + 1) * 2, "", minOccurs, maxOccurs); + fprintf(stderr, "%*s %d variants: ", (depth + 1) * 2, "", (int) variant.size()); + for (List<Mstring>::iterator var = variant.begin(); var; var = var->Next) { + fprintf(stderr, "%s, ", var->Data.c_str()); + } + fprintf(stderr, "\n%*s path =/%s/", (depth + 1) * 2, "", actualPath.c_str()); +} + +void AttributeType::printToFile(FILE* file, unsigned level) { + if (!isVisible()) { + return; + } + printComment(file, level); + indent(file, level); + if(enumeration.modified && hasVariant(Mstring("\"list\""))){ + printMinOccursMaxOccurs(file, false); + fprintf(file, "enumerated {\n"); + enumeration.sortFacets(); + enumeration.printToFile(file); + indent(file, level); + fprintf(file, "\n} %s", name.convertedValue.c_str()); + } else if (enumeration.modified) { + if (isFloatType(builtInBase)) { + fprintf(file, "%s %s (", type.convertedValue.c_str(), name.convertedValue.c_str()); + enumeration.sortFacets(); + enumeration.printToFile(file); + fputc(')', file); + } else { + fprintf(file, "enumerated {\n"); + enumeration.sortFacets(); + enumeration.printToFile(file); + fprintf(file, "\n"); + indent(file, level); + fprintf(file, "} %s", name.convertedValue.c_str()); + } + }else { + printMinOccursMaxOccurs(file, false); + int multiplicity = multi(module, getReference(), this); + if ((multiplicity > 1) && getReference().get_ref()) { + fprintf(file, "%s.", getReference().get_ref()->getModule()->getModulename().c_str()); + } + fprintf(file, "%s %s", type.convertedValue.c_str(), name.convertedValue.c_str()); + getPattern().printToFile(file); + getValue().printToFile(file); + getLength().printToFile(file); + } + if (isOptional || isAnyAttr) { + fprintf(file, " optional"); + } +} diff --git a/xsdconvert/AttributeType.hh b/xsdconvert/AttributeType.hh new file mode 100644 index 000000000..118eb6b9e --- /dev/null +++ b/xsdconvert/AttributeType.hh @@ -0,0 +1,131 @@ +/////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2000-2015 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 +/////////////////////////////////////////////////////////////////////////////// +#ifndef ATTRIBUTETYPE_HH_ +#define ATTRIBUTETYPE_HH_ + +#include "SimpleType.hh" +#include "GeneralTypes.hh" +#include "GeneralFunctions.hh" +#include "GeneralFunctions.hh" +#include "TTCN3Module.hh" +#include "TTCN3ModuleInventory.hh" +#include "ComplexType.hh" +#include "Annotation.hh" + +/** + * Type that contains information of a field of a TTCN-3 record or union + * + */ +class AttributeType : public SimpleType { + bool isAnyAttr; + + UseValue useVal; + + Mstring actualPath; + + Mstring nameSpace; + + bool used; // To know if already in the extended or restricted type + + TTCN3Module * origModule; + +public: + explicit AttributeType(ComplexType * a_complextype); + AttributeType(const AttributeType & other); + AttributeType & operator=(const AttributeType & rhs); + virtual ~AttributeType(); + void setTypeOfField(const Mstring& in); + void setNameOfField(const Mstring& in); + + void setOrigModule(TTCN3Module * m) { + origModule = m; + } + + const TTCN3Module * getOrigModule() const { + return origModule; + } + void setToAnyAttribute(); + void modifyValues(); + + void setUseVal(UseValue use_value) { + useVal = use_value; + } + void setFieldPath(const Mstring path); + void collectVariants(List<Mstring>& container); + + UseValue getUseVal() const { + return useVal; + } + + bool getUsed() const { + return used; + } + + void setUsed(bool use) { + used = use; + } + + const Mstring& getNameSpaceAttribute() const { + return nameSpace; + } + + void addNameSpaceAttribute(Mstring namespace_) { + if(nameSpace.empty()){ + nameSpace = namespace_; + }else { + nameSpace += " " + namespace_; + } + } + void nameConversion_names(QualifiedNames& used); + void applyUseAttribute(); + void applyNamespaceAttribute(VariantMode varLabel); + + void applyMinMaxOccursAttribute(unsigned long long min, unsigned long long max); + + const Mstring& getPath() const { + return actualPath; + } + + bool isAnyAttribute() const { + return isAnyAttr; + } + + void printToFile(FILE* file, unsigned level); + + void dump(unsigned int depth) const; + +}; + +inline bool compareAttributeNameSpaces(AttributeType * lhs, AttributeType * rhs) { + if (lhs->isAnyAttribute()) { + return false; + } + if (lhs->getOrigModule()->getTargetNamespace() == Mstring("NoTargetNamespace") && rhs->getOrigModule()->getTargetNamespace() == Mstring("NoTargetNamespace")) { + return false; + } else if (lhs->getOrigModule()->getTargetNamespace() == Mstring("NoTargetNamespace")) { + return true; + } else if (rhs->getOrigModule()->getTargetNamespace() == Mstring("NoTargetNamespace")) { + return false; + } else { + return lhs->getOrigModule()->getTargetNamespace() <= rhs->getOrigModule()->getTargetNamespace(); + } +} + +inline bool compareAttributeTypes(AttributeType * lhs, AttributeType * rhs) { + if (lhs->isAnyAttribute()) { + return false; + } + if (lhs->getOrigModule()->getTargetNamespace() == rhs->getOrigModule()->getTargetNamespace()) { + return lhs->getName().originalValueWoPrefix < rhs->getName().originalValueWoPrefix; + } else { + return false; + } +} + + +#endif /* ATTRIBUTETYPE_HH_ */ diff --git a/xsdconvert/ComplexType.cc b/xsdconvert/ComplexType.cc index 9c3b26215..9dfb32a1a 100644 --- a/xsdconvert/ComplexType.cc +++ b/xsdconvert/ComplexType.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -11,804 +11,742 @@ #include "XMLParser.hh" #include "TTCN3Module.hh" #include "TTCN3ModuleInventory.hh" -#include "SimpleType.hh" -#include "FieldType.hh" +#include "Annotation.hh" #include <assert.h> ComplexType::ComplexType(XMLParser * a_parser, TTCN3Module * a_module, ConstructType a_construct) -: RootType(a_parser, a_module, a_construct) -, fields() -, fields_final() -, actualLevel(1) -, actualPath() -, ctmode() -, fieldGenInfo() -, recGenInfo() -, attributeBases() -, embed_inSequence() -, embed_inChoice() -, embed_inAll() +: SimpleType(a_parser, a_module, a_construct) +, top(true) +, nillable(false) +, enumerated(false) +, embed(false) , with_union(false) +, first_child(false) +, fromAll(false) +, max_alt(0) +, skipback(0) +, lastType() +, actualPath(empty_string) +, actfield(this) +, nameDep(NULL) +, nillable_field(NULL) +, basefield(NULL) +, cmode(CT_undefined_mode) , resolved(No) -{ - initialSettings(); - ctmode.push_back(CT_undefined_mode); +, complexfields() +, attribfields() +, enumfields() +, tagNames() { + xsdtype = n_complexType; } -ComplexType::ComplexType(const ComplexType & other) -: RootType(other) -, fields() -, fields_final() -, actualLevel(other.actualLevel) -, actualPath(other.actualPath) -, ctmode(other.ctmode) -, fieldGenInfo(other.fieldGenInfo) -, recGenInfo(other.recGenInfo) -, attributeBases(other.attributeBases) -, embed_inSequence(other.embed_inSequence) -, embed_inChoice(other.embed_inChoice) -, embed_inAll(other.embed_inAll) +ComplexType::ComplexType(ComplexType & other) +: SimpleType(other) +, top(other.top) +, nillable(other.nillable) +, enumerated(other.enumerated) +, embed(other.embed) , with_union(other.with_union) -, resolved(other.resolved) -{ - for (List<FieldType*>::iterator field = other.fields.begin(); field; field = field->Next) { - fields.push_back(new FieldType(*(field->Data))); +, first_child(other.first_child) +, fromAll(other.fromAll) +, max_alt(other.max_alt) +, skipback(other.skipback) +, lastType(other.lastType) +, actualPath(other.actualPath) +, actfield(this) +, nameDep(other.nameDep) +, nillable_field(NULL) +, basefield(NULL) +, cmode(other.cmode) +, resolved(other.resolved) { + type.originalValueWoPrefix = other.type.originalValueWoPrefix; + for (List<AttributeType*>::iterator attr = other.attribfields.begin(); attr; attr = attr->Next) { + attribfields.push_back(new AttributeType(*attr->Data)); + attribfields.back()->parent = this; + } + + for (List<ComplexType*>::iterator field = other.complexfields.begin(); field; field = field->Next) { + complexfields.push_back(new ComplexType(*field->Data)); + complexfields.back()->parent = this; + if(field->Data == other.basefield){ + basefield = complexfields.back(); + }else if(field->Data == other.nillable_field){ + nillable_field = complexfields.back(); + } } - for (List<FieldType*>::iterator field = other.fields_final.begin(); field; field = field->Next) { - fields_final.push_back(new FieldType(*(field->Data))); + + if (other.nameDep != NULL) { + SimpleType* dep = other.nameDep; + if(dep->getSubstitution() != NULL){ + dep->getSubstitution()->addToNameDepList(this); + nameDep = dep->getSubstitution(); + }else { + other.nameDep->addToNameDepList(this); + } } } -ComplexType::ComplexType(const SimpleType & other, CT_fromST c) -: RootType(other) -, fields() -, fields_final() -, actualLevel(1) -, actualPath() -, ctmode() -, fieldGenInfo() -, recGenInfo() -, attributeBases() -, embed_inSequence() -, embed_inChoice() -, embed_inAll() +ComplexType::ComplexType(ComplexType * other) +: SimpleType(other->getParser(), other->getModule(), c_unknown) +, top(false) +, nillable(false) +, enumerated(false) +, embed(false) , with_union(false) +, first_child(false) +, fromAll(false) +, max_alt(0) +, skipback(0) +, lastType() +, actualPath(empty_string) +, actfield(this) +, nameDep(NULL) +, nillable_field(NULL) +, basefield(NULL) +, cmode(CT_undefined_mode) , resolved(No) -{ - initialSettings(); +, complexfields() +, attribfields() +, enumfields() +, tagNames() { + xsdtype = n_complexType; + parent = other; + outside_reference = ReferenceData(); +} - module->replaceLastMainType(this); - module->setActualXsdConstruct(c_complexType); - construct = c_complexType; - ctmode.push_back(CT_simpletype_mode); - - switch (c) - { - case fromTagUnion: - type.upload(Mstring("union")); - with_union = true; - break; - case fromTagNillable: - addVariant(V_useNil); - type.upload(Mstring("record")); - break; - case fromTagComplexType: - type.upload(Mstring("record")); - break; +ComplexType::ComplexType(const SimpleType & other, CT_fromST c) +: SimpleType(other) +, top(true) +, nillable(false) +, enumerated(false) +, embed(false) +, with_union(false) +, first_child(false) +, fromAll(false) +, max_alt(0) +, skipback(0) +, lastType() +, actualPath(empty_string) +, actfield(this) +, nameDep(NULL) +, nillable_field(NULL) +, basefield(NULL) +, cmode(CT_simpletype_mode) +, resolved(No) +, complexfields() +, attribfields() +, enumfields() +, tagNames() { + + if(c != fromTagSubstition){ + module->replaceLastMainType(this); + module->setActualXsdConstruct(c_complexType); } -} + construct = c_complexType; -ComplexType::~ComplexType() -{ - for (List<FieldType*>::iterator field = fields.begin(); field; field = field->Next) { - delete(field->Data); + switch (c) { + case fromTagUnion: + type.upload(Mstring("union")); + with_union = true; + xsdtype = n_union; + break; + case fromTagNillable: + addVariant(V_useNil); + type.upload(Mstring("record")); + break; + case fromTagComplexType: + type.upload(Mstring("record")); + xsdtype = n_complexType; + break; + case fromTagSubstition: + type.upload(Mstring("union")); + name.upload(getName().originalValueWoPrefix + Mstring("_group")); + xsdtype = n_union; + subsGroup = this; + variant.clear(); + enumeration.modified = false; + value.modified = false; + pattern.modified = false; + length.modified = false; + whitespace.modified = false; + break; } } -void ComplexType::initialSettings() -{ - FieldType * invisibleField = new FieldType(this); - fields.push_back(invisibleField); - - invisibleField->setNameOfField(Mstring("onlyForStoringAttributes"), false); - invisibleField->setInvisible(); +ComplexType::~ComplexType() { + for (List<ComplexType*>::iterator field = complexfields.begin(); field; field = field->Next) { + delete field->Data; + field->Data = NULL; + } + complexfields.clear(); - attributeBases.push_back(AttrBaseType(invisibleField)); - recGenInfo.push_back(GenerationType(NULL, 2)); + for (List<AttributeType*>::iterator field = attribfields.begin(); field; field = field->Next) { + delete field->Data; + field->Data = NULL; + } + attribfields.clear(); } -void ComplexType::loadWithValues() -{ +void ComplexType::loadWithValues() { + //Find the last field where the tag is found + if (this != actfield) { + actfield->loadWithValues(); + return; + } + const XMLParser::TagAttributes & atts = parser->getActualTagAttributes(); - - switch (parser->getActualTagName()) - { - case XMLParser::n_sequence: - if (!embed_inChoice.empty() && embed_inChoice.back().valid) { - generateRecord(atts.minOccurs, atts.maxOccurs); - embed_inChoice.back().strictValid = false; - } - else if (atts.minOccurs != 1 || atts.maxOccurs != 1) { - generateRecord(atts.minOccurs, atts.maxOccurs); - } - - embed_inSequence.push_back(EmbeddedType(parser->getActualDepth(), atts.minOccurs, atts.maxOccurs)); - break; - - case XMLParser::n_choice: { - if (module->getActualXsdConstruct() == c_group) { - type.upload(Mstring("union")); + + switch (parser->getActualTagName()) { + case n_sequence: + if (!top && xsdtype != n_sequence && xsdtype != n_complexType && xsdtype != n_extension && xsdtype != n_restriction && xsdtype != n_element) { + //Create new record + ComplexType * rec = new ComplexType(this); + rec->type.upload(Mstring("record")); + rec->name.upload(Mstring("sequence")); + rec->addVariant(V_untagged); + rec->setMinMaxOccurs(atts.minOccurs, atts.maxOccurs); + rec->setXsdtype(n_sequence); + complexfields.push_back(rec); + actfield = rec; + } else { + //Do not create new record, it is an embedded sequence + if (xsdtype == n_sequence && atts.minOccurs == 1 && atts.maxOccurs == 1) { + skipback += 1; + } + type.upload(Mstring("record")); + xsdtype = n_sequence; + setMinMaxOccurs(atts.minOccurs, atts.maxOccurs); + } break; - } - generateUnion(atts.minOccurs, atts.maxOccurs); - - embed_inChoice.push_back(EmbeddedType(parser->getActualDepth())); - break; } - - case XMLParser::n_all: { - FieldType * new_attribute = generateAttribute(); - new_attribute->setTypeOfField(Mstring("enumerated")); - new_attribute->setNameOfField(Mstring("order"), false); - new_attribute->setBuiltInBase(Mstring("string")); - new_attribute->getEnumeration().modified = true; - new_attribute->applyMinMaxOccursAttribute(0, ULLONG_MAX); - - if (recGenInfo.size() == 1) { - addVariant(V_useOrder); // use the default false - from TR HL10354 - } - else { - recGenInfo.back().field->addVariant(V_useOrder); // use the default false - from TR HL10354 - } - - embed_inAll.push_back(EmbeddedType(parser->getActualDepth(), atts.minOccurs, atts.maxOccurs, new_attribute)); - break; } - - case XMLParser::n_restriction: - case XMLParser::n_extension: - if (atts.base.getValueWithoutPrefix(':') == name.convertedValue) // TODO recusivity + case n_choice: + if (!top || xsdtype != n_group) { + //Create new union field + ComplexType * choice = new ComplexType(this); + choice->type.upload(Mstring("union")); + choice->name.upload(Mstring("choice")); + choice->setXsdtype(n_choice); + choice->addVariant(V_untagged); + choice->setMinMaxOccurs(atts.minOccurs, atts.maxOccurs); + actfield = choice; + complexfields.push_back(choice); + } else { + xsdtype = n_choice; + type.upload(Mstring("union")); + } + break; + case n_all: { - /* fields_for_restriction.back()->setTypeOfField(name.value + "_anonymus_extension"); - ComplexType * new_CT = new ComplexType(*this); - module->addMainType(new_CT); - new_CT->setNameOfMainType(name.value + "_anonymus_extension", doc->getSchemaname(), doc->getTargetNamespace()); - */ } - else if (ctmode.back() == CT_simpletype_mode) { - if (!fieldGenInfo.empty()) { - fieldGenInfo.back().field->setTypeOfField(atts.base); - fieldGenInfo.back().field->setReference(atts.base); - if (parser->getActualTagName() == XMLParser::n_restriction) - fieldGenInfo.back().field->setMode(SimpleType::restrictionMode); - else - fieldGenInfo.back().field->setMode(SimpleType::extensionMode); - attributeBases.push_back(AttrBaseType(fieldGenInfo.back().field, parser->getActualDepth())); - } - } - else if (ctmode.back() == CT_complextype_mode){ - FieldType * new_field = generateField(); - new_field->setTypeOfField(atts.base); - new_field->setNameOfField(Mstring("base"), false); - new_field->setReference(atts.base); - if (parser->getActualTagName() == XMLParser::n_restriction) - fieldGenInfo.back().field->setMode(SimpleType::restrictionMode); - else - fieldGenInfo.back().field->setMode(SimpleType::extensionMode); - new_field->addVariant(V_untagged); - attributeBases.push_back(AttrBaseType(new_field, parser->getActualDepth())); - if (atts.base.getValueWithoutPrefix(':') == "anyType") new_field->setInvisible(); - } - break; - - case XMLParser::n_element: { - if (atts.nillable) + //Create the record of enumerated field + xsdtype = n_all; + ComplexType * enumField = new ComplexType(this); + enumField->setTypeValue(Mstring("enumerated")); + enumField->setNameValue(Mstring("order")); + enumField->setBuiltInBase(Mstring("string")); + enumField->enumerated = true; + enumField->setMinMaxOccurs(0, ULLONG_MAX, false); + setMinMaxOccurs(atts.minOccurs, atts.maxOccurs); + addVariant(V_useOrder); + complexfields.push_back(enumField); + if (atts.minOccurs == 0) { + isOptional = true; + } + break; + } + case n_restriction: + mode = restrictionMode; + //If it is an xsd:union then call SimpleType::loadWithValues + if (parent != NULL && parent->with_union) { + SimpleType::loadWithValues(); + break; + } + if (cmode == CT_simpletype_mode) { + //if it is from a SimpleType, then create a base field + ComplexType * f = new ComplexType(this); + f->name.upload(Mstring("base")); + f->type.upload(atts.base); + f->setReference(atts.base); + f->addVariant(V_untagged); + complexfields.push_back(f); + basefield = f; + actfield = f; + } else if (cmode == CT_complextype_mode) { + setReference(atts.base); + xsdtype = n_restriction; + } + break; + case n_extension: + mode = extensionMode; + if (cmode == CT_simpletype_mode) { + //if it is from a SimpleType, then create a base field + ComplexType * f = new ComplexType(this); + f->name.upload(Mstring("base")); + f->type.upload(atts.base); + f->setReference(atts.base); + f->addVariant(V_untagged); + complexfields.push_back(f); + basefield = f; + actfield = f; + } else if (cmode == CT_complextype_mode) { + setReference(atts.base); + xsdtype = n_extension; + } + break; + case n_element: { - FieldType * new_field = generateField(); - if (ctmode.back() == CT_simpletype_mode) { - if (atts.type.empty()) { - new_field->setTypeOfField(Mstring("record")); - new_field->setNameOfField(Mstring("content"), true); - actualLevel++; - recGenInfo.push_back(GenerationType(new_field, parser->getActualDepth() + 2)); - } - else { - new_field->setTypeOfField(atts.type); - new_field->setNameOfField(Mstring("content"), false); - new_field->setReference(atts.type, true); - } - new_field->applyMinMaxOccursAttribute(0, 1); - } - else { - new_field->setTypeOfField(Mstring("record")); - new_field->setNameOfField(atts.name, true); - new_field->addVariant(V_useNil, empty_string, true); - new_field->applyMinMaxOccursAttribute(atts.minOccurs, atts.maxOccurs, true); - actualLevel++; - recGenInfo.push_back(GenerationType(new_field, parser->getActualDepth())); - attributeBases.push_back(AttrBaseType(new_field, parser->getActualDepth())); - - FieldType * new_field2 = generateField(); - if (atts.type.empty()) { - new_field2->setTypeOfField(Mstring("record")); - new_field2->setNameOfField(Mstring("content"), true); - actualLevel++; - recGenInfo.push_back(GenerationType(new_field2, parser->getActualDepth() + 2)); - } - else { - new_field2->setTypeOfField(atts.type); - new_field2->setNameOfField(Mstring("content"), false); - new_field2->setReference(atts.type, true); + if (atts.nillable) { + if(cmode == CT_simpletype_mode){ + //If a simple top level element is nillable + ComplexType * nilrec = new ComplexType(this); + if (atts.type.empty()) { + nilrec->type.upload(Mstring("record")); + } else { + nilrec->type.upload(atts.type); + } + nilrec->name.upload(Mstring("content")); + nilrec->isOptional = true; + nilrec->nillable = true; + setMinMaxOccurs(atts.minOccurs, atts.maxOccurs); + complexfields.push_back(nilrec); + type.upload(Mstring("record")); + name.upload(atts.name); + actfield = nilrec; + nillable_field = nilrec; + } else { + //From a complexType element is nillable + ComplexType * record = new ComplexType(this); + ComplexType * nilrec = new ComplexType(record); + if (atts.type.empty()) { + nilrec->type.upload(Mstring("record")); + } else { + nilrec->type.upload(atts.type); + } + record->name.upload(atts.name); + record->type.upload(Mstring("record")); + record->complexfields.push_back(nilrec); + record->addVariant(V_useNil); + record->nillable_field = nilrec; + record->setMinMaxOccurs(atts.minOccurs, atts.maxOccurs); + + nilrec->name.upload(Mstring("content")); + nilrec->nillable = true; + nilrec->isOptional = true; + nilrec->tagNames.push_back(parser->getActualTagName()); + complexfields.push_back(record); + actfield = nilrec; } - new_field2->applyMinMaxOccursAttribute(0, 1); - } - ctmode.push_back(CT_simpletype_mode); - return; - } - - FieldType * new_field = generateField(); - unsigned long long int temp_minOccurs = atts.minOccurs; - unsigned long long int temp_maxOccurs = atts.maxOccurs; - - if (!embed_inAll.empty() && embed_inAll.back().valid) { - assert((embed_inAll.back().minOccurs | 1ULL) == 1ULL); // 0 or 1 - temp_minOccurs = llmin(atts.minOccurs, embed_inAll.back().minOccurs); - assert(embed_inAll.back().maxOccurs == 1ULL); // which makes the following somewhat redundant - temp_maxOccurs = llmax(atts.maxOccurs, embed_inAll.back().maxOccurs); - - if (embed_inAll.back().depth + 1 == parser->getActualDepth()) { - // we are inside an <xs:all> - if ((temp_minOccurs | 1ULL) != 1ULL) { - printError(getModule()->getSchemaname(), name.convertedValue, - Mstring("Inside <all>, minOccurs must be 0 or 1")); - TTCN3ModuleInventory::incrNumErrors(); + }else { + //It is a simple element + ComplexType* c = new ComplexType(this); + c->setXsdtype(n_element); + c->type.upload(atts.type); + c->name.upload(atts.name); + c->setReference(atts.type); + c->setMinMaxOccurs(atts.minOccurs, atts.maxOccurs); + c->applyDefaultAttribute(atts.default_); + c->applyFixedAttribute(atts.fixed); + c->setElementFormAs(atts.form); + if (atts.ref.empty()) { + c->setReference(atts.type); + } else { + c->applyRefAttribute(atts.ref); + c->name.upload(atts.ref.getValueWithoutPrefix(':')); + c->type.upload(atts.ref); } - - if (temp_maxOccurs != 1ULL) { - printError(getModule()->getSchemaname(), name.convertedValue, - Mstring("Inside <all>, maxOccurs must be 1")); - TTCN3ModuleInventory::incrNumErrors(); + c->applySubstitionGroupAttribute(atts.substitionGroup); + c->applyBlockAttribute(atts.block); + actfield = c; + + //Inside all have some special conditions + if (xsdtype == n_all) { + if (atts.minOccurs > 1) { + printError(getModule()->getSchemaname(), name.convertedValue, + Mstring("Inside <all>, minOccurs must be 0 or 1")); + TTCN3ModuleInventory::incrNumErrors(); + } + if (atts.maxOccurs != 1) { + printError(getModule()->getSchemaname(), name.convertedValue, + Mstring("Inside <all>, maxOccurs must be 1")); + TTCN3ModuleInventory::incrNumErrors(); + } + c->fromAll = true; + complexfields.push_back(c); + if (isOptional) { + c->isOptional = true; + } + } else { + complexfields.push_back(c); } } - - Mstring res, var; - XSDName2TTCN3Name(atts.name, embed_inAll.back().order_attribute->getEnumeration().items_string, - enum_id_name, res, var); - embed_inAll.back().valid = false; - // We now throw away the result of the name transformation above. - // The only lasting effect is the addition to the enumeration items. - } - if (!embed_inSequence.empty() && embed_inSequence.back().valid) { - if (embed_inSequence.back().maxOccurs == 0) { - temp_minOccurs = 0; - temp_maxOccurs = 0; - } - } - - if (atts.ref.empty()) { - new_field->setReference(atts.type, true); - } - else { - new_field->applyRefAttribute(atts.ref); - } - new_field->setTypeOfField(atts.type); - new_field->setNameOfField(atts.name, false); - new_field->applyDefaultAttribute(atts.default_); - new_field->applyFixedAttribute(atts.fixed); - new_field->applyMinMaxOccursAttribute(temp_minOccurs, temp_maxOccurs, true); - attributeBases.push_back(AttrBaseType(new_field, parser->getActualDepth())); - - ctmode.push_back(CT_simpletype_mode); - break; } - - case XMLParser::n_attribute: { - FieldType * new_attribute = generateAttribute(); - if (module->getActualXsdConstruct() != c_attributeGroup) { - new_attribute->addVariant(V_attribute); - } - unsigned long long int temp_minOccurs = atts.minOccurs; - unsigned long long int temp_maxOccurs = atts.maxOccurs; - if (atts.ref.empty()) { - new_attribute->setReference(atts.type, true); - } - else { - new_attribute->applyRefAttribute(atts.ref); - } - new_attribute->setTypeOfField(atts.type); - new_attribute->setNameOfField(atts.name, false); - new_attribute->applyDefaultAttribute(atts.default_); - new_attribute->applyFixedAttribute(atts.fixed); - new_attribute->applyUseAttribute(atts.use, temp_minOccurs, temp_maxOccurs); - new_attribute->applyMinMaxOccursAttribute(temp_minOccurs, temp_maxOccurs, true); - ctmode.push_back(CT_simpletype_mode); - break; } - - case XMLParser::n_any: { - FieldType * new_field = generateField(); - new_field->setTypeOfField(Mstring("xsd:string")); - new_field->setNameOfField(Mstring("elem"), false); - new_field->applyMinMaxOccursAttribute(atts.minOccurs, atts.maxOccurs, true); - new_field->applyNamespaceAttribute(V_anyElement, atts.namespace_); - break; } - - case XMLParser::n_anyAttribute: { - FieldType * new_field = generateAttribute(); - new_field->setTypeOfField(Mstring("xsd:string")); - new_field->setNameOfField(Mstring("attr"), false); - new_field->setToAnyAttribute(); - new_field->applyMinMaxOccursAttribute(0, ULLONG_MAX); - new_field->applyNamespaceAttribute(V_anyAttributes, atts.namespace_); - break; } - - case XMLParser::n_attributeGroup: - name.upload(atts.name); - if (!atts.ref.empty()) { - FieldType * new_attribute = generateAttribute(); - new_attribute->applyRefAttribute(atts.ref); - } - ctmode.push_back(CT_complextype_mode); - break; - - case XMLParser::n_group: { - if (parser->getActualDepth() == 1) { - name.upload(atts.name); break; } - - FieldType * new_field = generateField(); - new_field->applyRefAttribute(atts.ref); - if (atts.minOccurs != 1 || atts.maxOccurs != 1) { - new_field->applyMinMaxOccursAttribute(atts.minOccurs, atts.maxOccurs, true); - } - ctmode.push_back(CT_complextype_mode); - break; } - - case XMLParser::n_union: { - if (fieldGenInfo.empty()) { - type.upload(Mstring("union")); - addVariant(V_useUnion); - } - else { - fieldGenInfo.back().field->setTypeValue(Mstring("union")); - fieldGenInfo.back().field->addVariant(V_useUnion); - fieldGenInfo.push_back(GenerationType(fieldGenInfo.back().field, parser->getActualDepth())); - recGenInfo.push_back(GenerationType(fieldGenInfo.back().field, parser->getActualDepth())); - actualLevel++; - addToActualPath(fieldGenInfo.back().field->getVariantId() + "."); - } - with_union = true; - List<Mstring> types; - if (!atts.memberTypes.empty()) { - expstring_t valueToSplitIntoTokens = mcopystr(atts.memberTypes.c_str()); - char * token; - token = strtok (valueToSplitIntoTokens," "); - while (token != NULL) - { - types.push_back(Mstring(token)); - token = strtok (NULL, " "); - } - Free(valueToSplitIntoTokens); - for (List<Mstring>::iterator memberType = types.begin(); memberType; memberType = memberType->Next) - { - Mstring tmp_name = memberType->Data.getValueWithoutPrefix(':'); - FieldType * new_field = generateField(); - new_field->setNameOfField(tmp_name, false); - new_field->setTypeOfField(memberType->Data); - new_field->setReference(memberType->Data); - } - } - break; } - - case XMLParser::n_simpleType: - case XMLParser::n_simpleContent: { - Mstring base; - if (with_union) + case n_attribute: { - expstring_t tmp_string = NULL; - if (recGenInfo.back().max_alt == 0) { - tmp_string = mcopystr("alt_"); + AttributeType * attribute = new AttributeType(this); + attribute->addVariant(V_attribute); + attribute->applyMinMaxOccursAttribute(0, 1); + attribute->setXsdtype(n_attribute); + attribute->applyDefaultAttribute(atts.default_); + attribute->applyFixedAttribute(atts.fixed); + attribute->setUseVal(atts.use); + attribute->setAttributeFormAs(atts.form); + lastType = n_attribute; + if (atts.ref.empty()) { + attribute->setNameOfField(atts.name); + attribute->setTypeOfField(atts.type); + attribute->setReference(atts.type, true); + } else { + attribute->applyRefAttribute(atts.ref); } - else - { - tmp_string = mprintf("alt_%d", recGenInfo.back().max_alt); + actfield = attribute; + + //In case of nillable parent it is difficult... + if (nillable && parent != NULL) { + parent->attribfields.push_back(attribute); + attribute->parent = parent; + } else if (nillable && !complexfields.empty() && parent == NULL) { + complexfields.back()->attribfields.push_back(attribute); + } else if (parent != NULL && (parent->mode == extensionMode || parent->mode == restrictionMode) && name.convertedValue == Mstring("base")) { + parent->attribfields.push_back(attribute); + attribute->parent = parent; + } else { + attribfields.push_back(attribute); } - base = tmp_string; // NULL is OK - Free(tmp_string); - recGenInfo.back().max_alt++; + break; } - else { - base = "base"; + case n_any: + { + ComplexType * any = new ComplexType(this); + any->name.upload(Mstring("elem")); + any->type.upload(Mstring("xsd:string")); + any->applyNamespaceAttribute(V_anyElement, atts.namespace_); + any->setMinMaxOccurs(atts.minOccurs, atts.maxOccurs); + any->setXsdtype(n_any); + complexfields.push_back(any); + break; } - if (parser->getParentTagName() != XMLParser::n_element && - parser->getParentTagName() != XMLParser::n_attribute) + case n_anyAttribute: { - FieldType * new_field = generateField(); - new_field->setNameOfField(base, false); - if (new_field->getName().convertedValue == "base") - { - new_field->addVariant(V_untagged); // name = base + AttributeType * anyattr = new AttributeType(this); + anyattr->setXsdtype(n_anyAttribute); + anyattr->setNameOfField(Mstring("attr")); + anyattr->setTypeValue(Mstring("xsd:string")); + anyattr->setToAnyAttribute(); + anyattr->applyMinMaxOccursAttribute(0, ULLONG_MAX); + anyattr->addNameSpaceAttribute(atts.namespace_); + actfield = anyattr; + + //In case of nillable parent it is difficult... + if (nillable && parent != NULL) { + parent->attribfields.push_back(anyattr); + anyattr->parent = parent; + } else if (nillable && !complexfields.empty() && parent == NULL) { + complexfields.back()->attribfields.push_back(anyattr); + } else if (parent != NULL && (parent->mode == extensionMode || parent->mode == restrictionMode) && name.convertedValue == Mstring("base")) { + parent->attribfields.push_back(anyattr); + anyattr->parent = parent; + } else { + attribfields.push_back(anyattr); } - else - { - new_field->addVariant(V_nameAs, empty_string, true); // name = alt_x - } - if (!embed_inChoice.empty()) embed_inChoice.back().valid = false; + break; } - if (!embed_inChoice.empty()) embed_inChoice.back().strictValid = false; - - ctmode.push_back(CT_simpletype_mode); - break; } - - case XMLParser::n_complexType: - name.upload(atts.name); - // fall through - case XMLParser::n_complexContent: - if (!fieldGenInfo.empty()) + case n_attributeGroup: + if (!atts.ref.empty()) { + ComplexType * g = new ComplexType(this); + g->setXsdtype(n_attributeGroup); + g->setReference(atts.ref); + complexfields.push_back(g); + actfield = g; + } else { + xsdtype = n_attributeGroup; + name.upload(Mstring(atts.name)); + setInvisible(); + } + break; + case n_group: + if (atts.ref.empty()) { + //It is a definition + xsdtype = n_group; + name.upload(atts.name); + } else { + //It is a reference + ComplexType* group = new ComplexType(this); + group->setXsdtype(n_group); + group->name.upload(atts.name); + group->setReference(Mstring(atts.ref)); + group->setMinMaxOccurs(atts.minOccurs, atts.maxOccurs); + complexfields.push_back(group); + actfield = group; + } + break; + case n_union: { - if (fieldGenInfo.back().field->getType().convertedValue != "record") { - fieldGenInfo.back().field->setTypeOfField(Mstring("record")); - fieldGenInfo.back().field->setNameOfField(empty_string, true); - actualLevel++; - recGenInfo.push_back(GenerationType(fieldGenInfo.back().field, parser->getActualDepth())); + with_union = true; + xsdtype = n_union; + type.upload(Mstring("union")); + addVariant(V_useUnion); + if (!atts.memberTypes.empty()) { + List<Mstring> types; + //Get the union values + expstring_t valueToSplitIntoTokens = mcopystr(atts.memberTypes.c_str()); + char * token; + token = strtok(valueToSplitIntoTokens, " "); + while (token != NULL) { + types.push_back(Mstring(token)); + token = strtok(NULL, " "); + } + Free(valueToSplitIntoTokens); + + //Create the union elements and push into the container + for (List<Mstring>::iterator memberType = types.begin(); memberType; memberType = memberType->Next) { + Mstring tmp_name = memberType->Data.getValueWithoutPrefix(':'); + ComplexType * f = new ComplexType(this); + f->name.upload(tmp_name); + f->type.upload(memberType->Data); + f->setXsdtype(n_simpleType); + f->setReference(memberType->Data); + complexfields.push_back(f); + } } + break; } - if (atts.mixed) + case n_simpleType: + case n_simpleContent: { - FieldType * new_attribute = generateAttribute(); - new_attribute->setTypeOfField(Mstring("string")); - new_attribute->setNameOfField(Mstring("embed_values"), false); - new_attribute->applyMinMaxOccursAttribute(0, ULLONG_MAX); - if (attributeBases.size() == 1) { - addVariant(V_embedValues); - } - else { - attributeBases.back().base->addVariant(V_embedValues); // TR HL14121 + xsdtype = parser->getActualTagName(); + cmode = CT_simpletype_mode; + Mstring fieldname; + if (with_union) { + if (max_alt == 0) { + fieldname = Mstring("alt_"); + } else { + fieldname = mprintf("alt_%d", max_alt); + } + max_alt++; + ComplexType * field = new ComplexType(this); + field->name.upload(fieldname); + field->setXsdtype(n_simpleType); + field->addVariant(V_nameAs, empty_string, true); + complexfields.push_back(field); + actfield = field; } - recGenInfo.back().embed_values_attribute = new_attribute; - } - ctmode.push_back(CT_complextype_mode); - if (!embed_inChoice.empty()) { - embed_inChoice.back().valid = false; - embed_inChoice.back().strictValid = false; + break; } - break; - - case XMLParser::n_length: - case XMLParser::n_minLength: - case XMLParser::n_maxLength: - case XMLParser::n_pattern: - case XMLParser::n_enumeration: - case XMLParser::n_whiteSpace: - case XMLParser::n_minInclusive: - case XMLParser::n_maxInclusive: - case XMLParser::n_minExclusive: - case XMLParser::n_maxExclusive: - case XMLParser::n_totalDigits: - if (!fieldGenInfo.empty()) - fieldGenInfo.back().field->loadWithValues(); - break; - - case XMLParser::n_annotation: - case XMLParser::n_documentation: - break; - - case XMLParser::n_label: - addComment(Mstring("LABEL:")); - break; - - case XMLParser::n_definition: - addComment(Mstring("DEFINITION:")); - break; - - default: - break; + case n_complexType: + name.upload(atts.name); + type.upload(Mstring("record")); + applyAbstractAttribute(atts.abstract); + applySubstitionGroupAttribute(atts.substitionGroup); + applyBlockAttribute(atts.block); + // fall through + case n_complexContent: + tagNames.push_back(parser->getActualTagName()); + cmode = CT_complextype_mode; + if (atts.mixed) { + ComplexType * mixed = new ComplexType(this); + mixed->name.upload(Mstring("embed_values")); + mixed->type.upload(Mstring("xsd:string")); + mixed->setMinMaxOccurs(0, ULLONG_MAX, false); + mixed->embed = true; + complexfields.push_back(mixed); + addVariant(V_embedValues); + } + break; + case n_list: + case n_length: + case n_minLength: + case n_maxLength: + case n_pattern: + case n_enumeration: + case n_whiteSpace: + case n_minInclusive: + case n_maxInclusive: + case n_minExclusive: + case n_maxExclusive: + case n_totalDigits: + case n_fractionDigits: + SimpleType::loadWithValues(); + break; + case n_label: + addComment(Mstring("LABEL:")); + break; + case n_definition: + addComment(Mstring("DEFINITION:")); + break; + default: + break; } } // called from endelementHandler -void ComplexType::modifyValues() -{ - if (!fieldGenInfo.empty() && parser->getActualDepth() == fieldGenInfo.back().depth) { - fieldGenInfo.pop_back(); +void ComplexType::modifyValues() { + if (this != actfield) { + actfield->modifyValues(); + return; + } + if (xsdtype == n_sequence) { + skipback = skipback - 1; } - if (!recGenInfo.empty() && parser->getActualDepth() == recGenInfo.back().depth && recGenInfo.size() != 1) { - actualLevel--; - - actualPath = truncatePathWithOneElement(actualPath); - if (recGenInfo.size() > 1) { - recGenInfo.pop_back(); + if ((xsdtype == n_element || + xsdtype == n_complexType || + xsdtype == n_complexContent || + xsdtype == n_all || + xsdtype == n_attribute || + xsdtype == n_anyAttribute || + xsdtype == n_choice || + xsdtype == n_group || + xsdtype == n_attributeGroup || + xsdtype == n_extension || + xsdtype == n_restriction || + xsdtype == n_simpleType || + 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(); + } + tagNames.pop_back(); + } else if (tagNames.empty()) { + parent->actfield = parent; + parent->lastType = xsdtype; } } - if (!embed_inSequence.empty() && parser->getActualDepth() == embed_inSequence.back().depth + 1) { - embed_inSequence.back().valid = true; - } - if (!embed_inSequence.empty() && parser->getActualDepth() == embed_inSequence.back().depth) { - embed_inSequence.pop_back(); - } - if (!embed_inChoice.empty() && parser->getActualDepth() == embed_inChoice.back().depth + 1) { - embed_inChoice.back().valid = true; - embed_inChoice.back().strictValid = true; - } - if (!embed_inChoice.empty() && parser->getActualDepth() == embed_inChoice.back().depth) { - embed_inChoice.pop_back(); - } - if (!embed_inAll.empty() && parser->getActualDepth() == embed_inAll.back().depth + 1) { - embed_inAll.back().valid = true; +} + +void ComplexType::referenceResolving() { + if (resolved != No) return; // nothing to do + if(this == subsGroup){ + resolved = Yes; + return; } - if (!embed_inAll.empty() && parser->getActualDepth() == embed_inAll.back().depth) { - embed_inAll.pop_back(); + resolved = InProgress; + for (List<ComplexType*>::iterator ct = complexfields.begin(); ct; ct = ct->Next) { + // Referenece resolving of ComplexTypes + ct->Data->referenceResolving(); } - // why is there no "valid = true" for attributeBases? - if (!attributeBases.empty() && parser->getActualDepth() == attributeBases.back().depth) { - attributeBases.pop_back(); + for (List<AttributeType*>::iterator attr = attribfields.begin(); attr; attr = attr->Next) { + //Reference resolving for Attributes + resolveAttribute(attr->Data); } - - switch (parser->getActualTagName()) - { - case XMLParser::n_simpleType: - case XMLParser::n_simpleContent: - case XMLParser::n_complexType: - case XMLParser::n_complexContent: - case XMLParser::n_element: - case XMLParser::n_attribute: - case XMLParser::n_group: - case XMLParser::n_attributeGroup: - if (ctmode.size() == 3 && ctmode.front() == CT_undefined_mode - && ctmode.begin()->Next->Data == CT_complextype_mode) { - // the first two are always: 1."undefined", 2."complex" - ctmode.front() = ctmode.back(); - } - ctmode.pop_back(); - break; - default: - break; + + reference_resolving_funtion(); + + if(!substitionGroup.empty()){ + addToSubstitutions(); } - return; -} - -FieldType * ComplexType::generateField() -{ - FieldType * new_field = new FieldType(this); - fields.push_back(new_field); - - new_field->setLevel(actualLevel); - new_field->setElementFormAs(module->getElementFormDefault()); - - fieldGenInfo.push_back(GenerationType(new_field, parser->getActualDepth())); - - return new_field; + resolved = Yes; } -FieldType * ComplexType::generateAttribute() -{ - FieldType * theBase = attributeBases.back().base; - FieldType * new_attribute = new FieldType(this); - theBase->addAttribute(new_attribute); - - new_attribute->setLevel(theBase->getLevel()); - if (theBase->getType().convertedValue == "record" || theBase->getType().convertedValue == "union") { - new_attribute->incrLevel(); +void ComplexType::reference_resolving_funtion() { + //Every child element references are resolved here. + if (outside_reference.empty() && basefield == NULL) { + return; } - new_attribute->setAttributeFormAs(module->getAttributeFormDefault()); - - fieldGenInfo.push_back(GenerationType(new_attribute, parser->getActualDepth())); - return new_attribute; -} - -FieldType * ComplexType::generateRecord(unsigned long long int a_minOccurs, unsigned long long int a_maxOccurs) -{ - FieldType * new_record = new FieldType(this); - fields.push_back(new_record); - - new_record->setTypeOfField(Mstring("record")); - new_record->setNameOfField(Mstring("sequence"), true); - new_record->addVariant(V_untagged, empty_string, true); - new_record->setLevel(actualLevel++); - new_record->setElementFormAs(module->getElementFormDefault()); - new_record->applyMinMaxOccursAttribute(a_minOccurs, a_maxOccurs, true); + SimpleType * st = (SimpleType*) TTCN3ModuleInventory::getInstance().lookup(this, want_BOTH); + if (st == NULL && basefield == NULL) { + printError(module->getSchemaname(), name.convertedValue, + "Reference for a non-defined type: " + getReference().repr()); + TTCN3ModuleInventory::getInstance().incrNumErrors(); + outside_reference.set_resolved(NULL); + return; + } - fieldGenInfo.push_back(GenerationType(new_record, parser->getActualDepth())); - recGenInfo.push_back(GenerationType(new_record, parser->getActualDepth())); + resolveAttributeGroup(st); - return new_record; -} + resolveGroup(st); -FieldType * ComplexType::generateUnion(unsigned long long int a_minOccurs, unsigned long long int a_maxOccurs) -{ - FieldType * new_union = new FieldType(this); + resolveElement(st); - fields.push_back(new_union); + resolveSimpleTypeExtension(); - new_union->setTypeOfField(Mstring("union")); - new_union->setNameOfField(Mstring("choice"), true); - new_union->addVariant(V_untagged, empty_string, true); - new_union->setLevel(actualLevel++); - new_union->setElementFormAs(module->getElementFormDefault()); - new_union->applyMinMaxOccursAttribute(a_minOccurs, a_maxOccurs, true); + resolveSimpleTypeRestriction(); - fieldGenInfo.push_back(GenerationType(new_union, parser->getActualDepth())); - recGenInfo.push_back(GenerationType(new_union, parser->getActualDepth())); + resolveComplexTypeExtension(); - return new_union; -} + resolveComplexTypeRestriction(); -bool ComplexType::hasUnresolvedReference() -{ - for (List<FieldType*>::iterator field = fields.begin(); field; field = field->Next) - { - if (!field->Data->getReference().empty() && !field->Data->getReference().is_resolved()) return true; + resolveUnion(st); - for (List<FieldType*>::iterator attr = field->Data->getAttributes().begin(); attr; attr = attr->Next) - { - if (!attr->Data->getReference().empty() && !attr->Data->getReference().is_resolved()) return true; - } - } - return false; } -void ComplexType::referenceResolving() -{ - if (resolved != No) return; // nothing to do - resolved = InProgress; - for (List<FieldType*>::iterator field = fields.begin(); field; field = field->Next) { - reference_resolving_funtion(field->Data->getAttributes()); - } - reference_resolving_funtion(fields); - for (List<FieldType*>::iterator field = fields.begin(); field; field = field->Next) { - field->Data->sortAttributes(); - } - resolved = Yes; +void ComplexType::setParent(ComplexType * par, SimpleType * child) { + child->parent = par; } -void ComplexType::reference_resolving_funtion(List<FieldType*> & container) -{ - if (container.empty()) return; // take a quick exit - - List<FieldType*> temp_container; - List<ImportedField> temp_container_imported; - - for (List<FieldType*>::iterator field = container.begin(), nextField; field; field = nextField) - { - nextField = field->Next; - if (field->Data->getReference().empty() || field->Data->getReference().is_resolved()) { - temp_container.push_back(field->Data); - continue; - } - - SimpleType * found_ST = static_cast<SimpleType*>( - TTCN3ModuleInventory::getInstance().lookup(field->Data, want_ST)); - ComplexType * found_CT = static_cast<ComplexType*>( - TTCN3ModuleInventory::getInstance().lookup(field->Data, want_CT)); - // It _is_ possible to find both, in which case the simpleType is selected - // for no apparent reason. - - if (found_ST != NULL) { - field->Data->referenceForST(found_ST, temp_container); // does not affect temp_container_imported - found_ST->addToNameDepList(field->Data); - } - else if (found_CT != NULL) { - // HACK the function returns 0 if the field has been added to one of the containers - // returns the field if a copy has been added to to one of the containers - // in this case the field can be safely deleted - FieldType* ft = field->Data->referenceForCT(*found_CT, temp_container, temp_container_imported); - if (!ft) { - found_CT->addToNameDepList(field->Data); - } - delete ft; - } - else { - printError(module->getSchemaname(), name.convertedValue, - "Reference for a non-defined type: " + field->Data->getReference().repr()); +void ComplexType::applyReference(const SimpleType & other, const bool on_attributes) { + type.convertedValue = other.getType().convertedValue; + type.originalValueWoPrefix = other.getType().convertedValue; + + if (other.getMinOccurs() > minOccurs || other.getMaxOccurs() < maxOccurs) { + if (!on_attributes) { + expstring_t temp = memptystr(); + temp = mputprintf( + temp, + "The occurrence range (%llu .. %llu) of the element (%s) is not compatible " + "with the occurrence range (%llu .. %llu) of the referenced element.", + minOccurs, + maxOccurs, + name.originalValueWoPrefix.c_str(), + other.getMinOccurs(), + other.getMaxOccurs()); + printError(module->getSchemaname(), parent->getName().originalValueWoPrefix, + Mstring(temp)); + Free(temp); TTCN3ModuleInventory::getInstance().incrNumErrors(); - - delete field->Data; // this field will not be restored } + } else { + minOccurs = llmax(minOccurs, other.getMinOccurs()); + maxOccurs = llmin(maxOccurs, other.getMaxOccurs()); } - container.clear(); - - for (List<FieldType*>::iterator field = temp_container.begin(), nextField; field; field = nextField) - { - nextField = field->Next; - - for (List<ImportedField>::iterator field_imp = temp_container_imported.begin(), - nextField_imp; field_imp; field_imp = nextField_imp) - { - nextField_imp = field_imp->Next; - - if (field_imp->Data.field->getType().convertedValue == "record" || - field_imp->Data.field->getType().convertedValue == "union") - continue; - - if (field->Data->getName().convertedValue == field_imp->Data.field->getName().convertedValue) - { - field->Data->applyReference(*(field_imp->Data.field)); - if (field->Data->getName().convertedValue == "onlyForStoringAttributes") { - container.push_back(field->Data); - temp_container.remove(field); // backwards remove cheap - } - delete field_imp->Data.field; - temp_container_imported.remove(field_imp); // backwards remove cheap + for (List<Mstring>::iterator var = other.getVariantRef().begin(); var; var = var->Next) { + bool found = false; + for (List<Mstring>::iterator var1 = variant.begin(); var1; var1 = var1->Next) { + if (var->Data == var1->Data) { + found = true; break; } } - } - - // Restore the fields - - List<ImportedField>::iterator it_imp = temp_container_imported.begin(); - if (!container.empty()) { - // Restore the imported fields which we pretend to belong - // to "onlyForStoringAttributes" or any other field transferred above. - const FieldType * const last = container.back(); - while (it_imp != NULL && it_imp->Data.orig == last) { - container.push_back(it_imp->Data.field); - it_imp = it_imp->Next; + if (!found) { + variant.push_back(var->Data); + variant_ref.push_back(var->Data); } } - for (List<FieldType*>::iterator it = temp_container.begin(); it; it = it->Next) { - // Restore an original field - container.push_back(it->Data); - // Merge in all imported fields which "belong" to the original field - while (it_imp != NULL && it_imp->Data.orig == it->Data) { - container.push_back(it_imp->Data.field); - it_imp = it_imp->Next; - } - } + builtInBase = other.getBuiltInBase(); - // Handle leftovers - for (; it_imp; it_imp = it_imp->Next) { - container.push_back(it_imp->Data.field); - } -} - -void ComplexType::everything_into_fields_final() // putting everything into 'fields_for_final' container -{ - for (List<FieldType*>::iterator field = fields.begin(); field; field = field->Next) - { - if (field->Data->getType().convertedValue == "record" || field->Data->getType().convertedValue == "union") - { - fields_final.push_back(field->Data); - for (List<FieldType*>::iterator attr = field->Data->getAttributes().begin(); attr; attr = attr->Next) - { - fields_final.push_back(attr->Data); - } - } - else { - for (List<FieldType*>::iterator attr = field->Data->getAttributes().begin(); attr; attr = attr->Next) - { - fields_final.push_back(attr->Data); - } - fields_final.push_back(field->Data); - } - } + length.applyReference(other.getLength()); + pattern.applyReference(other.getPattern()); + enumeration.applyReference(other.getEnumeration()); + whitespace.applyReference(other.getWhitespace()); + value.applyReference(other.getValue()); } -void ComplexType::nameConversion(NameConversionMode conversion_mode, const List<NamespaceType> & ns) -{ - switch (conversion_mode) - { - case nameMode: - nameConversion_names(ns); - break; - case typeMode: - nameConversion_types(ns); - break; - case fieldMode: - nameConversion_fields(ns); - break; +void ComplexType::nameConversion(NameConversionMode conversion_mode, const List<NamespaceType> & ns) { + if(!visible) return; + switch (conversion_mode) { + case nameMode: + nameConversion_names(ns); + break; + case typeMode: + nameConversion_types(ns); + break; + case fieldMode: + nameConversion_fields(ns); + break; } } -void ComplexType::nameConversion_names(const List<NamespaceType> & ) -{ +void ComplexType::nameConversion_names(const List<NamespaceType> &) { Mstring res, var(module->getTargetNamespace()); XSDName2TTCN3Name(name.convertedValue, TTCN3ModuleInventory::getInstance().getTypenames(), type_name, res, var); name.convertedValue = res; bool found = false; - for (List<Mstring>::iterator vari = variant.begin(); vari; vari = vari->Next) - { + for (List<Mstring>::iterator vari = variant.begin(); vari; vari = vari->Next) { if (vari->Data == "\"untagged\"") { found = true; break; @@ -817,472 +755,1240 @@ void ComplexType::nameConversion_names(const List<NamespaceType> & ) if (!found) { addVariant(V_onlyValue, var); } - for (List<SimpleType*>::iterator st = nameDepList.begin(); st; st = st->Next) { - st->Data->setTypeValue(res); // FIXME: is this still needed ? + for (List<SimpleType*>::iterator dep = nameDepList.begin(); dep; dep = dep->Next) { + dep->Data->setTypeValue(res); } } -void ComplexType::nameConversion_types(const List<NamespaceType> & ns) -{ - Mstring prefix, uri, value; +void ComplexType::nameConversion_types(const List<NamespaceType> & ns) { + attribfields.sort(compareAttributeNameSpaces); + attribfields.sort(compareAttributeTypes); + for (List<AttributeType*>::iterator field = attribfields.begin(); field; field = field->Next) { + field->Data->nameConversion(typeMode, ns); + } + + for (List<ComplexType*>::iterator field = complexfields.begin(); field; field = field->Next) { + field->Data->nameConversion_types(ns); + } + + Mstring prefix, uri, typeValue; if (type.convertedValue == "record" || type.convertedValue == "set" || type.convertedValue == "union" || - type.convertedValue == "enumerated") + type.convertedValue == "enumerated") { return; + } prefix = type.convertedValue.getPrefix(':'); - value = type.convertedValue.getValueWithoutPrefix(':'); + typeValue = type.convertedValue.getValueWithoutPrefix(':'); - for (List<NamespaceType>::iterator namesp = ns.begin(); namesp; namesp = namesp->Next) - { + for (List<NamespaceType>::iterator namesp = ns.begin(); namesp; namesp = namesp->Next) { if (prefix == namesp->Data.prefix) { uri = namesp->Data.uri; break; } } - QualifiedName in(uri, value); // ns uri + original name + QualifiedName in(uri, typeValue); // ns uri + original name // Check all known types QualifiedNames::iterator origTN = TTCN3ModuleInventory::getInstance().getTypenames().begin(); - for ( ; origTN; origTN = origTN->Next) - { + for (; origTN; origTN = origTN->Next) { if (origTN->Data == in) { QualifiedName tmp_name(module->getTargetNamespace(), name.convertedValue); - if (origTN->Data == tmp_name) - continue; - else + if (origTN->Data != tmp_name){ break; + } } } if (origTN != NULL) { setTypeValue(origTN->Data.name); - } - else { + } else { Mstring res, var; - XSDName2TTCN3Name(value, TTCN3ModuleInventory::getInstance().getTypenames(), type_reference_name, res, var); + XSDName2TTCN3Name(typeValue, TTCN3ModuleInventory::getInstance().getTypenames(), type_reference_name, res, var, type.no_replace); setTypeValue(res); } } -void ComplexType::nameConversion_fields(const List<NamespaceType> & ns) -{ - List< QualifiedNames > used_field_names_in_different_level; +void ComplexType::nameConversion_fields(const List<NamespaceType> & ns) { + QualifiedNames used_field_names; + + for (List<AttributeType*>::iterator field = attribfields.begin(); field; field = field->Next) { + field->Data->nameConversion_names(used_field_names); + } + + for (List<ComplexType*>::iterator field = complexfields.begin(); field; field = field->Next) { + if (field->Data->getMinOccurs() == 0 && field->Data->getMaxOccurs() == 0) { + continue; + } + if (!field->Data->isVisible()) { + continue; + } + + field->Data->nameConversion_fields(ns); - for (List<FieldType*>::iterator field = fields_final.begin(); field; field = field->Next) - { Mstring prefix = field->Data->getType().convertedValue.getPrefix(':'); - Mstring value = field->Data->getType().convertedValue.getValueWithoutPrefix(':'); - Mstring uri; - for (List<NamespaceType>::iterator namesp = ns.begin(); namesp; namesp = namesp->Next) - { - if (prefix == namesp->Data.prefix) { - uri = namesp->Data.uri; - break; + Mstring typeValue = field->Data->getType().convertedValue.getValueWithoutPrefix(':'); + + Mstring res, var; + var = getModule()->getTargetNamespace(); + XSDName2TTCN3Name(typeValue, TTCN3ModuleInventory::getInstance().getTypenames(), type_reference_name, res, var); + + field->Data->addVariant(V_onlyValue, var); + var = getModule()->getTargetNamespace(); + + if (field->Data->getName().list_extension) { + field->Data->useNameListProperty(); + XSDName2TTCN3Name(field->Data->getName().convertedValue, + used_field_names, field_name, res, var); + field->Data->setNameValue(res); + bool found_in_variant = false; + for (List<Mstring>::iterator vari = field->Data->getVariant().begin(); vari; vari = vari->Next) { + if (vari->Data == Mstring("\"untagged\"")) { + found_in_variant = true; + break; + } + } + if (!field->Data->getName().originalValueWoPrefix.empty() && + field->Data->getName().originalValueWoPrefix != "sequence" && + field->Data->getName().originalValueWoPrefix != "choice" && + field->Data->getName().originalValueWoPrefix != "elem" && + !found_in_variant) { + field->Data->addVariant(V_nameAs, field->Data->getName().originalValueWoPrefix); } - } - if (field == fields_final.begin()) { - QualifiedNames first_set_of_used_field_names; - used_field_names_in_different_level.push_back(first_set_of_used_field_names); + + if (!found_in_variant) { + field->Data->addVariant(V_untagged, empty_string, true); + } + } else { + XSDName2TTCN3Name(field->Data->getName().convertedValue, + used_field_names, field_name, res, var); + field->Data->setNameValue(res); + field->Data->addVariant(V_onlyValue, var); } - else { - if (field->Data->getLevel() < field->Prev->Data->getLevel()) { - for (int k = 0; k != field->Prev->Data->getLevel() - field->Data->getLevel(); ++k) { - used_field_names_in_different_level.pop_back(); - } + + } +} + +void ComplexType::setFieldPaths(Mstring path) { + if (path.empty()) { + if (!top) { + Mstring field_prefix = empty_string; + if(parent->minOccurs == 0 && parent->maxOccurs == ULLONG_MAX){ + field_prefix = "[-]."; } - else if (field->Data->getLevel() > field->Prev->Data->getLevel()) { - QualifiedNames set_of_used_field_names; - used_field_names_in_different_level.push_back(set_of_used_field_names); + path = field_prefix + getName().convertedValue; + actualPath = field_prefix + getName().convertedValue; + }else { + actualPath = getName().convertedValue; + } + } else if (parent != NULL && (parent->getMinOccurs() != 1 || parent->getMaxOccurs() != 1) && + (parent->getName().list_extension || parent->mode == listMode)) { + path = path + Mstring("[-].") + getName().convertedValue; + actualPath = path; + } else { + path = path + Mstring(".") + getName().convertedValue; + actualPath = path; + } + + for (List<ComplexType*>::iterator field = complexfields.begin(); field; field = field->Next) { + field->Data->setFieldPaths(path); + } + for (List<AttributeType*>::iterator attr = attribfields.begin(); attr; attr = attr->Next) { + attr->Data->setFieldPath(path); + } +} + +void ComplexType::finalModification2() { + //Call SimpleType finalModification + SimpleType::finalModification(); + + //Set isOptional field + isOptional = isOptional || (minOccurs == 0 && maxOccurs == 1); + + // + List<Mstring> enumNames; + for (List<ComplexType*>::iterator field = complexfields.begin(), nextField; field; field = nextField) { + nextField = field->Next; + //Remove invisible fields + if ((field->Data->minOccurs == 0 && field->Data->maxOccurs == 0) || !field->Data->isVisible()) { + delete field->Data; + field->Data = NULL; + complexfields.remove(field); + } else { + //Recursive call + field->Data->finalModification2(); + //collect <xsd:all> elements + if (field->Data->fromAll) { + enumNames.push_back(field->Data->getName().convertedValue); } } + } - if (field->Data->getMinOccurs() == 0 && field->Data->getMaxOccurs() == 0) - continue; - if (!field->Data->isVisible()) - continue; + ComplexType * embedField = NULL; + ComplexType * enumField = NULL; - Mstring in, res, var; + //Find the embed and order fields, and remove them + for (List<ComplexType*>::iterator field = complexfields.begin(), nextField; field; field = nextField) { + nextField = field->Next; + if (field->Data->embed) { + embedField = new ComplexType(*field->Data); + embedField->parent = this; + delete field->Data; + field->Data = NULL; + complexfields.remove(field); + } else if (field->Data->enumerated) { + enumField = new ComplexType(*field->Data); + enumField->parent = this; + delete field->Data; + field->Data = NULL; + complexfields.remove(field); + } + } - XSDName2TTCN3Name(value, TTCN3ModuleInventory::getInstance().getTypenames(), type_reference_name, res, var); - if (field->Data->getType().convertedValue != "enumerated") { - field->Data->setTypeValue(res); + if (enumField != NULL) { + //Insert the order field in the front + complexfields.push_front(enumField); + //Push the field names into the order field + for (List<Mstring>::iterator field = enumNames.begin(); field; field = field->Next) { + enumField->enumfields.push_back(field->Data); } - field->Data->addVariant(V_onlyValue, var); + } - if (field->Data->getName().list_extension) - { - field->Data->useNameListProperty(); + if (embedField != NULL) { + //Insert the embed field to the front + complexfields.push_front(embedField); + } - if (!used_field_names_in_different_level.empty()) { - XSDName2TTCN3Name(field->Data->getName().convertedValue, - used_field_names_in_different_level.back(), field_name, res, var); - field->Data->setNameValue(res); - if (!field->Data->getName().originalValueWoPrefix.empty() && - field->Data->getName().originalValueWoPrefix != "sequence" && - field->Data->getName().originalValueWoPrefix != "choice" && - field->Data->getName().originalValueWoPrefix != "elem") - { - field->Data->addVariant(V_nameAs, field->Data->getName().originalValueWoPrefix); + if (with_union) { + unsigned number = 0; + for (List<ComplexType*>::iterator field = complexfields.begin(); field; field = field->Next) { + if (field->Data->name.convertedValue.foundAt("alt_") == field->Data->name.convertedValue.c_str()) { + if (number == 0) { + field->Data->name.upload(Mstring("alt_")); + } else { + field->Data->name.upload(Mstring(mprintf("alt_%d", number))); } + number++; } + } + } - bool found_in_variant = false; - for (List<Mstring>::iterator vari = field->Data->getVariant().begin(); vari; vari = vari->Next) - { - if (vari->Data == "untagged") { - found_in_variant = true; - break; + AttributeType * anyAttr = NULL; + for (List<AttributeType*>::iterator field = attribfields.begin(), nextField; field; field = nextField) { + nextField = field->Next; + field->Data->applyUseAttribute(); + //Find anyattribute, and remove it + if (field->Data->isAnyAttribute()) { + anyAttr = new AttributeType(*field->Data); + setParent(this, anyAttr); + delete field->Data; + field->Data = NULL; + attribfields.remove(field); + } else if (field->Data->getUseVal() == prohibited || !field->Data->isVisible()) { + //Not visible attribute removed + delete field->Data; + field->Data = NULL; + attribfields.remove(field); + } else { + field->Data->SimpleType::finalModification(); + } + } + + //Push anyattribute to the front + if (anyAttr != NULL) { + anyAttr->applyNamespaceAttribute(V_anyAttributes); + attribfields.push_back(anyAttr); + } + + //Substitution group ordering + if(subsGroup == this){ //We are a generated substitution group + //Substitution group never empty + ComplexType * front = complexfields.front(); + List<ComplexType*>::iterator it = complexfields.begin(); + complexfields.remove(it); + complexfields.sort(compareComplexTypeNameSpaces); + complexfields.sort(compareTypes); + complexfields.push_front(front); + } +} + +void ComplexType::finalModification() { + finalModification2(); + setFieldPaths(empty_string); + List<Mstring> container; + collectVariants(container); + variant.clear(); + variant = container; +} + +void ComplexType::printToFile(FILE * file) { + printToFile(file, 0, false); +} + +void ComplexType::printToFile(FILE * file, const unsigned level, const bool is_union) { + if (!isVisible()) { + return; + } + printComment(file, level); + if (top) { + fprintf(file, "type "); + if(mode == listMode){ + printMinOccursMaxOccurs(file, is_union); + fprintf(file, "%s", type.convertedValue.c_str()); + }else { + fprintf(file, "%s %s", type.convertedValue.c_str(), name.convertedValue.c_str()); + } + fprintf(file, "\n{\n"); + + if (attribfields.empty() && complexfields.empty()) { + fprintf(file, "\n"); + } + + for (List<ComplexType*>::iterator c = complexfields.begin(), nextField; c; c = nextField) { + nextField = c->Next; + if (c->Data->embed || c->Data->enumerated) { + c->Data->printToFile(file, level + 1, is_union); + if (c->Next != NULL || !attribfields.empty()) { + fprintf(file, ",\n"); + } else { + fprintf(file, "\n"); } + delete c->Data; + c->Data = NULL; + complexfields.remove(c); } - if (!found_in_variant) { - field->Data->addVariant(V_untagged, empty_string, true); + } + + for (List<AttributeType*>::iterator f = attribfields.begin(); f; f = f->Next) { + f->Data->printToFile(file, level + 1); + if (f->Next != NULL || !complexfields.empty()) { + fprintf(file, ",\n"); + } else { + fprintf(file, "\n"); } } - else { - if (!used_field_names_in_different_level.empty()) { - XSDName2TTCN3Name(field->Data->getName().convertedValue, - used_field_names_in_different_level.back(), field_name, res, var); - field->Data->setNameValue(res); - field->Data->addVariant(V_onlyValue, var); + + for (List<ComplexType*>::iterator c = complexfields.begin(); c; c = c->Next) { + c->Data->printToFile(file, level + 1, is_union); + if (c->Next != NULL) { + fprintf(file, ",\n"); + } else { + fprintf(file, "\n"); } } + } else { + const bool field_is_record = getType().convertedValue == Mstring("record"); + const bool field_is_union = getType().convertedValue == "union"; + if (complexfields.empty() && attribfields.empty() && (field_is_record || field_is_union)) { + if (field_is_record) { + indent(file, level); + printMinOccursMaxOccurs(file, is_union); + fprintf(file, "%s {\n", getType().convertedValue.c_str()); + indent(file, level); + fprintf(file, "} %s", getName().convertedValue.c_str()); + if (isOptional) { + fprintf(file, " optional"); + } + } else if (field_is_union) { + indent(file, level); + printMinOccursMaxOccurs(file, is_union); + fprintf(file, "%s {\n", getType().convertedValue.c_str()); + indent(file, level + 1); + fprintf(file, "record length(0 .. 1) of enumerated { NULL_ } choice\n"); + indent(file, level); + fprintf(file, "} %s", getName().convertedValue.c_str()); + if (isOptional) { + fprintf(file, " optional"); + } + } + } else { + indent(file, level); + if (getEnumeration().modified) { + if (isFloatType(getBuiltInBase())) { + fprintf(file, "%s (", type.convertedValue.c_str()); + getEnumeration().sortFacets(); + getEnumeration().printToFile(file); + fprintf(file, ")"); + } else { + printMinOccursMaxOccurs(file, with_union); + fprintf(file, "enumerated {\n"); + //getEnumeration().sortFacets(); + getEnumeration().printToFile(file, level); + fprintf(file, "\n"); + indent(file, level); + fprintf(file, "} "); + } + } else { + int multiplicity = multi(module, getReference(), this); + if ((multiplicity > 1) && getReference().get_ref()) { + fprintf(file, "%s.", getReference().get_ref()->getModule()->getModulename().c_str()); + } + if (field_is_record || field_is_union) { + printMinOccursMaxOccurs(file, with_union, !first_child || parent->getXsdtype() != n_choice); + fprintf(file, "%s {\n", getType().convertedValue.c_str()); + for (List<AttributeType*>::iterator f = attribfields.begin(); f; f = f->Next) { + f->Data->printToFile(file, level + 1); + if (f->Next != NULL || !complexfields.empty()) { + fprintf(file, ",\n"); + } else { + fprintf(file, "\n"); + } + } - for (List<FieldType*>::iterator inner = fields_final.begin(); inner; inner = inner->Next) - { - if (field->Data->getName().list_extension) { - inner->Data->variantIdReplaceInPath(field->Data->getVariantId(), - field->Data->getName().convertedValue + "[-]"); + for (List<ComplexType*>::iterator c = complexfields.begin(); c; c = c->Next) { + c->Data->printToFile(file, level + 1, is_union); + if (c->Next != NULL) { + fprintf(file, ",\n"); + } else { + fprintf(file, "\n"); + } + } + } else { + printMinOccursMaxOccurs(file, with_union, !first_child); + fprintf(file, "%s ", getType().convertedValue.c_str()); + if (getName().convertedValue == Mstring("order") && getType().convertedValue == Mstring("enumerated")) { + fprintf(file, "{\n"); + for (List<Mstring>::iterator e = enumfields.begin(); e; e = e->Next) { + indent(file, level + 1); + fprintf(file, "%s", e->Data.c_str()); + if (e->Next != NULL) { + fprintf(file, ",\n"); + } else { + fprintf(file, "\n"); + } + } + indent(file, level); + fprintf(file, "} "); + } + } } - else { - inner->Data->variantIdReplaceInPath(field->Data->getVariantId(), - field->Data->getName().convertedValue); + if (field_is_record || field_is_union) { + indent(file, level); + fprintf(file, "} "); } + + fprintf(file, "%s", getName().convertedValue.c_str()); + getPattern().printToFile(file); + getValue().printToFile(file); + getLength().printToFile(file); + if (!with_union && isOptional) { + fprintf(file, " optional"); + } + } + } + + if (top) { + fprintf(file, "}"); + if(mode == listMode){ + fprintf(file, " %s", name.convertedValue.c_str()); } + printVariant(file); + fprintf(file, ";\n\n\n"); } } -void ComplexType::finalModification() -{ - for (List<FieldType*>::iterator field = fields_final.begin(), nextField; field; field = nextField) - { - nextField = field->Next; +void ComplexType::collectVariants(List<Mstring>& container) { + + if (e_flag_used || !isVisible()) { + return; + } + + if (top) { + bool useUnionVariantWhenMainTypeIsRecordOf = false; + for (List<Mstring>::iterator var = variant.end(); var; var = var->Prev) { + if ((minOccurs != 1 || maxOccurs != 1) && (var->Data == "\"useUnion\"")) { // main type is a record of + useUnionVariantWhenMainTypeIsRecordOf = true; // TR HL15893 + } else { + container.push_back(Mstring("variant ") + Mstring(var->Data.c_str()) + Mstring(";\n")); + } + } + if (useUnionVariantWhenMainTypeIsRecordOf) { + container.push_back(Mstring("variant ([-]) \"useUnion\";\n")); + } + } + + //Collect variants of attributes + for (List<AttributeType*>::iterator field = attribfields.begin(); field; field = field->Next) { + field->Data->collectVariants(container); + } + + for (List<ComplexType*>::iterator field = complexfields.begin(); field; field = field->Next) { + if (!field->Data->isVisible()) { - fields_final.remove(field); // backwards remove cheap continue; } - if (field->Data->getMinOccurs() == 0 && field->Data->getMaxOccurs() == 0) { - fields_final.remove(field); // backwards remove cheap + + if (field->Data->getVariant().empty() && field->Data->getHiddenVariant().empty() && + field->Data->complexfields.empty() && field->Data->attribfields.empty() && + field->Data->enumeration.variants.empty()) { continue; } - field->Data->finalModification(); + bool already_used = false; - if (module->getElementFormDefault() == qualified && - field->Data->getElementFormAs() == unqualified) - { - field->Data->addVariant(V_formAs, Mstring("unqualified")); + for (List<Mstring>::iterator var2 = field->Data->getVariant().end(); var2; var2 = var2->Prev) { + if (var2->Data == "\"untagged\"" && !already_used) { + container.push_back(Mstring("variant (") + field->Data->actualPath + Mstring(") ") + Mstring(var2->Data.c_str()) + Mstring(";\n")); + already_used = true; + } else { + if ((field->Data->getMinOccurs() != 1 || field->Data->getMaxOccurs() != 1) && + (field->Data->getName().list_extension || var2->Data == "\"useUnion\"")) { + container.push_back(Mstring("variant (") + field->Data->actualPath + Mstring("[-]) ") + Mstring(var2->Data.c_str()) + Mstring(";\n")); + } else if (var2->Data != "\"untagged\"") { + container.push_back(Mstring("variant (") + field->Data->actualPath + Mstring(") ") + Mstring(var2->Data.c_str()) + Mstring(";\n")); + } + } } - if (module->getAttributeFormDefault() == qualified && - field->Data->getAttributeFormAs() == unqualified) - { - field->Data->addVariant(V_formAs, Mstring("unqualified")); + for (List<Mstring>::iterator hidden_var = field->Data->getHiddenVariant().end(); + hidden_var; hidden_var = hidden_var->Prev) { + if ((field->Data->getMinOccurs() != 1 || field->Data->getMaxOccurs() != 1) && + field->Data->getName().list_extension) { + container.push_back(Mstring("//variant (") + field->Data->actualPath + Mstring("[-]) ") + Mstring(hidden_var->Data.c_str()) + Mstring(";\n")); + } else { + container.push_back(Mstring("//variant (") + field->Data->actualPath + Mstring(") ") + Mstring(hidden_var->Data.c_str()) + Mstring(";\n")); + } + } + + if(field->Data->enumeration.modified){ + Mstring path = empty_string; + if(field->Data->getMinOccurs() != 1 && field->Data->getMaxOccurs() != 1){ + path = field->Data->actualPath + Mstring("[-]"); + }else { + path = field->Data->actualPath; + } + for(List<Mstring>::iterator var = field->Data->enumeration.variants.end(); var; var = var->Prev){ + if(var->Data.empty()) continue; + container.push_back("variant (" + path + ") " + var->Data + ";\n"); + } } + //Recursive call + field->Data->collectVariants(container); } } -void ComplexType::printToFile(FILE * file) -{ - if (!isVisible()) return; - const bool ct_is_union = type.convertedValue == "union"; +void ComplexType::printVariant(FILE * file) { + if (e_flag_used) { + return; + } + + bool foundAtLeastOneVariant = false; + bool foundAtLeastOneHiddenVariant = false; + + if (!variant.empty()) { + for (List<Mstring>::iterator var = variant.begin(); var; var = var->Next) { + if (foundAtLeastOneVariant && foundAtLeastOneHiddenVariant) { + break; + } + if (var->Data[0] != '/') { + foundAtLeastOneVariant = true; + } else { + foundAtLeastOneHiddenVariant = true; + } + } + } - List<Mstring> rec_names; - List<FieldType*> choices; + if (!foundAtLeastOneVariant && !foundAtLeastOneHiddenVariant) { + return; + } - printComment(file); + if (!foundAtLeastOneVariant) { + //No other variants, only commented, so the 'with' must be commented also. + fprintf(file, ";\n//with {\n"); + } else { + fprintf(file, "\nwith {\n"); + } - fprintf(file, "type "); - printMinOccursMaxOccurs(file, false); - fprintf(file, "%s ", type.convertedValue.c_str()); - if (minOccurs == 1 && maxOccurs == 1) { // if it is not a record of - fprintf(file, "%s", name.convertedValue.c_str()); + for (List<Mstring>::iterator var = variant.begin(); var; var = var->Next) { + fprintf(file, "%s", var->Data.c_str()); } - fprintf(file, "\n{\n"); - for (List<FieldType*>::iterator fit = fields_final.begin(); fit; fit = fit->Next) - { - FieldType& field = *(fit->Data); // alas, cannot be const - const bool field_is_record = field.getType().convertedValue == "record"; - const bool field_is_union = field.getType().convertedValue == "union"; - if (field_is_union) { - choices.push_back(&field); + if (!foundAtLeastOneVariant) { + fprintf(file, "//"); + } + fprintf(file, "}"); +} + +void ComplexType::dump(unsigned int depth) const { + fprintf(stderr, "%*s %sComplexType at %p | Top:%s\n", depth * 2, "", isVisible() ? "" : "(hidden)", (const void*) this, top ? "true" : "false"); + if (parent != NULL) { + fprintf(stderr, "%*s parent: %p | parent xsdtype: %i | my xsdtype: %i\n", depth * 2, "", (const void*) parent, parent->getXsdtype(), xsdtype); + } else { + fprintf(stderr, "%*s parent: %p | parent xsdtype: %s | my xsdtype: %i\n", depth * 2, "", "NULL", "NULL", xsdtype); + } + fprintf(stderr, "%*s name='%s' -> '%s', type='%s' %d complexfields | %s | %s | %s\n", depth * 2, "", + name.originalValueWoPrefix.c_str(), name.convertedValue.c_str(), type.convertedValue.c_str(), (int) complexfields.size(), + outside_reference.empty() ? "" : outside_reference.get_val().c_str(), mode == restrictionMode ? "restriction" : "", + mode == extensionMode ? "extension" : ""); + for (List<ComplexType*>::iterator field = complexfields.begin(); field; field = field->Next) { + field->Data->dump(depth + 1); + } + fprintf(stderr, "%*s %d attribields\n", depth * 2, "", (int) attribfields.size()); + for (List<AttributeType*>::iterator field = attribfields.begin(); field; field = field->Next) { + field->Data->dump(depth + 1); + } + fprintf(stderr, "%*s %d enumfields\n", depth * 2, "", (int) enumfields.size()); + for (List<Mstring>::iterator field = enumfields.begin(); field; field = field->Next) { + fprintf(stderr, "%*s enum: %s\n", depth * 2 + depth, "", field->Data.c_str()); + } + fprintf(stderr, "%*s (%llu .. %llu) | Optional:%s | List:%s\n", (depth + 1) * 2, "", minOccurs, maxOccurs, isOptional ? "true" : "false", name.list_extension ? "true" : "false"); + fprintf(stderr, "%*s %d variants: ", (depth + 1) * 2, "", (int) variant.size()); + for (List<Mstring>::iterator var = variant.begin(); var; var = var->Next) { + fprintf(stderr, "%s, ", var->Data.c_str()); + } + fprintf(stderr, "%*s pattern:%s | length:%i \n ", (depth + 1) * 2, "", this->pattern.facet.c_str(), (int) (this->length.facet_maxLength)); + fprintf(stderr, "%*s enum: %i \n", (depth + 1)*2, "", (int) this->enumeration.facets.size()); + fprintf(stderr, "\n"); +} + +void ComplexType::setMinMaxOccurs(const unsigned long long min, const unsigned long long max, const bool generate_list_postfix) { + + if (min != 1 || max != 1) { + if (xsdtype == n_choice) { + minOccurs = min; + maxOccurs = max; + addVariant(V_untagged); + first_child = false; + } else if (xsdtype == n_sequence) { + ComplexType * rec = new ComplexType(this); + rec->type.upload(Mstring("record")); + rec->name.upload(Mstring("sequence")); + rec->setXsdtype(n_sequence); + rec->addVariant(V_untagged); + rec->addVariant(V_untagged); + rec->minOccurs = min; + rec->maxOccurs = max; + complexfields.push_back(rec); + actfield = rec; + if ((rec->minOccurs == 0 && rec->maxOccurs > 1) || rec->minOccurs > 0) { + rec->name.list_extension = true; + } + } else { + minOccurs = min; + maxOccurs = max; + if ((minOccurs == 0 && maxOccurs > 1) || minOccurs > 0) { + if (generate_list_postfix) { + name.list_extension = true; + } + } + if (parent != NULL && parent->getXsdtype() == n_choice) { + name.list_extension = true; + if ((parent != NULL && parent->getXsdtype() == n_choice)) { + if (parent->first_child == false && minOccurs == 0) { + parent->first_child = true; + with_union = true; + first_child = false; + } else { + with_union = true; + first_child = true; + } + } + } } + } - bool last = false; - if (fit->Next == NULL) - { - /* A field of type record or union is normally followed by its subfields - * at level N+1. Therefore if a record or union is the last field, - * it is an empty record/union. */ - if (field_is_record) - { - indent(file, field.getLevel()); - field.printMinOccursMaxOccurs(file, ct_is_union); - fprintf(file, "%s {\n", field.getType().convertedValue.c_str()); - indent(file, field.getLevel()); - fprintf(file, "} %s", field.getName().convertedValue.c_str()); - if (field.isOptional()) fprintf(file, " optional"); - break; + if (maxOccurs > 1 && generate_list_postfix) { + name.list_extension = true; + } +} + +void ComplexType::applyNamespaceAttribute(VariantMode varLabel, const Mstring& ns_list) { + List<Mstring> namespaces; + if (!ns_list.empty()) { + expstring_t valueToSplitIntoTokens = mcopystr(ns_list.c_str()); + char * token; + token = strtok(valueToSplitIntoTokens, " "); + while (token != NULL) { + namespaces.push_back(Mstring(token)); + token = strtok(NULL, " "); + } + Free(valueToSplitIntoTokens); + } + + Mstring any_ns; + bool first = true; + // Note: libxml2 will verify the namespace list according to the schema + // of XML Schema. It is either ##any, ##other, ##local, ##targetNamespace, + // or a list of (namespace reference | ##local | ##targetNamespace). + for (List<Mstring>::iterator ns = namespaces.begin(); ns; ns = ns->Next) { + static const Mstring xxany("##any"), xxother("##other"), xxlocal("##local"), + xxtargetNamespace("##targetNamespace"); + if (!first) any_ns += ','; + + if (ns->Data == xxany) { + }// this must be the only element, nothing to add + else if (ns->Data == xxother) { // this must be the only element + any_ns += " except unqualified"; + if (module->getTargetNamespace() != "NoTargetNamespace") { + any_ns += ", \'"; + any_ns += parent->getModule()->getTargetNamespace(); + any_ns += '\''; } - else if (field_is_union) - { - indent(file, field.getLevel()); - field.printMinOccursMaxOccurs(file, ct_is_union); - fprintf(file, "%s {\n", field.getType().convertedValue.c_str()); - indent(file, field.getLevel()+1); - fprintf(file, "record length(0 .. 1) of enumerated { NULL_ } choice\n"); - indent(file, field.getLevel()); - fprintf(file, "} %s", field.getName().convertedValue.c_str()); - if (field.isOptional()) fprintf(file, " optional"); - break; + }// The three cases below can happen multiple times + else { + if (first) any_ns += " from "; + // else a comma was already added + if (ns->Data == xxtargetNamespace) { + any_ns += '\''; + any_ns += parent->getModule()->getTargetNamespace(); + any_ns += '\''; + } else if (ns->Data == xxlocal) { + any_ns += "unqualified"; + } else { + any_ns += '\''; + any_ns += ns->Data; + any_ns += '\''; } - last = true; } - bool empty_allowed = true; + first = false; + } + + addVariant(varLabel, any_ns, true); +} + +void ComplexType::addComment(const Mstring& text) { + if (this == actfield) { + if (lastType == n_attribute) { // ez nem teljesen jo, stb, tobb lehetoseg, es rossy sorrend + if (!attribfields.empty()) { + attribfields.back()->addComment(text); + } + } else { + if (actfield->getName().convertedValue == Mstring("base") && parent != NULL) { + parent->getComment().push_back(Mstring("/* " + text + " */\n")); + } else { + comment.push_back(Mstring("/* " + text + " */\n")); + } + } + } else { + actfield->addComment(text); + return; + } +} - for (List<FieldType*>::iterator p = fit->Prev; p; p = p->Prev) { - const int prevlevel = p->Data->getLevel(); - if (prevlevel < field.getLevel()) break; // probably our parent, quit - if (prevlevel == field.getLevel()) { // same level - // If the earlier field can be empty, and our parent is a choice, - // then this field's minOccurs needs to be adjusted to 1 - // so it's not a candidate for the empty list. - if (p->Data->getMinOccurs() == 0ULL - && !choices.empty() - && choices.back()->getLevel()+1 == field.getLevel()) { - empty_allowed = false; +//Attribute extension logic when extending complextypes +void ComplexType::applyAttributeExtension(ComplexType * found_CT, AttributeType * anyAttrib /* = NULL */) { + for (List<AttributeType*>::iterator attr = found_CT->attribfields.begin(); attr; attr = attr->Next) { + bool l = false; + if (anyAttrib != NULL && attr->Data->isAnyAttribute()) { + anyAttrib->addNameSpaceAttribute(attr->Data->getNameSpaceAttribute()); + l = true; + } else { + for (List<AttributeType*>::iterator attr2 = attribfields.begin(); attr2; attr2 = attr2->Next) { + if (attr->Data->getName().convertedValue == attr2->Data->getName().convertedValue && + attr->Data->getType().convertedValue == attr2->Data->getType().convertedValue) { + if (attr->Data->getUseVal() == optional) { + attr2->Data->setUseVal(optional); + } + l = true; break; } } - // Do not quit the loop if finding a prev. field with minOccurs > 0 - // There may be a field with minOccurs == 0 before it. } + if (!l) { + AttributeType * newAttrib = new AttributeType(*attr->Data); + attribfields.push_back(newAttrib); + setParent(this, newAttrib); + } + } +} - indent(file, field.getLevel()); +//Attribute restriction logic when restricting complextypes +void ComplexType::applyAttributeRestriction(ComplexType * found_CT) { + for (List<AttributeType*>::iterator attr = attribfields.begin(), nextAttr; attr; attr = nextAttr) { + nextAttr = attr->Next; + bool l = false; + for (List<AttributeType*>::iterator attr2 = found_CT->attribfields.begin(); attr2; attr2 = attr2->Next) { + if (attr->Data->getName().convertedValue == attr2->Data->getName().convertedValue && + attr->Data->getType().convertedValue == attr2->Data->getType().convertedValue) { + l = true; + break; + } + } + if (!l) { + delete attr->Data; + attr->Data = NULL; + attribfields.remove(attr); + } + } + size_t size = found_CT->attribfields.size(); + size_t size2 = attribfields.size(); + size_t i = 0; + List<AttributeType*>::iterator attr = found_CT->attribfields.begin(); + for (; i < size; attr = attr->Next, i = i + 1) { + bool l = false; + size_t j = 0; + List<AttributeType*>::iterator attr2 = attribfields.begin(); + for (; j < size2; attr2 = attr2->Next, j = j + 1) { + if (attr->Data->getName().convertedValue == attr2->Data->getName().convertedValue && + attr->Data->getType().convertedValue == attr2->Data->getType().convertedValue && !attr2->Data->getUsed()) { + l = true; + attr2->Data->setUsed(true); + break; + } + } + if (!l) { + AttributeType * newAttrib = new AttributeType(*attr->Data); + attribfields.push_back(newAttrib); + setParent(this, newAttrib); + } + } +} - field.printMinOccursMaxOccurs(file, ct_is_union, empty_allowed); +void ComplexType::addNameSpaceAsVariant(RootType * root, RootType * other) { + if (other->getModule()->getTargetNamespace() != root->getModule()->getTargetNamespace() && + other->getModule()->getTargetNamespace() != "NoTargetNamespace") { + root->addVariant(V_namespaceAs, other->getModule()->getTargetNamespace()); + } +} - if (field_is_record) - { - fprintf(file, "%s {\n", field.getType().convertedValue.c_str()); - if (field.getLevel() >= fit->Next->Data->getLevel()) // the record is empty - { - indent(file, field.getLevel()); - fprintf(file, "} %s", field.getName().convertedValue.c_str()); - if (field.isOptional()) fprintf(file, " optional"); - } - else // the record is not empty - { - if (field.isOptional()) { - rec_names.push_back(field.getName().convertedValue + " optional"); - } - else { - rec_names.push_back(field.getName().convertedValue); +void ComplexType::resolveAttribute(AttributeType* attr) { + if (attr->getXsdtype() == n_attribute && !attr->getReference().empty()) { + SimpleType * st = (SimpleType*) TTCN3ModuleInventory::getInstance().lookup(attr, want_BOTH); + if (st != NULL) { + if (attr->isFromRef()) { + addNameSpaceAsVariant(attr, st); + attr->setTypeOfField(st->getName().convertedValue); + attr->setNameOfField(st->getName().originalValueWoPrefix); + attr->setOrigModule(st->getModule()); + } else { + attr->setTypeOfField(st->getName().convertedValue); + if (st->getType().convertedValue == "record" || st->getType().convertedValue == "union") { + st->addToNameDepList(attr); } } + } else { + printError(module->getSchemaname(), name.convertedValue, + "Reference for a non-defined type: " + attr->getReference().repr()); + TTCN3ModuleInventory::getInstance().incrNumErrors(); } - else if (field_is_union) - { - fprintf(file, "%s {\n", field.getType().convertedValue.c_str()); - if (field.getLevel() >= fit->Next->Data->getLevel()) // the union is empty - { - indent(file, field.getLevel()+1); - fprintf(file, "record length(0 .. 1) of enumerated { NULL_ } choice\n"); - indent(file, field.getLevel()); - fprintf(file, "} %s", field.getName().convertedValue.c_str()); - if (field.isOptional()) fprintf(file, " optional"); - } - else // the union is not empty - { - if (field.isOptional()) { - rec_names.push_back(field.getName().convertedValue + " optional"); - } - else { - rec_names.push_back(field.getName().convertedValue); - } - } + } +} +void ComplexType::resolveAttributeGroup(SimpleType * st) { + if (xsdtype == n_attributeGroup && !outside_reference.empty()) { + ComplexType * ct = (ComplexType*) st; + if(ct->resolved == No){ + ct->referenceResolving(); + } + outside_reference.set_resolved(ct); + setInvisible(); + bool addNameSpaceas = false; + if (ct->getModule()->getTargetNamespace() != module->getTargetNamespace() && + ct->getModule()->getTargetNamespace() != "NoTargetNamespace") { + addNameSpaceas = true; + } + ComplexType * par; + if(parent->nillable && parent->parent != NULL){ + par = parent->parent; + }else { + par = parent; + } + List<AttributeType*>::iterator anyAttrib = par->attribfields.begin(); + for (; anyAttrib; anyAttrib = anyAttrib->Next) { + if (anyAttrib->Data->isAnyAttribute()) { + break; + } } - else - { - if (field.getEnumeration().modified) - { - if (isFloatType(field.getBuiltInBase())) { - fprintf(file, "%s (", type.convertedValue.c_str()); - field.getEnumeration().sortFacets(); - field.getEnumeration().printToFile(file); - fprintf(file, ")"); - } - else { - fprintf(file, "enumerated {\n"); - if (!rec_names.empty() && rec_names.back() != "order") { - field.getEnumeration().sortFacets(); - } - field.getEnumeration().printToFile(file, field.getLevel()); - fprintf(file, "\n"); - indent(file, field.getLevel()); - fprintf(file, "} "); + for (List<AttributeType*>::iterator attr = ct->attribfields.begin(); attr; attr = attr->Next) { + AttributeType * attrib = new AttributeType(*attr->Data); + attr->Data->setOrigModule(ct->getModule()); + if (addNameSpaceas) { + attrib->addVariant(V_namespaceAs, ct->getModule()->getTargetNamespace()); + } + if (anyAttrib != NULL && attr->Data->isAnyAttribute()) { + anyAttrib->Data->addNameSpaceAttribute(attr->Data->getNameSpaceAttribute()); + } else { + //Nillable attribute placement is hard... + if (parent->nillable && parent->parent != NULL) { + parent->parent->attribfields.push_back(attrib); + attrib->parent = parent->parent; + setParent(parent->parent, attrib); + } else if (parent->nillable && !parent->complexfields.empty()) { + parent->complexfields.back()->attribfields.push_back(attrib); + attrib->parent = parent->complexfields.back(); + } else if (parent->parent != NULL && (parent->parent->mode == extensionMode || parent->parent->mode == restrictionMode)) { + parent->parent->attribfields.push_back(attrib); + setParent(parent->parent, attrib); + } else { + parent->attribfields.push_back(attrib); + setParent(parent, attrib); } } - else - { - int multiplicity = multi(module, field.getReference(), &field); - if ((multiplicity > 1) && field.getReference().get_ref()) { - fprintf(file, "%s.", field.getReference().get_ref()->getModule()->getModulename().c_str()); + } + } +} + +void ComplexType::resolveGroup(SimpleType *st) { + if (xsdtype == n_group && !outside_reference.empty()) { + ComplexType * ct = (ComplexType*) st; + outside_reference.set_resolved(ct); + setInvisible(); + if(ct->resolved == No){ + ct->referenceResolving(); + } + //Decide if namespaceas variant needs to be added + bool addNameSpaceas = false; + if (ct->getModule()->getTargetNamespace() != module->getTargetNamespace() && + ct->getModule()->getTargetNamespace() != "NoTargetNamespace") { + addNameSpaceas = true; + } + if (ct->getXsdtype() == n_sequence && minOccurs == 1 && maxOccurs == 1 && (parent->getXsdtype() == n_complexType || parent->getXsdtype() == n_sequence)) { + for (List<ComplexType*>::iterator c = ct->complexfields.begin(); c; c = c->Next) { + ComplexType * newField = new ComplexType(*c->Data); + parent->complexfields.push_back(newField); + setParent(parent, newField); + parent->complexfields.back()->setModule(getModule()); + if (addNameSpaceas) { + parent->complexfields.back()->addVariant(V_namespaceAs, ct->getModule()->getTargetNamespace()); } - fprintf(file, "%s ", field.getType().convertedValue.c_str()); - } - fprintf(file, "%s", field.getName().convertedValue.c_str()); - field.getValue().printToFile(file); - field.getLength().printToFile(file); - if (!ct_is_union && field.isOptional()) fprintf(file, " optional"); - } - /* ******************************************************* - * FINAL - * *******************************************************/ - if (last) break; - /* *******************************************************/ - if (field.getLevel() > fit->Next->Data->getLevel()) { - int diff = field.getLevel() - fit->Next->Data->getLevel(); - fprintf(file, "\n"); - for (int k = 0; k != diff; ++k) - { - indent(file, field.getLevel() - (k+1)); - if (!rec_names.empty()) { - fprintf(file, "} %s", rec_names.back().c_str()); - rec_names.pop_back(); + } + } else if (ct->getXsdtype() == n_all) { + //If the parent optional, then every field is optional + for (List<ComplexType*>::iterator c = ct->complexfields.begin(); c; c = c->Next) { + ComplexType* f = new ComplexType(*c->Data); + if (minOccurs == 0 && !f->enumerated) { + f->isOptional = true; } - if (k + 1 == diff) { - fprintf(file, ","); + ((ComplexType*) parent)->complexfields.push_back(f); + setParent(parent, f); + f->setModule(getModule()); + if (addNameSpaceas) { + f->addVariant(V_namespaceAs, ct->getModule()->getTargetNamespace()); } - fprintf(file, "\n"); + } + parent->addVariant(V_useOrder); + } else { + if (name.list_extension) { + addVariant(V_untagged); + } + type.upload(ct->getName().convertedValue); + name.upload(ct->getName().convertedValue); + ct->addToNameDepList(this); + nameDep = ct; + visible = true; + if (addNameSpaceas) { + addVariant(V_namespaceAs, ct->getModule()->getTargetNamespace()); } } - else if (field.getLevel() == fit->Next->Data->getLevel()) { - fprintf(file, ",\n"); - } - } - /* *******************************************************/ - for (size_t j = 0; j < rec_names.size(); ) { - fprintf(file, "\n"); - indent(file, rec_names.size()); - fprintf(file, "} %s", rec_names.back().c_str()); - rec_names.pop_back(); } - /* *******************************************************/ - fprintf(file, "\n}"); - if (minOccurs != 1 || maxOccurs != 1) { // if it is a record of - fprintf(file, " %s", name.convertedValue.c_str()); +} + +void ComplexType::resolveElement(SimpleType *st) { + if (xsdtype == n_element && !outside_reference.empty()) { + outside_reference.set_resolved(st); + type.upload(st->getModule()->getTargetNamespaceConnector() + Mstring(":") + st->getName().convertedValue); + st->addToNameDepList(this); + nameDep = st; + if (name.originalValueWoPrefix.empty()) { + name.upload(st->getName().convertedValue); + } + if (fromRef) { + addNameSpaceAsVariant(this, st); + } + if(st->getSubstitution() != NULL){ + st->getSubstitution()->addToNameDepList(this); + nameDep = st->getSubstitution(); + } } +} - printVariant(file); +void ComplexType::resolveSimpleTypeExtension() { + if (mode == extensionMode && cmode == CT_simpletype_mode && basefield != NULL) { + SimpleType * st = (SimpleType*) TTCN3ModuleInventory::getInstance().lookup(basefield, want_BOTH); + if (st != NULL) { + if (st->getXsdtype() != n_NOTSET && ((ComplexType*) st)->basefield != NULL) { // if the xsdtype != simpletype + ComplexType * ct = (ComplexType*) st; + if (ct->resolved == No) { + ct->referenceResolving(); + } + basefield->outside_reference.set_resolved(ct); + ct->basefield->addToNameDepList(basefield); + basefield->nameDep = ct->basefield; + basefield->mode = extensionMode; + basefield->applyReference(*ct->basefield, true); + addNameSpaceAsVariant(basefield, ct->basefield); + applyAttributeExtension(ct); + } else { + if (!st->getReference().empty() && !st->getReference().is_resolved()) { + st->referenceResolving(); + } + st->addToNameDepList(basefield); + addNameSpaceAsVariant(basefield, st); + basefield->nameDep = st; + } + } else if(!isBuiltInType(basefield->getType().convertedValue)){ + printError(module->getSchemaname(), name.convertedValue, + "Reference for a non-defined type: " + basefield->getReference().repr()); + TTCN3ModuleInventory::getInstance().incrNumErrors(); + return; + } - fprintf(file, ";\n\n\n"); + } } -void ComplexType::printVariant(FILE * file) -{ - if (e_flag_used) return; - - bool foundAtLeastOneVariant = false; - if (!variant.empty()) - foundAtLeastOneVariant = true; - for (List<FieldType*>::iterator field = fields_final.begin(); field; field = field->Next) - { - if (!field->Data->getVariant().empty()) { - foundAtLeastOneVariant = true; - break; +void ComplexType::resolveSimpleTypeRestriction() { + if (mode == restrictionMode && cmode == CT_simpletype_mode && basefield != NULL && !basefield->outside_reference.empty()) { + SimpleType * st = (SimpleType*) TTCN3ModuleInventory::getInstance().lookup(basefield, want_BOTH); + if (st == NULL) { + printError(module->getSchemaname(), name.convertedValue, + "Reference for a non-defined type: " + basefield->getReference().repr()); + TTCN3ModuleInventory::getInstance().incrNumErrors(); + return; + } + basefield->outside_reference.set_resolved(st); + if (st->getXsdtype() != n_NOTSET) { + ComplexType * ct = (ComplexType*) st; + if (ct->resolved == No) { + ct->referenceResolving(); + } + applyAttributeRestriction(ct); + basefield->mode = restrictionMode; + if (ct->cmode == CT_complextype_mode) { + applyReference(*ct, true); + type.upload(ct->getName().convertedValue); + basefield->setInvisible(); + } else if (ct->basefield != NULL) { + basefield->applyReference(*ct->basefield); + addNameSpaceAsVariant(basefield, ct->basefield); + } else if (ct->basefield == NULL) { + basefield->applyReference(*ct); + addNameSpaceAsVariant(basefield, ct); + } + } else { + if (!st->getReference().empty() && !st->getReference().is_resolved()) { + st->referenceResolving(); + } + if(xsdtype == n_simpleContent){ + basefield->applyReference(*st, true); + addNameSpaceAsVariant(basefield, st); + basefield->mode = restrictionMode; + }else if(xsdtype == n_simpleType){ + basefield->setInvisible(); + applyReference(*basefield, true); + applyReference(*st, true); + addNameSpaceAsVariant(this, st); + basefield->mode = restrictionMode; + } + } + } else if (mode == restrictionMode && cmode == CT_simpletype_mode && basefield != NULL) { + ComplexType * ct = (ComplexType*) TTCN3ModuleInventory::getInstance().lookup(basefield, want_CT); + if (ct == NULL && !isBuiltInType(basefield->getType().convertedValue)) { + printError(module->getSchemaname(), name.convertedValue, + "Reference for a non-defined type: " + basefield->getReference().repr()); + TTCN3ModuleInventory::getInstance().incrNumErrors(); + return; + } + + basefield->outside_reference.set_resolved(ct); + if (ct != NULL) { + if (ct->resolved == No) { + ct->referenceResolving(); + } + for (List<AttributeType*>::iterator f = ct->attribfields.begin(); f; f = f->Next) { + AttributeType * attr = new AttributeType(*f->Data); + attribfields.push_back(attr); + setParent(this, attr); + } + addNameSpaceAsVariant(this, ct); + } + if(!basefield->parent->top){ + applyReference(*basefield, true); + basefield->setInvisible(); } } - if (!foundAtLeastOneVariant) return; +} +void ComplexType::resolveComplexTypeExtension() { + if (mode == extensionMode && cmode == CT_complextype_mode && !outside_reference.empty()) { + ComplexType * ct = (ComplexType*) TTCN3ModuleInventory::getInstance().lookup(this, want_CT); + if (ct == NULL) { + printError(module->getSchemaname(), name.convertedValue, + "Reference for a non-defined type: " + getReference().repr()); + TTCN3ModuleInventory::getInstance().incrNumErrors(); + return; + } + if(ct->getXsdtype() != n_NOTSET){ + outside_reference.set_resolved(ct); + if (ct->resolved == No) { + ct->referenceResolving(); + } + List<AttributeType*>::iterator anyAttr = attribfields.begin(); + for (; anyAttr; anyAttr = anyAttr->Next) { + if (anyAttr->Data->isAnyAttribute()) { + break; + } + } - fprintf(file, "\nwith {\n"); + if (anyAttr != NULL) { + applyAttributeExtension(ct, anyAttr->Data); + } else { + applyAttributeExtension(ct); + } - bool useUnionVariantWhenMainTypeIsRecordOf = false; - for (List<Mstring>::iterator var = variant.end(); var; var = var->Prev) - { - if ((minOccurs != 1 || maxOccurs != 1) && (var->Data == "\"useUnion\"")) { // main type is a record of - useUnionVariantWhenMainTypeIsRecordOf = true; // TR HL15893 + if (ct->getName().convertedValue == outside_reference.get_val() && ct->getModule()->getTargetNamespace() == outside_reference.get_uri()) { + //Self recursion + outside_reference.set_resolved(ct); + for (List<ComplexType*>::iterator f = ct->complexfields.end(); f; f = f->Prev) { + if (f->Data != this) { //not a self recursive field + ComplexType * newField = new ComplexType(*f->Data); + complexfields.push_front(newField); + setParent(this, newField); + } else { + //Self recursive field + ComplexType * field = new ComplexType(this); + field->name.upload(f->Data->getName().convertedValue); + field->applyReference(*f->Data); + field->type.upload(ct->getName().convertedValue + Mstring(".") + f->Data->getName().convertedValue); + field->type.no_replace = true; + field->minOccurs = f->Data->minOccurs; + field->maxOccurs = f->Data->maxOccurs; + complexfields.push_front(field); + setParent(this, field); + } + } + } else { + //Normal extension + for (List<ComplexType*>::iterator f = ct->complexfields.end(); f; f = f->Prev) { + ComplexType * newField = new ComplexType(*f->Data); + complexfields.push_front(newField); + setParent(this, newField); + } + } } - else { - fprintf(file, "variant %s;\n", var->Data.c_str()); + } +} + +void ComplexType::resolveComplexTypeRestriction() { + if (mode == restrictionMode && cmode == CT_complextype_mode && !outside_reference.empty()) { + ComplexType * ct = (ComplexType*) TTCN3ModuleInventory::getInstance().lookup(this, want_CT); + if(ct->getXsdtype() != n_NOTSET){ + if (ct->resolved == No) { + ct->referenceResolving(); + } + outside_reference.set_resolved(ct); + applyAttributeRestriction(ct); + + size_t size = complexfields.size(); + size_t i = 0; + List<ComplexType*>::iterator field = complexfields.begin(); + for (; i < size; field = field->Next, i = i + 1){ + List<ComplexType*>::iterator field2 = ct->complexfields.begin(); + for (; field2; field2 = field2->Next) { + if (field->Data->getName().convertedValue == field2->Data->getName().convertedValue && + field->Data->getType().convertedValue == field2->Data->getType().convertedValue) { + field->Data->applyReference(*field2->Data, false); + break; + } + } + if(field2 == NULL){ + field->Data->setInvisible(); + } + } } } - if (useUnionVariantWhenMainTypeIsRecordOf) { - fprintf(file, "variant ([-]) \"useUnion\";\n"); +} + +void ComplexType::resolveUnion(SimpleType *st) { + if (parent != NULL && parent->with_union && xsdtype == n_simpleType && !outside_reference.empty()) { + if (st->getXsdtype() != n_NOTSET) { + ComplexType * ct = (ComplexType*) st; + outside_reference.set_resolved(ct); + for (List<ComplexType*>::iterator field = ct->complexfields.begin(); field; field = field->Next) { + ComplexType * newField = new ComplexType(*field->Data); + parent->complexfields.push_back(newField); + setParent(parent, newField); + } + setInvisible(); + } } +} - for (List<FieldType*>::iterator field = fields_final.begin(); field; field = field->Next) - { - if (field->Data->getVariant().empty()) continue; +void ComplexType::modifyAttributeParent() { + if (nillable_field != NULL) { + ((ComplexType*) nillable_field)->actfield = nillable_field; + } else { + actfield = this; + } +} - expstring_t localPath = mcopystr(field->Data->getPath().c_str()); - localPath = mtruncstr(localPath, mstrlen(localPath)-1); - size_t loclen = mstrlen(localPath); - if (loclen >= 3) { - char * pointer = localPath + loclen - 3; - if (pointer[0]=='[' && pointer[1]=='-' && pointer[2]==']') { - localPath = mtruncstr(localPath, loclen - 3); +void ComplexType::addSubstitution(SimpleType* st){ + ComplexType * element; + if(st->getXsdtype() == n_NOTSET || !complexfields.empty()){ + element = new ComplexType(*st, fromTagSubstition); + }else { + element = new ComplexType(*(ComplexType*)st); + element->variant.clear(); + } + element->subsGroup = this; + element->parent = this; + if(complexfields.empty()){ //The first element(head) + element->setTypeValue(st->getType().convertedValue); + if(st->hasVariant(Mstring("\"abstract\""))){ + element->addVariant(V_onlyValueHidden, Mstring("\"abstract\"")); + } + }else { + Mstring newType; + if(st->getType().convertedValue == "anyType"){ + newType = complexfields.front()->getType().convertedValue; + }else { + newType = st->getName().convertedValue; + st->addToNameDepList(element); + } + element->setTypeValue(newType); + BlockValue front_block = complexfields.front()->getBlock(); + if(front_block == all || front_block == substitution){ + element->addVariant(V_onlyValueHidden, Mstring("\"block\"")); + }else if(front_block == restriction || front_block == extension){ + const Mstring& head_type = complexfields.front()->getType().convertedValue.getValueWithoutPrefix(':'); + Mstring elem_type = findRoot(front_block, st, head_type, true); + if(head_type == elem_type){ + element->addVariant(V_onlyValueHidden, Mstring("\"block\"")); } } - if (minOccurs != 1 || maxOccurs != 1) { // main type is a record of - expstring_t temp = mcopystr(localPath); - Free(localPath); - localPath = mprintf("[-].%s", temp); - Free(temp); - } + } - bool already_used = false; + element->setNameValue(st->getName().convertedValue); + element->top = false; + complexfields.push_back(element); +} - for (List<Mstring>::iterator var2 = field->Data->getVariant().end(); var2; var2 = var2->Prev) - { - if (var2->Data == "\"untagged\"" && !already_used) - { - fprintf(file, "variant (%s) %s;\n", localPath, var2->Data.c_str()); - already_used = true; +Mstring ComplexType::findRoot(const BlockValue block_value, SimpleType* elem, const Mstring& head_type, const bool first){ + if(!first && elem->getType().convertedValue.getValueWithoutPrefix(':') == head_type && !isFromRef()){ + return elem->getType().convertedValue.getValueWithoutPrefix(':'); + }else if(elem->getType().convertedValue.getValueWithoutPrefix(':') == head_type && (isFromRef() && ((elem->getMode() == restrictionMode && block_value == restriction) || (elem->getMode() == extensionMode && block_value == extension)))){ + return elem->getType().convertedValue.getValueWithoutPrefix(':'); + }else { + SimpleType * st = NULL; + if((elem->getMode() == restrictionMode && block_value == restriction) || + (elem->getMode() == extensionMode && block_value == extension)){ + if(!elem->getReference().is_resolved()){ + elem->referenceResolving(); } - else - { - if ((field->Data->getMinOccurs() != 1 || field->Data->getMaxOccurs() != 1) && - field->Data->getName().list_extension) { - fprintf(file, "variant (%s[-]) %s;\n", localPath, var2->Data.c_str()); - } - else { - fprintf(file, "variant (%s) %s;\n", localPath, var2->Data.c_str()); + if(elem->getXsdtype() != n_NOTSET){ + ComplexType * ct = (ComplexType*)elem; + if(ct->basefield != NULL && ct->basefield->getType().convertedValue.getValueWithoutPrefix(':') == head_type){ + return head_type; + }else if(ct->basefield != NULL){ + st = (SimpleType*)TTCN3ModuleInventory::getInstance().lookup(ct->basefield, want_BOTH); } } + if(st == NULL){ + st = (SimpleType*)(elem->getReference().get_ref()); + } + }else if(elem->getMode() == noMode && (block_value == restriction || block_value == extension)){ + st = (SimpleType*)TTCN3ModuleInventory::getInstance().lookup(this, elem->getType().convertedValue, want_BOTH); + } + if(st != NULL && elem != st){ + return findRoot(block_value, st, head_type, false); } - Free(localPath); } - fprintf(file, "}"); -} - -void ComplexType::dump(unsigned int depth) const -{ - fprintf(stderr, "%*s %sComplexType at %p\n", depth * 2, "", isVisible() ? "" : "(hidden)", (const void*)this); - fprintf(stderr, "%*s name='%s' -> '%s', %d fields\n", depth * 2, "", - name.originalValueWoPrefix.c_str(), name.convertedValue.c_str(), (int)fields.size()); - for (List<FieldType*>::iterator field = fields.begin(); field; field = field->Next) { - field->Data->dump(depth+1); - } - fprintf(stderr, "%*s %d final fields\n", depth * 2, "", (int)fields_final.size()); - for (List<FieldType*>::iterator field = fields_final.begin(); field; field = field->Next) { - field->Data->dump(depth+1); + if(elem->getMode() == noMode && !first){ + return elem->getType().convertedValue.getValueWithoutPrefix(':'); + }else { + return empty_string; } } diff --git a/xsdconvert/ComplexType.hh b/xsdconvert/ComplexType.hh index 1f99cc6d8..e310e32bc 100644 --- a/xsdconvert/ComplexType.hh +++ b/xsdconvert/ComplexType.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -9,64 +9,12 @@ #define COMPLEXTYPE_H_ #include "RootType.hh" +#include "SimpleType.hh" +#include "TTCN3Module.hh" +#include "AttributeType.hh" -class FieldType; -class SimpleType; - -class EmbeddedType -{ -public: - int depth; - bool valid; - bool strictValid; - unsigned long long int minOccurs; - unsigned long long int maxOccurs; - FieldType * order_attribute; - - explicit EmbeddedType (int a_depth=0, unsigned long long int a_minOccurs=1, unsigned long long int a_maxOccurs=1, - FieldType * a_order_attribute=NULL) - : depth(a_depth) - , valid(true) - , strictValid(true) - , minOccurs(a_minOccurs) - , maxOccurs(a_maxOccurs) - , order_attribute(a_order_attribute) - {} -}; - -class GenerationType -{ -public: - FieldType * field; - int depth; - FieldType * order_attribute; - FieldType * embed_values_attribute; - int max_alt; - - explicit GenerationType (FieldType * a_field = NULL, int a_depth = 0, - FieldType * a_order_attribute = NULL, FieldType * a_embed_values_attribute = NULL, int a_max_alt = 0) - : field(a_field) - , depth(a_depth) - , order_attribute(a_order_attribute) - , embed_values_attribute(a_embed_values_attribute) - , max_alt(a_max_alt) - {} -}; - -class AttrBaseType -{ -public: - FieldType * base; - int depth; - bool valid; - - explicit AttrBaseType (FieldType * a_base = NULL, int a_depth = 0) - : base(a_base) - , depth(a_depth) - , valid(true) - {} -}; +class AttributeType; /** * Type that contains information coming from XSD complexTypes, model group definitions @@ -75,27 +23,29 @@ public: * Source in XSD: * * * <complexType>, <group> and <attributeGroup> element whose parent element is <schema> + * * <element> if nillable, or is a child of <complexType> * * Result in TTCN-3: * * * TTCN-3 type * */ -class ComplexType : public RootType -{ +class ComplexType : public SimpleType { public: - enum ComplexType_Mode - { + + enum ComplexType_Mode { CT_simpletype_mode, CT_complextype_mode, CT_undefined_mode }; - enum CT_fromST - { + + enum CT_fromST { fromTagUnion, fromTagNillable, - fromTagComplexType + fromTagComplexType, + fromTagSubstition }; + enum Resolv_State { No, InProgress, @@ -103,74 +53,103 @@ public: }; private: - List<FieldType*> fields; - List<FieldType*> fields_final; - - int actualLevel; - Mstring actualPath; - - List<ComplexType_Mode> ctmode; - List<GenerationType> fieldGenInfo; - List<GenerationType> recGenInfo; - List<AttrBaseType> attributeBases; - List<EmbeddedType> embed_inSequence; - List<EmbeddedType> embed_inChoice; - List<EmbeddedType> embed_inAll; + //If the complextype is a top level component (child of schema) + bool top; + bool nillable; + bool enumerated; + bool embed; bool with_union; + bool first_child; + bool fromAll; + unsigned max_alt; + int skipback; + TagName lastType; + Mstring actualPath; + RootType * actfield; + SimpleType * nameDep; + RootType * nillable_field; + ComplexType * basefield; + ComplexType_Mode cmode; Resolv_State resolved; - FieldType * generateField (); - FieldType * generateAttribute (); - FieldType * generateRecord (unsigned long long int a_minOccurs, unsigned long long int a_maxOccurs); - FieldType * generateUnion (unsigned long long int a_minOccurs, unsigned long long int a_maxOccurs); - - void initialSettings (); - - void reference_resolving_funtion (List<FieldType*> & container); - void sortAttributes (); - void nameConversion_names (const List<NamespaceType> & ns); - void nameConversion_types (const List<NamespaceType> & ns); - void nameConversion_fields (const List<NamespaceType> & ns); - void indent (FILE * file, int x) { for (int l = 0; l < x; ++l) fprintf(file, "\t"); } - void printVariant (FILE * file); + void applyAttributeRestriction(ComplexType * found_CT); + void applyAttributeExtension(ComplexType * found_CT, AttributeType * anyAttr = NULL); + void nameConversion_names(const List<NamespaceType> & ns); + void nameConversion_types(const List<NamespaceType> & ns); + void nameConversion_fields(const List<NamespaceType> & ns); + void setFieldPaths(Mstring path); + void collectVariants(List<Mstring>& container); + void addNameSpaceAsVariant(RootType * type, RootType * other); + void setMinMaxOccurs(const unsigned long long min, const unsigned long long max, const bool generate_list_postfix = true); + void applyNamespaceAttribute(VariantMode varLabel, const Mstring& ns_list); + void applyReference(const SimpleType & other, const bool on_attributes = false); + void setParent(ComplexType * par, SimpleType * child); + void finalModification2(); + Mstring findRoot(const BlockValue value, SimpleType * elem, const Mstring& head_type, const bool first); + + //Reference resolving functions + void reference_resolving_funtion(); + void resolveAttribute(AttributeType *attr); + void resolveAttributeGroup(SimpleType *st); + void resolveGroup(SimpleType *st); + void resolveElement(SimpleType *st); + void resolveSimpleTypeExtension(); + void resolveSimpleTypeRestriction(); + void resolveComplexTypeExtension(); + void resolveComplexTypeRestriction(); + void resolveUnion(SimpleType *st); + + void printVariant(FILE * file); public: - ComplexType (XMLParser * a_parser, TTCN3Module * a_module, ConstructType a_construct); - ComplexType (const ComplexType & other); - ComplexType (const SimpleType & other, CT_fromST c); - ~ComplexType (); + List<ComplexType*> complexfields; + List<AttributeType*> attribfields; + List<Mstring> enumfields; + List<TagName> tagNames; + + ComplexType(XMLParser * a_parser, TTCN3Module * a_module, ConstructType a_construct); + ComplexType(ComplexType & other); + ComplexType(const SimpleType & other, CT_fromST c); + ComplexType(ComplexType * other); + ~ComplexType(); + + void modifyAttributeParent(); + void addSubstitution(SimpleType* st); /** Virtual methods * inherited from RootType */ - void loadWithValues (); - void printToFile (FILE * file); + void loadWithValues(); + void addComment(const Mstring& text); + void printToFile(FILE * file); + void printToFile(FILE * file, const unsigned level, const bool is_union); - void modifyValues (); - void referenceResolving (); - void nameConversion (NameConversionMode mode, const List<NamespaceType> & ns); - void finalModification (); - bool hasUnresolvedReference (); - void dump (unsigned int depth) const ; + void modifyValues(); + void referenceResolving(); + void nameConversion(NameConversionMode mode, const List<NamespaceType> & ns); + void finalModification(); + bool hasUnresolvedReference(){ return resolved == No; } - void everything_into_fields_final (); + void dump(unsigned int depth) const; - void addToActualPath (const Mstring& text) {actualPath += text;} - - void setWithUnion (bool b) {with_union = b;} +}; - const List<EmbeddedType> & getEmbedInChoice () const {return embed_inChoice;} +inline bool compareComplexTypeNameSpaces(ComplexType * lhs, ComplexType * rhs) { + if (lhs->getModule()->getTargetNamespace() == Mstring("NoTargetNamespace") && rhs->getModule()->getTargetNamespace() == Mstring("NoTargetNamespace")) { + return false; + } else if (lhs->getModule()->getTargetNamespace() == Mstring("NoTargetNamespace")) { + return true; + } else if (rhs->getModule()->getTargetNamespace() == Mstring("NoTargetNamespace")) { + return false; + } else { + return lhs->getModule()->getTargetNamespace() <= rhs->getModule()->getTargetNamespace(); + } +} - const List<FieldType*> & getFields () const {return fields;} - const List<FieldType*> & getFieldsFinal () const {return fields_final;} - bool getWithUnion () const {return with_union;} +inline bool compareTypes(ComplexType * lhs, ComplexType * rhs) { + return lhs->getName().convertedValue < rhs->getName().convertedValue; +} - int getActualLevel () const {return actualLevel;} - const Mstring & getActualPath () const {return actualPath;} - ComplexType_Mode getMode() const { - return ctmode.empty() ? CT_undefined_mode : ctmode.front(); - } -}; #endif /* COMPLEXTYPE_H_ */ diff --git a/xsdconvert/FieldType.cc b/xsdconvert/FieldType.cc deleted file mode 100644 index 986fc6ce4..000000000 --- a/xsdconvert/FieldType.cc +++ /dev/null @@ -1,587 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 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 -/////////////////////////////////////////////////////////////////////////////// -#include "FieldType.hh" - -#include "GeneralFunctions.hh" -#include "TTCN3Module.hh" -#include "TTCN3ModuleInventory.hh" -#include "ComplexType.hh" - -int FieldType::variantIdCounter = 0; - -FieldType::FieldType(ComplexType * a_complexType) -: SimpleType(a_complexType->getParser(), a_complexType->getModule(), c_unknown) -, parent(a_complexType) -, attributes() -, level(1) -, isAnyAttr(false) -, path() -, variantID() -{} - -FieldType::FieldType(const FieldType & other) -: SimpleType(other) -, parent(other.parent) -, attributes() -, level(other.level) -, isAnyAttr(other.isAnyAttr) -, path(other.path) -, variantID(other.variantID) -{ - for (List<FieldType*>::iterator attr = other.attributes.begin(); attr; attr = attr->Next) { - attributes.push_back(new FieldType(*(attr->Data))); - } -} - -FieldType::~FieldType() -{ - for (List<FieldType*>::iterator attr = attributes.begin(); attr; attr = attr->Next) { - delete(attr->Data); - } -} - -void FieldType::setTypeOfField(const Mstring& in) -{ - type.upload(in); -} - -void FieldType::setNameOfField(const Mstring& in, bool add_to_path_for_later_use, bool from_ref_attribute) -{ - if (from_ref_attribute) - name.convertedValue = in; // name.originalValueWoPrefix not set - else - name.upload(in); - - variantID = generateVariantId(); - path = parent->getActualPath() + variantID + "."; - if (add_to_path_for_later_use) parent->addToActualPath(variantID + "."); -} - -void FieldType::setToAnyAttribute() -{ - isAnyAttr = true; -} - -Mstring FieldType::generateVariantId() -{ - expstring_t tmp_string = memptystr(); - Mstring name1(parent->getName().convertedValue.c_str()); - Mstring name2(name.convertedValue.c_str()); - for (size_t i = 0; i != name1.size(); ++i) { - if (name1[i] == '.') name1[i] = '_'; - } - for (size_t i = 0; i != name2.size(); ++i) { - if (name2[i] == '.') name2[i] = '_'; - } - tmp_string = mputprintf(tmp_string, - "##%s%d%s#", - name1.c_str(), - variantIdCounter++, - name2.c_str()); - - Mstring retval(tmp_string); - Free(tmp_string); - return retval; -} - -void FieldType::applyRefAttribute(const Mstring& ref_value) -{ - if (!ref_value.empty()) { - setNameOfField(ref_value, false, true); - setTypeOfField(ref_value); - setReference(ref_value); - } -} - -void FieldType::applyUseAttribute(UseValue use_value, unsigned long long & minOcc, unsigned long long & maxOcc) -{ - switch (use_value) - { - case optional: - minOcc = 0; - maxOcc = 1; - break; - case required: - minOcc = 1; - maxOcc = 1; - break; - case prohibited: - minOcc = 0; - maxOcc = 0; - break; - } -} - -void FieldType::applyNamespaceAttribute(VariantMode varLabel, const Mstring& ns_list) -{ - List<Mstring> namespaces; - if (!ns_list.empty()) { - expstring_t valueToSplitIntoTokens = mcopystr(ns_list.c_str()); - char * token; - token = strtok (valueToSplitIntoTokens," "); - while (token != NULL) - { - namespaces.push_back(Mstring(token)); - token = strtok (NULL, " "); - } - Free(valueToSplitIntoTokens); - } - - Mstring any_ns; - bool first = true; - // Note: libxml2 will verify the namespace list according to the schema - // of XML Schema. It is either ##any, ##other, ##local, ##targetNamespace, - // or a list of (namespace reference | ##local | ##targetNamespace). - for (List<Mstring>::iterator ns = namespaces.begin(); ns; ns = ns->Next) - { - static const Mstring xxany("##any"), xxother("##other"), xxlocal("##local"), - xxtargetNamespace("##targetNamespace"); - if (!first) any_ns += ','; - - if (ns->Data == xxany) {} // this must be the only element, nothing to add - else if (ns->Data == xxother) { // this must be the only element - any_ns += " except unqualified"; - if (module->getTargetNamespace() != "NoTargetNamespace") { - any_ns += ", \'"; - any_ns += parent->getModule()->getTargetNamespace(); - any_ns += '\''; - } - } - // The three cases below can happen multiple times - else { - if (first) any_ns += " from "; - // else a comma was already added - if (ns->Data == xxtargetNamespace) { - any_ns += '\''; - any_ns += parent->getModule()->getTargetNamespace(); - any_ns += '\''; - } - else if (ns->Data == xxlocal) { - any_ns += "unqualified"; - } - else { - any_ns += '\''; - any_ns += ns->Data; - any_ns += '\''; - } - } - - first = false; - } - - addVariant(varLabel, any_ns, true); -} - -void FieldType::applyMinMaxOccursAttribute( - unsigned long long minOccurs_value, unsigned long long maxOccurs_value, - bool generate_list_postfix) -{ - minOccurs = minOccurs_value; - maxOccurs = maxOccurs_value; - - if (generate_list_postfix) { - if (minOccurs == 1 && maxOccurs == 1) {} - else if (minOccurs == 0 && maxOccurs == 1) { - // This would be an optional field... - if (!parent->getEmbedInChoice().empty() - && parent->getEmbedInChoice().back().strictValid) { - // except in a choice we can't have optional, so we simulate it - // with a record length(0..1) of ... - name.list_extension = true; - } - } - else { - name.list_extension = true; - } - } -} - -void FieldType::setLevel(int l) -{ - level = l; - for (List<FieldType*>::iterator attr = attributes.begin(); attr; attr = attr->Next) { - attr->Data->level = l; - } -} - -void FieldType::variantIdReplaceInPath(const Mstring& varid, const Mstring& text) -{ - const char * const temp_path = path.c_str(); - const char * temp_path_end = temp_path + path.size(); - const char * found_begin = strstr(temp_path, varid.c_str()); - const char * found_end = found_begin + varid.size(); - - expstring_t result = NULL; - - if (found_begin != NULL) - { - result = mcopystrn(temp_path, (found_begin - temp_path)); - result = mputstr(result, text.c_str()); - result = mputstrn(result, found_end, (temp_path_end - found_end)); - path = result; - } - - Free(result); -} - -void FieldType::applyReference(const FieldType & other, bool on_attributes) -{ - type.convertedValue = other.type.convertedValue; - type.originalValueWoPrefix = other.type.convertedValue; - - if (other.minOccurs > minOccurs || other.maxOccurs < maxOccurs) { - if (!on_attributes) { - expstring_t temp = memptystr(); - temp = mputprintf( - temp, - "The occurrence range (%llu .. %llu) of the element (%s) is not compatible " - "with the occurrence range (%llu .. %llu) of the referenced element.", - minOccurs, - maxOccurs, - name.originalValueWoPrefix.c_str(), - other.minOccurs, - other.maxOccurs); - printError(module->getSchemaname(), parent->getName().originalValueWoPrefix, - Mstring(temp)); - Free(temp); - TTCN3ModuleInventory::getInstance().incrNumErrors(); - } - } - else { - minOccurs = llmax(minOccurs, other.minOccurs); - maxOccurs = llmin(maxOccurs, other.maxOccurs); - } - - for (List<Mstring>::iterator var = other.variant_ref.begin(); var; var = var->Next) { - bool found = false; - for (List<Mstring>::iterator var1 = variant.begin(); var1; var1 = var1->Next) { - if (var->Data == var1->Data) { - found = true; - } - } - if (!found) { - variant.push_back(var->Data); - variant_ref.push_back(var->Data); - } - } - // comment; - - builtInBase = other.getBuiltInBase(); - - length.applyReference(other.length); - pattern.applyReference(other.pattern); - enumeration.applyReference(other.enumeration); - whitespace.applyReference(other.whitespace); - value.applyReference(other.value); - - // reference_for_other = resolved; - - checkSortAndAddAttributes(other.attributes); - - setLevel(level + other.getLevel() - 1); -} - -void FieldType::referenceForST(SimpleType const * const found_ST, - List<FieldType*> & temp_container) -{ - outside_reference.set_resolved(found_ST); - - if (!in_name_only) { - type = found_ST->getName(); - if (name.originalValueWoPrefix.empty()) { - name.convertedValue = found_ST->getName().originalValueWoPrefix; - } - builtInBase = found_ST->getBuiltInBase(); - for (List<Mstring>::iterator var = found_ST->getVariantRef().begin(); var; var = var->Next) { - variant.push_back(var->Data); - } - if (found_ST->getModule()->getTargetNamespace() != module->getTargetNamespace() && - found_ST->getModule()->getTargetNamespace() != "NoTargetNamespace") { - addVariant(V_namespaceAs, found_ST->getModule()->getTargetNamespace()); - } - } - temp_container.push_back(this); -} - -static const Mstring attribute_variant("\"attribute\""); -// The field (which may become a record field or maybe a union alternative) -// refers to a complexType -FieldType* FieldType::referenceForCT(ComplexType & found_CT, - List<FieldType*> & temp_container, List<ImportedField> & temp_container_imported) -{ - found_CT.referenceResolving(); - outside_reference.set_resolved(&found_CT); - if (in_name_only) { - temp_container.push_back(this); - return 0; - } - - switch (found_CT.getOrigin()) - { - case from_element: - case from_attribute: - case from_simpleType: { - bool is_attribute = false; - for (List<Mstring>::iterator it = variant.begin(); it; it = it->Next) { - if (it->Data == attribute_variant) { - is_attribute = true; - break; - } - } - - if (!is_attribute && found_CT.getWithUnion()) - { - // Import fields (union alternatives) from the referenced type - for (List<FieldType*>::iterator field = found_CT.getFields().begin(); field; field = field->Next) - { - ImportedField fl = { - new FieldType(*(field->Data)), - temp_container.size() ? temp_container.back() : NULL - }; - fl.field->level = level; - - temp_container_imported.push_back(fl); - } - } - else // just refer to the found type - { - type.convertedValue = found_CT.getName().convertedValue; - name.convertedValue = found_CT.getName().convertedValue; - for (List<Mstring>::iterator var = found_CT.getVariantRef().begin(); var; var = var->Next) { - variant.push_back(var->Data); - } - if (found_CT.getModule()->getTargetNamespace() != module->getTargetNamespace() && - found_CT.getModule()->getTargetNamespace() != "NoTargetNamespace") { - addVariant(V_namespaceAs, found_CT.getModule()->getTargetNamespace()); - } - //already done: outside_reference.set_resolved(&found_CT); - temp_container.push_back(this); - } - break; } - - case from_complexType: { - List<FieldType*> import; - for (List<FieldType*>::iterator field = found_CT.getFields().begin(); field; field = field->Next) - { - FieldType *newField = new FieldType(*(field->Data)); // deep copy - - // Hook up the imported field with its new environment - newField->path = truncatePathWithOneElement(path); - newField->variantID = newField->generateVariantId(); - newField->path += newField->variantID + "."; - - import.push_back(newField); - } - - import.begin()->Data->checkSortAndAddAttributes(attributes); - - for (List<FieldType*>::iterator attribute = attributes.begin(); attribute; attribute = attribute->Next) { - delete attribute->Data; - } - attributes.clear(); - - bool found = false; - if (parent->getMode() != ComplexType::CT_complextype_mode) - { - for (List<FieldType*>::iterator imp = import.begin(), nextField; imp; imp = nextField) - { - nextField = imp->Next; - - if (imp->Data->getName().originalValueWoPrefix == name.originalValueWoPrefix) { - // If an imported field has the same name as ourselves,... - FieldType* newField = new FieldType(*this); - newField->applyReference(*(imp->Data)); - if (found_CT.getModule()->getTargetNamespace() != module->getTargetNamespace() && - found_CT.getModule()->getTargetNamespace() != "NoTargetNamespace") { - newField->addVariant(V_namespaceAs, found_CT.getModule()->getTargetNamespace()); - } - //already done: outside_reference.set_resolved(&found_CT); - temp_container.push_back(newField); - delete imp->Data; - import.remove(imp); // backwards remove cheap - found = true; - break; - } - } - } - - if (!found) { - visible = isBuiltInType(type.convertedValue); - FieldType* newField = new FieldType(*this); - if (found_CT.getModule()->getTargetNamespace() != module->getTargetNamespace() && - found_CT.getModule()->getTargetNamespace() != "NoTargetNamespace") { - newField->addVariant(V_namespaceAs, found_CT.getModule()->getTargetNamespace()); - } - //already done: outside_reference.set_resolved(&found_CT); - found_CT.addToNameDepList(newField); - temp_container.push_back(newField); - } - - for (List<FieldType*>::iterator imp = import.begin(); imp; imp = imp->Next) - { - ImportedField fl = { - new FieldType(*(imp->Data)), - temp_container.size() ? temp_container.back() : NULL - }; - fl.field->setLevel(level + imp->Data->getLevel() - 1); - if (mode == SimpleType::restrictionMode) fl.field->visible = false; - - temp_container_imported.push_back(fl); - delete imp->Data; - } - return this; - } - - case from_group: - type.originalValueWoPrefix.clear(); - type.convertedValue = found_CT.getName().convertedValue; - name.convertedValue = found_CT.getName().convertedValue; - for (List<Mstring>::iterator var = found_CT.getVariantRef().begin(); var; var = var->Next) { - variant.push_back(var->Data); - } - if (found_CT.getModule()->getTargetNamespace() != module->getTargetNamespace() && - found_CT.getModule()->getTargetNamespace() != "NoTargetNamespace") { - addVariant(V_namespaceAs, found_CT.getModule()->getTargetNamespace()); - } - //already done: outside_reference.set_resolved(&found_CT); - temp_container.push_back(this); - break; - - case from_attributeGroup: - for (List<FieldType*>::iterator refAttr = found_CT.getFields().back()->attributes.begin(); refAttr; refAttr = refAttr->Next) - { - ImportedField fl = { - new FieldType(*(refAttr->Data)), - temp_container.size() ? temp_container.back() : NULL - }; - - if (fl.field->getName().originalValueWoPrefix != "attr") { - fl.field->addVariant(V_attribute); - } - if (found_CT.getModule()->getTargetNamespace() != module->getTargetNamespace() && - found_CT.getModule()->getTargetNamespace() != "NoTargetNamespace") { - fl.field->addVariant(V_namespaceAs, found_CT.getModule()->getTargetNamespace()); - } - - temp_container_imported.push_back(fl); - } - return this; - - case from_unknown: - break; - } - return 0; -} - -void FieldType::addAttribute(FieldType * attr) -{ - attributes.push_back(attr); -} - -void FieldType::sortAttributes() -{ - bool found = false; - for (List<FieldType*>::iterator attr = attributes.begin(); attr; attr = attr->Next) - { - if (attr->Data->getName().convertedValue == "order" || attr->Data->getName().convertedValue == "embed_values") { - FieldType * temp = attr->Data; - attr->Data = attributes.begin()->Data; - attributes.begin()->Data = temp; - found = true; - break; - } - } - for (List<FieldType*>::iterator attr = attributes.begin(); attr; attr = attr->Next) - { - if (attr == attributes.begin() && found) - continue; - for (List<FieldType*>::iterator attr2 = attr->Next; attr2; attr2 = attr2->Next) - { - if (attr->Data->getName().convertedValue > attr2->Data->getName().convertedValue) { - FieldType * temp = attr->Data; - attr->Data = attr2->Data; - attr2->Data = temp; - } - } - } - - // AnyAttribute must be after the other attributes in the generated tccn files: - for (List<FieldType*>::iterator attr = attributes.begin(); attr; attr = attr->Next) - { - if (attr->Data->isAnyAttribute()) - { - FieldType * temp = attr->Data; - for (List<FieldType*>::iterator attr2 = attr; attr2->Next; attr2 = attr2->Next) - { - attr2->Data = attr2->Next->Data; - } - attributes.end()->Data = temp; - break; - } - } -} - -void FieldType::checkSortAndAddAttributes(const List<FieldType*> & referencedAttributes) -{ - const List<FieldType*> origAttributes(attributes); // copy the pointers - attributes.clear(); - - // Creates a modifiable list with copies of the elements. - // Note that the elements are pointers; they are aliased! - List<FieldType*> refAttributes(referencedAttributes); - - for (List<FieldType*>::iterator origAttr = origAttributes.begin(), nextAttr; origAttr; origAttr = nextAttr) - { - nextAttr = origAttr->Next; - - bool found = false; - for (List<FieldType*>::iterator refAttr = refAttributes.begin(); refAttr; refAttr = refAttr->Next) - { - if (origAttr->Data->getName().convertedValue == refAttr->Data->getName().convertedValue) { - origAttr->Data->applyReference(*(refAttr->Data), true); - attributes.push_back(origAttr->Data); - refAttributes.remove(refAttr); // backwards remove cheap - found = true; - break; - } - } - if (!found) { - attributes.push_back(origAttr->Data); - } - } - - for (List<FieldType*>::iterator refAttr = refAttributes.begin(); refAttr; refAttr = refAttr->Next) - { - FieldType * newAttribute = new FieldType(*(refAttr->Data)); - newAttribute->path = truncatePathWithOneElement(path); - newAttribute->variantID = newAttribute->generateVariantId(); - newAttribute->path += newAttribute->variantID + "."; - attributes.push_back(newAttribute); - } - - sortAttributes(); -} - -void FieldType::dump(unsigned int depth) const -{ - fprintf(stderr, "%*s %sField '%s' -> '%s' at %p\n", depth * 2, "", isVisible() ? "" : "(hidden)", - name.originalValueWoPrefix.c_str(), name.convertedValue.c_str(), (const void*)this); - fprintf(stderr, "%*s type %s, level %d\n", (depth+1) * 2, "", type.convertedValue.c_str(), level); - fprintf(stderr, "%*s (%llu .. %llu)\n" , (depth+1) * 2, "", minOccurs, maxOccurs); - fprintf(stderr, "%*s %d attributes\n" , (depth+1) * 2, "", (int)attributes.size()); - - for (List<FieldType*>::iterator attr = attributes.begin(); attr; attr = attr->Next) { - attr->Data->dump(depth+2); - } - fprintf(stderr, "%*s %d variants: ", (depth+1) * 2, "", (int)variant.size()); - for (List<Mstring>::iterator var = variant.begin(); var; var = var->Next) { - fprintf(stderr, "%s, ", var->Data.c_str()); - } - fprintf(stderr, "\n%*s path =/%s/" , (depth+1) * 2, "", path.c_str()); - fprintf(stderr, "\n%*s varid=|%s|\n", (depth+1) * 2, "", variantID.c_str()); -} diff --git a/xsdconvert/FieldType.hh b/xsdconvert/FieldType.hh deleted file mode 100644 index fd2050653..000000000 --- a/xsdconvert/FieldType.hh +++ /dev/null @@ -1,98 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 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 -/////////////////////////////////////////////////////////////////////////////// -#ifndef FIELDTYPE_HH_ -#define FIELDTYPE_HH_ - -#include "SimpleType.hh" -#include "GeneralTypes.hh" - -class ComplexType; -class FieldType; - -struct ImportedField { - /// The imported field - FieldType *field; - - /** The original field (probably called "base") which caused the import, - * or any other previous field. The point is that the imported field - * follows the "original" field. */ - FieldType *orig; -}; - -/** - * Type that contains information of a field of a TTCN-3 record or union - * - */ -class FieldType : public SimpleType -{ - ComplexType * parent; - - List<FieldType*> attributes; - - int level; - - bool isAnyAttr; - - /// Attribute qualifier - Mstring path; - Mstring variantID; - - static int variantIdCounter; - -public: - explicit FieldType (ComplexType * a_complextype); - FieldType (const FieldType & other); - FieldType & operator = (const FieldType & rhs); - virtual ~FieldType (); - - void setTypeOfField (const Mstring& in); - void setNameOfField (const Mstring& in, bool add_to_path_for_later_use, bool from_ref_attribute = false); - void setToAnyAttribute(); - void applyRefAttribute (const Mstring& ref_value); - void applyUseAttribute (UseValue use_value, unsigned long long & minOcc, unsigned long long & maxOcc); - void applyNillableAttribute (const Mstring& nil_value); - void applyNamespaceAttribute (VariantMode varLabel, const Mstring& ns_list); - - void applyMinMaxOccursAttribute (unsigned long long minOccurs_value, unsigned long long maxOccurs_value, - bool generate_list_postfix = false); - - void setLevel (int l); - void incrLevel () {level++;} - - int getLevel () const {return level;} - const Mstring& getPath () const {return path;} - const Mstring& getVariantId () const {return variantID;} - - bool isOptional () const {return minOccurs == 0 && maxOccurs == 1 && !name.list_extension;} - bool isAnyAttribute() const {return isAnyAttr;} - - Mstring generateVariantId (); - void variantIdReplaceInPath (const Mstring& varid, const Mstring& text); - - void applyReference (const FieldType & other, bool on_attributes = false); - - void referenceForST (SimpleType const * const found_ST, - List<FieldType*> & temp_container); - - /** Resolves the reference to the given ComplexType. The fields of the referenced type - * will be copied into one of the containers. - * @return 0 if the current field has been added to the container (the field can not be deleted) - * "this" if a copy of the field has been added (the field can be deleted) - */ - FieldType* referenceForCT (ComplexType & found_CT, - List<FieldType*> & temp_container, List<ImportedField> & temp_container_imported); - - List<FieldType*> & getAttributes () {return attributes;} - void addAttribute (FieldType * attr); - void sortAttributes (); - void checkSortAndAddAttributes (const List<FieldType*> & referencedAttributes); - - void dump (unsigned int depth) const; -}; - -#endif /* FIELDTYPE_HH_ */ diff --git a/xsdconvert/GeneralFunctions.cc b/xsdconvert/GeneralFunctions.cc index e2d8a5c9c..f4817a658 100644 --- a/xsdconvert/GeneralFunctions.cc +++ b/xsdconvert/GeneralFunctions.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -13,6 +13,7 @@ #include <cstring> #include <cstdio> #include <cmath> +#include <regex.h> extern bool w_flag_used; @@ -24,11 +25,10 @@ extern bool w_flag_used; // res - generated result // variant - generated variant string for TTCN-3 // + void XSDName2TTCN3Name(const Mstring& in, QualifiedNames & used_names, modeType type_of_the_name, - Mstring & res, Mstring & variant) -{ - static const char* TTCN3_reserved_words[] = - { + Mstring & res, Mstring & variant, bool no_replace) { + static const char* TTCN3_reserved_words[] = { "action", "activate", "address", "alive", "all", "alt", "altstep", "and", "and4b", "any", "anytype", "apply", "bitstring", "boolean", "break", "call", "case", "catch", "char", "charstring", "check", "clear", "complement", "component", "connect", @@ -56,15 +56,14 @@ void XSDName2TTCN3Name(const Mstring& in, QualifiedNames & used_names, modeType "xor", "xor4b", NULL }; - static const char* TTCN3_predefined_functions[] = - { + static const char* TTCN3_predefined_functions[] = { "bit2int", "bit2hex", "bit2oct", "bit2str", "char2int", "char2oct", "decomp", "decvalue", "encvalue", "enum2int", "float2int", "float2str", "hex2bit", "hex2int", "hex2oct", "hex2str", - "int2bit", "int2char", "int2float", "int2hex", "int2oct", "int2str", "int2unichar", + "int2bit", "int2char", "int2enum", "int2float", "int2hex", "int2oct", "int2str", "int2unichar", "isvalue", "ischosen", "ispresent", "lengthof", "log2str", "oct2bit", "oct2char", "oct2hex", "oct2int", "oct2str", "oct2unichar" @@ -74,8 +73,7 @@ void XSDName2TTCN3Name(const Mstring& in, QualifiedNames & used_names, modeType "unichar2int", "unichar2char", "unichar2oct", NULL }; - static const char* ASN1_reserved_words[] = - { + static const char* ASN1_reserved_words[] = { "ABSENT", "ABSTRACT-SYNTAX", "ALL", "APPLICATION", "AUTOMATIC", "BEGIN", "BIT", "BMPString", "BOOLEAN", "BY", "CHARACTER", "CHOICE", "CLASS", "COMPONENT", "COMPONENTS", "CONSTRAINED", "CONTAINING", @@ -113,8 +111,7 @@ void XSDName2TTCN3Name(const Mstring& in, QualifiedNames & used_names, modeType // If the type or field reference name is an XSD built-in type then it will be capitalized and get a prefix "XSD." // if (type_of_the_name == type_reference_name || type_of_the_name == field_reference_name) { - if (type_of_the_name == type_reference_name) - { + if (type_of_the_name == type_reference_name) { if (isBuiltInType(res)) { res[0] = toupper(res[0]); res = "XSD." + res; @@ -122,19 +119,16 @@ void XSDName2TTCN3Name(const Mstring& in, QualifiedNames & used_names, modeType } if (res == "record" || res == "union" || - res == "set" ) - { + res == "set") { return; } } - if (type_of_the_name == enum_id_name) - { + if (type_of_the_name == enum_id_name) { bool found = false; - for (QualifiedNames::iterator used = used_names.begin(); used; used = used->Next) - { + for (QualifiedNames::iterator used = used_names.begin(); used; used = used->Next) { QualifiedName tmp(empty_string, res); - if (tmp == used->Data) { + if (tmp.nsuri == used->Data.nsuri && tmp.orig_name == used->Data.orig_name) { found = true; break; } @@ -150,52 +144,59 @@ void XSDName2TTCN3Name(const Mstring& in, QualifiedNames & used_names, modeType // the characters ' '(SPACE), '.'(FULL STOP) and '-'(HYPEN-MINUS)shall all be replaced by a "_" (LOW LINE) for (size_t i = 0; i != res.size(); ++i) { if ((res[i] == ' ') || - (res[i] == '.') || - (res[i] == '-')) - { + (res[i] == '.' && !no_replace) || + (res[i] == '-')) { res[i] = '_'; } } // any character except "A" to "Z", "a" to "z" or "0" to "9" and "_" shall be removed for (size_t i = 0; i != res.size(); ++i) { - if (!isalpha((const unsigned char)res[i]) && !isdigit((const unsigned char)res[i]) && (res[i] != '_')) { - res.eraseChar(i); + if (!isalpha((const unsigned char) res[i]) && !isdigit((const unsigned char) res[i]) && (res[i] != '_')) { + if (!no_replace && res[i] != '.') { + res.eraseChar(i); + i--; + } } } // a sequence of two of more "_" (LOW LINE) shall be replaced with a single "_" (LOW LINE) for (size_t i = 1; i < res.size(); ++i) { - if (res[i] == '_' && res[i-1] == '_') { - res.eraseChar(i--); + if (res[i] == '_' && res[i - 1] == '_') { + res.eraseChar(i); + i--; } } // "_" (LOW LINE) characters occurring at the end of the name shall be removed - if (!res.empty() && res[res.size()-1] == '_') res.eraseChar(res.size()-1); + if (!res.empty() && res[res.size() - 1] == '_') { + res.eraseChar(res.size() - 1); + } // "_" (LOW LINE) characters occurring at the beginning of the name shall be removed - if (!res.empty() && res[0] == '_') res.eraseChar(0); + if (!res.empty() && res[0] == '_') { + res.eraseChar(0); + } } - switch (type_of_the_name) - { - case type_reference_name: - case type_name: - if (res.empty()) { - res = "X"; - } - else { - if (islower((const unsigned char)res[0])) res.setCapitalized(); - else if (isdigit((const unsigned char)res[0])) res.insertChar(0, 'X'); - } - break; - case field_name: - case enum_id_name: - if (res.empty()) { - res = "x"; - } - else { - if (isupper((const unsigned char)res[0])) res.setUncapitalized(); - else if (isdigit((const unsigned char)res[0])) res.insertChar(0, 'x'); - } - break; + switch (type_of_the_name) { + case type_reference_name: + case type_name: + if (res.empty()) { + res = "X"; + } else { + if (islower((const unsigned char) res[0])) { + res.setCapitalized(); + } else if (isdigit((const unsigned char) res[0])) { + res.insertChar(0, 'X'); + } + } + break; + case field_name: + case enum_id_name: + if (res.empty()) { + res = "x"; + } else { + if (isupper((const unsigned char) res[0])) res.setUncapitalized(); + else if (isdigit((const unsigned char) res[0])) res.insertChar(0, 'x'); + } + break; } /******************************************************** * STEP 2 - process if the generated name is @@ -210,100 +211,93 @@ void XSDName2TTCN3Name(const Mstring& in, QualifiedNames & used_names, modeType * according to paragraph a) * ******************************************************/ bool postfixing = false; - QualifiedName qual_name(ns_uri, res); - - switch (type_of_the_name) - { - // Do not use "res" in this switch; only qual_name - case type_name: { - for (int k = 0; ASN1_reserved_words[k]; k++) { - if (qual_name.name == ASN1_reserved_words[k]) { - postfixing = true; - break; - } - } + QualifiedName qual_name(ns_uri, res, in); - for (QualifiedNames::iterator used = used_names.begin(); used; used = used->Next) - { - if (qual_name == used->Data) { - postfixing = true; - break; - } - } - if (postfixing) + switch (type_of_the_name) { + // Do not use "res" in this switch; only qual_name + case type_name: { - bool found = false; - int counter = 1; - expstring_t tmpname = NULL; - do { - found = false; - Free(tmpname); - tmpname = mprintf("%s_%d", qual_name.name.c_str(), counter); - for (QualifiedNames::iterator used = used_names.begin(); used; used = used->Next) - { - if (QualifiedName(/* empty_string ? */ ns_uri, Mstring(tmpname)) == used->Data) { - found = true; - break; - } + for (int k = 0; ASN1_reserved_words[k]; k++) { + if (qual_name.name == ASN1_reserved_words[k]) { + postfixing = true; + break; } - counter++; - } while (found); - qual_name.name = tmpname; // NULL will result in an empty string - Free(tmpname); - postfixing = false; - } - break; } - case field_name: - case enum_id_name: - for (int k = 0; TTCN3_reserved_words[k]; k++) { - if (qual_name.name == TTCN3_reserved_words[k]) postfixing = true; - } - for (int k = 0; TTCN3_predefined_functions[k]; k++) { - if (qual_name.name == TTCN3_predefined_functions[k]) postfixing = true; - } - if (postfixing) - { - qual_name.name += "_"; - postfixing = false; - } + } - for (QualifiedNames::iterator used = used_names.begin(); used; used = used->Next) - { - if (qual_name == used->Data) postfixing = true; - } + for (QualifiedNames::iterator used = used_names.begin(); used; used = used->Next) { + if (qual_name == used->Data) { + postfixing = true; + break; + } + } - if (postfixing) - { - bool found = false; - int counter = 0; - if (type_of_the_name == field_name) counter = 1; - else if (type_of_the_name == enum_id_name) counter = 0; - if (qual_name.name[qual_name.name.size()-1] == '_') - qual_name.name.eraseChar(qual_name.name.size()-1); - expstring_t tmpname = mprintf("%s_%d", qual_name.name.c_str(), counter); - do { - found = false; - if (counter > 0) { + if (postfixing) { + bool found = false; + int counter = 1; + expstring_t tmpname = NULL; + do { + found = false; Free(tmpname); tmpname = mprintf("%s_%d", qual_name.name.c_str(), counter); - } - for (QualifiedNames::iterator used = used_names.begin(); used; used = used->Next) - { - if (QualifiedName(/* empty_string ? */ns_uri, Mstring(tmpname)) == used->Data) { - found = true; - break; + for (QualifiedNames::iterator used = used_names.begin(); used; used = used->Next) { + if (QualifiedName(/* empty_string ? */ ns_uri, Mstring(tmpname)) == used->Data) { + found = true; + break; + } } - } - counter++; - } while (found); - qual_name.name = tmpname; - Free(tmpname); - postfixing = false; + counter++; + } while (found); + qual_name.name = tmpname; // NULL will result in an empty string + Free(tmpname); + postfixing = false; + } + break; } - break; - default: - break; + case field_name: + case enum_id_name: + for (int k = 0; TTCN3_reserved_words[k]; k++) { + if (qual_name.name == TTCN3_reserved_words[k]) postfixing = true; + } + for (int k = 0; TTCN3_predefined_functions[k]; k++) { + if (qual_name.name == TTCN3_predefined_functions[k]) postfixing = true; + } + if (postfixing) { + qual_name.name += "_"; + postfixing = false; + } + + for (QualifiedNames::iterator used = used_names.begin(); used; used = used->Next) { + if (qual_name == used->Data) postfixing = true; + } + + if (postfixing) { + bool found = false; + int counter = 1; + if (qual_name.name[qual_name.name.size() - 1] == '_') + qual_name.name.eraseChar(qual_name.name.size() - 1); + expstring_t tmpname = mprintf("%s_%d", qual_name.name.c_str(), counter); + do { + found = false; + if (counter > 0) { + Free(tmpname); + tmpname = mprintf("%s_%d", qual_name.name.c_str(), counter); + } + for (QualifiedNames::iterator used = used_names.begin(); used; used = used->Next) { + if (QualifiedName(/* empty_string ? */ns_uri, Mstring(tmpname)) == used->Data) { + found = true; + break; + } + } + counter++; + } while (found); + qual_name.name = tmpname; + Free(tmpname); + postfixing = false; + } + break; + default: + break; } res = qual_name.name; @@ -312,11 +306,9 @@ void XSDName2TTCN3Name(const Mstring& in, QualifiedNames & used_names, modeType * STEP 3 - the defined name is put into the set of "not_av_names" * ******************************************************/ // Finally recently defined name will be put into the set of "set<string> not_av_names" - if (type_of_the_name != type_reference_name) - { + if (type_of_the_name != type_reference_name) { bool found = false; - for (QualifiedNames::iterator used = used_names.begin(); used; used = used->Next) - { + for (QualifiedNames::iterator used = used_names.begin(); used; used = used->Next) { if (qual_name == used->Data) { found = true; break; @@ -334,8 +326,7 @@ void XSDName2TTCN3Name(const Mstring& in, QualifiedNames & used_names, modeType if (in == "sequence" || in == "choice" || in == "sequence_list" || - in == "choice_list") - { + in == "choice_list") { return; } /******************************************************** @@ -349,135 +340,143 @@ void XSDName2TTCN3Name(const Mstring& in, QualifiedNames & used_names, modeType Mstring tmp2 = res; tmp1.setUncapitalized(); tmp2.setUncapitalized(); - switch (type_of_the_name) - { - case type_name: - if (tmp1 == tmp2) { // If the only difference is the case of the first letter - if (isupper(in[0])) variant += "\"name as capitalized\""; - else variant += "\"name as uncapitalized\""; - } else { // Otherwise if other letters have changed too - variant += "\"name as '" + in + "'\""; - } - break; - case field_name: - // Creating a variant string from a field of a complex type needs to write out the path of the fieldname - if (tmp1 == tmp2) { // If the only difference is the case of the first letter - if (isupper(in[0])) variant += "\"name as capitalized\""; - else variant += "\"name as uncapitalized\""; - } else { // Otherwise if other letters have changed too - variant += "\"name as '" + in + "'\""; - } - break; - case enum_id_name: - if (tmp1 == tmp2) { // If the only difference is the case of the first letter - if ( isupper(in[0]) ) { - variant += "\"text \'" + res + "\' as capitalized\""; - } else { - variant += "\"text \'" + res + "\' as uncapitalized\""; + switch (type_of_the_name) { + case type_name: + if (tmp1 == tmp2) { // If the only difference is the case of the first letter + if (isupper(in[0])) { + variant += "\"name as capitalized\""; + } else { + variant += "\"name as uncapitalized\""; + } + } else { // Otherwise if other letters have changed too + variant += "\"name as '" + in + "'\""; } - } else { // Otherwise if other letters have changed too - variant += "\"text \'" + res + "\' as '" + in + "'\""; - } - break; - default: - break; + break; + case field_name: + // Creating a variant string from a field of a complex type needs to write out the path of the fieldname + if (tmp1 == tmp2) { // If the only difference is the case of the first letter + if (isupper(in[0])) { + variant += "\"name as capitalized\""; + } else { + variant += "\"name as uncapitalized\""; + } + } else { // Otherwise if other letters have changed too + variant += "\"name as '" + in + "'\""; + } + break; + case enum_id_name: + if (tmp1 == tmp2) { // If the only difference is the case of the first letter + if (isupper(in[0])) { + variant += "\"text \'" + res + "\' as capitalized\""; + } else { + variant += "\"text \'" + res + "\' as uncapitalized\""; + } + } else { // Otherwise if other letters have changed too + variant += "\"text \'" + res + "\' as '" + in + "'\""; + } + break; + default: + break; } } } -bool isBuiltInType(const Mstring& in) -{ +bool isBuiltInType(const Mstring& in) { static const char* XSD_built_in_types[] = { "string", "normalizedString", "token", "Name", "NMTOKEN", "NCName", "ID", "IDREF", "ENTITY", "hexBinary", "base64Binary", "anyURI", "language", "integer", "positiveInteger", "nonPositiveInteger", "negativeInteger", "nonNegativeInteger", "long", "unsignedLong", "int", "unsignedInt", "short", "unsignedShort", "byte", "unsignedByte", "decimal", "float", "double", "duration", "dateTime", "time", "date", "gYearMonth", "gYear", "gMonthDay", "gDay", "gMonth", "NMTOKENS", "IDREFS", "ENTITIES", - "QName", "boolean", "anyType", "anySimpleType", NULL + "QName", "boolean", "anyType", "anySimpleType", NULL }; const Mstring& name = in.getValueWithoutPrefix(':'); for (int i = 0; XSD_built_in_types[i]; ++i) { - if (name == XSD_built_in_types[i]) return true; + if (name == XSD_built_in_types[i]) { + return true; + } } return false; } -bool isStringType(const Mstring& in) -{ +bool isStringType(const Mstring& in) { static const char* string_types[] = { "string", "normalizedString", "token", "Name", "NMTOKEN", "NCName", "ID", "IDREF", "ENTITY", - "hexBinary", "base64Binary", "anyURI", "language", NULL + "hexBinary", "base64Binary", "anyURI", "language", NULL }; const Mstring& name = in.getValueWithoutPrefix(':'); for (int i = 0; string_types[i]; ++i) { - if (name == string_types[i]) return true; + if (name == string_types[i]) { + return true; + } } return false; } -bool isIntegerType(const Mstring& in) -{ +bool isIntegerType(const Mstring& in) { static const char* integer_types[] = { "integer", "positiveInteger", "nonPositiveInteger", "negativeInteger", "nonNegativeInteger", "long", - "unsignedLong", "int", "unsignedInt", "short", "unsignedShort", "byte", "unsignedByte", NULL + "unsignedLong", "int", "unsignedInt", "short", "unsignedShort", "byte", "unsignedByte", NULL }; const Mstring& name = in.getValueWithoutPrefix(':'); for (int i = 0; integer_types[i]; ++i) { - if (name == integer_types[i]) return true; + if (name == integer_types[i]) { + return true; + } } return false; } -bool isFloatType(const Mstring& in) -{ +bool isFloatType(const Mstring& in) { static const char* float_types[] = { "decimal", "float", "double", NULL }; const Mstring& name = in.getValueWithoutPrefix(':'); for (int i = 0; float_types[i]; ++i) { - if (name == float_types[i]) return true; + if (name == float_types[i]) { + return true; + } } return false; } -bool isTimeType(const Mstring& in) -{ +bool isTimeType(const Mstring& in) { static const char* time_types[] = { "duration", "dateTime", "time", "date", "gYearMonth", "gYear", "gMonthDay", "gDay", "gMonth", NULL }; const Mstring& name = in.getValueWithoutPrefix(':'); for (int i = 0; time_types[i]; ++i) { - if (name == time_types[i]) return true; + if (name == time_types[i]) { + return true; + } } return false; } -bool isSequenceType(const Mstring& in) -{ +bool isSequenceType(const Mstring& in) { static const char* sequence_types[] = { "NMTOKENS", "IDREFS", "ENTITIES", "QName", NULL }; const Mstring& name = in.getValueWithoutPrefix(':'); for (int i = 0; sequence_types[i]; ++i) { - if (name == sequence_types[i]) return true; + if (name == sequence_types[i]) { + return true; + } } return false; } -bool isBooleanType(const Mstring& in) -{ +bool isBooleanType(const Mstring& in) { static const Mstring booltype("boolean"); return booltype == in.getValueWithoutPrefix(':'); } -bool isQNameType(const Mstring& in) -{ +bool isQNameType(const Mstring& in) { static const Mstring qntype("QName"); return qntype == in.getValueWithoutPrefix(':'); } -bool isAnyType(const Mstring& in) -{ +bool isAnyType(const Mstring& in) { static const char* any_types[] = { "anyType", "anySimpleType", NULL }; @@ -488,8 +487,71 @@ bool isAnyType(const Mstring& in) return false; } -void printError(const Mstring& filename, int lineNumber, const Mstring& text) -{ +bool matchDates(const char * string, const char * type) { + const Mstring day("(0[1-9]|[12][0-9]|3[01])"); + const Mstring month("(0[1-9]|1[0-2])"); + const Mstring year("([0-9][0-9][0-9][0-9])"); + const Mstring hour("([01][0-9]|2[0-3])"); + const Mstring minute("([0-5][0-9])"); + const Mstring second("([0-5][0-9])"); + const Mstring endofdayext("24:00:00(.0?)?"); + const Mstring yearext("((-)([1-9][0-9]*)?)?"); + const Mstring timezone("(Z|[+-]((0[0-9]|1[0-3]):[0-5][0-9]|14:00))?"); + const Mstring fraction("(.[0-9]+)?"); + const Mstring nums("[0-9]+"); + const Mstring durtime("(T[0-9]+" + "(H([0-9]+(M([0-9]+(S|.[0-9]+S))?|.[0-9]+S|S))?|" + "M([0-9]+(S|.[0-9]+S)|.[0-9]+M)?|S|.[0-9]+S))"); + + Mstring pattern; + if (strcmp(type, "gDay") == 0) { + pattern = Mstring("(---)") + day + timezone; + } else if (strcmp(type, "gMonth") == 0) { + pattern = Mstring("(--)") + month + timezone; + } else if (strcmp(type, "gYear") == 0) { + pattern = yearext + year + timezone; + } else if (strcmp(type, "gYearMonth") == 0) { + pattern = yearext + year + Mstring("(-)") + month + timezone; + } else if (strcmp(type, "gMonthDay") == 0) { + pattern = Mstring("(--)") + month + Mstring("(-)") + day + timezone; + } else if (strcmp(type, "date") == 0) { + pattern = yearext + year + Mstring("(-)") + month + Mstring("(-)") + day + timezone; + } else if (strcmp(type, "time") == 0) { + pattern = Mstring("(") + hour + Mstring(":") + minute + Mstring(":") + second + + fraction + Mstring("|") + endofdayext + Mstring(")") + timezone; + } else if (strcmp(type, "dateTime") == 0) { + pattern = yearext + year + Mstring("(-)") + month + Mstring("(-)") + day + + Mstring("T(") + hour + Mstring(":") + minute + Mstring(":") + second + + fraction + Mstring("|") + endofdayext + Mstring(")") + timezone; + } else if (strcmp(type, "duration") == 0) { + pattern = Mstring("(-)?P(") + nums + Mstring("(Y(") + nums + Mstring("(M(") + + nums + Mstring("D") + durtime + Mstring("?|") + durtime + Mstring("?|D") + + durtime + Mstring("?)|") + durtime + Mstring("?)|M") + nums + Mstring("D") + + durtime + Mstring("?|") + durtime + Mstring("?)|D") + durtime + + Mstring("?)|") + durtime + Mstring(")"); + } else { + return false; + } + + pattern = Mstring("^") + pattern + Mstring("$"); + return matchRegexp(string, pattern.c_str()); +} + +bool matchRegexp(const char * string, const char * pattern) { + int status; + regex_t re; + if (regcomp(&re, pattern, REG_EXTENDED | REG_NOSUB) != 0) { + return (false); /* report error */ + } + status = regexec(&re, string, (size_t) 0, NULL, 0); + regfree(&re); + if (status != 0) { + return (false); /* report error */ + } + return (true); +} + +void printError(const Mstring& filename, int lineNumber, const Mstring& text) { fprintf(stderr, "ERROR:\n" "%s (in line %d): " @@ -499,8 +561,7 @@ void printError(const Mstring& filename, int lineNumber, const Mstring& text) text.c_str()); } -void printError(const Mstring& filename, const Mstring& typeName, const Mstring& text) -{ +void printError(const Mstring& filename, const Mstring& typeName, const Mstring& text) { fprintf(stderr, "ERROR:\n" "%s (in type %s): " @@ -510,8 +571,7 @@ void printError(const Mstring& filename, const Mstring& typeName, const Mstring& text.c_str()); } -void printWarning(const Mstring& filename, int lineNumber, const Mstring& text) -{ +void printWarning(const Mstring& filename, int lineNumber, const Mstring& text) { if (w_flag_used) return; fprintf(stderr, "WARNING:\n" @@ -522,8 +582,7 @@ void printWarning(const Mstring& filename, int lineNumber, const Mstring& text) text.c_str()); } -void printWarning(const Mstring& filename, const Mstring& typeName, const Mstring& text) -{ +void printWarning(const Mstring& filename, const Mstring& typeName, const Mstring& text) { if (w_flag_used) return; fprintf(stderr, "WARNING:\n" @@ -534,45 +593,59 @@ void printWarning(const Mstring& filename, const Mstring& typeName, const Mstrin text.c_str()); } -long double stringToLongDouble(const char *input) -{ +void indent(FILE* file, const int x) { + for (int l = 0; l < x; ++l) { + fprintf(file, "\t"); + } +} + +long double stringToLongDouble(const char *input) { long double result = 0.0; // `strtold()' is not available on older platforms. sscanf(input, "%Lf", &result); return result; } -Mstring truncatePathWithOneElement(const Mstring& path) -{ - Mstring result; - size_t pathlen = path.size(); - if (pathlen > 1) { - expstring_t temp = mcopystr(path.c_str()); // modifiable copy - temp[pathlen - 1] = '\0'; // ignore last character - char * point = strrchr(temp, '.'); - if (point != NULL) { - point[1] = '\0'; // truncate just past the dot - result = Mstring(temp); +const Mstring& getNameSpaceByPrefix(const RootType * root, const Mstring& prefix){ + for(List<NamespaceType>::iterator mod = root->getModule()->getDeclaredNamespaces().begin(); mod; mod = mod->Next){ + if(mod->Data.prefix == prefix){ + return mod->Data.uri; } - Free(temp); } - return result; + return empty_string; +} + +const Mstring& getPrefixByNameSpace(const RootType * root, const Mstring& namespace_){ + for(List<NamespaceType>::iterator mod = root->getModule()->getDeclaredNamespaces().begin(); mod; mod = mod->Next){ + if(mod->Data.uri == namespace_){ + return mod->Data.prefix; + } + } + return empty_string; +} + +const Mstring findBuiltInType(const RootType* ref, Mstring type){ + RootType * root = TTCN3ModuleInventory::getInstance().lookup(ref, type, want_BOTH); + if(root != NULL && isBuiltInType(root->getType().originalValueWoPrefix)){ + return root->getType().originalValueWoPrefix; + }else if(root != NULL){ + return findBuiltInType(root, root->getType().originalValueWoPrefix); + }else { + return type; + } } -RootType * lookup (const List<TTCN3Module*> mods, const SimpleType * reference, wanted w) -{ +RootType * lookup(const List<TTCN3Module*> mods, const SimpleType * reference, wanted w) { const Mstring& uri = reference->getReference().get_uri(); const Mstring& name = reference->getReference().get_val(); return lookup(mods, name, uri, reference, w); } -RootType * lookup (const List<TTCN3Module*> mods, - const Mstring& name, const Mstring& nsuri, const RootType *reference, wanted w) -{ +RootType * lookup(const List<TTCN3Module*> mods, + const Mstring& name, const Mstring& nsuri, const RootType *reference, wanted w) { RootType *ret = NULL; - for (List<TTCN3Module*>::iterator module = mods.begin(); module; module = module->Next) - { + for (List<TTCN3Module*>::iterator module = mods.begin(); module; module = module->Next) { ret = lookup1(module->Data, name, nsuri, reference, w); if (ret != NULL) break; } // next doc @@ -581,38 +654,35 @@ RootType * lookup (const List<TTCN3Module*> mods, } RootType *lookup1(const TTCN3Module *module, - const Mstring& name, const Mstring& nsuri, const RootType *reference, wanted w) -{ + const Mstring& name, const Mstring& nsuri, const RootType *reference, wanted w) { if (nsuri != module->getTargetNamespace()) return NULL; - for (List<RootType*>::iterator type = module->getDefinedTypes().begin(); type; type = type->Next) - { - switch (type->Data->getConstruct()) - { - case c_simpleType: - case c_element: - case c_attribute: - if (w == want_ST) { - if ((const RootType*)reference != type->Data - && name == type->Data->getName().convertedValue) { - return type->Data; + for (List<RootType*>::iterator type = module->getDefinedTypes().begin(); type; type = type->Next) { + switch (type->Data->getConstruct()) { + case c_simpleType: + case c_element: + case c_attribute: + if (w == want_ST || w == want_BOTH) { + if ((const RootType*) reference != type->Data + && name == type->Data->getName().originalValueWoPrefix) { + return type->Data; + } } - } - break; + break; - case c_complexType: - case c_group: - case c_attributeGroup: - if (w == want_CT) { - if ((const RootType*)reference != type->Data - && name == type->Data->getName().convertedValue) { - return type->Data; + case c_complexType: + case c_group: + case c_attributeGroup: + if (w == want_CT || w == want_BOTH) { + if ((const RootType*) reference != type->Data + && name == type->Data->getName().originalValueWoPrefix) { + return type->Data; + } } - } - break; + break; - default: - break; + default: + break; } } @@ -620,23 +690,20 @@ RootType *lookup1(const TTCN3Module *module, } int multi(const TTCN3Module *module, ReferenceData const& outside_reference, - const RootType *obj) -{ + const RootType *obj) { int multiplicity = 0; RootType * st = ::lookup1(module, outside_reference.get_val(), outside_reference.get_uri(), obj, want_ST); RootType * ct = ::lookup1(module, outside_reference.get_val(), outside_reference.get_uri(), obj, want_CT); if (st || ct) { multiplicity = 1; // locally defined, no qualif needed - } - else for (List<const TTCN3Module*>::iterator it = module->getImportedModules().begin(); it; it = it->Next) { - // Artificial lookup - st = ::lookup1(it->Data, outside_reference.get_val(), it->Data->getTargetNamespace(), obj, want_ST); - ct = ::lookup1(it->Data, outside_reference.get_val(), it->Data->getTargetNamespace(), obj, want_CT); - if (st || ct) { - ++multiplicity; + } else for (List<const TTCN3Module*>::iterator it = module->getImportedModules().begin(); it; it = it->Next) { + // Artificial lookup + st = ::lookup1(it->Data, outside_reference.get_val(), it->Data->getTargetNamespace(), obj, want_ST); + ct = ::lookup1(it->Data, outside_reference.get_val(), it->Data->getTargetNamespace(), obj, want_CT); + if (st || ct) { + ++multiplicity; + } } - } return multiplicity; } - diff --git a/xsdconvert/GeneralFunctions.hh b/xsdconvert/GeneralFunctions.hh index 9ab3b74c9..ac98df655 100644 --- a/xsdconvert/GeneralFunctions.hh +++ b/xsdconvert/GeneralFunctions.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -14,56 +14,65 @@ typedef List<QualifiedName> QualifiedNames; -enum modeType {type_reference_name, type_name, field_name, enum_id_name}; +enum modeType { + type_reference_name, type_name, field_name, enum_id_name +}; -void XSDName2TTCN3Name (const Mstring& in, QualifiedNames & used_names, modeType type_of_the_name, - Mstring & res, Mstring & variant); +void XSDName2TTCN3Name(const Mstring& in, QualifiedNames & used_names, modeType type_of_the_name, + Mstring & res, Mstring & variant, bool no_replace = false); class ReferenceData; -bool isBuiltInType (const Mstring& in); -bool isStringType (const Mstring& in); -bool isIntegerType (const Mstring& in); -bool isFloatType (const Mstring& in); -bool isTimeType (const Mstring& in); -bool isSequenceType (const Mstring& in); -bool isBooleanType (const Mstring& in); -bool isQNameType (const Mstring& in); -bool isAnyType (const Mstring& in); +bool isBuiltInType(const Mstring& in); +bool isStringType(const Mstring& in); +bool isIntegerType(const Mstring& in); +bool isFloatType(const Mstring& in); +bool isTimeType(const Mstring& in); +bool isSequenceType(const Mstring& in); +bool isBooleanType(const Mstring& in); +bool isQNameType(const Mstring& in); +bool isAnyType(const Mstring& in); -void printWarning (const Mstring& filename, int lineNumber, const Mstring& text); -void printWarning (const Mstring& filename, const Mstring& typeName, const Mstring& text); -void printError (const Mstring& filename, int lineNumber, const Mstring& text); -void printError (const Mstring& filename, const Mstring& typeName, const Mstring& text); +bool matchDates(const char * string, const char * type); +bool matchRegexp(const char * string, const char * pattern); -long double stringToLongDouble (const char * input); +void printWarning(const Mstring& filename, int lineNumber, const Mstring& text); +void printWarning(const Mstring& filename, const Mstring& typeName, const Mstring& text); +void printError(const Mstring& filename, int lineNumber, const Mstring& text); +void printError(const Mstring& filename, const Mstring& typeName, const Mstring& text); +void indent(FILE * file, const int x); -Mstring truncatePathWithOneElement (const Mstring& path); +long double stringToLongDouble(const char * input); class RootType; class SimpleType; class TTCN3Module; +const Mstring& getNameSpaceByPrefix(const RootType * root, const Mstring& prefix); +const Mstring& getPrefixByNameSpace(const RootType * root, const Mstring& namespace_); + +const Mstring findBuiltInType(const RootType * ref, Mstring type); + /// Lookup in a list of modules -RootType * lookup (const List<TTCN3Module*> mods, - const SimpleType * reference, wanted w); +RootType * lookup(const List<TTCN3Module*> mods, + const SimpleType * reference, wanted w); /// Lookup in a list of modules -RootType * lookup (const List<TTCN3Module*> mods, - const Mstring& name, const Mstring& nsuri, const RootType *reference, wanted w); +RootType * lookup(const List<TTCN3Module*> mods, + const Mstring& name, const Mstring& nsuri, const RootType *reference, wanted w); /// Lookup inside one module RootType *lookup1(const TTCN3Module *module, - const Mstring& name, const Mstring& nsuri, const RootType *reference, wanted w); + const Mstring& name, const Mstring& nsuri, const RootType *reference, wanted w); int multi(const TTCN3Module *module, ReferenceData const& outside_reference, - const RootType *obj); + const RootType *obj); inline unsigned long long llmin(unsigned long long l, unsigned long long r) { - return l < r ? l : r; + return l < r ? l : r; } inline unsigned long long llmax(unsigned long long l, unsigned long long r) { - return l > r ? l : r; + return l > r ? l : r; } #endif /* GENERALFUNCTIONS_HH_ */ diff --git a/xsdconvert/GeneralTypes.hh b/xsdconvert/GeneralTypes.hh index 1215e95d0..c736ceca7 100644 --- a/xsdconvert/GeneralTypes.hh +++ b/xsdconvert/GeneralTypes.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -10,8 +10,7 @@ #include "Mstring.hh" -enum ConstructType -{ +enum ConstructType { c_unknown, c_schema, c_simpleType, @@ -22,47 +21,109 @@ enum ConstructType c_group, c_annotation, c_include, - c_import + c_import, + c_idattrib }; -enum NameConversionMode -{ +enum NameConversionMode { nameMode, typeMode, fieldMode }; -enum UseValue -{ +enum UseValue { optional, prohibited, required }; -enum FormValue -{ +enum FormValue { notset, qualified, unqualified }; +enum BlockValue { + not_set, + all, + substitution, + restriction, + extension +}; + +enum TagName { + // XSD Elements: + n_all, + n_annotation, + n_any, + n_anyAttribute, + n_appinfo, + n_attribute, + n_attributeGroup, + n_choice, + n_complexContent, + n_complexType, + n_documentation, + n_element, + n_extension, + n_field, // Not supported by now + n_group, + n_import, + n_include, + n_key, // Not supported by now + n_keyref, // Not supported by now + n_list, + n_notation, // Not supported by now + n_redefine, + n_restriction, + n_schema, + n_selector, // Not supported by now + n_sequence, + n_simpleContent, + n_simpleType, + n_union, + n_unique, // Not supported by now + + // XSD Restrictions / Facets for Datatypes: + n_enumeration, + n_fractionDigits, // Not supported by now + n_length, + n_maxExclusive, + n_maxInclusive, + n_maxLength, + n_minExclusive, + n_minInclusive, + n_minLength, + n_pattern, + n_totalDigits, + n_whiteSpace, + + // Others - non-standard, but used: + n_label, // ??? + n_definition, // ??? + + n_NOTSET +}; + /** This type just stores the textual information about an XML namespace */ -class NamespaceType -{ +class NamespaceType { public: Mstring prefix; Mstring uri; NamespaceType() - : prefix(), uri() - {} + : prefix(), uri() { + } NamespaceType(const Mstring& p, const Mstring& u) - : prefix(p), uri(u) - {} + : prefix(p), uri(u) { + } - bool operator < (const NamespaceType & rhs) const { return uri < rhs.uri; } - bool operator== (const NamespaceType & rhs) const { + bool operator<(const NamespaceType & rhs) const { + return uri < rhs.uri; + } + + bool operator==(const NamespaceType & rhs) const { return (uri == rhs.uri) && (prefix == rhs.prefix); } }; @@ -71,22 +132,36 @@ class QualifiedName { public: Mstring nsuri; Mstring name; - bool dup; + Mstring orig_name; + bool dup; QualifiedName() - : nsuri(), name(), dup(false) - {} + : nsuri(), name(), orig_name(), dup(false) { + } QualifiedName(const Mstring& ns, const Mstring nm) - : nsuri(ns), name(nm), dup(false) - {} + : nsuri(ns), name(nm), dup(false) { + } + + QualifiedName(const Mstring& ns, const Mstring nm, const Mstring orig) + : nsuri(ns), name(nm), orig_name(orig), dup(false) { + } + + bool operator<(const QualifiedName& rhs) const { + return name < rhs.name; + } - bool operator <(const QualifiedName& rhs) const { return name < rhs.name; } bool operator==(const QualifiedName& rhs) const { return (nsuri == rhs.nsuri) && (name == rhs.name); } + + bool operator!=(const QualifiedName& rhs) const { + return (nsuri != rhs.nsuri) || (name != rhs.name); + } }; -enum wanted { want_CT, want_ST }; +enum wanted { + want_CT, want_ST, want_BOTH +}; #endif /*GENERAL_TYPES_H_*/ diff --git a/xsdconvert/ImportStatement.cc b/xsdconvert/ImportStatement.cc index 43d4f53c9..5ae9fb198 100644 --- a/xsdconvert/ImportStatement.cc +++ b/xsdconvert/ImportStatement.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -11,49 +11,44 @@ #include "TTCN3Module.hh" #include "TTCN3ModuleInventory.hh" -extern bool c_flag_used; - ImportStatement::ImportStatement(XMLParser * a_parser, TTCN3Module * a_module, ConstructType a_construct) : RootType(a_parser, a_module, a_construct) , from_namespace() , from_schemaLocation() -, source_module() -{} +, source_module() { +} -void ImportStatement::loadWithValues() -{ +void ImportStatement::loadWithValues() { const XMLParser::TagAttributes & attr = parser->getActualTagAttributes(); - switch (parser->getActualTagName()) - { - case XMLParser::n_import: - name.upload(Mstring("import")); - type.upload(Mstring("import")); - from_namespace = attr.namespace_; - from_schemaLocation = attr.schemaLocation; - break; - case XMLParser::n_include: - name.upload(Mstring("include")); - type.upload(Mstring("include")); - from_namespace = attr.namespace_; - from_schemaLocation = attr.schemaLocation; - break; - case XMLParser::n_label: - addComment(Mstring("LABEL:")); - break; - case XMLParser::n_definition: - addComment(Mstring("DEFINITION:")); - break; - - default: - break; + switch (parser->getActualTagName()) { + case n_import: + name.upload(Mstring("import")); + type.upload(Mstring("import")); + from_namespace = attr.namespace_; + from_schemaLocation = attr.schemaLocation; + break; + case n_include: + name.upload(Mstring("include")); + type.upload(Mstring("include")); + from_namespace = attr.namespace_; + from_schemaLocation = attr.schemaLocation; + break; + case n_label: + addComment(Mstring("LABEL:")); + break; + case n_definition: + addComment(Mstring("DEFINITION:")); + break; + + default: + break; } } const Mstring XMLSchema("http://www.w3.org/2001/XMLSchema"); -void ImportStatement::referenceResolving(void) -{ +void ImportStatement::referenceResolving(void) { if (from_namespace == XMLSchema) { visible = false; return; @@ -61,8 +56,7 @@ void ImportStatement::referenceResolving(void) TTCN3ModuleInventory& modules = TTCN3ModuleInventory::getInstance(); - for (List<TTCN3Module*>::iterator mod = modules.getModules().begin(); mod; mod = mod->Next) - { + for (List<TTCN3Module*>::iterator mod = modules.getModules().begin(); mod; mod = mod->Next) { if (module == mod->Data) { // it's the module that *contains* the import statement continue; @@ -84,22 +78,19 @@ void ImportStatement::referenceResolving(void) if (!source_module) // still not found { - if (from_schemaLocation.empty()) - { + if (from_schemaLocation.empty()) { printWarning(module->getSchemaname(), getName().convertedValue, "The \'" + from_namespace + "\' specified in the \'namespace\' attribute" " is not resolvable."); modules.incrNumWarnings(); - } - else // schemaLocation is not empty + } else // schemaLocation is not empty { if (from_schemaLocation.isFound("http://") || from_schemaLocation.isFound("urn:")) { printWarning(module->getSchemaname(), getName().convertedValue, "It is not supported using a URI (\'" + from_schemaLocation + "\') in the \'schemalocation\' attribute to get access to a file."); modules.incrNumWarnings(); - } - else { + } else { printWarning(module->getSchemaname(), getName().convertedValue, "The \'" + from_schemaLocation + "\' specified in the \'schemaLocation\' attribute" " is not resolvable."); @@ -107,12 +98,10 @@ void ImportStatement::referenceResolving(void) } } visible = false; - } - else module->addImportedModule(source_module); + } else module->addImportedModule(source_module); } -void ImportStatement::printToFile(FILE * file) -{ +void ImportStatement::printToFile(FILE * file) { if (!visible) return; if (from_namespace == module->getTargetNamespace()) return; @@ -120,41 +109,40 @@ void ImportStatement::printToFile(FILE * file) printComment(file); - switch (getConstruct()) - { - case c_import: { - bool found = false; - for (List<TTCN3Module*>::iterator wImport = TTCN3ModuleInventory::getInstance().getWrittenImports().begin(); wImport; wImport = wImport->Next) + switch (getConstruct()) { + case c_import: { - if (wImport->Data == source_module) { - found = true; - break; + bool found = false; + for (List<TTCN3Module*>::iterator wImport = TTCN3ModuleInventory::getInstance().getWrittenImports().begin(); wImport; wImport = wImport->Next) { + if (wImport->Data == source_module) { + found = true; + break; + } } + if (!found) { + fprintf(file, "import from %s all;\n\n\n", source_module->getModulename().c_str()); + TTCN3ModuleInventory::getInstance().getWrittenImports().push_back(source_module); + } + break; } - if (!found) { - fprintf(file, "import from %s all;\n\n\n", source_module->getModulename().c_str()); - TTCN3ModuleInventory::getInstance().getWrittenImports().push_back(source_module); - } - break; } - case c_include: { - for (List<TTCN3Module*>::iterator mod = TTCN3ModuleInventory::getInstance().getModules().begin(); mod; mod = mod->Next) + case c_include: { - if (mod->Data->getSchemaname() == from_schemaLocation) - { - mod->Data->generate_TTCN3_types(file); - break; + for (List<TTCN3Module*>::iterator mod = TTCN3ModuleInventory::getInstance().getModules().begin(); mod; mod = mod->Next) { + if (mod->Data->getSchemaname() == from_schemaLocation) { + mod->Data->generate_TTCN3_types(file); + break; + } } + break; } - break; } - default: - break; + default: + break; } } -void ImportStatement::dump(unsigned int depth) const -{ +void ImportStatement::dump(unsigned int depth) const { fprintf(stderr, "%*s Import statement at %p, ns='%s' loc='%s'\n", depth * 2, "", - (const void*)this, from_namespace.c_str(), from_schemaLocation.c_str()); + (const void*) this, from_namespace.c_str(), from_schemaLocation.c_str()); fprintf(stderr, "%*s import from %s into %s\n", depth * 2 + 2, "", (source_module ? source_module->getModulename().c_str() : "**unknown**"), module->getModulename().c_str()); diff --git a/xsdconvert/ImportStatement.hh b/xsdconvert/ImportStatement.hh index e4b231574..829631892 100644 --- a/xsdconvert/ImportStatement.hh +++ b/xsdconvert/ImportStatement.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -24,31 +24,32 @@ * * Real inclusion of the referenced datatypes * */ -class ImportStatement : public RootType -{ - /// Originally, the "namespace" attribute of the <import> - Mstring from_namespace; - /// Originally, the "schemaLocation" attribute of the <import> - Mstring from_schemaLocation; - /// Result of the reference resolving function: - /// The module we want to import from. Not owned. - TTCN3Module *source_module; +class ImportStatement : public RootType { + /// Originally, the "namespace" attribute of the <import> + Mstring from_namespace; + /// Originally, the "schemaLocation" attribute of the <import> + Mstring from_schemaLocation; + /// Result of the reference resolving function: + /// The module we want to import from. Not owned. + TTCN3Module *source_module; - ImportStatement (const ImportStatement &); // not implemented - ImportStatement & operator = (const ImportStatement &); // not implemented - // Default destructor is used + ImportStatement(const ImportStatement &); // not implemented + ImportStatement & operator=(const ImportStatement &); // not implemented + // Default destructor is used public: - ImportStatement (XMLParser * a_parser, TTCN3Module * a_module, ConstructType a_construct); + ImportStatement(XMLParser * a_parser, TTCN3Module * a_module, ConstructType a_construct); - /** Virtual methods - * inherited from the abstract RootType - */ - void loadWithValues (); - void referenceResolving (); - void validityChecking () {} - void printToFile (FILE * file); + /** Virtual methods + * inherited from the abstract RootType + */ + void loadWithValues(); + void referenceResolving(); - void dump (unsigned int depth) const; + void validityChecking() { + } + void printToFile(FILE * file); + + void dump(unsigned int depth) const; }; #endif /* IMPORTSTATEMENT_HH_ */ diff --git a/xsdconvert/List.hh b/xsdconvert/List.hh index dd9510783..c52b197d5 100644 --- a/xsdconvert/List.hh +++ b/xsdconvert/List.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -12,13 +12,10 @@ #include <cstdlib> #include <cstring> - - template <class T> -class Item -{ +class Item { Item(const Item<T> & other); // not implemented - Item<T> & operator = (const Item<T> & rhs); // not implemented + Item<T> & operator=(const Item<T> & rhs); // not implemented // Default destructor is used public: Item(); @@ -32,12 +29,11 @@ template <class T> Item<T>::Item() : Data(T()) , Next(NULL) -, Prev(NULL) -{} +, Prev(NULL) { +} template <class T> -class List -{ +class List { private: /** @@ -63,7 +59,7 @@ private: public: List(); List(const List<T> & other); - List<T> & operator = (const List<T> & other); + List<T> & operator=(const List<T> & other); ~List(); typedef Item<T> * iterator; @@ -71,13 +67,20 @@ public: /** * Returns the size of the list */ - size_t length() const {return Size;} - size_t size() const {return Size;} + size_t length() const { + return Size; + } + + size_t size() const { + return Size; + } /** * True if List is empty, false otherwise */ - bool empty() const {return Size == 0;} + bool empty() const { + return Size == 0; + } /** * Clear list @@ -99,30 +102,49 @@ public: /** * Returns with a pointer to the begin of the list */ - Item<T> * begin() const {return First;} + Item<T> * begin() const { + return First; + } /** * Returns with a pointer to the end of the list */ - Item<T> * end() const {return Last;} + Item<T> * end() const { + return Last; + } /** * Returns with reference to the first element */ - T & front() {return First->Data;} - const T & front() const {return First->Data;} + T & front() { + return First->Data; + } + + const T & front() const { + return First->Data; + } /** * Returns with reference to the last element */ - T & back() {return Last->Data;} - const T & back() const {return Last->Data;} + T & back() { + return Last->Data; + } + + const T & back() const { + return Last->Data; + } /** * Pushes element at the end of the list */ void push_back(const T & element); + /** + * Pushes element at the front of the list + */ + void push_front(const T & element); + /** * Removes the final element in the list */ @@ -132,30 +154,32 @@ public: * Removes the node from the list */ void remove(iterator& node); -}; + /** + * Removes duplicated elements from the list. + */ + void remove_dups(); +}; template <class T> List<T>::List() : Size(0) , First(NULL) -, Last(NULL) -{} +, Last(NULL) { +} template <class T> List<T>::List(const List<T> & other) : Size(0) , First(NULL) -, Last(NULL) -{ +, Last(NULL) { if (other.empty()) return; Item<T> * CurrentNode = other.First; Item<T> * MyFinalNode = NULL; - while (CurrentNode != NULL) - { - if (MyFinalNode == NULL) // first element + while (CurrentNode != NULL) { + if (MyFinalNode == NULL) // first element { MyFinalNode = new Item<T>; MyFinalNode->Data = CurrentNode->Data; @@ -163,9 +187,7 @@ List<T>::List(const List<T> & other) MyFinalNode->Prev = NULL; First = MyFinalNode; Last = MyFinalNode; - } - else - { + } else { MyFinalNode->Next = new Item<T>; MyFinalNode->Next->Data = CurrentNode->Data; MyFinalNode->Next->Next = NULL; @@ -180,14 +202,12 @@ List<T>::List(const List<T> & other) } template <class T> -List<T>::~List() -{ +List<T>::~List() { freeMemory(); } template <class T> -List<T> & List<T>::operator = (const List<T> & other) -{ +List<T> & List<T>::operator=(const List<T> & other) { freeMemory(); if (other.empty()) return *this; @@ -195,19 +215,15 @@ List<T> & List<T>::operator = (const List<T> & other) Item<T> * CurrentNode = other.First; Item<T> * MyFinalNode = NULL; - while (CurrentNode != NULL) - { - if (MyFinalNode == NULL) - { + while (CurrentNode != NULL) { + if (MyFinalNode == NULL) { MyFinalNode = new Item<T>; MyFinalNode->Data = CurrentNode->Data; MyFinalNode->Next = NULL; MyFinalNode->Prev = NULL; First = MyFinalNode; Last = MyFinalNode; - } - else - { + } else { MyFinalNode->Next = new Item<T>; MyFinalNode->Next->Data = CurrentNode->Data; MyFinalNode->Next->Next = CurrentNode->Next; @@ -224,15 +240,13 @@ List<T> & List<T>::operator = (const List<T> & other) } template <class T> -void List<T>::freeMemory() -{ - if (Size > 0) // if list is not empty +void List<T>::freeMemory() { + if (Size > 0) // if list is not empty { Item<T> * CurrentNode = First; Item<T> * NodeForDelete = NULL; - for (size_t i = 0; i != Size; ++i) - { + for (size_t i = 0; i != Size; ++i) { NodeForDelete = CurrentNode; CurrentNode = CurrentNode->Next; delete NodeForDelete; @@ -246,27 +260,22 @@ void List<T>::freeMemory() } template <class T> -void List<T>::remove(iterator& node) -{ +void List<T>::remove(iterator& node) { if (Size == 0) return; if (node == NULL) return; - if (node->Prev == NULL) // if this node was the first element in the list + if (node->Prev == NULL) // if this node was the first element in the list { First = node->Next; - } - else - { + } else { node->Prev->Next = node->Next; } - if (node->Next == NULL) // if this node was the last element in the list + if (node->Next == NULL) // if this node was the last element in the list { Last = node->Prev; - } - else - { + } else { node->Next->Prev = node->Prev; } @@ -277,14 +286,12 @@ void List<T>::remove(iterator& node) } template <class T> -void List<T>::clear() -{ +void List<T>::clear() { freeMemory(); } template <class T> -void List<T>::sort() -{ +void List<T>::sort() { if (Size <= 1) return; // Selection sort @@ -303,15 +310,14 @@ void List<T>::sort() } template <class T> -void List<T>::sort(bool (*comparison_function)(const T lhs, const T rhs)) -{ +void List<T>::sort(bool (*comparison_function)(const T lhs, const T rhs)) { if (Size <= 1) return; // Selection sort for (Item<T>* left = First; left; left = left->Next) { Item<T>* mini = left; for (Item<T>* curr = left->Next; curr; curr = curr->Next) { - if (comparison_function(curr->Data , mini->Data)) mini = curr; + if (comparison_function(curr->Data, mini->Data)) mini = curr; } if (mini) { // swap! @@ -323,20 +329,17 @@ void List<T>::sort(bool (*comparison_function)(const T lhs, const T rhs)) } template <class T> -void List<T>::push_back(const T & element) -{ +void List<T>::push_back(const T & element) { Item<T> * NewNode = new Item<T>; NewNode->Data = element; NewNode->Next = NULL; - if (Size == 0) // if list is empty + if (Size == 0) // if list is empty { NewNode->Prev = NULL; First = NewNode; Last = NewNode; - } - else - { + } else { NewNode->Prev = Last; Last->Next = NewNode; Last = NewNode; @@ -346,19 +349,35 @@ void List<T>::push_back(const T & element) } template <class T> -void List<T>::pop_back() -{ - Item<T> * LastNode = Last; +void List<T>::push_front(const T & element) { + Item<T> * NewNode = new Item<T>; + NewNode->Data = element; + NewNode->Prev = NULL; - if (Size == 1) + if (Size == 0) // if list is empty { + NewNode->Next = NULL; + First = NewNode; + Last = NewNode; + } else { + NewNode->Next = First; + First->Prev = NewNode; + First = NewNode; + } + + ++Size; +} + +template <class T> +void List<T>::pop_back() { + Item<T> * LastNode = Last; + + if (Size == 1) { First = NULL; Last = NULL; delete(LastNode); --Size; - } - else if (Size > 1) - { + } else if (Size > 1) { Last->Prev->Next = NULL; Last = Last->Prev; delete(LastNode); @@ -366,4 +385,31 @@ void List<T>::pop_back() } } +template <class T> +void List<T>::remove_dups() { + Item<T>* ptr1 = First, *ptr2, *dup; + + while (ptr1 != NULL && ptr1->Next != NULL) { + ptr2 = ptr1; + while (ptr2->Next != NULL) { + if (ptr1->Data == ptr2->Next->Data) { + dup = ptr2->Next; + ptr2->Next = ptr2->Next->Next; + //If the last element is a duplicate + if (ptr2->Next == NULL) { + Last = ptr2; + } else { + ptr2->Next->Prev = ptr2; + } + delete(dup); + Size--; + } else { + ptr2 = ptr2->Next; + } + } + ptr1 = ptr1->Next; + } + +} + #endif /* LIST_HH_ */ diff --git a/xsdconvert/Makefile b/xsdconvert/Makefile index 4b128d9c1..e77d3f2d4 100644 --- a/xsdconvert/Makefile +++ b/xsdconvert/Makefile @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000-2014 Ericsson Telecom AB +# Copyright (c) 2000-2015 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 @@ -10,7 +10,7 @@ include $(TOP)/Makefile.cfg SOURCES := converter.cc \ XMLParser.cc TTCN3Module.cc TTCN3ModuleInventory.cc \ - RootType.cc SimpleType.cc FieldType.cc ComplexType.cc \ + RootType.cc SimpleType.cc AttributeType.cc ComplexType.cc \ Annotation.cc ImportStatement.cc \ PredefinedModules.cc GeneralFunctions.cc \ Mstring.cc @@ -78,4 +78,4 @@ else cp -f $(TARGETS) $(BINDIR) endif -include $(TOP)/Makefile.genrules +include $(TOP)/Makefile.genrules \ No newline at end of file diff --git a/xsdconvert/Mstring.cc b/xsdconvert/Mstring.cc index 15e17defb..4347eefff 100644 --- a/xsdconvert/Mstring.cc +++ b/xsdconvert/Mstring.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -17,58 +17,50 @@ const Mstring empty_string; Mstring::Mstring() -: text(memptystr()) -{} +: text(memptystr()) { +} Mstring::Mstring(const Mstring & other) -: text(mcopystr(other.text)) -{} +: text(mcopystr(other.text)) { +} Mstring::Mstring(const char * s) -: text(mcopystr(s)) -{} +: text(mcopystr(s)) { +} Mstring::Mstring(size_t len, const char *s) -: text((expstring_t)Malloc(len+1)) -{ +: text((expstring_t) Malloc(len + 1)) { memcpy(text, s, len); text[len] = 0; } Mstring::Mstring(char c) -: text(memptystr()) -{ +: text(memptystr()) { text = mputc(text, c); } -Mstring::~Mstring() -{ +Mstring::~Mstring() { Free(text); } -bool Mstring::empty() const -{ +bool Mstring::empty() const { return mstrlen(text) == 0; } -size_t Mstring::size() const -{ +size_t Mstring::size() const { return mstrlen(text); } -void Mstring::clear() -{ +void Mstring::clear() { Free(text); text = memptystr(); } -const char * Mstring::c_str() const -{ +const char * Mstring::c_str() const { return text; } -void Mstring::eraseChar(size_t pos) -{ +void Mstring::eraseChar(size_t pos) { Mstring temp; for (size_t i = 0; i != size(); ++i) if (i != pos) temp += text[i]; @@ -76,79 +68,71 @@ void Mstring::eraseChar(size_t pos) text = mcopystr(temp.text); } -void Mstring::insertChar(size_t pos, char c) -{ +void Mstring::insertChar(size_t pos, char c) { Mstring temp; for (size_t i = 0; i != size(); ++i) if (i == pos) { temp += c; temp += text[i]; - } - else temp += text[i]; + } else temp += text[i]; Free(text); text = mcopystr(temp.text); } -bool Mstring::isFound(const Mstring & s) -{ +bool Mstring::isFound(const Mstring & s) { return strstr(text, s.text); } -bool Mstring::isFound(const char * s) -{ +bool Mstring::isFound(const char * s) { return strstr(text, s); } -bool Mstring::isFound(char c) -{ +bool Mstring::isFound(char c) { return strchr(text, c); } -void Mstring::setCapitalized() -{ +char * Mstring::foundAt(const char * s) { + return strstr(text, s); +} + +void Mstring::setCapitalized() { text[0] = toupper(text[0]); } -void Mstring::setUncapitalized() -{ +void Mstring::setUncapitalized() { text[0] = tolower(text[0]); } -Mstring Mstring::getPrefix(const char delimiter) const -{ +Mstring Mstring::getPrefix(const char delimiter) const { Mstring result; char * pos = strchr(text, delimiter); if (pos != NULL) for (int i = 0; text + i != pos; ++i) result += text[i]; return result; } -Mstring Mstring::getValueWithoutPrefix(const char delimiter) const -{ +Mstring Mstring::getValueWithoutPrefix(const char delimiter) const { char * pos = strrchr(text, delimiter); - if (pos != NULL) return Mstring(pos+1); + if (pos != NULL) return Mstring(pos + 1); else return *this; } -void Mstring::removeWSfromBegin() -{ +void Mstring::removeWSfromBegin() { size_t i = 0; size_t s = mstrlen(text); - for ( ; i < s; ++i) - if (!isspace((const unsigned char)text[i])) break; - memmove(text, text+i, s-i); - text = mtruncstr(text, s-i); + for (; i < s; ++i) + if (!isspace((const unsigned char) text[i])) break; + memmove(text, text + i, s - i); + text = mtruncstr(text, s - i); } -void Mstring::removeWSfromEnd() -{ +void Mstring::removeWSfromEnd() { int i = mstrlen(text); - for ( ; i > 0; --i) - if (!isspace((const unsigned char)text[i-1])) break; + for (; i > 0; --i) + if (!isspace((const unsigned char) text[i - 1])) break; text = mtruncstr(text, i); } -char & Mstring::operator [](size_t pos) -{ +char & Mstring::operator[](size_t pos) { size_t s = mstrlen(text); if (pos < s) return text[pos]; @@ -158,8 +142,7 @@ char & Mstring::operator [](size_t pos) } } -const char & Mstring::operator [](size_t pos) const -{ +const char & Mstring::operator[](size_t pos) const { size_t s = mstrlen(text); if (pos < s) return text[pos]; @@ -169,8 +152,7 @@ const char & Mstring::operator [](size_t pos) const } } -Mstring & Mstring::operator =(const Mstring & other) -{ +Mstring & Mstring::operator=(const Mstring & other) { if (&other != this) { Free(text); text = mcopystr(other.text); @@ -178,202 +160,174 @@ Mstring & Mstring::operator =(const Mstring & other) return *this; } -Mstring & Mstring::operator =(const char * s) -{ +Mstring & Mstring::operator=(const char * s) { Free(text); text = mcopystr(s); return *this; } -Mstring & Mstring::operator =(char c) -{ +Mstring & Mstring::operator=(char c) { Free(text); text = memptystr(); text = mputc(text, c); return *this; } -Mstring & Mstring::operator +=(const Mstring & other) -{ +Mstring & Mstring::operator+=(const Mstring & other) { text = mputstr(text, other.text); return *this; } -Mstring & Mstring::operator +=(const char * s) -{ +Mstring & Mstring::operator+=(const char * s) { text = mputstr(text, s); return *this; } -Mstring & Mstring::operator +=(char c) -{ +Mstring & Mstring::operator+=(char c) { text = mputc(text, c); return *this; } -const Mstring operator +(const Mstring & lhs, const Mstring & rhs) -{ +const Mstring operator+(const Mstring & lhs, const Mstring & rhs) { return Mstring(lhs) += rhs; } -const Mstring operator +(const char * lhs, const Mstring & rhs) -{ +const Mstring operator+(const char * lhs, const Mstring & rhs) { return Mstring(lhs) += rhs; } -const Mstring operator +(char lhs, const Mstring & rhs) -{ +const Mstring operator+(char lhs, const Mstring & rhs) { return Mstring(lhs) += rhs; } -const Mstring operator +(const Mstring & lhs, const char * rhs) -{ +const Mstring operator+(const Mstring & lhs, const char * rhs) { return Mstring(lhs) += rhs; } -const Mstring operator +(const Mstring & lhs, char rhs) -{ +const Mstring operator+(const Mstring & lhs, char rhs) { return Mstring(lhs) += rhs; } -bool operator ==(const Mstring & lhs, const Mstring & rhs) -{ +bool operator==(const Mstring & lhs, const Mstring & rhs) { if (strcmp(lhs.text, rhs.text) == 0) // they are equal return true; else return false; } -bool operator ==(const char * lhs, const Mstring & rhs) -{ +bool operator==(const char * lhs, const Mstring & rhs) { if (strcmp(lhs, rhs.text) == 0) // they are equal return true; else return false; } -bool operator ==(const Mstring & lhs, const char * rhs) -{ +bool operator==(const Mstring & lhs, const char * rhs) { if (strcmp(lhs.text, rhs) == 0) // they are equal return true; else return false; } -bool operator !=(const Mstring & lhs, const Mstring & rhs) -{ +bool operator!=(const Mstring & lhs, const Mstring & rhs) { if (strcmp(lhs.text, rhs.text) != 0) // they are NOT equal return true; else return false; } -bool operator !=(const char * lhs, const Mstring & rhs) -{ +bool operator!=(const char * lhs, const Mstring & rhs) { if (strcmp(lhs, rhs.text) != 0) // they are NOT equal return true; else return false; } -bool operator !=(const Mstring & lhs, const char * rhs) -{ +bool operator!=(const Mstring & lhs, const char * rhs) { if (strcmp(lhs.text, rhs) != 0) // they are NOT equal return true; else return false; } -bool operator <(const Mstring & lhs, const Mstring & rhs) -{ +bool operator<(const Mstring & lhs, const Mstring & rhs) { if (strcmp(lhs.text, rhs.text) < 0) return true; else return false; } -bool operator <(const char * lhs, const Mstring & rhs) -{ +bool operator<(const char * lhs, const Mstring & rhs) { if (strcmp(lhs, rhs.text) < 0) return true; else return false; } -bool operator <(const Mstring & lhs, const char * rhs) -{ +bool operator<(const Mstring & lhs, const char * rhs) { if (strcmp(lhs.text, rhs) < 0) return true; else return false; } -bool operator >(const Mstring & lhs, const Mstring & rhs) -{ +bool operator>(const Mstring & lhs, const Mstring & rhs) { if (strcmp(lhs.text, rhs.text) > 0) return true; else return false; } -bool operator >(const char * lhs, const Mstring & rhs) -{ +bool operator>(const char * lhs, const Mstring & rhs) { if (strcmp(lhs, rhs.text) > 0) return true; else return false; } -bool operator >(const Mstring & lhs, const char * rhs) -{ +bool operator>(const Mstring & lhs, const char * rhs) { if (strcmp(lhs.text, rhs) > 0) return true; else return false; } -bool operator <=(const Mstring & lhs, const Mstring & rhs) -{ +bool operator<=(const Mstring & lhs, const Mstring & rhs) { if (strcmp(lhs.text, rhs.text) <= 0) return true; else return false; } -bool operator <=(const char * lhs, const Mstring & rhs) -{ +bool operator<=(const char * lhs, const Mstring & rhs) { if (strcmp(lhs, rhs.text) <= 0) return true; else return false; } -bool operator <=(const Mstring & lhs, const char * rhs) -{ +bool operator<=(const Mstring & lhs, const char * rhs) { if (strcmp(lhs.text, rhs) <= 0) return true; else return false; } -bool operator >=(const Mstring & lhs, const Mstring & rhs) -{ +bool operator>=(const Mstring & lhs, const Mstring & rhs) { if (strcmp(lhs.text, rhs.text) >= 0) return true; else return false; } -bool operator >=(const char * lhs, const Mstring & rhs) -{ +bool operator>=(const char * lhs, const Mstring & rhs) { if (strcmp(lhs, rhs.text) >= 0) return true; else return false; } -bool operator >=(const Mstring & lhs, const char * rhs) -{ +bool operator>=(const Mstring & lhs, const char * rhs) { if (strcmp(lhs.text, rhs) >= 0) return true; else diff --git a/xsdconvert/Mstring.hh b/xsdconvert/Mstring.hh index cef415578..dce732fa7 100644 --- a/xsdconvert/Mstring.hh +++ b/xsdconvert/Mstring.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -10,8 +10,7 @@ #include "../common/memory.h" -class Mstring -{ +class Mstring { expstring_t text; public: @@ -108,6 +107,14 @@ public: */ bool isFound(char c); + /** + * Look for c-string content + * and returns a pointer to the first + * character where the matching found, + * returns null otherwise + */ + char * foundAt(const char * c); + /** * The first character of the Mstring is set to uppercase */ @@ -149,17 +156,21 @@ public: * Get character in string * Returns a reference the character at position pos in the string. */ - char & operator [](size_t pos); - const char & operator [](size_t pos) const; + char & operator[](size_t pos); + const char & operator[](size_t pos) const; /** * Mstring assignment * Sets a copy of the argument as the new content for the string object. * The previous content is dropped. */ - Mstring & operator =(const Mstring & str); - Mstring & operator =(const char * s); - Mstring & operator =(char c); + Mstring & operator=(const Mstring & str); + Mstring & operator=(const char * s); + Mstring & operator=(char c); + + const Mstring * operator*() const { + return this; + } /** * Append to Mstring @@ -167,73 +178,73 @@ public: * The new Mstring content is the content existing in the string object before the call * followed by the content of the argument. */ - Mstring & operator +=(const Mstring & str); - Mstring & operator +=(const char * s); - Mstring & operator +=(char c); + Mstring & operator+=(const Mstring & str); + Mstring & operator+=(const char * s); + Mstring & operator+=(char c); /** * String comparison operators * These overloaded global operator functions perform the appropriate comparison operation between lhs and rhs. * */ - friend bool operator ==(const Mstring & lhs, const Mstring & rhs); - friend bool operator ==(const char * lhs, const Mstring & rhs); - friend bool operator ==(const Mstring & lhs, const char * rhs); + friend bool operator==(const Mstring & lhs, const Mstring & rhs); + friend bool operator==(const char * lhs, const Mstring & rhs); + friend bool operator==(const Mstring & lhs, const char * rhs); - friend bool operator !=(const Mstring & lhs, const Mstring & rhs); - friend bool operator !=(const char * lhs, const Mstring & rhs); - friend bool operator !=(const Mstring & lhs, const char * rhs); + friend bool operator!=(const Mstring & lhs, const Mstring & rhs); + friend bool operator!=(const char * lhs, const Mstring & rhs); + friend bool operator!=(const Mstring & lhs, const char * rhs); - friend bool operator <(const Mstring & lhs, const Mstring & rhs); - friend bool operator <(const char * lhs, const Mstring & rhs); - friend bool operator <(const Mstring & lhs, const char * rhs); + friend bool operator<(const Mstring & lhs, const Mstring & rhs); + friend bool operator<(const char * lhs, const Mstring & rhs); + friend bool operator<(const Mstring & lhs, const char * rhs); - friend bool operator >(const Mstring & lhs, const Mstring & rhs); - friend bool operator >(const char * lhs, const Mstring & rhs); - friend bool operator >(const Mstring & lhs, const char * rhs); + friend bool operator>(const Mstring & lhs, const Mstring & rhs); + friend bool operator>(const char * lhs, const Mstring & rhs); + friend bool operator>(const Mstring & lhs, const char * rhs); - friend bool operator <=(const Mstring & lhs, const Mstring & rhs); - friend bool operator <=(const char * lhs, const Mstring & rhs); - friend bool operator <=(const Mstring & lhs, const char * rhs); + friend bool operator<=(const Mstring & lhs, const Mstring & rhs); + friend bool operator<=(const char * lhs, const Mstring & rhs); + friend bool operator<=(const Mstring & lhs, const char * rhs); - friend bool operator >=(const Mstring & lhs, const Mstring & rhs); - friend bool operator >=(const char * lhs, const Mstring & rhs); - friend bool operator >=(const Mstring & lhs, const char * rhs); + friend bool operator>=(const Mstring & lhs, const Mstring & rhs); + friend bool operator>=(const char * lhs, const Mstring & rhs); + friend bool operator>=(const Mstring & lhs, const char * rhs); }; /* * Add strings * Returns an Mstring object whose contents are the combination of the content of lhs followed by those of rhs. */ -const Mstring operator +(const Mstring & lhs, const Mstring & rhs); -const Mstring operator +(const char * lhs, const Mstring & rhs); -const Mstring operator +(char lhs, const Mstring & rhs); -const Mstring operator +(const Mstring & lhs, const char * rhs); -const Mstring operator +(const Mstring & lhs, char rhs); - -bool operator ==(const Mstring & lhs, const Mstring & rhs); -bool operator ==(const char * lhs, const Mstring & rhs); -bool operator ==(const Mstring & lhs, const char * rhs); - -bool operator !=(const Mstring & lhs, const Mstring & rhs); -bool operator !=(const char * lhs, const Mstring & rhs); -bool operator !=(const Mstring & lhs, const char * rhs); - -bool operator <(const Mstring & lhs, const Mstring & rhs); -bool operator <(const char * lhs, const Mstring & rhs); -bool operator <(const Mstring & lhs, const char * rhs); - -bool operator >(const Mstring & lhs, const Mstring & rhs); -bool operator >(const char * lhs, const Mstring & rhs); -bool operator >(const Mstring & lhs, const char * rhs); - -bool operator <=(const Mstring & lhs, const Mstring & rhs); -bool operator <=(const char * lhs, const Mstring & rhs); -bool operator <=(const Mstring & lhs, const char * rhs); - -bool operator >=(const Mstring & lhs, const Mstring & rhs); -bool operator >=(const char * lhs, const Mstring & rhs); -bool operator >=(const Mstring & lhs, const char * rhs); +const Mstring operator+(const Mstring & lhs, const Mstring & rhs); +const Mstring operator+(const char * lhs, const Mstring & rhs); +const Mstring operator+(char lhs, const Mstring & rhs); +const Mstring operator+(const Mstring & lhs, const char * rhs); +const Mstring operator+(const Mstring & lhs, char rhs); + +bool operator==(const Mstring & lhs, const Mstring & rhs); +bool operator==(const char * lhs, const Mstring & rhs); +bool operator==(const Mstring & lhs, const char * rhs); + +bool operator!=(const Mstring & lhs, const Mstring & rhs); +bool operator!=(const char * lhs, const Mstring & rhs); +bool operator!=(const Mstring & lhs, const char * rhs); + +bool operator<(const Mstring & lhs, const Mstring & rhs); +bool operator<(const char * lhs, const Mstring & rhs); +bool operator<(const Mstring & lhs, const char * rhs); + +bool operator>(const Mstring & lhs, const Mstring & rhs); +bool operator>(const char * lhs, const Mstring & rhs); +bool operator>(const Mstring & lhs, const char * rhs); + +bool operator<=(const Mstring & lhs, const Mstring & rhs); +bool operator<=(const char * lhs, const Mstring & rhs); +bool operator<=(const Mstring & lhs, const char * rhs); + +bool operator>=(const Mstring & lhs, const Mstring & rhs); +bool operator>=(const char * lhs, const Mstring & rhs); +bool operator>=(const Mstring & lhs, const char * rhs); extern const Mstring empty_string; diff --git a/xsdconvert/PredefinedModules.cc b/xsdconvert/PredefinedModules.cc index c774ff6ce..b7fa64afb 100644 --- a/xsdconvert/PredefinedModules.cc +++ b/xsdconvert/PredefinedModules.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -12,8 +12,7 @@ * Modules are generated always when conversion is called * */ -const char * moduleUsefulTtcn3Types = -{ +const char * moduleUsefulTtcn3Types = { "module UsefulTtcn3Types {\n\n\n" @@ -92,8 +91,7 @@ const char * moduleUsefulTtcn3Types = }; -const char * moduleXSD = -{ +const char * moduleXSD = { "module XSD {\n\n" @@ -103,7 +101,7 @@ const char * moduleXSD = "const charstring\n" " dash := \"-\",\n" " cln := \":\",\n" - " year := \"(0(0(0[1-9]|[1-9][0-9])|[1-9][0-9][0-9])|[1-9][0-9][0-9][0-9])\",\n" + " year := \"[0-9]#4\",\n" " yearExpansion := \"(-([1-9][0-9]#(0,))#(,1))#(,1)\",\n" " month := \"(0[1-9]|1[0-2])\",\n" " dayOfMonth := \"(0[1-9]|[12][0-9]|3[01])\",\n" diff --git a/xsdconvert/RootType.cc b/xsdconvert/RootType.cc index cee420c1b..f80a19a2b 100644 --- a/xsdconvert/RootType.cc +++ b/xsdconvert/RootType.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -9,12 +9,11 @@ #include "TTCN3Module.hh" -RootType::RootType(XMLParser * a_parser, TTCN3Module * a_module, ConstructType a_construct) +RootType::RootType(XMLParser * a_parser, TTCN3Module * a_module, const ConstructType a_construct) : parser(a_parser) , module(a_module) , name() , type() -, id() , minOccurs(1) , maxOccurs(1) , variant() @@ -23,130 +22,142 @@ RootType::RootType(XMLParser * a_parser, TTCN3Module * a_module, ConstructType a , construct(a_construct) , origin(from_unknown) , visible(true) -, nameDepList() -{ - switch (a_construct) - { - case c_schema: - case c_annotation: - case c_include: - case c_import: - //redundant: origin = from_unknown; - break; - case c_unknown: // because when using fields in complextypes we set construct to c_unknown - case c_simpleType: - origin = from_simpleType; - type.upload(Mstring("anySimpleType")); - break; - case c_element: - origin = from_element; - type.upload(Mstring("anyType")); - addVariant(V_element); - break; - case c_attribute: - origin = from_attribute; - type.upload(Mstring("anySimpleType")); - addVariant(V_attribute); - break; - case c_complexType: - origin = from_complexType; - type.upload(Mstring("record")); - break; - case c_group: - origin = from_group; - type.upload(Mstring("record")); - addVariant(V_untagged); - break; - case c_attributeGroup: - origin = from_attributeGroup; - type.upload(Mstring("record")); - addVariant(V_attributeGroup); - visible = false; - break; +, nameDepList() { + switch (a_construct) { + case c_schema: + case c_annotation: + case c_include: + case c_import: + //redundant: origin = from_unknown; + break; + case c_unknown: // because when using fields in complextypes we set construct to c_unknown + case c_simpleType: + origin = from_simpleType; + type.upload(Mstring("anySimpleType")); + break; + case c_element: + origin = from_element; + type.upload(Mstring("anyType")); + addVariant(V_element); + break; + case c_attribute: + origin = from_attribute; + type.upload(Mstring("anySimpleType")); + addVariant(V_attribute); + break; + case c_complexType: + origin = from_complexType; + type.upload(Mstring("record")); + break; + case c_group: + origin = from_group; + type.upload(Mstring("record")); + addVariant(V_untagged); + break; + case c_attributeGroup: + origin = from_attributeGroup; + type.upload(Mstring("record")); + addVariant(V_attributeGroup); + visible = false; + break; + default: + break; } } -void RootType::addVariant(VariantMode var, const Mstring& var_value, bool into_variant_ref) -{ +void RootType::addVariant(const VariantMode var, const Mstring& var_value, const bool into_variant_ref) { Mstring variantstring; - switch (var) - { - case V_anyAttributes: - variantstring = "\"anyAttributes" + var_value + "\""; - break; - case V_anyElement: - variantstring = "\"anyElement" + var_value + "\""; - break; - case V_attribute: - variantstring = "\"attribute\""; - break; - case V_attributeFormQualified: - variantstring = "\"attributeFormQualified\""; - break; - case V_attributeGroup: - variantstring = "\"attributeGroup\""; - break; - case V_controlNamespace: - variantstring = "\"controlNamespace" + var_value + "\""; - break; - case V_defaultForEmpty: - variantstring = "\"defaultForEmpty as \'" + var_value + "\'\""; // chapter 7.1.5 - break; - case V_element: - variantstring = "\"element\""; - break; - case V_elementFormQualified: - variantstring = "\"elementFormQualified\""; - break; - case V_embedValues: - variantstring = "\"embedValues\""; - break; - case V_formAs: - variantstring = "\"form as " + var_value + "\""; - break; - case V_list: - variantstring = "\"list\""; - break; - case V_nameAs: - variantstring = "\"name as \'" + var_value + "\'\""; - break; - case V_namespaceAs: { - Mstring prefix; - Mstring uri; - for (List<NamespaceType>::iterator namesp = module->getDeclaredNamespaces().begin(); namesp; namesp = namesp->Next) { - if (namesp->Data.uri == var_value) { - prefix = namesp->Data.prefix; - uri = namesp->Data.uri; + switch (var) { + case V_abstract: + variantstring = "\"abstract\""; + break; + case V_anyAttributes: + variantstring = "\"anyAttributes" + var_value + "\""; + break; + case V_anyElement: + variantstring = "\"anyElement" + var_value + "\""; + break; + case V_attribute: + variantstring = "\"attribute\""; + break; + case V_attributeFormQualified: + variantstring = "\"attributeFormQualified\""; + break; + case V_attributeGroup: + variantstring = "\"attributeGroup\""; + break; + case V_block: + variantstring = "\"block\""; + break; + case V_controlNamespace: + variantstring = "\"controlNamespace" + var_value + "\""; + break; + case V_defaultForEmpty: + variantstring = "\"defaultForEmpty as \'" + var_value + "\'\""; // chapter 7.1.5 + break; + case V_element: + variantstring = "\"element\""; + break; + case V_elementFormQualified: + variantstring = "\"elementFormQualified\""; + break; + case V_embedValues: + variantstring = "\"embedValues\""; + break; + case V_formAs: + variantstring = "\"form as " + var_value + "\""; + break; + case V_list: + variantstring = "\"list\""; + break; + case V_nameAs: + variantstring = "\"name as \'" + var_value + "\'\""; + break; + case V_namespaceAs: + { + Mstring prefix; + Mstring uri; + for (List<NamespaceType>::iterator namesp = module->getDeclaredNamespaces().begin(); namesp; namesp = namesp->Next) { + if (namesp->Data.uri == var_value) { + prefix = namesp->Data.prefix; + uri = namesp->Data.uri; + break; + } + } + if (prefix.empty() || uri.empty()) { break; } - } - if (prefix.empty() || uri.empty()) { + variantstring = "\"namespace as \'" + uri + "\' prefix \'" + prefix + "\'\""; break; } - variantstring = "\"namespace as \'" + uri + "\' prefix \'" + prefix + "\'\""; - break; } - case V_onlyValue: - variantstring = var_value; - break; - case V_untagged: - variantstring = "\"untagged\""; - break; - case V_useNil: - variantstring = "\"useNil\""; - break; - case V_useNumber: - variantstring = "\"useNumber\""; - break; - case V_useOrder: - variantstring = "\"useOrder\""; - break; - case V_useUnion: - variantstring = "\"useUnion\""; - break; - case V_whiteSpace: - variantstring = "\"whiteSpace " + var_value + "\""; - break; + case V_onlyValue: + variantstring = var_value; + break; + case V_onlyValueHidden: + hidden_variant.push_back(var_value); + break; + case V_untagged: + variantstring = "\"untagged\""; + break; + case V_useNil: + variantstring = "\"useNil\""; + break; + case V_useNumber: + variantstring = "\"useNumber\""; + break; + case V_useOrder: + variantstring = "\"useOrder\""; + break; + case V_useUnion: + variantstring = "\"useUnion\""; + break; + case V_whiteSpace: + variantstring = "\"whiteSpace " + var_value + "\""; + break; + case V_fractionDigits: + //variantstring = "\"fractionDigits " + var_value + "\""; + break; } if (!variantstring.empty()) { @@ -157,40 +168,45 @@ void RootType::addVariant(VariantMode var, const Mstring& var_value, bool into_v } } -void RootType::printVariant(FILE * file) -{ - if (!e_flag_used && !variant.empty()) - { +void RootType::printVariant(FILE * file) { + if (!e_flag_used && !variant.empty()) { fprintf(file, "\nwith {\n"); - for (List<Mstring>::iterator var = variant.end(); var; var = var->Prev) - { + for (List<Mstring>::iterator var = variant.end(); var; var = var->Prev) { fprintf(file, "variant %s;\n", var->Data.c_str()); } + for (List<Mstring>::iterator var = hidden_variant.end(); var; var = var->Prev) { + fprintf(file, "//variant %s;\n", var->Data.c_str()); + } fprintf(file, "}"); + } else if (!e_flag_used && type.originalValueWoPrefix == Mstring("boolean")) { + fprintf(file, ";\n//with {\n"); + for (List<Mstring>::iterator var = hidden_variant.end(); var; var = var->Prev) { + fprintf(file, "//variant %s;\n", var->Data.c_str()); + } + fprintf(file, "//}"); } } -void RootType::addComment(const Mstring& text) -{ - comment += "/* " + text + " */\n"; +void RootType::addComment(const Mstring& text) { + comment.push_back(Mstring("/* " + text + " */\n")); } -void RootType::printComment(FILE * file) -{ - if (!c_flag_used) - { - fprintf(file, "%s", comment.c_str()); +void RootType::printComment(FILE * file, int level) { + if (!c_flag_used && !comment.empty()) { + for (List<Mstring>::iterator c = comment.begin(); c; c = c->Next) { + indent(file, level); + fprintf(file, "%s", c->Data.c_str()); + } } } -void RootType::printMinOccursMaxOccurs(FILE * file, bool inside_union, - bool empty_allowed /* = true */) const -{ +void RootType::printMinOccursMaxOccurs(FILE * file, const bool inside_union, + const bool empty_allowed /* = true */) const { + unsigned long long tmp_minOccurs = minOccurs; if (minOccurs == 0 && !empty_allowed) tmp_minOccurs = 1ULL; - if (maxOccurs == 1) - { + if (maxOccurs == 1) { if (minOccurs == 0) { if (inside_union || name.list_extension) { fputs("record length(", file); @@ -199,22 +215,32 @@ void RootType::printMinOccursMaxOccurs(FILE * file, bool inside_union, fputs("1) of ", file); } // else it's optional which is not printed from here - } - else if (minOccurs == 1) { + } else if (minOccurs == 1) { // min==max==1; do nothing unless... - if (name.convertedValue == "embed_values") fputs("record length(1) of ", file); + if (name.convertedValue == "embed_values") { + fputs("record length(1) of ", file); + } } - } - else if (maxOccurs == ULLONG_MAX) { + } else if (maxOccurs == ULLONG_MAX) { if (minOccurs == 0) { fputs("record ", file); if (!empty_allowed) fputs("length(1 .. infinity) ", file); fputs("of ", file); + } else fprintf(file, "record length(%llu .. infinity) of ", tmp_minOccurs); + } else { + if (tmp_minOccurs == maxOccurs) { + fprintf(file, "record length(%llu) of ", tmp_minOccurs); + } else { + fprintf(file, "record length(%llu .. %llu) of ", tmp_minOccurs, maxOccurs); } - else fprintf(file, "record length(%llu .. infinity) of ", tmp_minOccurs); - } - else - { - fprintf(file, "record length(%llu .. %llu) of ", tmp_minOccurs, maxOccurs); } } + +bool RootType::hasVariant(const Mstring& var) const{ + for(List<Mstring>::iterator vars = variant.begin(); vars; vars = vars->Next){ + if(vars->Data.isFound(var)){ + return true; + } + } + return false; +} \ No newline at end of file diff --git a/xsdconvert/RootType.hh b/xsdconvert/RootType.hh index b2921b510..16a5f1528 100644 --- a/xsdconvert/RootType.hh +++ b/xsdconvert/RootType.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -30,14 +30,14 @@ extern bool c_flag_used; extern bool e_flag_used; - -enum VariantMode -{ +enum VariantMode { + V_abstract, V_anyAttributes, V_anyElement, V_attribute, V_attributeFormQualified, V_attributeGroup, + V_block, V_controlNamespace, V_defaultForEmpty, V_element, @@ -48,16 +48,17 @@ enum VariantMode V_nameAs, V_namespaceAs, V_onlyValue, + V_onlyValueHidden, V_untagged, V_useNil, V_useNumber, V_useOrder, V_useUnion, - V_whiteSpace + V_whiteSpace, + V_fractionDigits }; -enum OriginType -{ +enum OriginType { from_simpleType, from_element, from_attribute, @@ -67,18 +68,18 @@ enum OriginType from_unknown }; -class NameType -{ +class NameType { public: Mstring originalValueWoPrefix; Mstring convertedValue; bool list_extension; + bool no_replace; - NameType (): originalValueWoPrefix(), convertedValue(), list_extension(false) {} + NameType() : originalValueWoPrefix(), convertedValue(), list_extension(false), no_replace(false) { + } // Default copy constructor, assignment operator and destructor are used - void upload (const Mstring& input) - { + void upload(const Mstring& input) { if (input.empty()) return; convertedValue = input; originalValueWoPrefix = input.getValueWithoutPrefix(':'); @@ -97,77 +98,144 @@ class TTCN3Module; * */ -class RootType -{ +class RootType { protected: - XMLParser * parser; // no responsibility for this member - TTCN3Module * module; // no responsibility for this member + XMLParser * parser; // no responsibility for this member + TTCN3Module * module; // no responsibility for this member NameType name; NameType type; - Mstring id; unsigned long long int minOccurs; unsigned long long int maxOccurs; List<Mstring> variant; List<Mstring> variant_ref; - Mstring comment; + List<Mstring> hidden_variant; + List<Mstring> comment; ConstructType construct; OriginType origin; bool visible; + /// List of types that depend on this one. /// Used to propagate the effect of name conversion to the dependents List<SimpleType*> nameDepList; // no responsibility for elements public: - RootType(XMLParser * a_parser, TTCN3Module * a_module, ConstructType a_construct); - virtual ~RootType () {} + RootType(XMLParser * a_parser, TTCN3Module * a_module, const ConstructType a_construct); + + virtual ~RootType() { + } // Default copy constructor and assignment operator is used - virtual void loadWithValues () = 0; - virtual void printToFile (FILE * file) = 0; + virtual void loadWithValues() = 0; + virtual void printToFile(FILE * file) = 0; - virtual void modifyValues () {} + virtual void modifyValues() { + } - virtual void referenceResolving () {} - virtual void nameConversion (NameConversionMode, const List<NamespaceType> &) {} - virtual void finalModification () {} + virtual void referenceResolving() { + } - virtual bool hasUnresolvedReference () {return false;} - virtual void dump (unsigned int) const {} + virtual void nameConversion(const NameConversionMode, const List<NamespaceType> &) { + } + + virtual void finalModification() { + } - void setNameValue (const Mstring& str) {name.convertedValue = str;} - void setTypeValue (const Mstring& str) {type.convertedValue = str;} - void useNameListProperty () {name.convertedValue += "_list";} - void setInvisible () {visible = false;} - void addToNameDepList (SimpleType * t) {nameDepList.push_back(t);} + virtual bool hasUnresolvedReference() { + return false; + } + + virtual void dump(const unsigned int) const { + } + + void setNameValue(const Mstring& str) { + name.convertedValue = str; + } + + void setTypeValue(const Mstring& str) { + type.convertedValue = str; + } + + void useNameListProperty() { + name.convertedValue += "_list"; + } + + void setInvisible() { + visible = false; + } + + const NameType & getName() const { + return name; + } + + const NameType & getType() const { + return type; + } + + unsigned long long int getMinOccurs() const { + return minOccurs; + } + + unsigned long long int getMaxOccurs() const { + return maxOccurs; + } + + const List<Mstring> & getVariant() const { + return variant; + } + + const List<Mstring> & getVariantRef() const { + return variant_ref; + } + + const List<Mstring> & getHiddenVariant() const { + return hidden_variant; + } + + ConstructType getConstruct() const { + return construct; + } + + OriginType getOrigin() const { + return origin; + } + + bool isVisible() const { + return visible; + } + + List<Mstring> & getComment() { + return comment; + } + + XMLParser * getParser() const { + return parser; + } + + TTCN3Module * getModule() const { + return module; + } + + void setModule(TTCN3Module * mod) { + module = mod; + } - const NameType & getName () const {return name;} - const NameType & getType () const {return type;} - unsigned long long int getMinOccurs () const {return minOccurs;} - unsigned long long int getMaxOccurs () const {return maxOccurs;} - const List<Mstring> & getVariant () const {return variant;} - const List<Mstring> & getVariantRef () const {return variant_ref;} - ConstructType getConstruct () const {return construct;} - OriginType getOrigin () const {return origin;} - bool isVisible () const {return visible;} - XMLParser * getParser () const {return parser;} - TTCN3Module * getModule () const {return module;} + bool hasVariant(const Mstring& var) const; - void addVariant (VariantMode var, const Mstring& var_value = empty_string, bool into_variant_ref = false); - void printVariant (FILE * file); + void addVariant(const VariantMode var, const Mstring& var_value = empty_string, const bool into_variant_ref = false); + virtual void printVariant(FILE * file); - void addComment (const Mstring& text); - void printComment (FILE * file); + virtual void addComment(const Mstring& text); + virtual void printComment(FILE * file, int level = 0); - void printMinOccursMaxOccurs (FILE * file, bool inside_union, - bool empty_allowed = true) const; + void printMinOccursMaxOccurs(FILE * file, const bool inside_union, + const bool empty_allowed = true) const; - friend bool compareTypes (RootType * lhs, RootType * rhs); + friend bool compareTypes(RootType * lhs, RootType * rhs); }; -inline bool compareTypes (RootType * lhs, RootType * rhs) -{ +inline bool compareTypes(RootType * lhs, RootType * rhs) { return lhs->name.originalValueWoPrefix < rhs->name.originalValueWoPrefix; } diff --git a/xsdconvert/SimpleType.cc b/xsdconvert/SimpleType.cc index 16d80d046..db39ef0bf 100644 --- a/xsdconvert/SimpleType.cc +++ b/xsdconvert/SimpleType.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -12,38 +12,51 @@ #include "TTCN3ModuleInventory.hh" #include "TTCN3Module.hh" #include "ComplexType.hh" -#include "FieldType.hh" +extern bool g_flag_used; SimpleType::SimpleType(XMLParser * a_parser, TTCN3Module * a_module, ConstructType a_construct) : RootType(a_parser, a_module, a_construct) - , builtInBase() - , length(this) - , pattern(this) - , enumeration(this) - , whitespace(this) - , value(this) - , element_form_as(notset) - , attribute_form_as(notset) - , mode(noMode) - , outside_reference() - , in_name_only(false) - {} +, builtInBase() +, length(this) +, pattern(this) +, enumeration(this) +, whitespace(this) +, value(this) +, element_form_as(notset) +, attribute_form_as(notset) +, mode(noMode) +, outside_reference() +, in_name_only(false) +, fromRef(false) +, xsdtype(n_NOTSET) +, isOptional(false) +, substitionGroup(empty_string) +, subsGroup(NULL) +, block(not_set) +, parent(NULL) { +} SimpleType::SimpleType(const SimpleType& other) : RootType(other) - , builtInBase(other.builtInBase) - , length(other.length) - , pattern(other.pattern) - , enumeration(other.enumeration) - , whitespace(other.whitespace) - , value(other.value) - , element_form_as(other.element_form_as) - , attribute_form_as(other.attribute_form_as) - , mode(other.mode) - , outside_reference(other.outside_reference) - , in_name_only(other.in_name_only) -{ +, builtInBase(other.builtInBase) +, length(other.length) +, pattern(other.pattern) +, enumeration(other.enumeration) +, whitespace(other.whitespace) +, value(other.value) +, element_form_as(other.element_form_as) +, attribute_form_as(other.attribute_form_as) +, mode(other.mode) +, outside_reference(other.outside_reference) +, in_name_only(other.in_name_only) +, fromRef(other.fromRef) +, xsdtype(other.xsdtype) +, isOptional(other.isOptional) +, substitionGroup(other.substitionGroup) +, subsGroup(other.subsGroup) +, block(other.block) +, parent(NULL) { length.parent = this; pattern.parent = this; enumeration.parent = this; @@ -51,193 +64,266 @@ SimpleType::SimpleType(const SimpleType& other) value.parent = this; } -void SimpleType::loadWithValues() -{ +void SimpleType::loadWithValues() { const XMLParser::TagAttributes & atts = parser->getActualTagAttributes(); - - switch (parser->getActualTagName()) - { - case XMLParser::n_restriction: - type.upload(atts.base); - setReference(atts.base); - mode = restrictionMode; - break; - case XMLParser::n_list: - type.upload(atts.itemType); - setReference(atts.itemType); - minOccurs = 0; - maxOccurs = ULLONG_MAX; - addVariant(V_list); - mode = listMode; - break; - case XMLParser::n_union: { // generating complextype from simpletype - ComplexType * new_complextype = new ComplexType(*this, ComplexType::fromTagUnion); - new_complextype->loadWithValues(); - break; } - case XMLParser::n_element: - name.upload(atts.name); - type.upload(atts.type); - setReference(atts.type, true); - applyDefaultAttribute(atts.default_); - applyFixedAttribute(atts.fixed); - applyNillableAttribute(atts.nillable); - break; - case XMLParser::n_attribute: - name.upload(atts.name); - type.upload(atts.type); - setReference(atts.type, true); - applyDefaultAttribute(atts.default_); - applyFixedAttribute(atts.fixed); - break; - case XMLParser::n_simpleType: - name.upload(atts.name); - break; - case XMLParser::n_complexType: { // generating complextype from simpletype - ComplexType * new_complextype = new ComplexType(*this, ComplexType::fromTagComplexType); - new_complextype->loadWithValues(); - break; } - case XMLParser::n_length: - if (mode == listMode) { - minOccurs = strtoull(atts.value.c_str(), NULL, 0); - maxOccurs = strtoull(atts.value.c_str(), NULL, 0); + switch (parser->getActualTagName()) { + case n_restriction: + type.upload(atts.base); + setReference(atts.base); + mode = restrictionMode; break; - } - length.facet_minLength = strtoull(atts.value.c_str(), NULL, 0); - length.facet_maxLength = strtoull(atts.value.c_str(), NULL, 0); - length.modified = true; - break; - case XMLParser::n_minLength: - if (mode == listMode) { - minOccurs = strtoull(atts.value.c_str(), NULL, 0); + case n_list: + type.upload(atts.itemType); + setReference(atts.itemType); + minOccurs = 0; + maxOccurs = ULLONG_MAX; + addVariant(V_list); + mode = listMode; break; - } - length.facet_minLength = strtoull(atts.value.c_str(), NULL, 0); - length.modified = true; - break; - case XMLParser::n_maxLength: - if (mode == listMode) { - maxOccurs = strtoull(atts.value.c_str(), NULL, 0); + case n_union: + { // generating complextype from simpletype + ComplexType * new_complextype = new ComplexType(*this, ComplexType::fromTagUnion); + new_complextype->loadWithValues(); break; } - length.facet_maxLength = strtoull(atts.value.c_str(), NULL, 0); - length.modified = true; - break; - case XMLParser::n_pattern: - pattern.facet = atts.value; - pattern.modified = true; - break; - case XMLParser::n_enumeration: - enumeration.facets.push_back(atts.value); - enumeration.modified = true; - break; - case XMLParser::n_whiteSpace: - whitespace.facet = atts.value; - whitespace.modified = true; - break; - case XMLParser::n_minInclusive: - if (atts.value == "NaN") {} - else if (atts.value == "-INF") { - value.facet_minInclusive = -DBL_MAX; - } - else if (atts.value == "INF") { - value.facet_minInclusive = DBL_MAX; - } - else { - value.facet_minInclusive = stringToLongDouble(atts.value.c_str()); - } - value.modified = true; - break; - case XMLParser::n_maxInclusive: - if (atts.value == "NaN") {} - else if (atts.value == "-INF") { - value.facet_maxInclusive = -DBL_MAX; - } - else if (atts.value == "INF") { - value.facet_maxInclusive = DBL_MAX; - } - else { - value.facet_maxInclusive = stringToLongDouble(atts.value.c_str()); - } - value.modified = true; - break; - case XMLParser::n_minExclusive: - if (atts.value == "NaN") {} - else if (atts.value == "-INF") { - value.facet_minExclusive = -DBL_MAX; - } - else if (atts.value == "INF") { - value.facet_minExclusive = DBL_MAX; - } - else { - value.facet_minExclusive = stringToLongDouble(atts.value.c_str()); - } - value.modified = true; - value.lowerExclusive = true; - break; - case XMLParser::n_maxExclusive: - if (atts.value == "NaN") {} - else if (atts.value == "-INF") { - value.facet_maxExclusive = -DBL_MAX; - } - else if (atts.value == "INF") { - value.facet_maxExclusive = DBL_MAX; - } - else { - value.facet_maxExclusive = stringToLongDouble(atts.value.c_str()); + case n_element: + name.upload(atts.name); + type.upload(atts.type); + setReference(atts.type, true); + if (!atts.nillable) { + applyDefaultAttribute(atts.default_); + applyFixedAttribute(atts.fixed); + } + applyAbstractAttribute(atts.abstract); + applySubstitionGroupAttribute(atts.substitionGroup); + applyBlockAttribute(atts.block); + //This shall be the last instruction always + applyNillableAttribute(atts.nillable); + break; + case n_attribute: + name.upload(atts.name); + type.upload(atts.type); + xsdtype = n_attribute; + setReference(atts.type, true); + applyDefaultAttribute(atts.default_); + applyFixedAttribute(atts.fixed); + break; + case n_simpleType: + name.upload(atts.name); + break; + case n_complexType: + { // generating complextype from simpletype + ComplexType * new_complextype = new ComplexType(*this, ComplexType::fromTagComplexType); + new_complextype->loadWithValues(); + break; } - value.modified = true; - value.upperExclusive = true; - break; - case XMLParser::n_totalDigits: - value.facet_totalDigits = strtoul(atts.value.c_str(), NULL, 0); - value.modified = true; - break; - case XMLParser::n_annotation: - case XMLParser::n_documentation: - break; - case XMLParser::n_label: - addComment(Mstring("LABEL:")); - break; - case XMLParser::n_definition: - addComment(Mstring("DEFINITION:")); - break; - default: - break; + case n_length: + if (mode == listMode) { + minOccurs = strtoull(atts.value.c_str(), NULL, 0); + maxOccurs = strtoull(atts.value.c_str(), NULL, 0); + break; + } + length.facet_minLength = strtoull(atts.value.c_str(), NULL, 0); + length.facet_maxLength = strtoull(atts.value.c_str(), NULL, 0); + length.modified = true; + break; + case n_minLength: + if (mode == listMode) { + minOccurs = strtoull(atts.value.c_str(), NULL, 0); + break; + } + length.facet_minLength = strtoull(atts.value.c_str(), NULL, 0); + length.modified = true; + break; + case n_maxLength: + if (mode == listMode) { + maxOccurs = strtoull(atts.value.c_str(), NULL, 0); + break; + } + length.facet_maxLength = strtoull(atts.value.c_str(), NULL, 0); + length.modified = true; + break; + case n_pattern: + pattern.facet = atts.value; + pattern.modified = true; + break; + case n_enumeration: + enumeration.facets.push_back(atts.value); + enumeration.modified = true; + break; + case n_whiteSpace: + whitespace.facet = atts.value; + whitespace.modified = true; + break; + case n_minInclusive: + if (atts.value == "NaN") { + value.not_a_number = true; + } else if (atts.value == "-INF") { + value.facet_minInclusive = -DBL_MAX; + } else if (atts.value == "INF") { + value.facet_minInclusive = DBL_MAX; + } else { + value.facet_minInclusive = stringToLongDouble(atts.value.c_str()); + } + value.modified = true; + break; + case n_maxInclusive: + if (atts.value == "NaN") { + value.not_a_number = true; + } else if (atts.value == "-INF") { + value.facet_maxInclusive = -DBL_MAX; + } else if (atts.value == "INF") { + value.facet_maxInclusive = DBL_MAX; + } else { + value.facet_maxInclusive = stringToLongDouble(atts.value.c_str()); + } + value.modified = true; + break; + case n_minExclusive: + if (atts.value == "NaN") { + setInvisible(); + } else if (atts.value == "-INF") { + value.facet_minExclusive = -DBL_MAX; + } else if (atts.value == "INF") { + setInvisible(); + } else { + value.facet_minExclusive = stringToLongDouble(atts.value.c_str()); + } + value.modified = true; + value.lowerExclusive = true; + break; + case n_maxExclusive: + if (atts.value == "NaN") { + setInvisible(); + } else if (atts.value == "-INF") { + setInvisible(); + } else if (atts.value == "INF") { + value.facet_maxExclusive = DBL_MAX; + } else { + value.facet_maxExclusive = stringToLongDouble(atts.value.c_str()); + } + value.modified = true; + value.upperExclusive = true; + break; + case n_totalDigits: + value.facet_totalDigits = strtoul(atts.value.c_str(), NULL, 0); + value.modified = true; + break; + case n_fractionDigits: + //addVariant(V_fractionDigits, atts.value); + break; + case n_label: + addComment(Mstring("LABEL:")); + break; + case n_definition: + addComment(Mstring("DEFINITION:")); + break; + default: + break; } } -void SimpleType::applyDefaultAttribute(const Mstring& default_value) -{ +void SimpleType::applyDefaultAttribute(const Mstring& default_value) { if (!default_value.empty()) { value.default_value = default_value; - addVariant(V_defaultForEmpty, default_value); + const Mstring nameT = type.originalValueWoPrefix.getValueWithoutPrefix(':'); + //Not supported for hexBinary and base64Binary + if (nameT != "hexBinary" && nameT != "base64Binary") { + addVariant(V_defaultForEmpty, default_value); + } } } -void SimpleType::applyFixedAttribute(const Mstring& fixed_value) -{ +void SimpleType::applyFixedAttribute(const Mstring& fixed_value) { if (!fixed_value.empty()) { value.fixed_value = fixed_value; - addVariant(V_defaultForEmpty, fixed_value); + value.modified = true; + const Mstring nameT = type.originalValueWoPrefix.getValueWithoutPrefix(':'); + //Not supported for hexBinary and base64Binary + if (nameT != "hexBinary" && nameT != "base64Binary") { + addVariant(V_defaultForEmpty, fixed_value); + } } } -void SimpleType::applyNillableAttribute(bool nillable) -{ - if (nillable) - { +void SimpleType::applyNillableAttribute(const bool nillable) { + if (nillable) { ComplexType * new_complextype = new ComplexType(*this, ComplexType::fromTagNillable); // generating complextype from simpletype new_complextype->loadWithValues(); } } -void SimpleType::setReference(const Mstring& ref, bool only_name_dependency) -{ +void SimpleType::applyAbstractAttribute(const bool abstract_value) { + if (abstract_value) { + addVariant(V_onlyValueHidden, Mstring("\"abstract\"")); + } +} + +void SimpleType::applySubstitionGroupAttribute(const Mstring& substition_group){ + if(!substition_group.empty()){ + substitionGroup = substition_group; + } +} + +void SimpleType::applyBlockAttribute(const BlockValue block_){ + if(block_ == not_set){ + block = getModule()->getBlockDefault(); + }else { + block = block_; + } +} + +void SimpleType::addToSubstitutions(){ + if(!g_flag_used){ + return; + } + SimpleType * st_ = (SimpleType*) TTCN3ModuleInventory::getInstance().lookup(this, substitionGroup, want_BOTH); + if(st_ == NULL){ + printError(module->getSchemaname(), name.convertedValue, + "Reference for a non-defined type: " + substitionGroup); + TTCN3ModuleInventory::getInstance().incrNumErrors(); + return; + return; + } + SimpleType * st = (SimpleType*)st_; + if(st->getSubstitution() != NULL){ + st = st->getSubstitution(); + } + + st->referenceResolving(); + substitionGroup = empty_string; + //Simpletype + if(st->subsGroup == NULL){ + ComplexType * head_element = new ComplexType(*st, ComplexType::fromTagSubstition); + for(List<SimpleType*>::iterator simpletype = st->nameDepList.begin(); simpletype; simpletype = simpletype->Next){ + head_element->nameDepList.push_back(simpletype->Data); + } + st->nameDepList.clear(); + st->getModule()->addMainType(head_element); + head_element->addVariant(V_untagged); + head_element->addSubstitution(st); + head_element->addSubstitution(this); + //if st->subsGroup == this, then it is a generated subs group + st->subsGroup = head_element; + st->setInvisible(); + }else { + st->subsGroup->addSubstitution(this); + } +} + +void SimpleType::setReference(const Mstring& ref, bool only_name_dependency) { if (ref.empty()) { return; } if (isBuiltInType(ref)) { builtInBase = ref.getValueWithoutPrefix(':'); + if (name.convertedValue.empty()) { + name.upload(ref); + } + if (type.convertedValue.empty() || type.convertedValue == "anySimpleType") { + type.upload(ref.getValueWithoutPrefix(':')); + } + fromRef = true; return; } @@ -246,8 +332,7 @@ void SimpleType::setReference(const Mstring& ref, bool only_name_dependency) Mstring refUri; // Find the URI amongst the known namespace URIs List<NamespaceType>::iterator declNS; - for (declNS = module->getDeclaredNamespaces().begin(); declNS; declNS = declNS->Next) - { + for (declNS = module->getDeclaredNamespaces().begin(); declNS; declNS = declNS->Next) { if (refPrefix == declNS->Data.prefix) { refUri = declNS->Data.uri; break; @@ -258,11 +343,9 @@ void SimpleType::setReference(const Mstring& ref, bool only_name_dependency) if (refUri.empty()) { // not found if (refPrefix == "xml") { refUri = "http://www.w3.org/XML/1998/namespace"; - } - else if (refPrefix == "xmlns") { + } else if (refPrefix == "xmlns") { refUri = "http://www.w3.org/2000/xmlns"; - } - else if (refPrefix.empty() && module->getTargetNamespace() == "NoTargetNamespace") { + } else if (refPrefix.empty() && module->getTargetNamespace() == "NoTargetNamespace") { refUri = "NoTargetNamespace"; } } @@ -271,11 +354,10 @@ void SimpleType::setReference(const Mstring& ref, bool only_name_dependency) if (refPrefix.empty()) { printError(module->getSchemaname(), parser->getActualLineNumber(), Mstring("The absent namespace must be imported because " - "it is not the same as the target namespace of the current schema.")); + "it is not the same as the target namespace of the current schema.")); parser->incrNumErrors(); return; - } - else { + } else { printError(module->getSchemaname(), parser->getActualLineNumber(), "The value \'" + ref + "\' is incorrect: " "A namespace prefix does not denote any URI."); @@ -285,43 +367,52 @@ void SimpleType::setReference(const Mstring& ref, bool only_name_dependency) } if (only_name_dependency) { - //name_dependency = refUri + "|" + refValue; in_name_only = true; } - //reference_for_other = refUri + "|" + refValue; outside_reference.load(refUri, refValue, &declNS->Data); } -void SimpleType::referenceResolving() -{ - if (outside_reference.empty()) return; +void SimpleType::referenceResolving() { + if (outside_reference.empty() && substitionGroup.empty()) return; if (outside_reference.is_resolved()) return; - SimpleType * found_ST = static_cast<SimpleType*>( - TTCN3ModuleInventory::getInstance().lookup(this, want_ST)); - ComplexType * found_CT = static_cast<ComplexType*>( - TTCN3ModuleInventory::getInstance().lookup(this, want_CT)); - // It _is_ possible to find both - - if (found_ST != NULL) { - referenceForST(found_ST); - found_ST->addToNameDepList(this); - } - else if (found_CT != NULL) { - referenceForCT(found_CT); - found_CT->addToNameDepList(this); - } - else { - printError(module->getSchemaname(), name.convertedValue, - "Reference for a non-defined type: " + outside_reference.repr()); - TTCN3ModuleInventory::getInstance().incrNumErrors(); - outside_reference.set_resolved(NULL); + if(!outside_reference.empty()){ + SimpleType * found_ST = static_cast<SimpleType*> ( + TTCN3ModuleInventory::getInstance().lookup(this, want_ST)); + ComplexType * found_CT = static_cast<ComplexType*> ( + TTCN3ModuleInventory::getInstance().lookup(this, want_CT)); + // It _is_ possible to find both + + if (found_ST != NULL) { + if (!found_ST->outside_reference.empty() && !found_ST->outside_reference.is_resolved() && found_ST != this) { + found_ST->outside_reference.set_resolved(NULL); + found_ST->referenceResolving(); + } + referenceForST(found_ST); + if (!isBuiltInType(type.convertedValue)) { + found_ST->addToNameDepList(this); + } + } else if (found_CT != NULL) { + referenceForCT(found_CT); + if (!isBuiltInType(type.convertedValue)) { + found_CT->addToNameDepList(this); + } + }else { + printError(module->getSchemaname(), name.convertedValue, + "Reference for a non-defined type: " + outside_reference.repr()); + TTCN3ModuleInventory::getInstance().incrNumErrors(); + outside_reference.set_resolved(NULL); + } + if(!substitionGroup.empty()){ + addToSubstitutions(); + } + }else if(!substitionGroup.empty()){ + addToSubstitutions(); } } -void SimpleType::referenceForST(SimpleType const * const found_ST) -{ +void SimpleType::referenceForST(SimpleType * found_ST) { outside_reference.set_resolved(found_ST); if (in_name_only) @@ -333,7 +424,9 @@ void SimpleType::referenceForST(SimpleType const * const found_ST) if (mode == listMode) return; - builtInBase = found_ST->builtInBase; + if (!found_ST->builtInBase.empty()) { + builtInBase = found_ST->builtInBase; + } length.applyReference(found_ST->length); pattern.applyReference(found_ST->pattern); @@ -342,74 +435,96 @@ void SimpleType::referenceForST(SimpleType const * const found_ST) value.applyReference(found_ST->value); mode = found_ST->mode; + if (found_ST->mode != listMode) { + type.upload(found_ST->getType().convertedValue); + } } -void SimpleType::referenceForCT(ComplexType const * const found_CT) -{ +void SimpleType::referenceForCT(ComplexType * found_CT) { outside_reference.set_resolved(found_CT); if (in_name_only) return; + // Section 7.5.3 Example5 + if (found_CT->getType().convertedValue == Mstring("union") && mode == restrictionMode) { + for (List<Mstring>::iterator facet = enumeration.facets.begin(); facet; facet = facet->Next) { + enumeration.items_misc.push_back(facet->Data); + } + } + size_t value_size = value.items_with_value.size(); //Used to check changes enumeration.modified = false; - for (List<Mstring>::iterator itemMisc = enumeration.items_misc.begin(); itemMisc; itemMisc = itemMisc->Next) - { - if (isdigit(itemMisc->Data[0])) - { - for (List<FieldType*>::iterator field = found_CT->getFields().begin(); field; field = field->Next) - { - if (isIntegerType(field->Data->getType().convertedValue)) - { + for (List<Mstring>::iterator itemMisc = enumeration.items_misc.begin(); itemMisc; itemMisc = itemMisc->Next) { + size_t act_size = value.items_with_value.size(); //Used to detect if field did not match any field + for (List<ComplexType*>::iterator field = found_CT->complexfields.begin(); field; field = field->Next) { + if (isIntegerType(field->Data->getType().convertedValue)) { + int read_chars = -1; + int val = -1; + sscanf(itemMisc->Data.c_str(), "%d%n", &val, &read_chars); + if ((size_t) read_chars == itemMisc->Data.size()) { expstring_t tmp_string = mprintf("{%s:=%d}", - field->Data->getName().convertedValue.c_str(), atoi(itemMisc->Data.c_str())); + field->Data->getName().convertedValue.c_str(), val); value.items_with_value.push_back(Mstring(tmp_string)); + break; } - else if (isFloatType(field->Data->getType().convertedValue)) - { + } + + if (isFloatType(field->Data->getType().convertedValue)) { + int read_chars = -1; + float val = -1.0; + sscanf(itemMisc->Data.c_str(), "%f%n", &val, &read_chars); + if ((size_t) read_chars == itemMisc->Data.size()) { expstring_t tmp_string = mprintf("{%s:=%f}", - field->Data->getName().convertedValue.c_str(), atof(itemMisc->Data.c_str())); - value.items_with_value.push_back(Mstring(tmp_string)); - } - else if (isTimeType(field->Data->getType().convertedValue)) - { - expstring_t tmp_string = mprintf("{%s;=%s}", - field->Data->getName().convertedValue.c_str(), itemMisc->Data.c_str()); + field->Data->getName().convertedValue.c_str(), val); value.items_with_value.push_back(Mstring(tmp_string)); + break; } } - } - else { - for (List<FieldType*>::iterator field = found_CT->getFields().begin(); field; field = field->Next) - { - if (isStringType(field->Data->getType().convertedValue)) - { + + if (isTimeType(field->Data->getType().convertedValue)) { + if (matchDates(itemMisc->Data.c_str(), field->Data->getType().originalValueWoPrefix.c_str())) { expstring_t tmp_string = mprintf("{%s:=\"%s\"}", field->Data->getName().convertedValue.c_str(), itemMisc->Data.c_str()); value.items_with_value.push_back(Mstring(tmp_string)); + break; } } + + if (isStringType(field->Data->getType().convertedValue)) { + expstring_t tmp_string = mprintf("{%s:=\"%s\"}", + field->Data->getName().convertedValue.c_str(), itemMisc->Data.c_str()); + value.items_with_value.push_back(Mstring(tmp_string)); + break; + } + } + + if (act_size == value.items_with_value.size()) { + printWarning(getModule()->getSchemaname(), getName().convertedValue, + Mstring("The following enumeration did not match any field: ") + itemMisc->Data + Mstring(".")); + TTCN3ModuleInventory::getInstance().incrNumWarnings(); } } -} + if (value_size != value.items_with_value.size()) { + value.modified = true; + } +} -void SimpleType::nameConversion(NameConversionMode conversion_mode, const List<NamespaceType> & ns) -{ - switch (conversion_mode) - { - case nameMode: - nameConversion_names(); - break; - case typeMode: - nameConversion_types(ns); - break; - case fieldMode: - break; +void SimpleType::nameConversion(NameConversionMode conversion_mode, const List<NamespaceType> & ns) { + if(!visible) return; + switch (conversion_mode) { + case nameMode: + nameConversion_names(); + break; + case typeMode: + nameConversion_types(ns); + break; + case fieldMode: + break; } } -void SimpleType::nameConversion_names() -{ +void SimpleType::nameConversion_names() { Mstring res, var(module->getTargetNamespace()); XSDName2TTCN3Name(name.convertedValue, TTCN3ModuleInventory::getInstance().getTypenames(), type_name, res, var); name.convertedValue = res; @@ -419,17 +534,15 @@ void SimpleType::nameConversion_names() } } -void SimpleType::nameConversion_types(const List<NamespaceType> & ns) -{ +void SimpleType::nameConversion_types(const List<NamespaceType> & ns) { if (type.convertedValue == "record" || type.convertedValue == "set" - ||type.convertedValue == "union" || type.convertedValue == "enumerated") return; + || type.convertedValue == "union" || type.convertedValue == "enumerated") return; - Mstring prefix = type.convertedValue.getPrefix(':'); + Mstring prefix = type.convertedValue.getPrefix(':'); Mstring value_str = type.convertedValue.getValueWithoutPrefix(':'); Mstring uri; - for (List<NamespaceType>::iterator namesp = ns.begin(); namesp; namesp = namesp->Next) - { + for (List<NamespaceType>::iterator namesp = ns.begin(); namesp; namesp = namesp->Next) { if (prefix == namesp->Data.prefix) { uri = namesp->Data.uri; break; @@ -439,8 +552,7 @@ void SimpleType::nameConversion_types(const List<NamespaceType> & ns) QualifiedName tmp(uri, value_str); QualifiedNames::iterator origTN = TTCN3ModuleInventory::getInstance().getTypenames().begin(); - for ( ; origTN; origTN = origTN->Next) - { + for (; origTN; origTN = origTN->Next) { if (tmp == origTN->Data) { QualifiedName tmp_name(module->getTargetNamespace(), name.convertedValue); if (tmp_name == origTN->Data) @@ -454,16 +566,14 @@ void SimpleType::nameConversion_types(const List<NamespaceType> & ns) // This ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ is always value_str // The only effect here is to remove the "xs:" prefix from type.convertedValue, // otherwise the new value is always the same as the old. - } - else { + } else { Mstring res, var; XSDName2TTCN3Name(value_str, TTCN3ModuleInventory::getInstance().getTypenames(), type_reference_name, res, var); setTypeValue(res); } } -void SimpleType::finalModification() -{ +void SimpleType::finalModification() { value.applyFacets(); length.applyFacets(); pattern.applyFacet(); @@ -473,44 +583,81 @@ void SimpleType::finalModification() if (module->getElementFormDefault() == qualified && element_form_as == unqualified) { addVariant(V_formAs, Mstring("unqualified")); + } else if (module->getElementFormDefault() != qualified && + element_form_as == qualified) { + addVariant(V_formAs, Mstring("qualified")); } + if (module->getAttributeFormDefault() == qualified && attribute_form_as == unqualified) { addVariant(V_formAs, Mstring("unqualified")); + } else if (module->getAttributeFormDefault() != qualified && + attribute_form_as == qualified) { + addVariant(V_formAs, Mstring("qualified")); + } + + if (type.originalValueWoPrefix == Mstring("boolean")) { + addVariant(V_onlyValueHidden, Mstring("\"text 'false' as '0'\"")); + addVariant(V_onlyValueHidden, Mstring("\"text 'true' as '1'\"")); + } + + isOptional = isOptional || (minOccurs == 0 && maxOccurs == 0); + + // If the type name is the same as the identifier then we have to prefix it + // with the module identifier. + if (type.convertedValue == name.convertedValue && !outside_reference.empty()) { + List<const TTCN3Module*>::iterator import_module = module->getImportedModules().begin(); + for (; import_module; import_module = import_module->Next) { + if (import_module->Data->getTargetNamespace() == outside_reference.get_uri()) { + type.upload(import_module->Data->getModulename() + Mstring(".") + type.convertedValue); + break; + } + } } } -bool SimpleType::hasUnresolvedReference() -{ - if (!outside_reference.empty() && !outside_reference.is_resolved()) +bool SimpleType::hasUnresolvedReference() { + if (!outside_reference.empty() && !outside_reference.is_resolved()) { return true; - else + } else { return false; + } } +void SimpleType::applyRefAttribute(const Mstring& ref_value) { + if (!ref_value.empty()) { + setReference(ref_value); + fromRef = true; + } +} -void SimpleType::printToFile(FILE * file) -{ - if (!visible) return; +void SimpleType::printToFile(FILE * file) { + if (!visible) { + return; + } printComment(file); fputs("type ", file); - if (enumeration.modified) { + if(enumeration.modified && hasVariant(Mstring("\"list\""))){ + printMinOccursMaxOccurs(file, false); + fprintf(file, "enumerated\n{\n"); + enumeration.sortFacets(); + enumeration.printToFile(file); + fprintf(file, "\n} %s", name.convertedValue.c_str()); + } else if (enumeration.modified) { if (isFloatType(builtInBase)) { fprintf(file, "%s %s (", type.convertedValue.c_str(), name.convertedValue.c_str()); enumeration.sortFacets(); enumeration.printToFile(file); fputc(')', file); - } - else { + } else { fprintf(file, "enumerated %s\n{\n", name.convertedValue.c_str()); enumeration.sortFacets(); enumeration.printToFile(file); fputs("\n}", file); } - } - else { + } else { printMinOccursMaxOccurs(file, false); int multiplicity = multi(module, outside_reference, this); @@ -526,18 +673,18 @@ void SimpleType::printToFile(FILE * file) value.printToFile(file); length.printToFile(file); } + enumeration.insertVariants(); printVariant(file); fputs(";\n\n\n", file); } -void SimpleType::dump(unsigned int depth) const -{ +void SimpleType::dump(unsigned int depth) const { static const char *modes[] = { "", "restriction", "extension", "list" }; fprintf(stderr, "%*s SimpleType '%s' -> '%s' at %p\n", depth * 2, "", name.originalValueWoPrefix.c_str(), name.convertedValue.c_str(), - (const void*)this); + (const void*) this); fprintf(stderr, "%*s type '%s' -> '%s'\n", depth * 2, "", type.originalValueWoPrefix.c_str(), type.convertedValue.c_str()); @@ -545,23 +692,22 @@ void SimpleType::dump(unsigned int depth) const fprintf(stderr, "%*s %s, base='%s'\n", depth * 2, "", modes[mode], builtInBase.c_str()); } -// fprintf (stderr, "%*s rfo='%s' n_d='%s'\n", depth * 2, "", -// reference_for_other.c_str(), name_dependency.c_str()); + // fprintf (stderr, "%*s rfo='%s' n_d='%s'\n", depth * 2, "", + // reference_for_other.c_str(), name_dependency.c_str()); } /* * * * * * * * * * * * * * * * * * * * * * * * * * * * */ LengthType::LengthType(SimpleType * a_simpleType) : parent(a_simpleType) - , modified(false) - , facet_minLength(0) - , facet_maxLength(ULLONG_MAX) - , lower(0) - , upper(ULLONG_MAX) -{} - -void LengthType::applyReference(const LengthType & other) -{ +, modified(false) +, facet_minLength(0) +, facet_maxLength(ULLONG_MAX) +, lower(0) +, upper(ULLONG_MAX) { +} + +void LengthType::applyReference(const LengthType & other) { if (!modified) modified = other.modified; if (other.facet_minLength > facet_minLength) facet_minLength = other.facet_minLength; if (other.facet_maxLength < facet_maxLength) facet_maxLength = other.facet_maxLength; @@ -571,30 +717,27 @@ void LengthType::applyFacets() // only for string types and list types without Q { if (!modified) return; - switch (parent->getMode()) - { - case SimpleType::restrictionMode: { - const Mstring & base = parent->getBuiltInBase(); - if ((isStringType(base) || (isSequenceType(base) && base != "QName") || isAnyType(base)) || base.empty() ) + switch (parent->getMode()) { + case SimpleType::restrictionMode: { + const Mstring & base = parent->getBuiltInBase(); + if ((isStringType(base) || (isSequenceType(base) && base != "QName") || isAnyType(base)) || base.empty()) { + lower = facet_minLength; + upper = facet_maxLength; + } else { + printWarning(parent->getModule()->getSchemaname(), parent->getName().convertedValue, + Mstring("Length restriction is not supported on type '") + base + Mstring("'.")); + TTCN3ModuleInventory::getInstance().incrNumWarnings(); + } + break; + } + case SimpleType::extensionMode: + case SimpleType::listMode: lower = facet_minLength; upper = facet_maxLength; - } - else - { - printWarning(parent->getModule()->getSchemaname(), parent->getName().convertedValue, - Mstring("Length restriction is not supported on type '") + base + Mstring("'.")); - TTCN3ModuleInventory::getInstance().incrNumWarnings(); - } - break; } - case SimpleType::extensionMode: - break; - case SimpleType::listMode: - lower = facet_minLength; - upper = facet_maxLength; - break; - case SimpleType::noMode: - break; + break; + case SimpleType::noMode: + break; } if (lower > upper) { printError(parent->getModule()->getSchemaname(), parent->getName().convertedValue, @@ -604,25 +747,18 @@ void LengthType::applyFacets() // only for string types and list types without Q } } -void LengthType::printToFile(FILE * file) const -{ +void LengthType::printToFile(FILE * file) const { if (!modified) return; if (parent->getEnumeration().modified) return; - if (lower == upper) - { + if (lower == upper) { fprintf(file, " length(%llu)", lower); - } - else - { + } else { fprintf(file, " length(%llu .. ", lower); - if (upper == ULLONG_MAX) - { + if (upper == ULLONG_MAX) { fputs("infinity", file); - } - else - { + } else { fprintf(file, "%llu", upper); } @@ -634,13 +770,12 @@ void LengthType::printToFile(FILE * file) const PatternType::PatternType(SimpleType * a_simpleType) : parent(a_simpleType) - , modified(false) - , facet() - , value() - {} +, modified(false) +, facet() +, value() { +} -void PatternType::applyReference(const PatternType & other) -{ +void PatternType::applyReference(const PatternType & other) { if (!modified) modified = other.modified; if (facet.empty()) facet = other.facet; } @@ -650,156 +785,177 @@ void PatternType::applyFacet() // only for time types and string types without h if (!modified) return; const Mstring & base = parent->getBuiltInBase(); - if (((isStringType(base) && base != "hexBinary") || isTimeType(base) || isAnyType(base)) || base.empty()) - { + if (((isStringType(base) && base != "hexBinary") || isTimeType(base) || isAnyType(base)) || base.empty()) { // XSD pattern to TTCN-3 pattern; ETSI ES 201 873-9 clause 6.1.4 // FIXME a proper scanner is needed, e.g. from flex int charclass = 0; - for (size_t i = 0; i != facet.size(); ++i) - { + for (size_t i = 0; i != facet.size(); ++i) { char c = facet[i]; switch (c) { - case '(': case ')': case '/': case '^': - value += c; - break; - case '[': - value += c; - ++charclass; - break; - case ']': - value += c; - --charclass; - break; - case '.': // any character - value += '?'; - break; - case '*': // 0 or more - value += '*'; //#(0,) - break; - case '+': - value += '+'; //#(1,) - break; - case '?': - value += "#(0,1)"; - break; - case '"': - value += "\"\""; - case '{': { - Mstring s; - int k = 1; - while (facet[i + k] != '}') { - s += facet[i + k]; - ++k; - } - if (s.isFound(',')) { - value += "#("; - value += s; - value += ')'; - } - else { - value += '#'; - value += s; - } - i = i + k; - break; } - case '\\': { - // Appendix G1.1 of XML Schema Datatypes: Character class escapes; - // specifically, http://www.w3.org/TR/xmlschema11-2/#nt-MultiCharEsc - char cn = facet[i+1]; - switch (cn) { - case 'c': - value += charclass ? "\\w\\d.\\-_:" - : "[\\w\\d.\\-_:]"; + case '(': + value += charclass ? "\\(" + : "("; break; - case 'C': - value += charclass ? "^\\w\\d.\\-_:" - : "[^\\w\\d.\\-_:]"; + case ')': + value += charclass ? "\\)" + : ")"; break; - case 'D': - value += charclass ? "^\\d" - : "[^\\d]"; + case '/': + value += '/'; break; - case 'i': - value += charclass ? "\\w\\d:" - : "[\\w\\d:]"; + case '^': + value += charclass ? "\\^" + : "^"; break; - case 'I': - value += charclass ? "^\\w\\d:" - : "[^\\w\\d:]"; + case '[': + value += c; + ++charclass; break; - case 's': - value += charclass ? "\\q{0,0,0,20}\\q{0,0,0,10}\\t\\r" - : "[\\q{0,0,0,20}\\q{0,0,0,10}\\t\\r]"; + case ']': + value += c; + --charclass; break; - case 'S': - value += charclass ? "^\\q{0,0,0,20}\\q{0,0,0,10}\\t\\r" - : "[^\\q{0,0,0,20}\\q{0,0,0,10}\\t\\r]"; + case '.': // any character + value += charclass ? '.' + : '?'; break; - case 'W': - value += charclass ? "^\\w" - : "[^\\w]"; + case '*': // 0 or more + value += '*'; //#(0,) break; - case 'p': - printWarning(parent->getModule()->getSchemaname(), parent->getName().convertedValue, - Mstring("Character categories and blocks are not supported.")); - TTCN3ModuleInventory::getInstance().incrNumWarnings(); - parent->addComment( - Mstring("Pattern is not converted due to using character categories and blocks in patterns is not supported.")); - value.clear(); - return; - - case '.': - value += '.'; + case '+': + value += '+'; //#(1,) break; - default: - // backslash + another: pass unmodified; this also handles \d and \w - value += c; - value += cn; + case '?': + value += charclass ? "?" + : "#(0,1)"; break; - } - ++i; - break; } - case '&': - if (facet[i + 1] == '#') { // &#....; - Mstring s; - int k = 2; - while (facet[i + k] != ';') { - s += facet[i + k]; - ++k; + case '"': + value += "\"\""; + case '{': + { + if (charclass == 0) { + Mstring s; + int k = 1; + while (facet[i + k] != '}') { + s += facet[i + k]; + ++k; + } + int a, b, match; + match = sscanf(s.c_str(), "%i,%i", &a, &b); + if (match == 1 || match == 2) { + value += "#("; + value += s; + value += ')'; + i = i + k; + } else { + value += "\\{"; + } + } else { + value += "\\{"; } - long long int d = atoll(s.c_str()); - if (d < 0 || d > 2147483647) { - printError(parent->getModule()->getSchemaname(), parent->getName().convertedValue, - Mstring("Invalid unicode character.")); - TTCN3ModuleInventory::getInstance().incrNumErrors(); + break; + } + case '}': + value += charclass ? "\\}" + : "}"; + break; + case '\\': + { + // Appendix G1.1 of XML Schema Datatypes: Character class escapes; + // specifically, http://www.w3.org/TR/xmlschema11-2/#nt-MultiCharEsc + char cn = facet[i + 1]; + switch (cn) { + case 'c': + value += charclass ? "\\w\\d.\\-_:" + : "[\\w\\d.\\-_:]"; + break; + case 'C': + value += charclass ? "^\\w\\d.\\-_:" + : "[^\\w\\d.\\-_:]"; + break; + case 'D': + value += charclass ? "^\\d" + : "[^\\d]"; + break; + case 'i': + value += charclass ? "\\w\\d:" + : "[\\w\\d:]"; + break; + case 'I': + value += charclass ? "^\\w\\d:" + : "[^\\w\\d:]"; + break; + case 's': + value += charclass ? "\\q{0,0,0,20}\\q{0,0,0,10}\\t\\r" + : "[\\q{0,0,0,20}\\q{0,0,0,10}\\t\\r]"; + break; + case 'S': + value += charclass ? "^\\q{0,0,0,20}\\q{0,0,0,10}\\t\\r" + : "[^\\q{0,0,0,20}\\q{0,0,0,10}\\t\\r]"; + break; + case 'W': + value += charclass ? "^\\w" + : "[^\\w]"; + break; + case 'p': + printWarning(parent->getModule()->getSchemaname(), parent->getName().convertedValue, + Mstring("Character categories and blocks are not supported.")); + TTCN3ModuleInventory::getInstance().incrNumWarnings(); + parent->addComment( + Mstring("Pattern is not converted due to using character categories and blocks in patterns is not supported.")); + value.clear(); + return; + + case '.': + value += '.'; + break; + default: + // backslash + another: pass unmodified; this also handles \d and \w + value += c; + value += cn; + break; } - unsigned char group = (d >> 24) & 0xFF; - unsigned char plane = (d >> 16) & 0xFF; - unsigned char row = (d >> 8) & 0xFF; - unsigned char cell = d & 0xFF; - - expstring_t res = mprintf("\\q{%d, %d, %d, %d}", group, plane, row, cell); - value += res; - Free(res); - i = i + k; + ++i; + break; } - // else fall through - default: //just_copy: - value += c; - break; + case '&': + if (facet[i + 1] == '#') { // &#....; + Mstring s; + int k = 2; + while (facet[i + k] != ';') { + s += facet[i + k]; + ++k; + } + long long int d = atoll(s.c_str()); + if (d < 0 || d > 2147483647) { + printError(parent->getModule()->getSchemaname(), parent->getName().convertedValue, + Mstring("Invalid unicode character.")); + TTCN3ModuleInventory::getInstance().incrNumErrors(); + } + unsigned char group = (d >> 24) & 0xFF; + unsigned char plane = (d >> 16) & 0xFF; + unsigned char row = (d >> 8) & 0xFF; + unsigned char cell = d & 0xFF; + + expstring_t res = mprintf("\\q{%d, %d, %d, %d}", group, plane, row, cell); + value += res; + Free(res); + i = i + k; + } + // else fall through + default: //just_copy: + value += c; + break; } // switch(c) } // next i - } - else - { + } else { printWarning(parent->getModule()->getSchemaname(), parent->getName().convertedValue, Mstring("Pattern restriction is not supported on type '") + base + Mstring("'.")); TTCN3ModuleInventory::getInstance().incrNumWarnings(); } } -void PatternType::printToFile(FILE * file) const -{ +void PatternType::printToFile(FILE * file) const { if (!modified || value.empty()) return; if (parent->getEnumeration().modified) return; @@ -817,13 +973,12 @@ EnumerationType::EnumerationType(SimpleType * a_simpleType) , items_float() , items_time() , items_misc() -{} +, variants() { +} -void EnumerationType::applyReference(const EnumerationType & other) -{ +void EnumerationType::applyReference(const EnumerationType & other) { if (!modified) modified = other.modified; - for (List<Mstring>::iterator facet = other.facets.begin(); facet; facet = facet->Next) - { + for (List<Mstring>::iterator facet = other.facets.begin(); facet; facet = facet->Next) { facets.push_back(facet->Data); } } @@ -832,16 +987,16 @@ void EnumerationType::applyFacets() // string types, integer types, float types, { if (!modified) return; + facets.remove_dups(); + const Mstring & base = parent->getBuiltInBase(); if (isStringType(base)) // here length restriction is applicable { List<Mstring> text_variants; - for (List<Mstring>::iterator facet = facets.begin(); facet; facet = facet->Next) - { + for (List<Mstring>::iterator facet = facets.begin(); facet; facet = facet->Next) { const LengthType & length = parent->getLength(); - if (length.lower <= facet->Data.size() && facet->Data.size() <= length.upper) - { + if (length.lower <= facet->Data.size() && facet->Data.size() <= length.upper) { Mstring res, var; XSDName2TTCN3Name(facet->Data, items_string, enum_id_name, res, var); text_variants.push_back(var); @@ -849,20 +1004,16 @@ void EnumerationType::applyFacets() // string types, integer types, float types, } text_variants.sort(); for (List<Mstring>::iterator var = text_variants.end(); var; var = var->Prev) { - parent->addVariant(V_onlyValue, var->Data); + variants.push_back(var->Data); } - } - else if (isIntegerType(base)) // here value restriction is applicable + } else if (isIntegerType(base)) // here value restriction is applicable { - for (List<Mstring>::iterator facet = facets.begin(); facet; facet = facet->Next) - { + for (List<Mstring>::iterator facet = facets.begin(); facet; facet = facet->Next) { int int_value = atoi(facet->Data.c_str()); const ValueType & value = parent->getValue(); - if (value.lower <= int_value && int_value <= value.upper) - { + if (value.lower <= int_value && int_value <= value.upper) { bool found = false; - for (List<int>::iterator itemInt = items_int.begin(); itemInt; itemInt = itemInt->Next) - { + for (List<int>::iterator itemInt = items_int.begin(); itemInt; itemInt = itemInt->Next) { if (int_value == itemInt->Data) { found = true; break; @@ -870,23 +1021,19 @@ void EnumerationType::applyFacets() // string types, integer types, float types, } if (!found) items_int.push_back(int_value); - if (parent->getVariant().empty() || parent->getVariant().back() != "\"useNumber\"") { - parent->addVariant(V_useNumber); + if (variants.empty() || variants.back() != "\"useNumber\"") { + variants.push_back(Mstring("\"useNumber\"")); } } } - } - else if (isFloatType(base)) // here value restriction is applicable + } else if (isFloatType(base)) // here value restriction is applicable { - for (List<Mstring>::iterator facet = facets.begin(); facet; facet = facet->Next) - { + for (List<Mstring>::iterator facet = facets.begin(); facet; facet = facet->Next) { double float_value = atof(facet->Data.c_str()); const ValueType & value = parent->getValue(); - if (value.lower <= float_value && float_value <= value.upper) - { + if (value.lower <= float_value && float_value <= value.upper) { bool found = false; - for (List<double>::iterator itemFloat = items_float.begin(); itemFloat; itemFloat = itemFloat->Next) - { + for (List<double>::iterator itemFloat = items_float.begin(); itemFloat; itemFloat = itemFloat->Next) { if (float_value == itemFloat->Data) { found = true; break; @@ -894,31 +1041,23 @@ void EnumerationType::applyFacets() // string types, integer types, float types, } if (!found) { items_float.push_back(float_value); - } } } - } - else if (isTimeType(base)) - { + } else if (isTimeType(base)) { List<Mstring> text_variants; - for (List<Mstring>::iterator facet = facets.begin(); facet; facet = facet->Next) - { + for (List<Mstring>::iterator facet = facets.begin(); facet; facet = facet->Next) { Mstring res, var; XSDName2TTCN3Name(facet->Data, items_time, enum_id_name, res, var); text_variants.push_back(var); } text_variants.sort(); for (List<Mstring>::iterator var = text_variants.end(); var; var = var->Prev) { - parent->addVariant(V_onlyValue, var->Data); + variants.push_back(var->Data); } - } - else if (isAnyType(base)) - {} - else if (base.empty()) - {} - else - { + } else if (isAnyType(base)) { + } else if (base.empty()) { + } else { printWarning(parent->getModule()->getSchemaname(), parent->getName().convertedValue, Mstring("Enumeration restriction is not supported on type '") + base + Mstring("'.")); TTCN3ModuleInventory::getInstance().incrNumWarnings(); @@ -926,63 +1065,48 @@ void EnumerationType::applyFacets() // string types, integer types, float types, } } -void EnumerationType::sortFacets() -{ +void EnumerationType::sortFacets() { items_string.sort(); items_int.sort(); items_float.sort(); items_time.sort(); } -void EnumerationType::printToFile(FILE * file, unsigned int indent_level) const -{ +void EnumerationType::printToFile(FILE * file, unsigned int indent_level) const { if (!modified) return; const Mstring & base = parent->getBuiltInBase(); - if (isStringType(base)) - { - for (QualifiedNames::iterator itemString = items_string.begin(); itemString; itemString = itemString->Next) - { + if (isStringType(base)) { + for (QualifiedNames::iterator itemString = items_string.begin(); itemString; itemString = itemString->Next) { if (itemString != items_string.begin()) fputs(",\n", file); for (unsigned int l = 0; l != indent_level; ++l) fputs("\t", file); fprintf(file, "\t%s", itemString->Data.name.c_str()); } - } - else if (isIntegerType(base)) - { - for (List<int>::iterator itemInt = items_int.begin(); itemInt; itemInt = itemInt->Next) - { + } else if (isIntegerType(base)) { + for (List<int>::iterator itemInt = items_int.begin(); itemInt; itemInt = itemInt->Next) { if (itemInt != items_int.begin()) fputs(",\n", file); for (unsigned int l = 0; l != indent_level; ++l) fputs("\t", file); if (itemInt->Data < 0) { fprintf(file, "\tint_%d(%d)", abs(itemInt->Data), itemInt->Data); - } - else { + } else { fprintf(file, "\tint%d(%d)", itemInt->Data, itemInt->Data); } } - } - else if (isFloatType(base)) - { - for (List<double>::iterator itemFloat = items_float.begin(); itemFloat; itemFloat = itemFloat->Next) - { + } else if (isFloatType(base)) { + for (List<double>::iterator itemFloat = items_float.begin(); itemFloat; itemFloat = itemFloat->Next) { if (itemFloat != items_float.begin()) fputs(", ", file); double intpart = 0; double fracpart = 0; fracpart = modf(itemFloat->Data, &intpart); if (fracpart == 0) { - fprintf(file, "%lld.0", (long long int)(itemFloat->Data)); - } - else { + fprintf(file, "%lld.0", (long long int) (itemFloat->Data)); + } else { fprintf(file, "%g", itemFloat->Data); } } - } - else if (isTimeType(base)) - { - for (QualifiedNames::iterator itemTime = items_time.begin(); itemTime; itemTime = itemTime->Next) - { + } else if (isTimeType(base)) { + for (QualifiedNames::iterator itemTime = items_time.begin(); itemTime; itemTime = itemTime->Next) { if (itemTime != items_time.begin()) fputs(",\n", file); for (unsigned int l = 0; l != indent_level; ++l) fputs("\t", file); fprintf(file, "\t%s", itemTime->Data.name.c_str()); @@ -990,17 +1114,28 @@ void EnumerationType::printToFile(FILE * file, unsigned int indent_level) const } } +void EnumerationType::insertVariants(){ + if(!modified) return; + + Mstring pre_connector = empty_string; + if(parent->getMinOccurs() == 0 && parent->getMaxOccurs() == ULLONG_MAX){ + pre_connector = "([-]) "; + } + for(List<Mstring>::iterator var = variants.begin(); var; var = var->Next){ + parent->addVariant(V_onlyValue, pre_connector + var->Data); + } +} + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * */ WhitespaceType::WhitespaceType(SimpleType * a_simpleType) : p_parent(a_simpleType) , modified(false) , facet() -, value() -{} +, value() { +} -void WhitespaceType::applyReference(const WhitespaceType & other) -{ +void WhitespaceType::applyReference(const WhitespaceType & other) { if (!modified) modified = other.modified; if (facet.empty()) facet = other.facet; } @@ -1011,12 +1146,9 @@ void WhitespaceType::applyFacet() // only for string types: string, normalizedSt const Mstring & base = p_parent->getBuiltInBase(); if (base == "string" || base == "normalizedString" || base == "token" || base == "language" || - base == "Name" || base == "NCName" || isAnyType(base) || base.empty()) - { + base == "Name" || base == "NCName" || isAnyType(base) || base.empty()) { p_parent->addVariant(V_whiteSpace, facet); - } - else - { + } else { printWarning(p_parent->getModule()->getSchemaname(), p_parent->getName().convertedValue, Mstring("Facet 'whiteSpace' is not applicable for type '") + base + Mstring("'.")); TTCN3ModuleInventory::getInstance().incrNumWarnings(); @@ -1030,183 +1162,196 @@ ValueType::ValueType(SimpleType * a_simpleType) , facet_maxInclusive(DBL_MAX) , facet_minExclusive(-DBL_MAX) , facet_maxExclusive(DBL_MAX) -, facet_totalDigits(0) +, facet_totalDigits(-1) , lower(-DBL_MAX) , upper(DBL_MAX) , lowerExclusive(false) , upperExclusive(false) +, not_a_number(false) , fixed_value() , default_value() -, items_with_value() -{} +, items_with_value() { +} -void ValueType::applyReference(const ValueType & other) -{ - if (!modified) modified = other.modified; +void ValueType::applyReference(const ValueType & other) { + if (!modified) { + modified = other.modified; + } + if (not_a_number) { + return; + } + if (other.not_a_number) not_a_number = true; if (other.facet_minInclusive > facet_minInclusive) facet_minInclusive = other.facet_minInclusive; if (other.facet_maxInclusive < facet_maxInclusive) facet_maxInclusive = other.facet_maxInclusive; if (other.facet_minExclusive > facet_minExclusive) facet_minExclusive = other.facet_minExclusive; if (other.facet_maxExclusive < facet_maxExclusive) facet_maxExclusive = other.facet_maxExclusive; - if (other.facet_totalDigits < facet_totalDigits) facet_totalDigits = other.facet_totalDigits; + //-1 in case when it is not modified + if (other.facet_totalDigits < facet_totalDigits || facet_totalDigits == -1) facet_totalDigits = other.facet_totalDigits; + if (!other.default_value.empty()) { + default_value = other.default_value; + parent->addVariant(V_defaultForEmpty, default_value); + } + if (!other.fixed_value.empty()) { + fixed_value = other.fixed_value; + parent->addVariant(V_defaultForEmpty, fixed_value); + } } void ValueType::applyFacets() // only for integer and float types { - if (!modified) return; + if (!modified) { + return; + } + + if (not_a_number) { + return; + } const Mstring & base = parent->getBuiltInBase(); /* * Setting of default value range of built-in types */ - if (base == "positiveInteger") - { + if (base == "positiveInteger") { lower = 1; - } - else if (base == "nonPositiveInteger") - { + } else if (base == "nonPositiveInteger") { upper = 0; - } - else if (base == "negativeInteger") - { + } else if (base == "negativeInteger") { upper = -1; - } - else if (base == "nonNegativeInteger") - { + } else if (base == "nonNegativeInteger") { lower = 0; - } - else if (base == "unsignedLong") - { + } else if (base == "unsignedLong") { lower = 0; upper = ULLONG_MAX; - } - else if (base == "int") - { + } else if (base == "int") { lower = INT_MIN; upper = INT_MAX; - } - else if (base == "unsignedInt") - { + } else if (base == "unsignedInt") { lower = 0; upper = UINT_MAX; - } - else if (base == "short") - { + } else if (base == "short") { lower = SHRT_MIN; upper = SHRT_MAX; - } - else if (base == "unsignedShort") - { + } else if (base == "unsignedShort") { lower = 0; upper = USHRT_MAX; - } - else if (base == "byte") - { + } else if (base == "byte") { lower = CHAR_MIN; upper = CHAR_MAX; - } - else if (base == "unsignedByte") - { + } else if (base == "unsignedByte") { lower = 0; upper = UCHAR_MAX; } - if (isIntegerType(base)) - { + if (isIntegerType(base)) { if (facet_minInclusive != -DBL_MAX && facet_minInclusive > lower) lower = facet_minInclusive; if (facet_maxInclusive != DBL_MAX && upper > facet_maxInclusive) upper = facet_maxInclusive; if (facet_minExclusive != -DBL_MAX && lower < facet_minExclusive) lower = facet_minExclusive; if (facet_maxExclusive != DBL_MAX && upper > facet_maxExclusive) upper = facet_maxExclusive; - } - else if (isFloatType(base)) - { + } else if (isFloatType(base)) { if (facet_minInclusive != -DBL_MAX && lower < facet_minInclusive) lower = facet_minInclusive; if (facet_maxInclusive != DBL_MAX && upper > facet_maxInclusive) upper = facet_maxInclusive; if (facet_minExclusive != -DBL_MAX && lower < facet_minExclusive) lower = facet_minExclusive; if (facet_maxExclusive != DBL_MAX && upper > facet_maxExclusive) upper = facet_maxExclusive; - } - else if (isAnyType(base)) - {} - else if (base.empty()) - {} - else - { + } else if (isAnyType(base) || isTimeType(base) || isBooleanType(base)) { + } else if (isStringType(base) && ( + base.getValueWithoutPrefix(':') != "hexBinary" && base.getValueWithoutPrefix(':') != "base64Binary")) { + } else if (base.empty()) { + } else { printWarning(parent->getModule()->getSchemaname(), parent->getName().convertedValue, Mstring("Value restriction is not supported on type '") + base + Mstring("'.")); TTCN3ModuleInventory::getInstance().incrNumWarnings(); } // totalDigits facet is only for integer types and decimal - if (facet_totalDigits != 0) // if this facet is used + if (facet_totalDigits > 0) // if this facet is used { double r = pow(10.0, facet_totalDigits); - if (base == "integer") - { - lower = (int) -(r-1); - upper = (int) (r-1); - } - else if (base == "positiveInteger") - { + if (base == "integer") { + lower = (int) -(r - 1); + upper = (int) (r - 1); + } else if (base == "positiveInteger") { lower = 1; - upper = (int) (r-1); - } - else if (base == "nonPositiveInteger") - { - lower = (int) -(r-1); + upper = (int) (r - 1); + } else if (base == "nonPositiveInteger") { + lower = (int) -(r - 1); upper = 0; - } - else if (base == "negativeInteger") - { - lower = (int) -(r-1); + } else if (base == "negativeInteger") { + lower = (int) -(r - 1); upper = -1; - } - else if (base == "nonNegativeInteger") - { + } else if (base == "nonNegativeInteger") { lower = 0; - upper = (int) (r-1); - } - else if (base == "long" || + upper = (int) (r - 1); + } else if (base == "long" || base == "unsignedLong" || base == "int" || base == "unsignedInt" || base == "short" || base == "unsignedShort" || base == "byte" || - base == "unsignedByte") - { - lower = (int) -(r-1); - upper = (int) (r-1); - } - else if (base == "decimal") - { - lower = (int) -(r-1); - upper = (int) (r-1); - } - else { + base == "unsignedByte") { + lower = (int) -(r - 1); + upper = (int) (r - 1); + } else if (base == "decimal") { + lower = (int) -(r - 1); + upper = (int) (r - 1); + } else { printWarning(parent->getModule()->getSchemaname(), parent->getName().convertedValue, Mstring("Facet 'totalDigits' is not applicable for type '") + base + Mstring("'.")); TTCN3ModuleInventory::getInstance().incrNumWarnings(); } } + items_with_value.sort(); } -void ValueType::printToFile(FILE * file) const -{ +void ValueType::printToFile(FILE * file) const { if (!modified) return; if (parent->getEnumeration().modified) return; - if (!fixed_value.empty()) - { - fprintf(file, " (\"%s\")", fixed_value.c_str()); + if (not_a_number) { + fprintf(file, " ( not_a_number )"); return; } - if (!items_with_value.empty()) - { - fputs(" (", file); - for (List<Mstring>::iterator itemWithValue = items_with_value.begin(); itemWithValue; itemWithValue = itemWithValue->Next) - { - if (itemWithValue != items_with_value.begin()) fputs(", ", file); - fprintf(file, "%s", itemWithValue->Data.c_str()); + if (!fixed_value.empty()) { + //Base64binary and hexbyte does not supported + Mstring type; + if(isBuiltInType(parent->getType().originalValueWoPrefix)){ + type = parent->getType().originalValueWoPrefix; + }else { + type = getPrefixByNameSpace(parent, parent->getReference().get_uri()) + Mstring(":") + parent->getReference().get_val(); + } + if(!isBuiltInType(type)){ + type = findBuiltInType(parent, type); + } + if (isStringType(type) || isTimeType(type) || isQNameType(type) || isAnyType(type)) { + const Mstring& name = type.getValueWithoutPrefix(':'); + if (name != "hexBinary" && name != "base64Binary") { + fprintf(file, " (\"%s\")", fixed_value.c_str()); + } + } else if (isBooleanType(type)) { + Mstring val; + if (fixed_value == "1") { + val = "true"; + } else if (fixed_value == "0") { + val = "false"; + } else { + val = fixed_value; + } + fprintf(file, " (%s)", val.c_str()); + } else { + fprintf(file, " (%s)", fixed_value.c_str()); + } + return; + } + if (!items_with_value.empty()) { + fputs(" (\n", file); + for (List<Mstring>::iterator itemWithValue = items_with_value.begin(); itemWithValue; itemWithValue = itemWithValue->Next) { + fprintf(file, "\t%s", itemWithValue->Data.c_str()); + if (itemWithValue != items_with_value.end()) { + fputs(",\n", file); + } else { + fputs("\n", file); + } } fputc(')', file); return; @@ -1216,23 +1361,17 @@ void ValueType::printToFile(FILE * file) const fputs(" (", file); - if (isIntegerType(parent->getBuiltInBase())) - { + if (isIntegerType(parent->getBuiltInBase())) { if (lowerExclusive) { fputc('!', file); } - if (lower == -DBL_MAX) - { + if (lower == -DBL_MAX) { fputs("-infinity", file); - } - else if (lower < 0) - { + } else if (lower < 0) { long double temp_lower = -lower; fprintf(file, "-%.0Lf", temp_lower); - } - else - { + } else { fprintf(file, "%.0Lf", lower); } @@ -1241,39 +1380,28 @@ void ValueType::printToFile(FILE * file) const fputc('!', file); } - if (upper == DBL_MAX) - { + if (upper == DBL_MAX) { fputs("infinity", file); - } - else if (upper < 0) - { + } else if (upper < 0) { long double temp_upper = -upper; fprintf(file, "-%.0Lf", temp_upper); - } - else - { + } else { fprintf(file, "%.0Lf", upper); } - } - else if (isFloatType(parent->getBuiltInBase())) - { + } else if (isFloatType(parent->getBuiltInBase())) { if (lowerExclusive) { fputc('!', file); } - if (lower == -DBL_MAX) - { + if (lower == -DBL_MAX) { fputs("-infinity", file); - } - else - { + } else { double intpart = 0; double fracpart = 0; fracpart = modf(lower, &intpart); if (fracpart == 0) { fprintf(file, "%.1Lf", lower); - } - else { + } else { fprintf(file, "%Lg", lower); } } @@ -1283,19 +1411,15 @@ void ValueType::printToFile(FILE * file) const fputc('!', file); } - if (upper == DBL_MAX) - { + if (upper == DBL_MAX) { fputs("infinity", file); - } - else - { + } else { double intpart = 0; double fracpart = 0; fracpart = modf(upper, &intpart); if (fracpart == 0) { fprintf(file, "%.1Lf", upper); - } - else { + } else { fprintf(file, "%Lg", upper); } } diff --git a/xsdconvert/SimpleType.hh b/xsdconvert/SimpleType.hh index 0c2041411..c4ea1069f 100644 --- a/xsdconvert/SimpleType.hh +++ b/xsdconvert/SimpleType.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -12,9 +12,8 @@ class SimpleType; -class LengthType -{ - LengthType & operator = (const LengthType &); // not implemented +class LengthType { + LengthType & operator=(const LengthType &); // not implemented // it's a bit strange that it has copy constructor but no assignment public: SimpleType * parent; // no responsibility for this member @@ -24,17 +23,16 @@ public: unsigned long long int lower; unsigned long long int upper; - LengthType (SimpleType * p_parent); + LengthType(SimpleType * p_parent); // Default copy constructor and destructor are used - void applyReference (const LengthType & other); - void applyFacets (); - void printToFile (FILE * file) const; + void applyReference(const LengthType & other); + void applyFacets(); + void printToFile(FILE * file) const; }; -class PatternType -{ - PatternType & operator = (const PatternType &); // not implemented +class PatternType { + PatternType & operator=(const PatternType &); // not implemented // it's a bit strange that it has copy constructor but no assignment public: SimpleType * parent; // no responsibility for this member @@ -42,17 +40,16 @@ public: Mstring facet; Mstring value; - PatternType (SimpleType * p_parent); + PatternType(SimpleType * p_parent); // Default copy constructor and destructor are used - void applyReference (const PatternType & other); - void applyFacet (); - void printToFile (FILE * file) const; + void applyReference(const PatternType & other); + void applyFacet(); + void printToFile(FILE * file) const; }; -class EnumerationType -{ - EnumerationType & operator = (const EnumerationType &); // not implemented +class EnumerationType { + EnumerationType & operator=(const EnumerationType &); // not implemented // it's a bit strange that it has copy constructor but no assignment public: SimpleType * parent; // no responsibility for this member @@ -63,19 +60,20 @@ public: List<double> items_float; List<QualifiedName> items_time; List<Mstring> items_misc; + List<Mstring> variants; - EnumerationType (SimpleType * p_parent); + EnumerationType(SimpleType * p_parent); // Default copy constructor and destructor are used - void applyReference (const EnumerationType & other); - void applyFacets (); - void sortFacets (); - void printToFile (FILE * file, unsigned int indent_level = 0) const; + void applyReference(const EnumerationType & other); + void applyFacets(); + void sortFacets(); + void printToFile(FILE * file, unsigned int indent_level = 0) const; + void insertVariants(); }; -class WhitespaceType -{ - WhitespaceType & operator = (const WhitespaceType &); // not implemented +class WhitespaceType { + WhitespaceType & operator=(const WhitespaceType &); // not implemented // it's a bit strange that it has copy constructor but no assignment public: SimpleType * p_parent; // no responsibility for this member @@ -83,17 +81,16 @@ public: Mstring facet; Mstring value; - WhitespaceType (SimpleType * p_parent); + WhitespaceType(SimpleType * p_parent); // Default copy constructor and destructor are used - void applyReference (const WhitespaceType & other); - void applyFacet (); - void printToFile (FILE * file) const; + void applyReference(const WhitespaceType & other); + void applyFacet(); + void printToFile(FILE * file) const; }; -class ValueType -{ - ValueType & operator = (const ValueType &); // not implemented +class ValueType { + ValueType & operator=(const ValueType &); // not implemented // it's a bit strange that it has copy constructor but no assignment public: SimpleType * parent; // no responsibility for this member @@ -107,55 +104,72 @@ public: long double upper; bool lowerExclusive; bool upperExclusive; + bool not_a_number; Mstring fixed_value; Mstring default_value; List<Mstring> items_with_value; - ValueType (SimpleType * p_parent); + ValueType(SimpleType * p_parent); // Default copy constructor and destructor are used - void applyReference (const ValueType & other); - void applyFacets (); - void printToFile (FILE * file) const; + void applyReference(const ValueType & other); + void applyFacets(); + void printToFile(FILE * file) const; }; class ComplexType; class ReferenceData { public: // interface + ReferenceData() : nst(0) , uri() , value() , resolved(false) - , ref(NULL) - {} + , ref(NULL) { + } - void load(const Mstring& u, const Mstring& v, NamespaceType *n) - { + void load(const Mstring& u, const Mstring& v, NamespaceType *n) { uri = u; value = v; nst = n; } - const Mstring& get_uri() const { return uri; } - const Mstring& get_val() const { return value; } - const RootType *get_ref() const { return ref; } + const Mstring& get_uri() const { + return uri; + } + + const Mstring& get_val() const { + return value; + } + + RootType *get_ref() const { + return ref; + } bool empty() const { return uri.empty() && value.empty(); } - bool is_resolved() const { return resolved; } - void set_resolved(RootType const *st /*= NULL*/) { resolved = true; ref = st; } + bool is_resolved() const { + return resolved; + } - Mstring repr() const { return uri + Mstring("|") + value; } + void set_resolved(RootType *st /*= NULL*/) { + resolved = true; + ref = st; + } + + Mstring repr() const { + return uri + Mstring("|") + value; + } private: // implementation - NamespaceType *nst; - Mstring uri; - Mstring value; - bool resolved; - const RootType *ref; // not owned + NamespaceType *nst; + Mstring uri; + Mstring value; + bool resolved; + RootType *ref; // not owned }; /** @@ -170,11 +184,10 @@ private: // implementation * * TTCN-3 type * */ -class SimpleType : public RootType -{ +class SimpleType : public RootType { public: - enum Mode - { + + enum Mode { noMode, restrictionMode, extensionMode, @@ -200,50 +213,144 @@ protected: /// true if name_dependency would be set (not empty) bool in_name_only; - void referenceForST (SimpleType const * const found_ST); - void referenceForCT (ComplexType const * const found_CT); + // True if element or attribute used with ref attribute + bool fromRef; + // XSD Type of the type + TagName xsdtype; + bool isOptional; + Mstring substitionGroup; + ComplexType * subsGroup; + BlockValue block; + - void nameConversion_names (); - void nameConversion_types (const List<NamespaceType> & ns); + void addToSubstitutions(); + void nameConversion_names(); + virtual void nameConversion_types(const List<NamespaceType> & ns); - SimpleType & operator = (const SimpleType &); // not implemented + SimpleType & operator=(const SimpleType &); // not implemented // it's a bit strange that it has copy constructor but no assignment public: - SimpleType (XMLParser * a_parser, TTCN3Module * a_module, ConstructType a_construct); + SimpleType(XMLParser * a_parser, TTCN3Module * a_module, ConstructType a_construct); SimpleType(const SimpleType& other); // Default destructor is used + // Parent of the element (both complexType, and AttributeType) has this + // Not responsible for this member + ComplexType * parent; + /** Virtual methods * inherited from RootType */ - void loadWithValues (); - void printToFile (FILE * file); - void referenceResolving (); - void nameConversion (NameConversionMode mode, const List<NamespaceType> & ns); - void finalModification (); - bool hasUnresolvedReference (); - void dump (unsigned int depth) const; - - void applyDefaultAttribute (const Mstring& default_value); - void applyFixedAttribute (const Mstring& fixed_value); - void applyNillableAttribute (bool nillable_value); - - const Mstring & getBuiltInBase () const {return builtInBase;} - const LengthType & getLength () const {return length;} - const ValueType & getValue () const {return value;} - FormValue getElementFormAs () const {return element_form_as;} - FormValue getAttributeFormAs () const {return attribute_form_as;} - Mode getMode () const {return mode;} - const ReferenceData& getReference() const { return outside_reference; } - - EnumerationType & getEnumeration () {return enumeration;} - - void setBuiltInBase (const Mstring& base) {builtInBase = base;} - void setMode (Mode m) {mode = m;} - void setElementFormAs (FormValue f) {element_form_as = f;} - void setAttributeFormAs (FormValue f) {attribute_form_as = f;} - - void setReference (const Mstring& ref, bool only_name_dependency = false); + void loadWithValues(); + void printToFile(FILE * file); + void referenceResolving(); + void nameConversion(const NameConversionMode mode, const List<NamespaceType> & ns); + void finalModification(); + virtual bool hasUnresolvedReference(); + void dump(const unsigned int depth) const; + + void applyDefaultAttribute(const Mstring& default_value); + void applyFixedAttribute(const Mstring& fixed_value); + void applyNillableAttribute(const bool nillable_value); + void applyAbstractAttribute(const bool abstract_value); + void applySubstitionGroupAttribute(const Mstring& substition_group); + void applyBlockAttribute(const BlockValue block_); + void applyRefAttribute(const Mstring& ref_value); + + const Mstring & getBuiltInBase() const { + return builtInBase; + } + + const LengthType & getLength() const { + return length; + } + + const ValueType & getValue() const { + return value; + } + + const PatternType & getPattern() const { + return pattern; + } + + const WhitespaceType & getWhitespace() const { + return whitespace; + } + + const EnumerationType & getEnumeration() const { + return enumeration; + } + + FormValue getElementFormAs() const { + return element_form_as; + } + + FormValue getAttributeFormAs() const { + return attribute_form_as; + } + + Mode getMode() const { + return mode; + } + + bool isFromRef() const { + return fromRef; + } + + const ReferenceData& getReference() const { + return outside_reference; + } + + EnumerationType & getEnumeration() { + return enumeration; + } + + void setBuiltInBase(const Mstring& base) { + builtInBase = base; + } + + void setMode(Mode m) { + mode = m; + } + + void setElementFormAs(FormValue f) { + element_form_as = f; + } + + void setAttributeFormAs(FormValue f) { + attribute_form_as = f; + } + + void setReference(const Mstring& ref, bool only_name_dependency = false); + + void referenceForST(SimpleType * found_ST); + void referenceForCT(ComplexType * found_CT); + + void setXsdtype(TagName xsdtype_) { + xsdtype = xsdtype_; + } + + TagName getXsdtype() const { + return xsdtype; + } + + ComplexType * getSubstitution() const { + return subsGroup; + } + + BlockValue getBlock() const { + return block; + } + + void addToNameDepList(SimpleType * t) { + if(subsGroup != NULL && this != (SimpleType*)subsGroup){ + SimpleType * substitution = (SimpleType*)subsGroup; + substitution->addToNameDepList(t); + }else { + nameDepList.push_back(t); + } + } + }; #endif /* SIMPLETYPE_H_ */ diff --git a/xsdconvert/TTCN3Module.cc b/xsdconvert/TTCN3Module.cc index 2b6ac7158..a0c276389 100644 --- a/xsdconvert/TTCN3Module.cc +++ b/xsdconvert/TTCN3Module.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -41,21 +41,21 @@ TTCN3Module::TTCN3Module(const char * a_filename, XMLParser * a_parser) , declaredNamespaces() , elementFormDefault(notset) , attributeFormDefault(notset) +, blockDefault(not_set) //, importedModules() , variant() , moduleNotIntoFile(false) -, moduleNotIntoNameConversion(false) -{ +, moduleNotIntoNameConversion(false) { #if defined(WIN32) && !defined(MINGW) // Transform a Windows style path: "C:\cygwin\tmp\a.xsd" // into a POSIX style path: "/home/a/xsd", so getValueWithoutPrefix('/') // can chop off the directory path. #if CYGWIN_VERSION_DLL_MAJOR >= 1007 char *posix = NULL; - ssize_t needed = cygwin_conv_path (CCP_WIN_A_TO_POSIX | CCP_RELATIVE, a_filename, NULL, 0); + ssize_t needed = cygwin_conv_path(CCP_WIN_A_TO_POSIX | CCP_RELATIVE, a_filename, NULL, 0); if (needed >= 0) { - posix = (char*)Malloc(needed); - if (cygwin_conv_path (CCP_WIN_A_TO_POSIX | CCP_RELATIVE, a_filename, posix, needed)) { + posix = (char*) Malloc(needed); + if (cygwin_conv_path(CCP_WIN_A_TO_POSIX | CCP_RELATIVE, a_filename, posix, needed)) { posix = NULL; // conversion failed } } @@ -73,16 +73,14 @@ TTCN3Module::TTCN3Module(const char * a_filename, XMLParser * a_parser) schemaname = filename.getValueWithoutPrefix('/'); // excludes the path of the input file } -TTCN3Module::~TTCN3Module() -{ +TTCN3Module::~TTCN3Module() { for (List<RootType*>::iterator type = definedTypes.begin(); type; type = type->Next) { - delete(type->Data); + delete type->Data; } } void TTCN3Module::loadValuesFromXMLDeclaration(const char *a_version, - const char *a_encoding, int a_standalone) -{ + const char *a_encoding, int a_standalone) { xsdVersion = a_version; xsdEncoding = a_encoding; xsdStandalone = a_standalone; @@ -90,12 +88,11 @@ void TTCN3Module::loadValuesFromXMLDeclaration(const char *a_version, void TTCN3Module::loadValuesFromSchemaTag(const Mstring& a_targetNamespace, List<NamespaceType> a_declaredNamespaces, - FormValue a_elementFormDefault, FormValue a_attributeFormDefault) -{ + FormValue a_elementFormDefault, FormValue a_attributeFormDefault, + BlockValue a_blockDefault) { if (a_targetNamespace.empty()) { targetNamespace = "NoTargetNamespace"; - } - else { + } else { if (a_targetNamespace == "http://www.w3.org/2001/XMLSchema") { notIntoFile(); } @@ -104,11 +101,11 @@ void TTCN3Module::loadValuesFromSchemaTag(const Mstring& a_targetNamespace, elementFormDefault = a_elementFormDefault; attributeFormDefault = a_attributeFormDefault; + blockDefault = a_blockDefault; declaredNamespaces = a_declaredNamespaces; - for (List<NamespaceType>::iterator ns = declaredNamespaces.begin(); ns; ns = ns->Next) - { + for (List<NamespaceType>::iterator ns = declaredNamespaces.begin(); ns; ns = ns->Next) { if (ns->Data.uri == targetNamespace) { targetNamespace_connectedPrefix = ns->Data.prefix; break; @@ -116,94 +113,118 @@ void TTCN3Module::loadValuesFromSchemaTag(const Mstring& a_targetNamespace, } } -void TTCN3Module::addMainType(ConstructType typeOfMainType) -{ - switch (typeOfMainType) - { - case c_simpleType: { - SimpleType * new_ST = new SimpleType(parser, this, c_simpleType); - definedTypes.push_back(new_ST); - new_ST->loadWithValues(); - break; } - case c_element: { - SimpleType * new_ST = new SimpleType(parser, this, c_element); - definedTypes.push_back(new_ST); - new_ST->loadWithValues(); - break; } - case c_attribute: { - SimpleType * new_ST = new SimpleType(parser, this, c_attribute); - definedTypes.push_back(new_ST); - new_ST->loadWithValues(); - break; } - case c_complexType: { - ComplexType * new_CT = new ComplexType(parser, this, c_complexType); - definedTypes.push_back(new_CT); - new_CT->loadWithValues(); - break; } - case c_group: { - ComplexType * new_CT = new ComplexType(parser, this, c_group); - definedTypes.push_back(new_CT); - new_CT->loadWithValues(); - break; } - case c_attributeGroup: { - ComplexType * new_CT = new ComplexType(parser, this, c_attributeGroup); - definedTypes.push_back(new_CT); - new_CT->loadWithValues(); - break; } - case c_include: { - ImportStatement * new_INCL = new ImportStatement(parser, this, c_include); - definedTypes.push_back(new_INCL); - new_INCL->loadWithValues(); - break; } - case c_import: { - ImportStatement * new_IMP = new ImportStatement(parser, this, c_import); - definedTypes.push_back(new_IMP); - new_IMP->loadWithValues(); - break; } - case c_annotation: { - Annotation * new_ANN = new Annotation(parser, this, c_annotation); - definedTypes.push_back(new_ANN); - new_ANN->loadWithValues(); - break; } - case c_unknown: - case c_schema: - break; +void TTCN3Module::addMainType(const ConstructType typeOfMainType) { + switch (typeOfMainType) { + case c_simpleType: + { + SimpleType * new_ST = new SimpleType(parser, this, c_simpleType); + definedTypes.push_back(new_ST); + new_ST->loadWithValues(); + break; + } + case c_element: + { + SimpleType * new_ST = new SimpleType(parser, this, c_element); + definedTypes.push_back(new_ST); + new_ST->loadWithValues(); + break; + } + case c_attribute: + { + SimpleType * new_ST = new SimpleType(parser, this, c_attribute); + definedTypes.push_back(new_ST); + new_ST->loadWithValues(); + break; + } + case c_complexType: + { + ComplexType * new_CT = new ComplexType(parser, this, c_complexType); + definedTypes.push_back(new_CT); + new_CT->loadWithValues(); + break; + } + case c_group: + { + ComplexType * new_CT = new ComplexType(parser, this, c_group); + definedTypes.push_back(new_CT); + new_CT->loadWithValues(); + break; + } + case c_attributeGroup: + { + ComplexType * new_CT = new ComplexType(parser, this, c_attributeGroup); + definedTypes.push_back(new_CT); + new_CT->loadWithValues(); + break; + } + case c_include: + { + ImportStatement * new_INCL = new ImportStatement(parser, this, c_include); + definedTypes.push_back(new_INCL); + new_INCL->loadWithValues(); + break; + } + case c_import: + { + ImportStatement * new_IMP = new ImportStatement(parser, this, c_import); + definedTypes.push_back(new_IMP); + new_IMP->loadWithValues(); + break; + } + case c_annotation: + { + Annotation * new_ANN = new Annotation(parser, this, c_annotation); + definedTypes.push_back(new_ANN); + new_ANN->loadWithValues(); + break; + } + case c_idattrib: + { + Mstring type = empty_string; + if (hasDefinedMainType()) { + type = getLastMainType().getName().convertedValue; + } + printWarning(getSchemaname(), type, + Mstring("The mapping of ID attribute is not supported.")); + TTCN3ModuleInventory::getInstance().incrNumWarnings(); + break; + } + case c_unknown: + case c_schema: + break; } actualXsdConstruct = typeOfMainType; } -void TTCN3Module::replaceLastMainType(RootType * t) -{ +void TTCN3Module::replaceLastMainType(RootType * t) { delete(definedTypes.back()); definedTypes.pop_back(); definedTypes.push_back(t); actualXsdConstruct = t->getConstruct(); } -void TTCN3Module::generate_TTCN3_header(FILE * file) -{ +void TTCN3Module::generate_TTCN3_header(FILE * file) { time_t time_current = time(NULL); fprintf(file, "/*******************************************************************************\n" - ); + ); if (t_flag_used) { fprintf(file, "* Copyright Ericsson Telecom AB\n" "*\n" "* XSD to TTCN-3 Translator\n" "*\n" - ); - } - else { + ); + } else { fprintf(file, - "* Copyright Ericsson Telecom AB %-4d\n" + "* Copyright (c) 2000-%-4d Ericsson Telecom AB\n" "*\n" "* XSD to TTCN-3 Translator version: %-40s\n" "*\n", 1900 + (localtime(&time_current))->tm_year, PRODUCT_NUMBER - ); + ); } fprintf(file, "* All rights reserved. This program and the accompanying materials\n" @@ -218,32 +239,30 @@ void TTCN3Module::generate_TTCN3_header(FILE * file) "// Rev:\n" "// Prodnr:\n", modulename.c_str() - ); + ); if (t_flag_used) { fprintf(file, "// Updated:\n" - ); - } - else { + ); + } else { fprintf(file, "// Updated: %s", ctime(&time_current) - ); + ); } fprintf(file, "// Contact: http://ttcn.ericsson.se\n" "//\n" "////////////////////////////////////////////////////////////////////////////////\n" - ); + ); } -void TTCN3Module::generate_TTCN3_fileinfo(FILE * file) -{ +void TTCN3Module::generate_TTCN3_fileinfo(FILE * file) { fprintf(file, "//\t- %s\n" "//\t\t\t/* xml ", schemaname.c_str() - ); + ); if (!xsdVersion.empty()) { fprintf(file, "version = \"%s\" ", xsdVersion.c_str()); @@ -252,27 +271,25 @@ void TTCN3Module::generate_TTCN3_fileinfo(FILE * file) fprintf(file, "encoding = \"%s\" ", xsdEncoding.c_str()); } - switch (xsdStandalone) - { - case 0: - fprintf(file, "standalone = \"no\" "); - break; - case 1: - fprintf(file, "standalone = \"yes\" "); - break; - default: - break; + switch (xsdStandalone) { + case 0: + fprintf(file, "standalone = \"no\" "); + break; + case 1: + fprintf(file, "standalone = \"yes\" "); + break; + default: + break; } fprintf(file, "*/\n" "//\t\t\t/* targetnamespace = \"%s\" */\n", targetNamespace.c_str() - ); + ); } -void TTCN3Module::generate_TTCN3_modulestart(FILE * file) -{ +void TTCN3Module::generate_TTCN3_modulestart(FILE * file) { fprintf(file, "module %s {\n" "\n" @@ -281,55 +298,46 @@ void TTCN3Module::generate_TTCN3_modulestart(FILE * file) "\n" "\n", modulename.c_str() - ); + ); } -void TTCN3Module::generate_TTCN3_import_statements(FILE * file) -{ - for (List<RootType*>::iterator type = definedTypes.begin(); type; type = type->Next) - { - if (type->Data->getConstruct() == c_import) - { +void TTCN3Module::generate_TTCN3_import_statements(FILE * file) { + for (List<RootType*>::iterator type = definedTypes.begin(); type; type = type->Next) { + if (type->Data->getConstruct() == c_import) { type->Data->printToFile(file); } } } -void TTCN3Module::generate_TTCN3_included_types(FILE * file) -{ - for (List<RootType*>::iterator type = definedTypes.begin(); type; type = type->Next) - { - if (type->Data->getConstruct() == c_include) - { +void TTCN3Module::generate_TTCN3_included_types(FILE * file) { + for (List<RootType*>::iterator type = definedTypes.begin(); type; type = type->Next) { + if (type->Data->getConstruct() == c_include) { type->Data->printToFile(file); } } } -void TTCN3Module::generate_TTCN3_types(FILE * file) -{ - for (List<RootType*>::iterator type = definedTypes.begin(); type; type = type->Next) - { - if (type->Data->getConstruct() != c_include && type->Data->getConstruct() != c_import) - { +void TTCN3Module::generate_TTCN3_types(FILE * file) { + for (List<RootType*>::iterator type = definedTypes.begin(); type; type = type->Next) { + if (type->Data->getConstruct() != c_include && type->Data->getConstruct() != c_import) { type->Data->printToFile(file); } } } -void TTCN3Module::generate_with_statement(FILE * file, List<NamespaceType> used_namespaces) -{ - if (e_flag_used) return; +void TTCN3Module::generate_with_statement(FILE * file, List<NamespaceType> used_namespaces) { + if (e_flag_used) { + return; + } fprintf(file, "with {\n" "encode \"XML\";\n" - ); + ); bool xsi = false; - for (List<NamespaceType>::iterator usedNS = used_namespaces.begin(); usedNS; usedNS = usedNS->Next) - { + for (List<NamespaceType>::iterator usedNS = used_namespaces.begin(); usedNS; usedNS = usedNS->Next) { if (usedNS->Data.uri == "http://www.w3.org/2001/XMLSchema") { xsi = true; continue; @@ -337,10 +345,9 @@ void TTCN3Module::generate_with_statement(FILE * file, List<NamespaceType> used_ if (usedNS->Data.uri == "NoTargetNamespace") { continue; } -// XXX this inner loop is either redundant now, or it should be elsewhere. -// It is quite dodgy to modify(!) namespaces when we are already generating code. - for (List<NamespaceType>::iterator usedNS2 = usedNS->Next; usedNS2; usedNS2 = usedNS2->Next) - { + // XXX this inner loop is either redundant now, or it should be elsewhere. + // It is quite dodgy to modify(!) namespaces when we are already generating code. + for (List<NamespaceType>::iterator usedNS2 = usedNS->Next; usedNS2; usedNS2 = usedNS2->Next) { if (usedNS->Data.uri == usedNS2->Data.uri) { if (usedNS2->Data.prefix.empty()) usedNS2->Data.prefix = usedNS->Data.prefix; @@ -351,8 +358,9 @@ void TTCN3Module::generate_with_statement(FILE * file, List<NamespaceType> used_ if (targetNamespace != "NoTargetNamespace") { fprintf(file, "variant \"namespace as \'%s\'", targetNamespace.c_str()); - if (!targetNamespace_connectedPrefix.empty()) + if (!targetNamespace_connectedPrefix.empty()) { fprintf(file, " prefix \'%s\'", targetNamespace_connectedPrefix.c_str()); + } fprintf(file, "\";\n"); } @@ -373,17 +381,25 @@ void TTCN3Module::generate_with_statement(FILE * file, List<NamespaceType> used_ "}\n"); } -void TTCN3Module::TargetNamespace2ModuleName() -{ +void TTCN3Module::TargetNamespace2ModuleName() { Mstring res(targetNamespace); if (z_flag_used) { - if (res.isFound("http://")) - for (int i = 0; i != 7; ++i) + char * found; + found = res.foundAt("http://"); + //check if the http:// is at the beginning of the namespace + if (found == res.c_str()) { //res.c_str() returns a pointer to the first char + for (int i = 0; i != 7; ++i) { res.eraseChar(0); - if (res.isFound("urn:")) - for (int i = 0; i != 4; ++i) + } + } + found = res.foundAt("urn:"); + //check if the urn: is at the beginning of the namespace + if (found == res.c_str()) { //res.c_str() returns a pointer to the first char + for (int i = 0; i != 4; ++i) { res.eraseChar(0); + } + } } // the characters ' '(SPACE), '.'(FULL STOP) and '-'(HYPEN-MINUS) @@ -394,45 +410,81 @@ void TTCN3Module::TargetNamespace2ModuleName() (res[i] == '-') || (res[i] == '/') || (res[i] == '#') || - (res[i] == ':')) - { + (res[i] == ':')) { res[i] = '_'; } } // any character except "A" to "Z", "a" to "z" or "0" to "9" and "_" shall be removed for (size_t i = 0; i != res.size(); ++i) { - if (!isalpha((const unsigned char)res[i]) && !isdigit((const unsigned char)res[i]) && (res[i] != '_')) { + if (!isalpha((const unsigned char) res[i]) && !isdigit((const unsigned char) res[i]) && (res[i] != '_')) { res.eraseChar(i); + i--; } } // a sequence of two of more "_" (LOW LINE) shall be replaced with a single "_" (LOW LINE) for (size_t i = 1; i < res.size(); ++i) { - while (res[i] == '_' && res[i-1] == '_') { - res.eraseChar(i--); + if (res[i] == '_' && res[i - 1] == '_') { + res.eraseChar(i); + i--; + } + } + + if (!res.empty()) { + // "_" (LOW LINE) characters occurring at the beginning of the name shall be removed + if (res[0] == '_') { + res.eraseChar(0); + } + } + if (!res.empty()) { + // "_" (LOW LINE) characters occurring at the end of the name shall be removed + if (res[res.size() - 1] == '_') { + res.eraseChar(res.size() - 1); } } - // "_" (LOW LINE) characters occurring at the beginning of the name shall be removed - if (res[0] == '_') res.eraseChar(0); - // "_" (LOW LINE) characters occurring at the end of the name shall be removed - if (res[res.size()-1] == '_') res.eraseChar(res.size()-1); if (res.empty()) { res = "x"; - } - else if (isdigit((const unsigned char)res[0])) { + } else if (isdigit((const unsigned char) res[0])) { res.insertChar(0, 'x'); } + //Postfix with _i if the targetnamespace is different + bool postfixing = false; + for (List<TTCN3Module*>::iterator mod = TTCN3ModuleInventory::getInstance().getModules().begin(); mod; mod = mod->Next) { + if (mod->Data != this && mod->Data->getModulename() == res && mod->Data->getTargetNamespace() != targetNamespace) { + postfixing = true; + break; + } + } + + if(postfixing){ + bool found; + int counter = 1; + expstring_t tmpname = NULL; + do { + found = false; + Free(tmpname); + tmpname = mprintf("%s_%d", res.c_str(), counter); + for(List<TTCN3Module*>::iterator mod = TTCN3ModuleInventory::getInstance().getModules().begin(); mod; mod = mod->Next){ + if(mod->Data != this && mod->Data->getModulename() == Mstring(tmpname)){ + found = true; + break; + } + } + counter++; + } while (found); + res = Mstring(tmpname); + Free(tmpname); + } + modulename = res; } -void TTCN3Module::dump() const -{ +void TTCN3Module::dump() const { fprintf(stderr, "Module '%s' at %p (from %s)\n", - modulename.c_str(), (const void*)this, schemaname.c_str()); + modulename.c_str(), (const void*) this, schemaname.c_str()); - for (List<RootType*>::iterator type = definedTypes.begin(); type; type = type->Next) - { + for (List<RootType*>::iterator type = definedTypes.begin(); type; type = type->Next) { type->Data->dump(1); } } diff --git a/xsdconvert/TTCN3Module.hh b/xsdconvert/TTCN3Module.hh index b932b933d..cfa0abacb 100644 --- a/xsdconvert/TTCN3Module.hh +++ b/xsdconvert/TTCN3Module.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -10,6 +10,8 @@ #include "XMLParser.hh" #include "GeneralTypes.hh" +#include "GeneralFunctions.hh" +#include "TTCN3ModuleInventory.hh" class TTCN3ModuleInventory; class RootType; @@ -21,8 +23,7 @@ class RootType; * Types defined in the module are stored in a list * */ -class TTCN3Module -{ +class TTCN3Module { /** * this module is connected with this parser object */ @@ -59,6 +60,7 @@ class TTCN3Module List<NamespaceType> declaredNamespaces; FormValue elementFormDefault; FormValue attributeFormDefault; + BlockValue blockDefault; List<const TTCN3Module*> importedModules; // pointers not owned @@ -67,68 +69,137 @@ class TTCN3Module bool moduleNotIntoFile; bool moduleNotIntoNameConversion; - TTCN3Module & operator = (const TTCN3Module &); // not implemented - TTCN3Module (const TTCN3Module &); // not implemented + TTCN3Module & operator=(const TTCN3Module &); // not implemented + TTCN3Module(const TTCN3Module &); // not implemented public: - TTCN3Module (const char * a_filename, XMLParser * a_parser); - ~TTCN3Module (); - - void goodbyeParser () { parser = 0; } - - void loadValuesFromXMLDeclaration (const char *a_version, - const char *a_encoding, int a_standalone); - void loadValuesFromSchemaTag (const Mstring& a_targetNamespace, List<NamespaceType> declaredNamespaces, - FormValue a_elementFormDefault, - FormValue a_attributeFormDefault); - - void generate_TTCN3_header (FILE * file); - void generate_TTCN3_fileinfo (FILE * file); - void generate_TTCN3_modulestart (FILE * file); - void generate_TTCN3_included_types (FILE * file); - void generate_TTCN3_import_statements (FILE * file); - void generate_TTCN3_types (FILE * file); - void generate_with_statement (FILE * file, List<NamespaceType> used_namespaces); - - const Mstring & getSchemaname () const {return schemaname;} - const Mstring & getTargetNamespace () const {return targetNamespace;} - const Mstring & getModulename () const {return modulename;} - void setSchemaname (const Mstring& name) {schemaname = name;} - void setTargetNamespace (const Mstring& tns) {targetNamespace = tns;} - - FormValue getElementFormDefault () const {return elementFormDefault;} - void setElementFormDefault (FormValue value) {elementFormDefault = value;} - FormValue getAttributeFormDefault () const {return attributeFormDefault;} - void setAttributeFormDefault (FormValue value) {attributeFormDefault = value;} - - ConstructType getActualXsdConstruct () const {return actualXsdConstruct;} - void setActualXsdConstruct (ConstructType c) {actualXsdConstruct = c;} - - void addMainType (ConstructType typeOfMainType); - bool hasDefinedMainType () const {return !definedTypes.empty();} - void replaceLastMainType (RootType * t); - const List<RootType*> & getDefinedTypes () const {return definedTypes;} - RootType & getLastMainType () {return *definedTypes.back();} - - bool isnotIntoNameConversion () const {return moduleNotIntoNameConversion;} - void notIntoNameConversion () {moduleNotIntoNameConversion = true;} - bool isnotIntoFile () const {return moduleNotIntoFile;} - void notIntoFile () {moduleNotIntoFile = true;} - - const List<NamespaceType> & getDeclaredNamespaces () const {return declaredNamespaces;} - - void addImportedModule (const TTCN3Module *mod) {importedModules.push_back(mod);} - const List<const TTCN3Module*> & getImportedModules () const {return importedModules;} + TTCN3Module(const char * a_filename, XMLParser * a_parser); + ~TTCN3Module(); + + void goodbyeParser() { + parser = 0; + } + + void loadValuesFromXMLDeclaration(const char *a_version, + const char *a_encoding, int a_standalone); + void loadValuesFromSchemaTag(const Mstring& a_targetNamespace, List<NamespaceType> declaredNamespaces, + FormValue a_elementFormDefault, + FormValue a_attributeFormDefault, + BlockValue a_blockDefault); + + void generate_TTCN3_header(FILE * file); + void generate_TTCN3_fileinfo(FILE * file); + void generate_TTCN3_modulestart(FILE * file); + void generate_TTCN3_included_types(FILE * file); + void generate_TTCN3_import_statements(FILE * file); + void generate_TTCN3_types(FILE * file); + void generate_with_statement(FILE * file, List<NamespaceType> used_namespaces); + + const Mstring & getSchemaname() const { + return schemaname; + } + + const Mstring & getTargetNamespace() const { + return targetNamespace; + } + + const Mstring & getTargetNamespaceConnector() const { + return targetNamespace_connectedPrefix; + } + + const Mstring & getModulename() const { + return modulename; + } + + void setSchemaname(const Mstring& name) { + schemaname = name; + } + + void setTargetNamespace(const Mstring& tns) { + targetNamespace = tns; + } + + FormValue getElementFormDefault() const { + return elementFormDefault; + } + + void setElementFormDefault(FormValue value) { + elementFormDefault = value; + } + + FormValue getAttributeFormDefault() const { + return attributeFormDefault; + } + + void setAttributeFormDefault(FormValue value) { + attributeFormDefault = value; + } + + BlockValue getBlockDefault() const { + return blockDefault; + } + + ConstructType getActualXsdConstruct() const { + return actualXsdConstruct; + } + + void setActualXsdConstruct(ConstructType c) { + actualXsdConstruct = c; + } + + void addAnnotation(); + void addMainType(const ConstructType typeOfMainType); + void addMainType(RootType * type){ definedTypes.push_back(type); } + + bool hasDefinedMainType() const { + return !definedTypes.empty(); + } + void replaceLastMainType(RootType * t); + + const List<RootType*> & getDefinedTypes() const { + return definedTypes; + } + + RootType & getLastMainType() { + return *definedTypes.back(); + } + + bool isnotIntoNameConversion() const { + return moduleNotIntoNameConversion; + } + + void notIntoNameConversion() { + moduleNotIntoNameConversion = true; + } + + bool isnotIntoFile() const { + return moduleNotIntoFile; + } + + void notIntoFile() { + moduleNotIntoFile = true; + } + + const List<NamespaceType> & getDeclaredNamespaces() const { + return declaredNamespaces; + } + + void addImportedModule(const TTCN3Module *mod) { + importedModules.push_back(mod); + } + + const List<const TTCN3Module*> & getImportedModules() const { + return importedModules; + } /// Compute the TTCN-3 module name - void TargetNamespace2ModuleName (); + void TargetNamespace2ModuleName(); - friend bool compareModules (TTCN3Module * lhs, TTCN3Module * rhs); + friend bool compareModules(TTCN3Module * lhs, TTCN3Module * rhs); - void dump () const; + void dump() const; }; -inline bool compareModules (TTCN3Module * lhs, TTCN3Module * rhs) -{ +inline bool compareModules(TTCN3Module * lhs, TTCN3Module * rhs) { return lhs->targetNamespace < rhs->targetNamespace; } diff --git a/xsdconvert/TTCN3ModuleInventory.cc b/xsdconvert/TTCN3ModuleInventory.cc index 4bb0b2a33..b4c63c91b 100644 --- a/xsdconvert/TTCN3ModuleInventory.cc +++ b/xsdconvert/TTCN3ModuleInventory.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -13,7 +13,6 @@ #include "TTCN3Module.hh" #include "SimpleType.hh" #include "ComplexType.hh" -#include "FieldType.hh" extern bool h_flag_used; extern bool q_flag_used; @@ -23,56 +22,45 @@ extern bool q_flag_used; unsigned int TTCN3ModuleInventory::num_errors = 0; unsigned int TTCN3ModuleInventory::num_warnings = 0; - - TTCN3ModuleInventory::TTCN3ModuleInventory() : definedModules() , writtenImports() -, typenames() -{} +, typenames() { +} -TTCN3ModuleInventory::~TTCN3ModuleInventory() -{ +TTCN3ModuleInventory::~TTCN3ModuleInventory() { for (List<TTCN3Module*>::iterator module = definedModules.begin(); module; module = module->Next) { delete(module->Data); } } -TTCN3ModuleInventory& TTCN3ModuleInventory::getInstance() -{ +TTCN3ModuleInventory& TTCN3ModuleInventory::getInstance() { // Singleton, see Meyers, More Effective C++, Item 26 (page 131) static TTCN3ModuleInventory instance; return instance; } -TTCN3Module * TTCN3ModuleInventory::addModule(const char * xsd_filename, XMLParser * a_parser) -{ +TTCN3Module * TTCN3ModuleInventory::addModule(const char * xsd_filename, XMLParser * a_parser) { TTCN3Module * module = new TTCN3Module(xsd_filename, a_parser); definedModules.push_back(module); return definedModules.back(); } -void TTCN3ModuleInventory::modulenameConversion() -{ +void TTCN3ModuleInventory::modulenameConversion() { definedModules.sort(compareModules); - for (List<TTCN3Module*>::iterator module = definedModules.begin(); module; module = module->Next) - { + for (List<TTCN3Module*>::iterator module = definedModules.begin(); module; module = module->Next) { module->Data->TargetNamespace2ModuleName(); } } -void TTCN3ModuleInventory::referenceResolving() -{ +void TTCN3ModuleInventory::referenceResolving() { /** * Reference resolving for include and import statements */ - for (List<TTCN3Module*>::iterator module = definedModules.begin(); module; module = module->Next) - { - for (List<RootType*>::iterator type = module->Data->getDefinedTypes().begin(); type; type = type->Next) - { - if (type->Data->getName().convertedValue == "import" || type->Data->getName().convertedValue == "include") - { + for (List<TTCN3Module*>::iterator module = definedModules.begin(); module; module = module->Next) { + for (List<RootType*>::iterator type = module->Data->getDefinedTypes().begin(); type; type = type->Next) { + if (type->Data->getName().convertedValue == "import" || type->Data->getName().convertedValue == "include") { type->Data->referenceResolving(); } } @@ -82,66 +70,40 @@ void TTCN3ModuleInventory::referenceResolving() * Reference resolving for all others */ bool there_is_unresolved_reference_somewhere = false; - do - { + do { there_is_unresolved_reference_somewhere = false; - for (List<TTCN3Module*>::iterator module = definedModules.begin(); module; module = module->Next) - { - for (List<RootType*>::iterator type = module->Data->getDefinedTypes().begin(); type; type = type->Next) - { - if (type->Data->getName().convertedValue != "import" && type->Data->getName().convertedValue != "include") - { + for (List<TTCN3Module*>::iterator module = definedModules.begin(); module; module = module->Next) { + for (List<RootType*>::iterator type = module->Data->getDefinedTypes().begin(); type; type = type->Next) { + if (type->Data->getName().convertedValue != "import" && type->Data->getName().convertedValue != "include") { type->Data->referenceResolving(); - if (type->Data->hasUnresolvedReference()) - { + if (type->Data->hasUnresolvedReference()) { there_is_unresolved_reference_somewhere = true; } } } } - } while(there_is_unresolved_reference_somewhere); + } while (there_is_unresolved_reference_somewhere); } -void TTCN3ModuleInventory::finalModification() -{ - for (List<TTCN3Module*>::iterator module = definedModules.begin(); module; module = module->Next) - { - for (List<RootType*>::iterator type = module->Data->getDefinedTypes().begin(); type; type = type->Next) - { +void TTCN3ModuleInventory::finalModification() { + for (List<TTCN3Module*>::iterator module = definedModules.begin(); module; module = module->Next) { + for (List<RootType*>::iterator type = module->Data->getDefinedTypes().begin(); type; type = type->Next) { type->Data->finalModification(); } } } -void TTCN3ModuleInventory::nameConversion() -{ +void TTCN3ModuleInventory::nameConversion() { /** * Sort of types and fields */ - for (List<TTCN3Module*>::iterator module = definedModules.begin(); module; module = module->Next) - { - for (List<RootType*>::iterator type = module->Data->getDefinedTypes().begin(); type; type = type->Next) - { - switch (type->Data->getConstruct()) - { - case c_complexType: - case c_attributeGroup: - case c_group: - ((ComplexType*)type->Data)->everything_into_fields_final(); - break; - default: - break; - } - } - } definedModules.sort(compareModules); /******************************************************** * Conversion of the name of types * ******************************************************/ - for (List<TTCN3Module*>::iterator module = definedModules.begin(); module; module = module->Next) - { + for (List<TTCN3Module*>::iterator module = definedModules.begin(); module; module = module->Next) { if (module->Data->isnotIntoNameConversion()) continue; List<RootType*> definedElements_inABC; @@ -151,34 +113,31 @@ void TTCN3ModuleInventory::nameConversion() List<RootType*> definedAttributeGroups_inABC; List<RootType*> definedGroups_inABC; - for (List<TTCN3Module*>::iterator module2 = module; module2; module2 = module2->Next) - { + for (List<TTCN3Module*>::iterator module2 = module; module2; module2 = module2->Next) { if (module2->Data->getModulename() != module->Data->getModulename()) continue; - for (List<RootType*>::iterator type = module2->Data->getDefinedTypes().begin(); type; type = type->Next) - { - switch (type->Data->getConstruct()) - { - case c_simpleType: - definedSimpleTypes_inABC.push_back(type->Data); - break; - case c_element: - definedElements_inABC.push_back(type->Data); - break; - case c_attribute: - definedAttributes_inABC.push_back(type->Data); - break; - case c_complexType: - definedComplexTypes_inABC.push_back(type->Data); - break; - case c_group: - definedGroups_inABC.push_back(type->Data); - break; - case c_attributeGroup: - definedAttributeGroups_inABC.push_back(type->Data); - break; - default: - break; + for (List<RootType*>::iterator type = module2->Data->getDefinedTypes().begin(); type; type = type->Next) { + switch (type->Data->getConstruct()) { + case c_simpleType: + definedSimpleTypes_inABC.push_back(type->Data); + break; + case c_element: + definedElements_inABC.push_back(type->Data); + break; + case c_attribute: + definedAttributes_inABC.push_back(type->Data); + break; + case c_complexType: + definedComplexTypes_inABC.push_back(type->Data); + break; + case c_group: + definedGroups_inABC.push_back(type->Data); + break; + case c_attributeGroup: + definedAttributeGroups_inABC.push_back(type->Data); + break; + default: + break; } } module2->Data->notIntoNameConversion(); @@ -191,58 +150,54 @@ void TTCN3ModuleInventory::nameConversion() definedAttributeGroups_inABC.sort(compareTypes); definedGroups_inABC.sort(compareTypes); - for (List<RootType*>::iterator type = definedElements_inABC.begin(); type; type = type->Next) - { + typenames.push_back(QualifiedName(module->Data->getTargetNamespace(), module->Data->getModulename())); + for(List<const TTCN3Module*>::iterator mod = module->Data->getImportedModules().begin(); mod; mod = mod->Next){ + typenames.push_back(QualifiedName(module->Data->getTargetNamespace(), mod->Data->getModulename())); + } + + for (List<RootType*>::iterator type = definedElements_inABC.begin(); type; type = type->Next) { type->Data->nameConversion(nameMode, module->Data->getDeclaredNamespaces()); } - for (List<RootType*>::iterator type = definedAttributes_inABC.begin(); type; type = type->Next) - { + for (List<RootType*>::iterator type = definedAttributes_inABC.begin(); type; type = type->Next) { type->Data->nameConversion(nameMode, module->Data->getDeclaredNamespaces()); } - for (List<RootType*>::iterator type = definedSimpleTypes_inABC.begin(); type; type = type->Next) - { + for (List<RootType*>::iterator type = definedSimpleTypes_inABC.begin(); type; type = type->Next) { type->Data->nameConversion(nameMode, module->Data->getDeclaredNamespaces()); } - for (List<RootType*>::iterator type = definedComplexTypes_inABC.begin(); type; type = type->Next) - { + for (List<RootType*>::iterator type = definedComplexTypes_inABC.begin(); type; type = type->Next) { type->Data->nameConversion(nameMode, module->Data->getDeclaredNamespaces()); } - for (List<RootType*>::iterator type = definedAttributeGroups_inABC.begin(); type; type = type->Next) - { + for (List<RootType*>::iterator type = definedAttributeGroups_inABC.begin(); type; type = type->Next) { type->Data->nameConversion(nameMode, module->Data->getDeclaredNamespaces()); } - for (List<RootType*>::iterator type = definedGroups_inABC.begin(); type; type = type->Next) - { + for (List<RootType*>::iterator type = definedGroups_inABC.begin(); type; type = type->Next) { type->Data->nameConversion(nameMode, module->Data->getDeclaredNamespaces()); } + typenames.clear(); } /******************************************************** * Conversion of the type of types * ******************************************************/ - for (List<TTCN3Module*>::iterator module = definedModules.begin(); module; module = module->Next) - { - for (List<RootType*>::iterator type = module->Data->getDefinedTypes().begin(); type; type = type->Next) - { + for (List<TTCN3Module*>::iterator module = definedModules.begin(); module; module = module->Next) { + for (List<RootType*>::iterator type = module->Data->getDefinedTypes().begin(); type; type = type->Next) { type->Data->nameConversion(typeMode, module->Data->getDeclaredNamespaces()); } } /******************************************************** * Conversion of the names and the types of the fields * ******************************************************/ - for (List<TTCN3Module*>::iterator module = definedModules.begin(); module; module = module->Next) - { - for (List<RootType*>::iterator type = module->Data->getDefinedTypes().begin(); type; type = type->Next) - { + for (List<TTCN3Module*>::iterator module = definedModules.begin(); module; module = module->Next) { + for (List<RootType*>::iterator type = module->Data->getDefinedTypes().begin(); type; type = type->Next) { type->Data->nameConversion(fieldMode, module->Data->getDeclaredNamespaces()); } } } -void TTCN3ModuleInventory::moduleGeneration() -{ - for (List<TTCN3Module*>::iterator module = definedModules.begin(); module; module = module->Next) - { - if (module->Data->isnotIntoFile()) continue; +void TTCN3ModuleInventory::moduleGeneration() { + for (List<TTCN3Module*>::iterator module = definedModules.begin(); module; module = module->Next) { + if (module->Data->isnotIntoFile()) { + continue; + } List<NamespaceType> used_namespaces; NamespaceType targetns; @@ -251,12 +206,12 @@ void TTCN3ModuleInventory::moduleGeneration() // Now search for other modules with the same module name. // They must have had the same targetNamespace. - for (List<TTCN3Module*>::iterator module2 = module; module2; module2 = module2->Next) - { - if (module2->Data->getModulename() != module->Data->getModulename()) continue; + for (List<TTCN3Module*>::iterator module2 = module; module2; module2 = module2->Next) { + if (module2->Data->getModulename() != module->Data->getModulename()) { + continue; + } - for (List<NamespaceType>::iterator declNS = module2->Data->getDeclaredNamespaces().begin(); declNS; declNS = declNS->Next) - { + for (List<NamespaceType>::iterator declNS = module2->Data->getDeclaredNamespaces().begin(); declNS; declNS = declNS->Next) { used_namespaces.push_back(declNS->Data); } module2->Data->notIntoFile(); // first module gets the TTCN-3 file @@ -280,10 +235,8 @@ void TTCN3ModuleInventory::moduleGeneration() fprintf(file, "//\tGenerated from file(s):\n"); - for (List<TTCN3Module*>::iterator module2 = module; module2; module2 = module2->Next) - { - if (module2->Data->getModulename() == module->Data->getModulename()) - { + for (List<TTCN3Module*>::iterator module2 = module; module2; module2 = module2->Next) { + if (module2->Data->getModulename() == module->Data->getModulename()) { module2->Data->generate_TTCN3_fileinfo(file); } } @@ -303,20 +256,16 @@ void TTCN3ModuleInventory::moduleGeneration() module->Data->generate_TTCN3_modulestart(file); - for (List<TTCN3Module*>::iterator module2 = module; module2; module2 = module2->Next) - { - if (module2->Data->getModulename() == module->Data->getModulename()) - { + for (List<TTCN3Module*>::iterator module2 = module; module2; module2 = module2->Next) { + if (module2->Data->getModulename() == module->Data->getModulename()) { module2->Data->generate_TTCN3_import_statements(file); } } writtenImports.clear(); - for (List<TTCN3Module*>::iterator module2 = module; module2; module2 = module2->Next) - { - if (module2->Data->getModulename() == module->Data->getModulename()) - { + for (List<TTCN3Module*>::iterator module2 = module; module2; module2 = module2->Next) { + if (module2->Data->getModulename() == module->Data->getModulename()) { module2->Data->generate_TTCN3_included_types(file); module2->Data->generate_TTCN3_types(file); } @@ -332,8 +281,30 @@ void TTCN3ModuleInventory::moduleGeneration() } } -RootType * TTCN3ModuleInventory::lookup(const SimpleType * reference, wanted w) const -{ +RootType * TTCN3ModuleInventory::lookup(const RootType* ref, const Mstring& reference, wanted w) const { + Mstring uri = reference.getPrefix(':'); + const Mstring& name = reference.getValueWithoutPrefix(':'); + if(uri.empty()){ + for(List<NamespaceType>::iterator qname = ref->getModule()->getDeclaredNamespaces().begin(); qname; qname = qname->Next){ + if(qname->Data.prefix.empty()){ + uri = qname->Data.uri; + break; + } + } + }else { + uri = getNameSpaceByPrefix(ref, uri); + } + return lookup(name, uri, NULL, w); +} + +RootType * TTCN3ModuleInventory::lookup(const SimpleType * reference, wanted w) const { + const Mstring& uri = reference->getReference().get_uri(); + const Mstring& name = reference->getReference().get_val(); + + return lookup(name, uri, reference, w); +} + +RootType * TTCN3ModuleInventory::lookup(const ComplexType * reference, wanted w) const { const Mstring& uri = reference->getReference().get_uri(); const Mstring& name = reference->getReference().get_val(); @@ -341,23 +312,20 @@ RootType * TTCN3ModuleInventory::lookup(const SimpleType * reference, wanted w) } RootType * TTCN3ModuleInventory::lookup(const Mstring& name, const Mstring& nsuri, - const RootType *reference, wanted w) const -{ + const RootType *reference, wanted w) const { return ::lookup(definedModules, name, nsuri, reference, w); } -void TTCN3ModuleInventory::dump() const -{ - fprintf(stderr, "Dumping %lu modules.\n", (unsigned long)definedModules.size()); - for (List<TTCN3Module*>::iterator module = definedModules.begin(); module; module = module->Next) - { +void TTCN3ModuleInventory::dump() const { + fprintf(stderr, "Dumping %lu modules.\n", (unsigned long) definedModules.size()); + for (List<TTCN3Module*>::iterator module = definedModules.begin(); module; module = module->Next) { module->Data->dump(); } - fprintf(stderr, "Dumping %lu types\n", (unsigned long)typenames.size()); + fprintf(stderr, "Dumping %lu types\n", (unsigned long) typenames.size()); Item<QualifiedName> *o = typenames.begin(); - for( ; o != NULL; o = o->Next) { + for (; o != NULL; o = o->Next) { fprintf(stderr, "{%s}%s,\n", o->Data.nsuri.c_str(), o->Data.name.c_str()); } diff --git a/xsdconvert/TTCN3ModuleInventory.hh b/xsdconvert/TTCN3ModuleInventory.hh index e4c2aa1eb..26a7ff196 100644 --- a/xsdconvert/TTCN3ModuleInventory.hh +++ b/xsdconvert/TTCN3ModuleInventory.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -14,6 +14,7 @@ class TTCN3Module; class RootType; class SimpleType; +class ComplexType; /** * Type that contains generated TTCN-3 modules in a list @@ -26,8 +27,7 @@ class SimpleType; * - and starting generation of TTCN-3 modules * */ -class TTCN3ModuleInventory -{ +class TTCN3ModuleInventory { /** * contains all defined TTCN-3 modules */ @@ -52,10 +52,10 @@ class TTCN3ModuleInventory static unsigned int num_errors; static unsigned int num_warnings; - TTCN3ModuleInventory (const TTCN3ModuleInventory &); // not implemented - TTCN3ModuleInventory & operator = (const TTCN3ModuleInventory &); // not implemented - TTCN3ModuleInventory (); // private due to singleton - ~TTCN3ModuleInventory (); // private due to singleton + TTCN3ModuleInventory(const TTCN3ModuleInventory &); // not implemented + TTCN3ModuleInventory & operator=(const TTCN3ModuleInventory &); // not implemented + TTCN3ModuleInventory(); // private due to singleton + ~TTCN3ModuleInventory(); // private due to singleton public: static TTCN3ModuleInventory& getInstance(); // singleton access @@ -68,36 +68,56 @@ public: /** * Steps after all xsd files are parsed */ - void modulenameConversion (); - void referenceResolving (); - void nameConversion (); - void finalModification (); + void modulenameConversion(); + void referenceResolving(); + void nameConversion(); + void finalModification(); /** * TTCN-3 module generating method * Generate TTCN-3 files */ - void moduleGeneration (); + void moduleGeneration(); - List<TTCN3Module*> & getModules () {return definedModules;} - List<TTCN3Module*> & getWrittenImports () {return writtenImports;} + List<TTCN3Module*> & getModules() { + return definedModules; + } - List<QualifiedName> & getTypenames() { return typenames; } + List<TTCN3Module*> & getWrittenImports() { + return writtenImports; + } + + List<QualifiedName> & getTypenames() { + return typenames; + } /** * Searching methods * Look for a simpleType (or element or attribute) or a complexType (or attributeGroup or group) */ - RootType * lookup (const SimpleType * reference, wanted w) const; - RootType * lookup (const Mstring& name, const Mstring& nsuri, - const RootType *reference, wanted w) const; + RootType * lookup(const RootType * ref, const Mstring& reference, wanted w) const; + RootType * lookup(const SimpleType * reference, wanted w) const; + RootType * lookup(const ComplexType * reference, wanted w) const; + RootType * lookup(const Mstring& name, const Mstring& nsuri, + const RootType *reference, wanted w) const; + + static unsigned int getNumErrors() { + return num_errors; + } + + static unsigned int getNumWarnings() { + return num_warnings; + } + + static void incrNumErrors() { + ++num_errors; + } - static unsigned int getNumErrors () {return num_errors;} - static unsigned int getNumWarnings () {return num_warnings;} - static void incrNumErrors () {++num_errors;} - static void incrNumWarnings () {++num_warnings;} + static void incrNumWarnings() { + ++num_warnings; + } - void dump () const; + void dump() const; }; #endif /* TTCN3MODULEINVENTORY_HH_ */ diff --git a/xsdconvert/XMLParser.cc b/xsdconvert/XMLParser.cc index 9a22d1de9..9b446a39e 100644 --- a/xsdconvert/XMLParser.cc +++ b/xsdconvert/XMLParser.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -34,28 +34,26 @@ bool XMLParser::suspended = false; unsigned int XMLParser::num_errors = 0; unsigned int XMLParser::num_warnings = 0; - - XMLParser::XMLParser(const char * a_filename) -: module(NULL) // get value with 'connectWithModule()' method - , filename(a_filename) // includes the path of the file - , parser(NULL) - , context(NULL) - , parserCheckingXML(NULL) - , contextCheckingXML(NULL) - , contextCheckingXSD(NULL) - , actualDepth(0) - , actualTagName(n_NOTSET) - , actualTagAttributes(this) - , parentTagNames() -{ +: module(NULL) // get value with 'connectWithModule()' method +, filename(a_filename) // includes the path of the file +, parser(NULL) +, context(NULL) +, parserCheckingXML(NULL) +, contextCheckingXML(NULL) +, contextCheckingXSD(NULL) +, actualDepth(0) +, actualTagName(n_NOTSET) +, actualTagAttributes(this) +, parentTagNames() +, inside_annotation(){ xmlSetExternalEntityLoader(xmlNoNetExternalEntityLoader); - parserCheckingXML = (xmlSAXHandler *)malloc(sizeof(xmlSAXHandler)); - memset(parserCheckingXML, 0, sizeof(xmlSAXHandler)); - parserCheckingXML->initialized = XML_SAX2_MAGIC; - parserCheckingXML->warning = warningHandler; - parserCheckingXML->error = errorHandler; + parserCheckingXML = (xmlSAXHandler *) malloc(sizeof (xmlSAXHandler)); + memset(parserCheckingXML, 0, sizeof (xmlSAXHandler)); + parserCheckingXML->initialized = XML_SAX2_MAGIC; + parserCheckingXML->warning = warningHandler; + parserCheckingXML->error = errorHandler; contextCheckingXML = xmlCreateFileParserCtxt(a_filename); if (!contextCheckingXML) { fprintf(stderr, @@ -66,8 +64,7 @@ XMLParser::XMLParser(const char * a_filename) } contextCheckingXML->sax = parserCheckingXML; - if (!x_flag_used) - { + if (!x_flag_used) { contextCheckingXSD = xmlSchemaNewParserCtxt(a_filename); if (!contextCheckingXSD) { fprintf(stderr, @@ -79,13 +76,13 @@ XMLParser::XMLParser(const char * a_filename) xmlSchemaSetParserErrors(contextCheckingXSD, errorHandler, warningHandler, 0); } - parser = (xmlSAXHandler *)malloc(sizeof(xmlSAXHandler)); - memset(parser, 0, sizeof(xmlSAXHandler)); + parser = (xmlSAXHandler *) malloc(sizeof (xmlSAXHandler)); + memset(parser, 0, sizeof (xmlSAXHandler)); parser->initialized = XML_SAX2_MAGIC; - parser->startElementNs = (startElementNsSAX2Func)wrapper_to_call_startelement_h; - parser->endElementNs = (endElementNsSAX2Func)wrapper_to_call_endelement_h; - parser->characters = (charactersSAXFunc)wrapper_to_call_characterdata_h; - parser->comment = (commentSAXFunc)wrapper_to_call_comment_h; + parser->startElementNs = (startElementNsSAX2Func) wrapper_to_call_startelement_h; + parser->endElementNs = (endElementNsSAX2Func) wrapper_to_call_endelement_h; + parser->characters = (charactersSAXFunc) wrapper_to_call_characterdata_h; + parser->comment = (commentSAXFunc) wrapper_to_call_comment_h; context = xmlCreateFileParserCtxt(filename.c_str()); if (!context) { @@ -99,24 +96,28 @@ XMLParser::XMLParser(const char * a_filename) context->userData = this; } -XMLParser::~XMLParser() -{ +XMLParser::~XMLParser() { context->sax = NULL; + xmlFreeDoc(context->myDoc); contextCheckingXML->sax = NULL; free(parser); free(parserCheckingXML); - if (context) xmlFreeParserCtxt(context); - if (contextCheckingXML) xmlFreeParserCtxt(contextCheckingXML); - if (contextCheckingXSD) xmlSchemaFreeParserCtxt(contextCheckingXSD); + if (context) { + xmlFreeParserCtxt(context); + } + if (contextCheckingXML) { + xmlFreeParserCtxt(contextCheckingXML); + } + if (contextCheckingXSD) { + xmlSchemaFreeParserCtxt(contextCheckingXSD); + } } -void XMLParser::checkSyntax() -{ +void XMLParser::checkSyntax() { xmlParseDocument(contextCheckingXML); } -void XMLParser::validate() -{ +void XMLParser::validate() { if (!x_flag_used) { xmlSchemaPtr schema = xmlSchemaParse(contextCheckingXSD); if (schema) { @@ -132,51 +133,48 @@ void XMLParser::validate() xmlFreeDoc(doc); } xmlSchemaFreeValidCtxt(validator); + xmlFreeParserCtxt(newcontext); } xmlSchemaFree(schema); } } } -void XMLParser::startConversion(TTCN3Module * a_module) -{ +void XMLParser::startConversion(TTCN3Module * a_module) { module = a_module; xmlParseDocument(context); } void XMLParser::wrapper_to_call_startelement_h(XMLParser *self, const xmlChar * localname, const xmlChar *, const xmlChar *, - int nb_namespaces, const xmlChar ** namespaces, int nb_attributes, int, const xmlChar ** attributes) -{ + int nb_namespaces, const xmlChar ** namespaces, const int nb_attributes, int, const xmlChar ** attributes) { self->startelementHandler(localname, nb_namespaces, namespaces, nb_attributes, attributes); } -void XMLParser::wrapper_to_call_endelement_h(XMLParser *self, const xmlChar * localname, const xmlChar *, const xmlChar *) -{ +void XMLParser::wrapper_to_call_endelement_h(XMLParser *self, const xmlChar * localname, const xmlChar *, const xmlChar *) { self->endelementHandler(localname); } -void XMLParser::wrapper_to_call_comment_h(XMLParser *self, const xmlChar * value) -{ +void XMLParser::wrapper_to_call_comment_h(XMLParser *self, const xmlChar * value) { self->commentHandler(value); } -void XMLParser::wrapper_to_call_characterdata_h(XMLParser *self, const xmlChar * ch, int len) -{ +void XMLParser::wrapper_to_call_characterdata_h(XMLParser *self, const xmlChar * ch, int len) { self->characterdataHandler(ch, len); } -void XMLParser::warningHandler(void *, const char *, ...) -{ - if (w_flag_used) return; +void XMLParser::warningHandler(void *, const char *, ...) { + if (w_flag_used) { + return; + } xmlErrorPtr error = xmlGetLastError(); - if (error->file == NULL) + if (error->file == NULL) { fprintf(stderr, "WARNING:\n" "%s", error->message); - else + } else { fprintf(stderr, "WARNING:\n" "%s (in line %d): " @@ -184,25 +182,29 @@ void XMLParser::warningHandler(void *, const char *, ...) error->file, error->line, error->message); - ++num_warnings; + ++num_warnings; + } } -void XMLParser::errorHandler(void *, const char *, ...) -{ +void XMLParser::errorHandler(void *, const char *, ...) { xmlErrorPtr error = xmlGetLastError(); - if (error->code == XML_SCHEMAP_SRC_RESOLVE) return; - if (error->code == XML_SCHEMAP_COS_ALL_LIMITED) return; + if (error->code == XML_SCHEMAP_SRC_RESOLVE) { + return; + } + if (error->code == XML_SCHEMAP_COS_ALL_LIMITED) { + return; + } switch (error->level) { - case XML_ERR_ERROR: - fputs("ERROR:\n", stderr); - break; - case XML_ERR_FATAL: - fputs("FATAL ERROR:\n", stderr); - break; - default: // warning or no error, can't happen (famous last words) - break; + case XML_ERR_ERROR: + fputs("ERROR:\n", stderr); + break; + case XML_ERR_FATAL: + fputs("FATAL ERROR:\n", stderr); + break; + default: // warning or no error, can't happen (famous last words) + break; } if (error->file != NULL) { @@ -214,124 +216,172 @@ void XMLParser::errorHandler(void *, const char *, ...) } void XMLParser::startelementHandler(const xmlChar * localname, - int nb_namespaces, const xmlChar ** namespaces, int nb_attributes, const xmlChar ** attributes) -{ - fillUpActualTagName((const char *)localname, startElement); - fillUpActualTagAttributes((const char **)attributes, nb_attributes); - - switch (module->getActualXsdConstruct()) - { - case c_unknown: { - switch (actualTagName) - { - case n_schema: { - module->setActualXsdConstruct(c_schema); - - module->loadValuesFromXMLDeclaration((const char *)context->version, - (const char *)context->encoding, context->standalone); - - List<NamespaceType> declaredNamespaces; - for(int i = 0; i < nb_namespaces * 2; i = i + 2) - { - NamespaceType tmp_ns_pair; - - if (namespaces[i] != NULL) - tmp_ns_pair.prefix = (const char*)namespaces[i]; - // else leave it as empty string + int nb_namespaces, const xmlChar ** namespaces, int nb_attributes, const xmlChar ** attributes) { + fillUpActualTagName((const char *) localname, startElement); + fillUpActualTagAttributes((const char **) attributes, nb_attributes); - if (namespaces[i+1] != NULL) - tmp_ns_pair.uri = (const char*)namespaces[i+1]; - // else leave it as empty string - - declaredNamespaces.push_back(tmp_ns_pair); + switch (module->getActualXsdConstruct()) { + case c_unknown: + { + switch (actualTagName) { + case n_schema: + { + module->setActualXsdConstruct(c_schema); + + module->loadValuesFromXMLDeclaration((const char *) context->version, + (const char *) context->encoding, context->standalone); + + List<NamespaceType> declaredNamespaces; + for (int i = 0; i < nb_namespaces * 2; i = i + 2) { + NamespaceType tmp_ns_pair; + + if (namespaces[i] != NULL) { + tmp_ns_pair.prefix = (const char*) namespaces[i]; + } + // else leave it as empty string + + if (namespaces[i + 1] != NULL) { + tmp_ns_pair.uri = (const char*) namespaces[i + 1]; + } + // else leave it as empty string + + declaredNamespaces.push_back(tmp_ns_pair); + } + + module->loadValuesFromSchemaTag(actualTagAttributes.targetNamespace, declaredNamespaces, + actualTagAttributes.elementFormDefault, actualTagAttributes.attributeFormDefault, + actualTagAttributes.blockDefault); + break; + } + default: + break; } - - module->loadValuesFromSchemaTag(actualTagAttributes.targetNamespace, declaredNamespaces, - actualTagAttributes.elementFormDefault, actualTagAttributes.attributeFormDefault); - break; } - default: break; } - break; } - case c_schema: { - switch (actualTagName) + case c_schema: { - case n_simpleType: - module->addMainType(c_simpleType); - break; - case n_element: - module->addMainType(c_element); - break; - case n_attribute: - module->addMainType(c_attribute); - break; - case n_complexType: - module->addMainType(c_complexType); - break; - case n_group: - module->addMainType(c_group); - break; - case n_attributeGroup: - module->addMainType(c_attributeGroup); - break; - case n_include: - module->addMainType(c_include); - break; - case n_import: - module->addMainType(c_import); - break; - case n_annotation: - module->addMainType(c_annotation); + switch (actualTagName) { + case n_simpleType: + module->addMainType(c_simpleType); + break; + case n_element: + module->addMainType(c_element); + break; + case n_attribute: + module->addMainType(c_attribute); + break; + case n_complexType: + module->addMainType(c_complexType); + break; + case n_group: + module->addMainType(c_group); + break; + case n_attributeGroup: + module->addMainType(c_attributeGroup); + break; + case n_include: + module->addMainType(c_include); + break; + case n_import: + module->addMainType(c_import); + break; + default: + break; + } break; + } + default: + if (module->hasDefinedMainType()) { + if(actualTagName == n_annotation || + actualTagName == n_appinfo || + actualTagName == n_documentation){ + inside_annotation.push_back(actualTagName); + module->getLastMainType().loadWithValues(); + }else if(inside_annotation.empty()){ + module->getLastMainType().loadWithValues(); + } + } break; - } - break; } + } - default: - if (module->hasDefinedMainType()) module->getLastMainType().loadWithValues(); - break; + //Standard section 7.1.1 + if (!actualTagAttributes.id.empty()) { + ConstructType type = module->getActualXsdConstruct(); + module->addMainType(c_idattrib); + module->setActualXsdConstruct(type); } ++actualDepth; parentTagNames.push_back(actualTagName); } -void XMLParser::endelementHandler(const xmlChar * localname) -{ - fillUpActualTagName((const char *)localname, endElement); +void XMLParser::endelementHandler(const xmlChar * localname) { + fillUpActualTagName((const char *) localname, endElement); + + bool modify = false; + TagName tag = parentTagNames.back(); + //After some tags there is no need to call modifyValues + if (tag == n_element || + tag == n_all || + tag == n_choice || + tag == n_group || + tag == n_attributeGroup || + tag == n_extension || + tag == n_simpleType || + tag == n_simpleContent || + tag == n_sequence || + tag == n_complexType || + tag == n_complexContent || + tag == n_attribute || + tag == n_anyAttribute + ) { + modify = true; + } + + if(tag == n_annotation || + tag == n_appinfo || + tag == n_documentation){ + inside_annotation.pop_back(); + } - parentTagNames.pop_back(); --actualDepth; - if (actualDepth == 0) module->setActualXsdConstruct(c_schema); - if (actualDepth == 1) module->setActualXsdConstruct(c_schema); + if (actualDepth == 0 || actualDepth == 1) { + module->setActualXsdConstruct(c_schema); + } - if (module->hasDefinedMainType()) module->getLastMainType().modifyValues(); + if (module->hasDefinedMainType() && modify) { + module->getLastMainType().modifyValues(); + } + parentTagNames.pop_back(); } - -void XMLParser::commentHandler(const xmlChar * text) -{ - Mstring comment((const char *)text); +void XMLParser::commentHandler(const xmlChar * text) { + Mstring comment((const char *) text); comment.removeWSfromBegin(); comment.removeWSfromEnd(); - if (comment.empty()) return; + if (comment.empty()) { + return; + } if (module->getActualXsdConstruct() == c_schema) { module->addMainType(c_annotation); module->setActualXsdConstruct(c_schema); // actualXsdConstruct was set to c_annotation } - if (module->hasDefinedMainType()) module->getLastMainType().addComment(comment); + if (module->hasDefinedMainType()) { + module->getLastMainType().addComment(comment); + } } -void XMLParser::characterdataHandler(const xmlChar * text, int length) -{ - if (suspended) return; +void XMLParser::characterdataHandler(const xmlChar * text, const int length) { + if (suspended) { + return; + } - char * temp = (char *)Malloc(length + 1); + char * temp = (char *) Malloc(length + 1); memcpy(temp, text, length); temp[length] = '\0'; Mstring comment(temp); @@ -339,16 +389,19 @@ void XMLParser::characterdataHandler(const xmlChar * text, int length) comment.removeWSfromBegin(); comment.removeWSfromEnd(); - if (comment.empty()) return; + if (comment.empty()) { + return; + } if (module->getActualXsdConstruct() == c_schema) { module->addMainType(c_annotation); } - if (module->hasDefinedMainType()) module->getLastMainType().addComment(comment); + if (module->hasDefinedMainType()) { + module->getLastMainType().addComment(comment); + } } -void XMLParser::fillUpActualTagName(const char * localname, tagMode mode) -{ +void XMLParser::fillUpActualTagName(const char * localname, const tagMode mode) { Mstring name_s(localname); if (name_s == "all") @@ -361,17 +414,17 @@ void XMLParser::fillUpActualTagName(const char * localname, tagMode mode) actualTagName = n_anyAttribute; else if (name_s == "appinfo") { actualTagName = n_appinfo; - switch (mode) - { - case startElement: - suspended = true; - break; - case endElement: - suspended = false; - break; + switch (mode) { + case startElement: + suspended = true; + break; + case endElement: + suspended = false; + break; + default: + break; } - } - else if (name_s == "attribute") + } else if (name_s == "attribute") actualTagName = n_attribute; else if (name_s == "attributeGroup") actualTagName = n_attributeGroup; @@ -398,12 +451,14 @@ void XMLParser::fillUpActualTagName(const char * localname, tagMode mode) Mstring("The 'field' tag is ignored by the standard.")); ++num_warnings; } - } - else if (name_s == "fractionDigits") { + } else if (name_s == "fractionDigits") { actualTagName = n_fractionDigits; - // silently ignored - } - else if (name_s == "group") + if (mode == startElement) { + printWarning(filename, xmlSAX2GetLineNumber(context), + Mstring("The 'fractionDigits' tag is currently not supported.")); + ++num_warnings; + } + } else if (name_s == "group") actualTagName = n_group; else if (name_s == "import") actualTagName = n_import; @@ -416,16 +471,14 @@ void XMLParser::fillUpActualTagName(const char * localname, tagMode mode) Mstring("The 'key' tag is ignored by the standard.")); ++num_warnings; } - } - else if (name_s == "keyref") { + } else if (name_s == "keyref") { actualTagName = n_keyref; if (mode == startElement) { printWarning(filename, xmlSAX2GetLineNumber(context), Mstring("The 'keyref' tag ignored by the standard.")); ++num_warnings; } - } - else if (name_s == "length") + } else if (name_s == "length") actualTagName = n_length; else if (name_s == "label") actualTagName = n_label; @@ -460,8 +513,7 @@ void XMLParser::fillUpActualTagName(const char * localname, tagMode mode) Mstring("The 'selector' tag ignored by the standard.")); ++num_warnings; } - } - else if (name_s == "sequence") + } else if (name_s == "sequence") actualTagName = n_sequence; else if (name_s == "simpleContent") actualTagName = n_simpleContent; @@ -478,13 +530,12 @@ void XMLParser::fillUpActualTagName(const char * localname, tagMode mode) Mstring("The 'unique' tag ignored by the standard.")); ++num_warnings; } - } - else if (name_s == "whiteSpace") + } else if (name_s == "whiteSpace") actualTagName = n_whiteSpace; } -void XMLParser::fillUpActualTagAttributes(const char ** attributes, int att_count) -{ +void XMLParser::fillUpActualTagAttributes(const char ** attributes, const int att_count) { + struct attribute_data { const char * name; const char * prefix; @@ -492,7 +543,7 @@ void XMLParser::fillUpActualTagAttributes(const char ** attributes, int att_coun const char * value_start; const char * value_end; }; - attribute_data * ad = (attribute_data *)attributes; + attribute_data * ad = (attribute_data *) attributes; Mstring * att_name_s = new Mstring[att_count]; Mstring * att_value_s = new Mstring[att_count]; @@ -508,8 +559,7 @@ void XMLParser::fillUpActualTagAttributes(const char ** attributes, int att_coun printWarning(filename, xmlSAX2GetLineNumber(context), Mstring("The 'abstract' attribute is currently not supported.")); ++num_warnings; - } - else if (att_name_s[i] == "attributeFormDefault") + } else if (att_name_s[i] == "attributeFormDefault") att_name_e[i] = a_attributeFormDefault; else if (att_name_s[i] == "base") att_name_e[i] = a_base; @@ -518,17 +568,15 @@ void XMLParser::fillUpActualTagAttributes(const char ** attributes, int att_coun printWarning(filename, xmlSAX2GetLineNumber(context), Mstring("The 'block' attribute is currently not supported.")); ++num_warnings; - } - else if (att_name_s[i] == "blockDefault") - ; - else if (att_name_s[i] == "default") + } else if (att_name_s[i] == "blockDefault"){ + att_name_e[i] = a_blockDefault; + } else if (att_name_s[i] == "default") att_name_e[i] = a_default; else if (att_name_s[i] == "elementFormDefault") att_name_e[i] = a_elementFormDefault; else if (att_name_s[i] == "final") { att_name_e[i] = a_final; // no effect on the output - } - else if (att_name_s[i] == "finalDefault") + } else if (att_name_s[i] == "finalDefault") ; else if (att_name_s[i] == "fixed") att_name_e[i] = a_fixed; @@ -557,18 +605,16 @@ void XMLParser::fillUpActualTagAttributes(const char ** attributes, int att_coun else if (att_name_s[i] == "processContents") { att_name_e[i] = a_processContents; // silently ignored - } - else if (att_name_s[i] == "ref") + } else if (att_name_s[i] == "ref") att_name_e[i] = a_ref; else if (att_name_s[i] == "schemaLocation") att_name_e[i] = a_schemaLocation; else if (att_name_s[i] == "substitutionGroup") { att_name_e[i] = a_substitutionGroup; - printWarning(filename, xmlSAX2GetLineNumber(context), - Mstring("The 'substitutionGroup' attribute is currently not supported.")); - ++num_warnings; - } - else if (att_name_s[i] == "targetNamespace") + //printWarning(filename, xmlSAX2GetLineNumber(context), + //Mstring("The 'substitutionGroup' attribute is currently not supported.")); + //++num_warnings; + } else if (att_name_s[i] == "targetNamespace") att_name_e[i] = a_targetNamespace; else if (att_name_s[i] == "type") att_name_e[i] = a_type; @@ -576,8 +622,8 @@ void XMLParser::fillUpActualTagAttributes(const char ** attributes, int att_coun att_name_e[i] = a_use; else if (att_name_s[i] == "value") att_name_e[i] = a_value; - else if (att_name_s[i] == "version") - {} + else if (att_name_s[i] == "version") { + } } actualTagAttributes.fillUp(att_name_e, att_value_s, att_count); delete [] att_name_s; @@ -587,37 +633,39 @@ void XMLParser::fillUpActualTagAttributes(const char ** attributes, int att_coun XMLParser::TagAttributes::TagAttributes(XMLParser * withThisParser) : parser(withThisParser) - , attributeFormDefault(notset) - , base() - , default_() - , elementFormDefault(notset) - , fixed() - , form(notset) - , id() - , itemType() - , maxOccurs(1) - , memberTypes() - , minOccurs(1) - , mixed(false) - , name() - , namespace_() - , nillable(false) - , ref() - , schemaLocation() - , source() - , targetNamespace() - , type() - , use(optional) - , value() - {} - -void XMLParser::TagAttributes::fillUp(TagAttributeName * att_name_e, Mstring * att_value_s, int att_count) -{ +, attributeFormDefault(notset) +, base() +, default_() +, elementFormDefault(notset) +, fixed() +, form(notset) +, id() +, itemType() +, maxOccurs(1) +, memberTypes() +, minOccurs(1) +, mixed(false) +, name() +, namespace_() +, nillable(false) +, ref() +, schemaLocation() +, source() +, targetNamespace() +, type() +, use(optional) +, value() { +} + +void XMLParser::TagAttributes::fillUp(TagAttributeName * att_name_e, Mstring * att_value_s, const int att_count) { /** * Reset */ + abstract = false; attributeFormDefault = notset; base.clear(); + block = not_set, + blockDefault = not_set, default_.clear(); elementFormDefault = notset; fixed.clear(); @@ -634,6 +682,7 @@ void XMLParser::TagAttributes::fillUp(TagAttributeName * att_name_e, Mstring * a ref.clear(); schemaLocation.clear(); source.clear(); + substitionGroup = empty_string; targetNamespace.clear(); type.clear(); use = optional; @@ -642,120 +691,149 @@ void XMLParser::TagAttributes::fillUp(TagAttributeName * att_name_e, Mstring * a * Upload */ for (int i = 0; i != att_count; ++i) { - switch (att_name_e[i]) - { - case a_abstract: // Not supported by now - break; - case a_attributeFormDefault: // qualified | unqualified - if (att_value_s[i] == "qualified") - attributeFormDefault = qualified; - else if (att_value_s[i] == "unqualified") - attributeFormDefault = unqualified; - break; - case a_base: // QName = anyURI + NCName - base = att_value_s[i]; - break; - case a_block: // Not supported by now - break; - case a_blockDefault: // Not supported by now - break; - case a_default: // string - default_ = att_value_s[i]; - break; - case a_elementFormDefault: - if (att_value_s[i] == "qualified") - elementFormDefault = qualified; - else if (att_value_s[i] == "unqualified") - elementFormDefault = unqualified; - break; - case a_final: // Not supported by now - break; - case a_finalDefault: // Not supported by now - break; - case a_fixed: // string - fixed = att_value_s[i]; - break; - case a_form: // qualified | unqualified - if (att_value_s[i] == "qualified") - form = qualified; - else if (att_value_s[i] == "unqualified") - form = unqualified; - break; - case a_lang: - break; - case a_id: // ID = NCName - id = att_value_s[i]; - break; - case a_itemType: // QName = anyURI + NCName /- used in 'list' tag only - itemType = att_value_s[i]; - break; - case a_maxOccurs: // nonNegativeinteger or 'unbounded' - if (att_value_s[i] == "unbounded") - maxOccurs = ULLONG_MAX; - else - maxOccurs = strtoull(att_value_s[i].c_str(), NULL, 0); - break; - case a_memberTypes: // list of QNames - used in 'union' tag only - memberTypes = att_value_s[i]; - break; - case a_minOccurs: // nonNegativeInteger - minOccurs = strtoull(att_value_s[i].c_str(), NULL, 0); - break; - case a_mixed: // true | false - if (att_value_s[i] == "true") - mixed = true; - else if (att_value_s[i] == "false") - mixed = false; - break; - case a_name: // NCName - name = att_value_s[i]; - break; - case a_namespace: // anyURI - namespace_ = att_value_s[i]; - break; - case a_nillable: // true | false - if (att_value_s[i] == "true") - nillable = true; - else if (att_value_s[i] == "false") - nillable = false; - break; - case a_processContents: // Not supported by now - break; - case a_ref: // QName = anyURI + NCName - ref = att_value_s[i]; - break; - case a_schemaLocation: // anyURI - schemaLocation = att_value_s[i]; - break; - case a_substitutionGroup: // Not supported by now - break; - case a_targetNamespace: // anyURI - targetNamespace = att_value_s[i]; - break; - case a_type: // QName = anyURI + NCName - type = att_value_s[i]; - break; - case a_use: // optional | prohibited | required - used in 'use' tag only - if (att_value_s[i] == "optional") - use = optional; - else if (att_value_s[i] == "prohibited") - use = prohibited; - else if (att_value_s[i] == "required") - use = required; - break; - case a_value: // value of FACETS - value = att_value_s[i]; - break; - case a_source: - case a_xpath: - case a_version: // Not supported by now - break; - case a_NOTSET: - break; - default: - fprintf(stderr, "Unknown TagAttributeName %d\n", att_name_e[i]); - abort(); - break; + switch (att_name_e[i]) { + case a_abstract: // Not supported by now + if (att_value_s[i] == "true") { + abstract = true; + } else if (att_value_s[i] == "false") { + abstract = false; + } + case a_attributeFormDefault: // qualified | unqualified + if (att_value_s[i] == "qualified") { + attributeFormDefault = qualified; + } else if (att_value_s[i] == "unqualified") { + attributeFormDefault = unqualified; + } + break; + case a_base: // QName = anyURI + NCName + base = att_value_s[i]; + break; + case a_block: // Not supported by now + if(att_value_s[i] == "#all"){ + block = all; + }else if(att_value_s[i] == "substitution"){ + block = substitution; + }else if(att_value_s[i] == "restriction"){ + block = restriction; + }else if(att_value_s[i] == "extension"){ + block = extension; + } + break; + case a_blockDefault: // Not supported by now + if(att_value_s[i] == "#all"){ + blockDefault = all; + }else if(att_value_s[i] == "substitution"){ + blockDefault = substitution; + }else if(att_value_s[i] == "restriction"){ + blockDefault = restriction; + }else if(att_value_s[i] == "extension"){ + blockDefault = extension; + } + break; + case a_default: // string + default_ = att_value_s[i]; + break; + case a_elementFormDefault: + if (att_value_s[i] == "qualified") { + elementFormDefault = qualified; + } else if (att_value_s[i] == "unqualified") { + elementFormDefault = unqualified; + } + break; + case a_final: // Not supported by now + break; + case a_finalDefault: // Not supported by now + break; + case a_fixed: // string + fixed = att_value_s[i]; + break; + case a_form: // qualified | unqualified + if (att_value_s[i] == "qualified") { + form = qualified; + } else if (att_value_s[i] == "unqualified") { + form = unqualified; + } + break; + case a_lang: + break; + case a_id: // ID = NCName + id = att_value_s[i]; + break; + case a_itemType: // QName = anyURI + NCName /- used in 'list' tag only + itemType = att_value_s[i]; + break; + case a_maxOccurs: // nonNegativeinteger or 'unbounded' + if (att_value_s[i] == "unbounded") { + maxOccurs = ULLONG_MAX; + } else { + maxOccurs = strtoull(att_value_s[i].c_str(), NULL, 0); + } + break; + case a_memberTypes: // list of QNames - used in 'union' tag only + memberTypes = att_value_s[i]; + break; + case a_minOccurs: // nonNegativeInteger + minOccurs = strtoull(att_value_s[i].c_str(), NULL, 0); + break; + case a_mixed: // true | false + if (att_value_s[i] == "true") { + mixed = true; + } else if (att_value_s[i] == "false") { + mixed = false; + } + break; + case a_name: // NCName + name = att_value_s[i]; + break; + case a_namespace: // anyURI + namespace_ = att_value_s[i]; + break; + case a_nillable: // true | false + if (att_value_s[i] == "true") { + nillable = true; + } else if (att_value_s[i] == "false") { + nillable = false; + } + break; + case a_processContents: // Not supported by now + break; + case a_ref: // QName = anyURI + NCName + ref = att_value_s[i]; + break; + case a_schemaLocation: // anyURI + schemaLocation = att_value_s[i]; + break; + case a_substitutionGroup: + substitionGroup = att_value_s[i]; + break; + case a_targetNamespace: // anyURI + targetNamespace = att_value_s[i]; + break; + case a_type: // QName = anyURI + NCName + type = att_value_s[i]; + break; + case a_use: // optional | prohibited | required - used in 'use' tag only + if (att_value_s[i] == "optional") { + use = optional; + } else if (att_value_s[i] == "prohibited") { + use = prohibited; + } else if (att_value_s[i] == "required") { + use = required; + } + break; + case a_value: // value of FACETS + value = att_value_s[i]; + break; + case a_source: + case a_xpath: + case a_version: // Not supported by now + break; + case a_NOTSET: + break; + default: + fprintf(stderr, "Unknown TagAttributeName %d\n", att_name_e[i]); + abort(); + break; } } } diff --git a/xsdconvert/XMLParser.hh b/xsdconvert/XMLParser.hh index 1a6a2e03f..980062ee6 100644 --- a/xsdconvert/XMLParser.hh +++ b/xsdconvert/XMLParser.hh @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -19,72 +19,16 @@ class TTCN3Module; -class XMLParser -{ +class XMLParser { public: /** * List of possible names of XSD tags */ - enum TagName - { - // XSD Elements: - n_all, - n_annotation, - n_any, - n_anyAttribute, - n_appinfo, - n_attribute, - n_attributeGroup, - n_choice, - n_complexContent, - n_complexType, - n_documentation, - n_element, - n_extension, - n_field, // Not supported by now - n_group, - n_import, - n_include, - n_key, // Not supported by now - n_keyref, // Not supported by now - n_list, - n_notation, // Not supported by now - n_redefine, - n_restriction, - n_schema, - n_selector, // Not supported by now - n_sequence, - n_simpleContent, - n_simpleType, - n_union, - n_unique, // Not supported by now - - // XSD Restrictions / Facets for Datatypes: - n_enumeration, - n_fractionDigits, // Not supported by now - n_length, - n_maxExclusive, - n_maxInclusive, - n_maxLength, - n_minExclusive, - n_minInclusive, - n_minLength, - n_pattern, - n_totalDigits, - n_whiteSpace, - - // Others - non-standard, but used: - n_label, // ??? - n_definition, // ??? - - n_NOTSET - }; /** * List of possible names of XSD tag attributes */ - enum TagAttributeName - { + enum TagAttributeName { a_abstract, // Not supported by now a_attributeFormDefault, a_base, @@ -121,18 +65,20 @@ public: a_NOTSET }; - class TagAttributes - { - TagAttributes (const TagAttributes &); // not implemented - TagAttributes & operator = (const TagAttributes &); // not implemented + class TagAttributes { + TagAttributes(const TagAttributes &); // not implemented + TagAttributes & operator=(const TagAttributes &); // not implemented public: XMLParser * parser; // not responsibility for the member /** * Members for storing actual values of attributes of an XML tag */ + bool abstract; FormValue attributeFormDefault; Mstring base; + BlockValue block; + BlockValue blockDefault; Mstring default_; FormValue elementFormDefault; Mstring fixed; @@ -149,24 +95,24 @@ public: Mstring ref; Mstring schemaLocation; Mstring source; + Mstring substitionGroup; Mstring targetNamespace; Mstring type; UseValue use; Mstring value; - TagAttributes (XMLParser * withThisParser); + TagAttributes(XMLParser * withThisParser); // Default destructor is used /** * Clear and fill up object with values of attributes of current XML tag */ - void fillUp (TagAttributeName * att_name_e, Mstring * att_value_s, int att_count); + void fillUp(TagAttributeName * att_name_e, Mstring * att_value_s, const int att_count); }; private: - enum tagMode - { + enum tagMode { startElement, endElement }; @@ -216,6 +162,9 @@ private: */ List<TagName> parentTagNames; + // Stack for keeping track if we are inside an annotation tag + List<TagName> inside_annotation; + static bool suspended; /** @@ -229,19 +178,19 @@ private: /** * Callback functions for LibXML SAX parser */ - void startelementHandler (const xmlChar * localname, int nb_namespaces, const xmlChar ** namespaces, int nb_attributes, const xmlChar ** attributes); - void endelementHandler (const xmlChar * localname); - void characterdataHandler (const xmlChar * text, int length); - void commentHandler (const xmlChar * text); + void startelementHandler(const xmlChar * localname, const int nb_namespaces, const xmlChar ** namespaces, int nb_attributes, const xmlChar ** attributes); + void endelementHandler(const xmlChar * localname); + void characterdataHandler(const xmlChar * text, const int length); + void commentHandler(const xmlChar * text); /** Callbacks cannot be member functions, use these static members as wrappers */ - static void wrapper_to_call_startelement_h (XMLParser *self, const xmlChar * localname, const xmlChar * prefix, const xmlChar * URI, int nb_namespaces, const xmlChar ** namespaces, int nb_attributes, int nb_defaulted, const xmlChar ** attributes); - static void wrapper_to_call_endelement_h (XMLParser *self, const xmlChar * localname, const xmlChar * prefix, const xmlChar * URI); - static void wrapper_to_call_characterdata_h (XMLParser *self, const xmlChar * ch, int len); - static void wrapper_to_call_comment_h (XMLParser *self, const xmlChar * value); + static void wrapper_to_call_startelement_h(XMLParser *self, const xmlChar * localname, const xmlChar * prefix, const xmlChar * URI, int nb_namespaces, const xmlChar ** namespaces, int nb_attributes, int nb_defaulted, const xmlChar ** attributes); + static void wrapper_to_call_endelement_h(XMLParser *self, const xmlChar * localname, const xmlChar * prefix, const xmlChar * URI); + static void wrapper_to_call_characterdata_h(XMLParser *self, const xmlChar * ch, int len); + static void wrapper_to_call_comment_h(XMLParser *self, const xmlChar * value); - static void warningHandler (void * ctx, const char * msg, ...); - static void errorHandler (void * ctx, const char * msg, ...); + static void warningHandler(void * ctx, const char * msg, ...); + static void errorHandler(void * ctx, const char * msg, ...); /** * Converts name of read tag to enumerated value @@ -250,45 +199,73 @@ private: * mode argument indicates that it is called when * startelement or endelement arrived */ - void fillUpActualTagName (const char * localname, tagMode mode); + void fillUpActualTagName(const char * localname, const tagMode mode); /** * Converts name and value of attributes of read tag * and fill actualTagAttributes object with current values */ - void fillUpActualTagAttributes (const char ** attributes, int att_count); + void fillUpActualTagAttributes(const char ** attributes, const int att_count); - XMLParser (const XMLParser &); // not implemented - XMLParser & operator = (const XMLParser &); // not implemented + XMLParser(const XMLParser &); // not implemented + XMLParser & operator=(const XMLParser &); // not implemented public: - XMLParser (const char * a_filename); - ~XMLParser (); + XMLParser(const char * a_filename); + ~XMLParser(); /** * After an XMLParser object is born * there is need to connect it with a TTCN3Module object * for loading the read data into it */ - void connectWithModule (TTCN3Module * a_module); + void connectWithModule(TTCN3Module * a_module); /** * Start syntax checking, validation and parse */ - void checkSyntax (); - void validate (); - void startConversion (TTCN3Module * a_module); - - static unsigned int getNumErrors () {return num_errors;} - static unsigned int getNumWarnings () {return num_warnings;} - static void incrNumErrors () {++num_errors;} - static void incrNumWarnings () {++num_warnings;} - - const Mstring & getFilename () const {return filename;} - int getActualLineNumber () const {return xmlSAX2GetLineNumber(context);} - int getActualDepth () const {return actualDepth;} - TagName getActualTagName () const {return actualTagName;} - TagName getParentTagName () {return parentTagNames.empty() ? n_NOTSET : parentTagNames.back();} - const TagAttributes & getActualTagAttributes () const {return actualTagAttributes;} + void checkSyntax(); + void validate(); + void startConversion(TTCN3Module * a_module); + + static unsigned int getNumErrors() { + return num_errors; + } + + static unsigned int getNumWarnings() { + return num_warnings; + } + + static void incrNumErrors() { + ++num_errors; + } + + static void incrNumWarnings() { + ++num_warnings; + } + + const Mstring & getFilename() const { + return filename; + } + + int getActualLineNumber() const { + return xmlSAX2GetLineNumber(context); + } + + int getActualDepth() const { + return actualDepth; + } + + TagName getActualTagName() const { + return actualTagName; + } + + TagName getParentTagName() const { + return parentTagNames.empty() ? n_NOTSET : parentTagNames.back(); + } + + const TagAttributes & getActualTagAttributes() const { + return actualTagAttributes; + } }; #endif /* PARSER_HH_ */ diff --git a/xsdconvert/converter.cc b/xsdconvert/converter.cc index 862ada50a..02bbc555d 100644 --- a/xsdconvert/converter.cc +++ b/xsdconvert/converter.cc @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000-2014 Ericsson Telecom AB +// Copyright (c) 2000-2015 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 @@ -21,6 +21,7 @@ bool c_flag_used = false; int d_flag_used = 0; bool e_flag_used = false; bool f_flag_used = false; +bool g_flag_used = true; bool p_flag_used = false; bool s_flag_used = false; bool t_flag_used = false; @@ -32,19 +33,18 @@ bool z_flag_used = false; static void printProductinfo(); static void printUsage(const char * argv0); static void printVersion(); -static void printErrorStatistics(unsigned int errors, unsigned int warnings); +static void printErrorStatistics(const unsigned int errors, const unsigned int warnings); static bool generatePredefinedModules(); static char **readModulesFromFile(const char *from_file, int *last_module); -static int checkSyntax(bool not_verbose, int first_module, int last_module, - const char * const * const module_names); -static int validate(int first_module, int last_module, - const char * const * const module_names); -static int generateCode(bool quiet, bool need_predefined, - int first_module, int last_module, - const char * const * const module_names); - -int main(int argc, char **argv) -{ +static int checkSyntax(const bool not_verbose, const int first_module, const int last_module, + const char * const * const module_names); +static int validate(int const first_module, int const last_module, + const char * const * const module_names); +static int generateCode(const bool quiet, const bool need_predefined, + const int first_module, const int last_module, + const char * const * const module_names); + +int main(int argc, char **argv) { if (argc == 1) { printProductinfo(); printUsage(argv[0]); @@ -56,144 +56,148 @@ int main(int argc, char **argv) char c; opterr = 0; - while ((c = getopt(argc, argv, "cdef:pqstvwxz")) != -1) - { - switch(c) - { - case 'c': - c_flag_used = true; - break; - case 'd': - ++d_flag_used; - break; - case 'e': - e_flag_used = true; - break; - case 'f': - f_flag_used = true; - from_file = optarg; - break; - case 'p': - p_flag_used = true; - break; - case 's': - s_flag_used = true; - break; - case 't': - t_flag_used = true; - break; - case 'v': - printProductinfo(); - printVersion(); + while ((c = getopt(argc, argv, "cdef:gpqstvwxz")) != -1) { + switch (c) { + case 'c': + c_flag_used = true; + break; + case 'd': + ++d_flag_used; + break; + case 'e': + e_flag_used = true; + break; + case 'f': + f_flag_used = true; + from_file = optarg; + break; + case 'g': + g_flag_used = false; + break; + case 'p': + p_flag_used = true; + break; + case 's': + s_flag_used = true; + break; + case 't': + t_flag_used = true; + break; + case 'v': + printProductinfo(); + printVersion(); #ifdef LICENSE - print_license_info(); + print_license_info(); #endif - return EXIT_SUCCESS; - case 'q': - q_flag_used = true; - break; - case 'w': - w_flag_used = true; - break; - case 'x': - x_flag_used = true; - break; - case 'z': - z_flag_used = true; - break; - default: - fprintf(stderr, "ERROR:\nInvalid option: -%c!\n", char(optopt)); - printUsage(argv[0]); - return EXIT_FAILURE; + return EXIT_SUCCESS; + case 'q': + q_flag_used = true; + break; + case 'w': + w_flag_used = true; + break; + case 'x': + x_flag_used = true; + break; + case 'z': + z_flag_used = true; + break; + default: + fprintf(stderr, "ERROR:\nInvalid option: -%c!\n", char(optopt)); + printUsage(argv[0]); + return EXIT_FAILURE; } } - int first_module = f_flag_used ? 0 : optind, - last_module = f_flag_used ? 0 : argc; + int first_module = f_flag_used ? 0 : optind; + int last_module = f_flag_used ? 0 : argc; char **module_names = f_flag_used ? NULL : argv; - - if (f_flag_used) { - // Idea from CR_TR00015706. - module_names = readModulesFromFile(from_file, &last_module); - if (!module_names) { - fprintf(stderr, "ERROR: The file `%s' holding the XSD files cannot be " - "processed!\n", from_file); - goto error; + try { + if (f_flag_used) { + // Idea from CR_TR00015706. + module_names = readModulesFromFile(from_file, &last_module); + if (!module_names) { + fprintf(stderr, "ERROR: The file `%s' holding the XSD files cannot be " + "processed!\n", from_file); + throw 1; + } } - } - if (last_module - first_module <= 0) { - fprintf(stderr, "ERROR:\nNo module name was specified!\n"); - printUsage(argv[0]); - goto error; - } + if (last_module - first_module <= 0) { + fprintf(stderr, "ERROR:\nNo module name was specified!\n"); + printUsage(argv[0]); + throw 1; + } #ifdef LICENSE - { - init_openssl(); - license_struct lstr; - load_license (&lstr); - int license_valid = verify_license(&lstr); - free_license (&lstr); - free_openssl(); - if (!license_valid) { - exit(EXIT_FAILURE); + { + init_openssl(); + license_struct lstr; + load_license(&lstr); + int license_valid = verify_license(&lstr); + free_license(&lstr); + free_openssl(); + if (!license_valid) { + exit(EXIT_FAILURE); + } } - } #endif - for (int i = first_module; i < last_module; ++i) { - if (!fopen(module_names[i], "r")) { - fprintf(stderr, "ERROR:\nInput file `%s' does not exist.\n", - module_names[i]); - goto error; + for (int i = first_module; i < last_module; ++i) { + if (!fopen(module_names[i], "r")) { + fprintf(stderr, "ERROR:\nInput file `%s' does not exist.\n", + module_names[i]); + throw 1; + } } - } - if (checkSyntax(q_flag_used, first_module, last_module, module_names) == EXIT_FAILURE) - goto error; + if (checkSyntax(q_flag_used, first_module, last_module, module_names) == EXIT_FAILURE) { + throw 1; + } - if (validate(first_module, last_module, module_names) == EXIT_FAILURE) - goto error; + if (validate(first_module, last_module, module_names) == EXIT_FAILURE) { + throw 1; + } - if (s_flag_used) { - printErrorStatistics(XMLParser::getNumErrors(), - XMLParser::getNumWarnings()); - if (XMLParser::getNumErrors() > 0) - goto error; - return EXIT_SUCCESS; - } + if (s_flag_used) { + printErrorStatistics(XMLParser::getNumErrors(), + XMLParser::getNumWarnings()); + if (XMLParser::getNumErrors() > 0) { + throw 1; + } + return EXIT_SUCCESS; + } - if (generateCode(q_flag_used, p_flag_used, first_module, last_module, - module_names) == EXIT_FAILURE) - goto error; + if (generateCode(q_flag_used, p_flag_used, first_module, last_module, + module_names) == EXIT_FAILURE) { + throw 1; + } + } catch (int) { + if (f_flag_used) { + for (int i = 0; i < last_module; ++i) { + Free(module_names[i]); + } + Free(module_names); + } + return EXIT_FAILURE; + } if (XMLParser::getNumWarnings() > 0 || - TTCN3ModuleInventory::getNumErrors() > 0 || - TTCN3ModuleInventory::getNumWarnings() > 0) { + TTCN3ModuleInventory::getNumErrors() > 0 || + TTCN3ModuleInventory::getNumWarnings() > 0) { printErrorStatistics(TTCN3ModuleInventory::getNumErrors(), XMLParser::getNumWarnings() + TTCN3ModuleInventory::getNumWarnings()); } return EXIT_SUCCESS; - -error: - if (f_flag_used) { - for (int i = 0; i < last_module; ++i) - Free(module_names[i]); - Free(module_names); - } - return EXIT_FAILURE; } -static void printProductinfo() -{ +static void printProductinfo() { fputs("XSD to TTCN-3 Converter for the TTCN-3 Test Executor, version " PRODUCT_NUMBER "\n", stderr); } -static void printUsage(const char * argv0) -{ +static void printUsage(const char * argv0) { fprintf(stderr, "\n" "usage: %s [-cepstVwx] [-f file] schema.xsd ...\n" " or %s -v\n" @@ -202,6 +206,7 @@ static void printUsage(const char * argv0) " -c: disable the generation of comments in TTCN-3 modules\n" " -e: disable the generation of encoding instructions in TTCN-3 modules\n" " -f file: the names of XSD files are taken from file instead of the command line\n" + " -g: generate TTCN-3 code disallowing element substitution\n" " -p: do not generate the UsefulTtcn3Types and XSD predefined modules\n" " -q: quiet mode - disable the issue of status messages\n" " -s: parse and validate only - no TTCN-3 module generation\n" @@ -213,81 +218,85 @@ static void printUsage(const char * argv0) , argv0, argv0); } -static void printVersion() -{ +static void printVersion() { fputs("Product number: " PRODUCT_NUMBER "\n" "Build date: " __DATE__ " " __TIME__ "\n" "Compiled with: " C_COMPILER_VERSION "\n\n" COPYRIGHT_STRING "\n\n", stderr); } -static void printErrorStatistics(unsigned int errors, unsigned int warnings) -{ +static void printErrorStatistics(const unsigned int errors, const unsigned int warnings) { if (errors == 0) { - if (warnings == 0) + if (warnings == 0) { fprintf(stderr, "Notify: No errors or warnings were detected.\n"); - else + } else { fprintf(stderr, "Notify: No errors and %u warning%s were detected.\n", warnings, warnings > 1 ? "s" : ""); - } - else { - if (warnings == 0) + } + } else { + if (warnings == 0) { fprintf(stderr, "Notify: %u error%s and no warnings were detected.\n", errors, errors > 1 ? "s" : ""); - else + } else { fprintf(stderr, "Notify: %u error%s and %u warning%s were detected.\n", errors, errors > 1 ? "s" : "", - warnings, - warnings > 1 ? "s" : ""); + warnings, + warnings > 1 ? "s" : ""); + } } } -static bool generatePredefinedModules() -{ - struct stat stFileInfo; - // FIXME: Regenerate only the missing file. - if (stat("UsefulTtcn3Types.ttcn", &stFileInfo) == 0 && - stat("XSD.ttcn", &stFileInfo) == 0) +static bool checkFailure() { + if (TTCN3ModuleInventory::getNumErrors() > 0) { + printErrorStatistics(TTCN3ModuleInventory::getNumErrors(), + XMLParser::getNumWarnings() + TTCN3ModuleInventory::getNumWarnings()); return true; - - extern const char *moduleUsefulTtcn3Types; - extern const char *moduleXSD; - - FILE *fileUsefulTtcn3Types = fopen("UsefulTtcn3Types.ttcn", "w"); - FILE *fileXsd = fopen("XSD.ttcn", "w"); - - if (fileUsefulTtcn3Types == NULL) { - fprintf(stderr, "ERROR:\nCannot create file UsefulTtcn3Types.ttcn!\n"); - return false; - } - if (fileXsd == NULL) { - fprintf(stderr, "ERROR:\nCannot create file XSD.ttcn!\n"); + } else { return false; } +} - fprintf(fileUsefulTtcn3Types, "%s", moduleUsefulTtcn3Types); - fprintf(fileXsd, "%s", moduleXSD); - - if (!q_flag_used) { - fprintf(stderr, "Notify: File \'UsefulTtcn3Types.ttcn\' was generated.\n"); - fprintf(stderr, "Notify: File \'XSD.ttcn\' was generated.\n"); +static bool generatePredefinedModules() { + struct stat stFileInfo; + // Only generate the missing predefined modules. + if (stat("UsefulTtcn3Types.ttcn", &stFileInfo) != 0) { + extern const char *moduleUsefulTtcn3Types; + FILE *fileUsefulTtcn3Types = fopen("UsefulTtcn3Types.ttcn", "w"); + if (fileUsefulTtcn3Types == NULL) { + fprintf(stderr, "ERROR:\nCannot create file UsefulTtcn3Types.ttcn!\n"); + return false; + } + fprintf(fileUsefulTtcn3Types, "%s", moduleUsefulTtcn3Types); + if (!q_flag_used) { + fprintf(stderr, "Notify: File \'UsefulTtcn3Types.ttcn\' was generated.\n"); + } + fclose(fileUsefulTtcn3Types); } - fclose(fileUsefulTtcn3Types); - fclose(fileXsd); - + if (stat("XSD.ttcn", &stFileInfo) != 0) { + extern const char *moduleXSD; + FILE *fileXsd = fopen("XSD.ttcn", "w"); + if (fileXsd == NULL) { + fprintf(stderr, "ERROR:\nCannot create file XSD.ttcn!\n"); + return false; + } + fprintf(fileXsd, "%s", moduleXSD); + if (!q_flag_used) { + fprintf(stderr, "Notify: File \'XSD.ttcn\' was generated.\n"); + } + fclose(fileXsd); + } return true; } -static char **readModulesFromFile(const char *from_file, int *last_module) -{ +static char **readModulesFromFile(const char *from_file, int *last_module) { FILE *input = fopen(from_file, "r"); if (!input) return NULL; // It should be a relatively small file. @@ -295,11 +304,11 @@ static char **readModulesFromFile(const char *from_file, int *last_module) size_t input_bytes = ftell(input); rewind(input); size_t buf_len = input_bytes + 1; // sizeof(char)==1 by definition - char *buf = (char *)Malloc(buf_len); + char *buf = (char *) Malloc(buf_len); buf[buf_len - 1] = 0; size_t bytes_read = fread(buf, 1, input_bytes, input); fclose(input); - if ((size_t)input_bytes != bytes_read) { + if ((size_t) input_bytes != bytes_read) { Free(buf); return NULL; } @@ -310,7 +319,7 @@ static char **readModulesFromFile(const char *from_file, int *last_module) while (name) { if (!strlen(name)) continue; - ret_val = (char **)Realloc(ret_val, sizeof(char *) * ++(*last_module)); + ret_val = (char **) Realloc(ret_val, sizeof (char *) * ++(*last_module)); ret_val[*last_module - 1] = mcopystr(name); name = strtok(NULL, delim); } @@ -318,32 +327,30 @@ static char **readModulesFromFile(const char *from_file, int *last_module) return ret_val; } -static int checkSyntax(bool not_verbose, int first_module, int last_module, - const char * const * const module_names) -{ - if (!not_verbose) +static int checkSyntax(const bool not_verbose, const int first_module, const int last_module, + const char * const * const module_names) { + if (!not_verbose) { fprintf(stderr, "Notify: Checking documents...\n"); + } for (int i = first_module; i < last_module; ++i) { - if (!not_verbose) + if (!not_verbose) { fprintf(stderr, "Notify: Parsing XML schema document `%s'...\n", - module_names[i]); + module_names[i]); + } XMLParser syntaxchecker(module_names[i]); syntaxchecker.checkSyntax(); } if (XMLParser::getNumErrors() > 0) { printErrorStatistics(XMLParser::getNumErrors(), - XMLParser::getNumWarnings()); + XMLParser::getNumWarnings()); return EXIT_FAILURE; } return EXIT_SUCCESS; } -typedef List<QualifiedName> QualifiedNames; - -static int generateCode(bool quiet, bool need_predefined, - int first_module, int last_module, - const char * const * const module_names) -{ +static int generateCode(const bool quiet, const bool need_predefined, + const int first_module, const int last_module, + const char * const * const module_names) { TTCN3ModuleInventory& modules = TTCN3ModuleInventory::getInstance(); for (int i = first_module; i < last_module; ++i) { XMLParser parser(module_names[i]); @@ -354,7 +361,7 @@ static int generateCode(bool quiet, bool need_predefined, if (XMLParser::getNumErrors() > 0) { printErrorStatistics(XMLParser::getNumErrors(), - XMLParser::getNumWarnings()); + XMLParser::getNumWarnings()); return EXIT_FAILURE; } @@ -368,44 +375,45 @@ static int generateCode(bool quiet, bool need_predefined, modules.nameConversion(); modules.finalModification(); - if (d_flag_used > 0) modules.dump(); + if (d_flag_used > 0) { + modules.dump(); + } - if (TTCN3ModuleInventory::getNumErrors() > 0) { - printErrorStatistics(TTCN3ModuleInventory::getNumErrors(), - XMLParser::getNumWarnings() + TTCN3ModuleInventory::getNumWarnings()); + if (checkFailure()) { return EXIT_FAILURE; } - if (!quiet) + if (!quiet) { fprintf(stderr, "Notify: Generating TTCN-3 modules...\n"); + } modules.moduleGeneration(); - if (TTCN3ModuleInventory::getNumErrors() > 0) { - printErrorStatistics(TTCN3ModuleInventory::getNumErrors(), - XMLParser::getNumWarnings() + TTCN3ModuleInventory::getNumWarnings()); + if (checkFailure()) { return EXIT_FAILURE; } - if (!need_predefined) - if (!generatePredefinedModules()) + if (!need_predefined) { + if (!generatePredefinedModules()) { return EXIT_FAILURE; + } + } return EXIT_SUCCESS; } -static int validate(int first_module, int last_module, - const char * const * const module_names) -{ +static int validate(const int first_module, const int last_module, + const char * const * const module_names) { for (int i = first_module; i < last_module; ++i) { XMLParser validator(module_names[i]); validator.validate(); } if (XMLParser::getNumErrors() > 0) { printErrorStatistics(XMLParser::getNumErrors(), - XMLParser::getNumWarnings()); + XMLParser::getNumWarnings()); return EXIT_FAILURE; } return EXIT_SUCCESS; } -reffer::reffer(const char*) {} +reffer::reffer(const char*) { +} -- GitLab